/home/runner/work/kynema-sgf/kynema-sgf/src/physics/multiphase/ChannelBuilder.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/physics/multiphase/ChannelBuilder.H Source File
Kynema-SGF API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
ChannelBuilder.H
Go to the documentation of this file.
1#ifndef CHANNELBUILDER_H
2#define CHANNELBUILDER_H
3
4#include "src/core/Physics.H"
5#include "src/core/Field.H"
6#include "src/CFDSim.H"
7#include "AMReX_Gpu.H"
8
10
11enum class ChannelSegmentType : std::uint8_t { Ellipse, Trapezoid };
12
13enum class ChannelVelocityProfile : std::uint8_t { Uniform, Linear, Parabolic };
14[[nodiscard]] AMREX_GPU_HOST_DEVICE bool trapezoid(
15 const amrex::Real& top,
16 const amrex::Real& bottom,
17 const amrex::Real& height,
18 const amrex::Real& hcoord,
19 const amrex::Real& vcoord);
20
21[[nodiscard]] AMREX_GPU_HOST_DEVICE bool ellipse(
22 const amrex::Real& ax_horz,
23 const amrex::Real& ax_vert,
24 const amrex::Real& hcoord,
25 const amrex::Real& vcoord);
26
30[[nodiscard]] AMREX_GPU_HOST_DEVICE bool is_point_within_planes(
31 const amrex::Real& x,
32 const amrex::Real& y,
33 const amrex::Real& z,
34 const amrex::Real& start_x,
35 const amrex::Real& start_y,
36 const amrex::Real& start_z,
37 const amrex::Real& end_x,
38 const amrex::Real& end_y,
39 const amrex::Real& end_z);
40
44[[nodiscard]] AMREX_GPU_HOST_DEVICE amrex::GpuArray<amrex::Real, 3>
46 const amrex::Real& x,
47 const amrex::Real& y,
48 const amrex::Real& z,
49 const amrex::Real& start_x,
50 const amrex::Real& start_y,
51 const amrex::Real& start_z,
52 const amrex::Real& end_x,
53 const amrex::Real& end_y,
54 const amrex::Real& end_z,
55 const amrex::Real& dim0_s,
56 const amrex::Real& dim1_s,
57 const amrex::Real& dim2_s,
58 const amrex::Real& dim0_e,
59 const amrex::Real& dim1_e,
60 const amrex::Real& dim2_e);
61
66[[nodiscard]] AMREX_GPU_HOST_DEVICE amrex::GpuArray<amrex::Real, 3>
68 bool do_translation,
69 bool is_active,
70 const amrex::Real& x,
71 const amrex::Real& y,
72 const amrex::Real& z,
73 const amrex::Real& start_x,
74 const amrex::Real& start_y,
75 const amrex::Real& start_z,
76 const amrex::Real& end_x,
77 const amrex::Real& end_y,
78 const amrex::Real& end_z);
79
83
84class ChannelBuilder : public Physics::Register<ChannelBuilder>
85{
86public:
87 static std::string identifier() { return "ChannelBuilder"; }
88
89 explicit ChannelBuilder(CFDSim& sim);
90
91 ~ChannelBuilder() override = default;
92
93 void initialize_fields(int level, const amrex::Geometry& geom) override;
94
95 void pre_init_actions() override {}
96
97 void post_init_actions() override {}
98
99 void post_regrid_actions() override;
100
101 void pre_advance_work() override {}
102
103 void post_advance_work() override {}
104
105private:
108 const amrex::AmrCore& m_mesh;
109
112
113 bool m_is_multiphase{false};
114 amrex::Real m_rho_init{1.0_rt};
115 amrex::Real m_water_level{0.0_rt};
116 amrex::Real m_land_level{0.0_rt};
117
119 amrex::Gpu::DeviceVector<ChannelSegmentType> m_type;
120 amrex::Gpu::DeviceVector<amrex::Real> m_dim0_s;
121 amrex::Gpu::DeviceVector<amrex::Real> m_dim1_s;
122 amrex::Gpu::DeviceVector<amrex::Real> m_dim2_s;
123 amrex::Gpu::DeviceVector<amrex::Real> m_dim0_e;
124 amrex::Gpu::DeviceVector<amrex::Real> m_dim1_e;
125 amrex::Gpu::DeviceVector<amrex::Real> m_dim2_e;
126 amrex::Gpu::DeviceVector<amrex::Array<amrex::Real, 3>> m_segment_start;
127 amrex::Gpu::DeviceVector<amrex::Array<amrex::Real, 3>> m_segment_end;
128
130 amrex::Gpu::DeviceVector<ChannelVelocityProfile> m_velocity_profile;
131 amrex::Gpu::DeviceVector<amrex::Real> m_flow_speed;
132};
133} // namespace kynema_sgf::channelbuilder
134
135#endif
Definition CFDSim.H:55
Definition FieldRepo.H:86
Definition IntField.H:20
void initialize_fields(int level, const amrex::Geometry &geom) override
Definition ChannelBuilder.cpp:337
amrex::Real m_land_level
Definition ChannelBuilder.H:116
const FieldRepo & m_repo
Definition ChannelBuilder.H:107
void post_regrid_actions() override
Definition ChannelBuilder.cpp:536
void pre_init_actions() override
Definition ChannelBuilder.H:95
amrex::Gpu::DeviceVector< amrex::Real > m_dim1_s
Definition ChannelBuilder.H:121
amrex::Gpu::DeviceVector< amrex::Real > m_dim2_e
Definition ChannelBuilder.H:125
amrex::Real m_rho_init
Definition ChannelBuilder.H:114
void pre_advance_work() override
Definition ChannelBuilder.H:101
amrex::Gpu::DeviceVector< amrex::Real > m_dim1_e
Definition ChannelBuilder.H:124
CFDSim & m_sim
Definition ChannelBuilder.H:106
void post_advance_work() override
Definition ChannelBuilder.H:103
amrex::Gpu::DeviceVector< ChannelVelocityProfile > m_velocity_profile
Quantities for setting velocity in channels.
Definition ChannelBuilder.H:130
void post_init_actions() override
Definition ChannelBuilder.H:97
const amrex::AmrCore & m_mesh
Definition ChannelBuilder.H:108
ChannelBuilder(CFDSim &sim)
Definition ChannelBuilder.cpp:168
amrex::Gpu::DeviceVector< amrex::Array< amrex::Real, 3 > > m_segment_end
Definition ChannelBuilder.H:127
amrex::Real m_water_level
Definition ChannelBuilder.H:115
amrex::Gpu::DeviceVector< amrex::Real > m_flow_speed
Definition ChannelBuilder.H:131
amrex::Gpu::DeviceVector< amrex::Real > m_dim0_s
Definition ChannelBuilder.H:120
bool m_is_multiphase
Definition ChannelBuilder.H:113
amrex::Gpu::DeviceVector< amrex::Array< amrex::Real, 3 > > m_segment_start
Definition ChannelBuilder.H:126
amrex::Gpu::DeviceVector< ChannelSegmentType > m_type
Quantities for constructing channels.
Definition ChannelBuilder.H:119
amrex::Gpu::DeviceVector< amrex::Real > m_dim0_e
Definition ChannelBuilder.H:123
IntField & m_terrain_blank
Blanking field for terrain or buildings.
Definition ChannelBuilder.H:111
static std::string identifier()
Definition ChannelBuilder.H:87
amrex::Gpu::DeviceVector< amrex::Real > m_dim2_s
Definition ChannelBuilder.H:122
Definition ChannelBuilder.cpp:14
AMREX_GPU_HOST_DEVICE amrex::GpuArray< amrex::Real, 3 > get_local_dimensions(const amrex::Real &x, const amrex::Real &y, const amrex::Real &z, const amrex::Real &start_x, const amrex::Real &start_y, const amrex::Real &start_z, const amrex::Real &end_x, const amrex::Real &end_y, const amrex::Real &end_z, const amrex::Real &dim0_s, const amrex::Real &dim1_s, const amrex::Real &dim2_s, const amrex::Real &dim0_e, const amrex::Real &dim1_e, const amrex::Real &dim2_e)
Definition ChannelBuilder.cpp:68
AMREX_GPU_HOST_DEVICE bool is_point_within_planes(const amrex::Real &x, const amrex::Real &y, const amrex::Real &z, const amrex::Real &start_x, const amrex::Real &start_y, const amrex::Real &start_z, const amrex::Real &end_x, const amrex::Real &end_y, const amrex::Real &end_z)
Definition ChannelBuilder.cpp:42
AMREX_GPU_HOST_DEVICE bool trapezoid(const amrex::Real &top, const amrex::Real &bottom, const amrex::Real &height, const amrex::Real &hcoord, const amrex::Real &vcoord)
Definition ChannelBuilder.cpp:16
ChannelVelocityProfile
Definition ChannelBuilder.H:13
@ Parabolic
Definition ChannelBuilder.H:13
AMREX_GPU_HOST_DEVICE bool ellipse(const amrex::Real &ax_horz, const amrex::Real &ax_vert, const amrex::Real &hcoord, const amrex::Real &vcoord)
Definition ChannelBuilder.cpp:30
ChannelSegmentType
Definition ChannelBuilder.H:11
@ Ellipse
Definition ChannelBuilder.H:11
@ Trapezoid
Definition ChannelBuilder.H:11
AMREX_GPU_HOST_DEVICE amrex::GpuArray< amrex::Real, 3 > transform_to_local_coordinates(bool do_translation, bool is_active, const amrex::Real &x, const amrex::Real &y, const amrex::Real &z, const amrex::Real &start_x, const amrex::Real &start_y, const amrex::Real &start_z, const amrex::Real &end_x, const amrex::Real &end_y, const amrex::Real &end_z)
Definition ChannelBuilder.cpp:111