18#ifndef __DUDLEY_DOMAIN_H__
19#define __DUDLEY_DOMAIN_H__
51#include <dudley/Dudley.h>
52#include <dudley/ElementFile.h>
53#include <dudley/NodeFile.h>
54#include <dudley/Util.h>
56#include <escript/AbstractContinuousDomain.h>
57#include <escript/FunctionSpace.h>
58#include <escript/FunctionSpaceFactory.h>
61#include <paso/SystemMatrixPattern.h>
63#ifdef ESYS_HAVE_TRILINOS
64#include <trilinoswrap/types.h>
73typedef std::map<std::string, int>
TagMap;
106 const std::string& filename,
bool optimize);
117 const std::string& filename,
int numDim,
132 double l1,
bool optimize,
149 double l0,
double l1,
double l2,
238 virtual void MPIBarrier()
const;
254 void write(
const std::string& fileName)
const;
260 void Print_Mesh_Info(
bool full=
false)
const;
267 void dump(
const std::string& fileName)
const;
275 int getTagFromSampleNo(
int functionSpaceType,
index_t sampleNo)
const;
282 const index_t* borrowSampleReferenceIDs(
int functionSpaceType)
const;
289 virtual bool isValidFunctionSpaceType(
int functionSpaceType)
const;
295 virtual std::string getDescription()
const;
301 virtual std::string functionSpaceTypeAsString(
int functionSpaceType)
const;
307 void setFunctionSpaceTypeNames();
313 virtual int getContinuousFunctionCode()
const;
319 virtual int getReducedContinuousFunctionCode()
const;
325 virtual int getFunctionCode()
const;
331 virtual int getReducedFunctionCode()
const;
337 virtual int getFunctionOnBoundaryCode()
const;
343 virtual int getReducedFunctionOnBoundaryCode()
const;
349 virtual int getFunctionOnContactZeroCode()
const;
355 virtual int getReducedFunctionOnContactZeroCode()
const;
361 virtual int getFunctionOnContactOneCode()
const;
367 virtual int getReducedFunctionOnContactOneCode()
const;
373 virtual int getSolutionCode()
const;
379 virtual int getReducedSolutionCode()
const;
385 virtual int getDiracDeltaFunctionsCode()
const;
395 virtual int getDim()
const {
return m_nodes->numDim; }
403 virtual StatusType getStatus()
const;
409 virtual dim_t getNumDataPointsGlobal()
const;
416 virtual std::pair<int,dim_t> getDataShape(
int functionSpaceCode)
const;
431 virtual void setTagMap(
const std::string& name,
int tag);
438 virtual int getTag(
const std::string& name)
const;
445 virtual bool isValidTagName(
const std::string& name)
const;
451 virtual std::string showTagNames()
const;
466 virtual bool probeInterpolationOnDomain(
int functionSpaceType_source,
467 int functionSpaceType_target)
const;
469 virtual signed char preferredInterpolationOnDomain(
int functionSpaceType_source,
int functionSpaceType_target)
const;
475 bool commonFunctionSpace(
const std::vector<int>& fs,
int& resultcode)
const;
488 int functionSpaceType_target)
const;
529 virtual int getSystemMatrixTypeId(
const boost::python::object& options)
const;
540 virtual int getTransportTypeId(
int solver,
int preconditioner,
int package,
541 bool symmetry)
const;
548 virtual bool isCellOriented(
int functionSpaceCode)
const;
550 virtual bool ownSample(
int fsCode,
index_t id)
const;
556 virtual void addPDEToSystem(
590 virtual void addPDEToTransportProblem(
609 int column_blocksize,
629#ifdef ESYS_HAVE_BOOST_NUMPY
630 boost::python::numpy::ndarray getNumpyX()
const;
632 boost::python::numpy::ndarray getConnectivityInfo()
const;
656 virtual void setTags(
int functionSpaceType,
int newTag,
664 virtual int getNumberOfTagsInUse(
int functionSpaceCode)
const;
666 virtual const int* borrowListOfTagsInUse(
int functionSpaceCode)
const;
672 virtual bool canTag(
int functionSpaceCode)
const;
677 virtual int getApproximationOrder(
int functionSpaceCode)
const;
683 const boost::python::tuple& filter)
const;
685 void createMappings(
const std::vector<index_t>& dofDistribution,
686 const std::vector<index_t>& nodeDistribution);
692 template<
typename Scalar>
693 void setToIntegralsWorker(std::vector<Scalar>& integrals,
701#ifdef ESYS_HAVE_TRILINOS
703 esys_trilinos::const_TrilinosGraph_ptr getTrilinosGraph()
const {
704 return m_nodes->getTrilinosGraph();
709 void prepare(
bool optimize);
718 void resolveNodeIds();
724 void createColoring(
const index_t* dofMap);
725 void distributeByRankOfDOF(
const IndexVector& distribution);
726 void markNodes(std::vector<short>& mask,
index_t offset)
const;
727 void optimizeDOFDistribution(
IndexVector& distribution);
728 void optimizeDOFLabeling(
const IndexVector& distribution);
729 void optimizeElementOrdering();
730 void updateTagList();
731 void printElementInfo(
const ElementFile* e,
const std::string& title,
732 const std::string& defaultType,
bool full)
const;
734 void writeElementInfo(std::ostream& stream,
const ElementFile* e,
735 const std::string& defaultType)
const;
int MPI_Comm
Definition: EsysMPI.h:44
DudleyDomain implements the AbstractContinuousDomain interface for the Dudley library.
Definition: DudleyDomain.h:88
virtual int getDim() const
Returns the spatial dimension of the domain.
Definition: DudleyDomain.h:395
virtual escript::JMPI getMPI() const
returns a reference to the MPI information wrapper for this domain
Definition: DudleyDomain.h:220
virtual int getMPISize() const
returns the number of processors used for this domain
Definition: DudleyDomain.h:226
ElementFile * m_points
the table of points (treated as elements of dimension 0)
Definition: DudleyDomain.h:748
virtual bool onMasterProcessor() const
returns true if on MPI processor 0, else false
Definition: DudleyDomain.h:244
ElementFile * m_elements
the table of the elements
Definition: DudleyDomain.h:744
ElementFile * getPoints() const
returns a pointer to this domain's point (nodal) element file
Definition: DudleyDomain.h:214
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.
ElementFile * m_faceElements
the table of face elements
Definition: DudleyDomain.h:746
TagMap m_tagMap
the tag map mapping names to tag keys
Definition: DudleyDomain.h:750
static FunctionSpaceNamesMapType m_functionSpaceTypeNames
Definition: DudleyDomain.h:756
virtual bool supportsContactElements() const
Definition: DudleyDomain.h:679
ElementFile * getFaceElements() const
returns a pointer to this domain's face element file
Definition: DudleyDomain.h:202
std::string m_name
domain description
Definition: DudleyDomain.h:740
NodeFile * getNodes() const
returns a pointer to this domain's node file
Definition: DudleyDomain.h:178
virtual int getMPIRank() const
returns the number MPI rank of this processor
Definition: DudleyDomain.h:232
std::map< int, std::string > FunctionSpaceNamesMapType
Definition: DudleyDomain.h:390
NodeFile * m_nodes
the table of the nodes
Definition: DudleyDomain.h:742
MPI_Comm getMPIComm() const
get the communicator for this domain. Returns an integer on non-MPI builds Routine must be implemente...
Definition: DudleyDomain.h:246
ElementFile * getElements() const
returns a pointer to this domain's element file
Definition: DudleyDomain.h:190
escript::JMPI m_mpiInfo
MPI information.
Definition: DudleyDomain.h:738
virtual void setToIntegrals(std::vector< escript::DataTypes::cplx_t > &integrals, const escript::Data &arg) const
Definition: dudley/src/ElementFile.h:53
Definition: dudley/src/NodeFile.h:40
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
#define DUDLEY_DLL_API
Definition: dudley/src/system_dep.h:29
A suite of factory methods for creating 2D and 3D dudley domains.
Definition: dudley/src/Assemble.h:32
Domain_ptr readGmsh(const string &fileName, int numDim, int, int, bool optimize)
reads a gmsh mesh file
Definition: dudley/src/DomainFactory.cpp:681
SystemMatrixType
Definition: DudleyDomain.h:75
@ SMT_PASO
Definition: DudleyDomain.h:76
@ SMT_TRILINOS
Definition: DudleyDomain.h:77
@ SMT_COMPLEX
Definition: DudleyDomain.h:78
@ SMT_UNROLL
Definition: DudleyDomain.h:79
std::map< std::string, int > TagMap
Definition: DudleyDomain.h:73
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
Data load(const std::string fileName, const AbstractDomain &domain)
reads Data on domain from file in netCDF format
Definition: DataFactory.cpp:708
boost::shared_ptr< AbstractTransportProblem > ATP_ptr
Definition: AbstractTransportProblem.h:161
boost::shared_ptr< AbstractSystemMatrix > ASM_ptr
Definition: AbstractSystemMatrix.h:35
boost::shared_ptr< AbstractDomain > Domain_ptr
Definition: AbstractDomain.h:43
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:76
double l2(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global L2 norm of x
Definition: PasoUtil.cpp:501
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition: SystemMatrixPattern.h:41
static dim_t M
Definition: SparseMatrix_saveHB.cpp:37
bool probeInterpolationAcross(int fsType_source, const escript::AbstractDomain &domain, int fsType_target, int dim)
Definition: CrossDomainCoupler.cpp:32