[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