[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