aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorschnetter <schnetter@c78560ca-4b45-4335-b268-5f3340f3cb52>2004-01-19 22:59:32 +0000
committerschnetter <schnetter@c78560ca-4b45-4335-b268-5f3340f3cb52>2004-01-19 22:59:32 +0000
commit1d12e8e8ca9a5f91d38edd4cf0f7c660281eadca (patch)
tree412ef84432ef7a7de212bd7141f1a0197697bc5c /src
parent32024ef94c0b6799d030ad1a4e915bec640aa037 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/CartGrid3D.c61
-rw-r--r--src/ParamCheck.c31
2 files changed, 85 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) */
{
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++;