ASPECT
|
Classes | |
struct | str_data_OES |
Static Public Member Functions | |
static void | declare_parameters (ParameterHandler &prm) |
Static Public Member Functions inherited from aspect::Plugins::InterfaceBase | |
static void | declare_parameters (ParameterHandler &prm) |
Static Public Member Functions inherited from aspect::SimulatorAccess< dim > | |
static void | get_composition_values_at_q_point (const std::vector< std::vector< double >> &composition_values, const unsigned int q, std::vector< double > &composition_values_at_q_point) |
Private Member Functions | |
void | read_data_OES () |
double | get_OES (double t) const |
bool | solve_time_step (double &X, double &T, double &R) const |
double | get_dT (const double r) const |
double | get_Tc (const double r) const |
double | get_Ts (const double r) const |
double | get_solidus (const double X, const double pressure) const |
double | get_initial_Ri (const double T) const |
double | get_X (const double r) const |
double | get_mass (const double r) const |
double | fun_Sn (const double B, const double R, const unsigned int n) const |
double | get_rho (const double r) const |
double | get_g (const double r) const |
double | get_T (const double Tc, const double r) const |
double | get_pressure (const double r) const |
double | get_gravity_potential (const double r) const |
void | get_specific_heating (const double Tc, double &Qs, double &Es) const |
void | get_radio_heating (const double Tc, double &Qr, double &Er) const |
void | get_gravity_heating (const double Tc, const double r, const double X, double &Qg, double &Eg) const |
void | get_adiabatic_heating (const double Tc, double &Ek, double &Qk) const |
void | get_latent_heating (const double Tc, const double r, double &El, double &Ql) const |
void | get_heat_solution (const double Tc, const double r, const double X, double &Eh) const |
double | get_radioheating_rate () const |
void | update_core_data () |
Private Attributes | |
internal::CoreData | core_data |
double | inner_temperature |
double | outer_temperature |
double | init_dT_dt |
double | init_dR_dt |
double | init_dX_dt |
bool | is_first_call |
double | Rc |
double | CpRho |
double | X_init |
double | Delta |
double | g |
double | P_CMB |
double | P_Core |
double | Tm0 |
double | Tm1 |
double | Tm2 |
double | Theta |
bool | composition_dependency |
bool | use_bw11 |
double | K0 |
double | Alpha |
double | Rho_0 |
double | Rho_cen |
double | Lh |
double | Rh |
double | Beta_c |
double | k_c |
double | Cp |
unsigned int | n_radioheating_elements |
std::vector< double > | heating_rate |
std::vector< double > | half_life |
std::vector< double > | initial_concentration |
double | L |
double | D |
double | Mc |
unsigned int | max_steps |
double | dTa |
std::string | name_OES |
std::vector< struct str_data_OES > | data_OES |
A class that implements a temperature boundary condition for a spherical shell geometry in which the temperature at the outer surfaces are constant and the core-mantle boundaries (CMB) temperature is calculated by core energy balance. The formulation of the core energy balance is from [1] .
Definition at line 98 of file dynamic_core.h.
aspect::BoundaryTemperature::DynamicCore< dim >::DynamicCore | ( | ) |
Constructor
|
overridevirtual |
This function update the core-mantle boundary (CMB) temperature by the core energy balance solver using the core-mantle boundary heat flux.
Reimplemented from aspect::Plugins::InterfaceBase.
const internal::CoreData& aspect::BoundaryTemperature::DynamicCore< dim >::get_core_data | ( | ) | const |
Pass core data to other modules
bool aspect::BoundaryTemperature::DynamicCore< dim >::is_OES_used | ( | ) | const |
Check if other energy source in the core is in use. The 'other energy source' is used for external core energy source. For example if someone want to test the early lunar core powered by precession (Dwyer, C. A., et al. (2011). "A long-lived lunar dynamo driven by continuous mechanical stirring." Nature 479(7372): 212-214.)
|
overridevirtual |
Return the temperature that is to hold at a particular location on the boundary of the domain. This function returns the temperatures at the inner and outer boundaries.
boundary_indicator | The boundary indicator of the part of the boundary of the domain on which the point is located at which we are requesting the temperature. |
location | The location of the point at which we ask for the temperature. |
Implements aspect::BoundaryTemperature::Interface< dim >.
|
overridevirtual |
Return the minimal temperature on that part of the boundary on which Dirichlet conditions are posed.
This value is used in computing dimensionless numbers such as the Nusselt number indicating heat flux.
Implements aspect::BoundaryTemperature::Interface< dim >.
|
overridevirtual |
Return the maximal temperature on that part of the boundary on which Dirichlet conditions are posed.
This value is used in computing dimensionless numbers such as the Nusselt number indicating heat flux.
Implements aspect::BoundaryTemperature::Interface< dim >.
|
static |
Declare the parameters this class takes through input files. This class declares the inner and outer boundary temperatures.
|
overridevirtual |
Read the parameters this class declares from the parameter file.
Reimplemented from aspect::Plugins::InterfaceBase.
|
private |
|
private |
|
private |
Solve core energy balance for each time step. When solving the change in core-mantle boundary temperature T
, inner core radius R
, and light element (e.g. S, O, Si) composition X
, the following relations have to be respected:
The light component composition X depends on inner core radius (See function get_X() ), and core solidus may dependent on X as well. This becomes a small nonlinear problem. Directly iterate through the above three equations doesn't converge well. Alternatively we solve the inner core radius using the bisection method.
At the conditions of the Earth's core, an inner core is forming at the center of the Earth and surrounded by a liquid outer core. However, the core solidus is influenced by light components (e.g. S) and its slope is very close to an adiabat. So there is an alternative scenario that the crystallization happens first at the core mantle boundary instead of at the center, which is called a 'snowing core' (Stewart, A. J., et al. (2007). "Mars: a new core-crystallization regime." Science 316(5829): 1323-1325.). This also provides a valid solution for the solver. The return value of the function is true for a 'normal core', and false for 'snowing core'. TODO: The current code is only able to treat the normal core scenario, treating 'snowing core' scenario may be possible and could be added.
|
private |
Compute the difference between solidus and adiabatic temperature at inner core boundary for a given inner core radius r
.
|
private |
Use energy balance to calculate core mantle boundary temperature with a given inner core radius r
.
|
private |
Get the solidus temperature at inner core boundary with a given inner core radius r
.
|
private |
Compute the core solidus at a given light element concentration X
(in wt.%) and pressure pressure
.
|
private |
Get initial inner core radius with given initial core mantle temperature T
.
|
private |
Get the light element concentration (in wt.%) in the outer core from given inner core radius r
.
|
private |
Compute the core mass inside a certain radius r
.
|
private |
Calculate Sn(B,R), referring to [1] .
|
private |
Calculate density at given radius r
.
|
private |
Calculate gravitational acceleration at given radius r
.
|
private |
Calculate the core temperature at given radius r
and temperature at CMB Tc
.
|
private |
Calculate pressure at given radius r
|
private |
Calculate the gravitational potential at given radius r
|
private |
Calculate energy (Qs
) and entropy (Es
) change rate factor (regarding the core cooling rated Tc/dt) for a given core-mantle boundary (CMB) temperature Tc
|
private |
Calculate energy (Qr
) and entropy (Er
) change rate factor (regarding the radioactive heating rate H) for a given CMB temperature Tc
|
private |
Calculate energy (Qg
) and entropy (Eg
) change rate factor (regarding the inner core growth rate dR/dt) for a given Tc
(CMB temperature), r
(inner core radius), and X
(light element concentration)
|
private |
Calculate energy (Qk
) and entropy (Ek
) change rate factor (regarding the core cooling rate Tc/dt) for a given Tc
(CMB temperature)
|
private |
Calculate energy (Ql
) and entropy (El
) change rate factor (regarding the inner core growth rate dR/dt) for a given Tc
(CMB temperature) and r
(inner core radius)
|
private |
Calculate entropy of heat of solution Eh
for a given Tc
(CMB temperature), r
(inner core radius), and X
(light element concentration)
|
private |
return radiogenic heating rate at the current time
|
private |
Update the data of the core dynamic simulation, the data will be used in the next timestep and for postprocessing.
|
private |
Data for core energy balance it get updated each time step.
Definition at line 182 of file dynamic_core.h.
|
private |
Temperature at the inner boundary.
Definition at line 187 of file dynamic_core.h.
|
private |
Temperatures at the outer boundaries.
Definition at line 192 of file dynamic_core.h.
|
private |
Initial CMB temperature changing rate
Definition at line 197 of file dynamic_core.h.
|
private |
Initial inner core radius changing rate
Definition at line 202 of file dynamic_core.h.
|
private |
Initial light composition changing rate
Definition at line 207 of file dynamic_core.h.
|
private |
Flag for determining the initial call for update().
Definition at line 212 of file dynamic_core.h.
|
private |
Core radius
Definition at line 217 of file dynamic_core.h.
|
private |
(Heat capacity) * density
Definition at line 222 of file dynamic_core.h.
|
private |
Initial light composition concentration
Definition at line 227 of file dynamic_core.h.
|
private |
Partition coefficient of the light element
Definition at line 232 of file dynamic_core.h.
|
private |
Gravitational acceleration
Definition at line 237 of file dynamic_core.h.
|
private |
Pressure at the core mantle boundary
Definition at line 242 of file dynamic_core.h.
|
private |
Pressure at the center of the core
Definition at line 247 of file dynamic_core.h.
|
private |
Parameters for core solidus following: if not dependent on composition Tm(p)= Tm0*(1-Theta)*(1+Tm1*p+Tm2*p^2) if depend on composition X Tm(p)= Tm0*(1-Theta*X)*(1+Tm1*p+Tm2*p^2)
Definition at line 256 of file dynamic_core.h.
|
private |
Definition at line 257 of file dynamic_core.h.
|
private |
Definition at line 258 of file dynamic_core.h.
|
private |
Definition at line 259 of file dynamic_core.h.
|
private |
Definition at line 260 of file dynamic_core.h.
|
private |
If using the Fe-FeS system solidus from Buono & Walker (2011) instead.
Definition at line 265 of file dynamic_core.h.
|
private |
Compressibility at zero pressure
Definition at line 271 of file dynamic_core.h.
|
private |
Thermal expansivity
Definition at line 276 of file dynamic_core.h.
|
private |
Density at zero pressure
Definition at line 281 of file dynamic_core.h.
|
private |
Density at the center of the planet
Definition at line 286 of file dynamic_core.h.
|
private |
Latent heat of fusion
Definition at line 291 of file dynamic_core.h.
|
private |
Heat of reaction
Definition at line 296 of file dynamic_core.h.
|
private |
Compositional expansion coefficient
Definition at line 301 of file dynamic_core.h.
|
private |
Heat conductivity of the core
Definition at line 306 of file dynamic_core.h.
|
private |
Heat capacity
Definition at line 311 of file dynamic_core.h.
|
private |
Number of radioheating element in core
Definition at line 316 of file dynamic_core.h.
|
private |
Heating rates of different elements
Definition at line 321 of file dynamic_core.h.
|
private |
Half life of different elements
Definition at line 326 of file dynamic_core.h.
|
private |
Initial concentration of different elements
Definition at line 331 of file dynamic_core.h.
|
private |
Two length scales in [1] .
Definition at line 336 of file dynamic_core.h.
|
private |
Definition at line 337 of file dynamic_core.h.
|
private |
Mass of the core
Definition at line 342 of file dynamic_core.h.
|
private |
Max iterations for the core energy balance solver.
Definition at line 347 of file dynamic_core.h.
|
private |
Temperature correction value for adiabatic
Definition at line 352 of file dynamic_core.h.
|
private |
Other energy source into the core, e.g. the mechanical stirring of the moon.
Definition at line 357 of file dynamic_core.h.
|
private |
Definition at line 363 of file dynamic_core.h.