[cig-commits] [commit] master: Initial mockup of compositional names etc. (3c019bf)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Wed May 21 07:32:24 PDT 2014
Repository : https://github.com/geodynamics/aspect
On branch : master
Link : https://github.com/geodynamics/aspect/compare/497a2179702f669476083a98714879503e0dfa90...6aa7541c733b8fd1cc1b0c74536c8804aaeb7015
>---------------------------------------------------------------
commit 3c019bf2befaddaeacf44c4e7633d4460e0710d2
Author: Wolfgang Bangerth <bangerth at math.tamu.edu>
Date: Tue May 20 15:11:42 2014 -0500
Initial mockup of compositional names etc.
>---------------------------------------------------------------
3c019bf2befaddaeacf44c4e7633d4460e0710d2
include/aspect/introspection.h | 16 ++++++++++++++--
include/aspect/simulator.h | 1 +
source/postprocess/composition_statistics.cc | 12 ++++++------
source/postprocess/visualization.cc | 3 +--
source/simulator/core.cc | 3 ++-
source/simulator/parameters.cc | 12 ++++++++++++
6 files changed, 36 insertions(+), 11 deletions(-)
diff --git a/include/aspect/introspection.h b/include/aspect/introspection.h
index 71365f0..0c879a7 100644
--- a/include/aspect/introspection.h
+++ b/include/aspect/introspection.h
@@ -60,8 +60,8 @@ namespace aspect
* @param split_vel_pressure Set to true if velocity and pressure should
* be in separate blocks.
*/
- Introspection (const unsigned int n_compositional_fields,
- const bool split_vel_pressure);
+ Introspection (const bool split_vel_pressure,
+ const std::vector<std::string> &composition_names);
/**
* @name Things that are independent of the current mesh
@@ -265,6 +265,18 @@ namespace aspect
/**
* @}
*/
+
+ unsigned int
+ compositional_index_for_name (const std::string &name) const;
+
+ std::string
+ name_for_compositional_index (const unsigned int index) const;
+
+ bool
+ compositional_name_exists (const std::string &name) const;
+
+ private:
+ ...;
};
}
diff --git a/include/aspect/simulator.h b/include/aspect/simulator.h
index 5543255..ee02f42 100644
--- a/include/aspect/simulator.h
+++ b/include/aspect/simulator.h
@@ -278,6 +278,7 @@ namespace aspect
* @{
*/
unsigned int n_compositional_fields;
+ std::vector<std::string> names_of_compositional_fields;
std::vector<unsigned int> normalized_fields;
/**
* @}
diff --git a/source/postprocess/composition_statistics.cc b/source/postprocess/composition_statistics.cc
index f981557..406cde8 100644
--- a/source/postprocess/composition_statistics.cc
+++ b/source/postprocess/composition_statistics.cc
@@ -135,11 +135,11 @@ namespace aspect
// finally produce something for the statistics file
for (unsigned int c=0; c<this->n_compositional_fields(); ++c)
{
- statistics.add_value ("Minimal value for composition " + Utilities::int_to_string(c),
+ statistics.add_value ("Minimal value for composition " + this->introspection().name_for_compositional_index(c),
global_min_compositions[c]);
- statistics.add_value ("Maximal value for composition " + Utilities::int_to_string(c),
+ statistics.add_value ("Maximal value for composition " + this->introspection().name_for_compositional_index(c),
global_max_compositions[c]);
- statistics.add_value ("Global mass for composition " + Utilities::int_to_string(c),
+ statistics.add_value ("Global mass for composition " + this->introspection().name_for_compositional_index(c),
global_compositional_integrals[c]);
}
@@ -147,9 +147,9 @@ namespace aspect
// all show up with sufficient accuracy and in scientific notation
for (unsigned int c=0; c<this->n_compositional_fields(); ++c)
{
- const std::string columns[] = { "Minimal value for composition " + Utilities::int_to_string(c),
- "Maximal value for composition " + Utilities::int_to_string(c),
- "Global mass for composition " + Utilities::int_to_string(c)
+ const std::string columns[] = { "Minimal value for composition " + this->introspection().name_for_compositional_index(c),
+ "Maximal value for composition " + this->introspection().name_for_compositional_index(c),
+ "Global mass for composition " + this->introspection().name_for_compositional_index(c)
};
for (unsigned int i=0; i<sizeof(columns)/sizeof(columns[0]); ++i)
{
diff --git a/source/postprocess/visualization.cc b/source/postprocess/visualization.cc
index 22689e8..cb15ca6 100644
--- a/source/postprocess/visualization.cc
+++ b/source/postprocess/visualization.cc
@@ -132,8 +132,7 @@ namespace aspect
solution_names.push_back ("p");
solution_names.push_back ("T");
for (unsigned int c=0; c<this->n_compositional_fields(); ++c)
- solution_names.push_back ("C_" + boost::lexical_cast<std::string>(c+1));
-
+ solution_names.push_back (this->introspection().name_for_compositional_index(c));
std::vector<DataComponentInterpretation::DataComponentInterpretation>
interpretation (dim,
diff --git a/source/simulator/core.cc b/source/simulator/core.cc
index 8a27b31..88408e6 100644
--- a/source/simulator/core.cc
+++ b/source/simulator/core.cc
@@ -85,7 +85,8 @@ namespace aspect
ParameterHandler &prm)
:
parameters (prm),
- introspection (parameters.n_compositional_fields, !parameters.use_direct_stokes_solver),
+ introspection (!parameters.use_direct_stokes_solver,
+ parameters.names_of_compositional_fields),
mpi_communicator (Utilities::MPI::duplicate_communicator (mpi_communicator_)),
pcout (std::cout,
(Utilities::MPI::
diff --git a/source/simulator/parameters.cc b/source/simulator/parameters.cc
index 5cb6726..b90dd0a 100644
--- a/source/simulator/parameters.cc
+++ b/source/simulator/parameters.cc
@@ -526,6 +526,9 @@ namespace aspect
Patterns::Integer (0),
"The number of fields that will be advected along with the flow field, excluding "
"velocity, pressure and temperature.");
+ prm.declare_entry ("Names of fields", "",
+ Patterns::List(Patterns::Anything()),
+ "A user-defined name for each of the compositional fields requested."));
prm.declare_entry ("List of normalized fields", "",
Patterns::List (Patterns::Integer(0)),
"A list of integers smaller than or equal to the number of "
@@ -793,6 +796,15 @@ namespace aspect
prm.enter_subsection ("Compositional fields");
{
n_compositional_fields = prm.get_integer ("Number of fields");
+
+ names_of_compositional_fields = Utilities::split_string_list (prm.get("Names of fields"));
+ AssertThrow ((names_of_compositional_fields.size() == 0) ||
+ (names_of_compositional_fields.size() == n_compositional_fields),
+ ExcMessage ("The length of the list of names for the compositional "
+ "fields needs to either be empty or have length equal to "
+ "the number of compositional fields."));
+//TODO: verify that names can only contain [a-zA-Z][a-zA-Z0-9_]*
+
const std::vector<int> n_normalized_fields = Utilities::string_to_int
(Utilities::split_string_list(prm.get ("List of normalized fields")));
normalized_fields = std::vector<unsigned int> (n_normalized_fields.begin(),
More information about the CIG-COMMITS
mailing list