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) |
double | get_dT (double r) const |
double | get_Tc (double r) const |
double | get_Ts (double r) const |
double | get_solidus (double X, double p) const |
double | get_initial_Ri (double T) |
double | get_X (double r) const |
double | get_Mass (double r) const |
double | fun_Sn (double B, double R, double n) const |
double | get_Rho (double r) const |
double | get_g (double r) const |
double | get_T (double Tc, double r) const |
double | get_Pressure (double r) const |
double | get_gravity_potential (double r) const |
void | get_specific_heating (double Tc, double &Qs, double &Es) |
void | get_radio_heating (double Tc, double &Qr, double &Er) |
void | get_gravity_heating (double Tc, double r, double X, double &Qg, double &Eg) |
void | get_adiabatic_heating (double Tc, double &Ek, double &Qk) |
void | get_latent_heating (double Tc, double r, double &El, double &Ql) |
void | get_heat_solution (double Tc, double r, double X, double &Eh) |
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 |
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 |
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.
|
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.)
|
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 component (e.g. S, O, Si) composition X, the following relations has 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 by bisection method. A single solution between fully liquid and fully solid core is expected. Otherwise this function will throw exception and terminate.
At Earth core condition, a 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 closed to core adiabatic. 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. So the returning bool is set to true for normal core, and false for 'snowing core'. TODO: The current code is only able to treat normal core scenario, treating 'snowing core' scenario may be possible and could be added.
|
private |
Compute the difference between solidus and adiabatic at inner core boundary for a given inner core radius.
|
private |
Use energy balance to calculate core mantle boundary temperature with a given inner core radius.
|
private |
Get the solidus temperature at inner core boundary with a given inner core radius.
|
private |
Compute the core solidus at certain pressure
|
private |
Get initial inner core radius with given initial core mantle temperature.
|
private |
Get the light composition concentration in the outer core from given inner core radius r
|
private |
Compute the mass inside certain radius within the core_data.
|
private |
Calculate Sn(B,R), referring to [1] .
|
private |
Calculate density at given r
|
private |
Calculate gravitational acceleration at given r
|
private |
Calculate the core temperature at given r Tc is the temperature at CMB
|
private |
Calculate pressure at given r
|
private |
Calculate the gravitational potential at given r
|
private |
Calculate energy and entropy change rate factor (regarding the core cooling rated Tc/dt) Qs and Es with given core-mantle boundary (CMB) temperature Tc
|
private |
Calculate energy and entropy change rate factor (regarding the radioactive heating rate H) Qr and Er with given CMB temperature Tc
|
private |
Calculate energy and entropy change rate factor (regarding the inner core growth rate dR/dt) Qg and Eg with given Tc(CMB temperature), r(inner core radius), X(light composition concentration)
|
private |
Calculate energy and entropy change rate factor (regarding the core cooling rate Tc/dt) Qk and Ek with given Tc(CMB temperature)
|
private |
Calculate energy and entropy change rate factor (regarding the inner core growth rate dR/dt) Ql and El with given Tc(CMB temperature), r(inner core radius)
|
private |
Calculate entropy of heat of solution Eh
|
private |
return radio heating rate at certain time
|
private |
Update the data for core dynamic simulation, the data will be used in the next timestep and for postprocess.
|
private |
Data for core energy balance it get updated each time step.
Definition at line 179 of file dynamic_core.h.
|
private |
Temperature at the inner boundary.
Definition at line 184 of file dynamic_core.h.
|
private |
Temperatures at the outer boundaries.
Definition at line 189 of file dynamic_core.h.
|
private |
Initial CMB temperature changing rate
Definition at line 194 of file dynamic_core.h.
|
private |
Initial inner core radius changing rate
Definition at line 199 of file dynamic_core.h.
|
private |
Initial light composition changing rate
Definition at line 204 of file dynamic_core.h.
|
private |
Flag for determining the initial call for update().
Definition at line 209 of file dynamic_core.h.
|
private |
Core radius
Definition at line 214 of file dynamic_core.h.
|
private |
(Heat capacity) * density
Definition at line 219 of file dynamic_core.h.
|
private |
Initial light composition concentration
Definition at line 224 of file dynamic_core.h.
|
private |
Partition coefficient of the light element
Definition at line 229 of file dynamic_core.h.
|
private |
Gravitational acceleration
Definition at line 234 of file dynamic_core.h.
|
private |
Pressure at the core mantle boundary
Definition at line 239 of file dynamic_core.h.
|
private |
Pressure at the center of the core
Definition at line 244 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 253 of file dynamic_core.h.
|
private |
Definition at line 254 of file dynamic_core.h.
|
private |
Definition at line 255 of file dynamic_core.h.
|
private |
Definition at line 256 of file dynamic_core.h.
|
private |
Definition at line 257 of file dynamic_core.h.
|
private |
If using the Fe-FeS system solidus from Buono & Walker (2011) instead.
Definition at line 262 of file dynamic_core.h.
|
private |
Compressibility at zero pressure
Definition at line 268 of file dynamic_core.h.
|
private |
Thermal expansivity
Definition at line 273 of file dynamic_core.h.
|
private |
Density at zero pressure
Definition at line 278 of file dynamic_core.h.
|
private |
Density at the center of the planet
Definition at line 283 of file dynamic_core.h.
|
private |
Latent heat of fusion
Definition at line 288 of file dynamic_core.h.
|
private |
Heat of reaction
Definition at line 293 of file dynamic_core.h.
|
private |
Compositional expansion coefficient
Definition at line 298 of file dynamic_core.h.
|
private |
Heat conductivity of the core
Definition at line 303 of file dynamic_core.h.
|
private |
Heat capacity
Definition at line 308 of file dynamic_core.h.
|
private |
Number of radioheating element in core
Definition at line 313 of file dynamic_core.h.
|
private |
Heating rates of different elements
Definition at line 318 of file dynamic_core.h.
|
private |
Half life of different elements
Definition at line 323 of file dynamic_core.h.
|
private |
Initial concentration of different elements
Definition at line 328 of file dynamic_core.h.
|
private |
Two length scales in [1] .
Definition at line 333 of file dynamic_core.h.
|
private |
Definition at line 334 of file dynamic_core.h.
|
private |
Mass of the core
Definition at line 339 of file dynamic_core.h.
|
private |
Max iterations for the core energy balance solver.
Definition at line 344 of file dynamic_core.h.
|
private |
Temperature correction value for adiabatic
Definition at line 349 of file dynamic_core.h.
|
private |
Other energy source into the core, e.g. the mechanical stirring of the moon.
Definition at line 354 of file dynamic_core.h.
|
private |
Definition at line 360 of file dynamic_core.h.