ASPECT
dynamic_core.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 - 2024 by the authors of the ASPECT code.
3 
4  This file is part of ASPECT.
5 
6  ASPECT is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2, or (at your option)
9  any later version.
10 
11  ASPECT is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with ASPECT; see the file doc/COPYING. If not see
18  <http://www.gnu.org/licenses/>.
19 */
20 
21 
22 
23 #ifndef _aspect_boundary_temperature_dynamic_core_h
24 #define _aspect_boundary_temperature_dynamic_core_h
25 
28 
29 #include <tuple>
30 
31 namespace aspect
32 {
33  namespace BoundaryTemperature
34  {
35 
39  namespace internal
40  {
41  struct CoreData
42  {
49 
54  double Qs,Qr,Qg,Qk,Ql;
55 
63  double Es,Er,Eg,Ek,El,Eh;
64 
71  double Ri,Ti,Xi;
72 
76  double Q,H;
77 
81  double dt;
82 
87  double dR_dt,dT_dt,dX_dt;
88 
92  double Q_OES;
93 
95  };
96 
101  using SolveTimeStepResult = std::tuple<double, double, double>;
102  }
103 
104 
112  template <int dim>
113  class DynamicCore : public Interface<dim>, public aspect::SimulatorAccess<dim>
114  {
115  public:
120 
125  void
126  update() override;
127 
131  const internal::CoreData &
132  get_core_data() const;
133 
139  bool
140  is_OES_used() const;
141 
152  double
153  boundary_temperature (const types::boundary_id boundary_indicator,
154  const Point<dim> &location) const override;
155 
163  double
164  minimal_temperature (const std::set<types::boundary_id> &fixed_boundary_ids) const override;
165 
173  double
174  maximal_temperature (const std::set<types::boundary_id> &fixed_boundary_ids) const override;
175 
180  static
181  void
183 
188  void
190 
195  template <class Archive>
196  void
197  serialize (Archive &ar, const unsigned int version);
198 
202  void
203  save (std::map<std::string, std::string> &status_strings) const override;
204 
208  void
209  load (const std::map<std::string, std::string> &status_strings) override;
210 
211  private:
212 
218 
225 
231 
237 
242  double init_dT_dt;
243 
248  double init_dR_dt;
249 
254  double init_dX_dt;
255 
260 
264  double Rc;
265 
270  double X_init;
271 
276  double Delta;
277 
282  double P_CMB;
283 
292  double Tm0;
293 
297  double Tm1;
298 
302  double Tm2;
303 
307  double Theta;
308 
313 
318  bool use_bw11;
319 
326  double K0;
327 
332  double Alpha;
333 
338  double Rho_0;
339 
344  double Rho_cen;
345 
350  double Lh;
351 
356  double Rh;
357 
362  double Beta_c;
363 
368  double k_c;
369 
374  double Cp;
375 
381 
386  std::vector<double> heating_rate;
387 
392  std::vector<double> half_life;
393 
398  std::vector<double> initial_concentration;
399 
403  double L;
404  double D;
405 
409  double Mc;
410 
415  unsigned int max_steps;
416 
420  double dTa;
421 
427  std::string name_OES;
429  {
430  double t;
431  double w;
432 
433  template <class Archive>
434  void serialize (Archive &ar, const unsigned int)
435  {
436  ar &t
437  & w;
438  }
439  };
440  std::vector<struct str_data_OES> data_OES;
442  double compute_OES(double t) const;
443 
471 
476  double compute_dT(const double r) const;
477 
482  double compute_Tc(const double r) const;
483 
488  double compute_Ts(const double r) const;
489 
494  double compute_solidus(const double X, const double pressure) const;
495 
500  double compute_initial_Ri(const double T) const;
501 
506  double compute_X(const double r) const;
507 
511  double compute_mass(const double r) const;
512 
516  double fun_Sn(const double B, const double R, const unsigned int n) const;
517 
521  double compute_rho(const double r) const;
522 
527  double compute_T(const double Tc, const double r) const;
528 
532  double compute_pressure(const double r) const;
533 
537  double compute_gravity_potential(const double r) const;
538 
547  std::pair<double,double>
548  compute_specific_heating(const double Tc) const;
549 
557  std::pair<double,double>
558  compute_radio_heating(const double Tc) const;
559 
569  std::pair<double,double>
570  compute_gravity_heating(const double Tc, const double r, const double X) const;
571 
579  std::pair<double,double>
580  compute_adiabatic_heating(const double Tc) const;
581 
590  std::pair<double,double>
591  compute_latent_heating(const double Tc, const double r) const;
592 
597  double
598  compute_heat_solution(const double Tc, const double r, const double X) const;
599 
604 
610 
611  };
612  }
613 }
614 
615 
616 #endif
void parse_parameters(ParameterHandler &prm) override
const internal::CoreData & get_core_data() const
void save(std::map< std::string, std::string > &status_strings) const override
double compute_gravity_potential(const double r) const
double compute_mass(const double r) const
double minimal_temperature(const std::set< types::boundary_id > &fixed_boundary_ids) const override
void load(const std::map< std::string, std::string > &status_strings) override
double compute_initial_Ri(const double T) const
double compute_X(const double r) const
double compute_rho(const double r) const
double compute_pressure(const double r) const
double compute_heat_solution(const double Tc, const double r, const double X) const
double maximal_temperature(const std::set< types::boundary_id > &fixed_boundary_ids) const override
static void declare_parameters(ParameterHandler &prm)
internal::SolveTimeStepResult solve_time_step() const
std::vector< double > initial_concentration
Definition: dynamic_core.h:398
std::pair< double, double > compute_latent_heating(const double Tc, const double r) const
std::pair< double, double > compute_gravity_heating(const double Tc, const double r, const double X) const
double compute_Tc(const double r) const
double compute_dT(const double r) const
double compute_T(const double Tc, const double r) const
double compute_solidus(const double X, const double pressure) const
double boundary_temperature(const types::boundary_id boundary_indicator, const Point< dim > &location) const override
std::pair< double, double > compute_radio_heating(const double Tc) const
double fun_Sn(const double B, const double R, const unsigned int n) const
double compute_Ts(const double r) const
std::pair< double, double > compute_adiabatic_heating(const double Tc) const
void serialize(Archive &ar, const unsigned int version)
std::vector< struct str_data_OES > data_OES
Definition: dynamic_core.h:440
std::pair< double, double > compute_specific_heating(const double Tc) const
std::tuple< double, double, double > SolveTimeStepResult
Definition: dynamic_core.h:101
unsigned int boundary_id
void serialize(Archive &ar, const unsigned int)
Definition: dynamic_core.h:434