[cig-commits] r1332 - trunk/aspect/source/material_model
gassmoeller at dealii.org
gassmoeller at dealii.org
Thu Oct 25 08:43:24 PDT 2012
Author: gassmoeller
Date: 2012-10-25 09:43:24 -0600 (Thu, 25 Oct 2012)
New Revision: 1332
Modified:
trunk/aspect/source/material_model/steinberger.cc
Log:
Included multiple compositions in Steinberger material model. Active and passive comp. possible.
Modified: trunk/aspect/source/material_model/steinberger.cc
===================================================================
--- trunk/aspect/source/material_model/steinberger.cc 2012-10-25 15:32:57 UTC (rev 1331)
+++ trunk/aspect/source/material_model/steinberger.cc 2012-10-25 15:43:24 UTC (rev 1332)
@@ -494,13 +494,25 @@
" Fields. This can not be intended."));
double cp = 0.0;
if (!latent_heat)
- for (unsigned i = 0; i < n_material_data; i++)
- cp += compositional_fields[i] * material_lookup[i]->specific_heat(temperature+get_deltat(position),pressure);
+ {
+ if (n_material_data == 1)
+ cp = material_lookup[0]->specific_heat(temperature+get_deltat(position),pressure);
+ else
+ {
+ for (unsigned i = 0; i < n_material_data; i++)
+ cp += compositional_fields[i] * material_lookup[i]->specific_heat(temperature+get_deltat(position),pressure);
+ }
+ }
else
{
- for (unsigned i = 0; i < n_material_data; i++)
- cp += compositional_fields[i] * material_lookup[0]->dHdT(temperature+get_deltat(position),pressure);
- cp = std::max(std::min(cp,6000.0),500.0);
+ if (n_material_data == 1)
+ cp = material_lookup[0]->dHdT(temperature+get_deltat(position),pressure);
+ else
+ {
+ for (unsigned i = 0; i < n_material_data; i++)
+ cp += compositional_fields[i] * material_lookup[i]->dHdT(temperature+get_deltat(position),pressure);
+ cp = std::max(std::min(cp,6000.0),500.0);
+ }
}
return cp;
}
@@ -527,12 +539,17 @@
const std::vector<double> &compositional_fields,
const Point<dim> &position) const
{
- Assert (n_material_data <= compositional_fields.size(),
+ Assert ((n_material_data <= compositional_fields.size()) || (n_material_data == 1),
ExcMessage("There are more material files provided than compositional"
" Fields. This can not be intended."));
double rho = 0.0;
- for (unsigned i = 0; i < n_material_data; i++)
- rho += compositional_fields[i] * material_lookup[i]->density(temperature+get_deltat(position),pressure);
+ if (n_material_data == 1)
+ rho = material_lookup[0]->density(temperature+get_deltat(position),pressure);
+ else
+ {
+ for (unsigned i = 0; i < n_material_data; i++)
+ rho += compositional_fields[i] * material_lookup[i]->density(temperature+get_deltat(position),pressure);
+ }
return rho;
}
@@ -544,18 +561,30 @@
const std::vector<double> &compositional_fields,
const Point<dim> &position) const
{
- Assert (n_material_data <= compositional_fields.size(),
+ Assert ((n_material_data <= compositional_fields.size()) || (n_material_data == 1),
ExcMessage("There are more material files provided than compositional"
" Fields. This can not be intended."));
double alpha = 0.0;
if (!latent_heat)
- for (unsigned i = 0; i < n_material_data; i++)
- alpha += compositional_fields[i] * material_lookup[i]->thermal_expansivity(temperature+get_deltat(position),pressure);
+ {
+ if (n_material_data == 1)
+ alpha = material_lookup[0]->thermal_expansivity(temperature+get_deltat(position),pressure);
+ else
+ {
+ for (unsigned i = 0; i < n_material_data; i++)
+ alpha += compositional_fields[i] * material_lookup[i]->thermal_expansivity(temperature+get_deltat(position),pressure);
+ }
+ }
else
{
double dHdp = 0.0;
- for (unsigned i = 0; i < n_material_data; i++)
- dHdp += material_lookup[i]->dHdp(temperature+get_deltat(position),pressure);
+ if (n_material_data == 1)
+ dHdp += material_lookup[0]->dHdp(temperature+get_deltat(position),pressure);
+ else
+ {
+ for (unsigned i = 0; i < n_material_data; i++)
+ dHdp += compositional_fields[i] * material_lookup[i]->dHdp(temperature+get_deltat(position),pressure);
+ }
alpha = (1 - density(temperature,pressure,compositional_fields,position) * dHdp) / temperature;
alpha = std::max(std::min(alpha,1e-3),1e-5);
}
@@ -570,12 +599,17 @@
const std::vector<double> &compositional_fields,
const Point<dim> &position) const
{
- Assert (n_material_data <= compositional_fields.size(),
+ Assert ((n_material_data <= compositional_fields.size()) || (n_material_data == 1),
ExcMessage("There are more material files provided than compositional"
" Fields. This can not be intended."));
double vp = 0.0;
- for (unsigned i = 0; i < n_material_data; i++)
+ if (n_material_data == 1)
vp += material_lookup[0]->seismic_Vp(temperature+get_deltat(position),pressure);
+ else
+ {
+ for (unsigned i = 0; i < n_material_data; i++)
+ vp += compositional_fields[i] * material_lookup[i]->seismic_Vp(temperature+get_deltat(position),pressure);
+ }
return vp;
}
@@ -587,12 +621,17 @@
const std::vector<double> &compositional_fields,
const Point<dim> &position) const
{
- Assert (n_material_data <= compositional_fields.size(),
+ Assert ((n_material_data <= compositional_fields.size()) || (n_material_data == 1),
ExcMessage("There are more material files provided than compositional"
" Fields. This can not be intended."));
double vs = 0.0;
- for (unsigned i = 0; i < n_material_data; i++)
- vs += material_lookup[i]->seismic_Vs(temperature+get_deltat(position),pressure);
+ if (n_material_data == 1)
+ vs += material_lookup[0]->seismic_Vs(temperature+get_deltat(position),pressure);
+ else
+ {
+ for (unsigned i = 0; i < n_material_data; i++)
+ vs += compositional_fields[i] * material_lookup[i]->seismic_Vs(temperature+get_deltat(position),pressure);
+ }
return vs;
}
More information about the CIG-COMMITS
mailing list