AMReX-Hydro
AMReX-based hydro routines for low Mach number flows
 
Loading...
Searching...
No Matches
hydro_ebgodunov_transverse_3D_K.H
Go to the documentation of this file.
1/**
2 * \file hydro_ebgodunov_transverse_3D_K.H
3 * \addtogroup EBGodunov
4 * @{
5 *
6 */
7
8#ifndef HYDRO_EBGODUNOV_TRANSVERSE_3D_K_H_
9#define HYDRO_EBGODUNOV_TRANSVERSE_3D_K_H_
10
11#include <AMReX_Array4.H>
12#include <AMReX_EBMultiFabUtil_3D_C.H>
13#include <AMReX_Extension.H>
14#include <AMReX_GpuQualifiers.H>
15#include <AMReX_REAL.H>
16
17namespace EBGodunovTransverse {
18
20void create_transverse_terms_for_xface(int ic, int j, int k,
29 amrex::Real& trans_y, amrex::Real& trans_z,
30 const amrex::Real dy, const amrex::Real dz)
31{
32 using namespace amrex;
33 Real v_tmp_j, v_tmp_jp1;
34 Real w_tmp_k, w_tmp_kp1;
35 Real y_hat_j, y_hat_jp1;
36 Real z_hat_k, z_hat_kp1;
37
38 // Tangential extrapolation in the x- and z-directions at j-1/2
39 if (apy(ic,j,k) == amrex::Real(1.0))
40 {
41 v_tmp_j = v_ad(ic,j,k);
42 y_hat_j = yzlo(ic,j,k);
43
44 } else {
45
46 int jc = j;
47 int kc = k;
48
49 int ii = (fcy(ic,jc,kc,0) <= amrex::Real(0.0)) ? ic-1 : ic+1;
50 int kk = (fcy(ic,jc,kc,1) <= amrex::Real(0.0)) ? kc-1 : kc+1;
51
52 Real xoff = (fcy(ic,jc,kc,0) <= amrex::Real(0.0)) ? -amrex::Real(1.) : amrex::Real(1.);
53 Real zoff = (fcy(ic,jc,kc,1) <= amrex::Real(0.0)) ? -amrex::Real(1.) : amrex::Real(1.);
54
55 Real x0 = fcy(ic,jc,kc,0);
56 Real z0 = fcy(ic,jc,kc,1);
57 Real v0 = v_ad(ic,jc,kc ); Real h0 = yzlo(ic,jc,kc);
58
59 Real x1 = fcy(ii,jc,kc,0)+xoff;
60 Real z1 = fcy(ii,jc,kc,1);
61 Real v1 = v_ad(ii,jc,kc ); Real h1 = yzlo(ii,jc,kc);
62
63 Real x2 = fcy(ic,jc,kk,0);
64 Real z2 = fcy(ic,jc,kk,1)+zoff;
65 Real v2 = v_ad(ic,jc,kk ); Real h2 = yzlo(ic,jc,kk);
66
67 Real x3 = fcy(ii,jc,kk,0)+xoff;
68 Real z3 = fcy(ii,jc,kk,1)+zoff;
69 Real v3 = v_ad(ii,jc,kk ); Real h3 = yzlo(ii,jc,kk);
70
71 v_tmp_j = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,x0,z0,x1,z1,x2,z2,x3,z3);
72 y_hat_j = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,x0,z0,x1,z1,x2,z2,x3,z3);
73 }
74
75 // Tangential extrapolation in the x- and z-directions at j+1/2
76 if (apy(ic,j+1,k) == amrex::Real(1.0))
77 {
78 v_tmp_jp1 = v_ad(ic,j+1,k);
79 y_hat_jp1 = yzlo(ic,j+1,k);
80
81 } else {
82
83 int jc = j+1;
84 int kc = k;
85
86 int ii = (fcy(ic,jc,kc,0) <= amrex::Real(0.0)) ? ic-1 : ic+1;
87 int kk = (fcy(ic,jc,kc,1) <= amrex::Real(0.0)) ? kc-1 : kc+1;
88
89 Real xoff = (fcy(ic,jc,kc,0) <= amrex::Real(0.0)) ? -amrex::Real(1.) : amrex::Real(1.);
90 Real zoff = (fcy(ic,jc,kc,1) <= amrex::Real(0.0)) ? -amrex::Real(1.) : amrex::Real(1.);
91
92 Real x0 = fcy(ic,jc,kc,0);
93 Real z0 = fcy(ic,jc,kc,1);
94 Real v0 = v_ad(ic,jc,kc ); Real h0 = yzlo(ic,jc,kc);
95
96 Real x1 = fcy(ii,jc,kc,0)+xoff;
97 Real z1 = fcy(ii,jc,kc,1);
98 Real v1 = v_ad(ii,jc,kc ); Real h1 = yzlo(ii,jc,kc);
99
100 Real x2 = fcy(ic,jc,kk,0);
101 Real z2 = fcy(ic,jc,kk,1)+zoff;
102 Real v2 = v_ad(ic,jc,kk ); Real h2 = yzlo(ic,jc,kk);
103
104 Real x3 = fcy(ii,jc,kk,0)+xoff;
105 Real z3 = fcy(ii,jc,kk,1)+zoff;
106 Real v3 = v_ad(ii,jc,kk ); Real h3 = yzlo(ii,jc,kk);
107
108 v_tmp_jp1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,x0,z0,x1,z1,x2,z2,x3,z3);
109 y_hat_jp1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,x0,z0,x1,z1,x2,z2,x3,z3);
110 }
111
112 // Tangential extrapolation in the x- and y-directions at k-1/2
113 if (apz(ic,j,k) == amrex::Real(1.0))
114 {
115 w_tmp_k = w_ad(ic,j,k);
116 z_hat_k = zylo(ic,j,k);
117
118 } else {
119
120 int jc = j;
121 int kc = k;
122
123 int ii = (fcz(ic,jc,kc,0) <= amrex::Real(0.0)) ? ic-1 : ic+1;
124 int jj = (fcz(ic,jc,kc,1) <= amrex::Real(0.0)) ? jc-1 : jc+1;
125
126 Real xoff = (fcz(ic,jc,kc,0) <= amrex::Real(0.0)) ? -amrex::Real(1.) : amrex::Real(1.);
127 Real yoff = (fcz(ic,jc,kc,1) <= amrex::Real(0.0)) ? -amrex::Real(1.) : amrex::Real(1.);
128
129 Real x0 = fcz(ic,jc,kc,0);
130 Real y0 = fcz(ic,jc,kc,1);
131 Real v0 = w_ad(ic,jc,kc ); Real h0 = zylo(ic,jc,kc);
132
133 Real x1 = fcz(ii,jc,kc,0)+xoff;
134 Real y1 = fcz(ii,jc,kc,1);
135 Real v1 = w_ad(ii,jc,kc ); Real h1 = zylo(ii,jc,kc);
136
137 Real x2 = fcz(ic,jj,kc,0);
138 Real y2 = fcz(ic,jj,kc,1)+yoff;
139 Real v2 = w_ad(ic,jj,kc ); Real h2 = zylo(ic,jj,kc);
140
141 Real x3 = fcz(ii,jj,kc,0)+xoff;
142 Real y3 = fcz(ii,jj,kc,1)+yoff;
143 Real v3 = w_ad(ii,jj,kc ); Real h3 = zylo(ii,jj,kc);
144
145 w_tmp_k = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,x0,y0,x1,y1,x2,y2,x3,y3);
146 z_hat_k = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,x0,y0,x1,y1,x2,y2,x3,y3);
147 }
148
149 // Tangential extrapolation in the x- and y-directions at k+1/2
150 if (apz(ic,j,k+1) == amrex::Real(1.0))
151 {
152 w_tmp_kp1 = w_ad(ic,j,k+1);
153 z_hat_kp1 = zylo(ic,j,k+1);
154
155 } else {
156
157 int jc = j;
158 int kc = k+1;
159
160 int ii = (fcz(ic,jc,kc,0) <= amrex::Real(0.0)) ? ic-1 : ic+1;
161 int jj = (fcz(ic,jc,kc,1) <= amrex::Real(0.0)) ? jc-1 : jc+1;
162
163 Real xoff = (fcz(ic,jc,kc,0) <= amrex::Real(0.0)) ? -amrex::Real(1.) : amrex::Real(1.);
164 Real yoff = (fcz(ic,jc,kc,1) <= amrex::Real(0.0)) ? -amrex::Real(1.) : amrex::Real(1.);
165
166 Real x0 = fcz(ic,jc,kc,0);
167 Real y0 = fcz(ic,jc,kc,1);
168 Real v0 = w_ad(ic,jc,kc ); Real h0 = zylo(ic,jc,kc);
169
170 Real x1 = fcz(ii,jc,kc,0)+xoff;
171 Real y1 = fcz(ii,jc,kc,1);
172 Real v1 = w_ad(ii,jc,kc ); Real h1 = zylo(ii,jc,kc);
173
174 Real x2 = fcz(ic,jj,kc,0);
175 Real y2 = fcz(ic,jj,kc,1)+yoff;
176 Real v2 = w_ad(ic,jj,kc ); Real h2 = zylo(ic,jj,kc);
177
178 Real x3 = fcz(ii,jj,kc,0)+xoff;
179 Real y3 = fcz(ii,jj,kc,1)+yoff;
180 Real v3 = w_ad(ii,jj,kc ); Real h3 = zylo(ii,jj,kc);
181
182 w_tmp_kp1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,x0,y0,x1,y1,x2,y2,x3,y3);
183 z_hat_kp1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,x0,y0,x1,y1,x2,y2,x3,y3);
184 }
185
186 Real v_tmp_l = amrex::Real(0.5) * (v_tmp_jp1 + v_tmp_j);
187 Real dudy_l = (y_hat_jp1 - y_hat_j);
188
189 Real w_tmp_l = amrex::Real(0.5) * (w_tmp_kp1 + w_tmp_k);
190 Real dudz_l = (z_hat_kp1 - z_hat_k);
191
192 trans_y = v_tmp_l * dudy_l / dy;
193 trans_z = w_tmp_l * dudz_l / dz;
194}
195
197void create_transverse_terms_for_yface(int i, int jc, int k,
206 amrex::Real& trans_x, amrex::Real& trans_z,
207 const amrex::Real dx, const amrex::Real dz)
208{
209 using namespace amrex;
210 Real u_tmp_i, u_tmp_ip1;
211 Real w_tmp_k, w_tmp_kp1;
212 Real x_hat_i, x_hat_ip1;
213 Real z_hat_k, z_hat_kp1;
214
215 // Tangential extrapolation in the y- and z-directions at i-1/2
216 if (apx(i,jc,k) == amrex::Real(1.0))
217 {
218 u_tmp_i = u_ad(i,jc,k);
219 x_hat_i = xzlo(i,jc,k);
220
221 } else {
222
223 int ic = i;
224 int kc = k;
225
226 int jj = (fcx(ic,jc,kc,0) <= amrex::Real(0.0)) ? jc-1 : jc+1;
227 int kk = (fcx(ic,jc,kc,1) <= amrex::Real(0.0)) ? kc-1 : kc+1;
228
229 Real yoff = (fcx(ic,jc,kc,0) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
230 Real zoff = (fcx(ic,jc,kc,1) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
231
232 Real y0 = fcx(ic,jc,kc,0);
233 Real z0 = fcx(ic,jc,kc,1);
234 Real v0 = u_ad(ic,jc,kc ); Real h0 = xzlo(ic,jc,kc);
235
236 Real y1 = fcx(ic,jj,kc,0)+yoff;
237 Real z1 = fcx(ic,jj,kc,1);
238 Real v1 = u_ad(ic,jj,kc ); Real h1 = xzlo(ic,jj,kc);
239
240 Real y2 = fcx(ic,jc,kk,0);
241 Real z2 = fcx(ic,jc,kk,1)+zoff;
242 Real v2 = u_ad(ic,jc,kk ); Real h2 = xzlo(ic,jc,kk);
243
244 Real y3 = fcx(ic,jj,kk,0)+yoff;
245 Real z3 = fcx(ic,jj,kk,1)+zoff;
246 Real v3 = u_ad(ic,jj,kk ); Real h3 = xzlo(ic,jj,kk);
247
248 u_tmp_i = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,y0,z0,y1,z1,y2,z2,y3,z3);
249 x_hat_i = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,y0,z0,y1,z1,y2,z2,y3,z3);
250 }
251
252 // Tangential extrapolation in the y- and z-directions at i+1/2
253 if (apx(i+1,jc,k) == amrex::Real(1.0))
254 {
255 u_tmp_ip1 = u_ad(i+1,jc,k);
256 x_hat_ip1 = xzlo(i+1,jc,k);
257
258 } else {
259
260 int ic = i+1;
261 int kc = k;
262
263 int jj = (fcx(ic,jc,kc,0) <= amrex::Real(0.0)) ? jc-1 : jc+1;
264 int kk = (fcx(ic,jc,kc,1) <= amrex::Real(0.0)) ? kc-1 : kc+1;
265
266 Real yoff = (fcx(ic,jc,kc,0) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
267 Real zoff = (fcx(ic,jc,kc,1) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
268
269 Real y0 = fcx(ic,jc,kc,0);
270 Real z0 = fcx(ic,jc,kc,1);
271 Real v0 = u_ad(ic,jc,kc ); Real h0 = xzlo(ic,jc,kc);
272
273 Real y1 = fcx(ic,jj,kc,0)+yoff;
274 Real z1 = fcx(ic,jj,kc,1);
275 Real v1 = u_ad(ic,jj,kc ); Real h1 = xzlo(ic,jj,kc);
276
277 Real y2 = fcx(ic,jc,kk,0);
278 Real z2 = fcx(ic,jc,kk,1)+zoff;
279 Real v2 = u_ad(ic,jc,kk ); Real h2 = xzlo(ic,jc,kk);
280
281 Real y3 = fcx(ic,jj,kk,0)+yoff;
282 Real z3 = fcx(ic,jj,kk,1)+zoff;
283 Real v3 = u_ad(ic,jj,kk ); Real h3 = xzlo(ic,jj,kk);
284
285 u_tmp_ip1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,y0,z0,y1,z1,y2,z2,y3,z3);
286 x_hat_ip1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,y0,z0,y1,z1,y2,z2,y3,z3);
287 }
288
289 // Tangential extrapolation in the x- and y-directions at k-1/2
290 if (apz(i,jc,k) == amrex::Real(1.0))
291 {
292 w_tmp_k = w_ad(i,jc,k);
293 z_hat_k = zxlo(i,jc,k);
294
295 } else {
296
297 int ic = i;
298 int kc = k;
299
300 int ii = (fcz(ic,jc,kc,0) <= amrex::Real(0.0)) ? ic-1 : ic+1;
301 int jj = (fcz(ic,jc,kc,1) <= amrex::Real(0.0)) ? jc-1 : jc+1;
302
303 Real xoff = (fcz(ic,jc,kc,0) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
304 Real yoff = (fcz(ic,jc,kc,1) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
305
306 Real x0 = fcz(ic,jc,kc,0);
307 Real y0 = fcz(ic,jc,kc,1);
308 Real v0 = w_ad(ic,jc,kc ); Real h0 = zxlo(ic,jc,kc);
309
310 Real x1 = fcz(ii,jc,kc,0)+xoff;
311 Real y1 = fcz(ii,jc,kc,1);
312 Real v1 = w_ad(ii,jc,kc ); Real h1 = zxlo(ii,jc,kc);
313
314 Real x2 = fcz(ic,jj,kc,0);
315 Real y2 = fcz(ic,jj,kc,1)+yoff;
316 Real v2 = w_ad(ic,jj,kc ); Real h2 = zxlo(ic,jj,kc);
317
318 Real x3 = fcz(ii,jj,kc,0)+xoff;
319 Real y3 = fcz(ii,jj,kc,1)+yoff;
320 Real v3 = w_ad(ii,jj,kc ); Real h3 = zxlo(ii,jj,kc);
321
322 w_tmp_k = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,x0,y0,x1,y1,x2,y2,x3,y3);
323 z_hat_k = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,x0,y0,x1,y1,x2,y2,x3,y3);
324 }
325
326 // Tangential extrapolation in the x- and y-directions at k+1/2
327 if (apz(i,jc,k+1) == amrex::Real(1.0))
328 {
329 w_tmp_kp1 = w_ad(i,jc,k+1);
330 z_hat_kp1 = zxlo(i,jc,k+1);
331
332 } else {
333
334 int ic = i;
335 int kc = k+1;
336
337 int ii = (fcz(ic,jc,kc,0) <= amrex::Real(0.0)) ? ic-1 : ic+1;
338 int jj = (fcz(ic,jc,kc,1) <= amrex::Real(0.0)) ? jc-1 : jc+1;
339
340 Real xoff = (fcz(ic,jc,kc,0) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
341 Real yoff = (fcz(ic,jc,kc,1) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
342
343 Real x0 = fcz(ic,jc,kc,0);
344 Real y0 = fcz(ic,jc,kc,1);
345 Real v0 = w_ad(ic,jc,kc ); Real h0 = zxlo(ic,jc,kc);
346
347 Real x1 = fcz(ii,jc,kc,0)+xoff;
348 Real y1 = fcz(ii,jc,kc,1);
349 Real v1 = w_ad(ii,jc,kc ); Real h1 = zxlo(ii,jc,kc);
350
351 Real x2 = fcz(ic,jj,kc,0);
352 Real y2 = fcz(ic,jj,kc,1)+yoff;
353 Real v2 = w_ad(ic,jj,kc ); Real h2 = zxlo(ic,jj,kc);
354
355 Real x3 = fcz(ii,jj,kc,0)+xoff;
356 Real y3 = fcz(ii,jj,kc,1)+yoff;
357 Real v3 = w_ad(ii,jj,kc ); Real h3 = zxlo(ii,jj,kc);
358
359 w_tmp_kp1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,x0,y0,x1,y1,x2,y2,x3,y3);
360 z_hat_kp1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,x0,y0,x1,y1,x2,y2,x3,y3);
361 }
362
363 Real u_tmp_l = amrex::Real(0.5) * (u_tmp_ip1 + u_tmp_i);
364 Real dudx_l = (x_hat_ip1 - x_hat_i);
365
366 Real w_tmp_l = amrex::Real(0.5) * (w_tmp_kp1 + w_tmp_k);
367 Real dudz_l = (z_hat_kp1 - z_hat_k);
368
369 trans_x = u_tmp_l * dudx_l / dx;
370 trans_z = w_tmp_l * dudz_l / dz;
371}
372
374void create_transverse_terms_for_zface(int i, int j, int kc,
383 amrex::Real& trans_x, amrex::Real& trans_y,
384 const amrex::Real dx, const amrex::Real dy)
385{
386 using namespace amrex;
387 Real u_tmp_i, u_tmp_ip1;
388 Real v_tmp_j, v_tmp_jp1;
389 Real x_hat_i, x_hat_ip1;
390 Real y_hat_j, y_hat_jp1;
391
392 // Tangential extrapolation in the y- and z-directions at i-1/2
393 if (apx(i,j,kc) == amrex::Real(1.0))
394 {
395 u_tmp_i = u_ad(i,j,kc);
396 x_hat_i = xylo(i,j,kc);
397
398 } else {
399
400 int ic = i;
401 int jc = j;
402
403 int jj = (fcx(ic,jc,kc,0) <= amrex::Real(0.0)) ? jc-1 : jc+1;
404 int kk = (fcx(ic,jc,kc,1) <= amrex::Real(0.0)) ? kc-1 : kc+1;
405
406 Real yoff = (fcx(ic,jc,kc,0) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
407 Real zoff = (fcx(ic,jc,kc,1) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
408
409 Real y0 = fcx(ic,jc,kc,0);
410 Real z0 = fcx(ic,jc,kc,1);
411 Real v0 = u_ad(ic,jc,kc ); Real h0 = xylo(ic,jc,kc );
412
413 Real y1 = fcx(ic,jj,kc,0)+yoff;
414 Real z1 = fcx(ic,jj,kc,1);
415 Real v1 = u_ad(ic,jj,kc ); Real h1 = xylo(ic,jj,kc );
416
417 Real y2 = fcx(ic,jc,kk,0);
418 Real z2 = fcx(ic,jc,kk,1)+zoff;
419 Real v2 = u_ad(ic,jc,kk ); Real h2 = xylo(ic,jc,kk );
420
421 Real y3 = fcx(ic,jj,kk,0)+yoff;
422 Real z3 = fcx(ic,jj,kk,1)+zoff;
423 Real v3 = u_ad(ic,jj,kk ); Real h3 = xylo(ic,jj,kk );
424
425 u_tmp_i = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,y0,z0,y1,z1,y2,z2,y3,z3);
426 x_hat_i = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,y0,z0,y1,z1,y2,z2,y3,z3);
427 }
428
429 // Tangential extrapolation in the y- and z-directions at i+1/2
430 if (apx(i+1,j,kc) == amrex::Real(1.0))
431 {
432 u_tmp_ip1 = u_ad(i+1,j,kc);
433 x_hat_ip1 = xylo(i+1,j,kc);
434
435 } else {
436
437 int ic = i+1;
438 int jc = j;
439
440 int jj = (fcx(ic,jc,kc,0) <= amrex::Real(0.0)) ? jc-1 : jc+1;
441 int kk = (fcx(ic,jc,kc,1) <= amrex::Real(0.0)) ? kc-1 : kc+1;
442
443 Real yoff = (fcx(ic,jc,kc,0) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
444 Real zoff = (fcx(ic,jc,kc,1) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
445
446 Real y0 = fcx(ic,jc,kc,0);
447 Real z0 = fcx(ic,jc,kc,1);
448 Real v0 = u_ad(ic,jc,kc ); Real h0 = xylo(ic,jc,kc );
449
450 Real y1 = fcx(ic,jj,kc,0)+yoff;
451 Real z1 = fcx(ic,jj,kc,1);
452 Real v1 = u_ad(ic,jj,kc ); Real h1 = xylo(ic,jj,kc );
453
454 Real y2 = fcx(ic,jc,kk,0);
455 Real z2 = fcx(ic,jc,kk,1)+zoff;
456 Real v2 = u_ad(ic,jc,kk ); Real h2 = xylo(ic,jc,kk );
457
458 Real y3 = fcx(ic,jj,kk,0)+yoff;
459 Real z3 = fcx(ic,jj,kk,1)+zoff;
460 Real v3 = u_ad(ic,jj,kk ); Real h3 = xylo(ic,jj,kk );
461
462 u_tmp_ip1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,y0,z0,y1,z1,y2,z2,y3,z3);
463 x_hat_ip1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,y0,z0,y1,z1,y2,z2,y3,z3);
464 }
465
466 // Tangential extrapolation in the x- and z-directions at j-1/2
467 if (apy(i,j,kc) == amrex::Real(1.0))
468 {
469 v_tmp_j = v_ad(i,j,kc);
470 y_hat_j = yxlo(i,j,kc);
471
472 } else {
473
474 int ic = i;
475 int jc = j;
476
477 int ii = (fcy(ic,jc,kc,0) <= amrex::Real(0.0)) ? ic-1 : ic+1;
478 int kk = (fcy(ic,jc,kc,1) <= amrex::Real(0.0)) ? kc-1 : kc+1;
479
480 Real xoff = (fcy(ic,jc,kc,0) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
481 Real zoff = (fcy(ic,jc,kc,1) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
482
483 Real x0 = fcy(ic,jc,kc,0);
484 Real z0 = fcy(ic,jc,kc,1);
485 Real v0 = v_ad(ic,jc,kc ); Real h0 = yxlo(ic,jc,kc);
486
487 Real x1 = fcy(ii,jc,kc,0)+xoff;
488 Real z1 = fcy(ii,jc,kc,1);
489 Real v1 = v_ad(ii,jc,kc ); Real h1 = yxlo(ii,jc,kc);
490
491 Real x2 = fcy(ic,jc,kk,0);
492 Real z2 = fcy(ic,jc,kk,1)+zoff;
493 Real v2 = v_ad(ic,jc,kk ); Real h2 = yxlo(ic,jc,kk);
494
495 Real x3 = fcy(ii,jc,kk,0)+xoff;
496 Real z3 = fcy(ii,jc,kk,1)+zoff;
497 Real v3 = v_ad(ii,jc,kk ); Real h3 = yxlo(ii,jc,kk);
498
499 v_tmp_j = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,x0,z0,x1,z1,x2,z2,x3,z3);
500 y_hat_j = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,x0,z0,x1,z1,x2,z2,x3,z3);
501 }
502
503 // Tangential extrapolation in the x- and z-directions at j+1/2
504 if (apy(i,j+1,kc) == amrex::Real(1.0))
505 {
506 v_tmp_jp1 = v_ad(i,j+1,kc);
507 y_hat_jp1 = yxlo(i,j+1,kc);
508
509 } else {
510
511 int ic = i;
512 int jc = j+1;
513
514 int ii = (fcy(ic,jc,kc,0) <= amrex::Real(0.0)) ? ic-1 : ic+1;
515 int kk = (fcy(ic,jc,kc,1) <= amrex::Real(0.0)) ? kc-1 : kc+1;
516
517 Real xoff = (fcy(ic,jc,kc,0) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
518 Real zoff = (fcy(ic,jc,kc,1) <= amrex::Real(0.0)) ? -Real(1.0) : Real(1.0);
519
520 Real x0 = fcy(ic,jc,kc,0);
521 Real z0 = fcy(ic,jc,kc,1);
522 Real v0 = v_ad(ic,jc,kc ); Real h0 = yxlo(ic,jc,kc);
523
524 Real x1 = fcy(ii,jc,kc,0)+xoff;
525 Real z1 = fcy(ii,jc,kc,1);
526 Real v1 = v_ad(ii,jc,kc ); Real h1 = yxlo(ii,jc,kc);
527
528 Real x2 = fcy(ic,jc,kk,0);
529 Real z2 = fcy(ic,jc,kk,1)+zoff;
530 Real v2 = v_ad(ic,jc,kk ); Real h2 = yxlo(ic,jc,kk);
531
532 Real x3 = fcy(ii,jc,kk,0)+xoff;
533 Real z3 = fcy(ii,jc,kk,1)+zoff;
534 Real v3 = v_ad(ii,jc,kk ); Real h3 = yxlo(ii,jc,kk);
535
536 v_tmp_jp1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),v0,v1,v2,v3,x0,z0,x1,z1,x2,z2,x3,z3);
537 y_hat_jp1 = EB_interp_in_quad(amrex::Real(0.),amrex::Real(0.),h0,h1,h2,h3,x0,z0,x1,z1,x2,z2,x3,z3);
538 }
539
540 Real u_tmp_l = amrex::Real(0.5) * (u_tmp_ip1 + u_tmp_i);
541 Real dudx_l = (x_hat_ip1 - x_hat_i);
542
543 Real v_tmp_l = amrex::Real(0.5) * (v_tmp_jp1 + v_tmp_j);
544 Real dudy_l = (y_hat_jp1 - y_hat_j);
545
546 trans_x = u_tmp_l * dudx_l / dx;
547 trans_y = v_tmp_l * dudy_l / dy;
548}
549
550} // namespace EBGodunovTransverse
551
552#endif
553/** @} */
#define AMREX_INLINE
#define AMREX_GPU_HOST_DEVICE
amrex_real Real
Definition hydro_ebgodunov_transverse_2D_K.H:16
AMREX_GPU_HOST_DEVICE AMREX_INLINE void create_transverse_terms_for_zface(int i, int j, int kc, amrex::Array4< amrex::Real const > const &u_ad, amrex::Array4< amrex::Real const > const &v_ad, amrex::Array4< amrex::Real const > const &xylo, amrex::Array4< amrex::Real const > const &yxlo, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &fcx, amrex::Array4< amrex::Real const > const &fcy, amrex::Real &trans_x, amrex::Real &trans_y, const amrex::Real dx, const amrex::Real dy)
Definition hydro_ebgodunov_transverse_3D_K.H:374
AMREX_GPU_HOST_DEVICE AMREX_INLINE void create_transverse_terms_for_yface(int i, int jc, int k, amrex::Array4< amrex::Real const > const &u_ad, amrex::Array4< amrex::Real const > const &xhat, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &fcx, amrex::Real &trans_x, const amrex::Real dx)
Definition hydro_ebgodunov_transverse_2D_K.H:79
AMREX_GPU_HOST_DEVICE AMREX_INLINE void create_transverse_terms_for_xface(int ic, int j, int k, amrex::Array4< amrex::Real const > const &v_ad, amrex::Array4< amrex::Real const > const &yhat, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &fcy, amrex::Real &trans_y, const amrex::Real dy)
Definition hydro_ebgodunov_transverse_2D_K.H:28