-
Notifications
You must be signed in to change notification settings - Fork 2
/
External2DIC.H
158 lines (133 loc) · 3.57 KB
/
External2DIC.H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*************************************************************************
*
* Copyright (c) 2018-2022, Lawrence Livermore National Security, LLC.
* See the top-level LICENSE file for details.
* Produced at the Lawrence Livermore National Laboratory
*
* SPDX-License-Identifier: MIT
*
************************************************************************/
#ifndef _EXTERNAL_2D_IC_H_
#define _EXTERNAL_2D_IC_H_
#include "ICInterface.H"
#include "tbox/Pointer.H"
#include "LokiInputParser.H"
namespace Loki {
/**
* Implements interface of ICInterface by adding the velocity modulation to
* an externally supplied 2D distribution.
*/
class External2DIC : public ICInterface
{
public:
/**
* @brief Constructor.
*
* @param[in] a_pp Where the input parameters are to be found.
* @param[in] a_domain Information about the problem domain.
* @param[in] a_mass Mass of the species being initialized.
* @param[in] a_num_ghosts The number of ghosts in each direction.
* @param[in] a_global_box The problem domain + boundary.
*/
External2DIC(
LokiInputParser& a_pp,
const ProblemDomain& a_domain,
double a_mass,
int a_num_ghosts,
const tbox::Box& a_global_box);
/**
* @brief Destructor.
*/
virtual
~External2DIC();
//@{
//! @name Implementation of ICInterface interface.
/**
* @brief Retrieve cached initial condition and set a_u to it.
*
* @param[out] a_u The KineticSpecies distribution function to set.
*/
virtual
void
set(
ParallelArray& a_u) const;
/**
* @brief Compute and cache the initial condition for the points in the
* supplied array.
*
* @param[in] a_u Domain over which initial condition is cached.
*/
virtual
void
cache(
const ParallelArray& a_u);
/**
* @brief Retrieve the cached initial condition at the requested point.
*
* @param[in] a_i1 x index
* @param[in] a_i2 y index
* @param[in] a_i3 vx index
* @param[in] a_i4 vy index
*/
virtual
double
getIC_At_Pt(
int a_i1,
int a_i2,
int a_i3,
int a_i4) const;
/**
* @brief Print the driver's parameters.
*/
virtual
void
printParameters() const;
//@}
/**
* @brief Returns true if name describes this class' type.
*
* @param[in] a_name Name of a type of initial condition.
*
* @return true if name describes this class' type.
*/
static
bool
isType(
const string& a_name);
private:
// Unimplemented default constructor.
External2DIC();
// Unimplemented copy constructor.
External2DIC(
const External2DIC& other);
// Unimplemented assignment operator.
External2DIC&
operator = (
const External2DIC& rhs);
// Parse the input parameters.
void
parseParameters(
LokiInputParser& a_pp);
// If true the thermal behavior is maxwellian. Otherwise it is Juttner.
bool m_maxwellian_thermal;
// The implementation of the requested thermal behavior.
tbox::Pointer<ThermalBehavior> m_thermal;
// The parameters necessary for the evaluation of this initial condition.
double m_tx;
double m_ty;
double m_vx0;
double m_vy0;
double m_x_wave_number;
double m_y_wave_number;
double m_flow_vel_phi;
// The name of the 2D external distribution file.
string m_ext_2d_file;
// The data read in from the external distribution file.
vector<double> m_data;
// Number of data points in x.
int m_nx;
// Number of ghosts in each direction.
int m_num_ghosts;
};
} // end namespace Loki
#endif