[firedrake] hybridisation and tensor-product multigrid
Eike Mueller
E.Mueller at bath.ac.uk
Mon Mar 16 17:51:33 GMT 2015
Hi Colin,
I'm not sure I understand that. If we represent the trace space by a
vector-valued field \vec{Lambda} (which I presume a FacetElement is used
for), isn't everything consistent if we use lambda=\vec{Lambda}.\vec{n}
when we reconstruct the DG and H(div) fields from the trace space and
also use \vec{Lambda_{test}}.\vec{n} when we assemble any forms in the
hybridised operator? Or is the problem that we can't get access to the
normal \vec{n} in both cases?
Thanks,
Eike
On 16/03/15 14:48, Colin Cotter wrote:
> I'm happy to use FacetElement in this way, but there is one tiny wrinkle
> which hopefully we can figure out, namely that in TraceElement we dotted
> with the local normal. If we do this with FacetElement, we have to dot
> with the global normal, which leads to possible sign changes (you have
> to either choose "+" or "-"). This is fine for implementing
> hybridisation, but it has implications for the preconditioner, since the
> trace variable is used as an approximation to the DG variable solution.
> If we don't choose the sign correctly, then having a positive
> FacetElement basis coefficient could lead to a negative value of the
> trace variable, and then we can't map directly from FacetElement basis
> coefficients to CG basis coefficients in the preconditioner.
>
> To make this work, you need to consistently choose "+" or "-" for the
> normal. Is it the convention that positive H(div) basis coefficient
> leads to positive value of u.n("+")? I guess this is the real question I
> wanted to ask Marie yesterday, but hadn't formulated it right in my head.
>
> cheers
> ---cjc
>
> On 16 March 2015 at 13:46, Andrew McRae <a.mcrae12 at imperial.ac.uk
> <mailto:a.mcrae12 at imperial.ac.uk>> wrote:
>
> Officially I'd prefer you to use FacetElement and write dot(u, n).
>
> Trace elements were a quick hack. Their FIAT implementation
> essentially does this, though on the reference cell, inside the
> tabulate() function.
>
> If anyone wants to spend half-a-day extending FIAT's trace.py to
> work with arbitrary H(div) elements then be my guest.
>
> On 16 March 2015 at 14:25, Cotter, Colin J
> <colin.cotter at imperial.ac.uk <mailto:colin.cotter at imperial.ac.uk>>
> wrote:
>
> Hi Eike,
> If you take a look at the test_hybridisation_inverse branch,
> in tests/regression/test_hybridisation_schur, you'll see a
> hacked up attempt at doing this for simplices. It's a bit fiddly
> because you need to assemble the form multiple times, once as a
> mixed system and once as a single block, so I'm thinking of
> making a tool to automate some of this by doing automated
> substitutions in UFL. Lawrence and I said we might try to sketch
> out how to do this.
>
> Another slight problem is that we don't have trace elements for
> quadrilaterals or tensor product elements at the moment. Our
> approach to trace spaces is also rather hacked up, we extract
> the facet basis functions from an H(div) basis and the tabulator
> returns DOFs by dotting the local basis functions by the local
> normal.
>
> Andrew: presumably you didn't implement them because you
> anticipated some fiddliness for tensor-products?
>
> cheers
> --cjc
>
> On 16 March 2015 at 08:49, Eike Mueller <E.Mueller at bath.ac.uk
> <mailto:E.Mueller at bath.ac.uk>> wrote:
>
> Dear firedrakers,
>
> I have two questions regarding the extension of a hybridised
> solver to a tensor-product approach:
>
> (1) In firedrake, is there already a generic way of
> multiplying locally assembled matrices? I need this for the
> hybridised solver, so for example I want to (locally)
> assemble the velocity mass matrix M_u and divergence
> operator D and then multiply them to get, for example:
>
> D^T M_u^{-1} D
>
> I can create a hack by assembling them into vector-valued
> DG0 fields and then writing the necessary operations to
> multiply them and abstract that into a class (as I did for
> the column-assembled matrices), but I wanted to check if
> this is supported generically in firdrake (i.e. if there is
> support for working with a locally assembled matrix
> representation). If I can do that, then I can see how I can
> build all operator that are needed in the hybridised
> equation and for mapping between the Lagrange multipliers
> and pressure/velocity. For the columnwise smoother, I then
> need to extract bits of those locally assembled matrices and
> assemble them columnwise as for the DG0 case.
>
> (2) The other ingredient we need for the Gopalakrishnan and
> Tan approach is a tensor-product solver in the P1 space. So
> can I already prolongate/restrict in the
> horizontal-direction only in this space? I recall that
> Lawrence wrote a P1 multigrid, but I presume this is for a
> isotropic grid which is refined in all coordinate
> directions. Again I can probably do it 'by hand' by just L2
> projecting between the spaces, but this will not be the most
> efficient way. Getting the columnwise smoother should work
> as for the DG0 case: I need to assemble the matrix locally
> and then pick out the vertical couplings and build them into
> a columnwise matrix, which I store as a vector-valued P1
> space on the horizontal host-grid.
>
> Thanks a lot,
>
> Eike
>
> --
> Dr Eike Hermann Mueller
> Lecturer in Scientific Computing
>
> Department of Mathematical Sciences
> University of Bath
> Bath BA2 7AY, United Kingdom
>
> +44 1225 38 6241 <tel:%2B44%201225%2038%206241>
> e.mueller at bath.ac.uk <mailto:e.mueller at bath.ac.uk>
> http://people.bath.ac.uk/__em459/
> <http://people.bath.ac.uk/em459/>
>
> _________________________________________________
> firedrake mailing list
> firedrake at imperial.ac.uk <mailto:firedrake at imperial.ac.uk>
> https://mailman.ic.ac.uk/__mailman/listinfo/firedrake
> <https://mailman.ic.ac.uk/mailman/listinfo/firedrake>
>
>
>
>
> _______________________________________________
> firedrake mailing list
> firedrake at imperial.ac.uk <mailto:firedrake at imperial.ac.uk>
> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
>
>
>
>
> _______________________________________________
> firedrake mailing list
> firedrake at imperial.ac.uk
> https://mailman.ic.ac.uk/mailman/listinfo/firedrake
>
--
Dr Eike Hermann Mueller
Lecturer in Scientific Computing
Department of Mathematical Sciences
University of Bath
Bath BA2 7AY, United Kingdom
+44 1225 38 6241
e.mueller at bath.ac.uk
http://people.bath.ac.uk/em459/
More information about the firedrake
mailing list