Loading...
Searching...
No Matches
MeshHierarchy.h
// Copyright (C) 2015 Chris Richardson
//
// This file is part of DOLFIN.
//
// DOLFIN is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// DOLFIN is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
//
#ifndef __MESH_HIERARCHY_H
#define __MESH_HIERARCHY_H
#include<vector>
#include<memory>
#include<dolfin/log/log.h>
namespace dolfin
{
class Mesh;
class MeshRelation;
template <typename T> class MeshFunction;
class MeshHierarchy
{
public:
MeshHierarchy()
{}
explicit MeshHierarchy(std::shared_ptr<const Mesh> mesh)
: _meshes(1, mesh), _parent(NULL), _relation(NULL)
{}
~MeshHierarchy()
{}
unsigned int size() const
{ return _meshes.size(); }
std::shared_ptr<const Mesh> operator[](int i) const
{
if (i < 0)
i += _meshes.size();
dolfin_assert(i < (int)_meshes.size());
return _meshes[i];
}
std::shared_ptr<const Mesh> finest() const
{ return _meshes.back(); }
std::shared_ptr<const Mesh> coarsest() const
{ return _meshes.front(); }
std::shared_ptr<const MeshHierarchy> refine
(const MeshFunction<bool>& markers) const;
std::shared_ptr<const MeshHierarchy> unrefine() const
{ return _parent; }
std::shared_ptr<const MeshHierarchy> coarsen
(const MeshFunction<bool>& markers) const;
std::vector<std::size_t> weight() const;
std::shared_ptr<Mesh> rebalance() const;
private:
// Basic store of mesh pointers for easy access
std::vector<std::shared_ptr<const Mesh> > _meshes;
// Parent MeshHierarchy
std::shared_ptr<const MeshHierarchy> _parent;
// Intermesh relationship data, i.e. parent cell, facet, vertex mappings
// instead of using MeshData
std::shared_ptr<const MeshRelation> _relation;
};
}
#endif
dolfin::MeshFunction
Definition MeshFunction.h:58
dolfin::MeshHierarchy::MeshHierarchy
MeshHierarchy()
Constructor.
Definition MeshHierarchy.h:38
dolfin::MeshHierarchy::operator[]
std::shared_ptr< const Mesh > operator[](int i) const
Get Mesh i, in range [0:size()] where 0 is the coarsest Mesh.
Definition MeshHierarchy.h:55
dolfin::MeshHierarchy::weight
std::vector< std::size_t > weight() const
Definition MeshHierarchy.cpp:141
dolfin::MeshHierarchy::rebalance
std::shared_ptr< Mesh > rebalance() const
Rebalance across processes.
Definition MeshHierarchy.cpp:164
dolfin::MeshHierarchy::refine
std::shared_ptr< const MeshHierarchy > refine(const MeshFunction< bool > &markers) const
Definition MeshHierarchy.cpp:39
dolfin::MeshHierarchy::~MeshHierarchy
~MeshHierarchy()
Destructor.
Definition MeshHierarchy.h:47
dolfin::MeshHierarchy::coarsest
std::shared_ptr< const Mesh > coarsest() const
Get the coarsest mesh of the MeshHierarchy.
Definition MeshHierarchy.h:68
dolfin::MeshHierarchy::unrefine
std::shared_ptr< const MeshHierarchy > unrefine() const
Definition MeshHierarchy.h:79
dolfin::MeshHierarchy::size
unsigned int size() const
Number of meshes.
Definition MeshHierarchy.h:51
dolfin::MeshHierarchy::coarsen
std::shared_ptr< const MeshHierarchy > coarsen(const MeshFunction< bool > &markers) const
Coarsen finest mesh by one level, based on markers (level n->n).
Definition MeshHierarchy.cpp:64
dolfin::MeshHierarchy::finest
std::shared_ptr< const Mesh > finest() const
Get the finest mesh of the MeshHierarchy.
Definition MeshHierarchy.h:64
dolfin::MeshHierarchy::MeshHierarchy
MeshHierarchy(std::shared_ptr< const Mesh > mesh)
Constructor with initial mesh.
Definition MeshHierarchy.h:42
dolfin::MeshRelation
Definition MeshRelation.h:35
dolfin::Mesh
Definition Mesh.h:84
dolfin
Definition adapt.h:30