[cig-commits] commit 2029 by buerg to /var/svn/dealii/aspect
dealii.demon at gmail.com
dealii.demon at gmail.com
Thu Nov 21 09:32:03 PST 2013
Revision 2029
Add r2013.
U trunk/aspire/include/aspect/simulator.h
U trunk/aspire/source/simulator/assembly.cc
U trunk/aspire/source/simulator/core.cc
U trunk/aspire/source/simulator/helper_functions.cc
http://www.dealii.org/websvn/revision.php?repname=Aspect+Repository&path=%2F&rev=2029&peg=2029
Diff:
Modified: trunk/aspire/include/aspect/simulator.h
===================================================================
--- trunk/aspire/include/aspect/simulator.h 2013-11-21 15:13:26 UTC (rev 2028)
+++ trunk/aspire/include/aspect/simulator.h 2013-11-21 17:31:33 UTC (rev 2029)
@@ -242,7 +242,7 @@
*/
/**
- * @name Parameters that have to do with compositional field
+ * @name Parameters that have to do with compositional fields
* @{
*/
unsigned int n_compositional_fields;
@@ -953,7 +953,7 @@
double global_Omega_diameter;
double global_volume;
- MeshRefinement::Manager<dim> mesh_refinement_manager;
+ MeshRefinement::Manager<dim> mesh_refinement_manager;
const MappingQ<dim> mapping;
@@ -968,9 +968,21 @@
ConstraintMatrix current_constraints_velocity;
std::vector<ConstraintMatrix> current_constraints_composition;
+ /**
+ * The latest correction computed by normalize_pressure (). We store this so
+ * we can undo the correction in denormalize_pressure ().
+ */
double pressure_adjustment;
/**
+ * A variable that determines whether we need to do the correction of
+ * the Stokes right hand side vector to ensure that the average divergence
+ * is zero. This is necessary for compressible models, but only if there
+ * are no in/outflow boundaries.
+ */
+ bool do_pressure_rhs_compatibility_modification;
+
+ /**
* @}
*/
Modified: trunk/aspire/source/simulator/assembly.cc
===================================================================
--- trunk/aspire/source/simulator/assembly.cc 2013-11-21 15:13:26 UTC (rev 2028)
+++ trunk/aspire/source/simulator/assembly.cc 2013-11-21 17:31:33 UTC (rev 2029)
@@ -401,7 +401,8 @@
template <int dim>
struct StokesSystem : public StokesPreconditioner<dim>
{
- StokesSystem (const FiniteElement<dim> &finite_element);
+ StokesSystem (const FiniteElement<dim> &finite_element,
+ const bool do_pressure_rhs_compatibility_modification);
StokesSystem (const StokesSystem<dim> &data);
Vector<double> local_rhs;
@@ -412,11 +413,13 @@
template <int dim>
StokesSystem<dim>::
- StokesSystem (const FiniteElement<dim> &finite_element)
+ StokesSystem (const FiniteElement<dim> &finite_element,
+ const bool do_pressure_rhs_compatibility_modification)
:
StokesPreconditioner<dim> (finite_element),
local_rhs (finite_element.dofs_per_cell),
- local_pressure_shape_function_integrals (finite_element.dofs_per_cell)
+ local_pressure_shape_function_integrals (do_pressure_rhs_compatibility_modification ?
+ finite_element.dofs_per_cell : 0)
{}
@@ -427,7 +430,7 @@
:
StokesPreconditioner<dim> (data),
local_rhs (data.local_rhs),
- local_pressure_shape_function_integrals (data.local_pressure_shape_function_integrals)
+ local_pressure_shape_function_integrals (data.local_pressure_shape_function_integrals.size ())
{}
@@ -927,7 +930,7 @@
data.local_matrix = 0;
data.local_rhs = 0;
- if (material_model->is_compressible())
+ if (do_pressure_rhs_compatibility_modification)
data.local_pressure_shape_function_integrals = 0;
compute_material_model_input_values (current_linearization_point_velocity,
@@ -1001,10 +1004,10 @@
* scratch.fe_values_velocity.JxW (q);
if (material_model->is_compressible ())
- {
data.local_rhs (i) += right_hand_side * scratch.phi_p[i];
+
+ if (do_pressure_rhs_compatibility_modification)
data.local_pressure_shape_function_integrals (i) += scratch.phi_p[i] * scratch.fe_values_velocity.JxW(q);
- }
}
}
@@ -1024,7 +1027,7 @@
system_matrix_velocity,
system_rhs_velocity);
- if (material_model->is_compressible ())
+ if (do_pressure_rhs_compatibility_modification)
current_constraints_velocity.distribute_local_to_global (data.local_pressure_shape_function_integrals,
data.local_dof_indices,
pressure_shape_function_integrals);
@@ -1039,7 +1042,7 @@
system_matrix_velocity = 0.0;
system_rhs_velocity = 0.0;
- if (material_model->is_compressible())
+ if (do_pressure_rhs_compatibility_modification)
pressure_shape_function_integrals = 0;
const QGauss<dim> quadrature_formula (parameters.stokes_velocity_degree + 1);
@@ -1084,12 +1087,13 @@
(update_gradients | update_values),
parameters.n_compositional_fields),
internal::Assembly::CopyData::
- StokesSystem<dim> (fe_velocity));
+ StokesSystem<dim> (fe_velocity,
+ do_pressure_rhs_compatibility_modification));
system_matrix_velocity.compress (VectorOperation::add);
system_rhs_velocity.compress (VectorOperation::add);
- if (material_model->is_compressible ())
+ if (do_pressure_rhs_compatibility_modification)
pressure_shape_function_integrals.compress (VectorOperation::add);
computing_timer.exit_section();
Modified: trunk/aspire/source/simulator/core.cc
===================================================================
--- trunk/aspire/source/simulator/core.cc 2013-11-21 15:13:26 UTC (rev 2028)
+++ trunk/aspire/source/simulator/core.cc 2013-11-21 17:31:33 UTC (rev 2029)
@@ -240,6 +240,27 @@
compositional_boundary_conditions[p->first].reset (bv);
}
+ std::set<types::boundary_id> open_velocity_boundary_indicators
+ = geometry_model->get_used_boundary_indicators ();
+
+ for (std::map<types::boundary_id, std::string>::const_iterator
+ p = parameters.prescribed_velocity_boundary_indicators.begin ();
+ p != parameters.prescribed_velocity_boundary_indicators.end (); ++p)
+ open_velocity_boundary_indicators.erase (p->first);
+
+ for (std::set<types::boundary_id>::const_iterator
+ p = parameters.zero_velocity_boundary_indicators.begin ();
+ p != parameters.zero_velocity_boundary_indicators.end (); ++p)
+ open_velocity_boundary_indicators.erase (*p);
+
+ for (std::set<types::boundary_id>::const_iterator
+ p = parameters.tangential_velocity_boundary_indicators.begin ();
+ p != parameters.tangential_velocity_boundary_indicators.end (); ++p)
+ open_velocity_boundary_indicators.erase (*p);
+
+ do_pressure_rhs_compatibility_modification = (material_model->is_compressible ()
+ && (parameters.prescribed_velocity_boundary_indicators.size () == 0)
+ && (open_velocity_boundary_indicators.size () == 0));
// make sure that we don't have to fill every column of the statistics
// object in each time step.
statistics.set_auto_fill_mode(true);
@@ -800,7 +821,7 @@
old_solution_composition.collect_sizes ();
old_old_solution_composition.collect_sizes ();
- if (material_model->is_compressible ())
+ if (do_pressure_rhs_compatibility_modification)
pressure_shape_function_integrals.reinit (introspection.index_sets.velocity_partitioning, mpi_communicator);
computing_timer.exit_section();
Modified: trunk/aspire/source/simulator/helper_functions.cc
===================================================================
--- trunk/aspire/source/simulator/helper_functions.cc 2013-11-21 15:13:26 UTC (rev 2028)
+++ trunk/aspire/source/simulator/helper_functions.cc 2013-11-21 17:31:33 UTC (rev 2029)
@@ -543,10 +543,13 @@
if (parameters.use_locally_conservative_discretization)
AssertThrow(false, ExcNotImplemented());
- const double mean = vector.block(1).mean_value();
- const double correction = -mean*vector.block(1).size()/global_volume;
+ if (do_pressure_rhs_compatibility_modification)
+ {
+ const double mean = vector.block (1).mean_value ();
+ const double correction = -mean * vector.block (1).size () / global_volume;
- vector.block(1).add(correction, pressure_shape_function_integrals.block(1));
+ vector.block (1).add (correction, pressure_shape_function_integrals.block (1));
+ }
}
template <int dim>
More information about the CIG-COMMITS
mailing list