[cig-commits] commit 1927 by buerg to /var/svn/dealii/aspect

dealii.demon at gmail.com dealii.demon at gmail.com
Mon Sep 30 10:28:16 PDT 2013


Revision 1927

Add function for chemical reaction.

U   trunk/aspire/include/aspect/simulator.h
U   trunk/aspire/source/simulator/assembly.cc
U   trunk/aspire/source/simulator/core.cc


http://www.dealii.org/websvn/revision.php?repname=Aspect+Repository&path=%2F&rev=1927&peg=1927

Diff:
Modified: trunk/aspire/include/aspect/simulator.h
===================================================================
--- trunk/aspire/include/aspect/simulator.h	2013-09-30 15:31:12 UTC (rev 1926)
+++ trunk/aspire/include/aspect/simulator.h	2013-09-30 17:27:47 UTC (rev 1927)
@@ -397,6 +397,11 @@
        */
       void build_composition_preconditioner (const unsigned int c,
                                              std_cxx1x::shared_ptr<aspect::LinearAlgebra::PreconditionBase> &preconditioner);
+      
+      /**
+       * Perform chemical reactions for the length of half a time step.
+       */
+      void advance_chemistry ();
 
       /**
        * Initiate the assembly of the Stokes matrix and right hand side.
@@ -786,6 +791,24 @@
                                            typename MaterialModel::Interface<dim>::MaterialModelInputs &material_model_inputs) const;
 
       /**
+       * Extract the values of temperature, pressure, and composition
+       * for the current linearization point. These values are stored
+       * as input arguments for the material model. The compositional
+       * fields are extracted with the individual compositional fields
+       * as outer vectors and the values at each quadrature point as inner
+       * vectors, but the material model needs it the other way round.
+       * Hence, this vector of vectors is transposed.
+       *
+       * This function is implemented in
+       * <code>source/simulator/assembly.cc</code>.
+       */
+      void
+      compute_material_model_input_values (const TrilinosWrappers::MPI::Vector                         &input_solution_temperature,
+                                           const TrilinosWrappers::MPI::BlockVector                    &input_solution_composition,
+                                           const IndexSet                                              &input_owned_dofs,
+                                           typename MaterialModel::Interface<dim>::MaterialModelInputs &material_model_inputs) const;
+
+      /**
        * Generate and output some statistics like timing information and memory consumption.
        * Whether this function does anything or not is controlled through the
        * variable aspect::output_parallel_statistics.

Modified: trunk/aspire/source/simulator/assembly.cc
===================================================================
--- trunk/aspire/source/simulator/assembly.cc	2013-09-30 15:31:12 UTC (rev 1926)
+++ trunk/aspire/source/simulator/assembly.cc	2013-09-30 17:27:47 UTC (rev 1927)
@@ -686,7 +686,7 @@
                                        const FEValues<dim>                                         &input_fe_values_composition,
                                        typename MaterialModel::Interface<dim>::MaterialModelInputs &material_model_inputs) const
   {
-    unsigned int n_q_points = material_model_inputs.temperature.size();
+    const unsigned int n_q_points = material_model_inputs.temperature.size ();
     for (unsigned int q=0; q<n_q_points; ++q)
       material_model_inputs.position[q] = input_fe_values_velocity.quadrature_point(q);
 
@@ -711,6 +711,26 @@
       for (unsigned int c=0; c<parameters.n_compositional_fields; ++c)
         material_model_inputs.composition[q][c] = composition_values[c][q];
   }
+  
+  
+  template <int dim>
+  void
+  Simulator<dim>::
+  compute_material_model_input_values (const TrilinosWrappers::MPI::Vector                         &input_solution_temperature,
+                                       const TrilinosWrappers::MPI::BlockVector                    &input_solution_composition,
+                                       const IndexSet                                              &input_owned_dofs,
+                                       typename MaterialModel::Interface<dim>::MaterialModelInputs &material_model_inputs) const
+  {
+    for (unsigned int q = 0; q < material_model_inputs.temperature.size (); ++q)
+    {
+      const types::global_dof_index dof = input_owned_dofs.nth_index_in_set (q);
+      
+      material_model_inputs.temperature[q] = input_solution_temperature (dof);
+      
+      for (unsigned int c = 0; c < parameters.n_compositional_fields; ++c)
+        material_model_inputs.composition[q][c] = input_solution_composition.block (c) (dof);
+    }
+  }
 
 
   template <int dim>
@@ -1299,6 +1319,25 @@
 
     computing_timer.exit_section();
   }
+  
+
+  template <int dim>
+  void
+  Simulator<dim>::advance_chemistry ()
+  {
+    computing_timer.enter_section ("  Perform chemical reactions");
+    
+    const IndexSet& locally_owned_dofs = dof_handler_composition.locally_owned_dofs ();
+    typename MaterialModel::Interface<dim>::MaterialModelInputs material_model_inputs (locally_owned_dofs.n_elements (),
+                                                                                       parameters.n_compositional_fields);
+    
+    compute_material_model_input_values (current_linearization_point_temperature,
+                                         current_linearization_point_composition,
+                                         locally_owned_dofs,
+                                         material_model_inputs);
+    
+    computing_timer.exit_section ();
+  }
 }
 
 
@@ -1338,6 +1377,7 @@
   template void Simulator<dim>::copy_local_to_global_composition_systems (const internal::Assembly::CopyData::CompositionSystem<dim> &data); \
   template void Simulator<dim>::assemble_temperature_system (); \
   template void Simulator<dim>::assemble_composition_systems (); \
+  template void Simulator<dim>::advance_chemistry (); \
    
 
 

Modified: trunk/aspire/source/simulator/core.cc
===================================================================
--- trunk/aspire/source/simulator/core.cc	2013-09-30 15:31:12 UTC (rev 1926)
+++ trunk/aspire/source/simulator/core.cc	2013-09-30 17:27:47 UTC (rev 1927)
@@ -1038,6 +1038,7 @@
           build_temperature_preconditioner (T_preconditioner);
           solve_temperature ();
           current_linearization_point_temperature = solution_temperature;
+          advance_chemistry ();
           assemble_composition_systems ();
 
           for (unsigned int c = 0; c < parameters.n_compositional_fields; ++c)
@@ -1047,6 +1048,7 @@
               current_linearization_point_composition.block (c) = solution_composition.block (c);
             }
 
+          advance_chemistry ();
           break;
         }
         


More information about the CIG-COMMITS mailing list