escript  Revision_
DudleyDomain.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2016 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 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16 
17 #ifndef __DUDLEY_DOMAIN_H__
18 #define __DUDLEY_DOMAIN_H__
19 
20 /****************************************************************************
21 
22  Dudley: Domain
23 
24  A mesh is built from nodes and elements which describe the domain, surface,
25  and point sources (the latter are needed to establish links with other
26  codes, in particular particle codes). The nodes are stored in a NodeFile
27  and elements in ElementFiles. Dudley domains have three ElementFiles
28  containing the elements, surface and point sources, respectively.
29  Notice that the surface elements do not necessarily cover the entire
30  surface of the domain.
31 
32  The element type is either Tri3 or Tet4 depending on dimensionality
33  and also determines the type of surface elements to be used.
34 
35  The numbering of the nodes starts with 0.
36 
37  Important: it is assumed that every node appears in at least one element or
38  surface element and that any node used in an element, surface element or as
39  a point is specified in the NodeFile, see also resolveNodeIds.
40 
41  All nodes and elements are tagged. The tag allows to group nodes and
42  elements. A typical application is to mark surface elements on a
43  certain portion of the domain with the same tag. All these surface
44  elements can then be assigned the same value e.g. for the pressure.
45 
46 *****************************************************************************/
47 
48 #include <dudley/Dudley.h>
49 #include <dudley/ElementFile.h>
50 #include <dudley/NodeFile.h>
51 #include <dudley/Util.h>
52 
53 #include <escript/AbstractContinuousDomain.h>
54 #include <escript/FunctionSpace.h>
55 #include <escript/FunctionSpaceFactory.h>
56 
57 #ifdef ESYS_HAVE_PASO
58 #include <paso/SystemMatrixPattern.h>
59 #endif
60 #ifdef ESYS_HAVE_TRILINOS
61 #include <trilinoswrap/types.h>
62 #endif
63 
64 #include <map>
65 #include <string>
66 #include <vector>
67 
68 namespace dudley {
69 
70 typedef std::map<std::string, int> TagMap;
71 
73  SMT_PASO = 1<<8,
74  SMT_TRILINOS = 1<<10,
75  SMT_COMPLEX = 1<<16,
76  SMT_UNROLL = 1<<17
77 };
78 
85 {
86 public:
92  static escript::Domain_ptr load(const std::string& filename);
93 
102  static escript::Domain_ptr read(escript::JMPI mpiInfo,
103  const std::string& filename, bool optimize);
104 
114  const std::string& filename, int numDim,
115  bool optimize);
116 
128  static escript::Domain_ptr create2D(dim_t NE0, dim_t NE1, double l0,
129  double l1, bool optimize,
130  escript::JMPI jmpi);
131 
145  static escript::Domain_ptr create3D(dim_t NE0, dim_t NE1, dim_t NE2,
146  double l0, double l1, double l2,
147  bool optimize, escript::JMPI jmpi);
148 
157  DudleyDomain(const std::string& name, int numDim, escript::JMPI jmpi);
158 
163  DudleyDomain(const DudleyDomain& in);
164 
169  ~DudleyDomain();
170 
175  NodeFile* getNodes() const { return m_nodes; }
176 
181  void setElements(ElementFile* elements);
182 
187  ElementFile* getElements() const { return m_elements; }
188 
193  void setFaceElements(ElementFile* elements);
194 
200 
205  void setPoints(ElementFile* elements);
206 
211  ElementFile* getPoints() const { return m_points; }
212 
217  virtual escript::JMPI getMPI() const { return m_mpiInfo; }
218 
223  virtual int getMPISize() const { return m_mpiInfo->size; }
224 
229  virtual int getMPIRank() const { return m_mpiInfo->rank; }
230 
235  virtual void MPIBarrier() const;
236 
241  virtual bool onMasterProcessor() const { return getMPIRank() == 0; }
242 
243  MPI_Comm getMPIComm() const { return m_mpiInfo->comm; }
244 
251  void write(const std::string& fileName) const;
252 
257  void Print_Mesh_Info(bool full=false) const;
258 
264  void dump(const std::string& fileName) const;
265 
272  int getTagFromSampleNo(int functionSpaceType, index_t sampleNo) const;
273 
279  const index_t* borrowSampleReferenceIDs(int functionSpaceType) const;
280 
286  virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
287 
292  virtual std::string getDescription() const;
293 
298  virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
299 
305 
310  virtual int getContinuousFunctionCode() const;
311 
316  virtual int getReducedContinuousFunctionCode() const;
317 
322  virtual int getFunctionCode() const;
323 
328  virtual int getReducedFunctionCode() const;
329 
334  virtual int getFunctionOnBoundaryCode() const;
335 
340  virtual int getReducedFunctionOnBoundaryCode() const;
341 
346  virtual int getFunctionOnContactZeroCode() const;
347 
352  virtual int getReducedFunctionOnContactZeroCode() const;
353 
358  virtual int getFunctionOnContactOneCode() const;
359 
364  virtual int getReducedFunctionOnContactOneCode() const;
365 
370  virtual int getSolutionCode() const;
371 
376  virtual int getReducedSolutionCode() const;
377 
382  virtual int getDiracDeltaFunctionsCode() const;
383 
387  typedef std::map<int, std::string> FunctionSpaceNamesMapType;
388 
392  virtual int getDim() const { return m_nodes->numDim; }
393 
400  virtual StatusType getStatus() const;
401 
406  virtual dim_t getNumDataPointsGlobal() const;
407 
413  virtual std::pair<int,dim_t> getDataShape(int functionSpaceCode) const;
414 
420  virtual void setToX(escript::Data& arg) const;
421 
428  virtual void setTagMap(const std::string& name, int tag);
429 
435  virtual int getTag(const std::string& name) const;
436 
442  virtual bool isValidTagName(const std::string& name) const;
443 
448  virtual std::string showTagNames() const;
449 
454  virtual void setNewX(const escript::Data& arg);
455 
460  virtual void interpolateOnDomain(escript::Data& target,
461  const escript::Data& source) const;
462 
463  virtual bool probeInterpolationOnDomain(int functionSpaceType_source,
464  int functionSpaceType_target) const;
465 
466  virtual signed char preferredInterpolationOnDomain(int functionSpaceType_source, int functionSpaceType_target) const;
467 
472  bool commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
473 
478  virtual void interpolateAcross(escript::Data& target, const escript::Data& source) const;
479 
483  virtual bool probeInterpolationAcross(int functionSpaceType_source,
484  const escript::AbstractDomain& targetDomain,
485  int functionSpaceType_target) const;
486 
492  virtual void setToNormal(escript::Data& out) const;
493 
499  virtual void setToSize(escript::Data& out) const;
500 
506  virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
507 
513  virtual void setToIntegrals(std::vector<double>& integrals, const escript::Data& arg) const;
514 
523  virtual int getSystemMatrixTypeId(const boost::python::object& options) const;
524 
534  virtual int getTransportTypeId(int solver, int preconditioner, int package,
535  bool symmetry) const;
536 
542  virtual bool isCellOriented(int functionSpaceCode) const;
543 
544  virtual bool ownSample(int fsCode, index_t id) const;
545 
550  virtual void addPDEToSystem(
552  const escript::Data& A, const escript::Data& B,
553  const escript::Data& C, const escript::Data& D,
554  const escript::Data& X, const escript::Data& Y,
555  const escript::Data& d, const escript::Data& y,
556  const escript::Data& d_contact,
557  const escript::Data& y_contact,
558  const escript::Data& d_dirac,
559  const escript::Data& y_dirac) const;
560 
565  virtual void addPDEToLumpedSystem(escript::Data& mat,
566  const escript::Data& D,
567  const escript::Data& d,
568  const escript::Data& d_dirac,
569  bool useHRZ) const;
570 
575  virtual void addPDEToRHS(escript::Data& rhs, const escript::Data& X,
576  const escript::Data& Y, const escript::Data& y,
577  const escript::Data& y_contact,
578  const escript::Data& y_dirac) const;
579 
584  virtual void addPDEToTransportProblem(
586  escript::Data& source, const escript::Data& M,
587  const escript::Data& A, const escript::Data& B,
588  const escript::Data& C, const escript::Data& D,
589  const escript::Data& X, const escript::Data& Y,
590  const escript::Data& d, const escript::Data& y,
591  const escript::Data& d_contact,
592  const escript::Data& y_contact,
593  const escript::Data& d_dirac,
594  const escript::Data& y_dirac) const;
595 
601  int row_blocksize,
602  const escript::FunctionSpace& row_functionspace,
603  int column_blocksize,
604  const escript::FunctionSpace& column_functionspace,
605  int type) const;
606 
612  const escript::FunctionSpace& functionspace,
613  int type) const;
614 
618  virtual escript::Data getX() const;
619 
624  virtual escript::Data getNormal() const;
625 
629  virtual escript::Data getSize() const;
630 
634  virtual bool operator==(const escript::AbstractDomain& other) const;
635  virtual bool operator!=(const escript::AbstractDomain& other) const;
636 
641  virtual void setTags(int functionSpaceType, int newTag,
642  const escript::Data& mask) const;
643 
649  virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
650 
651  virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
652 
657  virtual bool canTag(int functionSpaceCode) const;
658 
662  virtual int getApproximationOrder(int functionSpaceCode) const;
663 
664  virtual bool supportsContactElements() const { return false; }
665 
667  const escript::FunctionSpace& what, long seed,
668  const boost::python::tuple& filter) const;
669 
670  void createMappings(const std::vector<index_t>& dofDistribution,
671  const std::vector<index_t>& nodeDistribution);
672 
675  void relabelElementNodes(const index_t* newNode, index_t offset);
676 
677 #ifdef ESYS_HAVE_PASO
678  paso::SystemMatrixPattern_ptr getPasoPattern() const;
680 #endif
681 
682 #ifdef ESYS_HAVE_TRILINOS
683  esys_trilinos::const_TrilinosGraph_ptr getTrilinosGraph() const {
685  return m_nodes->getTrilinosGraph();
686  }
687 #endif
688 
689 private:
690  void prepare(bool optimize);
691 
699  void resolveNodeIds();
700 
701 #ifdef ESYS_HAVE_PASO
702  paso::SystemMatrixPattern_ptr makePasoPattern() const;
703 #endif
704 
705  void createColoring(const index_t* dofMap);
706  void distributeByRankOfDOF(const IndexVector& distribution);
707  void markNodes(std::vector<short>& mask, index_t offset) const;
708  void optimizeDOFDistribution(IndexVector& distribution);
709  void optimizeDOFLabeling(const IndexVector& distribution);
711  void updateTagList();
712  void printElementInfo(const ElementFile* e, const std::string& title,
713  const std::string& defaultType, bool full) const;
714 
715  void writeElementInfo(std::ostream& stream, const ElementFile* e,
716  const std::string& defaultType) const;
717 
721  std::string m_name;
731  TagMap m_tagMap;
732 #ifdef ESYS_HAVE_PASO
733  // pointer to the sparse matrix pattern
734  mutable paso::SystemMatrixPattern_ptr pasoPattern;
735 #endif
736 
737  static FunctionSpaceNamesMapType m_functionSpaceTypeNames;
738 };
739 
740 } // end of namespace
741 
742 #endif // __DUDLEY_DOMAIN_H__
743 
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&#39;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&#39;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&#39;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&#39;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