Go to the documentation of this file.
18 #ifndef __FINLEY_DOMAIN_H__
19 #define __FINLEY_DOMAIN_H__
60 #include <finley/Finley.h>
61 #include <finley/ElementFile.h>
62 #include <finley/NodeFile.h>
63 #include <finley/Util.h>
65 #include <escript/AbstractContinuousDomain.h>
66 #include <escript/FunctionSpace.h>
67 #include <escript/FunctionSpaceFactory.h>
70 #include <paso/SystemMatrixPattern.h>
72 #ifdef ESYS_HAVE_TRILINOS
73 #include <trilinoswrap/types.h>
82 typedef std::map<std::string, int>
TagMap;
119 const std::string& fileName,
120 int integrationOrder = -1,
121 int reducedIntegrationOrder = -1,
122 bool optimize =
false);
138 const std::string& filename,
139 int numDim,
int integrationOrder = -1,
140 int reducedIntegrationOrder = -1,
141 bool optimize =
false,
142 bool useMacroElements =
false);
162 double L0,
double L1,
163 bool periodic0,
bool periodic1,
int order,
164 int reducedOrder,
bool useElementsOnFace,
188 double l0,
double l1,
189 bool periodic0,
bool periodic1,
int order,
190 int reducedOrder,
bool useElementsOnFace,
191 bool useFullElementOrder,
192 bool useMacroElements,
bool optimize,
216 double l0,
double l1,
double l2,
217 bool periodic0,
bool periodic1,
bool periodic2,
218 int order,
int reducedOrder,
219 bool useElementsOnFace,
245 double l0,
double l1,
double l2,
246 bool periodic0,
bool periodic1,
bool periodic2,
247 int order,
int reducedOrder,
248 bool useElementsOnFace,
249 bool useFullElementOrder,
250 bool useMacroElements,
bool optimize,
280 void addDiracPoints(
const std::vector<double>& points,
281 const std::vector<int>& tags);
359 virtual void MPIBarrier()
const;
375 void write(
const std::string& fileName)
const;
381 void Print_Mesh_Info(
bool full=
false)
const;
388 void dump(
const std::string& fileName)
const;
396 int getTagFromSampleNo(
int functionSpaceType,
index_t sampleNo)
const;
403 const index_t* borrowSampleReferenceIDs(
int functionSpaceType)
const;
410 virtual bool isValidFunctionSpaceType(
int functionSpaceType)
const;
416 virtual std::string getDescription()
const;
422 virtual std::string functionSpaceTypeAsString(
int functionSpaceType)
const;
428 void setFunctionSpaceTypeNames();
434 virtual int getContinuousFunctionCode()
const;
440 virtual int getReducedContinuousFunctionCode()
const;
446 virtual int getFunctionCode()
const;
452 virtual int getReducedFunctionCode()
const;
458 virtual int getFunctionOnBoundaryCode()
const;
464 virtual int getReducedFunctionOnBoundaryCode()
const;
470 virtual int getFunctionOnContactZeroCode()
const;
476 virtual int getReducedFunctionOnContactZeroCode()
const;
482 virtual int getFunctionOnContactOneCode()
const;
488 virtual int getReducedFunctionOnContactOneCode()
const;
494 virtual int getSolutionCode()
const;
500 virtual int getReducedSolutionCode()
const;
506 virtual int getDiracDeltaFunctionsCode()
const;
516 virtual int getDim()
const {
return m_nodes->numDim; }
524 virtual StatusType getStatus()
const;
530 virtual dim_t getNumDataPointsGlobal()
const;
537 virtual std::pair<int,dim_t> getDataShape(
int functionSpaceCode)
const;
552 virtual void setTagMap(
const std::string& name,
int tag);
559 virtual int getTag(
const std::string& name)
const;
566 virtual bool isValidTagName(
const std::string& name)
const;
572 virtual std::string showTagNames()
const;
587 virtual bool probeInterpolationOnDomain(
int functionSpaceType_source,
588 int functionSpaceType_target)
const;
590 virtual signed char preferredInterpolationOnDomain(
int functionSpaceType_source,
int functionSpaceType_target)
const;
596 bool commonFunctionSpace(
const std::vector<int>& fs,
int& resultcode)
const;
609 int functionSpaceType_target)
const;
650 virtual int getSystemMatrixTypeId(
const boost::python::object& options)
const;
661 virtual int getTransportTypeId(
int solver,
int preconditioner,
int package,
662 bool symmetry)
const;
669 virtual bool isCellOriented(
int functionSpaceCode)
const;
671 virtual bool ownSample(
int fsCode,
index_t id)
const;
677 virtual void addPDEToSystem(
711 virtual void addPDEToTransportProblem(
730 int column_blocksize,
747 #ifdef ESYS_HAVE_BOOST_NUMPY
751 virtual boost::python::numpy::ndarray getNumpyX()
const;
756 virtual boost::python::numpy::ndarray getConnectivityInfo()
const;
762 virtual int getVTKElementType()
const;
785 virtual void setTags(
int functionSpaceType,
int newTag,
793 virtual int getNumberOfTagsInUse(
int functionSpaceCode)
const;
795 virtual const int* borrowListOfTagsInUse(
int functionSpaceCode)
const;
801 virtual bool canTag(
int functionSpaceCode)
const;
806 virtual int getApproximationOrder(
int functionSpaceCode)
const;
812 const boost::python::tuple& filter)
const;
820 void createMappings(
const IndexVector& dofDistribution,
823 #ifdef ESYS_HAVE_PASO
826 bool reducedColOrder)
const;
829 #ifdef ESYS_HAVE_TRILINOS
830 esys_trilinos::const_TrilinosGraph_ptr getTrilinosGraph(
bool reducedOrder)
const;
834 void glueFaces(
double safetyFactor,
double tolerance,
bool optimize);
836 void joinFaces(
double safetyFactor,
double tolerance,
bool optimize);
840 static FinleyDomain* merge(
const std::vector<const FinleyDomain*>& meshes);
843 void prepare(
bool optimize);
854 void resolveNodeIds();
860 template<
typename Scalar>
861 void setToIntegralsWorker(std::vector<Scalar>& integrals,
864 #ifdef ESYS_HAVE_PASO
866 bool reducedColOrder)
const;
868 #ifdef ESYS_HAVE_TRILINOS
869 esys_trilinos::GraphType* createTrilinosGraph(
bool reducedOrder)
const;
872 void distributeByRankOfDOF(
const IndexVector& distribution);
873 void markNodes(std::vector<short>& mask,
index_t offset,
bool useLinear)
const;
874 void optimizeDOFDistribution(
IndexVector& distribution);
875 void optimizeDOFLabeling(
const IndexVector& distribution);
876 void optimizeElementOrdering();
877 void findMatchingFaces(
double safetyFactor,
double tolerance,
int* numPairs,
878 int* elem0,
int* elem1,
int* matchingNodes)
const;
879 void updateTagList();
880 void printElementInfo(
const ElementFile* e,
const std::string& title,
881 const std::string& defaultType,
bool full)
const;
883 void writeElementInfo(std::ostream& stream,
const ElementFile* e,
884 const std::string& defaultType)
const;
906 #ifdef ESYS_HAVE_PASO
913 #ifdef ESYS_HAVE_TRILINOS
914 mutable esys_trilinos::TrilinosGraph_ptr m_fullGraph;
915 mutable esys_trilinos::TrilinosGraph_ptr m_reducedGraph;
923 #endif // __FINLEY_DOMAIN_H__
void optimizeDOFLabeling(const IndexVector &distribution)
optimizes the labeling of the DOFs on each processor
Definition: finley/src/FinleyDomain.cpp:2903
virtual dim_t getNumDataPointsGlobal() const
Return the number of data points summed across all MPI processes.
Definition: finley/src/FinleyDomain.cpp:1048
void updateTagList()
Definition: finley/src/NodeFile.h:326
void setContactElements(ElementFile *elements)
replaces the contact element file by elements
Definition: finley/src/FinleyDomain.cpp:134
ElementFile * getFaceElements() const
returns a pointer to this domain's face element file
Definition: DudleyDomain.h:202
Domain_ptr brick_driver(const bp::list &args)
Definition: finley/src/DomainFactory.cpp:1105
SolverOptions
Definition: SolverOptions.h:82
int MPI_Status
Definition: EsysMPI.h:47
Definition: SolverOptions.h:161
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: finley/src/FinleyDomain.cpp:2782
bool isComplex() const
True if components of this data are stored as complex.
Definition: Data.cpp:1160
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: finley/src/FinleyDomain.cpp:1172
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: finley/src/FinleyDomain.cpp:1646
escript::Data getSize() const
Returns the sample size (e.g. the diameter of elements, radius of particles).
Definition: FunctionSpace.cpp:295
FinleyDomain implements the AbstractContinuousDomain interface for the Finley library.
Definition: finley/src/FinleyDomain.h:97
void relabelElementNodes(const IndexVector &newNode, index_t offset)
Definition: finley/src/FinleyDomain.cpp:203
void Assemble_NodeCoordinates(const NodeFile *nodes, escript::Data &x)
copies node coordinates into expanded Data object x
Definition: finley/src/Assemble_NodeCoordinates.cpp:34
@ SMT_COMPLEX
Definition: finley/src/FinleyDomain.h:87
@ FaceElements
Definition: Finley.h:68
index_t * globalReducedNodesIndex
Definition: finley/src/NodeFile.h:181
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:52
int approximationOrder
Definition: finley/src/FinleyDomain.h:890
#define REGISTER_ESCRIPT_EXCEPTION_TRANSLATORS
Definition: ExceptionTranslators.h:27
escript::JMPI m_mpiInfo
MPI information.
Definition: finley/src/FinleyDomain.h:887
virtual std::string functionSpaceTypeAsString(int functionSpaceType) const
Return a description for the given function space type code.
Definition: finley/src/FinleyDomain.cpp:932
virtual bool writeToSilo(DBfile *dbfile, const std::string &pathInSilo, const StringVec &labels, const StringVec &units, bool writeMeshData)
Writes the domain to a Silo file.
Definition: weipa/src/FinleyDomain.cpp:507
FunctionSpace reducedContinuousFunction(const AbstractDomain &domain)
Return a continuous with reduced order FunctionSpace (overlapped node values on reduced element order...
Definition: FunctionSpaceFactory.cpp:37
virtual void setToIntegrals(std::vector< escript::DataTypes::cplx_t > &integrals, const escript::Data &arg) const
@ Rec9
Definition: ReferenceElements.h:52
virtual ~FinleyDomain()
Definition: weipa/src/FinleyDomain.cpp:79
TagMap m_tagMap
the tag map mapping names to tag keys
Definition: finley/src/FinleyDomain.h:905
#define FINLEY_REDUCED_FACE_ELEMENTS
Definition: Finley.h:57
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: finley/src/FinleyDomain.cpp:2583
void updateTagList()
regenerates list of tags in use for node file and element files
Definition: finley/src/FinleyDomain.cpp:3084
dim_t createDenseDOFLabeling()
Definition: finley/src/NodeFile.cpp:525
virtual int getSolutionCode() const
Return a Solution code.
Definition: finley/src/FinleyDomain.cpp:1030
this class holds a (distributed) stiffness matrix
Definition: SystemMatrix.h:50
virtual const int * borrowListOfTagsInUse(int functionSpaceCode) const
Definition: finley/src/FinleyDomain.cpp:2685
void Assemble_integrate(const NodeFile *nodes, const ElementFile *elements, const escript::Data &data, Scalar *integrals)
integrates data on quadrature points
Definition: finley/src/Assemble_integrate.cpp:34
static Pattern_ptr fromIndexListArray(dim_t n0, dim_t n, const escript::IndexList *index_list_array, index_t range_min, index_t range_max, index_t index_offset)
Definition: Pattern.cpp:105
index_t * globalDegreesOfFreedom
Definition: finley/src/NodeFile.h:173
virtual void removeGhostZones(int ownIndex)
Removes 'ghost' elements and nodes.
Definition: weipa/src/FinleyDomain.cpp:488
@ SO_METHOD_DIRECT
Definition: SolverOptions.h:102
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,...
Definition: finley/src/FinleyDomain.cpp:2374
#define FINLEY_REDUCED_ELEMENTS
Definition: Finley.h:56
const index_t * borrowSampleReferenceIDs(int functionSpaceType) const
Return the reference number of the given sample number.
Definition: finley/src/FinleyDomain.cpp:2502
virtual int getFunctionOnContactZeroCode() const
Return a FunctionOnContactZero code.
Definition: finley/src/FinleyDomain.cpp:1010
Domain_ptr readGmsh(const string &fileName, int numDim, int, int, bool optimize)
reads a gmsh mesh file
Definition: dudley/src/DomainFactory.cpp:681
dim_t getNumReducedNodes() const
returns the number of reduced order FEM nodes (on this rank)
Definition: finley/src/NodeFile.h:261
#define FINLEY_REDUCED_CONTACT_ELEMENTS_1
Definition: Finley.h:58
virtual int getReducedFunctionOnContactOneCode() const
Return a FunctionOnContactOne code with reduced integration order.
Definition: finley/src/FinleyDomain.cpp:1025
virtual ElementData_ptr getElementsForFunctionSpace(int fsCode) const
Returns the element data for given function space code.
Definition: weipa/src/FinleyDomain.cpp:253
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 bool operator==(const escript::AbstractDomain &other) const
comparison operators
Definition: finley/src/FinleyDomain.cpp:2289
boost::shared_ptr< const ReferenceElementSet > const_ReferenceElementSet_ptr
Definition: ReferenceElementSets.h:80
virtual bool canTag(int functionSpaceCode) const
Checks if this domain allows tags for the specified functionSpace code.
Definition: finley/src/FinleyDomain.cpp:2731
FinleyElements_ptr faces
Definition: weipa/src/FinleyDomain.h:73
void assignMPIRankToDOFs(std::vector< int > &mpiRankOfDOF, const IndexVector &distribution)
Definition: finley/src/NodeFile.cpp:438
virtual StringVec getMeshNames() const
Returns the names of all meshes within this domain.
Definition: weipa/src/FinleyDomain.cpp:334
int * Tag
Tag[i] is the tag of node i.
Definition: finley/src/NodeFile.h:166
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: finley/src/FinleyDomain.cpp:2307
bool initialized
Definition: VisItControl.cpp:38
@ ReducedContactElementsOne
Definition: Finley.h:74
SolverOptions getPackage() const
Definition: SolverOptions.cpp:513
index_t getFirstNode() const
Definition: finley/src/NodeFile.h:216
FinleyNodes_ptr nodes
Definition: weipa/src/FinleyDomain.h:71
@ Tet10
Definition: ReferenceElements.h:56
FunctionSpace continuousFunction(const AbstractDomain &domain)
Create function space objects.
Definition: FunctionSpaceFactory.cpp:31
int * Tag
Tag[i] is the tag of element i.
Definition: finley/src/ElementFile.h:129
virtual DataVar_ptr getDataVarByName(const std::string &name) const
Creates and returns a variable with domain data.
Definition: weipa/src/FinleyDomain.cpp:372
int getTagFromSampleNo(int functionSpaceType, index_t sampleNo) const
Return the tag key for the given sample number.
Definition: finley/src/FinleyDomain.cpp:2543
An exception class for features which are not (yet) implemented.
Definition: EsysException.h:90
Definition: FinleyException.h:27
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: finley/src/FinleyDomain.cpp:1139
#define FINLEY_NODES
Definition: Finley.h:48
@ Tet10Macro
Definition: ReferenceElements.h:116
ElementFile * getElements() const
returns a pointer to this domain's element file
Definition: DudleyDomain.h:190
virtual void reorderGhostZones(int ownIndex)
Reorders elements so that 'ghost' elements (i.e. those that do not belong to ownIndex) appear last.
Definition: weipa/src/FinleyDomain.cpp:470
escript::Distribution_ptr nodesDistribution
MPI distribution of nodes.
Definition: finley/src/NodeFile.h:186
int integrationOrder
Definition: finley/src/FinleyDomain.h:892
SolverOptions getSolverMethod() const
Definition: SolverOptions.cpp:441
void randomFillArray(long seed, double *array, size_t n)
Definition: Random.cpp:79
ElementFile * m_faceElements
the table of face elements
Definition: finley/src/FinleyDomain.h:899
int StatusType
Definition: AbstractDomain.h:53
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition: SystemMatrixPattern.h:40
index_t * reducedNodesId
Definition: finley/src/NodeFile.h:203
index_t * globalReducedDOFIndex
Definition: finley/src/NodeFile.h:178
virtual bool probeInterpolationOnDomain(int functionSpaceType_source, int functionSpaceType_target) const
True if interpolation is possible from source to target.
Definition: finley/src/FinleyDomain.cpp:2145
virtual std::string showTagNames() const
Returns all tag names in a single string sperated by commas.
Definition: finley/src/FinleyDomain.cpp:2641
SystemMatrix_ptr< double > borrowTransportMatrix() const
Definition: Transport.h:65
#define MATRIX_FORMAT_COMPLEX
Definition: Paso.h:66
void createColoring(const IndexVector &dofMap)
Tries to reduce the number of colours used to colour the elements.
Definition: finley/src/ElementFile.cpp:249
#define DUDLEY_NODES
Definition: Dudley.h:42
boost::shared_ptr< const ReferenceElement > const_ReferenceElement_ptr
Definition: ReferenceElements.h:216
virtual int getMPISize() const
returns the number of processors used for this domain
Definition: finley/src/FinleyDomain.h:347
void relabelNodes(const IndexVector &newNode, index_t offset)
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: finley/src/FinleyDomain.cpp:2654
boost::shared_ptr< AbstractDomain > Domain_ptr
Definition: AbstractDomain.h:41
Give a short description of what AbstractTransportProblem does.
Definition: AbstractTransportProblem.h:45
@ ReducedNodes
Definition: Finley.h:65
@ SO_PRECONDITIONER_ILUT
Definition: SolverOptions.h:122
virtual escript::Data getSize() const
returns the element size
Definition: finley/src/FinleyDomain.cpp:2497
bool isComplex() const
Definition: SolverOptions.cpp:679
void setTags(const int newTag, const escript::Data &mask)
Definition: finley/src/ElementFile.cpp:216
virtual int getApproximationOrder(int functionSpaceCode) const
returns the approximation order used for a function space functionSpaceCode
Definition: finley/src/FinleyDomain.cpp:2755
index_t * Nodes
Definition: finley/src/ElementFile.h:144
Definition: FunctionSpace.h:36
std::pair< index_t, index_t > getNodeRange() const
Definition: finley/src/ElementFile.h:174
NodeFile * m_nodes
the table of the nodes
Definition: finley/src/FinleyDomain.h:895
@ Points
Definition: Finley.h:70
void distributeByRankOfDOF(const std::vector< int > &mpiRankOfDOF, index_t *nodesId)
redistributes the elements including overlap by rank
Definition: finley/src/ElementFile.cpp:330
SystemMatrixType
Definition: finley/src/FinleyDomain.h:84
void resolveNodeIds()
Definition: finley/src/FinleyDomain.cpp:2984
const FunctionSpace & getFunctionSpace() const
Return the function space.
Definition: Data.h:463
#define FINLEY_REDUCED_DEGREES_OF_FREEDOM
Definition: Finley.h:54
dim_t getNumReducedDegreesOfFreedom() const
returns the number of reduced order degrees of freedom (on this rank)
Definition: finley/src/NodeFile.h:271
boost::shared_ptr< DataVar > DataVar_ptr
Definition: weipa.h:65
Definition: DataVar.cpp:51
ElementFile * getElements() const
returns a pointer to this domain's element file
Definition: finley/src/FinleyDomain.h:299
bool probeInterpolationAcross(int fsType_source, const escript::AbstractDomain &domain, int fsType_target, int dim)
Definition: CrossDomainCoupler.cpp:32
@ Rec9Macro
Definition: ReferenceElements.h:115
virtual int getDiracDeltaFunctionsCode() const
Return a DiracDeltaFunctions code.
Definition: finley/src/FinleyDomain.cpp:1040
const_Domain_ptr getDomain() const
Returns the function space domain.
Definition: FunctionSpace.cpp:103
#define MPI_INT
Definition: EsysMPI.h:48
index_t index_t_max()
Returns the maximum finite value for the index_t type.
Definition: DataTypes.h:81
@ Hex27
Definition: ReferenceElements.h:60
bool initialize(const std::string &simFile, const std::string &comment)
Definition: VisItControl.cpp:178
boost::shared_ptr< SystemMatrix< T > > SystemMatrix_ptr
Definition: SystemMatrix.h:42
virtual std::string getDescription() const
Return a description for this domain.
Definition: finley/src/FinleyDomain.cpp:927
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: finley/src/FinleyDomain.cpp:1820
@ SMT_UNROLL
Definition: finley/src/FinleyDomain.h:88
#define MPI_MAX
Definition: EsysMPI.h:56
std::string siloPath
Definition: weipa/src/FinleyDomain.h:75
ElementFile * m_points
the table of points (treated as elements of dimension 0)
Definition: finley/src/FinleyDomain.h:903
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: finley/src/FinleyDomain.cpp:1210
dim_t getNumNodes() const
returns the number of FEM nodes (on this rank)
Definition: finley/src/NodeFile.h:256
virtual int getReducedFunctionOnContactZeroCode() const
Return a FunctionOnContactZero code with reduced integration order.
Definition: finley/src/FinleyDomain.cpp:1015
FinleyElements_ptr contacts
Definition: weipa/src/FinleyDomain.h:74
@ ZONE_CENTERED
Definition: DomainChunk.h:33
void createNodeMappings(const IndexVector &indexReducedNodes, const IndexVector &dofDistribution, const IndexVector &nodeDistribution)
Definition: finley/src/NodeFile.cpp:1004
virtual int getReducedFunctionCode() const
Return a function with reduced integration order FunctionSpace code.
Definition: finley/src/FinleyDomain.cpp:995
escript::Data getNormal() const
Returns the surface normal field.
Definition: FunctionSpace.cpp:286
double * Coordinates
Coordinates[INDEX2(k,i,numDim)] is the k-th coordinate of node i.
Definition: finley/src/NodeFile.h:175
virtual int getReducedFunctionOnBoundaryCode() const
Return a function on boundary with reduced integration order FunctionSpace code.
Definition: finley/src/FinleyDomain.cpp:1005
virtual bool probeInterpolationAcross(int functionSpaceType_source, const escript::AbstractDomain &targetDomain, int functionSpaceType_target) const
determines whether interpolation from source to target is possible.
Definition: finley/src/FinleyDomain.cpp:2283
dim_t numElements
number of elements
Definition: finley/src/ElementFile.h:122
virtual int getFunctionCode() const
Return a function FunctionSpace code.
Definition: finley/src/FinleyDomain.cpp:990
int * Owner
Owner[i] contains the rank that owns element i.
Definition: finley/src/ElementFile.h:132
Data represents a collection of datapoints.
Definition: Data.h:64
boost::shared_ptr< TransportProblem > TransportProblem_ptr
Definition: Transport.h:32
double l2(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global L2 norm of x
Definition: PasoUtil.cpp:501
index_t getLastNode() const
Definition: finley/src/NodeFile.h:221
boost::shared_ptr< FinleyElements > FinleyElements_ptr
Definition: FinleyElements.h:64
virtual StatusType getStatus() const
Returns a status indicator of the domain. The status identifier should be unique over the live time i...
Definition: finley/src/FinleyDomain.cpp:2750
virtual int getFunctionOnBoundaryCode() const
Return a function on boundary FunctionSpace code.
Definition: finley/src/FinleyDomain.cpp:1000
ASM_ptr getPtr()
Returns smart pointer which is managing this object. If one does not exist yet it creates one.
Definition: AbstractSystemMatrix.cpp:42
void Print_Mesh_Info(bool full=false) const
Definition: finley/src/Mesh_write.cpp:148
escript::Data getX() const
Returns the spatial locations of the data points.
Definition: FunctionSpace.cpp:229
index_t dim_t
Definition: DataTypes.h:66
std::vector< int > ShapeType
The shape of a single datapoint.
Definition: DataTypes.h:44
virtual bool initFromFile(const std::string &filename)
Reads the domain from a dump file.
Definition: weipa/src/FinleyDomain.cpp:184
@ ContactElementsZero
Definition: Finley.h:71
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:74
#define FINLEY_FACE_ELEMENTS
Definition: Finley.h:50
virtual bool isCellOriented(int functionSpaceCode) const
returns true if data on this domain and a function space of type functionSpaceCode has to considered ...
Definition: finley/src/FinleyDomain.cpp:1999
@ ReducedDegreesOfFreedom
Definition: Finley.h:63
boost::shared_ptr< AbstractTransportProblem > ATP_ptr
Definition: AbstractTransportProblem.h:161
Base class for escript system matrices.
Definition: AbstractSystemMatrix.h:44
ElementFile * getFaceElements() const
returns a pointer to this domain's face element file
Definition: finley/src/FinleyDomain.h:311
FinleyElements_ptr cells
Definition: weipa/src/FinleyDomain.h:72
@ DegreesOfFreedom
Definition: Finley.h:62
const index_t * borrowGlobalNodesIndex() const
Definition: finley/src/NodeFile.h:231
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: finley/src/FinleyDomain.cpp:1057
dim_t createDenseReducedLabeling(const std::vector< short > &reducedMask, bool useNodes)
Definition: finley/src/NodeFile.cpp:702
@ Tri6Macro
Definition: ReferenceElements.h:114
void createColoring(const IndexVector &dofMap)
tries to reduce the number of colours for all element files
Definition: finley/src/FinleyDomain.cpp:3066
@ Hex27Macro
Definition: ReferenceElements.h:117
void setToIntegralsWorker(std::vector< Scalar > &integrals, const escript::Data &arg) const
Definition: finley/src/FinleyDomain.cpp:1712
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: finley/src/FinleyDomain.cpp:1251
boost::shared_ptr< ElementData > ElementData_ptr
Definition: weipa.h:67
#define FINLEY_DEGREES_OF_FREEDOM
Definition: Finley.h:47
index_t * Color
Definition: finley/src/ElementFile.h:150
std::string m_name
domain description
Definition: finley/src/FinleyDomain.h:889
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: finley/src/FinleyDomain.cpp:1754
NodeFile * getNodes() const
returns a pointer to this domain's node file
Definition: finley/src/FinleyDomain.h:287
virtual ElementData_ptr getReducedElements() const
Returns the reduced elements.
Definition: FinleyElements.h:155
@ NODE_CENTERED
Definition: DomainChunk.h:32
Domain_ptr readGmsh_driver(const bp::list &args)
Definition: finley/src/DomainFactory.cpp:985
virtual int getDim() const
returns the dimensionality of this domain
Definition: finley/src/FinleyDomain.h:516
SystemMatrix_ptr< double > borrowMassMatrix() const
Definition: Transport.h:70
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: finley/src/FinleyDomain.cpp:1665
void optimizeElementOrdering()
redistributes elements to minimize communication during assemblage
Definition: finley/src/FinleyDomain.cpp:3075
#define FINLEY_ELEMENTS
Definition: Finley.h:49
int reducedApproximationOrder
Definition: finley/src/FinleyDomain.h:891
index_t * Id
Id[i] is the unique ID number of FEM node i.
Definition: finley/src/NodeFile.h:164
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: finley/src/FinleyDomain.cpp:2024
virtual int getFunctionOnContactOneCode() const
Return a FunctionOnContactOne code.
Definition: finley/src/FinleyDomain.cpp:1020
#define DUDLEY_REDUCED_ELEMENTS
Definition: Dudley.h:46
index_t * Id
Definition: finley/src/ElementFile.h:126
FinleyDomain()
Definition: weipa/src/FinleyDomain.cpp:58
dim_t createDenseNodeLabeling(IndexVector &nodeDistribution, const IndexVector &dofDistribution)
Definition: finley/src/NodeFile.cpp:588
this struct holds the definition of the reference element
Definition: ReferenceElements.h:123
std::map< int, std::string > FunctionSpaceNamesMapType
Definition: finley/src/FinleyDomain.h:511
FinleyDomain(const std::string &name, int numDim, escript::JMPI jmpi)
Constructor for FinleyDomain.
Definition: finley/src/FinleyDomain.cpp:73
virtual int getReducedContinuousFunctionCode() const
Return a continuous on reduced order nodes FunctionSpace code.
Definition: finley/src/FinleyDomain.cpp:985
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: finley/src/FinleyDomain.cpp:1186
NodeFile * getNodes() const
returns a pointer to this domain's node file
Definition: DudleyDomain.h:178
int status
Definition: finley/src/NodeFile.h:209
void cleanup()
Definition: weipa/src/FinleyDomain.cpp:87
void setCoordinates(const escript::Data &newX)
copies the array newX into this->coordinates
Definition: finley/src/NodeFile.cpp:242
static FunctionSpaceNamesMapType m_functionSpaceTypeNames
Definition: finley/src/FinleyDomain.h:918
@ SO_PRECONDITIONER_AMG
Definition: SolverOptions.h:119
#define DUDLEY_ELEMENTS
Definition: Dudley.h:43
Domain_ptr joinFaces(const bp::list &meshList, double safetyFactor, double tolerance, bool optimize)
Definition: finley/src/DomainFactory.cpp:1300
int reducedIntegrationOrder
Definition: finley/src/FinleyDomain.h:893
virtual bool operator!=(const escript::AbstractDomain &other) const
Return true if given domains are not equal.
Definition: finley/src/FinleyDomain.cpp:2302
Definition: Transport.h:38
@ SMT_TRILINOS
Definition: finley/src/FinleyDomain.h:86
static int getTypeId(int solver, int preconditioner, int package, bool symmetry, const escript::JMPI &mpi_info)
Definition: Transport.h:95
const TagMap & getTagMap() const
returns a reference to the tag name->value map
Definition: finley/src/FinleyDomain.h:818
void Assemble_getSize(const NodeFile *nodes, const ElementFile *elements, escript::Data &size)
Definition: finley/src/Assemble_getSize.cpp:33
@ SMT_PASO
Definition: finley/src/FinleyDomain.h:85
bool isSymmetric() const
Definition: SolverOptions.cpp:689
#define DUDLEY_REDUCED_FACE_ELEMENTS
Definition: Dudley.h:47
static int getSystemMatrixTypeId(int solver, int preconditioner, int package, bool is_complex, bool symmetry, const escript::JMPI &mpi_info)
Definition: SystemMatrix.h:504
@ ReducedFaceElements
Definition: Finley.h:69
ElementFile * m_contactElements
the table of contact elements
Definition: finley/src/FinleyDomain.h:901
virtual escript::JMPI getMPI() const
returns a reference to the MPI information wrapper for this domain
Definition: finley/src/FinleyDomain.h:341
SolverOptions getPreconditioner() const
Definition: SolverOptions.cpp:358
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: finley/src/FinleyDomain.cpp:2272
ElementFile * getContactElements() const
returns a pointer to this domain's contact element file
Definition: finley/src/FinleyDomain.h:323
@ Tri6
Definition: ReferenceElements.h:47
Data load(const std::string fileName, const AbstractDomain &domain)
reads Data on domain from file in netCDF format
Definition: DataFactory.cpp:708
virtual ElementData_ptr getElementsByName(const std::string &name) const
Returns element data with given name.
Definition: weipa/src/FinleyDomain.cpp:433
#define MPI_MIN
Definition: EsysMPI.h:55
bool isDirectSolver(const SolverOptions &method)
returns true if the passed solver method refers to a direct solver type
Definition: SolverOptions.h:145
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: finley/src/FinleyDomain.cpp:1689
virtual escript::Data getNormal() const
returns boundary normals at the quadrature point on the face elements
Definition: finley/src/FinleyDomain.cpp:2492
virtual bool onMasterProcessor() const
returns true if on MPI processor 0, else false
Definition: finley/src/FinleyDomain.h:365
escript::Distribution_ptr degreesOfFreedomDistribution
Definition: finley/src/NodeFile.h:188
virtual int getContinuousFunctionCode() const
Return a continuous FunctionSpace code.
Definition: finley/src/FinleyDomain.cpp:980
virtual bool ownSample(int fsCode, index_t id) const
Definition: finley/src/FinleyDomain.cpp:1871
std::pair< index_t, index_t > getDOFRange() const
Definition: finley/src/NodeFile.cpp:215
void dump(const std::string &fileName) const
dumps the mesh to a file with the given name.
Definition: finley/src/FinleyDomain.cpp:564
void Assemble_LumpedSystem(const NodeFile *nodes, const ElementFile *elements, escript::Data &lumpedMat, const escript::Data &D, bool useHRZ)
Definition: finley/src/Assemble_LumpedSystem.cpp:37
void RuntimeErrorTranslator(const EsysException &e)
Function which translates an EsysException into a python RuntimeError.
Definition: ExceptionTranslators.cpp:37
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:61
static escript::Domain_ptr load(const std::string &filename)
recovers domain from a dump file
Definition: finley/src/DomainFactory.cpp:491
@ Line3Macro
Definition: ReferenceElements.h:113
dim_t getGlobalNumNodes() const
Definition: finley/src/NodeFile.h:226
Domain_ptr glueFaces(const bp::list &meshList, double safetyFactor, double tolerance, bool optimize)
Definition: finley/src/DomainFactory.cpp:1288
void setElements(ElementFile *elements)
replaces the element file by elements
Definition: finley/src/FinleyDomain.cpp:122
Definition: finley/src/NodeFile.h:42
ElementFile * getPoints() const
returns a pointer to this domain's point (nodal) element file
Definition: finley/src/FinleyDomain.h:335
virtual bool isValidTagName(const std::string &name) const
Returns true if name is a defined tag name.
Definition: finley/src/FinleyDomain.cpp:2636
size_type size() const
Return the number of elements in this DataVectorAlt.
Definition: DataVectorAlt.h:215
virtual int getMPIRank() const
returns the number MPI rank of this processor
Definition: finley/src/FinleyDomain.h:353
void markNodes(std::vector< short > &mask, int offset, bool useLinear)
Definition: finley/src/ElementFile.cpp:305
index_t * reducedDegreesOfFreedomId
Definition: finley/src/NodeFile.h:205
escript::ATP_ptr newTransportProblem(int blocksize, const escript::FunctionSpace &functionspace, int type) const
creates a TransportProblem
Definition: finley/src/FinleyDomain.cpp:1967
@ Nodes
Definition: Finley.h:64
bool initialized
Definition: weipa/src/FinleyDomain.h:70
boost::shared_ptr< NodeData > NodeData_ptr
Definition: weipa.h:69
void Assemble_PDE(const NodeFile *nodes, const ElementFile *elements, escript::ASM_ptr S, escript::Data &F, const escript::Data &A, const escript::Data &B, const escript::Data &C, const escript::Data &D, const escript::Data &X, const escript::Data &Y)
Definition: finley/src/Assemble_PDE.cpp:86
#define FINLEY_REDUCED_CONTACT_ELEMENTS_2
Definition: Finley.h:59
@ SO_DEFAULT
Definition: SolverOptions.h:83
void setOrders()
Definition: finley/src/FinleyDomain.cpp:146
std::vector< std::string > StringVec
Definition: weipa.h:61
void setPoints(ElementFile *elements)
replaces the point element file by elements
Definition: finley/src/FinleyDomain.cpp:140
BOOST_PYTHON_MODULE(finleycpp)
Definition: finleycpp.cpp:32
int getTypeCode() const
Returns the function space type code.
Definition: FunctionSpace.cpp:95
index_t * globalNodesIndex
assigns each local node a global unique ID in a dense labeling
Definition: finley/src/NodeFile.h:183
@ ReducedElements
Definition: Finley.h:67
void IndexList_insertElementsWithRowRangeNoMainDiagonal(IndexList *index_list, index_t firstRow, index_t lastRow, ElementFile *elements, index_t *row_map, index_t *col_map)
Definition: finley/src/IndexList.cpp:89
DudleyDomain implements the AbstractContinuousDomain interface for the Dudley library.
Definition: DudleyDomain.h:88
FunctionSpace function(const AbstractDomain &domain)
Return a function FunctionSpace.
Definition: FunctionSpaceFactory.cpp:43
Data Vector(double value, const FunctionSpace &what, bool expanded)
Return a Data object containing vector data-points. ie: rank 1 data-points.
Definition: DataFactory.cpp:125
std::vector< int > tagsInUse
array of tags which are actually used
Definition: finley/src/ElementFile.h:135
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: finley/src/FinleyDomain.cpp:1897
static dim_t M
Definition: SparseMatrix_saveHB.cpp:37
Definition: finley/src/ElementFile.h:63
void distributeByRankOfDOF(const IndexVector &distribution)
Definition: finley/src/FinleyDomain.cpp:2853
virtual StringVec getVarNames() const
Returns the names of all 'special' domain variables.
Definition: weipa/src/FinleyDomain.cpp:352
FunctionSpace functionOnBoundary(const AbstractDomain &domain)
Return a function on boundary FunctionSpace.
Definition: FunctionSpaceFactory.cpp:55
void createMappings(const IndexVector &dofDistribution, const IndexVector &nodeDistribution)
Definition: finley/src/FinleyDomain.cpp:185
MPI_Comm getMPIComm() const
get the communicator for this domain. Returns an integer on non-MPI builds Routine must be implemente...
Definition: finley/src/FinleyDomain.h:367
int MPI_Comm
Definition: EsysMPI.h:44
void optimizeDOFDistribution(IndexVector &distribution)
Definition: finley/src/Mesh_optimizeDOFDistribution.cpp:66
#define FINLEY_REDUCED_NODES
Definition: Finley.h:55
#define FINLEY_DLL_API
Definition: finley/src/system_dep.h:29
boost::shared_ptr< Pattern > Pattern_ptr
Definition: Pattern.h:39
virtual void setTagMap(const std::string &name, int tag)
sets a map from a clear tag name to a tag key
Definition: finley/src/FinleyDomain.cpp:2620
void Assemble_getNormal(const NodeFile *nodes, const ElementFile *elements, escript::Data &normals)
calculates the normal vector at quadrature points on face elements
Definition: finley/src/Assemble_getNormal.cpp:33
virtual NodeData_ptr getNodes() const
Returns a pointer to the full nodes.
Definition: weipa/src/FinleyDomain.h:63
dim_t getNumDegreesOfFreedom() const
returns the number of degrees of freedom (on this rank)
Definition: finley/src/NodeFile.h:266
virtual int getTag(const std::string &name) const
Return the tag key for tag name.
Definition: finley/src/FinleyDomain.cpp:2625
std::map< std::string, int > TagMap
Definition: finley/src/FinleyDomain.h:82
Base class for all escript domains.
Definition: AbstractDomain.h:51
Stores and manipulates finley mesh nodes.
Definition: FinleyNodes.h:52
virtual NodeData_ptr getMeshByName(const std::string &name) const
Returns the node mesh with given name.
Definition: weipa/src/FinleyDomain.cpp:455
boost::shared_ptr< FinleyNodes > FinleyNodes_ptr
Definition: FinleyNodes.h:43
void setFaceElements(ElementFile *elements)
replaces the face element file by elements
Definition: finley/src/FinleyDomain.cpp:128
index_t * degreesOfFreedomId
Definition: finley/src/NodeFile.h:204
virtual NodeData_ptr getMeshForFunctionSpace(int fsCode) const
Returns the node mesh for given function space code.
Definition: weipa/src/FinleyDomain.cpp:236
Definition: escriptcore/src/IndexList.h:29
const_ReferenceElementSet_ptr referenceElementSet
the reference element to be used
Definition: finley/src/ElementFile.h:120
DataTypes::RealVectorType & getExpandedVectorReference(DataTypes::real_t dummy=0)
Ensures that the Data is expanded and returns its underlying vector Does not check for exclusive writ...
Definition: Data.cpp:5837
@ ContactElementsOne
Definition: Finley.h:73
@ SO_PACKAGE_TRILINOS
Definition: SolverOptions.h:92
boost::shared_ptr< AbstractSystemMatrix > ASM_ptr
Definition: AbstractSystemMatrix.h:33
void gather_global(const index_t *index, const NodeFile *in)
Definition: finley/src/NodeFile.cpp:329
std::complex< real_t > cplx_t
complex data type
Definition: DataTypes.h:55
Domain_ptr rectangle_driver(const bp::list &args)
Definition: finley/src/DomainFactory.cpp:1207
Centering
Definition: DomainChunk.h:31
std::vector< int > tagsInUse
vector of tags which are actually used
Definition: finley/src/NodeFile.h:168
void optimizeOrdering()
reorders the elements so that they are stored close to the nodes
Definition: finley/src/ElementFile.cpp:174
void updateTagList()
Definition: finley/src/ElementFile.h:179
void expand()
Whatever the current Data type make this into a DataExpanded.
Definition: Data.cpp:1180
std::vector< int > IntVec
Definition: weipa.h:60
Stores and manipulates one type of finley mesh elements (cells, faces or contacts).
Definition: FinleyElements.h:77
@ ReducedContactElementsZero
Definition: Finley.h:72
void write(const std::string &fileName) const
writes the current mesh to a file with the given name in the fly file format.
Definition: finley/src/Mesh_write.cpp:88
A suite of factory methods for creating various finley domains.
Definition: finley/src/Assemble.h:32
void setTags(int newTag, const escript::Data &mask)
set tags to newTag where mask > 0
Definition: finley/src/NodeFile.cpp:267
int numDim
number of spatial dimensions
Definition: finley/src/NodeFile.h:162
#define ESYS_ASSERT(a, b)
EsysAssert is a MACRO that will throw an exception if the boolean condition specified is false.
Definition: Assert.h:79
virtual bool supportsContactElements() const
Definition: finley/src/FinleyDomain.h:808
std::vector< index_t > packMask(const std::vector< short > &mask)
Definition: finley/src/Util.cpp:332
void setFunctionSpaceTypeNames()
Build the table of function space type names.
Definition: finley/src/FinleyDomain.cpp:950
void allocTable(dim_t numNodes)
allocates the node table within this node file to hold numNodes nodes.
Definition: finley/src/NodeFile.cpp:127
virtual int getVTKElementType() const
returns the VTK element type
Definition: finley/src/FinleyDomain.cpp:2435
An exception class that signals an invalid argument value.
Definition: EsysException.h:100
#define DUDLEY_FACE_ELEMENTS
Definition: Dudley.h:44
void prepare(bool optimize)
prepares the mesh for further use
Definition: finley/src/FinleyDomain.cpp:2796
virtual void MPIBarrier() const
If compiled for MPI then execute an MPI_Barrier, else do nothing.
Definition: finley/src/FinleyDomain.cpp:115
ElementFile * m_elements
the table of the elements
Definition: finley/src/FinleyDomain.h:897
A class that provides functionality to read an escript data object from a dump file or an escript::Da...
Definition: DataVar.h:37
virtual void setNewX(const escript::Data &arg)
assigns new location to the domain
Definition: finley/src/FinleyDomain.cpp:1858
@ Elements
Definition: Finley.h:66
AbstractContinuousDomain, base class for continuous domains.
Definition: AbstractContinuousDomain.h:47
virtual escript::Data getX() const
returns locations in the FEM nodes
Definition: finley/src/FinleyDomain.cpp:2386
virtual bool isValidFunctionSpaceType(int functionSpaceType) const
Returns true if the given integer is a valid function space type for this domain.
Definition: finley/src/FinleyDomain.cpp:943
#define FINLEY_CONTACT_ELEMENTS_2
Definition: Finley.h:53
virtual bool initFromEscript(const escript::AbstractDomain *domain)
Initialises the domain using an escript domain instance.
Definition: weipa/src/FinleyDomain.cpp:99
virtual int getReducedSolutionCode() const
Return a ReducedSolution code.
Definition: finley/src/FinleyDomain.cpp:1035
void markNodes(std::vector< short > &mask, index_t offset, bool useLinear) const
Definition: finley/src/FinleyDomain.cpp:194
Domain_ptr readMesh_driver(const bp::list &args)
Definition: finley/src/DomainFactory.cpp:904
#define FINLEY_CONTACT_ELEMENTS_1
Definition: Finley.h:52
Domain_ptr meshMerge(const bp::list &meshList)
Definition: finley/src/DomainFactory.cpp:1272
std::vector< index_t > IndexVector
Definition: DataTypes.h:64
virtual Centering getCenteringForFunctionSpace(int fsCode) const
Returns whether data on given function space is node or cell centered.
Definition: weipa/src/FinleyDomain.cpp:219
int numNodes
number of nodes per element
Definition: finley/src/ElementFile.h:138
const char * Name
the name in text form e.g. "Line1", "Rec12", ...
Definition: ReferenceElements.h:127
~FinleyDomain()
Destructor for FinleyDomain.
Definition: finley/src/FinleyDomain.cpp:106
Represents a full Finley or Dudley domain including nodes and elements.
Definition: weipa/src/FinleyDomain.h:43