/home/runner/work/amr-wind/amr-wind/amr-wind/fvm/fvm_utils.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/fvm/fvm_utils.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
fvm_utils.H
Go to the documentation of this file.
1#ifndef FVM_UTILS_H
2#define FVM_UTILS_H
3
7
8#include "AMReX_MFIter.H"
9
11
14template <typename FvmOp, typename FType>
15AMREX_INLINE void apply(const FvmOp& fvmop, const FType& fld)
16{
18 const int nlevels = fld.repo().num_active_levels();
19 for (int lev = 0; lev < nlevels; ++lev) {
20 const auto& domain = fld.repo().mesh().Geom(lev).Domain();
21 const auto& mfab = fld(lev);
22
23#ifdef AMREX_USE_OMP
24#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
25#endif
26 for (amrex::MFIter mfi(mfab, amrex::TilingIfNotGPU()); mfi.isValid();
27 ++mfi) {
28
29 fvmop.template apply<stencil::StencilInterior>(lev, mfi);
30
31 // Check if the box touches any of the physical domain boundaries.
32 // If not, short circuit the rest of the code and move on to the
33 // next multifab.
34 if (domain.strictly_contains(mfi.tilebox())) {
35 continue;
36 }
37
38 // faces
39 fvmop.template apply<stencil::StencilILO>(lev, mfi);
40 fvmop.template apply<stencil::StencilJLO>(lev, mfi);
41 fvmop.template apply<stencil::StencilKLO>(lev, mfi);
42 fvmop.template apply<stencil::StencilIHI>(lev, mfi);
43 fvmop.template apply<stencil::StencilJHI>(lev, mfi);
44 fvmop.template apply<stencil::StencilKHI>(lev, mfi);
45
46 // edges
47 fvmop.template apply<stencil::StencilIhiJlo>(lev, mfi);
48 fvmop.template apply<stencil::StencilIhiJhi>(lev, mfi);
49
50 fvmop.template apply<stencil::StencilIhiKlo>(lev, mfi);
51 fvmop.template apply<stencil::StencilIhiKhi>(lev, mfi);
52
53 fvmop.template apply<stencil::StencilJhiKlo>(lev, mfi);
54 fvmop.template apply<stencil::StencilJhiKhi>(lev, mfi);
55
56 fvmop.template apply<stencil::StencilIloJlo>(lev, mfi);
57 fvmop.template apply<stencil::StencilIloJhi>(lev, mfi);
58
59 fvmop.template apply<stencil::StencilIloKlo>(lev, mfi);
60 fvmop.template apply<stencil::StencilIloKhi>(lev, mfi);
61
62 fvmop.template apply<stencil::StencilJloKlo>(lev, mfi);
63 fvmop.template apply<stencil::StencilJloKhi>(lev, mfi);
64
65 // corners
66 fvmop.template apply<stencil::StencilIloJloKlo>(lev, mfi);
67 fvmop.template apply<stencil::StencilIloJloKhi>(lev, mfi);
68 fvmop.template apply<stencil::StencilIloJhiKlo>(lev, mfi);
69 fvmop.template apply<stencil::StencilIloJhiKhi>(lev, mfi);
70 fvmop.template apply<stencil::StencilIhiJloKlo>(lev, mfi);
71 fvmop.template apply<stencil::StencilIhiJloKhi>(lev, mfi);
72 fvmop.template apply<stencil::StencilIhiJhiKlo>(lev, mfi);
73 fvmop.template apply<stencil::StencilIhiJhiKhi>(lev, mfi);
74 }
75 }
76}
77
78} // namespace amr_wind::fvm::impl
79
80#endif /* FVM_UTILS_H */
Definition fvm_utils.H:10
AMREX_INLINE void apply(const FvmOp &fvmop, const FType &fld)
Definition fvm_utils.H:15
Definition stencils.H:45
Second-order finite volume discretization stencil coefficients.