Adding new refinement criteria¶
Add any new parameters you might need. (See Adding a new parameter to Enzo.)
Write your code to flag the cells
Call your method.
The first point has been discussed elsewhere.
Writing your code to flag cells¶
Your code needs to do a couple things:
Be named
FlagCellsToBeRefinedByXXXXXX
, whereXXXXXX
is your criterion.Increment
FlaggingField[i]
Count and return the number of flaggged cells.
Return -1 on error.
Your code to do the cell flagging can be a grid method.
A minimal code should look like this:
int grid::FlagCellsToBeRefinedByDensityOverTwelve(){
int NumberOfFlaggedCells = 0;
for( int i = 0; i< GridDimension[0]*GridDimension[1]*GridDimension[2]; i++ ){
if( BaryonField[0][i] > 12 ){
FlaggingField[i] ++;
NumberOfFlaggedCells ++;
}
}
return NumberOfFlaggedCells;
}
Call your method¶
Edit the file Grid_SetFlaggingField.C
In this routine, there’s a
loop over the CellFlaggingMethod
array. In this loop, you’ll see
code like this:
/* ==== METHOD 47: By Density over 12 ==== */
case 47:
NumberOfFlaggedCells = this->FlagCellsToBeRefinedByDensityOverTwelve();
if (NumberOfFlaggedCells < 0) {
fprintf(stderr, "Error in grid->FlagCellsToBeRefinedByDensityOverTwelve.\n");
return FAIL;
}
break;
So we need to add a few things.
Add a new case statement to the switch construct.
Set
NumberOfFlaggedCells
via the method described above.Don’t forget the break; statement.
Check for errors.