aboutsummaryrefslogtreecommitdiff
path: root/src/GetSymmetry.c
blob: f21a3ee9fc5ef8c79f1026da5294a97b04d2a47d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*@@
  @file      GetSymmetry.c
  @date      April 12 2002
  @author    Frank Herrmann
  @desc
             This file contains the routines for getting symmetry information
             code stolen from SetSymmetry.c
  @enddesc
  @version   $Id$
@@*/

#include <stdlib.h>

#include "cctk.h"
#include "cctk_Parameters.h"
#include "cctk_FortranString.h"
#include "Symmetry.h"

static const char *rcsid = "$Header$";

CCTK_FILEVERSION(CactusBase_CartGrid3D_GetSymmetry_c)

/********************************************************************
 *********************     Local Defines      ***********************
 ********************************************************************/
#define MAX_DIM  3
#define MAX_FACE 6


/********************************************************************
 ********************* Local Routine Prototypes *********************
 ********************************************************************/
void DecodeSymParameters3D(int sym[6]);

void CCTK_FCALL CCTK_FNAME(GetCartSymVI)
                          (int *ierr, const cGH **GH, int *sym, const int *vi);
void CCTK_FCALL CCTK_FNAME(GetCartSymVN)
                          (int *ierr, const cGH **GH, int *sym, ONE_FORTSTRING_ARG);

/********************************************************************
 *********************     External Routines   **********************
 ********************************************************************/

/*@@
  @routine    GetCartSymVI
  @date       Mon Mar 15 15:10:58 1999
  @author     Frank Herrmann
  @desc
              This routine returns symmetry for variable index.
  @enddesc
@@*/
int GetCartSymVI(const cGH *GH, int *sym, int vi)
{
  int domainsym[MAX_FACE];
  SymmetryGHex *sGHex;
  int dir;
  DECLARE_CCTK_PARAMETERS


  /* Pointer to the SymmetryGHextension */
  sGHex = (SymmetryGHex *)CCTK_GHExtension(GH, "Symmetry");

  /* Reference the hash table in the GHex and get the kind of
   * symmetry being applied
   */

#ifdef SYM_DEBUG
   printf("GetSymmetry: %s [%d,%d,%d]\n",CCTK_VarName(vi),
                            sym[0],sym[1],sym[2]);
#endif

  DecodeSymParameters3D(domainsym);

  for (dir=0; dir<MAX_FACE; ++dir)
  {
    if (domainsym[dir])
      sym[dir/2]=sGHex->GFSym[vi][dir];
  }

  return 0;
}

void CCTK_FCALL CCTK_FNAME(GetCartSymVI)
                          (int *ierr, const cGH **GH, int *sym, const int *vi)
{
  *ierr = GetCartSymVI(*GH, sym, *vi);
}


/*@@
  @routine    GetCartSymVN
  @date       April 12 2002
  @author     Frank Herrmann
  @desc
              Gets symmetry boundary conditions from variable name
  @enddesc
@@*/
int GetCartSymVN(const cGH *GH, int *sym, const char *vn)
{
  int vi;
  vi = CCTK_VarIndex(vn);

  if (vi>-1)
  {
    return(GetCartSymVI(GH, sym, vi));
  }
  else
  {
    CCTK_VWarn(1,__LINE__,__FILE__,CCTK_THORNSTRING,
               "Cannot find variable %s in GetCartSymVN",vn);
    return(-1);
  }
}

void CCTK_FCALL CCTK_FNAME(GetCartSymVN)
                          (int *ierr, const cGH **GH, int *sym, ONE_FORTSTRING_ARG)
{
  ONE_FORTSTRING_CREATE(vn)
  *ierr = GetCartSymVN(*GH, sym, vn);
  free(vn);
}