aboutsummaryrefslogtreecommitdiff
path: root/src/Symmetry.c
blob: 0b0209cdf71745bfd84558a8c17fec4346b49ff8 (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
124
125
126
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>

#include "cctk.h"

/*#define SYM_DEBUG*/

/* index convention:
   i ~ x ~ 0
   j ~ y ~ 1
   k ~ z ~ 2 */
   
int CartApplySym3Di(cGH *GH, int gdim, int *doSym, 
		   int *lssh, int *ghostz, int *sym, CCTK_REAL *var) 
{

  int i,j,k;

#ifdef SYM_DEBUG
  printf(" doSym: %d %d /  %d %d /  %d %d \n",
	 doSym[0],doSym[1],
	 doSym[2],doSym[3],
	 doSym[4],doSym[5]);
  printf(" lssh: %d %d %d sym: %d %d %d \n", 
	 lssh[0],lssh[1],lssh[2], sym[0], sym[2], sym[4] );
  printf(" ghostz %d %d %d \n",ghostz[0],ghostz[1],ghostz[2]);
#endif

  if (doSym[0] == 1)
  {
    for(k=0; k < lssh[2]; k++)
    {
      for(j=0; j < lssh[1]; j++)
      {
        for(i=0; i < ghostz[0]; i++)
        {
          var[CCTK_GFINDEX3D(GH,i,j,k)] = 
	    sym[0]*var[CCTK_GFINDEX3D(GH,2*ghostz[0]-1-i,j,k)];
        }
      }
    }
  }
 if (doSym[2] == 1)
  {
    for(i=0; i < lssh[0]; i++)
      {
	for(k=0; k < lssh[2]; k++)
	  {
	    for(j=0; j < ghostz[1]; j++)
	      {
		var[CCTK_GFINDEX3D(GH,i,j,k)] = 
		  sym[2]*var[CCTK_GFINDEX3D(GH,i,2*ghostz[1]-1-j,k)];
	      }
	  }
      }
  }
 if (doSym[4] == 1)
  {
    for(i=0; i < lssh[0]; i++)
      {
	for(j=0; j < lssh[1]; j++)
	  {
	    for(k=0; k < ghostz[2]; k++)
	      {
		var[CCTK_GFINDEX3D(GH,i,j,k)] = 
		  sym[4]*var[CCTK_GFINDEX3D(GH,i,j,2*ghostz[2]-1-k)];
	      }
	  }
      }
  }
 return(0);
}
   
int CartApplySym2Di(cGH *GH, int gdim, int *doSym, 
		   int *lssh, int *ghostz, int *sym, CCTK_REAL *var) 
{
  int i,j;

  if (doSym[0] == 1)
  {
    for(j=0; j < lssh[1]; j++)
    {
      for(i=0; i < ghostz[0]; i++)
      {
	var[CCTK_GFINDEX2D(GH,i,j)] = 
	  sym[0]*var[CCTK_GFINDEX2D(GH,2*ghostz[0]-1-i,j)];
      }
    }
  }
  
  if (doSym[2] == 1)
  {
    for(i=0; i < lssh[0]; i++)
    {
      for(j=0; j < ghostz[1]; j++)
      {
	var[CCTK_GFINDEX2D(GH,i,j)] = 
	  sym[2]*var[CCTK_GFINDEX2D(GH,i,2*ghostz[1]-1-j)];
      }
    }
  }
  
  return(0);
}

int CartApplySym1Di(cGH *GH, int gdim, int *doSym, 
		   int *lssh, int *ghostz, int *sym, CCTK_REAL *var) 
{
  int i;

  if (doSym[0] == 1)
  {
    for(i=0; i < ghostz[0]; i++)
    {
      var[CCTK_GFINDEX1D(GH,i)] = 
	sym[0]*var[CCTK_GFINDEX1D(GH,2*ghostz[0]-1-i)];
    }
  }

  return(0);
}