aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorknarf <knarf@55d78c69-0c5c-4738-8e60-d8a2776539f3>2010-04-06 15:50:42 +0000
committerknarf <knarf@55d78c69-0c5c-4738-8e60-d8a2776539f3>2010-04-06 15:50:42 +0000
commit470f290c309c1966a81c46ffefe42223c504eb46 (patch)
tree34feb4519efc4f43c84fe321d63af7076038cfeb /src
Thorn for excision testing.
- some ENO testsuites do not work (yet), be careful with ENO and excision atm git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinInitialData/Hydro_InitExcision/trunk@93 55d78c69-0c5c-4738-8e60-d8a2776539f3
Diffstat (limited to 'src')
-rw-r--r--src/Whisky_InitExcision.c253
-rw-r--r--src/make.code.defn10
2 files changed, 263 insertions, 0 deletions
diff --git a/src/Whisky_InitExcision.c b/src/Whisky_InitExcision.c
new file mode 100644
index 0000000..787fade
--- /dev/null
+++ b/src/Whisky_InitExcision.c
@@ -0,0 +1,253 @@
+ /*@@
+ @file Whisky_ExcisionMask.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 Whisky_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 (whisky_initexcision)
+ {
+ CCTK_INFO("Setting up Whisky 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 (whisky_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 (whisky_initexcision)
+ {
+ if (whisky_initexcision_old_mask)
+ emask[point]=emask_normal;
+ if (CCTK_Equals(whisky_initexcision_type,"box"))
+ {
+ if (CCTK_Equals(domain,"full"))
+ {
+ if ( (whisky_initexcision_coordinate_length <= 0.0) &&
+ ( ( x_frac > 0.5 - whisky_initexcision_fraction) &&
+ ( x_frac < 0.5 + whisky_initexcision_fraction) &&
+ ( y_frac > 0.5 - whisky_initexcision_fraction) &&
+ ( y_frac < 0.5 + whisky_initexcision_fraction) &&
+ ( z_frac > 0.5 - whisky_initexcision_fraction) &&
+ ( z_frac < 0.5 + whisky_initexcision_fraction)
+ ) ||
+ ( (whisky_initexcision_coordinate_length > 0.0) &&
+ ( fabs(x[point]-whisky_initexcision_position_x) <=
+ whisky_initexcision_coordinate_length*0.5) &&
+ ( fabs(y[point]-whisky_initexcision_position_y) <=
+ whisky_initexcision_coordinate_length*0.5) &&
+ ( fabs(z[point]-whisky_initexcision_position_z) <=
+ whisky_initexcision_coordinate_length*0.5)
+ )
+ )
+ {
+ hydro_excision_mask[point] = excised;
+ if (whisky_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ else
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ }
+ else if (CCTK_Equals(domain,"octant"))
+ {
+ if ( ( (whisky_initexcision_coordinate_length <= 0.0) &&
+ ( x_frac < whisky_initexcision_fraction) &&
+ ( y_frac < whisky_initexcision_fraction) &&
+ ( z_frac < whisky_initexcision_fraction)
+ ) ||
+ ( (whisky_initexcision_coordinate_length > 0.0) &&
+ ( fabs(x[point]-whisky_initexcision_position_x) <=
+ whisky_initexcision_coordinate_length*0.5) &&
+ ( fabs(y[point]-whisky_initexcision_position_y) <=
+ whisky_initexcision_coordinate_length*0.5) &&
+ ( fabs(z[point]-whisky_initexcision_position_z) <=
+ whisky_initexcision_coordinate_length*0.5)
+ )
+ )
+ {
+ hydro_excision_mask[point] = excised;
+ if (whisky_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ else
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ }
+ }
+ else if (CCTK_Equals(whisky_initexcision_type,"x-axis"))
+ {
+ if ( x_frac < 1.0-whisky_initexcision_fraction )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (whisky_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ }
+ else if (CCTK_Equals(whisky_initexcision_type,"y-axis"))
+ {
+ if ( y_frac < 1.0-whisky_initexcision_fraction )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (whisky_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ }
+ else if (CCTK_Equals(whisky_initexcision_type,"z-axis"))
+ {
+ if ( z_frac < 1.0-whisky_initexcision_fraction )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (whisky_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ }
+ else if (CCTK_Equals(whisky_initexcision_type,"diagonal"))
+ {
+ if ( x_frac + y_frac + z_frac <
+ 3.0*(1.0-whisky_initexcision_fraction) )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (whisky_initexcision_old_mask)
+ emask[point]=emask_excised;
+ }
+ }
+ else if (CCTK_Equals(whisky_initexcision_type,"sphere"))
+ {
+ if ( (whisky_initexcision_coordinate_length <= 0.0) &&
+ ( ( (x[point]-whisky_initexcision_position_x) *
+ (x[point]-whisky_initexcision_position_x) +
+ (y[point]-whisky_initexcision_position_y) *
+ (y[point]-whisky_initexcision_position_y) +
+ (z[point]-whisky_initexcision_position_z) *
+ (z[point]-whisky_initexcision_position_z) ) * 4.0
+ > (whisky_initexcision_fraction * x_size *
+ whisky_initexcision_fraction * x_size) ) ||
+ ( (whisky_initexcision_coordinate_length > 0) &&
+ ( (whisky_initexcision_coordinate_length <
+ cctkGH->cctk_delta_space[0]*
+ whisky_initexcision_min_points) ||
+ ( (x[point]-whisky_initexcision_position_x) *
+ (x[point]-whisky_initexcision_position_x) +
+ (y[point]-whisky_initexcision_position_y) *
+ (y[point]-whisky_initexcision_position_y) +
+ (z[point]-whisky_initexcision_position_z) *
+ (z[point]-whisky_initexcision_position_z)
+ > whisky_initexcision_coordinate_length*
+ whisky_initexcision_coordinate_length) ) ) )
+ {
+ hydro_excision_mask[point] = normal;
+ }
+ else
+ {
+ hydro_excision_mask[point] = excised;
+ if (whisky_initexcision_old_mask)
+ {
+ emask[point]=emask_excised;
+ }
+ }
+ }
+ }
+ else
+ {
+ hydro_excision_mask[point] = normal;
+ if (whisky_initexcision_old_mask)
+ emask[point]=emask_normal;
+ }
+ }
+ }
+ }
+ return;
+}
+
+void Whisky_InitExcisionMask_poststep(CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+ if (whisky_initexcision_poststep)
+ Whisky_InitExcisionMask(CCTK_PASS_CTOC);
+}
+
diff --git a/src/make.code.defn b/src/make.code.defn
new file mode 100644
index 0000000..df9cf14
--- /dev/null
+++ b/src/make.code.defn
@@ -0,0 +1,10 @@
+# Main make.code.defn file for thorn Hydra
+# $Header$
+
+# Source files in this directory
+
+SRCS = Whisky_InitExcision.c
+
+# Subdirectories containing source files
+SUBDIRS =
+