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>
82typedef 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;
607 virtual bool probeInterpolationAcross(
int functionSpaceType_source,
609 int functionSpaceType_target)
const;
637 virtual void setToIntegrals(std::vector<escript::DataTypes::real_t>& integrals,
639 virtual void setToIntegrals(std::vector<escript::DataTypes::cplx_t>& integrals,
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,
826 bool reducedColOrder)
const;
829#ifdef ESYS_HAVE_TRILINOS
831 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,
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;
913#ifdef ESYS_HAVE_TRILINOS
914 mutable esys_trilinos::TrilinosGraph_ptr m_fullGraph;
915 mutable esys_trilinos::TrilinosGraph_ptr m_reducedGraph;
int MPI_Comm
Definition EsysMPI.h:44
AbstractContinuousDomain, base class for continuous domains.
Definition AbstractContinuousDomain.h:47
Base class for all escript domains.
Definition AbstractDomain.h:51
Base class for escript system matrices.
Definition AbstractSystemMatrix.h:44
Give a short description of what AbstractTransportProblem does.
Definition AbstractTransportProblem.h:45
Data represents a collection of datapoints.
Definition Data.h:64
Definition FunctionSpace.h:36
Definition finley/src/ElementFile.h:63
FinleyDomain implements the AbstractContinuousDomain interface for the Finley library.
Definition finley/src/FinleyDomain.h:97
NodeFile * getNodes() const
returns a pointer to this domain's node file
Definition finley/src/FinleyDomain.h:287
static FunctionSpaceNamesMapType m_functionSpaceTypeNames
Definition finley/src/FinleyDomain.h:918
int integrationOrder
Definition finley/src/FinleyDomain.h:892
std::string m_name
domain description
Definition finley/src/FinleyDomain.h:889
ElementFile * m_faceElements
the table of face elements
Definition finley/src/FinleyDomain.h:899
NodeFile * m_nodes
the table of the nodes
Definition finley/src/FinleyDomain.h:895
int reducedApproximationOrder
Definition finley/src/FinleyDomain.h:891
virtual int getMPIRank() const
returns the number MPI rank of this processor
Definition finley/src/FinleyDomain.h:353
virtual bool supportsContactElements() const
Definition finley/src/FinleyDomain.h:808
int approximationOrder
Definition finley/src/FinleyDomain.h:890
std::map< int, std::string > FunctionSpaceNamesMapType
Definition finley/src/FinleyDomain.h:511
virtual int getMPISize() const
returns the number of processors used for this domain
Definition finley/src/FinleyDomain.h:347
int reducedIntegrationOrder
Definition finley/src/FinleyDomain.h:893
ElementFile * getFaceElements() const
returns a pointer to this domain's face element file
Definition finley/src/FinleyDomain.h:311
virtual int getDim() const
returns the dimensionality of this domain
Definition finley/src/FinleyDomain.h:516
ElementFile * m_elements
the table of the elements
Definition finley/src/FinleyDomain.h:897
ElementFile * getElements() const
returns a pointer to this domain's element file
Definition finley/src/FinleyDomain.h:299
virtual bool onMasterProcessor() const
returns true if on MPI processor 0, else false
Definition finley/src/FinleyDomain.h:365
TagMap m_tagMap
the tag map mapping names to tag keys
Definition finley/src/FinleyDomain.h:905
const TagMap & getTagMap() const
returns a reference to the tag name->value map
Definition finley/src/FinleyDomain.h:818
ElementFile * m_points
the table of points (treated as elements of dimension 0)
Definition finley/src/FinleyDomain.h:903
ElementFile * m_contactElements
the table of contact elements
Definition finley/src/FinleyDomain.h:901
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
virtual escript::JMPI getMPI() const
returns a reference to the MPI information wrapper for this domain
Definition finley/src/FinleyDomain.h:341
ElementFile * getContactElements() const
returns a pointer to this domain's contact element file
Definition finley/src/FinleyDomain.h:323
escript::JMPI m_mpiInfo
MPI information.
Definition finley/src/FinleyDomain.h:887
ElementFile * getPoints() const
returns a pointer to this domain's point (nodal) element file
Definition finley/src/FinleyDomain.h:335
Definition finley/src/NodeFile.h:42
#define FINLEY_DLL_API
Definition finley/src/system_dep.h:29
std::vector< index_t > IndexVector
Definition DataTypes.h:64
std::vector< int > ShapeType
The shape of a single datapoint.
Definition DataTypes.h:44
index_t dim_t
Definition DataTypes.h:66
int index_t
type for array/matrix indices used both globally and on each rank
Definition DataTypes.h:61
boost::shared_ptr< AbstractSystemMatrix > ASM_ptr
Definition AbstractSystemMatrix.h:35
boost::shared_ptr< AbstractTransportProblem > ATP_ptr
Definition AbstractTransportProblem.h:161
boost::shared_ptr< AbstractDomain > Domain_ptr
Definition AbstractDomain.h:43
boost::shared_ptr< JMPI_ > JMPI
Definition EsysMPI.h:76
A suite of factory methods for creating various finley domains.
Definition finley/src/Assemble.h:32
SystemMatrixType
Definition finley/src/FinleyDomain.h:84
@ SMT_TRILINOS
Definition finley/src/FinleyDomain.h:86
@ SMT_PASO
Definition finley/src/FinleyDomain.h:85
@ SMT_COMPLEX
Definition finley/src/FinleyDomain.h:87
@ SMT_UNROLL
Definition finley/src/FinleyDomain.h:88
std::map< std::string, int > TagMap
Definition finley/src/FinleyDomain.h:82
Domain_ptr glueFaces(const bp::list &meshList, double safetyFactor, double tolerance, bool optimize)
Definition finley/src/DomainFactory.cpp:1288
Domain_ptr joinFaces(const bp::list &meshList, double safetyFactor, double tolerance, bool optimize)
Definition finley/src/DomainFactory.cpp:1300
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition SystemMatrixPattern.h:41