Anistropic refinement DG - saddle point problem

29 views
Skip to first unread message

Juan Felipe Giraldo

unread,
Aug 11, 2020, 6:57:24 AM8/11/20
to deal.II User Group
Dear community,

I am working on an adaptive stabilized finite element method which consist in a saddle point problem to obtain:

- A continuous solution
- A discontinuous error estimator (which I use as an adaptive refinement).

I successfully implemented the method using the sample of the step 30 (for the DG formulation) combining with step 20 for the saddle point, and the step 39 for the error marking.

Now, I would like to implement an anisotropic refinement, so I am taking the same step 30 as a reference but now with the anisotropic flag actived.
As I mentioned, If I use only isotropic refinement, it works very well; but,  if I activate the anisotropic flag for the adaptive refinement, it can only refine the first iteration, and then I get the following error:


An error occurred in line <357> of file </home/arsen/Documents/instaladores/dealii/include/deal.II/meshworker/loop.h> in function
    void dealii::MeshWorker::cell_action(ITERATOR, dealii::MeshWorker::DoFInfoBox<dim, DOFINFO>&, INFOBOX&, const std::function<void(DOFINFO&, typename INFOBOX::CellInfo&)>&, const std::function<void(DOFINFO&, typename INFOBOX::CellInfo&)>&, const std::function<void(DOFINFO&, DOFINFO&, typename INFOBOX::CellInfo&, typename INFOBOX::CellInfo&)>&, const dealii::MeshWorker::LoopControl&) [with INFOBOX = dealii::MeshWorker::IntegrationInfoBox<2, 2>; DOFINFO = dealii::MeshWorker::DoFInfo<2, 2, double>; int dim = 2; int spacedim = 2; ITERATOR = dealii::TriaActiveIterator<dealii::DoFCellAccessor<dealii::DoFHandler<2, 2>, false> >; typename INFOBOX::CellInfo = dealii::MeshWorker::IntegrationInfo<2, 2>]
The violated condition was:
    cell->level() == neighbor->level()
Additional information:
    This exception -- which is used in many places in the library -- usually indicates that some condition which the author of the code thought must be satisfied at a certain point in an algorithm, is not fulfilled. An example would be that the first part of an algorithm sorts elements of an array in ascending order, and a second part of the algorithm later encounters an element that is not larger than the previous one.
There is usually not very much you can do if you encounter such an exception since it indicates an error in deal.II, not in your own program. Try to come up with the smallest possible program that still demonstrates the error and contact the deal.II mailing lists with it to obtain help.


I am wondering to know if anyone have any idea of what It is happening and how can I solve that problem. I will be very grateful for your help.

Thank you so much,


Juan Giraldo


Bruno Turcksin

unread,
Aug 11, 2020, 11:12:53 PM8/11/20
to deal.II User Group
Juan,

Basically the problem is that MeshWorker was not design to handle anisotropic refinement. That assert checks that if the faces of two cells "match" then they have been refined the same number of times. This is obviously not true in case of anisotropic refinement. I think that this is just a sanity check and you should be able to remove that assert without any bad consequences. So commenting the assert in /include/deal.II/meshworker/loop.h line 357 and recompiling deal.II should be safe and fix your problem.

Best,

Bruno

Juan Felipe Giraldo

unread,
Aug 12, 2020, 1:41:06 AM8/12/20
to deal.II User Group
Dear Bruno,

Thank you so much,  it fix the problem without any problem.

Regards,
Juan.

jfgir...@gmail.com

unread,
Aug 17, 2020, 8:02:18 AM8/17/20
to deal.II User Group
Dear Comunity,

I would like to open again the topic with another question. Is there any way to use the Meshworker to solve the DG formulation but using block matrix and vectors?   I couldn't find a proper way to do it with the Meshworker because I have to choose the component of the shape function when I am using the blocks matrix. 

Thank you!
Juan

Wolfgang Bangerth

unread,
Aug 17, 2020, 7:28:10 PM8/17/20
to dea...@googlegroups.com
On 8/17/20 6:02 AM, jfgir...@gmail.com wrote:
>
> I would like to open again the topic with another question. Is there any way
> to use the Meshworker to solve the DG formulation but using block matrix and
> vectors?   I couldn't find a proper way to do it with the Meshworker because I
> have to choose the component of the shape function when I am using the blocks
> matrix.

Ignore MeshWorker and instead build on the underlying MeshWorker::mesh_loop()
functions. This is what the current versions of step-12 and step-47 do, for
example. They don't care what matrix and vector type you use.

Best
W.


--
------------------------------------------------------------------------
Wolfgang Bangerth email: bang...@colostate.edu
www: http://www.math.colostate.edu/~bangerth/

Juan Felipe Giraldo

unread,
Aug 18, 2020, 12:34:42 AM8/18/20
to dea...@googlegroups.com
Thank you Wolfgang, 

I just realized the new version of step 12. I was working with the older one, which made it complicated, especially on the inner faces. 

Regards,
Juan

--
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 dealii+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/0ca0575b-41d2-cc78-66a5-052a15aa77c9%40colostate.edu.
Reply all
Reply to author
Forward
0 new messages