From 470f290c309c1966a81c46ffefe42223c504eb46 Mon Sep 17 00:00:00 2001 From: knarf Date: Tue, 6 Apr 2010 15:50:42 +0000 Subject: 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 --- src/Whisky_InitExcision.c | 253 ++++++++++++++++++++++++++++++++++++++++++++++ src/make.code.defn | 10 ++ 2 files changed, 263 insertions(+) create mode 100644 src/Whisky_InitExcision.c create mode 100644 src/make.code.defn (limited to 'src') 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 +#include + + /*@@ + @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 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 = + -- cgit v1.2.3