Skip to content

Commit 64bcaae

Browse files
committed
Add compressible EOS option to visco plastic
1 parent 1728e53 commit 64bcaae

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

include/aspect/material_model/visco_plastic.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <aspect/simulator_access.h>
2525
#include <aspect/material_model/interface.h>
2626
#include <aspect/material_model/equation_of_state/multicomponent_incompressible.h>
27+
#include <aspect/material_model/equation_of_state/multicomponent_compressible.h>
2728
#include <aspect/material_model/rheology/visco_plastic.h>
2829

2930
#include<deal.II/fe/component_mask.h>
@@ -258,7 +259,17 @@ namespace aspect
258259
/**
259260
* Object for computing the equation of state.
260261
*/
261-
EquationOfState::MulticomponentIncompressible<dim> equation_of_state;
262+
EquationOfState::MulticomponentIncompressible<dim> equation_of_state_incompressible;
263+
264+
/**
265+
* Object for computing the equation of state.
266+
*/
267+
EquationOfState::MulticomponentCompressible<dim> equation_of_state_compressible;
268+
269+
/**
270+
* Whether to use a compressible or incompressible equation of state.
271+
*/
272+
bool use_compressible_equation_of_state;
262273

263274
/**
264275
* Object that handles phase transitions.

source/material_model/visco_plastic.cc

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ namespace aspect
6868
else
6969
{
7070
EquationOfStateOutputs<dim> eos_outputs_all_phases (n_phases);
71-
equation_of_state.evaluate(in, 0, eos_outputs_all_phases);
71+
equation_of_state_incompressible.evaluate(in, 0, eos_outputs_all_phases);
7272
reference_density = eos_outputs_all_phases.densities[0];
7373
}
7474

@@ -121,7 +121,7 @@ namespace aspect
121121
for (unsigned int i=0; i < in.n_evaluation_points(); ++i)
122122
{
123123
// First compute the equation of state variables and thermodynamic properties
124-
equation_of_state.evaluate(in, i, eos_outputs_all_phases);
124+
equation_of_state_incompressible.evaluate(in, i, eos_outputs_all_phases);
125125

126126
const double gravity_norm = this->get_gravity_model().gravity_vector(in.position[i]).norm();
127127
const double reference_density = (this->get_adiabatic_conditions().is_initialized())
@@ -308,7 +308,7 @@ namespace aspect
308308
ViscoPlastic<dim>::
309309
is_compressible () const
310310
{
311-
return equation_of_state.is_compressible();
311+
return equation_of_state_incompressible.is_compressible();
312312
}
313313

314314

@@ -342,6 +342,15 @@ namespace aspect
342342

343343
EquationOfState::MulticomponentIncompressible<dim>::declare_parameters (prm);
344344

345+
EquationOfState::MulticomponentCompressible<dim>::declare_parameters (prm);
346+
347+
prm.declare_entry ("Use compressible equation of state","false",
348+
Patterns::Bool (),
349+
"Whether to use an incompressible or compressible equation of state. "
350+
"If set to true, the material model will switch from using the "
351+
"multicomponent incompressible multicomponent compressible equation "
352+
"of state model. ");
353+
345354
Rheology::ViscoPlastic<dim>::declare_parameters(prm);
346355

347356
// Equation of state parameters
@@ -389,9 +398,26 @@ namespace aspect
389398
n_phases = phase_function.n_phases_over_all_chemical_compositions();
390399

391400
// Equation of state parameters
392-
equation_of_state.initialize_simulator (this->get_simulator());
393-
equation_of_state.parse_parameters (prm,
394-
std::make_unique<std::vector<unsigned int>>(n_phases_for_each_chemical_composition));
401+
use_compressible_equation_of_state = prm.get_bool ("Use compressible equation of state");
402+
if (use_compressible_equation_of_state == false)
403+
{
404+
equation_of_state_incompressible.initialize_simulator (this->get_simulator());
405+
equation_of_state_incompressible.parse_parameters (prm,
406+
std::make_unique<std::vector<unsigned int>>(n_phases_for_each_chemical_composition));
407+
}
408+
else
409+
{
410+
prm.enter_subsection ("Equation of State");
411+
{
412+
prm.enter_subsection ("Multicomponent Compressible");
413+
{
414+
equation_of_state_compressible.initialize_simulator (this->get_simulator());
415+
equation_of_state_compressible.parse_parameters (prm);
416+
}
417+
prm.leave_subsection();
418+
}
419+
prm.leave_subsection();
420+
}
395421

396422
// Make options file for parsing maps to double arrays
397423
std::vector<std::string> chemical_field_names = this->introspection().chemical_composition_field_names();

0 commit comments

Comments
 (0)