From: Lorenzo Botti <bottilorenzo@gm...>  20080228 14:02:43

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 