aslDataWithGhostNodes.h
Go to the documentation of this file.
/*
* Advanced Simulation Library <http://asl.org.il>
*
* Copyright 2015 Avtech Scientific <http://avtechscientific.com>
*
*
* This file is part of Advanced Simulation Library (ASL).
*
* ASL is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, version 3 of the License.
*
* ASL 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with ASL. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef ASLDATAWITHGHOSTNODES_H
#define ASLDATAWITHGHOSTNODES_H
#include "aslDataWrapper.h"
#include <iostream>
#include <fstream>
using namespace std;
namespace asl
{
class AbstractDataWithGhostNodes: public AbstractData
{
protected:
Block internalBlock;
unsigned int ghostBorder;
bool bordersDataAcces;
inline AbstractDataWithGhostNodes();
inline AbstractDataWithGhostNodes(const Block & b, int nGN = 1, bool bDA = true);
public:
inline int getSubContainerOffset() const;
inline unsigned int getSubContainerSize() const;
inline const Block & getInternalBlock() const;
inline const unsigned int getGhostBorder() const;
virtual acl::VectorOfElements getSubContainer() = 0;
};
template <typename V> class DataWithGhostNodes: public AbstractDataWithGhostNodes
{
private:
DataWrapper<V> dw;
public:
inline DataWithGhostNodes();
inline DataWithGhostNodes(const Block & b, int nGN = 1, bool bDA = true);
inline DataWithGhostNodes(DataWrapper<V> & d, int nGN = 1);
virtual acl::VectorOfElements getSubContainer();
virtual const acl::VectorOfElements getEContainer();
virtual const acl::VectorOfElementsData getDContainer() const;
inline void setContainer(const V & cont);
inline V & getContainer();
};
typedef DataWithGhostNodes<acl::VectorOfElements> DataWithGhostNodesACL;
typedef DataWithGhostNodes<acl::VectorOfElementsData> DataWithGhostNodesACLData;
// typedef DataWithGhostNodes<vector<MemElement> > DataWithGhostNodesMem;
typedef shared_ptr<DataWithGhostNodesACL> SPDataWithGhostNodesACL;
typedef shared_ptr<DataWithGhostNodesACLData> SPDataWithGhostNodesACLData;
typedef shared_ptr<AbstractDataWithGhostNodes> SPAbstractDataWithGhostNodes;
SPDataWithGhostNodesACLData clone(SPDataWithGhostNodesACLData d);
SPDataWithGhostNodesACLData clone(SPDataWithGhostNodesACLData d, unsigned int n);
template <typename V> inline std::shared_ptr<DataWithGhostNodes<V>>
resizeGhostNodes(std::shared_ptr<DataWithGhostNodes<V>> d, unsigned int newGN);
//--------------------------- Implementation --------------------------
AbstractDataWithGhostNodes::AbstractDataWithGhostNodes()
{
}
AbstractDataWithGhostNodes::AbstractDataWithGhostNodes(const Block & b, int nGN,bool bDA):
AbstractData (offset(b, nGN)),
internalBlock(b),
ghostBorder(nGN),
bordersDataAcces(bDA)
{
}
template <typename V> DataWithGhostNodes<V>::DataWithGhostNodes()
{
}
template <typename V> DataWithGhostNodes<V>::DataWithGhostNodes(const Block & b, int nGN,bool bDA):
AbstractDataWithGhostNodes (b,nGN,bDA),
dw(offset(b, nGN))
{
}
template <typename V> DataWithGhostNodes<V>::DataWithGhostNodes(DataWrapper<V> & d, int nGN):
AbstractDataWithGhostNodes (offset(d.getBlock(), -nGN), nGN, true),
dw(d)
{
}
const Block & AbstractDataWithGhostNodes::getInternalBlock() const
{
return internalBlock;
}
const unsigned int AbstractDataWithGhostNodes::getGhostBorder() const
{
return ghostBorder;
}
inline int AbstractDataWithGhostNodes::getSubContainerOffset() const
{
Block b(offset(internalBlock, ghostBorder));
int nD(b.getSize().getSize());
return b.c2i(AVec<int>(nD,ghostBorder));
}
inline unsigned int AbstractDataWithGhostNodes::getSubContainerSize() const
{
const Block b(offset(internalBlock, ghostBorder));
int nD(b.getSize().getSize());
int s(b.c2i(b.getSize()-AVec<int>(nD,ghostBorder+1)) - b.c2i(AVec<int>(nD,ghostBorder))+1);
return s>0?s:0;
}
template <class V > inline void DataWithGhostNodes<V>::setContainer(const V & cont)
{
dw.setContainer (cont);
}
template <class V > inline V & DataWithGhostNodes<V>::getContainer()
{
return dw.getContainer();
}
template <typename V> inline std::shared_ptr<DataWithGhostNodes<V>>
resizeGhostNodes(std::shared_ptr<DataWithGhostNodes<V>> d, unsigned int newGN)
{
Block b(offset(d->getBlock(),newGN));
std::shared_ptr<DataWithGhostNodes<V>>
nd(new DataWithGhostNodes<V>(b, 0));
nd->setContainer(d->getContainer());
return nd;
}
} //asl
#endif // ASLDATAWITHGHOSTNODES_H
acl::VectorOfElementsData
The class represents several ElementData.
Definition: aclVectorOfElementsDef.h:57
acl::VectorOfElements
The class represents several Element.
Definition: aclVectorOfElementsDef.h:92
asl::AVec< int >
asl::AVec::getSize
const unsigned int & getSize() const
Definition: aslVectorsDynamicLength.h:171
asl::AbstractData
Definition: aslDataWrapper.h:53
asl::AbstractDataWithGhostNodes
Definition: aslDataWithGhostNodes.h:39
asl::AbstractDataWithGhostNodes::getSubContainerOffset
int getSubContainerOffset() const
Definition: aslDataWithGhostNodes.h:132
asl::AbstractDataWithGhostNodes::getInternalBlock
const Block & getInternalBlock() const
Definition: aslDataWithGhostNodes.h:122
asl::AbstractDataWithGhostNodes::ghostBorder
unsigned int ghostBorder
num of cells within the border
Definition: aslDataWithGhostNodes.h:43
asl::AbstractDataWithGhostNodes::getGhostBorder
const unsigned int getGhostBorder() const
Definition: aslDataWithGhostNodes.h:127
asl::AbstractDataWithGhostNodes::getSubContainerSize
unsigned int getSubContainerSize() const
Definition: aslDataWithGhostNodes.h:139
asl::AbstractDataWithGhostNodes::getSubContainer
virtual acl::VectorOfElements getSubContainer()=0
asl::AbstractDataWithGhostNodes::internalBlock
Block internalBlock
Definition: aslDataWithGhostNodes.h:41
asl::AbstractDataWithGhostNodes::bordersDataAcces
bool bordersDataAcces
flag represents whther the data acces on the borders is allowed
Definition: aslDataWithGhostNodes.h:45
asl::Block
Definition: aslBlocks.h:57
asl::Block::getSize
const DV & getSize() const
Definition: aslBlocks.h:208
asl::Block::c2i
int c2i(const Block::DV &c) const
defines convertion rule of 1D/2D/3D index i into container one
Definition: aslBlocks.h:189
asl::DataWithGhostNodes
Definition: aslDataWithGhostNodes.h:58
asl::DataWithGhostNodes::getSubContainer
virtual acl::VectorOfElements getSubContainer()
asl::DataWithGhostNodes::setContainer
void setContainer(const V &cont)
Definition: aslDataWithGhostNodes.h:147
asl::DataWithGhostNodes::getEContainer
virtual const acl::VectorOfElements getEContainer()
asl::DataWithGhostNodes::getContainer
V & getContainer()
Definition: aslDataWithGhostNodes.h:152
asl::DataWithGhostNodes::getDContainer
virtual const acl::VectorOfElementsData getDContainer() const
asl::DataWithGhostNodes::DataWithGhostNodes
DataWithGhostNodes()
Definition: aslDataWithGhostNodes.h:106
asl::DataWrapper
Class defines a folding rule into a 1D/2D/3D bulk.
Definition: aslDataWrapper.h:77
asl::nD
const unsigned int nD(const Block &b)
Definition: aslBlocks.h:220
asl::offset
const Block offset(const Block &bl, int a=1)
asl::clone
SPDataWithGhostNodesACLData clone(SPDataWithGhostNodesACLData d, unsigned int n)
asl
Advanced Simulation Library.
Definition: aslDataInc.h:31
asl::DataWithGhostNodesACLData
DataWithGhostNodes< acl::VectorOfElementsData > DataWithGhostNodesACLData
Definition: aslGenerators.h:45
asl::resizeGhostNodes
std::shared_ptr< DataWithGhostNodes< V > > resizeGhostNodes(std::shared_ptr< DataWithGhostNodes< V >> d, unsigned int newGN)
Definition: aslDataWithGhostNodes.h:158
asl::SPAbstractDataWithGhostNodes
std::shared_ptr< AbstractDataWithGhostNodes > SPAbstractDataWithGhostNodes
Definition: aslGenerators.h:50
asl::DataWithGhostNodesACL
DataWithGhostNodes< acl::VectorOfElements > DataWithGhostNodesACL
Definition: aslGenerators.h:48
asl::SPDataWithGhostNodesACL
std::shared_ptr< DataWithGhostNodesACL > SPDataWithGhostNodesACL
Definition: aslGenerators.h:49
asl::SPDataWithGhostNodesACLData
std::shared_ptr< DataWithGhostNodesACLData > SPDataWithGhostNodesACLData
Definition: aslGenerators.h:47
aslDataWrapper.h