Hi Lawrence,

has the multigrid-automation branch been deleted on the server, and if so, which branch should I use instead? I get the following error when I try to pull that branch:

eikemueller@Eikes-MBP $ git branch
  master
* multigrid-automation
  multigrid-parallel
eikemueller@Eikes-MBP $ git pull
Your configuration specifies to merge with the ref 'multigrid-automation'
from the remote, but no such ref was fetched.

The 2d multigrid now seems to work, but in the 3d case I get the error message shown below

Thanks,

Eike

==================================== ERRORS ====================================
_____________ ERROR at setup of test_pressuresolve_lowest_order[3] _____________

finite_elements = (FiniteElement('Raviart-Thomas', Domain(Cell('triangle', 2), label=None, data=None), 1, quad_scheme=None), FiniteEleme...one), FiniteElement('Discontinuous Lagrange', Domain(Cell('interval', 1), label=None, data=None), 0, quad_scheme=None))
mesh_hierarchy = <firedrake.mg.mesh.ExtrudedMeshHierarchy object at 0x10cac98d0>

    @pytest.fixture
    def W2_horiz_hierarchy(finite_elements,mesh_hierarchy):
        '''Horizontal velocity space hierarchy.
    
        Build pressure space :math:`W_2^{h}=HDiv(U_1\otimes V_1)`
        hierarchy.
    
        :arg finite_elements: Horizontal and vertical finite element
        :arg mesh: Underlying extruded mesh
        '''
    
        U1, U2, V0, V1 = finite_elements
    
        # Three dimensional elements
        W2_elt = HDiv(OuterProductElement(U1,V1))
    
        if (mesh_hierarchy != None):
>           W2_horiz_hierarchy = FunctionSpaceHierarchy(mesh_hierarchy,W2_elt)

fixtures.py:243: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <firedrake.mg.functionspace.FunctionSpaceHierarchy object at 0x10cc28950>
mesh_hierarchy = <firedrake.mg.mesh.ExtrudedMeshHierarchy object at 0x10cac98d0>
family = HDiv(OuterProductElement(*[FiniteElement('Raviart-Thomas', Domain(Cell('triang...ductCell(*[Cell('triangle', 2), Cell('interval', 1)]), label=None, data=None)))
degree = None, name = None, vfamily = None, vdegree = None

    def __init__(self, mesh_hierarchy, family, degree=None,
                 name=None, vfamily=None, vdegree=None):
        """
            :arg mesh_hierarchy: a :class:`~.MeshHierarchy` to build the
                 function spaces on.
            :arg family: the function space family
            :arg degree: the degree of the function space
    
            See :class:`~.FunctionSpace` for more details on the form of
            the remaining parameters.
            """
        fses = [functionspace.FunctionSpace(m, family, degree=degree,
                                            name=name, vfamily=vfamily,
                                            vdegree=vdegree)
                for m in mesh_hierarchy]
        self.dim = 1
>       super(FunctionSpaceHierarchy, self).__init__(mesh_hierarchy, fses)

../../../firedrake/firedrake/mg/functionspace.py:269: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <firedrake.mg.functionspace.FunctionSpaceHierarchy object at 0x10cc28950>
mesh_hierarchy = <firedrake.mg.mesh.ExtrudedMeshHierarchy object at 0x10cac98d0>
fses = [<firedrake.functionspace.FunctionSpace object at 0x10cc289d0>, <firedrake.functionspace.FunctionSpace object at 0x10c...rake.functionspace.FunctionSpace object at 0x10cc28b50>, <firedrake.functionspace.FunctionSpace object at 0x10cc28bd0>]

    def __init__(self, mesh_hierarchy, fses):
        """
            Build a hierarchy of function spaces
    
            :arg mesh_hierarchy: a :class:`~.MeshHierarchy` on which to
                 build the function spaces.
            :arg fses: an iterable of :class:`~.FunctionSpace`\s.
            """
        self._mesh_hierarchy = mesh_hierarchy
        self._hierarchy = tuple(fses)
        self._map_cache = {}
        self._cell_sets = tuple(op2.LocalSet(m.cell_set) for m in self._mesh_hierarchy)
        self._ufl_element = self[0].ufl_element()
        self._restriction_weights = None
        element = self.ufl_element()
        family = element.family()
        degree = element.degree()
        self._P0 = ((family == "OuterProductElement" and
>                    (element._A.family() == "Discontinuous Lagrange" and
                      element._B.family() == "Discontinuous Lagrange" and
                      degree == (0, 0))) or
                    (family == "Discontinuous Lagrange" and degree == 0))
E       AttributeError: _A

../../../firedrake/firedrake/mg/functionspace.py:40: AttributeError

--

Dr Eike Hermann Mueller
Research Associate (PostDoc)

Department of Mathematical Sciences
University of Bath
Bath BA2 7AY, United Kingdom

+44 1225 38 5803
e.mueller@bath.ac.uk
http://people.bath.ac.uk/em459/

On 8 Dec 2014, at 14:44, Lawrence Mitchell <lawrence.mitchell@imperial.ac.uk> wrote:


On 7 Dec 2014, at 19:11, Lawrence Mitchell <lawrence.mitchell@imperial.ac.uk> wrote:


On 7 Dec 2014, at 17:49, Eike Mueller <e.mueller@bath.ac.uk> wrote:

Dear firedrakers,

do the hierarchical meshes and function spaces currently only work in 2+1 dimension and not for 1+1? If I run the code below it works for dimension=3, but if I replace this by dimension=2 it crashes with

[0]PETSC ERROR: DMPlexGetCellRefiner_Internal() line 6777 in /Users/eikemueller/PostDocBath/EllipticSolvers/petsc/src/dm/impls/plex/plexrefine.c
  Unknown dimension 1 for cell refiner
--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 62.

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
--------------------------------------------------------------------------

I want to work in dimension=2+1, but having dimension=1+1 would be useful for testing.


There are two parts of this that won't work:

1. DMPlex doesn't know how to refine intervals: that's the error above.

I think this is easy to add, so can have a go.

2. I haven't added the necessary numbering magic and so forth for the generated interval mesh hierarchies.

If 1. is done, I think this should not be too difficult to add, but might take a little while.


I did this this morning.  The multigrid-automation branch (which will hopefully merge soon) adds support for grid transfers on refined intervals (and DG0 on extruded intervals).  You'll need (until it's merged upstream) the mapdes/petsc branch dmplex-1d-refinement if you want to try things.

I would be inclined to wait a bit until things are merged and settled down :).

Lawrence
_______________________________________________
firedrake mailing list
firedrake@imperial.ac.uk
https://mailman.ic.ac.uk/mailman/listinfo/firedrake