Hello everyone, I looked in the forum, in the documentation and in the 
tutorials but I couldn't find a way to solve this problem in the way I 
need. I would appreciate a lot any help you could provide me. 


I would like to have Dirichlet BCs applied to faces with some boundary id. 
This id is not changing (i.e., the constrained faces are always the same), 
and the mesh, elastic properties etc. are also constant throughout the 
program. The function used to define these BCs has always the same shape, 
the only thing that is changing is the value of the Dirichlet BCs (e.g., 
imagine that first you constrain the displacement of a face with a 
spatially-constant value of 1.0 through the face, and in the next solution 
step to 2.0 and so on). I need to solve this system many times, each time 
with a different value of the Dirichlet BCs. To do this efficiently, I 
would like to precalculate as much as possible, for example, assembling the 
system matrix only once etc. 

Now my question is, given that the sparsity pattern is not changing (as the 
constrained nodes are the same), is there a way to solve this in a manner 
such that only the solution and rhs are changing from one step to the next? 
If the answer is that the system matrix must necessarily change, which 
should be the strategy to reassemble only the changing cells (and avoiding 
thus reassembling the whole matrix)? In summary, what's the most efficient 
way to repeatedly solve a system in which the only changes from step to 
step are the value (not the region over which they are applied) of the 
Dirichlet BCs?



About my current implementation:

I don't have hanging nodes, and I'm using PETScWrappers::MPI::
SparseMatrix and PETScWrappers::MPI::Vector.

I assemble the matrix with

void  distribute_local_to_global 
<https://dealii.org/8.4.1/doxygen/deal.II/classConstraintMatrix.html#aaa155d7c8fcd10b7c417bfabd2698744>
 
(const FullMatrix 
<https://dealii.org/8.4.1/doxygen/deal.II/classFullMatrix.html>< typename 
MatrixType::value_type > &local_matrix, const std::vector< size_type 
<https://dealii.org/8.4.1/doxygen/deal.II/classConstraintMatrix.html#a71b13eb29cd43c9e87abebf2bf78b2a3>
 
> &local_dof_indices, MatrixType &global_matrix) const 
and apply the BCs with

void interpolate_boundary_values 
<https://dealii.org/8.4.1/doxygen/deal.II/namespaceVectorTools.html#a0e84d0721e3780394e7d854b7ec878cf>
 
(const DoFHandlerType &dof, const types::boundary_id 
<https://dealii.org/8.4.1/doxygen/deal.II/namespacetypes.html#a685c06c8ba84120df596d9e56f5510e2>
 
boundary_component, const Function 
<https://dealii.org/8.4.1/doxygen/deal.II/classFunction.html>< 
DoFHandlerType::space_dimension, double > &boundary_function, std::map< 
types::global_dof_index 
<https://dealii.org/8.4.1/doxygen/deal.II/namespacetypes.html#a3bf9e493f1aab00b04933b81856144c4>,
 
double > &boundary_values, const ComponentMask 
<https://dealii.org/8.4.1/doxygen/deal.II/classComponentMask.html> 
&component_mask=ComponentMask 
<https://dealii.org/8.4.1/doxygen/deal.II/classComponentMask.html>())

void apply_boundary_values 
<https://dealii.org/8.4.1/doxygen/deal.II/namespaceMatrixTools.html#a26b81352fcf862218943831dbb38f0a0>
 
(const std::map< types::global_dof_index 
<https://dealii.org/8.4.1/doxygen/deal.II/namespacetypes.html#a3bf9e493f1aab00b04933b81856144c4>,
 
double > &boundary_values, PETScWrappers::MPI::SparseMatrix 
<https://dealii.org/8.4.1/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1SparseMatrix.html>
 
&matrix, PETScWrappers::MPI::Vector 
<https://dealii.org/8.4.1/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1Vector.html>
 
&solution, PETScWrappers::MPI::Vector 
<https://dealii.org/8.4.1/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1Vector.html>
 
&right_hand_side, const bool eliminate_columns=true)




P.S.: I tried to simply repeat the process to re-apply the BCs with a new 
value using the same matrix, but I get always the first BCs I apply  (I 
think because once I apply it, the matrix knows it has been already 
condensed and ignores the next calls).

-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to