[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