aboutsummaryrefslogtreecommitdiff
path: root/src/interpolate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interpolate.c')
-rw-r--r--src/interpolate.c85
1 files changed, 80 insertions, 5 deletions
diff --git a/src/interpolate.c b/src/interpolate.c
index 9c6a392..844aaf6 100644
--- a/src/interpolate.c
+++ b/src/interpolate.c
@@ -293,14 +293,34 @@ Rot90_CheckTensorTypes (CCTK_ARGUMENTS)
groupname);
free (groupname);
}
+ } else if (CCTK_EQUALS (tensortypealias, "4scalar")) {
+ /* 4-scalar */
+ if (numvars != 1) {
+ char * groupname = CCTK_GroupName(gi);
+ assert (groupname);
+ CCTK_VWarn (3, __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, "dd_sym")) {
+ } 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);
@@ -582,6 +602,19 @@ Rot90_SymmetryInterpolate (CCTK_POINTER_TO_CONST const cctkGH_,
tensortype = &scalar;
basevar = vi;
var = 0;
+ } else if (CCTK_EQUALS (tensortypealias, "4scalar")) {
+ /* 4-scalar */
+ if (numvars != 1) {
+ char * groupname = CCTK_GroupName(gi);
+ assert (groupname);
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Group \"%s\" has the tensor type alias \"4-scalar\", but contains more than 1 element",
+ groupname);
+ free (groupname);
+ }
+ tensortype = &scalar;
+ basevar = vi;
+ var = 0;
} else if (CCTK_EQUALS (tensortypealias, "u")
|| CCTK_EQUALS (tensortypealias, "d"))
{
@@ -589,13 +622,55 @@ Rot90_SymmetryInterpolate (CCTK_POINTER_TO_CONST const cctkGH_,
assert (numvars == 3);
tensortype = &vector;
basevar = firstvar;
- var = vi - firstvar;
- } else if (CCTK_EQUALS (tensortypealias, "dd_sym")) {
+ var = vi - basevar;
+ } else if (CCTK_EQUALS (tensortypealias, "4u")
+ || CCTK_EQUALS (tensortypealias, "4d"))
+ {
+ /* 4-vector */
+ assert (numvars == 4);
+ if (vi == firstvar) {
+ /* temporal component */
+ int const off = 0;
+ tensortype = &scalar;
+ basevar = firstvar + off;
+ var = vi - basevar;
+ } else {
+ /* spatial components */
+ int const off = 1;
+ tensortype = &vector;
+ basevar = firstvar + off;
+ var = vi - basevar;
+ }
+ } else if (CCTK_EQUALS (tensortypealias, "uu_sym")
+ || CCTK_EQUALS (tensortypealias, "dd_sym")) {
/* symmetric tensor */
assert (numvars == 6);
tensortype = &symmtensor;
basevar = firstvar;
- var = vi - firstvar;
+ var = vi - basevar;
+ } else if (CCTK_EQUALS (tensortypealias, "4uu_sym")
+ || CCTK_EQUALS (tensortypealias, "4dd_sym")) {
+ /* symmetric 4-tensor */
+ assert (numvars == 10);
+ if (vi == firstvar) {
+ /* temporal-temporal component */
+ int const off = 0;
+ tensortype = &scalar;
+ basevar = firstvar + off;
+ var = vi - basevar;
+ } else if (vi < firstvar+4) {
+ /* temporal-spatial components */
+ int const off = 1;
+ tensortype = &vector;
+ basevar = firstvar + off;
+ var = vi - basevar;
+ } else {
+ /* spatial-spatial components */
+ int const off = 4;
+ tensortype = &symmtensor;
+ basevar = firstvar + off;
+ var = vi - basevar;
+ }
} else {
char * groupname = CCTK_GroupName(gi);
assert (groupname);
@@ -621,7 +696,7 @@ Rot90_SymmetryInterpolate (CCTK_POINTER_TO_CONST const cctkGH_,
oldrank = tensortype->rank;
}
- /* Take operation code (i.e. derivatives) into account */
+ /* Take operation code (i.e., derivatives) into account */
{
int code = operation_codes[m];
num_derivs