diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sbin/GridFuncStuff.pl | 110 | ||||
-rw-r--r-- | lib/sbin/config_parser.pl | 12 |
2 files changed, 120 insertions, 2 deletions
diff --git a/lib/sbin/GridFuncStuff.pl b/lib/sbin/GridFuncStuff.pl new file mode 100644 index 00000000..9f3350b8 --- /dev/null +++ b/lib/sbin/GridFuncStuff.pl @@ -0,0 +1,110 @@ +#! /usr/bin/perl + +sub CreateGroups +{ + local(%interface_database) = @_; + local(@interfaces); + local(%thorns); + local(@group_initialisers); + local(@indata); + + + @interfaces = split(" ", $interface_database{"IMPLEMENTATIONS"}); + + foreach $interface (@interfaces) + { + @indata = &create_interface_group_initialisers($interface, %interface_database); + + push(@group_initialisers, @indata); + + foreach $thorn (split(" ",$interface_database{"IMPLEMENTATION \U$interface\E THORNS"})) + { + $thorns{"\U$thorn\E"} = 1; + } + } + + foreach $thorn (keys %thorns) + { + + @indata = &create_thorn_group_initialisers($thorn, "PRIVATE", %interface_database); + + push(@group_initialisers, @indata); + + } + + @group_initialisers = &sort_groups(@group_initialisers); + + return @group_initialisers; +} + +sub create_interface_group_initialisers +{ + local($interface, %interface_database) = @_; + local($thorn); + local(@definitions); + local(@indata); + + + $interface_database{"IMPLEMENTATION \U$interface\E THORNS"} =~ m:([^ ]+):; + + $thorn = $1; + + @indata = &create_thorn_group_initialisers($thorn, "PUBLIC", %interface_database); + + push(@definitions, @indata); + + @indata = &create_thorn_group_initialisers($thorn, "PROTECTED", %interface_database); + + push(@definitions, @indata); + + return @definitions; + +} + +sub create_thorn_group_initialisers +{ + local($thorn, $block, %interface_database) = @_; + local(@definitions); + local($base_name); + local($group); + local($variable,@variables); + if($block eq "PRIVATE") + { + $base_name = "thorn:$thorn"; + } + else + { + $base_name = $interface_database{"\U$thorn\E IMPLEMENTS"}; + } + + foreach $group (split(" ", $interface_database{"\U$thorn $block GROUPS"})) + { + @variables = split(" ", $interface_database{"\U$thorn GROUP $group\E"}); + + $line = " CCTK_CreateGroup(\"\U$base_name:$group\E\",\n" + . " \"" . $interface_database{"\U$thorn GROUP $group\E GTYPE"} . "\",\n" + . " \"" . $interface_database{"\U$thorn GROUP $group\E VTYPE"} . "\",\n" + . " ". scalar(@variables); + foreach $variable (@variables) + { + $line .= ",\n \"\U$variable\E\""; + } + + $line .= ");\n\n"; + + push(@definitions, $line); + } + + return @definitions; + + +} + +sub sort_groups +{ + local(@group_initialisers) = @_; + + return @group_initialisers; +} + +1; diff --git a/lib/sbin/config_parser.pl b/lib/sbin/config_parser.pl index 73e9d95b..4bec9d0e 100644 --- a/lib/sbin/config_parser.pl +++ b/lib/sbin/config_parser.pl @@ -39,6 +39,7 @@ require "lib/sbin/parameter_parser.pl"; require "lib/sbin/interface_parser.pl"; require "lib/sbin/create_c_stuff.pl"; require "lib/sbin/create_fortran_stuff.pl"; +require "lib/sbin/GridFuncStuff.pl"; %thorns = &create_thorn_list; @@ -48,7 +49,7 @@ require "lib/sbin/create_fortran_stuff.pl"; #&print_parameter_database(%parameter_database); -&print_interface_database(%interface_database); +#&print_interface_database(%interface_database); @implementations = (keys %thorns); @@ -78,7 +79,14 @@ require "lib/sbin/create_fortran_stuff.pl"; -foreach $line (@subroutine) +#foreach $line (@subroutine) +#{ +# print "$line\n"; +#} + +@GFstuff = &CreateGroups(%interface_database); + +foreach $line (@GFstuff) { print "$line\n"; } |