From 55545012deaf9c62420da05a0fff3f252e431f96 Mon Sep 17 00:00:00 2001 From: schnetter Date: Fri, 12 May 2006 18:31:36 +0000 Subject: 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 --- src/interpolate.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++ src/rotatingsymmetry180.c | 34 ++++++++++++++++++++++++++- 2 files changed, 92 insertions(+), 1 deletion(-) 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 */ -- cgit v1.2.3