[cig-commits] [commit] master: Simplify compute_volume_fractions (39d9774)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Mon May 19 15:14:01 PDT 2014


Repository : https://github.com/geodynamics/aspect

On branch  : master
Link       : https://github.com/geodynamics/aspect/compare/ed4caebc0ab942d8c7bc1a6a3ba70e37f93accde...dbe66e1b6d25d5ff21653c48f14f343e10ae69f4

>---------------------------------------------------------------

commit 39d9774d0e927a21d4dfa4033824a191e1e301b9
Author: ian-r-rose <ian.r.rose at gmail.com>
Date:   Mon May 19 16:26:27 2014 -0500

    Simplify compute_volume_fractions


>---------------------------------------------------------------

39d9774d0e927a21d4dfa4033824a191e1e301b9
 include/aspect/material_model/multicomponent.h |  4 ++--
 source/material_model/multicomponent.cc        | 32 +++++++++++---------------
 2 files changed, 15 insertions(+), 21 deletions(-)

diff --git a/include/aspect/material_model/multicomponent.h b/include/aspect/material_model/multicomponent.h
index 2ba26fe..eca37d9 100644
--- a/include/aspect/material_model/multicomponent.h
+++ b/include/aspect/material_model/multicomponent.h
@@ -170,8 +170,8 @@ namespace aspect
          * difference between the sum of the compositional fields and 1.0 is assumed to
          * be the amount of background mantle.
          */
-        void compute_volume_fractions( const std::vector<double> &compositional_fields, 
-                                             std::vector<double> &fractions) const;
+        const std::vector<double> compute_volume_fractions( 
+                                    const std::vector<double> &compositional_fields) const;
         /**
          * Reference temperature for thermal expansion.  All components use the same reference_T.
          */ 
diff --git a/source/material_model/multicomponent.cc b/source/material_model/multicomponent.cc
index ec261a3..09679a1 100644
--- a/source/material_model/multicomponent.cc
+++ b/source/material_model/multicomponent.cc
@@ -33,13 +33,11 @@ namespace aspect
   {
 
     template <int dim>
-    void
+    const std::vector<double>
     Multicomponent<dim>::
-    compute_volume_fractions( const std::vector<double> &compositional_fields, 
-                                    std::vector<double> &fractions) const
+    compute_volume_fractions( const std::vector<double> &compositional_fields) const
     {
-      Assert( compositional_fields.size()+1 == fractions.size(), 
-              ExcMessage("Size mismatch") );
+       std::vector<double> volume_fractions( compositional_fields.size()+1);
 
       //clip the compositional fields so they are between zero and one
       std::vector<double> x_comp = compositional_fields;
@@ -53,16 +51,17 @@ namespace aspect
       
       if(sum_composition >= 1.0)
         {
-          fractions[0] = 0.0;  //background mantle
+          volume_fractions[0] = 0.0;  //background mantle
           for ( unsigned int i=1; i <= x_comp.size(); ++i)
-            fractions[i] = x_comp[i-1]/sum_composition;
+            volume_fractions[i] = x_comp[i-1]/sum_composition;
         }
       else
         {
-          fractions[0] = 1.0 - sum_composition; //background mantle
+          volume_fractions[0] = 1.0 - sum_composition; //background mantle
           for ( unsigned int i=1; i <= x_comp.size(); ++i)
-            fractions[i] = x_comp[i-1];
+            volume_fractions[i] = x_comp[i-1];
         }
+      return volume_fractions;
     }    
           
     
@@ -77,8 +76,7 @@ namespace aspect
                const Point<dim> &p) const
     {
       double visc = 0.0;
-      std::vector<double> volume_fractions(this->n_compositional_fields() + 1);
-      compute_volume_fractions( composition, volume_fractions);
+      std::vector<double> volume_fractions = compute_volume_fractions(composition);
 
       switch (viscosity_averaging)
         {
@@ -156,8 +154,7 @@ namespace aspect
       double cp = 0.0;
 
       //Arithmetic averaging of specific heats
-      std::vector<double> volume_fractions(this->n_compositional_fields() + 1);
-      compute_volume_fractions( composition, volume_fractions);
+      std::vector<double> volume_fractions = compute_volume_fractions(composition);
       for(unsigned int i=0; i< volume_fractions.size(); ++i)
         cp += volume_fractions[i]*specific_heats[i];
   
@@ -186,8 +183,7 @@ namespace aspect
       //This may not be strictly the most reasonable thing,
       //but for most Earth materials we hope that they do
       //not vary so much that it is a big problem.
-      std::vector<double> volume_fractions(this->n_compositional_fields() + 1);
-      compute_volume_fractions( composition, volume_fractions);
+      std::vector<double> volume_fractions = compute_volume_fractions(composition);
       for(unsigned int i=0; i< volume_fractions.size(); ++i)
         k += volume_fractions[i]*thermal_conductivities[i];
 
@@ -213,8 +209,7 @@ namespace aspect
       double rho = 0.0;
 
       //Arithmetic averaging of densities
-      std::vector<double> volume_fractions(this->n_compositional_fields() + 1);
-      compute_volume_fractions( composition, volume_fractions);
+      std::vector<double> volume_fractions = compute_volume_fractions(composition);
       for(unsigned int i=0; i< volume_fractions.size(); ++i)
       {
         //not strictly correct if thermal expansivities are different, since we are interpreting
@@ -238,8 +233,7 @@ namespace aspect
       double alpha = 0.0;
 
       //Arithmetic averaging of thermal expansivities
-      std::vector<double> volume_fractions(this->n_compositional_fields() + 1);
-      compute_volume_fractions( composition, volume_fractions);
+      std::vector<double> volume_fractions = compute_volume_fractions(composition);
       for(unsigned int i=0; i< volume_fractions.size(); ++i)
         alpha += volume_fractions[i]*thermal_expansivities[i];
 



More information about the CIG-COMMITS mailing list