Re: [deal.II] Stabilization for Q1Q0 Stokes by Bochev [2006]

2019-09-11 Thread Richard Schussnig


Am Dienstag, 10. September 2019 13:26:56 UTC+2 schrieb Bruno Blais:
>
> I second Wolfgang comment on the fact that Q1Q1 is not difficult to 
> implement. You can also scale it to arbitrary Qn-Qn elements if you are 
> interested in higher order.
> We have implemented such an approach in our code based on dealii (
> https://github.com/lethe-cfd/lethe)
> Q1Q1 is already very diffusive (which is why it is so robust I guess), so 
> I am not sure that going with Q1-Q0 to save a few pressure degree of 
> freedom is actually worth it.
> Best!
> Bruno
>

Thanks Bruno,
also very appreciated! I have been looking for dealii implementations of 
NS, 
since especially the stabilizations (not only inf-sup but SUPG GLS or 
similar)
are always a bit tricky ... or at least what is considered/or may be 
ignored!

I totally agree, that saving a few pressure dofs does not pay off, 
especially since I am having 
vector-valued velocities and displacements and only the single 
pressure ...
The motivation was solely coming from the fact, that I did not think of 
using FE_nothing,
otherwise I would not have started trying to use Q1Q0. 

Kind regards,
Richard 

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/d01d6cf4-70d4-45aa-93ed-c2a63e5bae66%40googlegroups.com.


Re: [deal.II] Stabilization for Q1Q0 Stokes by Bochev [2006]

2019-09-11 Thread Richard Schussnig
Am Dienstag, 10. September 2019 13:26:56 UTC+2 schrieb Bruno Blais:
>
> I second Wolfgang comment on the fact that Q1Q1 is not difficult to 
> implement. You can also scale it to arbitrary Qn-Qn elements if you are 
> interested in higher order.
> We have implemented such an approach in our code based on dealii (
> https://github.com/lethe-cfd/lethe)
> Q1Q1 is already very diffusive (which is why it is so robust I guess), so 
> I am not sure that going with Q1-Q0 to save a few pressure degree of 
> freedom is actually worth it.
> Best!
> Bruno
>

Thanks Bruno,
also very appreciated! I have been looking for dealii implementations of 
NS, 
since especially the stabilizations (not only inf-sup but SUPG GLS or 
similar)
are always a bit tricky ... or at least what is considered/or may be 
ignored!

I totally agree, that saving a few pressure dofs does not pay off, 
especially since I am having 
vector-valued velocities and displacements and only the single 
pressure ...
The motivation was solely coming from the fact, that I did not think of 
using FE_nothing,
otherwise I would not have started trying to use Q1Q0. 

Kind regards,
Richard


 

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/12f3accc-8cb8-4f28-8d78-7e84736d7491%40googlegroups.com.


Re: [deal.II] Stabilization for Q1Q0 Stokes by Bochev [2006]

2019-09-11 Thread Richard Schussnig
Dear Wolfgang,
Thank you very much for looking taking the time to answer my question, 
I really appreciate it - such things do not happen to often on the 
internet! ; )
Please find below my response per answer, I hope it is not too unstructured 
that way!

Am Dienstag, 10. September 2019 06:03:27 UTC+2 schrieb Wolfgang Bangerth:
>
> On 9/9/19 1:57 AM, Richard Schussnig wrote: 
> > 
> > FINALLY, MY QUESTIONS: 
> > 
> > Using the Q1Q1, I would in the end (FSI) need to come up with a space 
> made 
> >  from Q1 elements with a discontinuity at the interface - which shall be 
> > realized using different material_id(). - how may I do that other than 
> > using a FE_DGQ space for the pressure and enforce continuity 'manually' 
> > through a giant ConstraintMatrix? 
>
> That's inefficient, of course :-) I assume that your interface is in the 
> interior of the domain? In that case, take a look at step-46, where 
> solution 
> variables only live on certain cells, and are discontinuous at the 
> interface 
> between the two parts of the domain. 
>
>
The interface is indeed in the interior of the domain, resolved of course, 
since I only use
the material_id() to distinguish between solid and fluid.
And the hint is perfect, thanks a lot, I have not looked into step-46 for a 
few months and almost forgot about it.
- I will look into having 2 seperate pressure spaces using FE_nothing, that 
may do the trick (for the Q1Q1 stabilized case).


> > Using the Q1Q0, the main problem is data transfer and 'node searching' 
> in 
> > the parallel case - example: the stabilization matrix from cell 16 has 
> > pressure dof 45 and shares edges or maybe only a single vertex (!) with 
> > cells with pressure dofs 1 2 3 4 5. The cell matrix for the projection 
> from 
> > Q0(dc) to Q1(c) is an area-weighted sum of the pressures on the cells 
> > touching the vertex of the support of the matching bilinear function, 
> > therefore we get a 6x6 local matrix and entries into all 'touching' 
> cells. 
>
> Yes, you'd have to create a map that for each vertex gives you a list of 
> all 
> adjacent cells. I think I recall that there is a function in GridTools for 
> this, though. 


>
> > Since these cells are not only the direct neighbors of the current cell, 
> > things may get complicated quite fast, if we consider the 3d case with 
> > hanging nodes, but on the other hand side, looping in the element loop 
> over 
> > all elements again(!) to check the vertex_index() is extremely slow. 
>
> Yes, you'd reverse this approach by looping over all vertices first, and 
> then 
> in this loop over all adjacent cells. 
>
>
Thanks a ton, I coded that up myself, but there are:
find_cells_adjacent_to_vertex
&
vertex_to_cell_map
that come in handy at this point and probably are written in a more 
efficient way.
Somehow I did not find the functions, sorry for bothering you
(added for people coming after me).
 

>
> > Do you know of any better-fitting stabilizations for the Q1Q0 pair? Or 
> do 
> > you think there are better options around? 
>
> Q1-Q1 is a pretty good method, and not very difficult to implement. I'll 
> note 
> that Q1-Q0 *sounds* like a good idea, but has a very low convergence rate 
> and 
> so will not yield particularly good accuracy if that's what you actually 
> care 
> about. Of course, Q2-Q1 is the standard for good reasons. 
>
> Best 
>   W. 
>
>
>
I was under the misconception, that I should have the orders matching since 
I am interested in
stresses in the fluid & on the interface, but apparently looking at the 
parameters in the interesting 
case (~4*1e-6 kinem. viscosity for blood [Bazilevs et al 2010, Küttler et 
al 2009, Deparis et al 2016])
it might be worth a lot having a good pressure approximation!
So the conclusion is for me now: 
test Q1Q0dc and perhaps also use Q1Q1 with FE_Nothing!

Thanks once again for your thoughts on the topic!

Kind regards,
Richard

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/97a9811e-6fc1-4379-a265-b407f6d5ff0e%40googlegroups.com.


Re: [deal.II] Stabilization for Q1Q0 Stokes by Bochev [2006]

2019-09-10 Thread Bruno Blais
I second Wolfgang comment on the fact that Q1Q1 is not difficult to 
implement. You can also scale it to arbitrary Qn-Qn elements if you are 
interested in higher order.
We have implemented such an approach in our code based on dealii (
https://github.com/lethe-cfd/lethe)
Q1Q1 is already very diffusive (which is why it is so robust I guess), so I 
am not sure that going with Q1-Q0 to save a few pressure degree of freedom 
is actually worth it.
Best!
Bruno

On Tuesday, 10 September 2019 00:03:27 UTC-4, Wolfgang Bangerth wrote:
>
> On 9/9/19 1:57 AM, Richard Schussnig wrote: 
> > 
> > FINALLY, MY QUESTIONS: 
> > 
> > Using the Q1Q1, I would in the end (FSI) need to come up with a space 
> made 
> >  from Q1 elements with a discontinuity at the interface - which shall be 
> > realized using different material_id(). - how may I do that other than 
> > using a FE_DGQ space for the pressure and enforce continuity 'manually' 
> > through a giant ConstraintMatrix? 
>
> That's inefficient, of course :-) I assume that your interface is in the 
> interior of the domain? In that case, take a look at step-46, where 
> solution 
> variables only live on certain cells, and are discontinuous at the 
> interface 
> between the two parts of the domain. 
>
>
> > Using the Q1Q0, the main problem is data transfer and 'node searching' 
> in 
> > the parallel case - example: the stabilization matrix from cell 16 has 
> > pressure dof 45 and shares edges or maybe only a single vertex (!) with 
> > cells with pressure dofs 1 2 3 4 5. The cell matrix for the projection 
> from 
> > Q0(dc) to Q1(c) is an area-weighted sum of the pressures on the cells 
> > touching the vertex of the support of the matching bilinear function, 
> > therefore we get a 6x6 local matrix and entries into all 'touching' 
> cells. 
>
> Yes, you'd have to create a map that for each vertex gives you a list of 
> all 
> adjacent cells. I think I recall that there is a function in GridTools for 
> this, though. 
>
>
> > Since these cells are not only the direct neighbors of the current cell, 
> > things may get complicated quite fast, if we consider the 3d case with 
> > hanging nodes, but on the other hand side, looping in the element loop 
> over 
> > all elements again(!) to check the vertex_index() is extremely slow. 
>
> Yes, you'd reverse this approach by looping over all vertices first, and 
> then 
> in this loop over all adjacent cells. 
>
>
> > Do you know of any better-fitting stabilizations for the Q1Q0 pair? Or 
> do 
> > you think there are better options around? 
>
> Q1-Q1 is a pretty good method, and not very difficult to implement. I'll 
> note 
> that Q1-Q0 *sounds* like a good idea, but has a very low convergence rate 
> and 
> so will not yield particularly good accuracy if that's what you actually 
> care 
> about. Of course, Q2-Q1 is the standard for good reasons. 
>
> Best 
>   W. 
>
>
> -- 
>  
> Wolfgang Bangerth  email: bang...@colostate.edu 
>  
> www: http://www.math.colostate.edu/~bangerth/ 
>
>

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/169fb0a3-a042-4a01-b25f-2fd46c20bde9%40googlegroups.com.


Re: [deal.II] Stabilization for Q1Q0 Stokes by Bochev [2006]

2019-09-09 Thread Wolfgang Bangerth
On 9/9/19 1:57 AM, Richard Schussnig wrote:
> 
> FINALLY, MY QUESTIONS:
> 
> Using the Q1Q1, I would in the end (FSI) need to come up with a space made
>  from Q1 elements with a discontinuity at the interface - which shall be
> realized using different material_id(). - how may I do that other than
> using a FE_DGQ space for the pressure and enforce continuity 'manually'
> through a giant ConstraintMatrix?

That's inefficient, of course :-) I assume that your interface is in the
interior of the domain? In that case, take a look at step-46, where solution
variables only live on certain cells, and are discontinuous at the interface
between the two parts of the domain.


> Using the Q1Q0, the main problem is data transfer and 'node searching' in
> the parallel case - example: the stabilization matrix from cell 16 has
> pressure dof 45 and shares edges or maybe only a single vertex (!) with
> cells with pressure dofs 1 2 3 4 5. The cell matrix for the projection from
> Q0(dc) to Q1(c) is an area-weighted sum of the pressures on the cells
> touching the vertex of the support of the matching bilinear function,
> therefore we get a 6x6 local matrix and entries into all 'touching' cells. 

Yes, you'd have to create a map that for each vertex gives you a list of all 
adjacent cells. I think I recall that there is a function in GridTools for 
this, though.


> Since these cells are not only the direct neighbors of the current cell, 
> things may get complicated quite fast, if we consider the 3d case with
> hanging nodes, but on the other hand side, looping in the element loop over
> all elements again(!) to check the vertex_index() is extremely slow.

Yes, you'd reverse this approach by looping over all vertices first, and then 
in this loop over all adjacent cells.


> Do you know of any better-fitting stabilizations for the Q1Q0 pair? Or do
> you think there are better options around?

Q1-Q1 is a pretty good method, and not very difficult to implement. I'll note 
that Q1-Q0 *sounds* like a good idea, but has a very low convergence rate and 
so will not yield particularly good accuracy if that's what you actually care 
about. Of course, Q2-Q1 is the standard for good reasons.

Best
  W.


-- 

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

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/0e6ef930-d6b9-e87e-8975-97c9a7a11a3f%40colostate.edu.


[deal.II] Stabilization for Q1Q0 Stokes by Bochev [2006]

2019-09-09 Thread Richard Schussnig
Hi everyone!

I am trying to implement the stabilizations presented in a paper by Bochev 
et al. [2006], 
which you may find here:

https://pdfs.semanticscholar.org/47be/4e317d4dcbbf1b70c781394e49c1dbf7e538.pdf

This one is parameter free, and they present local projections for both 
Q1Q1 and Q1Q0 element pairs (both of course not fulfillling the LBB cond).

The Q1Q1 is easily implemented, since we only need to adapt the cell 
matrices, 
but this would also be possible with the PSPG stabilization for example, 
nevertheless, here we do not need a parameter.

More interestingly, the Q1Q0 pair allows the use of discontinuous pressure, 
which is in my case of interest, 
since I want to finally apply this to a ALE-FSI approach, where at the 
interface the pressure is discontinuous.
-And for the PSPG I need the derivatives of the pressure functions, wihch 
are exactly zero for continuous functions
mapped by affine mappings (which is for quads/hexas of course most likely 
not the case).

FINALLY, MY QUESTIONS:

Using the Q1Q1, I would in the end (FSI) need to come up with a space made 
from Q1 elements 
with a discontinuity at the interface - which shall be realized using 
different material_id(). 
- how may I do that other than using a FE_DGQ space for the pressure and 
enforce continuity 
'manually' through a giant ConstraintMatrix?

Using the Q1Q0, the main problem is data transfer and 'node searching' in 
the parallel case
- example:
the stabilization matrix from cell 16 has pressure dof 45 and shares edges 
or maybe only a single vertex (!)
with cells with pressure dofs 1 2 3 4 5.
The cell matrix for the projection from Q0(dc) to Q1(c) is an area-weighted 
sum of the pressures on 
the cells touching the vertex of the support of the matching bilinear 
function, therefore we get a
6x6 local matrix and entries into all 'touching' cells.
Since these cells are not only the direct neighbors of the current cell, 
things may get complicated quite fast, 
if we consider the 3d case with hanging nodes, but on the other hand side, 
looping in the element loop over all elements again(!) to check the 
vertex_index() is extremely slow.
- Is there a fast and efficient way to get the 'touching' cells in a 
triangulation for one vertex?
(of course i do that only once during setup and save a std::map from 
active_cell_index to pressure dof and cell area)

Do you know of any better-fitting stabilizations for the Q1Q0 pair? Or do 
you think there are better options around?

Any help would be greatly appreciated!
Thanks in advance!

Kind regards,
Richard


-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/f98bf7c9-ed79-43b5-bf70-d2babcecb783%40googlegroups.com.