/home/runner/work/amr-wind/amr-wind/amr-wind/physics/udfs/PowerLawProfile.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/physics/udfs/PowerLawProfile.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
PowerLawProfile.H
Go to the documentation of this file.
1#ifndef POWERLAWPROFILE_H
2#define POWERLAWPROFILE_H
3
4#include "AMReX_Geometry.H"
5#include "AMReX_Gpu.H"
6#include "AMReX_REAL.H"
7
8using namespace amrex::literals;
9
10namespace amr_wind {
11
12class Field;
13
14namespace udf {
15
17{
18 struct DeviceOp
19 {
20 int idir{2};
21 amrex::Real zoffset{0.0_rt};
22 amrex::Real zref;
23 amrex::Real uref;
24 amrex::Real shear_exp;
25 amrex::Real umin{0.0_rt};
26 amrex::Real umax{100.0_rt};
27 amrex::RealArray uvec;
28
29 AMREX_GPU_DEVICE
30 inline void operator()(
31 const amrex::IntVect& iv,
32 amrex::Array4<amrex::Real> const& field,
33 amrex::GeometryData const& geom,
34 const amrex::Real /*unused*/,
35 amrex::Orientation /*unused*/,
36 const int comp,
37 const int dcomp,
38 const int orig_comp) const
39 {
40 const auto* problo = geom.ProbLo();
41 const auto* dx = geom.CellSize();
42 const auto zco = problo[idir] + (iv[idir] + 0.5_rt) * dx[idir];
43
44 const amrex::Real zeff = zco - zoffset;
45 amrex::Real pfac =
46 (zeff > 0.0_rt) ? std::pow((zeff / zref), shear_exp) : 0.0_rt;
47 pfac = amrex::min(amrex::max(pfac, umin), umax);
48
49 field(iv[0], iv[1], iv[2], dcomp + comp) =
50 uvec[orig_comp + comp] * pfac;
51 }
52 };
53
55
56 static std::string identifier() { return "PowerLawProfile"; }
57
58 explicit PowerLawProfile(const Field& fld);
59
60 DeviceType device_instance() const { return m_op; }
61
63
64}; // namespace udf
65
66} // namespace udf
67} // namespace amr_wind
68
69#endif /* POWERLAWPROFILE_H */
Definition Field.H:116
Definition BurggrafLid.cpp:9
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10
Definition PowerLawProfile.H:19
AMREX_GPU_DEVICE void operator()(const amrex::IntVect &iv, amrex::Array4< amrex::Real > const &field, amrex::GeometryData const &geom, const amrex::Real, amrex::Orientation, const int comp, const int dcomp, const int orig_comp) const
Definition PowerLawProfile.H:30
int idir
Definition PowerLawProfile.H:20
amrex::Real zoffset
Definition PowerLawProfile.H:21
amrex::Real shear_exp
Definition PowerLawProfile.H:24
amrex::Real umin
Definition PowerLawProfile.H:25
amrex::Real uref
Definition PowerLawProfile.H:23
amrex::Real umax
Definition PowerLawProfile.H:26
amrex::RealArray uvec
Definition PowerLawProfile.H:27
amrex::Real zref
Definition PowerLawProfile.H:22
DeviceOp DeviceType
Definition PowerLawProfile.H:54
static std::string identifier()
Definition PowerLawProfile.H:56
DeviceType device_instance() const
Definition PowerLawProfile.H:60
PowerLawProfile(const Field &fld)
Definition PowerLawProfile.cpp:11
DeviceOp m_op
Definition PowerLawProfile.H:62