17 #ifndef __DUDLEY_DOMAIN_H__ 18 #define __DUDLEY_DOMAIN_H__ 48 #include <dudley/Dudley.h> 49 #include <dudley/ElementFile.h> 50 #include <dudley/NodeFile.h> 51 #include <dudley/Util.h> 53 #include <escript/AbstractContinuousDomain.h> 54 #include <escript/FunctionSpace.h> 55 #include <escript/FunctionSpaceFactory.h> 58 #include <paso/SystemMatrixPattern.h> 60 #ifdef ESYS_HAVE_TRILINOS 61 #include <trilinoswrap/types.h> 70 typedef std::map<std::string, int>
TagMap;
103 const std::string& filename,
bool optimize);
114 const std::string& filename,
int numDim,
129 double l1,
bool optimize,
146 double l0,
double l1,
double l2,
251 void write(
const std::string& fileName)
const;
264 void dump(
const std::string& fileName)
const;
413 virtual std::pair<int,dim_t>
getDataShape(
int functionSpaceCode)
const;
428 virtual void setTagMap(
const std::string& name,
int tag);
435 virtual int getTag(
const std::string& name)
const;
464 int functionSpaceType_target)
const;
485 int functionSpaceType_target)
const;
513 virtual void setToIntegrals(std::vector<escript::DataTypes::real_t>& integrals,
515 virtual void setToIntegrals(std::vector<escript::DataTypes::cplx_t>& integrals,
538 bool symmetry)
const;
606 int column_blocksize,
644 virtual void setTags(
int functionSpaceType,
int newTag,
660 virtual bool canTag(
int functionSpaceCode)
const;
671 const boost::python::tuple& filter)
const;
674 const std::vector<index_t>& nodeDistribution);
680 template<
typename Scalar>
684 #ifdef ESYS_HAVE_PASO 689 #ifdef ESYS_HAVE_TRILINOS 690 esys_trilinos::const_TrilinosGraph_ptr getTrilinosGraph()
const {
692 return m_nodes->getTrilinosGraph();
708 #ifdef ESYS_HAVE_PASO 720 const std::string& defaultType,
bool full)
const;
723 const std::string& defaultType)
const;
739 #ifdef ESYS_HAVE_PASO 749 #endif // __DUDLEY_DOMAIN_H__ void createMappings(const std::vector< index_t > &dofDistribution, const std::vector< index_t > &nodeDistribution)
Definition: DudleyDomain.cpp:124
AbstractContinuousDomain, base class for continuous domains.
Definition: AbstractContinuousDomain.h:45
virtual std::string showTagNames() const
Returns all tag names in a single string sperated by commas.
Definition: DudleyDomain.cpp:1928
Definition: FunctionSpace.h:34
bool commonFunctionSpace(const std::vector< int > &fs, int &resultcode) const
given a vector of FunctionSpace typecodes, pass back a code which then can all be interpolated to...
Definition: DudleyDomain.cpp:1552
virtual escript::JMPI getMPI() const
returns a reference to the MPI information wrapper for this domain
Definition: DudleyDomain.h:217
virtual escript::Data getSize() const
returns the element size
Definition: DudleyDomain.cpp:1810
virtual signed char preferredInterpolationOnDomain(int functionSpaceType_source, int functionSpaceType_target) const
Preferred direction of interpolation. If you really need to test for a particular direction...
Definition: DudleyDomain.cpp:1694
double l2(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global L2 norm of x
Definition: PasoUtil.cpp:501
void setElements(ElementFile *elements)
replaces the element file by elements
Definition: DudleyDomain.cpp:106
virtual escript::Data getX() const
returns locations in the FEM nodes
Definition: DudleyDomain.cpp:1800
virtual int getFunctionOnContactZeroCode() const
Return a FunctionOnContactZero code.
Definition: DudleyDomain.cpp:839
Definition: DudleyDomain.h:74
void setFunctionSpaceTypeNames()
Build the table of function space type names.
Definition: DudleyDomain.cpp:791
virtual escript::Data getNormal() const
returns boundary normals at the quadrature point on the face elements
Definition: DudleyDomain.cpp:1805
static FunctionSpaceNamesMapType m_functionSpaceTypeNames
Definition: DudleyDomain.h:744
std::string m_name
domain description
Definition: DudleyDomain.h:728
virtual dim_t getNumDataPointsGlobal() const
Return the number of data points summed across all MPI processes.
Definition: DudleyDomain.cpp:877
boost::shared_ptr< AbstractDomain > Domain_ptr
Definition: AbstractDomain.h:36
NodeFile * m_nodes
the table of the nodes
Definition: DudleyDomain.h:730
escript::JMPI m_mpiInfo
MPI information.
Definition: DudleyDomain.h:726
virtual int getFunctionCode() const
Return a function FunctionSpace code.
Definition: DudleyDomain.cpp:819
virtual int getReducedFunctionOnBoundaryCode() const
Return a function on boundary with reduced integration order FunctionSpace code.
Definition: DudleyDomain.cpp:834
SystemMatrixType
Definition: DudleyDomain.h:72
void distributeByRankOfDOF(const IndexVector &distribution)
Definition: Mesh_distributeByRankOfDOF.cpp:24
virtual bool supportsContactElements() const
Definition: DudleyDomain.h:667
virtual std::pair< int, dim_t > getDataShape(int functionSpaceCode) const
Return the number of data points per sample, and the number of samples as a pair. ...
Definition: DudleyDomain.cpp:886
virtual std::string functionSpaceTypeAsString(int functionSpaceType) const
Return a description for the given function space type code.
Definition: DudleyDomain.cpp:773
void write(const std::string &fileName) const
writes the current mesh to a file with the given name in the fly file format.
Definition: dudley/src/Mesh_write.cpp:83
void prepare(bool optimize)
prepares the mesh for further use
Definition: DudleyDomain.cpp:2052
virtual bool probeInterpolationOnDomain(int functionSpaceType_source, int functionSpaceType_target) const
True if interpolation is possible from source to target.
Definition: DudleyDomain.cpp:1636
ElementFile * m_faceElements
the table of face elements
Definition: DudleyDomain.h:734
virtual void setToX(escript::Data &arg) const
copies the location of data points into arg. The domain of arg has to match this. has to be implement...
Definition: DudleyDomain.cpp:1248
void markNodes(std::vector< short > &mask, index_t offset) const
Definition: DudleyDomain.cpp:150
void setFaceElements(ElementFile *elements)
replaces the face element file by elements
Definition: DudleyDomain.cpp:112
NodeFile * getNodes() const
returns a pointer to this domain's node file
Definition: DudleyDomain.h:175
std::vector< index_t > IndexVector
Definition: DataTypes.h:62
virtual StatusType getStatus() const
Returns a status indicator of the domain. The status identifier should be unique over the live time i...
Definition: DudleyDomain.cpp:2013
DudleyDomain(const std::string &name, int numDim, escript::JMPI jmpi)
Constructor for DudleyDomain.
Definition: DudleyDomain.cpp:68
virtual void setToIntegrals(std::vector< escript::DataTypes::real_t > &integrals, const escript::Data &arg) const
copies the integrals of the function defined by arg into integrals. arg has to be defined on this...
virtual int getTransportTypeId(int solver, int preconditioner, int package, bool symmetry) const
return the identifier of the transport problem type to be used when a particular solver, perconditioner, package and symmetric matrix is used.
Definition: DudleyDomain.cpp:1788
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:71
virtual void interpolateOnDomain(escript::Data &target, const escript::Data &source) const
interpolates data given on source onto target where source and target have to be given on the same do...
Definition: DudleyDomain.cpp:1057
virtual bool operator==(const escript::AbstractDomain &other) const
comparison operators
Definition: DudleyDomain.cpp:1711
void dump(const std::string &fileName) const
dumps the mesh to a file with the given name.
Definition: DudleyDomain.cpp:464
void setToIntegralsWorker(std::vector< Scalar > &integrals, const escript::Data &arg) const
Definition: DudleyDomain.cpp:1309
virtual void setToSize(escript::Data &out) const
copies the size of samples into out. The actual function space to be considered is defined by out...
Definition: DudleyDomain.cpp:1391
void updateTagList()
regenerates list of tags in use for node file and element files
Definition: DudleyDomain.cpp:2114
virtual bool ownSample(int fsCode, index_t id) const
Definition: DudleyDomain.cpp:1432
ElementFile * getPoints() const
returns a pointer to this domain's point (nodal) element file
Definition: DudleyDomain.h:211
ElementFile * m_points
the table of points (treated as elements of dimension 0)
Definition: DudleyDomain.h:736
std::vector< int > ShapeType
The shape of a single datapoint.
Definition: DataTypes.h:42
static dim_t M
Definition: SparseMatrix_saveHB.cpp:37
virtual int getContinuousFunctionCode() const
Return a continuous FunctionSpace code.
Definition: DudleyDomain.cpp:809
DudleyDomain implements the AbstractContinuousDomain interface for the Dudley library.
Definition: DudleyDomain.h:84
escript::ATP_ptr newTransportProblem(int blocksize, const escript::FunctionSpace &functionspace, int type) const
creates a TransportProblem
Definition: DudleyDomain.cpp:1505
virtual int getReducedFunctionCode() const
Return a function with reduced integration order FunctionSpace code.
Definition: DudleyDomain.cpp:824
virtual escript::Data randomFill(const escript::DataTypes::ShapeType &shape, const escript::FunctionSpace &what, long seed, const boost::python::tuple &filter) const
Fills the data object with filtered random values.
Definition: DudleyDomain.cpp:2038
void writeElementInfo(std::ostream &stream, const ElementFile *e, const std::string &defaultType) const
Definition: dudley/src/Mesh_write.cpp:32
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition: SystemMatrixPattern.h:39
boost::shared_ptr< AbstractTransportProblem > ATP_ptr
Definition: AbstractTransportProblem.h:160
static escript::Domain_ptr load(const std::string &filename)
recovers domain from a dump file
Definition: dudley/src/DomainFactory.cpp:365
virtual void addPDEToTransportProblem(escript::AbstractTransportProblem &tp, escript::Data &source, const escript::Data &M, const escript::Data &A, const escript::Data &B, const escript::Data &C, const escript::Data &D, const escript::Data &X, const escript::Data &Y, const escript::Data &d, const escript::Data &y, const escript::Data &d_contact, const escript::Data &y_contact, const escript::Data &d_dirac, const escript::Data &y_dirac) const
adds a PDE onto a transport problem
Definition: DudleyDomain.cpp:1014
virtual int getApproximationOrder(int functionSpaceCode) const
returns the approximation order used for a function space functionSpaceCode
Definition: DudleyDomain.cpp:2018
void printElementInfo(const ElementFile *e, const std::string &title, const std::string &defaultType, bool full) const
Definition: dudley/src/Mesh_write.cpp:50
virtual bool probeInterpolationAcross(int functionSpaceType_source, const escript::AbstractDomain &targetDomain, int functionSpaceType_target) const
determines whether interpolation from source to target is possible.
Definition: DudleyDomain.cpp:1705
virtual void interpolateAcross(escript::Data &target, const escript::Data &source) const
interpolates data given on source onto target where source and target are given on different domains...
Definition: DudleyDomain.cpp:1286
virtual bool operator!=(const escript::AbstractDomain &other) const
Return true if given domains are not equal.
Definition: DudleyDomain.cpp:1723
virtual bool onMasterProcessor() const
returns true if on MPI processor 0, else false
Definition: DudleyDomain.h:241
void createColoring(const index_t *dofMap)
tries to reduce the number of colours for all element files
Definition: DudleyDomain.cpp:2098
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:59
virtual int getDiracDeltaFunctionsCode() const
Return a DiracDeltaFunctions code.
Definition: DudleyDomain.cpp:869
static escript::Domain_ptr read(escript::JMPI mpiInfo, const std::string &filename, bool optimize)
reads a mesh from a fly file. For MPI parallel runs fans out the mesh to multiple processes...
Definition: dudley/src/Mesh_read.cpp:149
void optimizeDOFDistribution(IndexVector &distribution)
Definition: dudley/src/Mesh_optimizeDOFDistribution.cpp:63
ElementFile * getElements() const
returns a pointer to this domain's element file
Definition: DudleyDomain.h:187
virtual int getReducedSolutionCode() const
Return a ReducedSolution code.
Definition: DudleyDomain.cpp:864
virtual int getReducedContinuousFunctionCode() const
Return a continuous on reduced order nodes FunctionSpace code.
Definition: DudleyDomain.cpp:814
void relabelElementNodes(const index_t *newNode, index_t offset)
Definition: DudleyDomain.cpp:157
Definition: DudleyDomain.h:75
virtual int getFunctionOnContactOneCode() const
Return a FunctionOnContactOne code.
Definition: DudleyDomain.cpp:849
Definition: DudleyDomain.h:73
void optimizeElementOrdering()
redistributes elements to minimize communication during assemblage
Definition: DudleyDomain.cpp:2106
int StatusType
Definition: AbstractDomain.h:48
virtual void addPDEToSystem(escript::AbstractSystemMatrix &mat, escript::Data &rhs, const escript::Data &A, const escript::Data &B, const escript::Data &C, const escript::Data &D, const escript::Data &X, const escript::Data &Y, const escript::Data &d, const escript::Data &y, const escript::Data &d_contact, const escript::Data &y_contact, const escript::Data &d_dirac, const escript::Data &y_dirac) const
adds a PDE onto the stiffness matrix mat and a rhs
Definition: DudleyDomain.cpp:944
virtual bool isCellOriented(int functionSpaceCode) const
returns true if data on this domain and a function space of type functionSpaceCode has to considered ...
Definition: DudleyDomain.cpp:1532
Data represents a collection of datapoints.
Definition: Data.h:63
virtual int getTag(const std::string &name) const
Return the tag key for tag name.
Definition: DudleyDomain.cpp:1912
static escript::Domain_ptr create2D(dim_t NE0, dim_t NE1, double l0, double l1, bool optimize, escript::JMPI jmpi)
Creates a 2-dimensional rectangular domain.
Definition: Mesh_tri3.cpp:25
Definition: dudley/src/ElementFile.h:51
std::map< std::string, int > TagMap
Definition: DudleyDomain.h:70
A suite of factory methods for creating 2D and 3D dudley domains.
Definition: dudley/src/Assemble.h:31
ElementFile * getFaceElements() const
returns a pointer to this domain's face element file
Definition: DudleyDomain.h:199
escript::ASM_ptr newSystemMatrix(int row_blocksize, const escript::FunctionSpace &row_functionspace, int column_blocksize, const escript::FunctionSpace &column_functionspace, int type) const
creates a stiffness matrix and initializes it with zeros
Definition: DudleyDomain.cpp:1452
virtual int getReducedFunctionOnContactZeroCode() const
Return a FunctionOnContactZero code with reduced integration order.
Definition: DudleyDomain.cpp:844
virtual void setTags(int functionSpaceType, int newTag, const escript::Data &mask) const
assigns new tag newTag to all samples of functionspace with a positive value of mask for any its samp...
Definition: DudleyDomain.cpp:1879
std::map< int, std::string > FunctionSpaceNamesMapType
Definition: DudleyDomain.h:387
void Print_Mesh_Info(bool full=false) const
Definition: dudley/src/Mesh_write.cpp:139
virtual int getMPISize() const
returns the number of processors used for this domain
Definition: DudleyDomain.h:223
virtual void MPIBarrier() const
If compiled for MPI then execute an MPI_Barrier, else do nothing.
Definition: DudleyDomain.cpp:99
int MPI_Comm
Definition: EsysMPI.h:41
virtual void setToNormal(escript::Data &out) const
copies the surface normals at data points into out. The actual function space to be considered is def...
Definition: DudleyDomain.cpp:1267
virtual std::string getDescription() const
Return a description for this domain.
Definition: DudleyDomain.cpp:768
Definition: DudleyDomain.h:76
virtual void setToGradient(escript::Data &grad, const escript::Data &arg) const
copies the gradient of arg into grad. The actual function space to be considered for the gradient is ...
Definition: DudleyDomain.cpp:1344
int getTagFromSampleNo(int functionSpaceType, index_t sampleNo) const
Return the tag key for the given sample number.
Definition: DudleyDomain.cpp:1849
virtual bool isValidFunctionSpaceType(int functionSpaceType) const
Returns true if the given integer is a valid function space type for this domain. ...
Definition: DudleyDomain.cpp:784
virtual void setNewX(const escript::Data &arg)
assigns new location to the domain
Definition: DudleyDomain.cpp:1419
virtual int getNumberOfTagsInUse(int functionSpaceCode) const
returns the number of tags in use and a pointer to an array with the number of tags in use ...
Definition: DudleyDomain.cpp:1941
virtual int getSystemMatrixTypeId(const boost::python::object &options) const
return the identifier of the matrix type to be used for the global stiffness matrix when a particular...
Definition: DudleyDomain.cpp:1728
Give a short description of what AbstractTransportProblem does.
Definition: AbstractTransportProblem.h:43
static escript::Domain_ptr create3D(dim_t NE0, dim_t NE1, dim_t NE2, double l0, double l1, double l2, bool optimize, escript::JMPI jmpi)
Creates a 3-dimensional rectangular domain.
Definition: Mesh_tet4.cpp:27
virtual const int * borrowListOfTagsInUse(int functionSpaceCode) const
Definition: DudleyDomain.cpp:1963
void setPoints(ElementFile *elements)
replaces the point element file by elements
Definition: DudleyDomain.cpp:118
virtual void setTagMap(const std::string &name, int tag)
sets a map from a clear tag name to a tag key
Definition: DudleyDomain.cpp:1907
virtual void addPDEToRHS(escript::Data &rhs, const escript::Data &X, const escript::Data &Y, const escript::Data &y, const escript::Data &y_contact, const escript::Data &y_dirac) const
adds a PDE onto the stiffness matrix mat and a rhs
Definition: DudleyDomain.cpp:991
TagMap m_tagMap
the tag map mapping names to tag keys
Definition: DudleyDomain.h:738
virtual int getSolutionCode() const
Return a Solution code.
Definition: DudleyDomain.cpp:859
Base class for escript system matrices.
Definition: AbstractSystemMatrix.h:42
MPI_Comm getMPIComm() const
get the communicator for this domain. Returns an integer on non-MPI builds Routine must be implemente...
Definition: DudleyDomain.h:243
boost::shared_ptr< AbstractSystemMatrix > ASM_ptr
Definition: AbstractSystemMatrix.h:32
void optimizeDOFLabeling(const IndexVector &distribution)
optimizes the labeling of the DOFs on each processor
Definition: Mesh_optimizeDOFLabeling.cpp:25
Definition: dudley/src/NodeFile.h:38
const index_t * borrowSampleReferenceIDs(int functionSpaceType) const
Return the reference number of the given sample number.
Definition: DudleyDomain.cpp:1815
Base class for all escript domains.
Definition: AbstractDomain.h:45
virtual int getDim() const
Returns the spatial dimension of the domain.
Definition: DudleyDomain.h:392
ElementFile * m_elements
the table of the elements
Definition: DudleyDomain.h:732
virtual int getMPIRank() const
returns the number MPI rank of this processor
Definition: DudleyDomain.h:229
virtual bool isValidTagName(const std::string &name) const
Returns true if name is a defined tag name.
Definition: DudleyDomain.cpp:1923
virtual int getReducedFunctionOnContactOneCode() const
Return a FunctionOnContactOne code with reduced integration order.
Definition: DudleyDomain.cpp:854
virtual void addPDEToLumpedSystem(escript::Data &mat, const escript::Data &D, const escript::Data &d, const escript::Data &d_dirac, bool useHRZ) const
adds a PDE onto the lumped stiffness matrix matrix
Definition: DudleyDomain.cpp:977
int numDim
number of spatial dimensions
Definition: dudley/src/NodeFile.h:145
~DudleyDomain()
Destructor for DudleyDomain.
Definition: DudleyDomain.cpp:91
virtual int getFunctionOnBoundaryCode() const
Return a function on boundary FunctionSpace code.
Definition: DudleyDomain.cpp:829
index_t dim_t
Definition: DataTypes.h:64
void resolveNodeIds()
Definition: Mesh_resolveNodeIds.cpp:22
static escript::Domain_ptr readGmsh(escript::JMPI mpiInfo, const std::string &filename, int numDim, bool optimize)
reads a gmsh mesh file.
Definition: dudley/src/Mesh_readGmsh.cpp:28
virtual bool canTag(int functionSpaceCode) const
Checks if this domain allows tags for the specified functionSpace code.
Definition: DudleyDomain.cpp:1998