Function for computing the scalar RHS for diffusion operator without terrain.
86 amrex::ignore_unused(use_most);
88 const Real dx_inv = cellSizeInv[0];
89 const Real dy_inv = cellSizeInv[1];
90 const Real dz_inv = cellSizeInv[2];
92 const auto& dom_hi = ubound(domain);
94 Real l_inv_theta0 = 1.0 / turbChoice.
theta_ref;
95 Real l_abs_g = std::abs(grav_gpu[2]);
97 bool l_use_keqn = ( (turbChoice.
les_type == LESType::Deardorff) ||
98 (turbChoice.
rans_type == RANSType::kEqn) );
99 bool l_use_mynn = ( (turbChoice.
pbl_type == PBLType::MYNN25) || (turbChoice.
pbl_type == PBLType::MYNNEDMF) ) ;
102 bool l_turb = ( (turbChoice.
les_type == LESType::Smagorinsky) ||
103 (turbChoice.
les_type == LESType::Deardorff ) ||
104 (turbChoice.
rans_type == RANSType::kEqn ) ||
105 (turbChoice.
pbl_type == PBLType::MYNN25 ) ||
106 (turbChoice.
pbl_type == PBLType::MYNNEDMF ) ||
107 (turbChoice.
pbl_type == PBLType::YSU ) );
109 const Box xbx = surroundingNodes(bx,0);
110 const Box ybx = surroundingNodes(bx,1);
111 const Box zbx = surroundingNodes(bx,2);
114 const int end_comp = start_comp + num_comp - 1;
195 Gpu::AsyncVector<Real> alpha_eff_d;
196 Gpu::AsyncVector<int> eddy_diff_idx_d,eddy_diff_idy_d,eddy_diff_idz_d;
197 alpha_eff_d.resize(alpha_eff.size());
198 eddy_diff_idx_d.resize(eddy_diff_idx.size());
199 eddy_diff_idy_d.resize(eddy_diff_idy.size());
200 eddy_diff_idz_d.resize(eddy_diff_idz.size());
202 Gpu::copy(Gpu::hostToDevice, alpha_eff.begin() , alpha_eff.end() , alpha_eff_d.begin());
203 Gpu::copy(Gpu::hostToDevice, eddy_diff_idx.begin(), eddy_diff_idx.end(), eddy_diff_idx_d.begin());
204 Gpu::copy(Gpu::hostToDevice, eddy_diff_idy.begin(), eddy_diff_idy.end(), eddy_diff_idy_d.begin());
205 Gpu::copy(Gpu::hostToDevice, eddy_diff_idz.begin(), eddy_diff_idz.end(), eddy_diff_idz_d.begin());
208 Real* d_alpha_eff = alpha_eff_d.data();
209 int* d_eddy_diff_idx = eddy_diff_idx_d.data();
210 int* d_eddy_diff_idy = eddy_diff_idy_d.data();
211 int* d_eddy_diff_idz = eddy_diff_idz_d.data();
214 if (l_consA && l_turb) {
215 ParallelFor(xbx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
217 const int qty_index = start_comp + n;
218 const int prim_index = qty_index - 1;
221 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i-1, j, k,
Rho_comp) );
222 Real rhoAlpha = rhoFace * d_alpha_eff[prim_scal_index];
223 rhoAlpha += 0.5 * ( mu_turb(i , j, k, d_eddy_diff_idx[prim_scal_index])
224 + mu_turb(i-1, j, k, d_eddy_diff_idx[prim_scal_index]) );
227 Real met_h_zeta = ax(i,j,k);
233 bool most_on_zlo = ( use_most && rot_most &&
236 Real GradCz = 0.25 * dz_inv * ( cell_prim(i, j, k+1, prim_index) + cell_prim(i-1, j, k+1, prim_index)
237 - cell_prim(i, j, k-1, prim_index) - cell_prim(i-1, j, k-1, prim_index) );
238 Real GradCx = dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
241 xflux(i,j,k,qty_index) = hfx_x(i,j,0);
242 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
243 xflux(i,j,k,qty_index) = qfx1_x(i,j,0);
245 xflux(i,j,k,qty_index) = -rhoAlpha * mf_u(i,j,0) * ( GradCx - (met_h_xi/met_h_zeta)*GradCz );
248 ParallelFor(ybx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
250 const int qty_index = start_comp + n;
251 const int prim_index = qty_index - 1;
254 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i, j-1, k,
Rho_comp) );
255 Real rhoAlpha = rhoFace * d_alpha_eff[prim_scal_index];
256 rhoAlpha += 0.5 * ( mu_turb(i, j , k, d_eddy_diff_idy[prim_scal_index])
257 + mu_turb(i, j-1, k, d_eddy_diff_idy[prim_scal_index]) );
260 Real met_h_zeta = ay(i,j,k);
265 bool most_on_zlo = ( use_most && rot_most &&
268 Real GradCz = 0.25 * dz_inv * ( cell_prim(i, j, k+1, prim_index) + cell_prim(i, j-1, k+1, prim_index)
269 - cell_prim(i, j, k-1, prim_index) - cell_prim(i, j-1, k-1, prim_index) );
270 Real GradCy = dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
273 yflux(i,j,k,qty_index) = hfx_y(i,j,0);
274 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
275 yflux(i,j,k,qty_index) = qfx1_y(i,j,0);
277 yflux(i,j,k,qty_index) = -rhoAlpha * mf_v(i,j,0) * ( GradCy - (met_h_eta/met_h_zeta)*GradCz );
280 ParallelFor(zbx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
282 const int qty_index = start_comp + n;
283 const int prim_index = qty_index - 1;
286 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i, j, k-1,
Rho_comp) );
287 Real rhoAlpha = rhoFace * d_alpha_eff[prim_scal_index];
288 rhoAlpha += 0.5 * ( mu_turb(i, j, k , d_eddy_diff_idz[prim_scal_index])
289 + mu_turb(i, j, k-1, d_eddy_diff_idz[prim_scal_index]) );
291 Real met_h_zeta = az(i,j,k);
303 bool most_on_zlo = ( use_most && exp_most &&
306 if (ext_dir_on_zlo) {
307 GradCz = dz_inv * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
308 + 3. * cell_prim(i, j, k , prim_index)
309 - (1./3.) * cell_prim(i, j, k+1, prim_index) );
310 }
else if (ext_dir_on_zhi) {
311 GradCz = dz_inv * ( (8./3.) * cell_prim(i, j, k , prim_index)
312 - 3. * cell_prim(i, j, k-1, prim_index)
313 + (1./3.) * cell_prim(i, j, k-2, prim_index) );
315 GradCz = dz_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
320 zflux(i,j,k,qty_index) = hfx_z(i,j,0);
321 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
322 zflux(i,j,k,qty_index) = qfx1_z(i,j,0);
324 zflux(i,j,k,qty_index) = -rhoAlpha * GradCz / met_h_zeta;
329 hfx_z(i,j,k) = zflux(i,j,k,qty_index);
333 qfx1_z(i,j,k) = zflux(i,j,k,qty_index);
336 qfx2_z(i,j,k) = zflux(i,j,k,qty_index);
341 ParallelFor(xbx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
343 const int qty_index = start_comp + n;
344 const int prim_index = qty_index - 1;
346 Real rhoAlpha = d_alpha_eff[prim_index];
347 rhoAlpha += 0.5 * ( mu_turb(i , j, k, d_eddy_diff_idx[prim_index])
348 + mu_turb(i-1, j, k, d_eddy_diff_idx[prim_index]) );
351 Real met_h_zeta = ax(i,j,k);
356 bool most_on_zlo = ( use_most && rot_most &&
359 Real GradCz = 0.25 * dz_inv * ( cell_prim(i, j, k+1, prim_index) + cell_prim(i-1, j, k+1, prim_index)
360 - cell_prim(i, j, k-1, prim_index) - cell_prim(i-1, j, k-1, prim_index) );
361 Real GradCx = dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
364 xflux(i,j,k,qty_index) = hfx_x(i,j,0);
365 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
366 xflux(i,j,k,qty_index) = qfx1_x(i,j,0);
368 xflux(i,j,k,qty_index) = -rhoAlpha * mf_u(i,j,0) * ( GradCx - (met_h_xi/met_h_zeta)*GradCz );
371 ParallelFor(ybx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
373 const int qty_index = start_comp + n;
374 const int prim_index = qty_index - 1;
376 Real rhoAlpha = d_alpha_eff[prim_index];
377 rhoAlpha += 0.5 * ( mu_turb(i, j , k, d_eddy_diff_idy[prim_index])
378 + mu_turb(i, j-1, k, d_eddy_diff_idy[prim_index]) );
381 Real met_h_zeta = ay(i,j,k);
386 bool most_on_zlo = ( use_most && rot_most &&
389 Real GradCz = 0.25 * dz_inv * ( cell_prim(i, j, k+1, prim_index) + cell_prim(i, j-1, k+1, prim_index)
390 - cell_prim(i, j, k-1, prim_index) - cell_prim(i, j-1, k-1, prim_index) );
391 Real GradCy = dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
394 yflux(i,j,k,qty_index) = hfx_y(i,j,0);
395 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
396 yflux(i,j,k,qty_index) = qfx1_y(i,j,0);
398 yflux(i,j,k,qty_index) = -rhoAlpha * mf_v(i,j,0) * ( GradCy - (met_h_eta/met_h_zeta)*GradCz );
401 ParallelFor(zbx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
403 const int qty_index = start_comp + n;
404 const int prim_index = qty_index - 1;
406 Real rhoAlpha = d_alpha_eff[prim_index];
408 rhoAlpha += 0.5 * ( mu_turb(i, j, k , d_eddy_diff_idz[prim_index])
409 + mu_turb(i, j, k-1, d_eddy_diff_idz[prim_index]) );
411 Real met_h_zeta = az(i,j,k);
423 bool most_on_zlo = ( use_most && exp_most &&
426 if (ext_dir_on_zlo) {
427 GradCz = dz_inv * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
428 + 3. * cell_prim(i, j, k , prim_index)
429 - (1./3.) * cell_prim(i, j, k+1, prim_index) );
430 }
else if (ext_dir_on_zhi) {
431 GradCz = dz_inv * ( (8./3.) * cell_prim(i, j, k , prim_index)
432 - 3. * cell_prim(i, j, k-1, prim_index)
433 + (1./3.) * cell_prim(i, j, k-2, prim_index) );
435 GradCz = dz_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
440 zflux(i,j,k,qty_index) = hfx_z(i,j,0);
441 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
442 zflux(i,j,k,qty_index) = qfx1_z(i,j,0);
444 zflux(i,j,k,qty_index) = -rhoAlpha * GradCz / met_h_zeta;
449 hfx_z(i,j,k) = zflux(i,j,k,qty_index);
453 qfx1_z(i,j,k) = zflux(i,j,k,qty_index);
456 qfx2_z(i,j,k) = zflux(i,j,k,qty_index);
461 ParallelFor(xbx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
463 const int qty_index = start_comp + n;
464 const int prim_index = qty_index - 1;
466 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i-1, j, k,
Rho_comp) );
467 Real rhoAlpha = rhoFace * d_alpha_eff[prim_index];
470 Real met_h_zeta = ax(i,j,k);
475 bool most_on_zlo = ( use_most && rot_most &&
478 Real GradCz = 0.25 * dz_inv * ( cell_prim(i, j, k+1, prim_index) + cell_prim(i-1, j, k+1, prim_index)
479 - cell_prim(i, j, k-1, prim_index) - cell_prim(i-1, j, k-1, prim_index) );
480 Real GradCx = dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
483 xflux(i,j,k,qty_index) = hfx_x(i,j,0);
484 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
485 xflux(i,j,k,qty_index) = qfx1_x(i,j,0);
487 xflux(i,j,k,qty_index) = -rhoAlpha * mf_u(i,j,0) * ( GradCx - (met_h_xi/met_h_zeta)*GradCz );
490 ParallelFor(ybx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
492 const int qty_index = start_comp + n;
493 const int prim_index = qty_index - 1;
495 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i, j-1, k,
Rho_comp) );
496 Real rhoAlpha = rhoFace * d_alpha_eff[prim_index];
499 Real met_h_zeta = ay(i,j,k);
504 bool most_on_zlo = ( use_most && rot_most &&
507 Real GradCz = 0.25 * dz_inv * ( cell_prim(i, j, k+1, prim_index) + cell_prim(i, j-1, k+1, prim_index)
508 - cell_prim(i, j, k-1, prim_index) - cell_prim(i, j-1, k-1, prim_index) );
509 Real GradCy = dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
512 yflux(i,j,k,qty_index) = hfx_y(i,j,0);
513 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
514 yflux(i,j,k,qty_index) = qfx1_y(i,j,0);
516 yflux(i,j,k,qty_index) = -rhoAlpha * mf_v(i,j,0) * ( GradCy - (met_h_eta/met_h_zeta)*GradCz );
519 ParallelFor(zbx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
521 const int qty_index = start_comp + n;
522 const int prim_index = qty_index - 1;
524 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i, j, k-1,
Rho_comp) );
525 Real rhoAlpha = rhoFace * d_alpha_eff[prim_index];
527 Real met_h_zeta = az(i,j,k);
539 bool most_on_zlo = ( use_most && exp_most &&
542 if (ext_dir_on_zlo) {
543 GradCz = dz_inv * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
544 + 3. * cell_prim(i, j, k , prim_index)
545 - (1./3.) * cell_prim(i, j, k+1, prim_index) );
546 }
else if (ext_dir_on_zhi) {
547 GradCz = dz_inv * ( (8./3.) * cell_prim(i, j, k , prim_index)
548 - 3. * cell_prim(i, j, k-1, prim_index)
549 + (1./3.) * cell_prim(i, j, k-2, prim_index) );
551 GradCz = dz_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
556 zflux(i,j,k,qty_index) = hfx_z(i,j,0);
557 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
558 zflux(i,j,k,qty_index) = qfx1_z(i,j,0);
560 zflux(i,j,k,qty_index) = -rhoAlpha * GradCz / met_h_zeta;
565 hfx_z(i,j,k) = zflux(i,j,k,qty_index);
569 qfx1_z(i,j,k) = zflux(i,j,k,qty_index);
572 qfx2_z(i,j,k) = zflux(i,j,k,qty_index);
577 ParallelFor(xbx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
579 const int qty_index = start_comp + n;
580 const int prim_index = qty_index - 1;
582 Real rhoAlpha = d_alpha_eff[prim_index];
584 Real met_h_xi,met_h_zeta;
591 bool most_on_zlo = ( use_most && rot_most &&
594 Real GradCz = 0.25 * dz_inv * ( cell_prim(i, j, k+1, prim_index) + cell_prim(i-1, j, k+1, prim_index)
595 - cell_prim(i, j, k-1, prim_index) - cell_prim(i-1, j, k-1, prim_index) );
596 Real GradCx = dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
599 xflux(i,j,k,qty_index) = hfx_x(i,j,0);
600 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
601 xflux(i,j,k,qty_index) = qfx1_x(i,j,0);
603 xflux(i,j,k,qty_index) = -rhoAlpha * mf_u(i,j,0) * ( GradCx - (met_h_xi/met_h_zeta)*GradCz );
606 ParallelFor(ybx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
608 const int qty_index = start_comp + n;
609 const int prim_index = qty_index - 1;
611 Real rhoAlpha = d_alpha_eff[prim_index];
613 Real met_h_eta,met_h_zeta;
620 bool most_on_zlo = ( use_most && rot_most &&
623 Real GradCz = 0.25 * dz_inv * ( cell_prim(i, j, k+1, prim_index) + cell_prim(i, j-1, k+1, prim_index)
624 - cell_prim(i, j, k-1, prim_index) - cell_prim(i, j-1, k-1, prim_index) );
625 Real GradCy = dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
628 yflux(i,j,k,qty_index) = hfx_y(i,j,0);
629 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
630 yflux(i,j,k,qty_index) = qfx1_y(i,j,0);
632 yflux(i,j,k,qty_index) = -rhoAlpha * mf_v(i,j,0) * ( GradCy - (met_h_eta/met_h_zeta)*GradCz );
635 ParallelFor(zbx, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
637 const int qty_index = start_comp + n;
638 const int prim_index = qty_index - 1;
640 Real rhoAlpha = d_alpha_eff[prim_index];
655 bool most_on_zlo = ( use_most && exp_most &&
658 if (ext_dir_on_zlo) {
659 GradCz = dz_inv * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
660 + 3. * cell_prim(i, j, k , prim_index)
661 - (1./3.) * cell_prim(i, j, k+1, prim_index) );
662 }
else if (ext_dir_on_zhi) {
663 GradCz = dz_inv * ( (8./3.) * cell_prim(i, j, k , prim_index)
664 - 3. * cell_prim(i, j, k-1, prim_index)
665 + (1./3.) * cell_prim(i, j, k-2, prim_index) );
667 GradCz = dz_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
672 zflux(i,j,k,qty_index) = hfx_z(i,j,0);
673 }
else if (most_on_zlo && (qty_index ==
RhoQ1_comp)) {
674 zflux(i,j,k,qty_index) = qfx1_z(i,j,0);
676 zflux(i,j,k,qty_index) = -rhoAlpha * GradCz / met_h_zeta;
681 hfx_z(i,j,k) = zflux(i,j,k,qty_index);
685 qfx1_z(i,j,k) = zflux(i,j,k,qty_index);
688 qfx2_z(i,j,k) = zflux(i,j,k,qty_index);
697 Box planexy = zbx; planexy.setBig(2, planexy.smallEnd(2) );
698 int k_lo = zbx.smallEnd(2);
int k_hi = zbx.bigEnd(2);
699 zbx3.growLo(2,-1); zbx3.growHi(2,-1);
700 ParallelFor(planexy, num_comp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int ,
int n) noexcept
702 const int qty_index = start_comp + n;
703 Real met_h_xi,met_h_eta;
709 Real xfluxlo = 0.5 * ( xflux(i , j , k_lo , qty_index) + xflux(i+1, j , k_lo , qty_index) );
710 Real xfluxhi = 0.5 * ( xflux(i , j , k_lo+1, qty_index) + xflux(i+1, j , k_lo+1, qty_index) );
711 Real xfluxbar = 1.5*xfluxlo - 0.5*xfluxhi;
713 Real yfluxlo = 0.5 * ( yflux(i , j , k_lo , qty_index) + yflux(i , j+1, k_lo , qty_index) );
714 Real yfluxhi = 0.5 * ( yflux(i , j , k_lo+1, qty_index) + yflux(i , j+1, k_lo+1, qty_index) );
715 Real yfluxbar = 1.5*yfluxlo - 0.5*yfluxhi;
717 zflux(i,j,k_lo,qty_index) -= met_h_xi*xfluxbar + met_h_eta*yfluxbar;
724 Real xfluxlo = 0.5 * ( xflux(i , j , k_hi-2, qty_index) + xflux(i+1, j , k_hi-2, qty_index) );
725 Real xfluxhi = 0.5 * ( xflux(i , j , k_hi-1, qty_index) + xflux(i+1, j , k_hi-1, qty_index) );
726 Real xfluxbar = 1.5*xfluxhi - 0.5*xfluxlo;
728 Real yfluxlo = 0.5 * ( yflux(i , j , k_hi-2, qty_index) + yflux(i , j+1, k_hi-2, qty_index) );
729 Real yfluxhi = 0.5 * ( yflux(i , j , k_hi-1, qty_index) + yflux(i , j+1, k_hi-1, qty_index) );
730 Real yfluxbar = 1.5*yfluxhi - 0.5*yfluxlo;
732 zflux(i,j,k_hi,qty_index) -= met_h_xi*xfluxbar + met_h_eta*yfluxbar;
737 ParallelFor(zbx3, num_comp,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
739 const int qty_index = start_comp + n;
741 Real met_h_xi,met_h_eta;
745 Real xfluxbar = 0.25 * ( xflux(i , j , k , qty_index) + xflux(i+1, j , k , qty_index)
746 + xflux(i , j , k-1, qty_index) + xflux(i+1, j , k-1, qty_index) );
747 Real yfluxbar = 0.25 * ( yflux(i , j , k , qty_index) + yflux(i , j+1, k , qty_index)
748 + yflux(i , j , k-1, qty_index) + yflux(i , j+1, k-1, qty_index) );
750 zflux(i,j,k,qty_index) -= met_h_xi*xfluxbar + met_h_eta*yfluxbar;
753 ParallelFor(xbx, num_comp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
755 const int qty_index = start_comp + n;
757 xflux(i,j,k,qty_index) *= met_h_zeta;
759 ParallelFor(ybx, num_comp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n) noexcept
761 const int qty_index = start_comp + n;
763 yflux(i,j,k,qty_index) *= met_h_zeta;
769 for (
int n(0); n < num_comp; ++n)
771 int qty_index = start_comp + n;
772 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
774 Real stateContrib = (xflux(i+1,j ,k ,qty_index) - xflux(i, j, k, qty_index)) * dx_inv * mf_m(i,j,0)
775 +(yflux(i ,j+1,k ,qty_index) - yflux(i, j, k, qty_index)) * dy_inv * mf_m(i,j,0)
776 +(zflux(i ,j ,k+1,qty_index) - zflux(i, j, k, qty_index)) * dz_inv;
778 stateContrib /= detJ(i,j,k);
780 cell_rhs(i,j,k,qty_index) -= stateContrib;
799 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
812 cell_rhs(i,j,k,qty_index) += l_abs_g * l_inv_theta0 * hfx_z(i,j,k);
818 cell_rhs(i,j,k,qty_index) += 2.0*mu_turb(i,j,k,
EddyDiff::Mom_v) * SmnSmn_a(i,j,k);
821 cell_rhs(i,j,k,qty_index) -= diss(i,j,k);
826 if (l_use_mynn && start_comp <= RhoKE_comp && end_comp >=
RhoKE_comp) {
830 const int rhoqv_comp = solverChoice.
RhoQv_comp;
831 const int rhoqc_comp = solverChoice.
RhoQc_comp;
832 const int rhoqr_comp = solverChoice.
RhoQr_comp;
834 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
844 cell_rhs(i, j, k, qty_index) +=
ComputeQKESourceTerms(i,j,k,u,v,cell_data,cell_prim,
845 mu_turb,cellSizeInv,domain,
846 pbl_mynn_B1_l,tm_arr(i,j,0),
847 rhoqv_comp, rhoqc_comp, rhoqr_comp,
848 c_ext_dir_on_zlo, c_ext_dir_on_zhi,
849 u_ext_dir_on_zlo, u_ext_dir_on_zhi,
850 v_ext_dir_on_zlo, v_ext_dir_on_zhi,
void DiffusionSrcForState_T(const Box &bx, const Box &domain, int start_comp, int num_comp, const bool &exp_most, const bool &rot_most, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &cell_data, const Array4< const Real > &cell_prim, const Array4< Real > &cell_rhs, const Array4< Real > &xflux, const Array4< Real > &yflux, const Array4< Real > &zflux, const Array4< const Real > &z_nd, const Array4< const Real > &ax, const Array4< const Real > &ay, const Array4< const Real > &az, const Array4< const Real > &detJ, const GpuArray< Real, AMREX_SPACEDIM > &cellSizeInv, const Array4< const Real > &SmnSmn_a, const Array4< const Real > &mf_m, const Array4< const Real > &mf_u, const Array4< const Real > &mf_v, Array4< Real > &hfx_x, Array4< Real > &hfx_y, Array4< Real > &hfx_z, Array4< Real > &qfx1_x, Array4< Real > &qfx1_y, Array4< Real > &qfx1_z, Array4< Real > &qfx2_z, Array4< Real > &diss, const Array4< const Real > &mu_turb, const SolverChoice &solverChoice, const int level, const Array4< const Real > &tm_arr, const GpuArray< Real, AMREX_SPACEDIM > grav_gpu, const BCRec *bc_ptr, const bool use_most)
Definition: ERF_DiffusionSrcForState_T.cpp:43
#define RhoScalar_comp
Definition: ERF_IndexDefines.H:40
#define PrimQ1_comp
Definition: ERF_IndexDefines.H:53
#define NPRIMVAR_max
Definition: ERF_IndexDefines.H:33
#define PrimQ2_comp
Definition: ERF_IndexDefines.H:54
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define PrimQ4_comp
Definition: ERF_IndexDefines.H:56
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:43
#define PrimQ6_comp
Definition: ERF_IndexDefines.H:58
#define NSCALARS
Definition: ERF_IndexDefines.H:16
#define PrimQ5_comp
Definition: ERF_IndexDefines.H:57
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:50
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
#define PrimScalar_comp
Definition: ERF_IndexDefines.H:52
#define PrimQ3_comp
Definition: ERF_IndexDefines.H:55
#define RhoKE_comp
Definition: ERF_IndexDefines.H:38
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real ComputeQKESourceTerms(int i, int j, int k, const amrex::Array4< const amrex::Real > &uvel, const amrex::Array4< const amrex::Real > &vvel, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< const amrex::Real > &K_turb, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Box &domain, amrex::Real pbl_mynn_B1_l, const amrex::Real theta_mean, const int RhoQv_comp, const int RhoQc_comp, const int RhoQr_comp, bool c_ext_dir_on_zlo, bool c_ext_dir_on_zhi, bool u_ext_dir_on_zlo, bool u_ext_dir_on_zhi, bool v_ext_dir_on_zlo, bool v_ext_dir_on_zhi, const bool use_most=false, const amrex::Real met_h_zeta=1.0)
Definition: ERF_PBLModels.H:197
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_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 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 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_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_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_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
@ RhoScalar_bc_comp
Definition: ERF_IndexDefines.H:80
@ yvel_bc
Definition: ERF_IndexDefines.H:88
@ cons_bc
Definition: ERF_IndexDefines.H:76
@ xvel_bc
Definition: ERF_IndexDefines.H:87
@ foextrap
Definition: ERF_IndexDefines.H:190
@ ext_dir
Definition: ERF_IndexDefines.H:191
@ ext_dir_prim
Definition: ERF_IndexDefines.H:193
@ Theta_v
Definition: ERF_IndexDefines.H:168
@ Scalar_v
Definition: ERF_IndexDefines.H:170
@ Q_v
Definition: ERF_IndexDefines.H:171
@ Q_h
Definition: ERF_IndexDefines.H:166
@ Mom_v
Definition: ERF_IndexDefines.H:167
@ Scalar_h
Definition: ERF_IndexDefines.H:165
@ KE_v
Definition: ERF_IndexDefines.H:169
@ Theta_h
Definition: ERF_IndexDefines.H:163
@ KE_h
Definition: ERF_IndexDefines.H:164
Definition: ERF_DiffStruct.H:19
amrex::Real rhoAlpha_C
Definition: ERF_DiffStruct.H:92
amrex::Real rhoAlpha_T
Definition: ERF_DiffStruct.H:91
amrex::Real alpha_T
Definition: ERF_DiffStruct.H:84
amrex::Real alpha_C
Definition: ERF_DiffStruct.H:85
MolecDiffType molec_diff_type
Definition: ERF_DiffStruct.H:81
amrex::Real B1
Definition: ERF_MYNNStruct.H:43
int RhoQr_comp
Definition: ERF_DataStruct.H:783
DiffChoice diffChoice
Definition: ERF_DataStruct.H:674
int RhoQc_comp
Definition: ERF_DataStruct.H:777
int RhoQv_comp
Definition: ERF_DataStruct.H:776
amrex::Vector< TurbChoice > turbChoice
Definition: ERF_DataStruct.H:676
Definition: ERF_TurbStruct.H:31
MYNNLevel25 pbl_mynn
Definition: ERF_TurbStruct.H:242
PBLType pbl_type
Definition: ERF_TurbStruct.H:240
RANSType rans_type
Definition: ERF_TurbStruct.H:237
LESType les_type
Definition: ERF_TurbStruct.H:204
amrex::Real theta_ref
Definition: ERF_TurbStruct.H:234