Hi all,
I've found the problem affecting the p refinement in my elliptic_dg  
code...
In fe_boundary.C the method void FE<Dim,T>::reinit(const Elem* elem,  
const unsigned int s, const Real tolerance)
will initialize the shape functions if ((this->get_type() != elem- 
 >type()) || (s != last_side) || this->shapes_need_reinit())...
I think we need to add a condition  like if (this->get_p_level() !=  
elem->p_level())... I've tried it creating a method  
FeBase::get_p_level() and it works
but maybe you have a better solution.

Another option needed by the method FE<Dim,T>::reinit(const Elem*  
elem, const unsigned int s, const Real tolerance) would be a parameter  
extraorder to
increase the quadrature order if the element neighbor is at an higher  
p level.
Something like
if (neighbor->p_level() > elem->p_level())
{
      unsigned int extraorder =  neighbor->p_level() - elem->p_level();
}
fe->reinit(elem, side, extraorder)

and
FE<Dim,T>::reinit(const Elem* elem, const unsigned int s,unsigned int  
extraorder, const Real tolerance)
{

....
qrule->init(side->type(), elem->p_level() + extraorder);
...
}

Again, maybe you have a better idea...

Thanks
Lorenzo

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to