/home/runner/work/kynema-sgf/kynema-sgf/src/fvm/fvm_utils.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/fvm/fvm_utils.H Source File
Kynema-SGF 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
5#include "src/fvm/stencils.H"
7
9
19template <typename FvmOp, typename FType>
20AMREX_INLINE void apply(const FvmOp& fvmop, const FType& fld)
21{
23 const int nlevels = fld.repo().num_active_levels();
24 for (int lev = 0; lev < nlevels; ++lev) {
25 const auto& geom = fld.repo().mesh().Geom(lev);
26 const bool px = geom.isPeriodic(0);
27 const bool py = geom.isPeriodic(1);
28 const bool pz = geom.isPeriodic(2);
29
30 fvmop.template apply<stencil::StencilInterior>(lev);
31
32 // faces
33 if (!px) {
34 fvmop.template apply<stencil::StencilILO>(lev);
35 fvmop.template apply<stencil::StencilIHI>(lev);
36 }
37 if (!py) {
38 fvmop.template apply<stencil::StencilJLO>(lev);
39 fvmop.template apply<stencil::StencilJHI>(lev);
40 }
41 if (!pz) {
42 fvmop.template apply<stencil::StencilKLO>(lev);
43 fvmop.template apply<stencil::StencilKHI>(lev);
44 }
45
46 // edges
47 if (!px && !py) {
48 fvmop.template apply<stencil::StencilIhiJlo>(lev);
49 fvmop.template apply<stencil::StencilIhiJhi>(lev);
50 fvmop.template apply<stencil::StencilIloJlo>(lev);
51 fvmop.template apply<stencil::StencilIloJhi>(lev);
52 }
53 if (!px && !pz) {
54 fvmop.template apply<stencil::StencilIhiKlo>(lev);
55 fvmop.template apply<stencil::StencilIhiKhi>(lev);
56 fvmop.template apply<stencil::StencilIloKlo>(lev);
57 fvmop.template apply<stencil::StencilIloKhi>(lev);
58 }
59 if (!py && !pz) {
60 fvmop.template apply<stencil::StencilJhiKlo>(lev);
61 fvmop.template apply<stencil::StencilJhiKhi>(lev);
62 fvmop.template apply<stencil::StencilJloKlo>(lev);
63 fvmop.template apply<stencil::StencilJloKhi>(lev);
64 }
65
66 // corners
67 if (!px && !py && !pz) {
68 fvmop.template apply<stencil::StencilIloJloKlo>(lev);
69 fvmop.template apply<stencil::StencilIloJloKhi>(lev);
70 fvmop.template apply<stencil::StencilIloJhiKlo>(lev);
71 fvmop.template apply<stencil::StencilIloJhiKhi>(lev);
72 fvmop.template apply<stencil::StencilIhiJloKlo>(lev);
73 fvmop.template apply<stencil::StencilIhiJloKhi>(lev);
74 fvmop.template apply<stencil::StencilIhiJhiKlo>(lev);
75 fvmop.template apply<stencil::StencilIhiJhiKhi>(lev);
76 }
77 }
78}
79
80} // namespace kynema_sgf::fvm::impl
81
82#endif /* FVM_UTILS_H */
Definition fvm_utils.H:8
AMREX_INLINE void apply(const FvmOp &fvmop, const FType &fld)
Definition fvm_utils.H:20
Definition stencils.H:45
Second-order finite volume discretization stencil coefficients.