aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschnetter <schnetter@20f44201-0f4f-0410-9130-e5fc2714a787>2006-05-12 18:31:36 +0000
committerschnetter <schnetter@20f44201-0f4f-0410-9130-e5fc2714a787>2006-05-12 18:31:36 +0000
commit55545012deaf9c62420da05a0fff3f252e431f96 (patch)
tree167660523da7f6d229f350242a309214900bc3a8
parent58a3ab232f5bc365cd4f9a76659d6830e892a7f8 (diff)
Handle 4-tensors as well.
Correct a wrong data type in a warning statement. git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/RotatingSymmetry180/trunk@31 20f44201-0f4f-0410-9130-e5fc2714a787
-rw-r--r--src/interpolate.c59
-rw-r--r--src/rotatingsymmetry180.c34
2 files changed, 92 insertions, 1 deletions
diff --git a/src/interpolate.c b/src/interpolate.c
index 304ef80..16cb5a4 100644
--- a/src/interpolate.c
+++ b/src/interpolate.c
@@ -66,15 +66,34 @@ Rot180_CheckTensorTypes (CCTK_ARGUMENTS)
groupname);
free (groupname);
}
+ } else if (CCTK_EQUALS (tensortypealias, "4-scalar")) {
+ /* 4-scalar */
+ if (numvars != 1) {
+ char * groupname = CCTK_GroupName(gi);
+ assert (groupname);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has the tensor type alias \"4scalar\", but contains more than 1 element",
+ groupname);
+ free (groupname);
+ }
} else if (CCTK_EQUALS (tensortypealias, "u")
|| CCTK_EQUALS (tensortypealias, "d"))
{
/* vector */
assert (numvars == 3);
+ } else if (CCTK_EQUALS (tensortypealias, "4u")
+ || CCTK_EQUALS (tensortypealias, "4d"))
+ {
+ /* 4-vector */
+ assert (numvars == 4);
} else if (CCTK_EQUALS (tensortypealias, "uu_sym")
|| CCTK_EQUALS (tensortypealias, "dd_sym")) {
/* symmetric tensor */
assert (numvars == 6);
+ } else if (CCTK_EQUALS (tensortypealias, "4uu_sym")
+ || CCTK_EQUALS (tensortypealias, "4dd_sym")) {
+ /* symmetric 4-tensor */
+ assert (numvars == 10);
} else {
char * groupname = CCTK_GroupName(gi);
assert (groupname);
@@ -274,12 +293,32 @@ Rot180_SymmetryInterpolate (CCTK_POINTER_TO_CONST const cctkGH_,
free (groupname);
}
parities[0] = parities[1] = parities[2] = +1;
+ } else if (CCTK_EQUALS (tensortypealias, "4scalar")) {
+ if (numvars != 1) {
+ char * groupname = CCTK_GroupName(gi);
+ assert (groupname);
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has the tensor type alias \"scalar\", but contains more than 1 element",
+ groupname);
+ free (groupname);
+ }
+ parities[0] = parities[1] = parities[2] = +1;
} else if (CCTK_EQUALS (tensortypealias, "u")
|| CCTK_EQUALS (tensortypealias, "d"))
{
assert (numvars == 3);
parities[0] = parities[1] = parities[2] = +1;
parities[index] = -1;
+ } else if (CCTK_EQUALS (tensortypealias, "4u")
+ || CCTK_EQUALS (tensortypealias, "4d"))
+ {
+ assert (numvars == 4);
+ if (vi == firstvar) {
+ parities[0] = parities[1] = parities[2] = +1;
+ } else {
+ parities[0] = parities[1] = parities[2] = +1;
+ parities[index] = -1;
+ }
} else if (CCTK_EQUALS (tensortypealias, "uu_sym")
|| CCTK_EQUALS (tensortypealias, "dd_sym")) {
assert (numvars == 6);
@@ -293,6 +332,26 @@ Rot180_SymmetryInterpolate (CCTK_POINTER_TO_CONST const cctkGH_,
case 5: break;
default: assert(0);
}
+ } else if (CCTK_EQUALS (tensortypealias, "4uu_sym")
+ || CCTK_EQUALS (tensortypealias, "4dd_sym")) {
+ assert (numvars == 10);
+ if (vi == firstvar) {
+ parities[0] = parities[1] = parities[2] = +1;
+ } else if (vi < firstvar + 4) {
+ parities[0] = parities[1] = parities[2] = +1;
+ parities[index] = -1;
+ } else {
+ parities[0] = parities[1] = parities[2] = +1;
+ switch (index) {
+ case 0: break;
+ case 1: parities[0] = parities[1] = -1; break;
+ case 2: parities[0] = parities[2] = -1; break;
+ case 3: break;
+ case 4: parities[1] = parities[2] = -1; break;
+ case 5: break;
+ default: assert(0);
+ }
+ }
} else {
char * groupname = CCTK_GroupName(gi);
assert (groupname);
diff --git a/src/rotatingsymmetry180.c b/src/rotatingsymmetry180.c
index 13c6ab9..7404770 100644
--- a/src/rotatingsymmetry180.c
+++ b/src/rotatingsymmetry180.c
@@ -160,12 +160,24 @@ int BndRot180VI (cGH const * restrict const cctkGH,
if (CCTK_EQUALS (tensortypealias, "scalar")) {
paritiess[var][0] = paritiess[var][1] = paritiess[var][2] = +1;
+ } else if (CCTK_EQUALS (tensortypealias, "4scalar")) {
+ paritiess[var][0] = paritiess[var][1] = paritiess[var][2] = +1;
} else if (CCTK_EQUALS (tensortypealias, "u")
|| CCTK_EQUALS (tensortypealias, "d"))
{
assert (numvars == 3);
paritiess[var][0] = paritiess[var][1] = paritiess[var][2] = +1;
paritiess[var][index] = -1;
+ } else if (CCTK_EQUALS (tensortypealias, "4u")
+ || CCTK_EQUALS (tensortypealias, "4d"))
+ {
+ assert (numvars == 4);
+ if (index == 0) {
+ paritiess[var][0] = paritiess[var][1] = paritiess[var][2] = +1;
+ } else {
+ paritiess[var][0] = paritiess[var][1] = paritiess[var][2] = +1;
+ paritiess[var][index-1] = -1;
+ }
} else if (CCTK_EQUALS (tensortypealias, "uu_sym")
|| CCTK_EQUALS (tensortypealias, "dd_sym")) {
assert (numvars == 6);
@@ -179,6 +191,26 @@ int BndRot180VI (cGH const * restrict const cctkGH,
case 5: break;
default: assert(0);
}
+ } else if (CCTK_EQUALS (tensortypealias, "4uu_sym")
+ || CCTK_EQUALS (tensortypealias, "4dd_sym")) {
+ assert (numvars == 10);
+ if (index == 0) {
+ paritiess[var][0] = paritiess[var][1] = paritiess[var][2] = +1;
+ } else if (index < 4) {
+ paritiess[var][0] = paritiess[var][1] = paritiess[var][2] = +1;
+ paritiess[var][index-1] = -1;
+ } else {
+ paritiess[var][0] = paritiess[var][1] = paritiess[var][2] = +1;
+ switch (index-4) {
+ case 0: break;
+ case 1: paritiess[var][0] = paritiess[var][1] = -1; break;
+ case 2: paritiess[var][0] = paritiess[var][2] = -1; break;
+ case 3: break;
+ case 4: paritiess[var][1] = paritiess[var][2] = -1; break;
+ case 5: break;
+ default: assert(0);
+ }
+ }
} else {
char * groupname = CCTK_GroupName(gis[var]);
assert (groupname);
@@ -283,7 +315,7 @@ int BndRot180VI (cGH const * restrict const cctkGH,
"The group needs to have at least %d grid points in that direction.",
CCTK_GroupNameFromVarI(vis[var]), "xyz"[dir], data.gsh[dir],
data.nghostzones[dir],
- 2*data.nghostzones[dir] + offset);
+ 2*data.nghostzones[dir] + offset[dir]);
}
/* Allocate slab transfer description */