Hello,
I develop distributed code like in step-40 and with the adaptive
mesh refinement like in step-42.
I was using ghosted Trilinos MPI vectors like
LA::MPI::Vector solution_vel_n;
initialized by
solution_vel_n.reinit (locally_owned_dofs_vel,
locally_relevant_dofs_vel,
MPI_COMM_WORLD);
I was able to assign to them from the output of solve
procedures in the following manner
(like in step-40
https://www.dealii.org/8.5.0/doxygen/deal.II/step_40.html#LaplaceProblemsolve
)
solution_vel_n = completely_distributed_solution;
where
LA::MPI::Vector completely_distributed_solution (locally_owned_dofs_vel,
MPI_COMM_WORLD);
"GMRES_solver()"
constraint_matrix_vel.distribute (completely_distributed_solution);
I am running fixed point iteration. I was successful in convergence on not
refined mesh, to be more specific on meshes without adaptive refinement.
After the adaptive refinement the convergence of residual stalled.
I have tried therefore to mimic the step-42 as closely as possible
https://www.dealii.org/8.5.0/doxygen/deal.II/step_42.html#PlasticityContactProblemrefine_grid
here is the following piece of code
if (transfer_solution)
{
TrilinosWrappers::MPI::Vector
<https://www.dealii.org/8.5.0/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1Vector.html>
distributed_solution(locally_owned_dofs, mpi_communicator);
solution_transfer.interpolate(distributed_solution);
constraints_hanging_nodes.distribute(distributed_solution);
solution = distributed_solution;
...
Where solution is TrilinosWrappers::MPI::Vector
<https://www.dealii.org/8.5.0/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1Vector.html>
initialized by
solution.reinit
<https://www.dealii.org/8.5.0/doxygen/deal.II/classVector.html#ac4a4dbef7dd65ef8ad35ae56b57d7c05>(locally_relevant_dofs,
mpi_communicator);
My refinement related code:
parallel::distributed::SolutionTransfer<dim, LA::MPI::Vector> sol_trans_vel
(
dof_handler_vel);
sol_trans_vel.prepare_for_coarsening_and_refinement (
solution_vel_n);
triang.execute_coarsening_and_refinement ();
nsSystem.setupSystem (solution_vel_n); ------->here i
re-distribute dofs, resize the vector solution_vel_n, matrix and
rhs, apply bc, rebuild constraint matrix
LA::MPI::Vector distributed_solution_vel (locally_owned_dofs_vel,
MPI_COMM_WORLD);
sol_trans_vel.interpolate (distributed_solution_vel);
constraint_matrix_vel.distribute (distributed_solution_vel);
solution_vel_n_helper.reinit (locally_relevant_dofs_vel,
MPI_COMM_WORLD);
solution_vel_n_helper = distributed_solution_vel;
solution_vel_n = solution_vel_n_helper;
I tried to do this in my code, however I have almost all data exchange in
the
form of distributed ghosted TrilinosWrappers::MPI::Vector
<https://www.dealii.org/8.5.0/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1Vector.html>
.
from which I need to compute sometimes l2_norm.
I tried this (it works for non-refined case)
parallel::distributed::Vector<double> vel (locally_owned_dofs_vel,
locally_relevant_dofs_vel,
MPI_COMM_WORLD);
vel = crate.solution_vel_n;
this->pcout << " NORM tentative velocity :" << vel.l2_norm()
<< std::endl;
I got this error
--------------------------------------------------------
An error occurred in line <1099> of file
</home/mcapek/candis/candi_8_5/tmp/unpack/deal.II-v8.5.0/include/deal.II/lac/trilinos_vector_base.h>
in function
dealii::IndexSet
dealii::TrilinosWrappers::VectorBase::locally_owned_elements() const
The violated condition was:
owned_elements.size()==size()
Additional information:
The locally owned elements have not been properly initialized! This
happens for example if this object has been initialized with exactly one
overlapping IndexSet.
Stacktrace:
-----------
#0 /home/mcapek/candis/candi_8_5/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0:
dealii::TrilinosWrappers::VectorBase::locally_owned_elements() const
#1 /home/mcapek/candis/candi_8_5/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0:
dealii::LinearAlgebra::ReadWriteVector<double>::import(dealii::TrilinosWrappers::MPI::Vector
const&, dealii::VectorOperation::values,
std::shared_ptr<dealii::LinearAlgebra::CommunicationPatternBase const>)
#2 /home/mcapek/candis/candi_8_5/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0:
dealii::LinearAlgebra::distributed::Vector<double>::operator=(dealii::TrilinosWrappers::MPI::Vector
const&)
#3 ./main: NSSystem<3>::assemble_and_solve_system(SolutionCrate&,
SolutionCrate&, double)
#4 ./main: NSSystem<3>::compute_solution(SolutionCrate&, SolutionCrate&,
double, double)
#5 ./main: NSSystem<3>::compute_solution_get_dt(SolutionCrate&,
SolutionCrate&, double, double)
#6 ./main: Main<3>::run()
#7 ./main: main
--------------------------------
Could You tell me please, how to compute the norm from the ghosted vector.
Maybe I did some false initialization in the procedure of refinement.
However, when I want to get values
(get_function_values() call) from the already interpolated vector in
assembly dealii does not complain.
Maybe could You recommend me some alternative to exchange of data to
ghosted vectors?
Thank You
MareK Capek
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.