escript Revision_
MultiBrick.h
Go to the documentation of this file.
1
2/*****************************************************************************
3*
4* Copyright (c) 2003-2020 by The University of Queensland
5* http://www.uq.edu.au
6*
7* Primary Business: Queensland, Australia
8* Licensed under the Apache License, version 2.0
9* http://www.apache.org/licenses/LICENSE-2.0
10*
11* Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12* Development 2012-2013 by School of Earth Sciences
13* Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
14* Development from 2019 by School of Earth and Environmental Sciences
15**
16*****************************************************************************/
17
18#ifndef __RIPLEY_MULTIBRICK_H__
19#define __RIPLEY_MULTIBRICK_H__
20
21#include <ripley/Brick.h>
22
23namespace ripley {
24
30{
31 template<class Scalar> friend class DefaultAssembler3D;
32 friend class WaveAssembler3D;
33 friend class LameAssembler3D;
34public:
35
43 MultiBrick(dim_t n0, dim_t n1, dim_t n2, double x0, double y0, double z0,
44 double x1, double y1, double z1, int d0=-1, int d1=-1, int d2=-1,
45 const std::vector<double>& points = std::vector<double>(),
46 const std::vector<int>& tags = std::vector<int>(),
47 const TagMap& tagnamestonums = TagMap(),
49 unsigned int subdivisions = 1
50 );
51
57
63 virtual void interpolateAcross(escript::Data& target,
64 const escript::Data& source) const;
65
71 void validateInterpolationAcross(int fsType_source,
72 const escript::AbstractDomain& domain, int fsType_target) const;
73
78 virtual std::string getDescription() const;
79
83 virtual bool operator==(const escript::AbstractDomain& other) const;
84
90 void dump(const std::string& filename) const;
91
94 virtual void readNcGrid(escript::Data& out, std::string filename,
95 std::string varname, const ReaderParameters& params) const;
96
99 virtual void readBinaryGrid(escript::Data& out, std::string filename,
100 const ReaderParameters& params) const;
101
102 virtual void readBinaryGridFromZipped(escript::Data& out, std::string filename,
103 const ReaderParameters& params) const;
104
107 virtual void writeBinaryGrid(const escript::Data& in,
108 std::string filename,
109 int byteOrder, int dataType) const;
115 const dim_t* borrowSampleReferenceIDs(int fsType) const;
116
121 virtual bool ownSample(int fsType, index_t id) const;
122
129 virtual void setToNormal(escript::Data& out) const;
130
136 virtual void setToSize(escript::Data& out) const;
137
143 virtual void Print_Mesh_Info(const bool full=false) const;
144
149 virtual unsigned int getNumSubdivisionsPerElement() const { return m_subdivisions; }
150
156 virtual const dim_t* getNumFacesPerBoundary() const { return m_faceCount; }
157
162 virtual IndexVector getNodeDistribution() const { return m_nodeDistribution; }
163
168 virtual const int* getNumSubdivisionsPerDim() const { return m_NX; }
169
175 virtual RankVector getOwnerVector(int fsType) const;
176
177protected:
178 virtual IndexVector getDiagonalIndices(bool upperOnly) const;
179 virtual void interpolateNodesToNodesFiner(const escript::Data& source, escript::Data& target, const MultiBrick& other) const;
180 virtual void interpolateNodesToElementsFiner(const escript::Data& source, escript::Data& target, const MultiBrick& other) const;
181
182 virtual void interpolateElementsToElementsCoarser(const escript::Data& source, escript::Data& target, const MultiBrick& other) const;
183 virtual void interpolateElementsToElementsFiner(const escript::Data& source, escript::Data& target, const MultiBrick& other) const;
184
185 virtual void interpolateReducedToElementsFiner(const escript::Data& source, escript::Data& target, const MultiBrick& other) const;
186 virtual void interpolateReducedToReducedFiner(const escript::Data& source, escript::Data& target, const MultiBrick& other) const;
187
188 virtual void populateSampleIds();
189 virtual std::vector<IndexVector> getConnections(bool includeShared) const;
190
191 dim_t findNode(const double *coords) const;
192
193 const unsigned int m_subdivisions;
194private:
195 template <typename S>
196 void interpolateNodesToNodesFinerWorker(const escript::Data& source, escript::Data& target, const MultiBrick& other, S sentinel) const;
197 template <typename S>
198 void interpolateNodesToElementsFinerWorker(const escript::Data& source, escript::Data& target, const MultiBrick& other, S sentinel) const;
199
200 template <typename S>
201 void interpolateElementsToElementsCoarserWorker(const escript::Data& source, escript::Data& target, const MultiBrick& other, S sentinel) const;
202 template <typename S>
203 void interpolateElementsToElementsFinerWorker(const escript::Data& source, escript::Data& target, const MultiBrick& other, S sentinel) const;
204
205 template <typename S>
206 void interpolateReducedToElementsFinerWorker(const escript::Data& source, escript::Data& target, const MultiBrick& other, S sentinel) const;
207 template <typename S>
208 void interpolateReducedToReducedFinerWorker(const escript::Data& source, escript::Data& target, const MultiBrick& other, S sentinel) const;
209
210
211};
212
213
214
215
216} // end of namespace ripley
217
218#endif // __RIPLEY_MULTIBRICK_H__
219
#define S(_J_, _I_)
Definition ShapeFunctions.cpp:122
Base class for all escript domains.
Definition AbstractDomain.h:51
Data represents a collection of datapoints.
Definition Data.h:64
Brick is the 3-dimensional implementation of a RipleyDomain.
Definition ripley/src/Brick.h:35
Definition ripley/src/DefaultAssembler3D.h:26
Definition LameAssembler3D.h:26
Brick is the 3-dimensional implementation of a RipleyDomain.
Definition MultiBrick.h:30
virtual const int * getNumSubdivisionsPerDim() const
returns the number of spatial subdivisions in each dimension
Definition MultiBrick.h:168
virtual unsigned int getNumSubdivisionsPerElement() const
returns the number of times each root element has been subdivided
Definition MultiBrick.h:149
virtual IndexVector getNodeDistribution() const
returns the node distribution vector
Definition MultiBrick.h:162
const unsigned int m_subdivisions
Definition MultiBrick.h:193
virtual const dim_t * getNumFacesPerBoundary() const
returns the number of face elements in the order (left,right,bottom,top,front,back) on current MPI ra...
Definition MultiBrick.h:156
Definition ripley/src/WaveAssembler3D.h:26
index_t dim_t
Definition DataTypes.h:66
int index_t
type for array/matrix indices used both globally and on each rank
Definition DataTypes.h:61
boost::shared_ptr< SubWorld > SubWorld_ptr
Definition SubWorld.h:147
Definition ripley/src/AbstractAssembler.h:26
std::vector< index_t > IndexVector
Definition Ripley.h:44
escript::Data readBinaryGrid(std::string filename, escript::FunctionSpace fs, const object &pyShape, double fill, int byteOrder, int dataType, const object &pyFirst, const object &pyNum, const object &pyMultiplier, const object &pyReverse)
Definition ripleycpp.cpp:63
escript::Data readNcGrid(std::string filename, std::string varname, escript::FunctionSpace fs, const object &pyShape, double fill, const object &pyFirst, const object &pyNum, const object &pyMultiplier, const object &pyReverse)
Definition ripleycpp.cpp:117
std::map< std::string, int > TagMap
Definition Ripley.h:47
std::vector< int > RankVector
Definition Ripley.h:46
escript::Data readBinaryGridFromZipped(std::string filename, escript::FunctionSpace fs, const object &pyShape, double fill, int byteOrder, int dataType, const object &pyFirst, const object &pyNum, const object &pyMultiplier, const object &pyReverse)
Definition ripleycpp.cpp:88
#define RIPLEY_DLL_API
Definition ripley/src/system_dep.h:21
Structure that wraps parameters for the grid reading routines.
Definition ripley/src/RipleyDomain.h:70