@@ -46,7 +46,6 @@ struct CartesianCustomCoefAlgorithm {
46
46
stencil_coefs_z.resize (2 );
47
47
stencil_coefs_z[0 ] = 1 ._rt *inv_dz;
48
48
stencil_coefs_z[1 ] = 1 ._rt *inv_dz;
49
-
50
49
}
51
50
52
51
/* *
@@ -120,20 +119,11 @@ struct CartesianCustomCoefAlgorithm {
120
119
121
120
using namespace amrex ;
122
121
#if defined WARPX_DIM_3D
123
- Real const alphay = coefs_y[1 ];
124
- Real const betayz = coefs_y[2 ];
125
- Real const betayx = coefs_y[3 ];
126
- Real const gammay = coefs_y[4 ];
127
- amrex::ignore_unused (n_coefs_y);
128
- return alphay * (F (i ,j+1 ,k ,ncomp) - F (i ,j ,k ,ncomp))
129
- + betayx * (F (i+1 ,j+1 ,k ,ncomp) - F (i+1 ,j ,k ,ncomp)
130
- + F (i-1 ,j+1 ,k ,ncomp) - F (i-1 ,j ,k ,ncomp))
131
- + betayz * (F (i ,j+1 ,k+1 ,ncomp) - F (i ,j ,k+1 ,ncomp)
132
- + F (i ,j+1 ,k-1 ,ncomp) - F (i ,j ,k-1 ,ncomp))
133
- + gammay * (F (i+1 ,j+1 ,k+1 ,ncomp) - F (i+1 ,j ,k+1 ,ncomp)
134
- + F (i-1 ,j+1 ,k+1 ,ncomp) - F (i-1 ,j ,k+1 ,ncomp)
135
- + F (i+1 ,j+1 ,k-1 ,ncomp) - F (i+1 ,j ,k-1 ,ncomp)
136
- + F (i-1 ,j+1 ,k-1 ,ncomp) - F (i-1 ,j ,k-1 ,ncomp));
122
+ amrex::Real derivative = 0 ;
123
+ for (int l=0 ; l<n_coefs_y/2 ; l++) {
124
+ derivative += coefs_y[l] * (F (i,j+1 +l,k,ncomp) - F (i,j-l,k,ncomp));
125
+ }
126
+ return derivative;
137
127
#elif (defined WARPX_DIM_XZ || WARPX_DIM_1D_Z)
138
128
amrex::ignore_unused (F, coefs_y, n_coefs_y,
139
129
i, j, k, ncomp);
@@ -155,9 +145,11 @@ struct CartesianCustomCoefAlgorithm {
155
145
156
146
using namespace amrex ;
157
147
#if defined WARPX_DIM_3D
158
- amrex::Real const inv_dy = coefs_y[0 ];
159
- amrex::ignore_unused (n_coefs_y);
160
- return inv_dy*( F (i,j,k,ncomp) - F (i,j-1 ,k,ncomp) );
148
+ amrex::Real derivative = 0 ;
149
+ for (int l=n_coefs_y/2 ; l<n_coefs_y; l++) {
150
+ derivative += coefs_y[l] * (F (i,j+l,k,ncomp) - F (i,j-l-1 ,k,ncomp));
151
+ }
152
+ return derivative;
161
153
#elif (defined WARPX_DIM_XZ || WARPX_DIM_1D_Z)
162
154
amrex::ignore_unused (F, coefs_y, n_coefs_y,
163
155
i, j, k, ncomp);
@@ -177,33 +169,24 @@ struct CartesianCustomCoefAlgorithm {
177
169
int const i, int const j, int const k, int const ncomp=0 ) {
178
170
179
171
using namespace amrex ;
180
-
181
- amrex::ignore_unused (n_coefs_z);
182
-
183
- Real const alphaz = coefs_z[1 ];
184
- #if (defined WARPX_DIM_3D || WARPX_DIM_XZ)
185
- Real const betazx = coefs_z[2 ];
186
- #endif
187
- #if defined WARPX_DIM_3D
188
- Real const betazy = coefs_z[3 ];
189
- Real const gammaz = coefs_z[4 ];
190
- #endif
191
172
#if defined WARPX_DIM_3D
192
- return alphaz * (F (i ,j ,k+1 ,ncomp) - F (i ,j ,k ,ncomp))
193
- + betazx * (F (i+1 ,j ,k+1 ,ncomp) - F (i+1 ,j ,k ,ncomp)
194
- + F (i-1 ,j ,k+1 ,ncomp) - F (i-1 ,j ,k ,ncomp))
195
- + betazy * (F (i ,j+1 ,k+1 ,ncomp) - F (i ,j+1 ,k ,ncomp)
196
- + F (i ,j-1 ,k+1 ,ncomp) - F (i ,j-1 ,k ,ncomp))
197
- + gammaz * (F (i+1 ,j+1 ,k+1 ,ncomp) - F (i+1 ,j+1 ,k ,ncomp)
198
- + F (i-1 ,j+1 ,k+1 ,ncomp) - F (i-1 ,j+1 ,k ,ncomp)
199
- + F (i+1 ,j-1 ,k+1 ,ncomp) - F (i+1 ,j-1 ,k ,ncomp)
200
- + F (i-1 ,j-1 ,k+1 ,ncomp) - F (i-1 ,j-1 ,k ,ncomp));
173
+ amrex::Real derivative = 0 ;
174
+ for (int l=0 ; l<n_coefs_z/2 ; l++) {
175
+ derivative += coefs_z[l] * (F (i,j,k+1 +l,ncomp) - F (i,j,k-l,ncomp));
176
+ }
177
+ return derivative;
201
178
#elif (defined WARPX_DIM_XZ)
202
- return alphaz * (F (i ,j+1 ,k ,ncomp) - F (i ,j ,k ,ncomp))
203
- + betazx * (F (i+1 ,j+1 ,k ,ncomp) - F (i+1 ,j ,k ,ncomp)
204
- + F (i-1 ,j+1 ,k ,ncomp) - F (i-1 ,j ,k ,ncomp));
179
+ amrex::Real derivative = 0 ;
180
+ for (int l=0 ; l<n_coefs_z/2 ; l++) {
181
+ derivative += coefs_z[l] * (F (i,j+1 +l,k,ncomp) - F (i,j-l,k,ncomp));
182
+ }
183
+ return derivative;
205
184
#elif (defined WARPX_DIM_1D_Z)
206
- return alphaz * (F (i+1 ,j,k ,ncomp) - F (i ,j ,k ,ncomp));
185
+ amrex::Real derivative = 0 ;
186
+ for (int l=0 ; l<n_coefs_z/2 ; l++) {
187
+ derivative += coefs_z[l] * (F (i+1 +l,j,k,ncomp) - F (i-l,j,k,ncomp));
188
+ }
189
+ return derivative;
207
190
#endif
208
191
}
209
192
@@ -213,19 +196,29 @@ struct CartesianCustomCoefAlgorithm {
213
196
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
214
197
static amrex::Real DownwardDz (
215
198
T_Field const & F,
216
- amrex::Real const * const coefs_z, int const /* n_coefs_z*/ ,
199
+ amrex::Real const * const coefs_z, int const n_coefs_z,
217
200
int const i, int const j, int const k, int const ncomp=0 ) {
218
201
219
- amrex::Real const inv_dz = coefs_z[0 ];
220
202
#if defined WARPX_DIM_3D
221
- return inv_dz*( F (i,j,k,ncomp) - F (i,j,k-1 ,ncomp) );
203
+ amrex::Real derivative = 0 ;
204
+ for (int l=n_coefs_z/2 ; l<n_coefs_z; l++) {
205
+ derivative += coefs_z[l] * (F (i,j,k+l,ncomp) - F (i,j,k-l-1 ,ncomp));
206
+ }
207
+ return derivative;
222
208
#elif (defined WARPX_DIM_XZ)
223
- return inv_dz*( F (i,j,k,ncomp) - F (i,j-1 ,k,ncomp) );
209
+ amrex::Real derivative = 0 ;
210
+ for (int l=n_coefs_z/2 ; l<n_coefs_z; l++) {
211
+ derivative += coefs_z[l] * (F (i,j+l,k,ncomp) - F (i,j-l-1 ,k,ncomp));
212
+ }
213
+ return derivative;
224
214
#elif (defined WARPX_DIM_1D_Z)
225
- return inv_dz*( F (i,j,k,ncomp) - F (i-1 ,j,k,ncomp) );
215
+ amrex::Real derivative = 0 ;
216
+ for (int l=n_coefs_z/2 ; l<n_coefs_z; l++) {
217
+ derivative += coefs_z[l] * (F (i+l,j,k,ncomp) - F (i-l-1 ,j,k,ncomp));
218
+ }
219
+ return derivative;
226
220
#endif
227
221
}
228
-
229
222
};
230
223
231
224
#endif // WARPX_FINITE_DIFFERENCE_ALGORITHM_CARTESIAN_CUSTOM_COEF_H_
0 commit comments