/home/runner/work/kynema-sgf/kynema-sgf/src/wind_energy/actuator/disk/ActSrcDiskOp.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/wind_energy/actuator/disk/ActSrcDiskOp.H Source File
Kynema-SGF API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
ActSrcDiskOp.H
Go to the documentation of this file.
1#ifndef ACTSRCDISKOP_H
2#define ACTSRCDISKOP_H
8
10
11template <typename ActTrait>
13 ActTrait,
15 std::enable_if_t<std::is_base_of_v<DiskType, ActTrait>>>
16{
17 using TraitType = ActTrait;
18
19 template <typename T>
21 T,
23 std::enable_if_t<std::is_base_of_v<DiskType, T>>>;
24
26
27 friend SpreadType;
28
29protected:
30 typename ActTrait::DataType& m_data;
33
36
37 void copy_to_device();
38
39public:
40 explicit ActSrcOp(typename ActTrait::DataType& data)
41 : m_data(data)
42 , m_act_src(m_data.sim().repo().get_field("actuator_src_term"))
43 {}
44
45 void initialize();
46
48
49 void
50 operator()(int lev, const amrex::MFIter& mfi, const amrex::Geometry& geom);
51};
52
53template <typename ActTrait>
54void ActSrcOp<
55 ActTrait,
57 std::enable_if_t<std::is_base_of_v<DiskType, ActTrait>>>::
58operator()(const int lev, const amrex::MFIter& mfi, const amrex::Geometry& geom)
59{
60 BL_PROFILE(
61 "kynema-sgf::ActSrcOp<" + ActTrait::identifier() +
63 m_spreading(*this, lev, mfi, geom);
64}
65
66template <typename ActTrait>
67void ActSrcOp<
68 ActTrait,
70 std::enable_if_t<std::is_base_of_v<DiskType, ActTrait>>>::initialize()
71{
72 const auto& grid = m_data.grid();
73 m_pos.resize(grid.pos.size());
74 m_force.resize(grid.force.size());
75 m_spreading.initialize(m_data.meta().spreading_type);
76}
77
78template <typename ActTrait>
79void ActSrcOp<
80 ActTrait,
82 std::enable_if_t<std::is_base_of_v<DiskType, ActTrait>>>::copy_to_device()
83{
84 const auto& grid = m_data.grid();
85
86 amrex::Gpu::copy(
87 amrex::Gpu::hostToDevice, grid.pos.begin(), grid.pos.end(),
88 m_pos.begin());
89 amrex::Gpu::copy(
90 amrex::Gpu::hostToDevice, grid.force.begin(), grid.force.end(),
91 m_force.begin());
92}
93
94} // namespace kynema_sgf::actuator::ops
95
96#endif /* ACTSRCDISKOP_H */
Definition Field.H:115
ActSrcOp< T, ActSrcDisk, std::enable_if_t< std::is_base_of_v< DiskType, T > > > MyType
Definition ActSrcDiskOp.H:20
Definition actuator_ops.H:71
A collection of spreading functions This class allows for polymorphic spreading functions....
Definition disk_spreading.H:23
Definition ActSrcLineOp.H:12
amrex::Gpu::DeviceVector< kynema_sgf::vs::Vector > DeviceVecList
Definition actuator_types.H:97
Definition actuator_types.H:59
static std::string identifier()
Definition actuator_types.H:60