diff options
author | goodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 1999-01-26 16:28:32 +0000 |
---|---|---|
committer | goodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 1999-01-26 16:28:32 +0000 |
commit | e9210789dda483d5a06345bf85bd5da850030c1d (patch) | |
tree | c70c9583d7175ae4f833b789b6625b2cc6bf2188 /lib/sbin/GridFuncStuff.pl | |
parent | c9178e6a95d8a95b8e1d8370669ca88ddf293ab4 (diff) |
Now creates all argument list stuff as seen from the thorns...
--------------------------------------------------------------
... as summarised here nicely by Gab...
FORTRAN THORNS
==============
#define THORN_IS_MYTHORN
subroutine MYSUB(CCTK_FARGUMENTS)
DECLARE_CCTK_FARGUMENTS
which gets expanded to
#define THORN_IS_MYTHORN
subroutine MYSUB(MYTHORN_FARGUMENTS)
DECLARE_MYTHORN_FARGUMENTS
C THORNS
========
#define THORN_IS_MYTHORN
MYSUB(CCTK_CARGUMENTS) {
DECLARE_CCTK_CARGUMENTS
which gets expanded to
#define THORN_IS_MYTHORN
MYSUB(MYTHORN_CARGUMENTS) {
DECLARE_MYTHORN_CARGUMENTS
although for now
CCTK_CARGUMENTS = GH
CALLING FORTRAN FROM C
======================
#define THORN_IS_MYTHORN
FORTRAN_NAME(Extract)(EXTRACT_C2F_PROTO);
MYSUB(CCTK_CARGUMENTS) {
DECLARE_CCTK_CARGUMENTS
DECLARE_EXTRACT_C2F
INITIALISE_EXTRACT_C2F (Note English spelling!!!!)
FORTRAN_NAME(Extract)(PASS_EXTRACT_C2F(GH));
---------------------------------------------------------
Arguments are include via
#include "declare_arguments.h"
Parameters by
#include "declare_parameters.h"
Tom
git-svn-id: http://svn.cactuscode.org/flesh/trunk@121 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'lib/sbin/GridFuncStuff.pl')
-rw-r--r-- | lib/sbin/GridFuncStuff.pl | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/lib/sbin/GridFuncStuff.pl b/lib/sbin/GridFuncStuff.pl index 29c3e6db..62f97562 100644 --- a/lib/sbin/GridFuncStuff.pl +++ b/lib/sbin/GridFuncStuff.pl @@ -478,4 +478,220 @@ sub CreateCArgumentList return $arglist; } + +sub CreateThornArgumentHeaderFile +{ + local($thorn, %interface_database) = @_; + local($line); + local(@returndata) = (); + local(%hasvars); + + # Create the basic thorn block definitions + + foreach $block ("PRIVATE", "PROTECTED", "PUBLIC") + { + + %data = &GetThornArguments($thorn, $block, %interface_database); + + # Remember if there actually are any arguments here. + $hasvars{$block} = 1 if(keys %data > 0) ; + + # Do the fortran definitions + push(@returndata, "#ifdef FCODE"); + + # Create the fortran argument declarations + + @data = &CreateFortranArgumentDeclarations(%data); + + push(@returndata, "#define \UDECLARE_$thorn"."_$block"."_FARGUMENTS \\"); + + foreach $line (@data) + { + push(@returndata, "$line&&\\"); + } + + push(@returndata, ("","")); + + # Create the fortran argument list + + push(@returndata, "#define \U$thorn"."_$block"."_FARGUMENTS \\"); + + push(@returndata, &CreateFortranArgumentList(%data)); + + push(@returndata, ("","")); + + push(@returndata, "#endif /*FCODE*/"); + + push(@returndata, ("","")); + + + ########################################################## + + # Do the C definitions + push(@returndata, "#ifdef CCODE"); + + # Create the C argument variable number statics + + push(@returndata, "#define \UDECLARE_$thorn"."_$block"."_C2F \\"); + + @data = &CreateCArgumentStatics(%data); + foreach $line (@data) + { + push(@returndata, "$line; \\"); + } + push(@returndata, ("","")); + + + # Create the C argument variable number statics initialisers + push(@returndata, "#define \UINITIALISE_$thorn"."_$block"."_C2F \\"); + @data = &CreateCArgumentInitialisers(%data); + foreach $line (@data) + { + push(@returndata,"$line; \\"); + } + + push(@returndata, ("","")); + + # Create the C argument prototypes + push(@returndata, "#define \U$thorn"."_$block"."_C2F_PROTO \\"); + + push(@returndata, &CreateCArgumentPrototype(%data)); + + push(@returndata, ("","")); + + # Create the C argument list + push(@returndata, "#define \UPASS_$thorn"."_$block"."_C2F(xGH) \\"); + + push(@returndata, &CreateCArgumentList(%data)); + + push(@returndata, ("","")); + + push(@returndata, "#endif /*CCODE*/"); + + push(@returndata, ("","")); + + } + + ################################################################ + + + # Create the final thorn argument macros + + # Do the Fortran argument lists + push(@returndata, "#ifdef FCODE"); + + $sep = ""; + + push(@returndata, "#define \U$thorn"."_FARGUMENTS CCTKARGS\\"); + + foreach $block ("PRIVATE", "PROTECTED", "PUBLIC") + { + if($hasvars{$block}) + { + push(@returndata, "$sep"."\U$thorn"."_$block"."_FARGUMENTS\\"); + $sep = ","; + } + } + + push(@returndata, ("","")); + + # Do the fortran declarations + push(@returndata, "#define \UDECLARE_$thorn"."_FARGUMENTS DECLARE_CCTKARGS\\"); + + foreach $block ("PRIVATE", "PROTECTED", "PUBLIC") + { + if($hasvars{$block}) + { + push(@returndata, "DECLARE_\U$thorn"."_$block"."_FARGUMENTS\\"); + } + } + + push(@returndata, ("","")); + + push(@returndata, "#endif /*FCODE*/"); + + push(@returndata, ("","")); + + + ################################################ + + # Do the C definitions + push(@returndata, "#ifdef CCODE"); + + $sep = ""; + + # Argument prototypes + push(@returndata, "#define \U$thorn"."_C2F_PROTO CCTKARGS_C2FPROTO\\"); + + foreach $block ("PRIVATE", "PROTECTED", "PUBLIC") + { + if($hasvars{$block}) + { + push(@returndata, "$sep"."\U$thorn"."_$block"."_C2F_PROTO\\"); + $sep = ","; + } + } + + push(@returndata, ("","")); + + # Argument lists + $sep = ""; + + push(@returndata, "#define PASS_\U$thorn"."_C2F(xGH) PASS_CCTKARGS_C2F(xGH)\\"); + + foreach $block ("PRIVATE", "PROTECTED", "PUBLIC") + { + if($hasvars{$block}) + { + push(@returndata, "$sep"."PASS_\U$thorn"."_$block"."_C2F(xGH)\\"); + $sep = ","; + } + } + + push(@returndata, ("","")); + + # Declare statics + + push(@returndata, "#define DECLARE_\U$thorn"."_C2F DECLARE_CCTKARGS_C2F \\"); + + foreach $block ("PRIVATE", "PROTECTED", "PUBLIC") + { + if($hasvars{$block}) + { + push(@returndata, "DECLARE_\U$thorn"."_$block"."_C2F\\"); + $sep = ","; + } + } + + push(@returndata, ("","")); + + # Initialise statics + + push(@returndata, "#define INITIALISE_\U$thorn"."_C2F INITIALISE_CCTKARGS_C2F \\"); + + foreach $block ("PRIVATE", "PROTECTED", "PUBLIC") + { + if($hasvars{$block}) + { + push(@returndata, "INITIALISE_\U$thorn"."_$block"."_C2F\\"); + $sep = ","; + } + } + + push(@returndata, ("","")); + + # Dummy C declarations + + push(@returndata, "#define \U$thorn"."_CARGS cGH *GH"); + + push(@returndata, "#define \UDECLARE_$thorn"."_CARGS"); + + + push(@returndata, "#endif /*CCODE*/"); + + push(@returndata, ("","")); + + return @returndata; +} + 1; |