ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_ReadBndryPlanes.H
Go to the documentation of this file.
1 /**
2  * \file ERF_ReadBndryPlanes.H
3  */
4 #ifndef ERF_BOUNDARYPLANE_H
5 #define ERF_BOUNDARYPLANE_H
6 
7 #include "AMReX_Gpu.H"
8 #include "AMReX_AmrCore.H"
9 #include <AMReX_BndryRegister.H>
10 #include "ERF_IndexDefines.H"
11 #include "ERF_DataStruct.H"
12 
13 #include <string>
14 
15 using PlaneVector = amrex::Vector<amrex::FArrayBox>;
16 
17 /** Collection of data structures and operations for reading data
18  *
19  * This class contains the inlet data structures and operations to
20  * read and interpolate inflow data.
21  */
23 {
24 
25 public:
26  /// The slot (BCVars) a plane of variable var_name is stored in, the same slot
27  /// fill_from_bndryregs reads it from (cons_bc_comp of the component it
28  /// fills); -1 for a name that is not a plane variable.
29  static int plane_slot (const std::string& var_name)
30  {
31  if (var_name == "density") { return BCVars::Rho_bc_comp; }
32  if (var_name == "theta") { return BCVars::RhoTheta_bc_comp; }
33  if (var_name == "temperature") { return BCVars::RhoTheta_bc_comp; }
34  if (var_name == "ke") { return BCVars::RhoKE_bc_comp; }
35  if (var_name == "scalar") { return BCVars::RhoScalar_bc_comp; }
36  if (var_name == "qv") { return BCVars::RhoQ1_bc_comp; }
37  if (var_name == "qc") { return BCVars::RhoQ2_bc_comp; }
38  if (var_name == "velocity") { return BCVars::xvel_bc; }
39  return -1;
40  }
41 
42  explicit ReadBndryPlanes (const amrex::Geometry& geom,
43  const amrex::Real& rdOcp_in);
44 
45  void define_level_data (int lev);
46 
47  void read_time_file ();
48 
49  void read_input_files (double time,
50  double dt,
51  amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>, AMREX_SPACEDIM+NBCVAR_max> m_bc_extdir_vals);
52 
53  void read_file (int idx,
54  amrex::Vector<std::unique_ptr<PlaneVector>>& data_to_fill,
55  amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>, AMREX_SPACEDIM+NBCVAR_max> m_bc_extdir_vals);
56 
57  // Return the pointer to PlaneVectors at time "time"
58  amrex::Vector<std::unique_ptr<PlaneVector>>& interp_in_time (const double& time);
59 
60  // Return the pointer to PlaneVectors that have the tendency
61  amrex::Vector<std::unique_ptr<PlaneVector>>& get_tendency (const double& time);
62 
63  [[nodiscard]] double tinterp () const { return m_tinterp; }
64 
65  [[nodiscard]] int ingested_velocity () const {return is_velocity_read;}
66  [[nodiscard]] int ingested_theta () const {return (is_temperature_read || is_theta_read);}
67  [[nodiscard]] int ingested_density () const {return is_density_read;}
68  [[nodiscard]] int ingested_scalar () const {return is_scalar_read;}
69  [[nodiscard]] int ingested_q1 () const {return is_q1_read;}
70  [[nodiscard]] int ingested_q2 () const {return is_q2_read;}
71  [[nodiscard]] int ingested_KE () const {return is_KE_read;}
72 
73 private:
74 
75  //! The times for which we currently have data
76  double m_tn;
77  double m_tnp1;
78  double m_tnp2;
79 
80  //! Data at time m_tn
81  amrex::Vector<std::unique_ptr<PlaneVector>> m_data_n;
82 
83  //! Data at time m_tnp1
84  amrex::Vector<std::unique_ptr<PlaneVector>> m_data_np1;
85 
86  //! Data at time m_tnp2
87  amrex::Vector<std::unique_ptr<PlaneVector>> m_data_np2;
88 
89  //! Data interpolated to the time requested
90  amrex::Vector<std::unique_ptr<PlaneVector>> m_data_interp;
91 
92  //! Tendency between the n and np1 data
93  amrex::Vector<std::unique_ptr<PlaneVector>> m_data_tendency;
94 
95  //! Time for plane at interpolation
96  double m_tinterp{-1.0};
97 
98  //! Geometry at level 0
99  amrex::Geometry m_geom;
100 
101  //! File name for IO
102  std::string m_filename{""};
103 
104  //! File name for file holding timesteps and times
105  std::string m_time_file{""};
106 
107  //! The timesteps / times that we read from time.dat
108  amrex::Vector<double> m_in_times;
109  amrex::Vector<int> m_in_timesteps;
110 
111  //! Variables to be read in
112  amrex::Vector<std::string> m_var_names;
113 
114  //! Controls extents on native bndry output
115  int m_in_rad = 1;
116  const int m_out_rad = 1;
117  const int m_extent_rad = 0;
118 
119  //! Are real BCs being used?
120  bool m_use_real_bcs = false;
121 
122  //! R_d/c_p is needed for reading boundary files
124 
133 
135 };
136 
137 #endif /* ERF_BOUNDARYPLANE_H */
#define NBCVAR_max
Definition: ERF_IndexDefines.H:42
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int idx(int i, int j, int k, int nx, int ny)
Definition: ERF_InitForEnsemble.cpp:404
amrex::Vector< amrex::FArrayBox > PlaneVector
Definition: ERF_NCWpsFile.H:17
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_ReadBndryPlanes.H:23
int ingested_q1() const
Definition: ERF_ReadBndryPlanes.H:69
amrex::Vector< double > m_in_times
The timesteps / times that we read from time.dat.
Definition: ERF_ReadBndryPlanes.H:108
int is_velocity_read
Definition: ERF_ReadBndryPlanes.H:125
ReadBndryPlanes(const amrex::Geometry &geom, const amrex::Real &rdOcp_in)
Definition: ERF_ReadBndryPlanes.cpp:221
void define_level_data(int lev)
Definition: ERF_ReadBndryPlanes.cpp:51
int is_q2_read
Definition: ERF_ReadBndryPlanes.H:131
double m_tnp1
Definition: ERF_ReadBndryPlanes.H:77
int is_theta_read
Definition: ERF_ReadBndryPlanes.H:128
bool m_use_real_bcs
Are real BCs being used?
Definition: ERF_ReadBndryPlanes.H:120
std::string m_filename
File name for IO.
Definition: ERF_ReadBndryPlanes.H:102
int is_temperature_read
Definition: ERF_ReadBndryPlanes.H:127
amrex::Vector< std::unique_ptr< PlaneVector > > & interp_in_time(const double &time)
Definition: ERF_ReadBndryPlanes.cpp:94
int is_density_read
Definition: ERF_ReadBndryPlanes.H:126
void read_input_files(double time, double dt, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals)
Definition: ERF_ReadBndryPlanes.cpp:369
amrex::Vector< std::unique_ptr< PlaneVector > > m_data_np2
Data at time m_tnp2.
Definition: ERF_ReadBndryPlanes.H:87
amrex::Vector< std::unique_ptr< PlaneVector > > m_data_interp
Data interpolated to the time requested.
Definition: ERF_ReadBndryPlanes.H:90
int ingested_scalar() const
Definition: ERF_ReadBndryPlanes.H:68
static int plane_slot(const std::string &var_name)
Definition: ERF_ReadBndryPlanes.H:29
int last_file_read
Definition: ERF_ReadBndryPlanes.H:134
int is_KE_read
Definition: ERF_ReadBndryPlanes.H:132
amrex::Vector< int > m_in_timesteps
Definition: ERF_ReadBndryPlanes.H:109
const amrex::Real m_rdOcp
R_d/c_p is needed for reading boundary files.
Definition: ERF_ReadBndryPlanes.H:123
std::string m_time_file
File name for file holding timesteps and times.
Definition: ERF_ReadBndryPlanes.H:105
int ingested_KE() const
Definition: ERF_ReadBndryPlanes.H:71
int ingested_velocity() const
Definition: ERF_ReadBndryPlanes.H:65
amrex::Vector< std::unique_ptr< PlaneVector > > m_data_tendency
Tendency between the n and np1 data.
Definition: ERF_ReadBndryPlanes.H:93
amrex::Vector< std::string > m_var_names
Variables to be read in.
Definition: ERF_ReadBndryPlanes.H:112
int is_scalar_read
Definition: ERF_ReadBndryPlanes.H:129
amrex::Vector< std::unique_ptr< PlaneVector > > & get_tendency(const double &time)
Definition: ERF_ReadBndryPlanes.cpp:159
int is_q1_read
Definition: ERF_ReadBndryPlanes.H:130
int ingested_density() const
Definition: ERF_ReadBndryPlanes.H:67
int ingested_q2() const
Definition: ERF_ReadBndryPlanes.H:70
int ingested_theta() const
Definition: ERF_ReadBndryPlanes.H:66
void read_time_file()
Definition: ERF_ReadBndryPlanes.cpp:299
const int m_out_rad
Definition: ERF_ReadBndryPlanes.H:116
amrex::Vector< std::unique_ptr< PlaneVector > > m_data_n
Data at time m_tn.
Definition: ERF_ReadBndryPlanes.H:81
double m_tnp2
Definition: ERF_ReadBndryPlanes.H:78
double m_tn
The times for which we currently have data.
Definition: ERF_ReadBndryPlanes.H:76
double tinterp() const
Definition: ERF_ReadBndryPlanes.H:63
const int m_extent_rad
Definition: ERF_ReadBndryPlanes.H:117
amrex::Vector< std::unique_ptr< PlaneVector > > m_data_np1
Data at time m_tnp1.
Definition: ERF_ReadBndryPlanes.H:84
int m_in_rad
Controls extents on native bndry output.
Definition: ERF_ReadBndryPlanes.H:115
amrex::Geometry m_geom
Geometry at level 0.
Definition: ERF_ReadBndryPlanes.H:99
double m_tinterp
Time for plane at interpolation.
Definition: ERF_ReadBndryPlanes.H:96
void read_file(int idx, amrex::Vector< std::unique_ptr< PlaneVector >> &data_to_fill, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals)
Definition: ERF_ReadBndryPlanes.cpp:443
@ RhoScalar_bc_comp
Definition: ERF_IndexDefines.H:114
@ RhoQ1_bc_comp
Definition: ERF_IndexDefines.H:115
@ RhoKE_bc_comp
Definition: ERF_IndexDefines.H:113
@ RhoTheta_bc_comp
Definition: ERF_IndexDefines.H:112
@ RhoQ2_bc_comp
Definition: ERF_IndexDefines.H:116
@ Rho_bc_comp
Definition: ERF_IndexDefines.H:111
@ xvel_bc
Definition: ERF_IndexDefines.H:126