summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sbin/GridFuncStuff.pl412
1 files changed, 149 insertions, 263 deletions
diff --git a/lib/sbin/GridFuncStuff.pl b/lib/sbin/GridFuncStuff.pl
index d1972ddf..72bb696f 100644
--- a/lib/sbin/GridFuncStuff.pl
+++ b/lib/sbin/GridFuncStuff.pl
@@ -8,7 +8,7 @@
# @enddesc
# @version $Id$
#@@*/
-
+use strict;
#/*@@
# @routine CreateVariableBindings
@@ -21,14 +21,13 @@
sub CreateVariableBindings
{
my($bindings_dir, $rhinterface_db, $rhparameter_db) = @_;
- my(@data);
- my($thorn, $line, $block, $filelist);
+ my @data = ();
if(! -d $bindings_dir)
{
mkdir("$bindings_dir", 0755) || die "Unable to create $bindings_dir";
}
- $start_dir = `pwd`;
+ my $start_dir = `pwd`;
chdir $bindings_dir;
# Create the header files
@@ -37,11 +36,11 @@ sub CreateVariableBindings
mkdir("include", 0755) || die "Unable to create include directory";
}
- foreach $thorn (split(" ",$rhinterface_db->{"THORNS"}))
+ foreach my $thorn (split(" ",$rhinterface_db->{"THORNS"}))
{
- @data = &CreateThornArgumentHeaderFile($thorn, $rhinterface_db);
- $dataout = join ("\n", @data);
- &WriteFile("include/$thorn\_arguments.h",\$dataout);
+ @data = CreateThornArgumentHeaderFile($thorn, $rhinterface_db);
+ my $dataout = join ("\n", @data);
+ WriteFile("include/$thorn\_arguments.h",\$dataout);
}
@data = ();
@@ -130,7 +129,7 @@ sub CreateVariableBindings
push(@data, '#define DECLARE_CCTK_ARGUMENTS DECLARE_CCTK_FARGUMENTS');
push(@data, '#endif');
- foreach $thorn (split(" ",$rhinterface_db->{"THORNS"}))
+ foreach my $thorn (split(" ",$rhinterface_db->{"THORNS"}))
{
push(@data, '');
push(@data, "#ifdef THORN_IS_$thorn");
@@ -143,15 +142,15 @@ sub CreateVariableBindings
}
push(@data, "\n"); # workaround for perl 5.004_04 to add a trailing newline
- $dataout = join ("\n", @data);
- &WriteFile("include/cctk_Arguments.h",\$dataout);
+ my $dataout = join ("\n", @data);
+ WriteFile("include/cctk_Arguments.h",\$dataout);
if(! -d "Variables")
{
mkdir("Variables", 0755) || die "Unable to create Variables directory";
}
- $filelist = "BindingsVariables.c";
+ my $filelist = "BindingsVariables.c";
@data = ();
push(@data, '/*@@');
@@ -168,7 +167,7 @@ sub CreateVariableBindings
push(@data, '#include "cctk_ActiveThorns.h"');
push(@data, '');
- foreach $thorn (split(" ",$rhinterface_db->{"THORNS"}))
+ foreach my $thorn (split(" ",$rhinterface_db->{"THORNS"}))
{
push(@data, "int CactusBindingsVariables_${thorn}_Initialise(void);");
}
@@ -179,7 +178,7 @@ sub CreateVariableBindings
push(@data, 'int CCTKi_BindingsVariablesInitialise(void)');
push(@data, '{');
- foreach $thorn (split(" ",$rhinterface_db->{"THORNS"}))
+ foreach my $thorn (split(" ",$rhinterface_db->{"THORNS"}))
{
push(@data, " if (CCTK_IsThornActive(\"$thorn\"))");
push(@data, ' {');
@@ -191,10 +190,10 @@ sub CreateVariableBindings
push(@data, '}');
push(@data, "\n"); # workaround for perl 5.004_04 to add a trailing newline
- $dataout = join ("\n", @data);
- &WriteFile("Variables/BindingsVariables.c",\$dataout);
+ my $dataout = join ("\n", @data);
+ WriteFile("Variables/BindingsVariables.c",\$dataout);
- foreach $thorn (split(" ",$rhinterface_db->{"THORNS"}))
+ foreach my $thorn (split(" ",$rhinterface_db->{"THORNS"}))
{
@data = ();
push(@data, '/*@@');
@@ -246,32 +245,37 @@ sub CreateVariableBindings
push(@data, "int CactusBindingsVariables_${thorn}_Initialise(void)");
push(@data, '{');
- push(@data, ' int warn_mixeddim_gfs;');
+ push(@data, ' const char * warn_mixeddim_gfs = "";');
+ push(@data, ' int warn_mixeddim = 0;');
push(@data, ' const CCTK_INT *allow_mixeddim_gfs;');
push(@data, '');
push(@data, '');
- push(@data, ' warn_mixeddim_gfs = 0;');
push(@data, ' allow_mixeddim_gfs = CCTK_ParameterGet ("allow_mixeddim_gfs", "Cactus", 0);');
push(@data, '');
- foreach $block ("PUBLIC", "PROTECTED", "PRIVATE")
+ foreach my $block ("PUBLIC", "PROTECTED", "PRIVATE")
{
- push(@data, &CreateThornGroupInitialisers($thorn, $block, $rhinterface_db, $rhparameter_db));
+ push(@data, CreateThornGroupInitialisers($thorn, $block, $rhinterface_db, $rhparameter_db));
}
push(@data, '');
- push(@data, ' if (warn_mixeddim_gfs)');
+ push(@data, ' if (strlen (warn_mixeddim_gfs) > 0)');
push(@data, ' {');
push(@data, ' if (allow_mixeddim_gfs && *allow_mixeddim_gfs)');
push(@data, ' {');
push(@data, ' CCTK_VWarn (2, __LINE__, __FILE__, "Cactus",');
push(@data, ' "CCTKi_CreateGroup: Working dimension already set, "');
- push(@data, " \"creating GF group '$group' with different dimension $rhinterface_db->{\"\U$thorn GROUP $group\E DIM\"}\");");
+ push(@data, ' "'
+ . "creating GF group \%s with different dimension \%d\",");
+ push(@data, ' warn_mixeddim_gfs, warn_mixeddim);');
+
push(@data, ' }');
push(@data, ' else');
push(@data, ' {');
push(@data, ' CCTK_VWarn (0, __LINE__, __FILE__, "Cactus",');
push(@data, ' "CCTKi_CreateGroup: Working dimension already set,"');
- push(@data, " \" cannot create GF group $group with dimension $rhinterface_db->{\"\U$thorn GROUP $group\E DIM\"}\");");
+ push(@data, ' "'
+ . "cannot create GF group \%s with dimension \%d\",");
+ push(@data, ' warn_mixeddim_gfs, warn_mixeddim);');
push(@data, ' }');
push(@data, ' }');
push(@data, '');
@@ -282,28 +286,14 @@ sub CreateVariableBindings
push(@data, '}');
push(@data, "\n"); # workaround for perl 5.004_04 to add a trailing newline
- $dataout = join ("\n", @data);
- &WriteFile("Variables/$thorn.c",\$dataout);
+ my $dataout = join ("\n", @data);
+ WriteFile("Variables/$thorn.c",\$dataout);
$filelist .= " $thorn.c";
}
-# TR 24 Jan 2003
-# Fortran wrappers are now defined and registered in "Variables/$thorn.c"
-#
-# foreach $thorn (split(" ",$rhinterface_db->{"THORNS"}))
-# {
-# @data = &CreateThornFortranWrapper($thorn);
-# push(@data, "\n"); # workaround for perl 5.004_04 to add a trailing newline
-#
-# $dataout = join ("\n", @data);
-# &WriteFile("Variables/$thorn\_FortranWrapper.c",\$dataout);
-#
-# $filelist .= " $thorn\_FortranWrapper.c";
-# }
-
$dataout = "SRCS = $filelist\n";
- &WriteFile("Variables/make.code.defn",\$dataout);
+ WriteFile("Variables/make.code.defn",\$dataout);
chdir $start_dir;
}
@@ -321,11 +311,10 @@ sub CreateVariableBindings
sub GetThornArguments
{
my($this_thorn, $block, $rhinterface_db) = @_;
- my(%arguments);
- my(@other_imps);
- my($my_imp, $imp, $thorn, $group, $variable, $vtype, $gtype, $type);
+ my %arguments = ();
+ my @other_imps = ();
- $my_imp = $rhinterface_db->{"\U$this_thorn IMPLEMENTS"};
+ my $my_imp = $rhinterface_db->{"\U$this_thorn IMPLEMENTS"};
if($block eq "PUBLIC")
{
@@ -344,14 +333,14 @@ sub GetThornArguments
die "Unknown block type $block!!!\n";
}
-# print "Thorn is $this_thorn, implementation $my_imp, block is $block\n";
-# print "Other imps are @other_imps\n";
-
- foreach $imp (@other_imps,$my_imp)
+ my $sep = '';
+ foreach my $imp (@other_imps,$my_imp)
{
next if (! defined $imp);
+ my $thorn;
+
if ($block eq "PRIVATE")
{
$thorn = $this_thorn;
@@ -363,13 +352,13 @@ sub GetThornArguments
$thorn = $1;
}
- foreach $group (split(" ",$rhinterface_db->{"\U$thorn $block GROUPS\E"}))
+ foreach my $group (split(" ",$rhinterface_db->{"\U$thorn $block GROUPS\E"}))
{
- $vtype = $rhinterface_db->{"\U$thorn GROUP $group VTYPE\E"};
- $gtype = $rhinterface_db->{"\U$thorn GROUP $group GTYPE\E"};
- $ntimelevels = $rhinterface_db->{"\U$thorn GROUP $group TIMELEVELS\E"};
+ my $vtype = $rhinterface_db->{"\U$thorn GROUP $group VTYPE\E"};
+ my $gtype = $rhinterface_db->{"\U$thorn GROUP $group GTYPE\E"};
+ my $ntimelevels = $rhinterface_db->{"\U$thorn GROUP $group TIMELEVELS\E"};
- $type = "$vtype";
+ my $type = "$vtype";
my $vararraysize = $rhinterface_db->{"\U$thorn GROUP $group\E VARARRAY_SIZE"};
my $compactgroup = $rhinterface_db->{"\U$thorn GROUP $group\E COMPACT"};
@@ -388,7 +377,7 @@ sub GetThornArguments
$sep = '';
}
- for($dim =0; $dim < $rhinterface_db->{"\U$thorn GROUP $group DIM\E"}; $dim++)
+ for(my $dim =0; $dim < $rhinterface_db->{"\U$thorn GROUP $group DIM\E"}; $dim++)
{
# FIXME: quick hack to shorten argument names
# $type .= "${sep}cctkv$dim$group";
@@ -446,9 +435,7 @@ sub GetThornArguments
$type .= '!';
}
-# print "Group is $group, resulting type is $type\n";
-
- foreach $variable (split(" ", $rhinterface_db->{"\U$thorn GROUP $group\E"}))
+ foreach my $variable (split(" ", $rhinterface_db->{"\U$thorn GROUP $group\E"}))
{
$arguments{$variable} = $type;
}
@@ -470,11 +457,10 @@ sub GetThornArguments
sub CreateFortranArgumentDeclarations
{
my(%arguments) = @_;
- my($argument);
my(@declarations) = ();
# Put all storage arguments first.
- foreach $argument (sort keys %arguments)
+ foreach my $argument (sort keys %arguments)
{
if($arguments{$argument} =~ m:STORAGESIZE|GROUPLENGTH:)
{
@@ -483,19 +469,17 @@ sub CreateFortranArgumentDeclarations
}
# Now deal with the rest of the arguments
- foreach $argument (sort keys %arguments)
+ foreach my $argument (sort keys %arguments)
{
next if ($arguments{$argument} =~ m:STORAGESIZE|GROUPLENGTH:);
$arguments{$argument} =~ m:^([^! ]+) ?([^!]*)?!([^!]*)!([^!]*):;
- $type = $1;
- $dimensions = $2;
- $ntimelevels = $4;
+ my $type = $1;
+ my $dimensions = $2;
+ my $ntimelevels = $4;
-# print "var $argument - type \"$arguments{$argument}\" - tl $ntimelevels \n";
-
- for($level = 0; $level < $ntimelevels; $level++)
+ for(my $level = 0; $level < $ntimelevels; $level++)
{
push(@declarations, "CCTK_$type $argument$dimensions");
@@ -505,7 +489,7 @@ sub CreateFortranArgumentDeclarations
if(! $type =~ /^(BYTE|INT|INT1|INT2|INT4|INT8|REAL|REAL4|REAL8|REAL16|COMPLEX|COMPLEX8|COMPLEX16|COMPLEX32)$/)
{
- &CST_error(0,"Unknown argument type \"$type\"","",__LINE__,__FILE__);
+ CST_error(0,"Unknown argument type \"$type\"","",__LINE__,__FILE__);
}
}
push(@declarations, '');
@@ -526,23 +510,22 @@ sub CreateFortranArgumentDeclarations
sub CreateCArgumentDeclarations
{
my(%arguments) = @_;
- my($varname, $imp, $type, $fullname, $ntimelevels);
my(@declarations) = ();
# Now deal with the rest of the arguments
- foreach $varname (sort keys %arguments)
+ foreach my $varname (sort keys %arguments)
{
next if ($arguments{$varname} =~ m:STORAGESIZE|GROUPLENGTH:);
$arguments{$varname} =~ m\^([^! ]+) ?([^!]*)?!([^!]*)::([^!]*)!([^!]*)!([^!]*)\;
- $type = $1;
- $implementation = "\U\"$3\"";
- $ntimelevels = $5;
- $var = "\"$varname$6\"";
+ my $type = $1;
+ my $implementation = "\U\"$3\"";
+ my $ntimelevels = $5;
+ my $var = "\"$varname$6\"";
- for($level = 0; $level < $ntimelevels; $level++)
+ for(my $level = 0; $level < $ntimelevels; $level++)
{
push(@declarations, "CCTK_$type * CCTK_RESTRICT $varname = (cctki_dummy_int = \&$varname - \&$varname, (CCTK_$type *) CCTKi_VarDataPtr(cctkGH, $level, $implementation, $var));");
@@ -552,7 +535,7 @@ sub CreateCArgumentDeclarations
if(! $type =~ /^(BYTE|INT|INT1|INT2|INT4|INT8|REAL|REAL4|REAL8|REAL16|COMPLEX|COMPLEX8|COMPLEX16|COMPLEX32)$/)
{
- &CST_error(0,"Unknown argument type $type","",__LINE__,__FILE__);
+ CST_error(0,"Unknown argument type $type","",__LINE__,__FILE__);
}
}
@@ -572,11 +555,10 @@ sub CreateCArgumentDeclarations
sub CreateFortranArgumentList
{
my(%arguments) = @_;
- my($argument, $varname);
my(@argumentlist) = ();
# Put all storage arguments first.
- foreach $argument (sort keys %arguments)
+ foreach my $argument (sort keys %arguments)
{
if($arguments{$argument} =~ m:STORAGESIZE|GROUPLENGTH:)
{
@@ -585,15 +567,15 @@ sub CreateFortranArgumentList
}
# Now deal with the rest of the arguments
- foreach $varname (sort keys %arguments)
+ foreach my $varname (sort keys %arguments)
{
next if ($arguments{$varname} =~ m:STORAGESIZE|GROUPLENGTH:);
$arguments{$varname} =~ m:^([^! ]+) ?([^!]*)?!([^!]*)!([^!]*):;
- $ntimelevels = $4;
+ my $ntimelevels = $4;
- for($level = 0; $level < $ntimelevels; $level++)
+ for(my $level = 0; $level < $ntimelevels; $level++)
{
push(@argumentlist, $varname);
@@ -617,19 +599,16 @@ sub CreateFortranArgumentList
sub CreateCArgumentStatics
{
my(%arguments) = @_;
- my($argument, $group, $allgroups);
my(@declarations) = ();
- $allgroups = '';
- foreach $argument (sort keys %arguments)
+ my $allgroups = '';
+ foreach my $argument (sort keys %arguments)
{
next if ($arguments{$argument} =~ m:STORAGESIZE|GROUPLENGTH:);
push(@declarations, "static int CCTKARGNUM_$argument = -1;");
$arguments{$argument} =~ /::([^!]+)![0-9]+/;
- $group = $1;
-
-# print "ARG is $arguments{$argument}, group is $group\n";
+ my $group = $1;
if ($allgroups !~ / $group /)
{
@@ -653,22 +632,21 @@ sub CreateCArgumentStatics
sub CreateCArgumentInitialisers
{
my(%arguments) = @_;
- my($argument, $allgroups, $group, $qualifier);
my(@initialisers) = ();
- $allgroups = '';
- foreach $argument (sort keys %arguments)
+ my $allgroups = '';
+ foreach my $argument (sort keys %arguments)
{
next if ($arguments{$argument} =~ m:STORAGESIZE|GROUPLENGTH:);
$arguments{$argument} =~ m,^([^! ]+) ?([^!]*)?!([^!]*)\::([^!]*)!([^!]*)!([^!]*),;
- $qualifier = $3;
- $varsuffix = $6;
+ my $qualifier = $3;
+ my $varsuffix = $6;
push(@initialisers, "if(CCTKARGNUM_$argument == -1) CCTKARGNUM_$argument = CCTK_VarIndex(\"$qualifier\::$argument$varsuffix\");");
$arguments{$argument} =~ /\::([^!]+)/;
- $group = $1;
+ my $group = $1;
if ($allgroups !~ / $group /)
{
$allgroups .= " $group ";
@@ -691,10 +669,9 @@ sub CreateCArgumentPrototype
{
my(%arguments) = @_;
my(@prototype) = ();
- my($argument, $type, $ntimelevels);
# Put all storage arguments first.
- foreach $argument (sort keys %arguments)
+ foreach my $argument (sort keys %arguments)
{
if($arguments{$argument} =~ m:STORAGESIZE|GROUPLENGTH:)
{
@@ -703,7 +680,7 @@ sub CreateCArgumentPrototype
}
# Now deal with the rest of the arguments
- foreach $argument (sort keys %arguments)
+ foreach my $argument (sort keys %arguments)
{
next if ($arguments{$argument} =~ m:STORAGESIZE|GROUPLENGTH:);
@@ -713,17 +690,17 @@ sub CreateCArgumentPrototype
{
$arguments{$argument} =~ m:^([^! ]+) ?([^!]*)?!([^!]*)!([^!]*):;
- $type = $1;
- $ntimelevels = $4;
+ my $type = $1;
+ my $ntimelevels = $4;
- for($level = 0; $level < $ntimelevels; $level++)
+ for(my $level = 0; $level < $ntimelevels; $level++)
{
push(@prototype, "CCTK_$type *");
}
if($type !~ /^(CHAR|BYTE|INT|INT1|INT2|INT4|INT8|REAL|REAL4|REAL8|REAL16|COMPLEX|COMPLEX8|COMPLEX16|COMPLEX32)$/)
{
- &CST_error(0,"Unknown argument type $type","",__LINE__,__FILE__);
+ CST_error(0,"Unknown argument type $type","",__LINE__,__FILE__);
}
}
}
@@ -745,11 +722,10 @@ sub CreateCArgumentList
{
my(%arguments) = @_;
my(@arglist) = ();
- my(@argument, $type, $ntimelevels);
# Put all storage arguments first.
- foreach $argument (sort keys %arguments)
+ foreach my $argument (sort keys %arguments)
{
if($arguments{$argument} =~ m/STORAGESIZE\([^,]*::([^,]*),\s*(\d+)/)
{
@@ -762,18 +738,18 @@ sub CreateCArgumentList
}
# Now deal with the rest of the arguments
- foreach $argument (sort keys %arguments)
+ foreach my $argument (sort keys %arguments)
{
next if ($arguments{$argument} =~ m:STORAGESIZE|GROUPLENGTH:);
$arguments{$argument} =~ m:^([^! ]+) ?([^!]*)?!([^!]*)!([^!]*):;
- $type = $1;
- $ntimelevels = $4;
+ my $type = $1;
+ my $ntimelevels = $4;
$arguments{$argument} =~ /\::([^!]+)/;
- $group = $1;
+ my $group = $1;
- for($level = 0; $level < $ntimelevels; $level++)
+ for(my $level = 0; $level < $ntimelevels; $level++)
{
push(@arglist, "(CCTK_$type *)(PASS_REFERENCE($argument, $level))");
}
@@ -783,12 +759,12 @@ sub CreateCArgumentList
# DEPRECATED IN BETA 10
if($type eq 'CHAR')
{
- &CST_error(1,"CCTK_CHAR is replaced by CCTK_BYTE, please change your code","",__LINE__,__FILE__);
+ CST_error(1,"CCTK_CHAR is replaced by CCTK_BYTE, please change your code","",__LINE__,__FILE__);
}
}
else
{
- &CST_error(0,"Unknown argument type $type","",__LINE__,__FILE__);
+ CST_error(0,"Unknown argument type $type","",__LINE__,__FILE__);
}
}
@@ -806,9 +782,8 @@ sub CreateCArgumentList
sub CreateThornArgumentHeaderFile
{
my($this_thorn, $rhinterface_db) = @_;
- my($line, $thorn);
- my(@returndata) = ();
- my(%hasvars);
+ my @returndata = ();
+ my %hasvars = ();
# Header Data
push(@returndata, '/*@@');
@@ -822,22 +797,14 @@ sub CreateThornArgumentHeaderFile
push(@returndata, '');
push(@returndata, '');
- $thorn = "\U$this_thorn";
+ my $thorn = "\U$this_thorn";
# Create the basic thorn block definitions
- foreach $block ("PRIVATE", "PROTECTED", "PUBLIC")
+ foreach my $block ("PRIVATE", "PROTECTED", "PUBLIC")
{
- %data = &GetThornArguments($this_thorn, $block, $rhinterface_db);
+ my %data = GetThornArguments($this_thorn, $block, $rhinterface_db);
-# $print_data = 1;
-# if ($print_data)
-# {
-# foreach $arg (sort keys %data)
-# {
-# print "$this_thorn data: $arg : $data{\"$arg\"}\n";
-# }
-# }
# Remember if there actually are any arguments here.
$hasvars{$block} = 1 if(keys %data > 0) ;
@@ -846,13 +813,13 @@ sub CreateThornArgumentHeaderFile
# Create the fortran argument declarations
push(@returndata, "#define DECLARE_${thorn}_${block}_FARGUMENTS \\");
- @data = &CreateFortranArgumentDeclarations(%data);
+ my @data = CreateFortranArgumentDeclarations(%data);
push(@returndata, join ("&&\\\n", @data));
push(@returndata, '');
# Create the fortran argument list
push(@returndata, "#define ${thorn}_${block}_FARGUMENTS \\");
- push(@returndata, &CreateFortranArgumentList(%data));
+ push(@returndata, CreateFortranArgumentList(%data));
push(@returndata, '');
push(@returndata, '#endif /* FCODE */');
@@ -866,30 +833,30 @@ sub CreateThornArgumentHeaderFile
# Create the C argument declarations
push(@returndata, "#define DECLARE_${thorn}_${block}_CARGUMENTS \\");
- @data = &CreateCArgumentDeclarations(%data);
+ @data = CreateCArgumentDeclarations(%data);
push(@returndata, join (" \\\n", @data));
push(@returndata, '');
# Create the C argument variable number statics
push(@returndata, "#define DECLARE_${thorn}_${block}_C2F \\");
- @data = &CreateCArgumentStatics(%data);
+ @data = CreateCArgumentStatics(%data);
push(@returndata, join (" \\\n", @data));
push(@returndata, '');
# Create the C argument variable number statics initialisers
push(@returndata, "#define INITIALISE_${thorn}_${block}_C2F \\");
- @data = &CreateCArgumentInitialisers(%data);
+ @data = CreateCArgumentInitialisers(%data);
push(@returndata, join (" \\\n", @data));
push(@returndata, '');
# Create the C argument prototypes
push(@returndata, "#define ${thorn}_${block}_C2F_PROTO \\");
- push(@returndata, &CreateCArgumentPrototype(%data));
+ push(@returndata, CreateCArgumentPrototype(%data));
push(@returndata, '');
# Create the C argument list
push(@returndata, "#define PASS_${thorn}_${block}_C2F(GH) \\");
- push(@returndata, &CreateCArgumentList(%data));
+ push(@returndata, CreateCArgumentList(%data));
push(@returndata, '');
push(@returndata, '#endif /* CCODE */');
@@ -900,14 +867,14 @@ sub CreateThornArgumentHeaderFile
# Create the final thorn argument macros
- $fortran_arguments = "#define ${thorn}_FARGUMENTS _CCTK_FARGUMENTS";
- $fortran_declarations = "#define DECLARE_${thorn}_FARGUMENTS _DECLARE_CCTK_FARGUMENTS";
- $c_declarations = "#define \UDECLARE_${thorn}_CARGUMENTS _DECLARE_CCTK_CARGUMENTS";
- $c_argument_prototypes = "#define \U${thorn}_C2F_PROTO _CCTK_C2F_PROTO";
- $c_argument_lists = "#define PASS_\U${thorn}_C2F(GH) _PASS_CCTK_C2F(GH)";
- $c_declare_statics = "#define DECLARE_\U${thorn}_C2F _DECLARE_CCTK_C2F";
- $c_initialize_statics = "#define INITIALISE_\U${thorn}_C2F _INITIALISE_CCTK_C2F";
- foreach $block ("PRIVATE", "PROTECTED", "PUBLIC")
+ my $fortran_arguments = "#define ${thorn}_FARGUMENTS _CCTK_FARGUMENTS";
+ my $fortran_declarations = "#define DECLARE_${thorn}_FARGUMENTS _DECLARE_CCTK_FARGUMENTS";
+ my $c_declarations = "#define \UDECLARE_${thorn}_CARGUMENTS _DECLARE_CCTK_CARGUMENTS";
+ my $c_argument_prototypes = "#define \U${thorn}_C2F_PROTO _CCTK_C2F_PROTO";
+ my $c_argument_lists = "#define PASS_\U${thorn}_C2F(GH) _PASS_CCTK_C2F(GH)";
+ my $c_declare_statics = "#define DECLARE_\U${thorn}_C2F _DECLARE_CCTK_C2F";
+ my $c_initialize_statics = "#define INITIALISE_\U${thorn}_C2F _INITIALISE_CCTK_C2F";
+ foreach my $block ("PRIVATE", "PROTECTED", "PUBLIC")
{
if($hasvars{$block})
{
@@ -964,22 +931,22 @@ sub CreateThornArgumentHeaderFile
sub CreateThornGroupInitialisers
{
my($thorn, $block, $rhinterface_db, $rhparameter_db) = @_;
- my(@variables, @data);
- my($imp, $line, $group, $dim, $string, $numsize, $message, $type);
+ my @data = ();
- $imp = $rhinterface_db->{"\U$thorn\E IMPLEMENTS"};
+ my $imp = $rhinterface_db->{"\U$thorn\E IMPLEMENTS"};
- foreach $group (split(" ", $rhinterface_db->{"\U$thorn $block GROUPS"}))
+ foreach my $group (split(" ", $rhinterface_db->{"\U$thorn $block GROUPS"}))
{
- $type = $rhinterface_db->{"\U$thorn GROUP $group\E GTYPE"};
+ my $type = $rhinterface_db->{"\U$thorn GROUP $group\E GTYPE"};
# Check consistency of SIZE and (optional) GHOSTSIZE options for arrays
if ($type eq 'ARRAY')
{
- $size = $rhinterface_db->{"\U$thorn GROUP $group\E SIZE"};
- &CheckArraySizes($size,$thorn,$rhparameter_db,$rhinterface_db,$group);
- $dim = $rhinterface_db->{"\U$thorn GROUP $group\E DIM"};
- $numsize = split (',', $size);
+ my $message = '';
+ my $size = $rhinterface_db->{"\U$thorn GROUP $group\E SIZE"};
+ CheckArraySizes($size,$thorn,$rhparameter_db,$rhinterface_db,$group);
+ my $dim = $rhinterface_db->{"\U$thorn GROUP $group\E DIM"};
+ my $numsize = split (',', $size);
if ($dim != $numsize)
{
if ($numsize == 0)
@@ -991,15 +958,15 @@ sub CreateThornGroupInitialisers
$message = "Array dimension $dim doesn't match the $numsize ".
"array sizes\n ($size) for '$group' in '$thorn'";
}
- $hint = "Array sizes must be comma separated list of $dim " .
+ my $hint = "Array sizes must be comma separated list of $dim " .
"constants or parameters";
- &CST_error(0,$message,$hint,__LINE__,__FILE__);
+ CST_error(0,$message,$hint,__LINE__,__FILE__);
}
- $ghostsize = $rhinterface_db->{"\U$thorn GROUP $group\E GHOSTSIZE"};
+ my $ghostsize = $rhinterface_db->{"\U$thorn GROUP $group\E GHOSTSIZE"};
if ($ghostsize)
{
- &CheckArraySizes($ghostsize,$thorn,$rhparameter_db,$rhinterface_db,$group);
- $numghostsize = split (',', $ghostsize);
+ CheckArraySizes($ghostsize,$thorn,$rhparameter_db,$rhinterface_db,$group);
+ my $numghostsize = split (',', $ghostsize);
if ($dim != $numghostsize)
{
if ($numghostsize == 0)
@@ -1011,14 +978,14 @@ sub CreateThornGroupInitialisers
$message = "Array dimension $dim doesn't match the $numghostsize ".
"array ghossizes\n ($size) for '$group' in '$thorn'";
}
- $hint = "Array ghostsizes must be comma separated list of $dim " .
+ my $hint = "Array ghostsizes must be comma separated list of $dim " .
"constants or parameters";
- &CST_error(0,$message,$hint,__LINE__,__FILE__);
+ CST_error(0,$message,$hint,__LINE__,__FILE__);
}
}
}
- $line = " if (CCTKi_CreateGroup (\"\U$group\", \"$thorn\", \"$imp\",";
+ my $line = " if (CCTKi_CreateGroup (\"\U$group\", \"$thorn\", \"$imp\",";
push(@data, $line);
$line = ' "'
. $rhinterface_db->{"\U$thorn GROUP ${group}\E GTYPE"}
@@ -1052,11 +1019,11 @@ sub CreateThornGroupInitialisers
push(@data, $line);
# Is it a vector group ?
- @variables = split(" ", $rhinterface_db->{"\U$thorn GROUP $group\E"});
+ my @variables = split(" ", $rhinterface_db->{"\U$thorn GROUP $group\E"});
if(defined($rhinterface_db->{"\U$thorn GROUP $group\E VARARRAY_SIZE"}))
{
# Check that the size is allowed.
- &CheckArraySizes($rhinterface_db->{"\U$thorn GROUP $group\E VARARRAY_SIZE"},$thorn,$rhparameter_db,$rhinterface_db,$group);
+ CheckArraySizes($rhinterface_db->{"\U$thorn GROUP $group\E VARARRAY_SIZE"},$thorn,$rhparameter_db,$rhinterface_db,$group);
# Pass in the size of the GV array, which may be a valid parameter expression
$line = ' "'
. $rhinterface_db->{"\U$thorn GROUP $group\E VARARRAY_SIZE"}
@@ -1071,71 +1038,24 @@ sub CreateThornGroupInitialisers
$line = ' ' . scalar(@variables);
- foreach $variable (@variables)
+ foreach my $variable (@variables)
{
$line .= ",\n \"$variable\"";
- }
+ }
$line .= ') == 1)';
push(@data, $line);
push(@data, ' {');
- push(@data, ' warn_mixeddim_gfs = 1;');
+ push(@data, " warn_mixeddim_gfs = \"$group\";");
+ push(@data, " warn_mixeddim = "
+ . $rhinterface_db->{"\U$thorn GROUP $group\E DIM"} . ';');
push(@data, ' }');
}
return @data;
}
-# TR 24 Jan 2003
-# Fortran wrappers are now defined and registered in "Variables/$thorn.c"
-#
-#sub CreateThornFortranWrapper
-#{
-# my($thorn) = @_;
-# my(@data);
-#
-# @data = ();
-# push(@data, '/*@@');
-# push(@data, " \@file ${thorn}_FortranWrapper.c");
-# push(@data, ' @author Automatically generated by GridFuncStuff.pl');
-# push(@data, ' @desc');
-# push(@data, " Defines the fortran wrappers for scheduled fortran routines of thorn $thorn");
-# push(@data, ' @enddesc');
-# push(@data, ' @@*/');
-# push(@data, '');
-# push(@data, '');
-#
-# push(@data, "#define THORN_IS_$thorn 1");
-# push(@data, '');
-# push(@data, '#include "cctk.h"');
-# push(@data, '#include "cctk_Flesh.h"');
-# push(@data, '#include "cctk_Groups.h"');
-# push(@data, '#include "cctk_Comm.h"');
-# push(@data, '#include "cctk_Arguments.h"');
-# push(@data, '');
-#
-# push(@data, "int CCTKi_BindingsFortranWrapper$thorn(cGH *GH, CCTK_FPOINTER fpointer);");
-# push(@data, '');
-# push(@data, "int CCTKi_BindingsFortranWrapper$thorn(cGH *GH, CCTK_FPOINTER fpointer)");
-# push(@data, '{');
-# push(@data, ' const int _cctk_zero = 0;');
-# push(@data, " void (*function)(\U$thorn\E_C2F_PROTO);");
-# push(@data, " DECLARE_\U$thorn\E_C2F");
-# push(@data, " INITIALISE_\U$thorn\E_C2F");
-# push(@data, ' (void) (_cctk_zero + 0);');
-# push(@data, '');
-#
-# push(@data, " function = (void (*) (\U$thorn\E_C2F_PROTO)) fpointer;");
-# push(@data, " function (PASS_\U$thorn\E_C2F (GH));");
-# push(@data, '');
-# push(@data, ' return 0;');
-# push(@data, '}');
-#
-# return (@data);
-#}
-
-
#/*@@
# @routine CheckArraySizes
# @date Thu May 10 2001
@@ -1150,46 +1070,12 @@ sub CreateThornGroupInitialisers
sub CheckArraySizes
{
my($size,$thornname,$rhparameter_db,$rhinterface_db,$group) = @_;
- my($par,$thorn,$base);
# append a dummy space character to catch expressions with trailing commas
$size .= ' ';
- foreach $par (split(",",$size))
+ foreach my $par (split(",",$size))
{
-
-# # check for size to be a constant
-# next if $par =~ /^\d+$/;
-
-# # check for size to be a parameter
-# if ($par =~ /^([A-Za-z]\w*)(::([A-Za-z]\w*))?([+-]\d+)?$/)
-# {
-# if (defined $2)
-# {
-# $thorn = $1;
-# $base = $3;
-# }
-# else
-# {
-# $thorn = $thornname;
-# $base = $1;
-# }
-
-# # check if the parameter really exists
-# if ($rhparameter_db->{"\U$thorn Private\E variables"} !~ m:$base:i &&
-# $rhparameter_db->{"\U$thorn Global\E variables"} !~ m:$base:i &&
-# $rhparameter_db->{"\U$thorn Restricted\E variables"} !~ m:$base:i)
-# {
-# &CST_error(0,"Array size \'$par\' in $thornname is not a parameter",
-# "",__LINE__,__FILE__);
-# }
-# }
-# else
-# {
-# &CST_error(0,"Array size \'$par\' in $thornname has invalid syntax",
-# "",__LINE__,__FILE__);
-# }
-
- &VerifyParameterExpression($par,$thornname,$rhparameter_db,$rhinterface_db,$group);
+ VerifyParameterExpression($par,$thornname,$rhparameter_db,$rhinterface_db,$group);
}
}
@@ -1209,53 +1095,51 @@ sub CheckArraySizes
sub VerifyParameterExpression
{
my($expression,$thornname,$rhparameter_db,$rh_interface_db,$group) = @_;
- my($i,$count,@fields);
my $msg = "Array size in '$thornname' is an invalid arithmetic expression\n"
. ' ';
-
# Eliminate white space in expression
$expression =~ s/\s+//g;
# First do some global checks
if($expression !~ m%^[-+*/a-zA-Z0-9_():\[\]]+$%)
{
- &CST_error(0, $msg . "'$expression' contains invalid characters",
+ CST_error(0, $msg . "'$expression' contains invalid characters",
'',__LINE__,__FILE__);
}
- $count = 0;
+ my $count = 0;
- for $i (split(//,$expression))
+ for my $i (split(//,$expression))
{
$count++ if($i eq "(");
$count-- if($i eq ")");
if($count < 0)
{
- &CST_error(0, $msg . "'$expression' has too many closing parentheses",
+ CST_error(0, $msg . "'$expression' has too many closing parentheses",
'',__LINE__,__FILE__);
}
}
if($count > 0)
{
- &CST_error(0, $msg . "'$expression' has unmatched parentheses",
+ CST_error(0, $msg . "'$expression' has unmatched parentheses",
'',__LINE__,__FILE__);
}
if($expression =~ m:[-+*/]$:)
{
- &CST_error(0, $msg . "'$expression' ends with an operator",
+ CST_error(0, $msg . "'$expression' ends with an operator",
'',__LINE__,__FILE__);
}
# Now split the string on operators and parentheses
- @fields = split(/([-+*\/()])/, $expression);
+ my @fields = split(/([-+*\/()])/, $expression);
- for $i (@fields)
+ for my $i (@fields)
{
# Get rid of any empty tokens
next if($i =~ m:^\s*$:);
@@ -1271,6 +1155,8 @@ sub VerifyParameterExpression
# Now check if it is a valid parameter name
if($i =~ m:^([a-zA-Z][a-zA-Z0-9_]*)(\:\:([a-zA-Z][a-zA-Z0-9_]*))?:)
{
+ my $thorn;
+ my $base;
if (defined $2)
{
$thorn = $1;
@@ -1290,7 +1176,7 @@ sub VerifyParameterExpression
$rhparameter_db->{"\U$thorn Global\E variables"} !~ m:$base:i &&
$rhparameter_db->{"\U$thorn Restricted\E variables"} !~ m:$base:i)
{
- &CST_error(0,"Expression '$expression' in group: $group, type: " . $rh_interface_db->{"\U$thorn GROUP ${group}\E GTYPE"} . " and thorn: '$thornname' contains a constant which isn\'t a parameter",
+ CST_error(0,"Expression '$expression' in group: $group, type: " . $rh_interface_db->{"\U$thorn GROUP ${group}\E GTYPE"} . " and thorn: '$thornname' contains a constant which isn\'t a parameter",
'',__LINE__,__FILE__);
}
}
@@ -1310,14 +1196,14 @@ sub VerifyParameterExpression
# Ok, so it does share from this implementation
if($rhparameter_db->{"\U$thornname SHARES $implementation\E variables"} !~ m/\b$base\b/i)
{
- &CST_error(0,"Array size '$expression' in '$thornname' contains a reference to a parameter from $implementation" .
+ CST_error(0,"Array size '$expression' in '$thornname' contains a reference to a parameter from $implementation" .
" which is neither USED nor EXTENDED",
'',__LINE__,__FILE__);
}
}
else
{
- &CST_error(0,"Array size '$expression' in '$thornname' contains a reference to a parameter from $implementation" .
+ CST_error(0,"Array size '$expression' in '$thornname' contains a reference to a parameter from $implementation" .
" which is not global nor shared",
'',__LINE__,__FILE__);
}
@@ -1326,31 +1212,31 @@ sub VerifyParameterExpression
elsif($i =~ m:^\(\)$:)
{
# Empty parenthesis - bad
- &CST_error(0, $msg . "'$expression' contains empty parentheses",
+ CST_error(0, $msg . "'$expression' contains empty parentheses",
'',__LINE__,__FILE__);
}
elsif($i =~ m:[-+/*]{2,}:)
{
# Two operators in a row - bad
- &CST_error(0, $msg . "'$expression' contains two operators in a row",
+ CST_error(0, $msg . "'$expression' contains two operators in a row",
'',__LINE__,__FILE__);
}
elsif($i =~ m:[-+/*]\):)
{
# Operator followed by closing parenthesis - bad
- &CST_error(0, $msg . "'$expression' has a missing operand",
+ CST_error(0, $msg . "'$expression' has a missing operand",
'',__LINE__,__FILE__);
}
elsif($i =~ m:\([-+/*]:)
{
# Opening parenthesis followed by operator - bad
- &CST_error(0, $msg . "'$expression' has a missing operand",
+ CST_error(0, $msg . "'$expression' has a missing operand",
'',__LINE__,__FILE__);
}
else
{
# I've run out of imagination
- &CST_error(0, $msg . "'$expression' contains unrecognised token '$i'",
+ CST_error(0, $msg . "'$expression' contains unrecognised token '$i'",
'',__LINE__,__FILE__);
}
}