summaryrefslogtreecommitdiff
path: root/lib/sbin
diff options
context:
space:
mode:
authorallen <allen@17b73243-c579-4c4c-a9d2-2d5706c11dac>1999-09-15 08:58:24 +0000
committerallen <allen@17b73243-c579-4c4c-a9d2-2d5706c11dac>1999-09-15 08:58:24 +0000
commiteb81cc982d7fb4be88db29e50128daf4de2b004f (patch)
tree9829564f6ee571aec374b7b6f734302ea478a4c6 /lib/sbin
parent8083d2326671c2734bc71a4655774b853964f54b (diff)
Now TRIGGERS can be group names as well as variable names.
git-svn-id: http://svn.cactuscode.org/flesh/trunk@922 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'lib/sbin')
-rw-r--r--lib/sbin/schedule_parser.pl63
1 files changed, 46 insertions, 17 deletions
diff --git a/lib/sbin/schedule_parser.pl b/lib/sbin/schedule_parser.pl
index 1c6fd611..599f9032 100644
--- a/lib/sbin/schedule_parser.pl
+++ b/lib/sbin/schedule_parser.pl
@@ -39,8 +39,13 @@ sub create_schedule_code
$implementation = $interface_database{"\U$thorn\E IMPLEMENTS"};
-# Private groups for thorn
+# Private groups and variables for thorn
$privategroups = $interface_database{"\U$thorn\E PRIVATE GROUPS"};
+ $privatevars = "";
+ foreach $var (split(" ", $privategroups))
+ {
+ $privatevars .= " $interface_database{\"\U$thorn GROUP $var\"} ";
+ }
$thorn_rfr = $thorn."_rfr";
$thorn_startup = $thorn."_startup";
@@ -56,14 +61,14 @@ sub create_schedule_code
@indata = &read_file("$thorns{$thorn}/schedule.ccl");
# Parse the data and create rfr and startup subroutines
- ($proto,$out,$wrapper_files, @retscheduledata) = &parse_schedule_ccl(1,$privategroups,$thorn,$implementation,"rfr",@indata);
+ ($proto,$out,$wrapper_files, @retscheduledata) = &parse_schedule_ccl(1,$privategroups,$privatevars,$thorn,$implementation,"rfr",@indata);
print OUTRFR $proto;
print OUTRFR $out;
$rfr_files .= " $thorn_rfr";
$startup_files .= " $thorn_startup";
push(@schedule_data, @retscheduledata);
- ($proto,$out,$schedule_wrappers) = &parse_schedule_ccl(2,$privategroups,$thorn,$implementation,"startup",@indata);
+ ($proto,$out,$schedule_wrappers) = &parse_schedule_ccl(2,$privategroups,$privatevars,$thorn,$implementation,"startup",@indata);
print OUTSTART $proto;
print OUTSTART $out;
@@ -114,11 +119,12 @@ sub write_rfr_header {
$header .= "#include \"rfrConstants.h\"\n";
$header .= "#include \"cctk_parameters.h\"\n";
$header .= "#include \"cctk_arguments.h\"\n";
+ $header .= "#include \"cctk_WarnLevel.h\"\n";
$header .= "\n";
$header .= "void $routine (cGH *GH)\n";
$header .= "{\n";
$header .= " DECLARE_CCTK_PARAMETERS\n";
- $header .= " int index;\n\n";
+ $header .= " int index,varfirst,varlast,varindex;\n\n";
$header .= "\n";
$header .= " if(CCTK_IsThornActive(\"$thorn\"))\n";
$header .= " {\n\n";
@@ -270,7 +276,7 @@ EOT
sub parse_schedule_ccl
{
- local($number,$privategroups,$thorn,$implementation,$type,@data) = @_;
+ local($number,$privategroups,$privatevars,$thorn,$implementation,$type,@data) = @_;
local($proto,$out,$line,$line_number,@compile_files);
local(%schedule_ordering);
local($routine);
@@ -288,7 +294,7 @@ sub parse_schedule_ccl
$routine = $1;
@options = split(" ", $2);
- ($wrapper_file,$proto_block,$out_block, $routine) = &parse_schedule_block($number,$privategroups,$thorn,$implementation,$type,@data);
+ ($wrapper_file,$proto_block,$out_block, $routine) = &parse_schedule_block($number,$privategroups,$privatevars,$thorn,$implementation,$type,@data);
$proto .= "$proto_block";
$out .= "$out_block";
@@ -467,7 +473,7 @@ sub find_schedule_block
sub parse_schedule_block
{
- local($number,$privategroups,$thorn,$implementation,$type,@data)=@_;
+ local($number,$privategroups,$privatevars,$thorn,$implementation,$type,@data)=@_;
local($proto,$out);
local($wrapper_file, $proto, $out);
@@ -479,9 +485,9 @@ sub parse_schedule_block
# At the moment can schedule at RFR entry points of at STARTUP
if ($type eq "startup" && $when =~ /\s*STARTUP\s*/i) {
- ($wrapper_file, $proto, $out, $routine) = &parse_schedule_at_STARTUP($thorn,$privategroups,$implementation,$routine,$desc,@block);
+ ($wrapper_file, $proto, $out, $routine) = &parse_schedule_at_STARTUP($thorn,$privategroups,$privatevars,$implementation,$routine,$desc,@block);
} elsif ($type eq "rfr" && $when !~ /\s*STARTUP\s*/i) {
- ($wrapper_file,$proto,$out, $routine) = &parse_schedule_at_RFR($thorn,$privategroups,$implementation,$routine,$when,$desc,@block);
+ ($wrapper_file,$proto,$out, $routine) = &parse_schedule_at_RFR($thorn,$privategroups,$privatevars,$implementation,$routine,$when,$desc,@block);
}
return ($wrapper_file,$proto,$out, $routine);
@@ -490,7 +496,7 @@ sub parse_schedule_block
sub parse_schedule_at_STARTUP {
- local($thorn,$privategroups,$implementation,$routine,$desc,@block) = @_;
+ local($thorn,$privategroups,$privatevars,$implementation,$routine,$desc,@block) = @_;
local($out);
$out .= " $routine();\n";
@@ -505,7 +511,7 @@ sub parse_schedule_at_STARTUP {
sub parse_schedule_at_RFR {
- local($thorn,$privategroups,$implementation,$routine,$when,$desc,@block) = @_;
+ local($thorn,$privategroups,$privatevars,$implementation,$routine,$when,$desc,@block) = @_;
local($proto,$out,$got_it,$i,$line);
# Look for the Language and register routine
@@ -635,14 +641,14 @@ sub parse_schedule_at_RFR {
# Take of implementation if it is there
$this_imp = $implementation;
- $this_group = $group;
- if ($group =~ /(.*)::(.*)/)
+ $this_var = $var;
+ if ($var =~ /(.*)::(.*)/)
{
$this_imp = $1;
- $this_group = $2;
+ $this_var = $2;
}
- if ($privategroups =~ /\b$this_group\b/)
+ if ($privategroups =~ /\b$this_var\b/ || $privatevars =~ /\b$this_var\b/ )
{
$use_imp = $thorn;
}
@@ -651,8 +657,31 @@ sub parse_schedule_at_RFR {
$use_imp = $this_imp;
}
- $out .= " index = CCTK_VarIndex(\"$use_imp\:\:$var\");\n";
- $out .= " rfrRegisterTriggers(GH->rfr_top,GH,$routine,index);\n"
+ $out .="\n\n";
+ $out .=" index = CCTK_VarIndex(\"$use_imp\:\:$this_var\");\n";
+ $out .=" if (index < 0)\n";
+ $out .=" {\n";
+ $out .=" index = CCTK_GroupIndex(\"$use_imp\:\:$this_var\");\n";
+ $out .=" if (index >= 0)\n";
+ $out .=" {\n";
+ $out .=" varfirst = CCTK_FirstVarIndexI(index);\n";
+ $out .=" varlast = varfirst+CCTK_NumVarsInGroupI(index)-1;\n";
+ $out .=" }\n";
+ $out .=" else\n";
+ $out .=" {\n";
+ $out .=" CCTK_WARN(0,\"CCTK_VarIndex(\\\"$use_imp\:\:$this_var\\\") failed in $thorn rfr file\");\n";
+ $out .=" }\n";
+ $out .=" }\n";
+ $out .=" else\n";
+ $out .=" {\n";
+ $out .=" varfirst = index;\n";
+ $out .=" varlast = index;\n";
+ $out .=" }\n";
+ $out .=" for (varindex = varfirst; varindex <= varlast; varindex++)\n";
+ $out .=" {\n";
+ $out .=" rfrRegisterTriggers(GH->rfr_top,GH,$routine,varindex);\n";
+ $out .=" }\n";
+
}
}
}