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;
535 bool symmetry)
const;
603 int column_blocksize,
641 virtual void setTags(
int functionSpaceType,
int newTag,
657 virtual bool canTag(
int functionSpaceCode)
const;
668 const boost::python::tuple& filter)
const;
671 const std::vector<index_t>& nodeDistribution);
677 #ifdef ESYS_HAVE_PASO 682 #ifdef ESYS_HAVE_TRILINOS 683 esys_trilinos::const_TrilinosGraph_ptr getTrilinosGraph()
const {
685 return m_nodes->getTrilinosGraph();
701 #ifdef ESYS_HAVE_PASO 713 const std::string& defaultType,
bool full)
const;
716 const std::string& defaultType)
const;
732 #ifdef ESYS_HAVE_PASO 742 #endif // __DUDLEY_DOMAIN_H__ void createMappings(const std::vector< index_t > &dofDistribution, const std::vector< index_t > &nodeDistribution)
Definition: DudleyDomain.cpp:110
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:1538
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:1162
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:1420
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:1304
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:92
virtual escript::Data getX() const
returns locations in the FEM nodes
Definition: DudleyDomain.cpp:1410
virtual int getFunctionOnContactZeroCode() const
Return a FunctionOnContactZero code.
Definition: DudleyDomain.cpp:523
Definition: DudleyDomain.h:74
void setFunctionSpaceTypeNames()
Build the table of function space type names.
Definition: DudleyDomain.cpp:475
virtual escript::Data getNormal() const
returns boundary normals at the quadrature point on the face elements
Definition: DudleyDomain.cpp:1415
static FunctionSpaceNamesMapType m_functionSpaceTypeNames
Definition: DudleyDomain.h:737
std::string m_name
domain description
Definition: DudleyDomain.h:721
virtual dim_t getNumDataPointsGlobal() const
Return the number of data points summed across all MPI processes.
Definition: DudleyDomain.cpp:561
boost::shared_ptr< AbstractDomain > Domain_ptr
Definition: AbstractDomain.h:36
NodeFile * m_nodes
the table of the nodes
Definition: DudleyDomain.h:723
escript::JMPI m_mpiInfo
MPI information.
Definition: DudleyDomain.h:719
virtual int getFunctionCode() const
Return a function FunctionSpace code.
Definition: DudleyDomain.cpp:503
virtual int getReducedFunctionOnBoundaryCode() const
Return a function on boundary with reduced integration order FunctionSpace code.
Definition: DudleyDomain.cpp:518
SystemMatrixType
Definition: DudleyDomain.h:72
void distributeByRankOfDOF(const IndexVector &distribution)
Definition: Mesh_distributeByRankOfDOF.cpp:24
virtual bool supportsContactElements() const
Definition: DudleyDomain.h:664
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:570
virtual std::string functionSpaceTypeAsString(int functionSpaceType) const
Return a description for the given function space type code.
Definition: DudleyDomain.cpp:457
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:1662
virtual bool probeInterpolationOnDomain(int functionSpaceType_source, int functionSpaceType_target) const
True if interpolation is possible from source to target.
Definition: DudleyDomain.cpp:1246
ElementFile * m_faceElements
the table of face elements
Definition: DudleyDomain.h:727
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:875
void markNodes(std::vector< short > &mask, index_t offset) const
Definition: DudleyDomain.cpp:136
void setFaceElements(ElementFile *elements)
replaces the face element file by elements
Definition: DudleyDomain.cpp:98
virtual void setToIntegrals(std::vector< double > &integrals, const escript::Data &arg) const
copies the integrals of the function defined by arg into integrals. arg has to be defined on this...
Definition: DudleyDomain.cpp:923
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:1623
DudleyDomain(const std::string &name, int numDim, escript::JMPI jmpi)
Constructor for DudleyDomain.
Definition: DudleyDomain.cpp:54
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:1398
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:741
virtual bool operator==(const escript::AbstractDomain &other) const
comparison operators
Definition: DudleyDomain.cpp:1321
void dump(const std::string &fileName) const
dumps the mesh to a file with the given name.
Definition: DudleyDomain.cpp:150
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:1001
void updateTagList()
regenerates list of tags in use for node file and element files
Definition: DudleyDomain.cpp:1724
virtual bool ownSample(int fsCode, index_t id) const
Definition: DudleyDomain.cpp:1042
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:729
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:493
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:1115
virtual int getReducedFunctionCode() const
Return a function with reduced integration order FunctionSpace code.
Definition: DudleyDomain.cpp:508
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:1648
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:62
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:698
virtual int getApproximationOrder(int functionSpaceCode) const
returns the approximation order used for a function space functionSpaceCode
Definition: DudleyDomain.cpp:1628
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:1315
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:913
virtual bool operator!=(const escript::AbstractDomain &other) const
Return true if given domains are not equal.
Definition: DudleyDomain.cpp:1333
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:1708
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:553
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:548
virtual int getReducedContinuousFunctionCode() const
Return a continuous on reduced order nodes FunctionSpace code.
Definition: DudleyDomain.cpp:498
void relabelElementNodes(const index_t *newNode, index_t offset)
Definition: DudleyDomain.cpp:143
Definition: DudleyDomain.h:75
virtual int getFunctionOnContactOneCode() const
Return a FunctionOnContactOne code.
Definition: DudleyDomain.cpp:533
Definition: DudleyDomain.h:73
void optimizeElementOrdering()
redistributes elements to minimize communication during assemblage
Definition: DudleyDomain.cpp:1716
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:628
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:1142
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:1522
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:1062
virtual int getReducedFunctionOnContactZeroCode() const
Return a FunctionOnContactZero code with reduced integration order.
Definition: DudleyDomain.cpp:528
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:1489
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:85
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:894
virtual std::string getDescription() const
Return a description for this domain.
Definition: DudleyDomain.cpp:452
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:958
int getTagFromSampleNo(int functionSpaceType, index_t sampleNo) const
Return the tag key for the given sample number.
Definition: DudleyDomain.cpp:1459
virtual bool isValidFunctionSpaceType(int functionSpaceType) const
Returns true if the given integer is a valid function space type for this domain. ...
Definition: DudleyDomain.cpp:468
virtual void setNewX(const escript::Data &arg)
assigns new location to the domain
Definition: DudleyDomain.cpp:1029
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:1551
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:1338
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:1573
void setPoints(ElementFile *elements)
replaces the point element file by elements
Definition: DudleyDomain.cpp:104
virtual void setTagMap(const std::string &name, int tag)
sets a map from a clear tag name to a tag key
Definition: DudleyDomain.cpp:1517
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:675
TagMap m_tagMap
the tag map mapping names to tag keys
Definition: DudleyDomain.h:731
virtual int getSolutionCode() const
Return a Solution code.
Definition: DudleyDomain.cpp:543
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:1425
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:725
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:1533
virtual int getReducedFunctionOnContactOneCode() const
Return a FunctionOnContactOne code with reduced integration order.
Definition: DudleyDomain.cpp:538
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:661
int numDim
number of spatial dimensions
Definition: dudley/src/NodeFile.h:145
~DudleyDomain()
Destructor for DudleyDomain.
Definition: DudleyDomain.cpp:77
virtual int getFunctionOnBoundaryCode() const
Return a function on boundary FunctionSpace code.
Definition: DudleyDomain.cpp:513
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:1608