diff options
Diffstat (limited to 'src/CartGrid3D.c')
-rw-r--r-- | src/CartGrid3D.c | 61 |
1 files changed, 54 insertions, 7 deletions
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 <assert.h> #include <stdio.h> #include <math.h> @@ -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) */ { |