ExactSolution Namespace Reference

Namespace for exact solution. More...

Functions

void get_exact_u_for_unsteady_heat_validation (const double &t, const Vector< double > &x, Vector< double > &u)
 Exact solution as a Vector. More...
 
void get_exact_u_for_unsteady_heat_validation (const double &t, const Vector< double > &x, double &u)
 Exact solution as a scalar. More...
 
void get_source_for_unsteady_heat_validation (const double &t, const Vector< double > &x, double &source)
 Source function to make it an exact solution. More...
 
double melting_surface_height (const double &t, const double &x)
 Height of melting surface. More...
 
void analytical_outer_unit_normal (const double &t, const Vector< double > &x, double &nx, double &ny)
 Analytical outer unit normal. More...
 
void flux_into_bulk (const double &t, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
 
void prescribed_flux_for_unsteady_heat_validation (const double &t, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
 
void rigid_body_rotation (const Vector< double > &x, Vector< double > &u)
 The rigid-body rotation solution. More...
 
void rigid_body_rotation_dr (const Vector< double > &x, Vector< double > &u)
 The r-derivative of the rigid-body rotation solution. More...
 
void rigid_body_rotation_dtheta (const Vector< double > &x, Vector< double > &u)
 The theta-derivative of the rigid-body rotation solution. More...
 

Variables

double U0 =0.0
 Constant/initial temperature. More...
 
double Growth_rate =1.0
 Growth rate for interface. More...
 
bool Use_analytical_outer_unit_normal =true
 Use analytical outer unit normal when computing fluxes? More...
 
double Omega_cos =0.0
 

Detailed Description

Namespace for exact solution.

Namespace for the exact rigid-body-rotation solution.

///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////

Function Documentation

◆ analytical_outer_unit_normal()

void ExactSolution::analytical_outer_unit_normal ( const double t,
const Vector< double > &  x,
double nx,
double ny 
)

Analytical outer unit normal.

165  {
166  double X=x[0];
167  double t0=0.0;
168 
169  t0 = 2.0*Growth_rate*t*t*sin(2.0*X*0.3141592653589793E1)*
170 0.3141592653589793E1/sqrt(1.0+4.0*Growth_rate*Growth_rate*t*t*t*t*pow(sin(2.0*X
171 *0.3141592653589793E1),2.0)*0.3141592653589793E1*0.3141592653589793E1);
172 
173  nx=t0;
174 
175  t0 = 1/(sqrt(1.0+4.0*Growth_rate*Growth_rate*t*t*t*t*pow(sin(2.0*X*
176 0.3141592653589793E1),2.0)*0.3141592653589793E1*0.3141592653589793E1));
177 
178 
179  ny=t0;
180  }
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
EIGEN_DEVICE_FUNC const GlobalUnaryPowReturnType< Derived, ScalarExponent > pow(const Eigen::ArrayBase< Derived > &x, const ScalarExponent &exponent)
Definition: GlobalFunctions.h:137
#define X
Definition: icosphere.cpp:20
double Growth_rate
Growth rate for interface.
Definition: circular_boulder_melt.cc:102
const unsigned nx
Definition: ConstraintElementsUnitTest.cpp:30
const unsigned ny
Definition: ConstraintElementsUnitTest.cpp:31
list x
Definition: plotDoE.py:28
t
Definition: plotPSD.py:36

References Growth_rate, Mesh_Parameters::nx, Mesh_Parameters::ny, Eigen::bfloat16_impl::pow(), sin(), sqrt(), plotPSD::t, plotDoE::x, and X.

Referenced by flux_into_bulk().

◆ flux_into_bulk()

void ExactSolution::flux_into_bulk ( const double t,
const Vector< double > &  x,
const Vector< double > &  n,
const double u,
double flux 
)

Flux into bulk required by the exact solution on a boundary with outer unit normal n. No dependence on temperature u.

190  {
191  double X=x[0];
192  double Y=x[1];
193 
194  //The outer unit normal
195  double Nx = n[0];
196  double Ny = n[1];
197 
198  // Use analytical outer unit normal?
200  {
203  }
204 
205  //The flux in terms of the normal is
206  flux=(2.0*t*t*t*t*Y*Y*Growth_rate*sin(2.0*X*0.3141592653589793E1)*
207 0.3141592653589793E1*cos(2.0*X*0.3141592653589793E1)-2.0*t*t*Y*Y*(Y-1.0+
208 Growth_rate*t*t*(1.0-cos(2.0*X*0.3141592653589793E1)))*sin(2.0*X*
209 0.3141592653589793E1)*0.3141592653589793E1)*Nx+(2.0*t*t*Y*(Y-1.0+Growth_rate*t*
210 t*(1.0-cos(2.0*X*0.3141592653589793E1)))*cos(2.0*X*0.3141592653589793E1)+t*t*Y*
211 Y*cos(2.0*X*0.3141592653589793E1))*Ny;
212 
213  }
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
double melting_surface_height(const double &t, const double &x)
Height of melting surface.
Definition: circular_boulder_melt.cc:156
void analytical_outer_unit_normal(const double &t, const Vector< double > &x, double &nx, double &ny)
Analytical outer unit normal.
Definition: circular_boulder_melt.cc:162
bool Use_analytical_outer_unit_normal
Use analytical outer unit normal when computing fluxes?
Definition: circular_boulder_melt.cc:105
unsigned Nx
Number of elements in each direction (used by SimpleCubicMesh)
Definition: structured_cubic_point_source.cc:114
unsigned Ny
Definition: structured_cubic_point_source.cc:115
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
const char Y
Definition: test/EulerAngles.cpp:32

References analytical_outer_unit_normal(), cos(), ProblemParameters::flux(), Growth_rate, melting_surface_height(), n, GlobalParameters::Nx, GlobalParameters::Ny, sin(), plotPSD::t, Use_analytical_outer_unit_normal, plotDoE::x, X, and Y.

Referenced by MeltContactProblem< ELEMENT >::complete_problem_setup(), and prescribed_flux_for_unsteady_heat_validation().

◆ get_exact_u_for_unsteady_heat_validation() [1/2]

void ExactSolution::get_exact_u_for_unsteady_heat_validation ( const double t,
const Vector< double > &  x,
double u 
)

Exact solution as a scalar.

126  {
127  Vector<double> u_vect(1);
129  u=u_vect[0];
130  }
void get_exact_u_for_unsteady_heat_validation(const double &t, const Vector< double > &x, double &u)
Exact solution as a scalar.
Definition: circular_boulder_melt.cc:123

References plotPSD::t, and plotDoE::x.

◆ get_exact_u_for_unsteady_heat_validation() [2/2]

void ExactSolution::get_exact_u_for_unsteady_heat_validation ( const double t,
const Vector< double > &  x,
Vector< double > &  u 
)

Exact solution as a Vector.

115  {
116  double X=x[0];
117  double Y=x[1];
118  u[0]=U0+t*t*Y*Y*(Y-1.0+Growth_rate*t*t*(1.0-cos(2.0*X*
119 0.3141592653589793E1)))*cos(2.0*X*0.3141592653589793E1);
120  }
double U0
Constant/initial temperature.
Definition: circular_boulder_melt.cc:99

References cos(), Growth_rate, plotPSD::t, U0, plotDoE::x, X, and Y.

Referenced by MeltContactProblem< ELEMENT >::doc_solution(), SolarRadiationProblem< ELEMENT >::doc_solution(), and UnsteadyHeatMeltProblem< ELEMENT >::doc_solution().

◆ get_source_for_unsteady_heat_validation()

void ExactSolution::get_source_for_unsteady_heat_validation ( const double t,
const Vector< double > &  x,
double source 
)

Source function to make it an exact solution.

136  {
137  double X=x[0];
138  double Y=x[1];
139  source = -2.0*t*Y*Y*(Y-1.0+Growth_rate*t*t*(1.0-cos(2.0*X*
140 0.3141592653589793E1)))*cos(2.0*X*0.3141592653589793E1)-2.0*t*t*t*Y*Y*
141 Growth_rate*(1.0-cos(2.0*X*0.3141592653589793E1))*cos(2.0*X*
142 0.3141592653589793E1)+4.0*t*t*t*t*Y*Y*Growth_rate*pow(cos(2.0*X*
143 0.3141592653589793E1),2.0)*0.3141592653589793E1*0.3141592653589793E1-8.0*t*t*t*
144 t*Y*Y*Growth_rate*pow(sin(2.0*X*0.3141592653589793E1),2.0)*0.3141592653589793E1
145 *0.3141592653589793E1-4.0*t*t*Y*Y*(Y-1.0+Growth_rate*t*t*(1.0-cos(2.0*X*
146 0.3141592653589793E1)))*cos(2.0*X*0.3141592653589793E1)*0.3141592653589793E1*
147 0.3141592653589793E1+2.0*t*t*(Y-1.0+Growth_rate*t*t*(1.0-cos(2.0*X*
148 0.3141592653589793E1)))*cos(2.0*X*0.3141592653589793E1)+4.0*t*t*Y*cos(2.0*X*
149 0.3141592653589793E1);
150 
151  }
void source(const Vector< double > &x, Vector< double > &f)
Source function.
Definition: unstructured_two_d_circle.cc:46

References cos(), Growth_rate, Eigen::bfloat16_impl::pow(), sin(), TestProblem::source(), plotPSD::t, plotDoE::x, X, and Y.

Referenced by MeltContactProblem< ELEMENT >::complete_problem_setup(), and UnsteadyHeatMeltProblem< ELEMENT >::complete_problem_setup().

◆ melting_surface_height()

double ExactSolution::melting_surface_height ( const double t,
const double x 
)

Height of melting surface.

157  {
158  return 1.0-Growth_rate*t*t*(1.0-cos(2.0*x*0.3141592653589793E1));
159  }

References cos(), Growth_rate, plotPSD::t, and plotDoE::x.

Referenced by MeltContactProblem< ELEMENT >::doc_solution(), UnsteadyHeatMeltProblem< ELEMENT >::doc_solution(), and flux_into_bulk().

◆ prescribed_flux_for_unsteady_heat_validation()

void ExactSolution::prescribed_flux_for_unsteady_heat_validation ( const double t,
const Vector< double > &  x,
const Vector< double > &  n,
const double u,
double flux 
)

Total flux (into bulk + melt) required by the exact solution on a boundary with outer unit normal n. No dependence on temperature u.

Flux required by the exact solution on a boundary with outer unit normal n. No dependence on temperature u.

224  {
225  double X=x[0];
226 
227  //The flux into bulk
228  flux_into_bulk(t,x,n,u,flux);
229 
230  // Add melt flux
231  double melt_flux=
232  2.0*Growth_rate*t*(1.0-cos(2.0*X*0.3141592653589793E1))/sqrt(1.0+4.0
233 *Growth_rate*Growth_rate*t*t*t*t*pow(sin(2.0*X*0.3141592653589793E1),2.0)*
234 0.3141592653589793E1*0.3141592653589793E1);
235 
237  }
void flux_into_bulk(const double &t, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
Definition: circular_boulder_melt.cc:185
double Omega_cos
Definition: circular_boulder_melt.cc:109
double melt_flux(const double &t)
Definition: stefan_boltzmann_melt.cc:643

References cos(), ProblemParameters::flux(), flux_into_bulk(), Growth_rate, GlobalParameters::melt_flux(), n, Omega_cos, Eigen::bfloat16_impl::pow(), sin(), sqrt(), plotPSD::t, plotDoE::x, and X.

Referenced by MeltContactProblem< ELEMENT >::complete_problem_setup(), and UnsteadyHeatMeltProblem< ELEMENT >::complete_problem_setup().

◆ rigid_body_rotation()

void ExactSolution::rigid_body_rotation ( const Vector< double > &  x,
Vector< double > &  u 
)

The rigid-body rotation solution.

63  {
64  //store r sin(theta)
65  double r_sin_theta = x[0]*sin(x[1]);
66  u[0] = 0.0;
67  u[1] = 0.0;
68  //Only azimuthal velocity
69  u[2] = r_sin_theta;
70  //The pressure is the only part the involves the Reynolds number
71  u[3] = 0.5*Global_Physical_Variables::Re*r_sin_theta*r_sin_theta;
72  }
double Re
Reynolds number.
Definition: fibre.cc:55

References Global_Physical_Variables::Re, sin(), and plotDoE::x.

Referenced by SphericalSteadyRotationProblem< ELEMENT >::parameter_study().

◆ rigid_body_rotation_dr()

void ExactSolution::rigid_body_rotation_dr ( const Vector< double > &  x,
Vector< double > &  u 
)

The r-derivative of the rigid-body rotation solution.

77  {
78  //store sin(theta)
79  double sin_theta = sin(x[1]);
80  u[0] = 0.0;
81  u[1] = 0.0;
82  //Only azimuthal velocity
83  u[2] = sin_theta;
84  //The pressure is the only part the involves the Reynolds number
85  u[3] = Global_Physical_Variables::Re*x[0]*sin_theta*sin_theta;
86  }

References Global_Physical_Variables::Re, sin(), and plotDoE::x.

Referenced by SphericalSteadyRotationProblem< ELEMENT >::parameter_study().

◆ rigid_body_rotation_dtheta()

void ExactSolution::rigid_body_rotation_dtheta ( const Vector< double > &  x,
Vector< double > &  u 
)

The theta-derivative of the rigid-body rotation solution.

92  {
93  //store sin(theta)
94  u[0] = 0.0;
95  u[1] = 0.0;
96  //Only azimuthal velocity
97  u[2] = x[0]*cos(x[1]);
98  //The pressure is the only part the involves the Reynolds number
99  u[3] = Global_Physical_Variables::Re*x[0]*x[0]*sin(x[1])*cos(x[1]);
100  }

References cos(), Global_Physical_Variables::Re, sin(), and plotDoE::x.

Referenced by SphericalSteadyRotationProblem< ELEMENT >::parameter_study().

Variable Documentation

◆ Growth_rate

◆ Omega_cos

double ExactSolution::Omega_cos =0.0

Frequency of co-sinusoidal oscillation of incoming heat flux (to assess suppression of re-freezing). Set to zero for validation.

Referenced by main(), and prescribed_flux_for_unsteady_heat_validation().

◆ U0

◆ Use_analytical_outer_unit_normal

bool ExactSolution::Use_analytical_outer_unit_normal =true

Use analytical outer unit normal when computing fluxes?

Referenced by flux_into_bulk().