From 1d12e8e8ca9a5f91d38edd4cf0f7c660281eadca Mon Sep 17 00:00:00 2001 From: schnetter Date: Mon, 19 Jan 2004 22:59:32 +0000 Subject: Provide a coordinate-thorn and symmetry-thorn independent way of specifying the shape of the physical domain and the location of the boundary points. The advantage of that is that it is now much easier to change the resolution. git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/CartGrid3D/trunk@190 c78560ca-4b45-4335-b268-5f3340f3cb52 --- src/CartGrid3D.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++------- src/ParamCheck.c | 31 ++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/CartGrid3D.c b/src/CartGrid3D.c index c3eb7f0..3592adf 100644 --- a/src/CartGrid3D.c +++ b/src/CartGrid3D.c @@ -9,6 +9,7 @@ @enddesc @@*/ +#include #include #include @@ -68,7 +69,7 @@ void DecodeSymParameters3D(int sym[6]); void CartGrid3D(CCTK_ARGUMENTS) { int i, j, k, idx; - int iconv, is_coarsest_refinement_level, coord_handle, ierr; + int is_coarsest_refinement_level, coord_handle, ierr; CCTK_REAL origin[3], this_delta[3], min1[3], max1[3]; CCTK_REAL *coarse_delta[3]; double lower[3], upper[3]; @@ -113,8 +114,6 @@ void CartGrid3D(CCTK_ARGUMENTS) } } - iconv = 1 << cctk_convlevel; - /**************************************************************** * * BYRANGE @@ -168,12 +167,12 @@ void CartGrid3D(CCTK_ARGUMENTS) if (cntstag[i]) { *coarse_delta[i] = max1[i] / (cctk_gsh[i] - cctk_nghostzones[i]-0.5); - origin[i] = - (cctk_nghostzones[i]-0.5) * *coarse_delta[i]*iconv; + origin[i] = - (cctk_nghostzones[i]-0.5) * *coarse_delta[i]; } else { *coarse_delta[i] = max1[i] / (cctk_gsh[i] - cctk_nghostzones[i]-1); - origin[i] = - cctk_nghostzones[i] * *coarse_delta[i]*iconv; + origin[i] = - cctk_nghostzones[i] * *coarse_delta[i]; } } else @@ -188,7 +187,7 @@ void CartGrid3D(CCTK_ARGUMENTS) origin[i] = min1[i]; } - this_delta[i] = *coarse_delta[i] * iconv; + this_delta[i] = *coarse_delta[i]; } } @@ -213,7 +212,7 @@ void CartGrid3D(CCTK_ARGUMENTS) for (i = 0; i < 3; i++) { - this_delta[i] = *coarse_delta[i] * iconv; + this_delta[i] = *coarse_delta[i]; /* Set minimum values of coordinates */ if (domainsym[2*i]) @@ -227,6 +226,54 @@ void CartGrid3D(CCTK_ARGUMENTS) } } } + + /************************************************************** + * COORDBASE + * + * CoordBase gives: grid spacing on the coarsest GH and + * minimum and maximum values of coordinates and + * the number of gridpoints on the coarsest GH + * + **************************************************************/ + else if (CCTK_Equals(type,"coordbase")) + { + CCTK_REAL physical_min[3]; + CCTK_REAL physical_max[3]; + CCTK_REAL interior_min[3]; + CCTK_REAL interior_max[3]; + CCTK_REAL exterior_min[3]; + CCTK_REAL exterior_max[3]; + CCTK_REAL spacing[3]; + int ierr; + int d; + + ierr = GetDomainSpecification + (3, physical_min, physical_max, interior_min, interior_max, + exterior_min, exterior_max, spacing); + assert (!ierr); + + /* Adapt to convergence level */ + for (d=0; d<3; ++d) { + spacing[d] *= pow(cctkGH->cctk_convfac, cctkGH->cctk_convlevel); + } + + ierr = ConvertFromPhysicalBoundary + (3, physical_min, physical_max, interior_min, interior_max, + exterior_min, exterior_max, spacing); + assert (!ierr); + + for (d=0; d<3; ++d) { + origin[d] = exterior_min[d]; + this_delta[d] = spacing[d]; + *coarse_delta[d] = this_delta[d]; + } + } + + else + { + assert (0); + } + } else /* if (not coarsest refinement level) */ { diff --git a/src/ParamCheck.c b/src/ParamCheck.c index 5478b91..ffa658e 100644 --- a/src/ParamCheck.c +++ b/src/ParamCheck.c @@ -95,7 +95,38 @@ void ParamCheck_CartGrid3D(CCTK_ARGUMENTS) { iflag++; } + } + else if (CCTK_Equals(type,"coordbase")) + { + if (CCTK_IsFunctionAliased ("GetDomainSpecification")) + { + if (CCTK_Equals(domain,"bitant")) + { + iflag++; + } + if (CCTK_Equals(domain,"bitant_rotate")) + { + iflag++; + } + else if (CCTK_Equals(domain,"quadrant")) + { + iflag++; + } + else if (CCTK_Equals(domain,"quadrant_reflect_rotate")) + { + iflag++; + } + else if (CCTK_Equals(domain,"octant")) + { + iflag++; + } + else if (CCTK_Equals(domain,"full")) + { + iflag++; + } + } + } else if (CCTK_Equals(type,"box")) { iflag++; -- cgit v1.2.3