1 #ifndef ERF_TERRAIN_METRIC_H_
2 #define ERF_TERRAIN_METRIC_H_
5 #include <AMReX_Geometry.H>
6 #include <AMReX_MultiFab.H>
14 amrex::MultiFab& z_phys_nd, amrex::MultiFab& z_phys_cc);
21 void init_zlevels (amrex::Vector<amrex::Vector<amrex::Real>> & zlevels_stag,
22 amrex::Vector<amrex::Vector<amrex::Real>> & stretched_dz_h,
23 amrex::Vector<amrex::Gpu::DeviceVector<amrex::Real>> & stretched_dz_d,
24 amrex::Vector<amrex::Geometry>
const& geom,
25 amrex::Vector<amrex::IntVect>
const& ref_ratio,
26 const amrex::Real grid_stretching_ratio,
27 const amrex::Real zsurf,
28 const amrex::Real dz0);
31 amrex::MultiFab& z_phys_nd,
32 amrex::Vector<amrex::Real>
const& z_levels_h,
33 amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2>& phys_bc_type);
36 amrex::MultiFab& z_phys_nd,
37 amrex::Vector<amrex::Real>
const& z_levels_h);
47 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
48 const amrex::Array4<const amrex::Real>& z_nd)
50 amrex::Real dzInv = cellSizeInv[2];
51 amrex::Real met_h_zeta = 0.25 * dzInv *
52 ( z_nd(i+1,j,k+1) + z_nd(i+1,j+1,k+1) + z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
53 -z_nd(i+1,j,k ) - z_nd(i+1,j+1,k ) - z_nd(i,j,k ) - z_nd(i,j+1,k ) );
62 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
63 const amrex::Array4<const amrex::Real>& z_nd)
65 amrex::Real dxInv = cellSizeInv[0];
66 amrex::Real met_h_xi = 0.25 * dxInv *
67 ( z_nd(i+1,j,k) + z_nd(i+1,j+1,k) + z_nd(i+1,j,k+1) + z_nd(i+1,j+1,k+1)
68 -z_nd(i ,j,k) - z_nd(i ,j+1,k) - z_nd(i ,j,k+1) - z_nd(i ,j+1,k+1) );
77 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
78 const amrex::Array4<const amrex::Real>& z_nd)
80 amrex::Real dyInv = cellSizeInv[1];
81 amrex::Real met_h_eta = 0.25 * dyInv *
82 ( z_nd(i,j+1,k) + z_nd(i+1,j+1,k) + z_nd(i,j+1,k+1) + z_nd(i+1,j+1,k+1)
83 -z_nd(i,j ,k) - z_nd(i+1,j ,k) - z_nd(i,j ,k+1) - z_nd(i+1,j ,k+1) );
95 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
96 const amrex::Array4<const amrex::Real>& z_nd)
98 amrex::Real dzInv = cellSizeInv[2];
99 amrex::Real met_h_zeta = 0.5 * dzInv * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
100 - z_nd(i,j,k ) - z_nd(i,j+1,k ) );
109 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
110 const amrex::Array4<const amrex::Real>& z_nd)
112 amrex::Real dxInv = cellSizeInv[0];
113 amrex::Real met_h_xi = 0.125 * dxInv *
114 ( z_nd(i+1,j,k) + z_nd(i+1,j,k+1) + z_nd(i+1,j+1,k) + z_nd(i+1,j+1,k+1)
115 -z_nd(i-1,j,k) - z_nd(i-1,j,k+1) - z_nd(i-1,j+1,k) - z_nd(i-1,j+1,k+1) );
124 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
125 const amrex::Array4<const amrex::Real>& z_nd)
127 amrex::Real dyInv = cellSizeInv[1];
128 amrex::Real met_h_eta = 0.5 * dyInv * ( z_nd(i,j+1,k ) + z_nd(i,j+1,k+1)
129 - z_nd(i,j ,k ) - z_nd(i,j ,k+1) );
138 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
139 const amrex::Array4<const amrex::Real>& z_nd)
141 amrex::Real dzInv = cellSizeInv[2];
142 amrex::Real met_h_zeta = 0.5 * dzInv * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
143 - z_nd(i,j,k ) - z_nd(i+1,j,k ) );
152 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
153 const amrex::Array4<const amrex::Real>& z_nd)
155 amrex::Real dxInv = cellSizeInv[0];
156 amrex::Real met_h_xi = 0.5 * dxInv * ( z_nd(i+1,j,k) + z_nd(i+1,j,k+1)
157 -z_nd(i ,j,k) - z_nd(i ,j,k+1) );
166 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
167 const amrex::Array4<const amrex::Real>& z_nd)
169 amrex::Real dyInv = cellSizeInv[1];
170 amrex::Real met_h_eta = 0.125 * dyInv *
171 ( z_nd(i,j+1,k) + z_nd(i,j+1,k+1) + z_nd(i+1,j+1,k) + z_nd(i+1,j+1,k+1)
172 -z_nd(i,j-1,k) - z_nd(i,j-1,k+1) - z_nd(i+1,j-1,k) - z_nd(i+1,j-1,k+1) );
181 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
182 const amrex::Array4<const amrex::Real>& z_nd)
184 amrex::Real dzInv = cellSizeInv[2];
185 amrex::Real met_h_zeta = 0.125 * dzInv *
186 ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1) + z_nd(i,j+1,k+1) + z_nd(i+1,j+1,k+1)
187 -z_nd(i,j,k-1) - z_nd(i+1,j,k-1) - z_nd(i,j+1,k-1) - z_nd(i+1,j+1,k-1) );
196 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
197 const amrex::Array4<const amrex::Real>& z_nd)
199 amrex::Real dxInv = cellSizeInv[0];
200 amrex::Real met_h_xi = 0.5 * dxInv * ( z_nd(i+1,j,k) + z_nd(i+1,j+1,k)
201 -z_nd(i ,j,k) - z_nd(i ,j+1,k) );
210 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
211 const amrex::Array4<const amrex::Real>& z_nd)
213 amrex::Real dyInv = cellSizeInv[1];
214 amrex::Real met_h_eta = 0.5 * dyInv * ( z_nd(i,j+1,k) + z_nd(i+1,j+1,k)
215 -z_nd(i,j ,k) - z_nd(i+1,j ,k) );
229 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
230 const amrex::Array4<const amrex::Real>& z_nd)
232 amrex::Real dzInv = cellSizeInv[2];
233 amrex::Real met_h_zeta = dzInv * (z_nd(i,j,k+1) - z_nd(i,j,k));
242 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
243 const amrex::Array4<const amrex::Real>& z_nd)
245 amrex::Real dxInv = cellSizeInv[0];
246 amrex::Real met_h_xi = 0.25 * dxInv *
247 ( z_nd(i+1,j,k) + z_nd(i+1,j,k+1)
248 -z_nd(i-1,j,k) - z_nd(i-1,j,k+1) );
257 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
258 const amrex::Array4<const amrex::Real>& z_nd)
260 amrex::Real dyInv = cellSizeInv[1];
261 amrex::Real met_h_eta = 0.25 * dyInv *
262 ( z_nd(i,j+1,k) + z_nd(i,j+1,k+1)
263 -z_nd(i,j-1,k) - z_nd(i,j-1,k+1) );
274 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
275 const amrex::Array4<const amrex::Real>& z_nd)
277 amrex::Real dzInv = cellSizeInv[2];
278 amrex::Real met_h_zeta = 0.25 * dzInv * ( z_nd(i,j,k+1) + z_nd(i,j+1,k+1)
279 -z_nd(i,j,k-1) - z_nd(i,j+1,k-1) );
288 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
289 const amrex::Array4<const amrex::Real>& z_nd)
291 amrex::Real dxInv = cellSizeInv[0];
292 amrex::Real met_h_xi = 0.25 * dxInv *
293 ( z_nd(i+1,j+1,k) + z_nd(i+1,j ,k)
294 -z_nd(i-1,j+1,k) - z_nd(i-1,j ,k) );
303 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
304 const amrex::Array4<const amrex::Real>& z_nd)
306 amrex::Real dyInv = cellSizeInv[1];
307 amrex::Real met_h_eta = dyInv * ( z_nd(i,j+1,k) - z_nd(i,j,k) );
318 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
319 const amrex::Array4<const amrex::Real>& z_nd)
321 amrex::Real dzInv = cellSizeInv[2];
322 amrex::Real met_h_zeta = 0.25 * dzInv * ( z_nd(i,j,k+1) + z_nd(i+1,j,k+1)
323 -z_nd(i,j,k-1) - z_nd(i+1,j,k-1) );
332 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
333 const amrex::Array4<const amrex::Real>& z_nd)
335 amrex::Real dxInv = cellSizeInv[0];
336 amrex::Real met_h_xi = dxInv * ( z_nd(i+1,j,k) - z_nd(i,j,k) );
345 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
346 const amrex::Array4<const amrex::Real>& z_nd)
348 amrex::Real dyInv = cellSizeInv[1];
349 amrex::Real met_h_eta = 0.25 * dyInv *
350 ( z_nd(i+1,j+1,k) + z_nd(i,j+1,k)
351 -z_nd(i+1,j-1,k) - z_nd(i,j-1,k) );
360 const amrex::Array4<const amrex::Real>& z_nd)
362 const amrex::Real z_cc = 0.125*( z_nd(i ,j ,k ) + z_nd(i ,j ,k+1) +
363 + z_nd(i+1,j ,k ) + z_nd(i ,j ,k+1)
364 + z_nd(i ,j+1,k ) + z_nd(i ,j+1,k+1)
365 + z_nd(i+1,j+1,k ) + z_nd(i ,j+1,k+1));
369 const amrex::Real z0_cc = 0.25*( z_nd(i ,j ,0) + z_nd(i ,j+1,0)
370 + z_nd(i+1,j ,0) + z_nd(i+1,j+1,0));
372 return (z_cc - z0_cc);
382 const amrex::Array4<const amrex::Real> u_arr,
383 const amrex::Array4<const amrex::Real> v_arr,
384 const amrex::Array4<const amrex::Real> z_nd,
385 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv)
388 amrex::Real met_zlo_xi = 0.5 * dxInv[0] *
389 ( z_nd(i+1,j+1,k ) + z_nd(i+1,j ,k )
390 -z_nd(i ,j+1,k ) - z_nd(i ,j ,k ) );
393 amrex::Real met_zlo_eta = 0.5 * dxInv[1] *
394 ( z_nd(i+1,j+1,k ) + z_nd(i ,j+1,k )
395 -z_nd(i+1,j ,k ) - z_nd(i ,j ,k ) );
399 amrex::Real u = (k == 0) ? 1.5 * (0.5*(u_arr(i,j,k)+u_arr(i+1,j,k))) - 0.5*(0.5*(u_arr(i,j,k+1)+u_arr(i+1,j,k+1))) :
400 0.25 * ( u_arr(i,j,k-1) + u_arr(i+1,j,k-1) + u_arr(i,j,k) + u_arr(i+1,j,k) );
401 amrex::Real v = (k == 0) ? 1.5 * (0.5*(v_arr(i,j,k)+v_arr(i,j+1,k))) - 0.5*(0.5*(v_arr(i,j,k+1)+v_arr(i,j+1,k+1))) :
402 0.25 * ( v_arr(i,j,k-1) + v_arr(i,j+1,k-1) + v_arr(i,j,k) + v_arr(i,j+1,k) );
404 amrex::Real
omega = w - met_zlo_xi * u - met_zlo_eta * v;
415 amrex::Real u, amrex::Real v,
416 const amrex::Array4<const amrex::Real>& z_nd,
417 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv)
420 amrex::Real met_zlo_xi = 0.5 * dxInv[0] *
421 ( z_nd(i+1,j+1,k ) + z_nd(i+1,j ,k )
422 -z_nd(i ,j+1,k ) - z_nd(i ,j ,k ) );
425 amrex::Real met_zlo_eta = 0.5 * dxInv[1] *
426 ( z_nd(i+1,j+1,k ) + z_nd(i ,j+1,k )
427 -z_nd(i+1,j ,k ) - z_nd(i ,j ,k ) );
429 amrex::Real w =
omega + met_zlo_xi * u + met_zlo_eta * v;
440 const amrex::Array4<const amrex::Real>& u_arr,
441 const amrex::Array4<const amrex::Real>& v_arr,
442 const amrex::Array4<const amrex::Real>& z_nd,
443 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv)
446 amrex::Real u = (k == 0) ? 1.5 * (0.5*(u_arr(i,j,k)+u_arr(i+1,j,k))) - 0.5*(0.5*(u_arr(i,j,k+1)+u_arr(i+1,j,k+1))) :
447 0.25 * ( u_arr(i,j,k-1) + u_arr(i+1,j,k-1) + u_arr(i,j,k) + u_arr(i+1,j,k) );
448 amrex::Real v = (k == 0) ? 1.5 * (0.5*(v_arr(i,j,k)+v_arr(i,j+1,k))) - 0.5*(0.5*(v_arr(i,j,k+1)+v_arr(i,j+1,k+1))) :
449 0.25 * ( v_arr(i,j,k-1) + v_arr(i,j+1,k-1) + v_arr(i,j,k) + v_arr(i,j+1,k) );
464 const amrex::Real& flux,
465 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
466 const amrex::Array4<const amrex::Real>& zphys_arr,
467 const amrex::Array4<amrex::Real>& phi1_arr,
468 const amrex::Array4<amrex::Real>& phi2_arr,
469 const amrex::Array4<amrex::Real>& phi3_arr)
473 amrex::Real InvNorm = 1.0 / std::sqrt(1.0 + h_xi*h_xi + h_eta*h_eta);
474 phi1_arr(i,j,klo) = -h_xi * flux * InvNorm;
475 phi2_arr(i,j,klo) = -h_eta * flux * InvNorm;
476 phi3_arr(i,j,klo) = flux * InvNorm;
485 const amrex::Real& flux,
486 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxInv,
487 const amrex::Array4<const amrex::Real>& zphys_arr,
488 const amrex::Array4<const amrex::Real>& u_arr,
489 const amrex::Array4<const amrex::Real>& v_arr,
490 const amrex::Array4<const amrex::Real>& w_arr,
491 const amrex::Array4<amrex::Real>& tau11_arr,
492 const amrex::Array4<amrex::Real>& tau22_arr,
493 const amrex::Array4<amrex::Real>& tau33_arr,
494 const amrex::Array4<amrex::Real>& tau12_arr,
495 const amrex::Array4<amrex::Real>& tau21_arr,
496 const amrex::Array4<amrex::Real>& tau13_arr,
497 const amrex::Array4<amrex::Real>& tau31_arr,
498 const amrex::Array4<amrex::Real>& tau23_arr,
499 const amrex::Array4<amrex::Real>& tau32_arr)
502 amrex::Array1D<amrex::Real,0,2> n_hat;
505 amrex::Array1D<amrex::Real,0,2> t_hat_1;
506 amrex::Array1D<amrex::Real,0,2> t_hat_2;
507 amrex::Array1D<amrex::Real,0,2> u_t_hat;
510 amrex::Array1D<amrex::Real,0,2> a_hat;
513 amrex::Array2D<amrex::Real,0,2,0,2> R_mat;
520 amrex::Real Inormn = 1./std::sqrt(1.0 + h_xi*h_xi + h_eta*h_eta);
521 n_hat(0) = -Inormn*h_xi; n_hat(1) = -Inormn*h_eta; n_hat(2) = Inormn;
524 amrex::Real Inorm1 = 1./std::sqrt(1.0 + h_xi*h_xi);
525 amrex::Real Inorm2 = 1./std::sqrt(1.0 + h_eta*h_eta);
526 t_hat_1(0) = Inorm1; t_hat_2(1) = Inorm2;
527 t_hat_1(2) = Inorm1*h_xi; t_hat_2(2) = Inorm2*h_eta;
530 amrex::Real Norm_u_t = 0.0;
531 amrex::Real mag1 = (u_arr(i,j,klo) + h_xi *w_arr(i,j,klo))*Inorm1;
532 amrex::Real mag2 = (v_arr(i,j,klo) + h_eta*w_arr(i,j,klo))*Inorm2;
533 for (
int icol(0); icol<3; ++icol) {
534 u_t_hat(icol) = mag1*t_hat_1(icol) + mag2*t_hat_2(icol);
535 Norm_u_t += u_t_hat(icol)*u_t_hat(icol);
537 for (
int icol(0); icol<3; ++icol) {
538 u_t_hat(icol) /= std::sqrt(Norm_u_t);
542 a_hat(0) = n_hat(1)*u_t_hat(2) - n_hat(2)*u_t_hat(1);
543 a_hat(1) = -(n_hat(0)*u_t_hat(2) - n_hat(2)*u_t_hat(0));
544 a_hat(2) = n_hat(1)*u_t_hat(1) - n_hat(1)*u_t_hat(0);
549 for (
int icol(0); icol<3; ++icol) {
550 R_mat(icol,jrow) = u_t_hat(icol);
553 for (
int icol(0); icol<3; ++icol) {
554 R_mat(icol,jrow) = a_hat(icol);
557 for (
int icol(0); icol<3; ++icol) {
558 R_mat(icol,jrow) = n_hat(icol);
562 tau11_arr(i,j,klo) = 2.0*R_mat(0,0)*R_mat(2,0)*flux;
563 tau22_arr(i,j,klo) = 2.0*R_mat(0,1)*R_mat(2,1)*flux;
564 tau33_arr(i,j,klo) = 2.0*R_mat(0,2)*R_mat(2,2)*flux;
566 tau12_arr(i,j,klo) = (R_mat(0,0)*R_mat(2,1) + R_mat(2,0)*R_mat(0,1))*flux;
567 tau21_arr(i,j,klo) = tau12_arr(i,j,klo);
569 tau13_arr(i,j,klo) = (R_mat(0,0)*R_mat(2,2) + R_mat(0,2)*R_mat(2,0))*flux;
570 tau31_arr(i,j,klo) = tau13_arr(i,j,klo);
572 tau23_arr(i,j,klo) = (R_mat(0,1)*R_mat(2,2) + R_mat(0,2)*R_mat(2,1))*flux;
573 tau32_arr(i,j,klo) = tau23_arr(i,j,klo);
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtEdgeCenterJ(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:302
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtEdgeCenterK(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:241
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtEdgeCenterJ(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:287
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtIface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:108
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterJ(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:273
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterK(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:228
void init_zlevels(amrex::Vector< amrex::Vector< amrex::Real >> &zlevels_stag, amrex::Vector< amrex::Vector< amrex::Real >> &stretched_dz_h, amrex::Vector< amrex::Gpu::DeviceVector< amrex::Real >> &stretched_dz_d, amrex::Vector< amrex::Geometry > const &geom, amrex::Vector< amrex::IntVect > const &ref_ratio, const amrex::Real grid_stretching_ratio, const amrex::Real zsurf, const amrex::Real dz0)
AMREX_FORCE_INLINE AMREX_GPU_DEVICE amrex::Real Compute_h_zeta_AtCellCenter(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:46
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtEdgeCenterI(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:317
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_Zrel_AtCellCenter(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:359
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtCellCenter(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:76
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtKface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:180
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real WFromOmega(int i, int j, int k, amrex::Real omega, amrex::Real u, amrex::Real v, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv)
Definition: ERF_TerrainMetrics.H:414
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void rotate_scalar_flux(const int &i, const int &j, const int &klo, const amrex::Real &flux, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &zphys_arr, const amrex::Array4< amrex::Real > &phi1_arr, const amrex::Array4< amrex::Real > &phi2_arr, const amrex::Array4< amrex::Real > &phi3_arr)
Definition: ERF_TerrainMetrics.H:461
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real OmegaFromW(int i, int j, int k, amrex::Real w, const amrex::Array4< const amrex::Real > u_arr, const amrex::Array4< const amrex::Real > v_arr, const amrex::Array4< const amrex::Real > z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv)
Definition: ERF_TerrainMetrics.H:381
void init_default_zphys(int lev, const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::MultiFab &z_phys_cc)
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtIface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:94
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void rotate_stress_tensor(const int &i, const int &j, const int &klo, const amrex::Real &flux, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv, const amrex::Array4< const amrex::Real > &zphys_arr, const amrex::Array4< const amrex::Real > &u_arr, const amrex::Array4< const amrex::Real > &v_arr, const amrex::Array4< const amrex::Real > &w_arr, const amrex::Array4< amrex::Real > &tau11_arr, const amrex::Array4< amrex::Real > &tau22_arr, const amrex::Array4< amrex::Real > &tau33_arr, const amrex::Array4< amrex::Real > &tau12_arr, const amrex::Array4< amrex::Real > &tau21_arr, const amrex::Array4< amrex::Real > &tau13_arr, const amrex::Array4< amrex::Real > &tau31_arr, const amrex::Array4< amrex::Real > &tau23_arr, const amrex::Array4< amrex::Real > &tau32_arr)
Definition: ERF_TerrainMetrics.H:482
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtJface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:151
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtKface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:195
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtEdgeCenterK(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:256
void init_which_terrain_grid(int lev, const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::Vector< amrex::Real > const &z_levels_h)
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtIface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:123
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtEdgeCenterI(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:331
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtJface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:137
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtCellCenter(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:61
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtJface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:165
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtEdgeCenterI(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:344
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtKface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:209
void make_terrain_fitted_coords(int lev, const amrex::Geometry &geom, amrex::MultiFab &z_phys_nd, amrex::Vector< amrex::Real > const &z_levels_h, amrex::GpuArray< ERF_BC, AMREX_SPACEDIM *2 > &phys_bc_type)
@ omega
Definition: ERF_Morrison.H:45