aboutsummaryrefslogtreecommitdiff
path: root/src/CartGrid3D.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/CartGrid3D.c')
-rw-r--r--src/CartGrid3D.c61
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) */
{