Adding a new parameter to Enzo¶
If your parameter is only used for a problem initialization, this
page is not relevant for you. You should just read it in during
ProblemInitialize.C
where Problem
is replaced by the name of
the problem type.
If you’re extending Enzo for any reason, you’ll probably need to add a new switch or parameter to the code. Currently, this page describes the simplest, most brute force method. There are four files you’ll need to edit to make this happen.
global_data.h
holds all the global data. It’s included in almost all Enzo files. Your parameter should be added like this:EXTERN int MyInt; EXTERN float MyFloat;
EXTERN is a macro that either maps to extern if
USE_STORAGE
is defined, or nothing ifUSE_STORAGE
is not defined.USE_STORAGE
is defined inenzo.C
before the inclusion ofglobal_data.h
, and undefined after.SetDefaultGlobalValues.C
sets the default global values. Set your value here.ReadParameterFile.C
reads the parameter file. In this routine, each line is read from the file and is compared to the given parameters withsscanf()
. Your line should look like this:ret += sscanf(line, "MyFloat = %"FSYM, &MyFloat); ret += sscanf(line, "MyInt = %"ISYM, &MyInteger);
and should be inserted somewhere in the loop where line is relevant. Note that
ISYM
andFSYM
are the generalized integer and float I/O macro, which exist to take care of the dynamic hijacking of ‘float’. See this page for more information: Variable precision in Enzo. Theret +=
controls whether the line has been read, or if Enzo should issue a warning about the line. Note also thatsscanf()
is neutral to the amount of consecutive whitespace in the format string argument.WriteParameterFile.C
writes the restart parameter file. Somewhere before the end of the routine, you should add something that looks likefprintf(fptr, "MyFloat = %"GSYM"\n", MyFloat); fprintf(fptr, "MyInt = %"ISYM"\n", MyInt);
Note the use of quotes here and in the previous code snippet. This is correct.
For testing purposes you can verify that your new parameter is being correctly read in by
adding a line like this at the bottom of ReadParameterFile.C
:
fprintf(stdout, "MyFloat %f MyInt %d\n", MyFloat, MyInt);
return SUCCESS;
}