aboutsummaryrefslogtreecommitdiff
path: root/src/Hydro_InitExcision.c
diff options
context:
space:
mode:
authorknarf <knarf@55d78c69-0c5c-4738-8e60-d8a2776539f3>2010-04-23 07:27:19 +0000
committerknarf <knarf@55d78c69-0c5c-4738-8e60-d8a2776539f3>2010-04-23 07:27:19 +0000
commitf5ba8ce77c8c3eb9f32d7174e725b8adb730d9bc (patch)
tree0d55169912a8a162aaa8e8e9f49c8d9653330626 /src/Hydro_InitExcision.c
parent470f290c309c1966a81c46ffefe42223c504eb46 (diff)
reflect thorn name change, also change implementation name, file, parameter and function names, make testsuites work by also applying the necessary name changes
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinInitialData/Hydro_InitExcision/trunk@106 55d78c69-0c5c-4738-8e60-d8a2776539f3
Diffstat (limited to 'src/Hydro_InitExcision.c')
-rw-r--r--src/Hydro_InitExcision.c253
1 files changed, 253 insertions, 0 deletions
diff --git a/src/Hydro_InitExcision.c b/src/Hydro_InitExcision.c
new file mode 100644
index 0000000..c9e7b08
--- /dev/null
+++ b/src/Hydro_InitExcision.c
@@ -0,0 +1,253 @@
+ /*@@
+ @file Hydro_InitExcisionMask.c
+ @date Wed Mar 13 14:18:38 2002
+ @author Andrea Nerozzi, Frank Loeffler
+ @desc
+ Creates the mask for an excision region
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include <stdio.h>
+#include <math.h>
+
+ /*@@
+ @routine Excision Mask
+ @date Mon Apr 7 14:18:38 2003
+ @author Andrea Nerozzi
+ @desc
+ Sets up the excision region
+ @enddesc
+ @calls
+ @calledby
+ @history added 'sphere' and rewrote to be multi-processor-safe
+
+ @endhistory
+
+@@*/
+
+void Hydro_InitExcisionMask(CCTK_ARGUMENTS)
+{
+
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ CCTK_INT i,j,k, nx, ny, nz, point;
+ CCTK_INT excised, normal;
+ CCTK_REAL emask_excised, emask_normal;
+ CCTK_REAL x_min, x_max, y_min, y_max, z_min, z_max;
+ CCTK_REAL x_size, y_size, z_size;
+ CCTK_REAL x_frac, y_frac, z_frac;
+
+ if (hydro_initexcision)
+ {
+ CCTK_INFO("Setting up Hydro Initial Excision region.");
+ }
+
+ nx = cctk_lsh[0];
+ ny = cctk_lsh[1];
+ nz = cctk_lsh[2];
+
+ CCTK_CoordRange(cctkGH, &x_min, &x_max, 1, NULL, "cart3d");
+ CCTK_CoordRange(cctkGH, &y_min, &y_max, 2, NULL, "cart3d");
+ CCTK_CoordRange(cctkGH, &z_min, &z_max, 3, NULL, "cart3d");
+ x_size = x_max - x_min;
+ y_size = y_max - y_min;
+ z_size = z_max - z_min;
+
+ excised=1;
+ normal =0;
+ emask_excised=0.0;
+ emask_normal=1.0;
+ if (hydro_initexcision_flip)
+ {
+ excised=0;
+ normal =1;
+ emask_excised=1.0;
+ emask_normal=0.0;
+ }
+
+ for (k=0 ; k<nz ; k++)
+ {
+ for (j=0 ; j<ny ; j++)
+ {
+ for (i=0 ; i<nx; i++)
+ {
+ point = CCTK_GFINDEX3D(cctkGH,i,j,k);
+ x_frac = (x[point]-x_min) / x_size + 1.e-10;
+ y_frac = (y[point]-y_min) / y_size + 1.e-10;
+ z_frac = (z[point]-z_min) / z_size + 1.e-10;
+
+ if (hydro_initexcision)
+ {
+ if (hydro_initexcision_old_mask)
+ emask[point]=emask_normal;
+ if (CCTK_Equals(hydro_initexcision_type,"box"))
+ {
+ if (CCTK_Equals(domain,"full"))
+ {
+ if ( (hydro_initexcision_coordinate_length <= 0.0) &&
+ ( ( x_frac > 0.5 - hydro_initexcision_fraction) &&
+ ( x_frac < 0.5 + hydro_initexcision_fraction) &&
+ ( y_frac > 0.5 - hydro_initexcision_fraction) &&
+ ( y_frac < 0.5 + hydro_initexcision_fraction) &&
+ ( z_frac > 0.5 - hydro_initexcision_fraction) &&
+ ( z_frac < 0.5 + hydro_initexcision_fraction)
+ ) ||
+ ( (hydro_initexcision_coordinate_length > 0.0) &&
+ ( fabs(x[point]-hydro_initexcision_position_x) <=
+ hydro_initexcision_coordinate_length*0.5) &&
+ ( fabs(y[point]-hydro_initexcision_position_y) <=
+ hydro_initexcision_coordinate_length*0.5) &&
+ ( fabs(z[point]-hydro_initexcision_position_z) <=
+ hydro_initexcision_coordinate_length*0.5)
+ )
+ )
+ {
+ hydro_excision_mask[point] = excised;
+ if (hydro_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ else
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ }
+ else if (CCTK_Equals(domain,"octant"))
+ {
+ if ( ( (hydro_initexcision_coordinate_length <= 0.0) &&
+ ( x_frac < hydro_initexcision_fraction) &&
+ ( y_frac < hydro_initexcision_fraction) &&
+ ( z_frac < hydro_initexcision_fraction)
+ ) ||
+ ( (hydro_initexcision_coordinate_length > 0.0) &&
+ ( fabs(x[point]-hydro_initexcision_position_x) <=
+ hydro_initexcision_coordinate_length*0.5) &&
+ ( fabs(y[point]-hydro_initexcision_position_y) <=
+ hydro_initexcision_coordinate_length*0.5) &&
+ ( fabs(z[point]-hydro_initexcision_position_z) <=
+ hydro_initexcision_coordinate_length*0.5)
+ )
+ )
+ {
+ hydro_excision_mask[point] = excised;
+ if (hydro_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ else
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ }
+ }
+ else if (CCTK_Equals(hydro_initexcision_type,"x-axis"))
+ {
+ if ( x_frac < 1.0-hydro_initexcision_fraction )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (hydro_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ }
+ else if (CCTK_Equals(hydro_initexcision_type,"y-axis"))
+ {
+ if ( y_frac < 1.0-hydro_initexcision_fraction )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (hydro_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ }
+ else if (CCTK_Equals(hydro_initexcision_type,"z-axis"))
+ {
+ if ( z_frac < 1.0-hydro_initexcision_fraction )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (hydro_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ }
+ else if (CCTK_Equals(hydro_initexcision_type,"diagonal"))
+ {
+ if ( x_frac + y_frac + z_frac <
+ 3.0*(1.0-hydro_initexcision_fraction) )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (hydro_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ }
+ else if (CCTK_Equals(hydro_initexcision_type,"sphere"))
+ {
+ if ( (hydro_initexcision_coordinate_length <= 0.0) &&
+ ( ( (x[point]-hydro_initexcision_position_x) *
+ (x[point]-hydro_initexcision_position_x) +
+ (y[point]-hydro_initexcision_position_y) *
+ (y[point]-hydro_initexcision_position_y) +
+ (z[point]-hydro_initexcision_position_z) *
+ (z[point]-hydro_initexcision_position_z) ) * 4.0
+ > (hydro_initexcision_fraction * x_size *
+ hydro_initexcision_fraction * x_size) ) ||
+ ( (hydro_initexcision_coordinate_length > 0) &&
+ ( (hydro_initexcision_coordinate_length <
+ cctkGH->cctk_delta_space[0]*
+ hydro_initexcision_min_points) ||
+ ( (x[point]-hydro_initexcision_position_x) *
+ (x[point]-hydro_initexcision_position_x) +
+ (y[point]-hydro_initexcision_position_y) *
+ (y[point]-hydro_initexcision_position_y) +
+ (z[point]-hydro_initexcision_position_z) *
+ (z[point]-hydro_initexcision_position_z)
+ > hydro_initexcision_coordinate_length*
+ hydro_initexcision_coordinate_length) ) ) )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (hydro_initexcision_old_mask)
+ {
+ emask[point]=emask_excised;
+ }
+ }
+ }
+ }
+ else
+ {
+ hydro_excision_mask[point] = normal;
+ if (hydro_initexcision_old_mask)
+ emask[point]=emask_normal;
+ }
+ }
+ }
+ }
+ return;
+}
+
+void Hydro_InitExcisionMask_poststep(CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+ if (hydro_initexcision_poststep)
+ Hydro_InitExcisionMask(CCTK_PASS_CTOC);
+}
+