diff --git a/api_docs/_adv_op___godunov_8_h_source.html b/api_docs/_adv_op___godunov_8_h_source.html index 677346b7c6..44b4382b96 100644 --- a/api_docs/_adv_op___godunov_8_h_source.html +++ b/api_docs/_adv_op___godunov_8_h_source.html @@ -129,197 +129,200 @@
52  godunov_scheme = godunov::scheme::PPM;
53  } else if (amrex::toLower(godunov_type) == "ppm_nolim") {
54  godunov_scheme = godunov::scheme::PPM_NOLIM;
-
55  } else if (amrex::toLower(godunov_type) == "bds") {
-
56  godunov_scheme = godunov::scheme::BDS;
-
57  advection_type = "BDS";
-
58  } else if (
-
59  amrex::toLower(godunov_type) == "weno" ||
-
60  amrex::toLower(godunov_type) == "weno_js") {
-
61  godunov_scheme = godunov::scheme::WENOJS;
-
62  } else if (amrex::toLower(godunov_type) == "weno_z") {
-
63  godunov_scheme = godunov::scheme::WENOZ;
-
64  } else {
-
65  amrex::Print()
-
66  << "For godunov_type select between plm, ppm, "
-
67  "ppm_nolim, bds, weno_js, and weno_z: it defaults to ppm"
-
68  << std::endl;
-
69  godunov_scheme = godunov::scheme::PPM;
-
70  }
-
71  // TODO: Need iconserv flag to be adjusted???
-
72  iconserv.resize(PDE::ndim, 1);
-
73  }
-
74 
-
75  void preadvect(
-
76  const FieldState /*unused*/,
-
77  const amrex::Real /*unused*/,
-
78  const amrex::Real /*unused*/)
-
79  {}
-
80 
-
81  void operator()(const FieldState fstate, const amrex::Real dt)
-
82  {
-
83  static_assert(
-
84  PDE::ndim == 1, "Invalid number of components for scalar");
-
85  auto& repo = fields.repo;
-
86  const auto& geom = repo.mesh().Geom();
-
87 
-
88  const auto& src_term = fields.src_term;
-
89  // cppcheck-suppress constVariableReference
-
90  auto& conv_term = fields.conv_term;
-
91  const auto& dof_field = fields.field.state(fstate);
-
92 
-
93  auto flux_x =
-
94  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::XFACE);
-
95  auto flux_y =
-
96  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::YFACE);
-
97  auto flux_z =
-
98  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::ZFACE);
-
99  auto face_x =
-
100  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::XFACE);
-
101  auto face_y =
-
102  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::YFACE);
-
103  auto face_z =
-
104  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::ZFACE);
-
105 
-
106  // only needed if multiplying by rho below
-
107  const auto& den = density.state(fstate);
+
55  amrex::Print() << "WARNING: Using advection type ppm_nolim is not "
+
56  "recommended. Prefer using wenoz."
+
57  << std::endl;
+
58  } else if (amrex::toLower(godunov_type) == "bds") {
+
59  godunov_scheme = godunov::scheme::BDS;
+
60  advection_type = "BDS";
+
61  } else if (
+
62  amrex::toLower(godunov_type) == "weno" ||
+
63  amrex::toLower(godunov_type) == "weno_js") {
+
64  godunov_scheme = godunov::scheme::WENOJS;
+
65  } else if (amrex::toLower(godunov_type) == "weno_z") {
+
66  godunov_scheme = godunov::scheme::WENOZ;
+
67  } else {
+
68  amrex::Print()
+
69  << "For godunov_type select between plm, ppm, "
+
70  "ppm_nolim, bds, weno_js, and weno_z: it defaults to ppm"
+
71  << std::endl;
+
72  godunov_scheme = godunov::scheme::PPM;
+
73  }
+
74  // TODO: Need iconserv flag to be adjusted???
+
75  iconserv.resize(PDE::ndim, 1);
+
76  }
+
77 
+
78  void preadvect(
+
79  const FieldState /*unused*/,
+
80  const amrex::Real /*unused*/,
+
81  const amrex::Real /*unused*/)
+
82  {}
+
83 
+
84  void operator()(const FieldState fstate, const amrex::Real dt)
+
85  {
+
86  static_assert(
+
87  PDE::ndim == 1, "Invalid number of components for scalar");
+
88  auto& repo = fields.repo;
+
89  const auto& geom = repo.mesh().Geom();
+
90 
+
91  const auto& src_term = fields.src_term;
+
92  // cppcheck-suppress constVariableReference
+
93  auto& conv_term = fields.conv_term;
+
94  const auto& dof_field = fields.field.state(fstate);
+
95 
+
96  auto flux_x =
+
97  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::XFACE);
+
98  auto flux_y =
+
99  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::YFACE);
+
100  auto flux_z =
+
101  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::ZFACE);
+
102  auto face_x =
+
103  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::XFACE);
+
104  auto face_y =
+
105  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::YFACE);
+
106  auto face_z =
+
107  repo.create_scratch_field(PDE::ndim, 0, amr_wind::FieldLoc::ZFACE);
108 
-
109  for (int lev = 0; lev < repo.num_active_levels(); ++lev) {
-
110  amrex::MFItInfo mfi_info;
-
111  if (amrex::Gpu::notInLaunchRegion()) {
-
112  mfi_info.EnableTiling(amrex::IntVect(1024, 1024, 1024))
-
113  .SetDynamic(true);
-
114  }
-
115 #ifdef AMREX_USE_OMP
-
116 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
-
117 #endif
-
118  for (amrex::MFIter mfi(dof_field(lev), mfi_info); mfi.isValid();
-
119  ++mfi) {
-
120  const auto& bx = mfi.tilebox();
-
121  auto rho_arr = den(lev).array(mfi);
-
122  auto tra_arr = dof_field(lev).array(mfi);
-
123  amrex::FArrayBox rhotracfab;
-
124  amrex::Array4<amrex::Real> rhotrac;
-
125 
-
126  if (PDE::multiply_rho) {
-
127  auto rhotrac_box =
-
128  amrex::grow(bx, fvm::Godunov::nghost_state);
-
129  rhotracfab.resize(rhotrac_box, PDE::ndim);
-
130  rhotrac = rhotracfab.array();
-
131 
-
132  amrex::ParallelFor(
-
133  rhotrac_box, PDE::ndim,
-
134  [=] AMREX_GPU_DEVICE(
-
135  int i, int j, int k, int n) noexcept {
-
136  rhotrac(i, j, k, n) =
-
137  rho_arr(i, j, k) * tra_arr(i, j, k, n);
-
138  });
-
139  }
-
140 
-
141  if ((godunov_scheme == godunov::scheme::WENOJS) ||
-
142  (godunov_scheme == godunov::scheme::WENOZ)) {
-
143  amrex::FArrayBox tmpfab(amrex::grow(bx, 1), PDE::ndim * 14);
-
144 
-
145  godunov::compute_fluxes(
-
146  lev, bx, PDE::ndim, (*flux_x)(lev).array(mfi),
-
147  (*flux_y)(lev).array(mfi), (*flux_z)(lev).array(mfi),
-
148  (PDE::multiply_rho ? rhotrac : tra_arr),
-
149  u_mac(lev).const_array(mfi),
-
150  v_mac(lev).const_array(mfi),
-
151  w_mac(lev).const_array(mfi),
-
152  src_term(lev).const_array(mfi),
-
153  dof_field.bcrec_device().data(), iconserv.data(),
-
154  tmpfab.dataPtr(), geom, dt, godunov_scheme,
-
155  godunov_use_forces_in_trans);
-
156  } else if (
-
157  (godunov_scheme == godunov::scheme::PPM) ||
-
158  (godunov_scheme == godunov::scheme::PPM_NOLIM) ||
-
159  (godunov_scheme == godunov::scheme::PLM) ||
-
160  (godunov_scheme == godunov::scheme::BDS)) {
-
161  amrex::FArrayBox tmpfab(amrex::grow(bx, 1), 1);
-
162  tmpfab.setVal<amrex::RunOn::Device>(0.0);
-
163  const auto& divu = tmpfab.array();
-
164  const bool is_velocity = false;
-
165  const bool known_edge_state = false;
-
166  const bool godunov_use_ppm =
-
167  ((godunov_scheme == godunov::scheme::PPM) ||
-
168  (godunov_scheme == godunov::scheme::PPM_NOLIM));
-
169  const int limiter_type =
-
170  (godunov_scheme == godunov::scheme::PPM_NOLIM)
-
171  ? PPM::NoLimiter
-
172  : PPM::default_limiter;
-
173  HydroUtils::ComputeFluxesOnBoxFromState(
-
174  bx, PDE::ndim, mfi,
-
175  (PDE::multiply_rho ? rhotrac : tra_arr),
-
176  (*flux_x)(lev).array(mfi), (*flux_y)(lev).array(mfi),
-
177  (*flux_z)(lev).array(mfi), (*face_x)(lev).array(mfi),
-
178  (*face_y)(lev).array(mfi), (*face_z)(lev).array(mfi),
-
179  known_edge_state, u_mac(lev).const_array(mfi),
-
180  v_mac(lev).const_array(mfi),
-
181  w_mac(lev).const_array(mfi), divu,
-
182  src_term(lev).const_array(mfi), geom[lev], dt,
-
183  dof_field.bcrec(), dof_field.bcrec_device().data(),
-
184  iconserv.data(), godunov_use_ppm,
-
185  godunov_use_forces_in_trans, is_velocity,
-
186  fluxes_are_area_weighted, advection_type, limiter_type);
-
187  } else {
-
188  amrex::Abort("Invalid godunov scheme");
-
189  }
-
190  amrex::Gpu::streamSynchronize();
-
191  }
-
192  }
-
193 
-
194  amrex::Vector<amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>> fluxes(
-
195  repo.num_active_levels());
-
196  for (int lev = 0; lev < repo.num_active_levels(); ++lev) {
-
197  fluxes[lev][0] = &(*flux_x)(lev);
-
198  fluxes[lev][1] = &(*flux_y)(lev);
-
199  fluxes[lev][2] = &(*flux_z)(lev);
-
200  }
-
201 
-
202  // In order to enforce conservation across coarse-fine boundaries we
-
203  // must be sure to average down the fluxes before we use them
-
204  for (int lev = repo.num_active_levels() - 1; lev > 0; --lev) {
-
205  amrex::IntVect rr =
-
206  geom[lev].Domain().size() / geom[lev - 1].Domain().size();
-
207  amrex::average_down_faces(
-
208  GetArrOfConstPtrs(fluxes[lev]), fluxes[lev - 1], rr,
-
209  geom[lev - 1]);
-
210  }
-
211 
-
212  for (int lev = 0; lev < repo.num_active_levels(); ++lev) {
-
213 #ifdef AMREX_USE_OMP
-
214 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
-
215 #endif
-
216  for (amrex::MFIter mfi(dof_field(lev), amrex::TilingIfNotGPU());
-
217  mfi.isValid(); ++mfi) {
-
218  const auto& bx = mfi.tilebox();
-
219 
-
220  HydroUtils::ComputeDivergence(
-
221  bx, conv_term(lev).array(mfi), (*flux_x)(lev).array(mfi),
-
222  (*flux_y)(lev).array(mfi), (*flux_z)(lev).array(mfi),
-
223  PDE::ndim, geom[lev], amrex::Real(-1.0),
-
224  fluxes_are_area_weighted);
-
225  }
-
226  }
-
227  }
-
228 
-
229  PDEFields& fields;
-
230  Field& density;
-
231  Field& u_mac;
-
232  Field& v_mac;
-
233  Field& w_mac;
-
234  amrex::Gpu::DeviceVector<int> iconserv;
-
235 
-
236  godunov::scheme godunov_scheme = godunov::scheme::PPM;
-
237  std::string godunov_type;
-
238  const bool fluxes_are_area_weighted{false};
-
239  bool godunov_use_forces_in_trans{false};
-
240  std::string advection_type{"Godunov"};
-
241 };
-
242 
-
243 } // namespace amr_wind::pde
-
244 
-
245 #endif /* ADVOP_GODUNOV_H */
+
109  // only needed if multiplying by rho below
+
110  const auto& den = density.state(fstate);
+
111 
+
112  for (int lev = 0; lev < repo.num_active_levels(); ++lev) {
+
113  amrex::MFItInfo mfi_info;
+
114  if (amrex::Gpu::notInLaunchRegion()) {
+
115  mfi_info.EnableTiling(amrex::IntVect(1024, 1024, 1024))
+
116  .SetDynamic(true);
+
117  }
+
118 #ifdef AMREX_USE_OMP
+
119 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
+
120 #endif
+
121  for (amrex::MFIter mfi(dof_field(lev), mfi_info); mfi.isValid();
+
122  ++mfi) {
+
123  const auto& bx = mfi.tilebox();
+
124  auto rho_arr = den(lev).array(mfi);
+
125  auto tra_arr = dof_field(lev).array(mfi);
+
126  amrex::FArrayBox rhotracfab;
+
127  amrex::Array4<amrex::Real> rhotrac;
+
128 
+
129  if (PDE::multiply_rho) {
+
130  auto rhotrac_box =
+
131  amrex::grow(bx, fvm::Godunov::nghost_state);
+
132  rhotracfab.resize(rhotrac_box, PDE::ndim);
+
133  rhotrac = rhotracfab.array();
+
134 
+
135  amrex::ParallelFor(
+
136  rhotrac_box, PDE::ndim,
+
137  [=] AMREX_GPU_DEVICE(
+
138  int i, int j, int k, int n) noexcept {
+
139  rhotrac(i, j, k, n) =
+
140  rho_arr(i, j, k) * tra_arr(i, j, k, n);
+
141  });
+
142  }
+
143 
+
144  if ((godunov_scheme == godunov::scheme::WENOJS) ||
+
145  (godunov_scheme == godunov::scheme::WENOZ)) {
+
146  amrex::FArrayBox tmpfab(amrex::grow(bx, 1), PDE::ndim * 14);
+
147 
+
148  godunov::compute_fluxes(
+
149  lev, bx, PDE::ndim, (*flux_x)(lev).array(mfi),
+
150  (*flux_y)(lev).array(mfi), (*flux_z)(lev).array(mfi),
+
151  (PDE::multiply_rho ? rhotrac : tra_arr),
+
152  u_mac(lev).const_array(mfi),
+
153  v_mac(lev).const_array(mfi),
+
154  w_mac(lev).const_array(mfi),
+
155  src_term(lev).const_array(mfi),
+
156  dof_field.bcrec_device().data(), iconserv.data(),
+
157  tmpfab.dataPtr(), geom, dt, godunov_scheme,
+
158  godunov_use_forces_in_trans);
+
159  } else if (
+
160  (godunov_scheme == godunov::scheme::PPM) ||
+
161  (godunov_scheme == godunov::scheme::PPM_NOLIM) ||
+
162  (godunov_scheme == godunov::scheme::PLM) ||
+
163  (godunov_scheme == godunov::scheme::BDS)) {
+
164  amrex::FArrayBox tmpfab(amrex::grow(bx, 1), 1);
+
165  tmpfab.setVal<amrex::RunOn::Device>(0.0);
+
166  const auto& divu = tmpfab.array();
+
167  const bool is_velocity = false;
+
168  const bool known_edge_state = false;
+
169  const bool godunov_use_ppm =
+
170  ((godunov_scheme == godunov::scheme::PPM) ||
+
171  (godunov_scheme == godunov::scheme::PPM_NOLIM));
+
172  const int limiter_type =
+
173  (godunov_scheme == godunov::scheme::PPM_NOLIM)
+
174  ? PPM::NoLimiter
+
175  : PPM::default_limiter;
+
176  HydroUtils::ComputeFluxesOnBoxFromState(
+
177  bx, PDE::ndim, mfi,
+
178  (PDE::multiply_rho ? rhotrac : tra_arr),
+
179  (*flux_x)(lev).array(mfi), (*flux_y)(lev).array(mfi),
+
180  (*flux_z)(lev).array(mfi), (*face_x)(lev).array(mfi),
+
181  (*face_y)(lev).array(mfi), (*face_z)(lev).array(mfi),
+
182  known_edge_state, u_mac(lev).const_array(mfi),
+
183  v_mac(lev).const_array(mfi),
+
184  w_mac(lev).const_array(mfi), divu,
+
185  src_term(lev).const_array(mfi), geom[lev], dt,
+
186  dof_field.bcrec(), dof_field.bcrec_device().data(),
+
187  iconserv.data(), godunov_use_ppm,
+
188  godunov_use_forces_in_trans, is_velocity,
+
189  fluxes_are_area_weighted, advection_type, limiter_type);
+
190  } else {
+
191  amrex::Abort("Invalid godunov scheme");
+
192  }
+
193  amrex::Gpu::streamSynchronize();
+
194  }
+
195  }
+
196 
+
197  amrex::Vector<amrex::Array<amrex::MultiFab*, AMREX_SPACEDIM>> fluxes(
+
198  repo.num_active_levels());
+
199  for (int lev = 0; lev < repo.num_active_levels(); ++lev) {
+
200  fluxes[lev][0] = &(*flux_x)(lev);
+
201  fluxes[lev][1] = &(*flux_y)(lev);
+
202  fluxes[lev][2] = &(*flux_z)(lev);
+
203  }
+
204 
+
205  // In order to enforce conservation across coarse-fine boundaries we
+
206  // must be sure to average down the fluxes before we use them
+
207  for (int lev = repo.num_active_levels() - 1; lev > 0; --lev) {
+
208  amrex::IntVect rr =
+
209  geom[lev].Domain().size() / geom[lev - 1].Domain().size();
+
210  amrex::average_down_faces(
+
211  GetArrOfConstPtrs(fluxes[lev]), fluxes[lev - 1], rr,
+
212  geom[lev - 1]);
+
213  }
+
214 
+
215  for (int lev = 0; lev < repo.num_active_levels(); ++lev) {
+
216 #ifdef AMREX_USE_OMP
+
217 #pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
+
218 #endif
+
219  for (amrex::MFIter mfi(dof_field(lev), amrex::TilingIfNotGPU());
+
220  mfi.isValid(); ++mfi) {
+
221  const auto& bx = mfi.tilebox();
+
222 
+
223  HydroUtils::ComputeDivergence(
+
224  bx, conv_term(lev).array(mfi), (*flux_x)(lev).array(mfi),
+
225  (*flux_y)(lev).array(mfi), (*flux_z)(lev).array(mfi),
+
226  PDE::ndim, geom[lev], amrex::Real(-1.0),
+
227  fluxes_are_area_weighted);
+
228  }
+
229  }
+
230  }
+
231 
+
232  PDEFields& fields;
+
233  Field& density;
+
234  Field& u_mac;
+
235  Field& v_mac;
+
236  Field& w_mac;
+
237  amrex::Gpu::DeviceVector<int> iconserv;
+
238 
+
239  godunov::scheme godunov_scheme = godunov::scheme::PPM;
+
240  std::string godunov_type;
+
241  const bool fluxes_are_area_weighted{false};
+
242  bool godunov_use_forces_in_trans{false};
+
243  std::string advection_type{"Godunov"};
+
244 };
+
245 
+
246 } // namespace amr_wind::pde
+
247 
+
248 #endif /* ADVOP_GODUNOV_H */
Godunov.H
PDEOps.H
PDETraits.H
@@ -340,16 +343,16 @@
godunov::scheme::WENOZ
@ WENOZ
godunov::compute_fluxes
void compute_fluxes(int lev, amrex::Box const &bx, int ncomp, amrex::Array4< amrex::Real > const &fx, amrex::Array4< amrex::Real > const &fy, amrex::Array4< amrex::Real > const &fz, amrex::Array4< amrex::Real const > const &q, amrex::Array4< amrex::Real const > const &umac, amrex::Array4< amrex::Real const > const &vmac, amrex::Array4< amrex::Real const > const &wmac, amrex::Array4< amrex::Real const > const &fq, amrex::BCRec const *pbc, int const *iconserv, amrex::Real *p, amrex::Vector< amrex::Geometry > geom, amrex::Real dt, godunov::scheme godunov_scheme, bool godunov_use_forces_in_trans)
amr_wind::fvm::Godunov::nghost_state
static constexpr int nghost_state
Number of ghost in the state variable.
Definition: SchemeTraits.H:19
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::operator()
void operator()(const FieldState fstate, const amrex::Real dt)
Definition: AdvOp_Godunov.H:81
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::density
Field & density
Definition: AdvOp_Godunov.H:230
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::u_mac
Field & u_mac
Definition: AdvOp_Godunov.H:231
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::godunov_type
std::string godunov_type
Definition: AdvOp_Godunov.H:237
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::operator()
void operator()(const FieldState fstate, const amrex::Real dt)
Definition: AdvOp_Godunov.H:84
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::density
Field & density
Definition: AdvOp_Godunov.H:233
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::u_mac
Field & u_mac
Definition: AdvOp_Godunov.H:234
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::godunov_type
std::string godunov_type
Definition: AdvOp_Godunov.H:240
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::AdvectionOp
AdvectionOp(CFDSim &, PDEFields &fields_in, bool, bool, bool, bool)
Definition: AdvOp_Godunov.H:27
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::preadvect
void preadvect(const FieldState, const amrex::Real, const amrex::Real)
Definition: AdvOp_Godunov.H:75
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::fields
PDEFields & fields
Definition: AdvOp_Godunov.H:229
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::iconserv
amrex::Gpu::DeviceVector< int > iconserv
Definition: AdvOp_Godunov.H:234
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::v_mac
Field & v_mac
Definition: AdvOp_Godunov.H:232
-
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::w_mac
Field & w_mac
Definition: AdvOp_Godunov.H:233
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::preadvect
void preadvect(const FieldState, const amrex::Real, const amrex::Real)
Definition: AdvOp_Godunov.H:78
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::fields
PDEFields & fields
Definition: AdvOp_Godunov.H:232
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::iconserv
amrex::Gpu::DeviceVector< int > iconserv
Definition: AdvOp_Godunov.H:237
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::v_mac
Field & v_mac
Definition: AdvOp_Godunov.H:235
+
amr_wind::pde::AdvectionOp< PDE, fvm::Godunov, typename std::enable_if_t< std::is_base_of_v< ScalarTransport, PDE > > >::w_mac
Field & w_mac
Definition: AdvOp_Godunov.H:236
amr_wind::pde::AdvectionOp
Definition: PDEOps.H:168
amr_wind::pde::PDEFields
Collection of fields related to a PDE.
Definition: PDEFields.H:27