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);
}
|