summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/make/force-rebuild2
-rw-r--r--lib/sbin/CreateScheduleBindings.pl36
-rw-r--r--lib/sbin/ScheduleParser.pl35
3 files changed, 61 insertions, 12 deletions
diff --git a/lib/make/force-rebuild b/lib/make/force-rebuild
index d4247101..eb36a6f2 100644
--- a/lib/make/force-rebuild
+++ b/lib/make/force-rebuild
@@ -34,5 +34,7 @@
21 Nov 2005: Change names of auto-generated capability header files
08 Apr 2008: Add IF clause to scheduler
23 Dec 2010: Rename cctki_Capabilities.h to cctk_Capabilities.h
+12 Jan 2011: Add PROVIDES/REQUIRES clauses to scheduler
20 Jan 2011: Generate prototypes for scheduled functions
27 Oct 2011: Optimize CCTK_ARGUMENTS for grid functions in Fortran
+
diff --git a/lib/sbin/CreateScheduleBindings.pl b/lib/sbin/CreateScheduleBindings.pl
index 045b5d7a..095d49dc 100644
--- a/lib/sbin/CreateScheduleBindings.pl
+++ b/lib/sbin/CreateScheduleBindings.pl
@@ -499,8 +499,11 @@ sub ScheduleBlock
my($trigger_groups);
my($sync_groups);
my(@options);
+ my($tags);
my(@before_list);
my(@after_list);
+ my(@writes_list);
+ my(@reads_list);
my(@while_list);
my(@if_list);
@@ -532,6 +535,8 @@ sub ScheduleBlock
$rhinterface_db);
@options = split(/,/, $rhschedule_db->{"\U$thorn\E BLOCK_$block OPTIONS"});
+ $tags = $rhschedule_db->{"\U$thorn\E BLOCK_$block TAGS"};
+ $tags = '' if ! defined $tags;
@before_list = &ScheduleSelectRoutines($thorn, $implementation,
$rhschedule_db->{"\U$thorn\E BLOCK_$block BEFORE"},
@@ -541,6 +546,14 @@ sub ScheduleBlock
$rhschedule_db->{"\U$thorn\E BLOCK_$block AFTER"},
$rhschedule_db);
+ @writes_list = &ScheduleSelectRoutines($thorn, $implementation,
+ $rhschedule_db->{"\U$thorn\E BLOCK_$block WRITES"},
+ $rhschedule_db);
+
+ @reads_list = &ScheduleSelectRoutines($thorn, $implementation,
+ $rhschedule_db->{"\U$thorn\E BLOCK_$block READS"},
+ $rhschedule_db);
+
@while_list = &ScheduleSelectVars($thorn, $implementation,
$rhschedule_db->{"\U$thorn\E BLOCK_$block WHILE"},
$rhinterface_db);
@@ -648,16 +661,25 @@ sub ScheduleBlock
# $help .= 'IO methods to decide whether of not execution should happen.';
# &CST_error(0,$mess,$help,__LINE__,__FILE__);
# }
- $buffer .= $indent . scalar(@$sync_groups) . ", /* Number of SYNC groups */\n";
- $buffer .= $indent . scalar(@options) . ", /* Number of Options */\n";
- $buffer .= $indent . scalar(@before_list) . ", /* Number of BEFORE routines */\n";
- $buffer .= $indent . scalar(@after_list) . ", /* Number of AFTER routines */\n";
- $buffer .= $indent . scalar(@while_list) . ", /* Number of WHILE variables */\n";
- $buffer .= $indent . scalar(@if_list) . ", /* Number of IF variables */\n";
+ $buffer .= $indent . scalar(@$sync_groups) . ", /* Number of SYNC groups */\n";
+ $buffer .= $indent . scalar(@writes_list) . ", /* Number of WRITES clauses */\n";
+ $buffer .= $indent . scalar(@reads_list) . ", /* Number of READS clauses */\n";
+ $buffer .= $indent . scalar(@options) . ", /* Number of Options */\n";
+ $buffer .= $indent . scalar(@before_list) . ", /* Number of BEFORE routines */\n";
+ $buffer .= $indent . scalar(@after_list) . ", /* Number of AFTER routines */\n";
+ $buffer .= $indent . scalar(@while_list) . ", /* Number of WHILE variables */\n";
+ $buffer .= $indent . scalar(@if_list) . ", /* Number of IF variables */\n";
$buffer .= $indent . "cctkschedulei_tlevelarray /* Array of timelevel data for storage groups */";
foreach $item (@$mem_groups, @$comm_groups, @$trigger_groups, @$sync_groups,
- @options, @before_list, @after_list, @while_list, @if_list)
+ @writes_list, @reads_list, @options)
+ {
+ $buffer .= ",\n$indent\"$item\"";
+ }
+
+ $buffer .= ",\n$indent\"$tags\"";
+
+ foreach $item (@before_list, @after_list, @while_list, @if_list)
{
$buffer .= ",\n$indent\"$item\"";
}
diff --git a/lib/sbin/ScheduleParser.pl b/lib/sbin/ScheduleParser.pl
index 9fdff5f5..7670b19d 100644
--- a/lib/sbin/ScheduleParser.pl
+++ b/lib/sbin/ScheduleParser.pl
@@ -113,7 +113,8 @@ sub parse_schedule_ccl
my($n_statements);
my($name, $as, $type, $description, $where, $language,
$mem_groups, $comm_groups, $trigger_groups, $sync_groups,
- $options, $before_list, $after_list, $while_list, $if_list);
+ $options, $tags, $before_list, $after_list,
+ $writes_list, $reads_list, $while_list, $if_list);
my($groups);
$buffer = "";
@@ -127,8 +128,9 @@ sub parse_schedule_ccl
($line_number,
$name, $as, $type, $description, $where, $language,
$mem_groups, $comm_groups, $trigger_groups, $sync_groups,
- $options,$before_list, $after_list, $while_list, $if_list)
- = &ParseScheduleBlock($thorn,$line_number, @data);
+ $options, $tags, $before_list, $after_list,
+ $writes_list, $reads_list, $while_list, $if_list) =
+ &ParseScheduleBlock($thorn,$line_number, @data);
$schedule_db{"\U$thorn\E BLOCK_$n_blocks NAME"} = $name;
$schedule_db{"\U$thorn\E BLOCK_$n_blocks AS"} = $as;
@@ -141,8 +143,11 @@ sub parse_schedule_ccl
$schedule_db{"\U$thorn\E BLOCK_$n_blocks TRIG"} = $trigger_groups;
$schedule_db{"\U$thorn\E BLOCK_$n_blocks SYNC"} = $sync_groups;
$schedule_db{"\U$thorn\E BLOCK_$n_blocks OPTIONS"} = $options;
+ $schedule_db{"\U$thorn\E BLOCK_$n_blocks TAGS"} = $tags;
$schedule_db{"\U$thorn\E BLOCK_$n_blocks BEFORE"} = $before_list;
$schedule_db{"\U$thorn\E BLOCK_$n_blocks AFTER"} = $after_list;
+ $schedule_db{"\U$thorn\E BLOCK_$n_blocks WRITES"} = $writes_list;
+ $schedule_db{"\U$thorn\E BLOCK_$n_blocks READS"} = $reads_list;
$schedule_db{"\U$thorn\E BLOCK_$n_blocks WHILE"} = $while_list;
$schedule_db{"\U$thorn\E BLOCK_$n_blocks IF"} = $if_list;
@@ -196,11 +201,14 @@ sub ParseScheduleBlock
my($thorn,$line_number, @data) = @_;
my($name, $as, $type, $description, $where, $language,
$mem_groups, $comm_groups, $trigger_groups, $sync_groups,
- $options, $before_list, $after_list, $while_list, $if_list);
+ $options, $tags, $before_list, $after_list,
+ $writes_list, $reads_list, $while_list, $if_list);
my(@fields);
my($field);
my(@before_list) = ();
my(@after_list) = ();
+ my(@writes_list) = ();
+ my(@reads_list) = ();
my(@while_list) = ();
my(@if_list) = ();
my(@mem_groups) = ();
@@ -208,6 +216,7 @@ sub ParseScheduleBlock
my(@trigger_groups) = ();
my(@sync_groups) = ();
my(@options) = ();
+ my(@tags) = ();
my($keyword) = "";
my(@current_sched_list) = ();
@@ -467,10 +476,22 @@ sub ParseScheduleBlock
{
push(@sync_groups, split(/\s+|\s*,\s*/, $1));
}
+ elsif($data[$line_number] =~ m/^\s*WRITES\s*:\s*(.*)$/i)
+ {
+ push(@writes_list, split(/\s+|\s*,\s*/, $1));
+ }
+ elsif($data[$line_number] =~ m/^\s*READS\s*:\s*(.*)$/i)
+ {
+ push(@reads_list, split(/\s+|\s*,\s*/, $1));
+ }
elsif($data[$line_number] =~ m/^\s*OPTI[^:]*:\s*(.*)$/i)
{
push(@options, split(/\s+|\s*,\s*/, $1));
}
+ elsif($data[$line_number] =~ m/^\s*TAGS[^:]*:\s*(.*)$/i)
+ {
+ push(@tags, $1);
+ }
elsif($data[$line_number] =~ m/^\s*LANG[^:]*:\s*(.*)$/i)
{
if($language ne "")
@@ -518,8 +539,11 @@ sub ParseScheduleBlock
$trigger_groups = join(",", @trigger_groups);
$sync_groups = join(",", @sync_groups);
$options = join(",", @options);
+ $tags = join(" ", @tags);
$before_list = join(",", @before_list);
$after_list = join(",", @after_list);
+ $writes_list = join(",", @writes_list);
+ $reads_list = join(",", @reads_list);
$while_list = join(",", @while_list);
$if_list = join(",", @if_list);
@@ -527,7 +551,8 @@ sub ParseScheduleBlock
return ($line_number,
$name, $as, $type, $description, $where, $language,
$mem_groups, $comm_groups, $trigger_groups, $sync_groups,
- $options,$before_list, $after_list, $while_list, $if_list);
+ $options, $tags, $before_list, $after_list,
+ $writes_list, $reads_list, $while_list, $if_list);
}