More specifically,
I used TransientNonlinearImplicitSystem for Navier-Stokes solver with U2P1
element.
system.nonlinear_solver->residual = compute_residual;
system.nonlinear_solver->jacobian = compute_jacobian;
In compute_jacobian(...),
if(pin_pressure)
{
for (unsigned int c=0; c<elem->n_nodes(); c++)
{
if (elem->node(c) == (unsigned int)pin_pressure_node)
{
Kpp(c,c) += penalty_pin;
}
}
}
in compute_residual(...),
DenseSubVector<Number> Ru(Re), Rv(Re), Rp(Re);
...
Rp.reposition (p_var*n_u_dofs, n_p_dofs);
....
for (unsigned int i=0; i<n_p_dofs; i++)
{
Rp(i) -=jxw*dt*psi[i][qp]*(gradu(0)+gradv(1));
}
...
if (pin_pressure )
{
for (unsigned int c=0; c<elem->n_nodes(); c++)
{
if (elem->node(c) == (unsigned int)pin_pressure_node)
{
Rp(c) += penalty_pin*(soln(dof_indices_p[c])-pref);
}
} // c loop
} // pin pressure
dof_map.constrain_element_vector (Re, dof_indices);
residual.add_vector (Re, dof_indices);
...
Strangely, during the parallel run, the solution of M*dX=-R(X) gives
a constant nonzero R,and this makes the pressure at the pinning place always is
zero and then iot contaminated the whole field when np>1.
Cheers,
Zhenyu
------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users