[firedrake] hybridisation and tensor-product multigrid
Miklos Homolya
m.homolya14 at imperial.ac.uk
Tue Mar 17 17:16:05 GMT 2015
Hi Eike,
can you please try again the extruded case with FIAT and Firedrake
branches refactor-flattening?
Thanks,
Miklos
On 17/03/15 14:08, Eike Mueller wrote:
> Hi Miklos,
>
> thanks, that’s probably what I’m looking for. It works if I just
> create a BDFM1 element on a 2d grid, and then say
>
> U1 = FiniteElement('BDFM',triangle,2)
> U1_broken = BrokenElement(U1)
>
> However, the 3d code below which builds elements on an extruded mesh
> does not work. I’ve also tried to first create BrokenElement versions
> of U1 and V1, and then combine them, but that doesn’t work either.
>
> Thanks,
>
> Eike
>
> PS: I started writing a class for locally assembling matrices (for
> this class it does not matter whether the function spaces are
> discontinuous or not, but the multiplying them locally of course only
> makes sense if the spaces are discontinuous), see here:
> https://github.com/firedrakeproject/firedrake-helmholtzsolver/blob/hybridization/source/bandedmatrix/locallyassembledmatrix.py
> It has methods for assembling a UFL form, appling the locally
> assembled matrices to a vector, adding and multiplying locally
> assembled matrices and calculating the inverse (using dgels from LAPACK).
>
> from firedrake import *
>
> host_mesh = UnitIcosahedralSphereMesh(0)
> mesh = ExtrudedMesh(host_mesh,layers=4,extrusion_type='radial')
>
> U1 = FiniteElement('BDFM',triangle,2)
> U2 = FiniteElement('DG',triangle,1)
> V0 = FiniteElement('CG',interval,2)
> V1 = FiniteElement('DG',interval,1)
>
> W2_elt = HDiv(OuterProductElement(U1,V1))+HDiv(OuterProductElement(U2,V0))
> W2_broken_elt = BrokenElement(W2_elt)
>
> W = FunctionSpace(mesh,W2_broken_elt)
>
> WARNING: Creating an EnrichedElement,
> if you intended to create a MixedElement use '*' instead of '+'.
> Traceback (most recent call last):
> File "brokenelement.py", line 14, in <module>
> W = FunctionSpace(mesh,W2_broken_elt)
> File
> "/Users/eikemueller/PostDocBath/EllipticSolvers/PyOP2/pyop2/caching.py",
> line 160, in __new__
> obj = make_obj()
> File
> "/Users/eikemueller/PostDocBath/EllipticSolvers/PyOP2/pyop2/caching.py",
> line 141, in make_obj
> obj.__init__(*args, **kwargs)
> File
> "/Users/eikemueller/PostDocBath/EllipticSolvers/firedrake/firedrake/functionspace.py",
> line 540, in __init__
> super(FunctionSpace, self).__init__(mesh, element, name, dim=1)
> File
> "/Users/eikemueller/PostDocBath/EllipticSolvers/firedrake/firedrake/functionspace.py",
> line 52, in __init__
> self.flattened_element = self.fiat_element.flattened_element()
> AttributeError: Discontinuized instance has no attribute
> 'flattened_element'
>
> --
>
> Dr Eike Hermann Mueller
> Lecturer in Scientific Computing
>
> Department of Mathematical Sciences
> University of Bath
> Bath BA2 7AY, United Kingdom
>
> +44 1225 38 5557
> e.mueller at bath.ac.uk <mailto:e.mueller at bath.ac.uk>
> http://people.bath.ac.uk/em459/
>
>> On 17 Mar 2015, at 13:34, Miklos Homolya <m.homolya14 at imperial.ac.uk
>> <mailto:m.homolya14 at imperial.ac.uk>> wrote:
>>
>> Hi,
>>
>> I'm not quite sure, but I think BrokenElement is probably what you need.
>> BrokenElement keeps all the dofs and transformations and their
>> meaning, but re-associates all dofs with the cell interior.
>>
>> Regards,
>> Miklos
>>
>>
>> On 17/03/15 13:29, Eike Mueller wrote:
>>> Hi again,
>>>
>>>> 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.
>>>
>>> we would also need a discontinuous HDiv space, i.e. e.g.
>>> discontinuous versions of RT0 and BDFM1. How can I get those?
>>>
>>> Thanks,
>>>
>>> Eike
>>>
>>>> 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/
>>>>
>>>> _______________________________________________
>>>> 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 <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
>>
>> _______________________________________________
>> 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
-------------- next part --------------
HTML attachment scrubbed and removed
More information about the firedrake
mailing list