Hi all,

I am trying to write a code that doesn't require a linear solver by using 
the mass lumping technique. My current implementation looks like this:
active_set.clear(); active_set.set_size(dof_handler.n_dofs()); 
std::vector<types::global_dof_index> local_dof_indices(fe.dofs_per_cell); 
typename DoFHandler<dim>::active_cell_iterator cell = 
dof_handler.begin_active(), endc = dof_handler.end(); for (; cell != endc; 
++cell) { if (! cell->is_locally_owned()) continue; 
cell->get_dof_indices(local_dof_indices); for (unsigned int i=0; 
i<fe.dofs_per_cell; ++i) { const types::global_dof_index idx = 
local_dof_indices[i]; if (active_set.is_element(idx)|| 
constraints_hanging_nodes.is_constrained(idx)) continue; newton_update(idx) 
= rhs_relevant(idx)/diag_total_relevant(idx); active_set.add_index(idx); } 
} newton_update.compress(VectorOperation::insert); 
constraints_update.distribute(newton_update); 

It works well. However, the only issue is that looping over cell in 
typename DoFHandler::active_cell_iterator degrades the performance greatly, 
which is slower than solving the linear system by an iterative solver like 
GMRES. I wish I can write a parallel code like this:
for(int idx=0; idx< newton_update.size(); idx++) 
if(diag_total_relevant(idx)>1e-20) newton_update(idx) = 
rhs_relevant(idx)/diag_total_relevant(idx); 

However, it only works for single core. I really appreciate if anyone has 
any idea to paralellize the solve part with the mass lumping technique.

-- 
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].
To view this discussion visit 
https://groups.google.com/d/msgid/dealii/885e5cc4-f5f0-4aff-8cfc-2459dd7e7c22n%40googlegroups.com.

Reply via email to