diff options
Diffstat (limited to 'src/interpolate.c')
-rw-r--r-- | src/interpolate.c | 59 |
1 files changed, 59 insertions, 0 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); |