Next: Example: Fortran90 code
Up: Appendix
Previous: Appendix
Contents
Example: C code
#include "cctk.h"
#include "cctk_Arguments.h"
#include "cctk_Parameters.h"
#include "SpaceMask.h"
/*
* Register a mask type with three states.
*/
void Eg_RegisterMask (void)
{
char *state_list_excision[3] = {"normal", "excise", "boundary"};
SpaceMask_RegisterType("excision", 3, state_list_excision);
return;
}
/*
* Set the mask to the ``normal'' state at each point using the
* slower name-reference function. See below for an example using
* the faster bitwise operator to check the mask states.
*/
void Eg_SetMaskStates (CCTK_ARGUMENTS)
{
DECLARE_CCTK_ARGUMENTS
DECLARE_CCTK_PARAMETERS
int i, j, k, ijk;
for (k=0; k<cctk_lsh[2]; ++k)
{
for (j=0; j<cctk_lsh[1]; ++j)
{
for (i=0; i<cctk_lsh[0]; ++i)
{
ijk = CCTK_GFINDEX3D(cctkGH, i, j, k);
SpaceMask_SetState(space_mask, ijk, "excision", "normal");
}
}
}
return;
}
/*
* Check which of the points of the mask have been set to the
* ``boundary'' state using the bitwise macro.
*/
void Eg_CheckMaskStates (CCTK_ARGUMENTS)
{
DECLARE_CCTK_ARGUMENTS
DECLARE_CCTK_PARAMETERS
int i, j, k, ijk;
CCTK_INT excision_mask;
CCTK_INT boundary_mask;
excision_mask = SpaceMask_GetTypeBits("excision");
boundary_mask = SpaceMask_GetStateBits("boundary");
for (k=0; k<cctk_lsh[2]; ++k)
{
for (j=0; j<cctk_lsh[1]; ++j)
{
for (i=0; i<cctk_lsh[0]; ++i)
{
ijk = CCTK_GFINDEX3D(cctkGH, i, j, k);
if (SpaceMask_CheckStateBits(space_mask, ijk, excision_mask,
boundary_mask))
{
CCTK_VINFO(CCTK_THORNSTRING,
"Point (%d,%d,%d) is a boundary point.\n",
i, j, k);
}
}
}
}
return;
}
|