ASPECT
dynamic_core.h
Go to the documentation of this file.
1 // ------------------------------------------------------
2 //
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 //
5 // SPDX-FileCopyrightText: Copyright (C) 2011-2026 by the ASPECT authors.
6 //
7 // This file is part of ASPECT.
8 //
9 // Detailed license information governing the source code and
10 // contributions can be found in the folder LICENSES and in
11 // LICENSE and CONTRIBUTING.md at the top level directory.
12 //
13 // ------------------------------------------------------
14 
15 
16 
17 #ifndef _aspect_boundary_temperature_dynamic_core_h
18 #define _aspect_boundary_temperature_dynamic_core_h
19 
22 
23 #include <tuple>
24 
25 namespace aspect
26 {
27  namespace BoundaryTemperature
28  {
29 
33  namespace internal
34  {
35  struct CoreData
36  {
42  CoreData ();
43 
48  double Qs,Qr,Qg,Qk,Ql;
49 
57  double Es,Er,Eg,Ek,El,Eh;
58 
65  double Ri,Ti,Xi;
66 
70  double Q,H;
71 
75  double dt;
76 
81  double dR_dt,dT_dt,dX_dt;
82 
86  double Q_OES;
87 
89  };
90 
95  using SolveTimeStepResult = std::tuple<double, double, double>;
96  }
97 
98 
106  template <int dim>
107  class DynamicCore : public Interface<dim>, public aspect::SimulatorAccess<dim>
108  {
109  public:
113  DynamicCore();
114 
119  void
120  update() override;
121 
125  const internal::CoreData &
126  get_core_data() const;
127 
133  bool
134  is_OES_used() const;
135 
146  double
147  boundary_temperature (const types::boundary_id boundary_indicator,
148  const Point<dim> &location) const override;
149 
157  double
158  minimal_temperature (const std::set<types::boundary_id> &fixed_boundary_ids) const override;
159 
167  double
168  maximal_temperature (const std::set<types::boundary_id> &fixed_boundary_ids) const override;
169 
174  static
175  void
177 
182  void
183  parse_parameters (ParameterHandler &prm) override;
184 
189  template <class Archive>
190  void
191  serialize (Archive &ar, const unsigned int version);
192 
196  void
197  save (std::map<std::string, std::string> &status_strings) const override;
198 
202  void
203  load (const std::map<std::string, std::string> &status_strings) override;
204 
205  private:
206 
212 
219 
225 
231 
236  double init_dT_dt;
237 
242  double init_dR_dt;
243 
248  double init_dX_dt;
249 
254 
258  double Rc;
259 
264  double X_init;
265 
270  double Delta;
271 
276  double P_CMB;
277 
286  double Tm0;
287 
291  double Tm1;
292 
296  double Tm2;
297 
301  double Theta;
302 
307 
312  bool use_bw11;
313 
320  double K0;
321 
326  double Alpha;
327 
332  double Rho_0;
333 
338  double Rho_cen;
339 
344  double Lh;
345 
350  double Rh;
351 
356  double Beta_c;
357 
362  double k_c;
363 
368  double Cp;
369 
375 
380  std::vector<double> heating_rate;
381 
386  std::vector<double> half_life;
387 
392  std::vector<double> initial_concentration;
393 
397  double L;
398  double D;
399 
403  double Mc;
404 
409  unsigned int max_steps;
410 
414  double dTa;
415 
421  std::string name_OES;
423  {
424  double t;
425  double w;
426 
427  template <class Archive>
428  void serialize (Archive &ar, const unsigned int)
429  {
430  ar &t
431  & w;
432  }
433  };
434  std::vector<struct str_data_OES> data_OES;
435  void read_data_OES();
436  double compute_OES(double t) const;
437 
464  internal::SolveTimeStepResult solve_time_step() const;
465 
470  double compute_dT(const double r) const;
471 
476  double compute_Tc(const double r) const;
477 
482  double compute_Ts(const double r) const;
483 
488  double compute_solidus(const double X, const double pressure) const;
489 
494  double compute_initial_Ri(const double T) const;
495 
500  double compute_X(const double r) const;
501 
505  double compute_mass(const double r) const;
506 
510  double fun_Sn(const double B, const double R, const unsigned int n) const;
511 
515  double compute_rho(const double r) const;
516 
521  double compute_T(const double Tc, const double r) const;
522 
526  double compute_pressure(const double r) const;
527 
531  double compute_gravity_potential(const double r) const;
532 
541  std::pair<double,double>
542  compute_specific_heating(const double Tc) const;
543 
551  std::pair<double,double>
552  compute_radio_heating(const double Tc) const;
553 
563  std::pair<double,double>
564  compute_gravity_heating(const double Tc, const double r, const double X) const;
565 
573  std::pair<double,double>
574  compute_adiabatic_heating(const double Tc) const;
575 
584  std::pair<double,double>
585  compute_latent_heating(const double Tc, const double r) const;
586 
591  double
592  compute_heat_solution(const double Tc, const double r, const double X) const;
593 
597  double compute_radioheating_rate() const;
598 
603  void update_core_data();
604 
605  };
606  }
607 }
608 
609 
610 #endif
std::tuple< double, double, double > SolveTimeStepResult
Definition: dynamic_core.h:95
void serialize(Archive &ar, const unsigned int)
Definition: dynamic_core.h:428
std::vector< struct str_data_OES > data_OES
Definition: dynamic_core.h:434
void declare_parameters(ParameterHandler &prm)
std::vector< double > initial_concentration
Definition: dynamic_core.h:392