escript  Revision_Unversioneddirectory
dudley/src/CPPAdapter/MeshAdapter.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 
18 #if !defined dudley_MeshAdapter_20040526_H
19 #define dudley_MeshAdapter_20040526_H
20 #include "system_dep.h"
21 
22 #include "dudley/Mesh.h"
23 #include "dudley/Dudley.h"
24 #include "dudley/Assemble.h"
25 #include "esysUtils/Esys_MPI.h"
26 
27 #include "DudleyError.h"
28 #include "DudleyAdapterException.h"
29 
30 #include <pasowrap/SystemMatrixAdapter.h>
31 #include <pasowrap/TransportProblemAdapter.h>
32 #include "escript/AbstractContinuousDomain.h"
33 #include "escript/FunctionSpace.h"
34 #include "escript/FunctionSpaceFactory.h"
35 
36 #include <boost/shared_ptr.hpp>
37 #include <boost/python/dict.hpp>
38 #include <boost/python/extract.hpp>
39 
40 #include <map>
41 #include <vector>
42 #include <string>
43 #include <sstream>
44 
45 namespace dudley {
46 
48 {
49  void operator()(void const *ptr) const
50  {
51  }
52 };
53 
54 
66 {
67  public:
68 
69  //
70  // Codes for function space types supported
71  static const int DegreesOfFreedom;
72  static const int ReducedDegreesOfFreedom;
73  static const int Nodes;
74  static const int ReducedNodes;
75  static const int Elements;
76  static const int ReducedElements;
77  static const int FaceElements;
78  static const int ReducedFaceElements;
79  static const int Points;
80  static const int ContactElementsZero;
81  static const int ReducedContactElementsZero;
82  static const int ContactElementsOne;
83  static const int ReducedContactElementsOne;
84 
104  MeshAdapter(Dudley_Mesh* dudleyMesh=0);
105 
111  MeshAdapter(const MeshAdapter& in);
112 
120  ~MeshAdapter();
121 
127  virtual int getMPISize() const;
134  virtual int getMPIRank() const;
135 
142  virtual void MPIBarrier() const;
143 
150  virtual bool onMasterProcessor() const;
151 
153  MPI_Comm getMPIComm() const;
154 
161  void write(const std::string& fileName) const;
162 
168  void Print_Mesh_Info(const bool full=false) const;
169 
176  void dump(const std::string& fileName) const;
177 
183  Dudley_Mesh* getDudley_Mesh() const;
184 
192  int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
193 
200  const int* borrowSampleReferenceIDs(int functionSpaceType) const;
201 
208  virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
209 
215  virtual std::string getDescription() const;
216 
222  virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
223 
229  void setFunctionSpaceTypeNames();
230 
236  virtual int getContinuousFunctionCode() const;
237 
243  virtual int getReducedContinuousFunctionCode() const;
244 
250  virtual int getFunctionCode() const;
251 
257  virtual int getReducedFunctionCode() const;
258 
264  virtual int getFunctionOnBoundaryCode() const;
265 
271  virtual int getReducedFunctionOnBoundaryCode() const;
272 
278  virtual int getFunctionOnContactZeroCode() const;
279 
285  virtual int getReducedFunctionOnContactZeroCode() const;
286 
292  virtual int getFunctionOnContactOneCode() const;
293 
299  virtual int getReducedFunctionOnContactOneCode() const;
300 
306  virtual int getSolutionCode() const;
307 
313  virtual int getReducedSolutionCode() const;
314 
320  virtual int getDiracDeltaFunctionsCode() const;
321 
326  typedef std::map<int, std::string> FunctionSpaceNamesMapType;
327 
332  virtual int getDim() const;
333 
343  virtual StatusType getStatus() const;
344 
345 
351  virtual int getNumDataPointsGlobal() const;
352 
359  virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
360 
367  virtual void setToX(escript::Data& arg) const;
368 
376  virtual void setTagMap(const std::string& name, int tag);
377 
384  virtual int getTag(const std::string& name) const;
385 
392  virtual bool isValidTagName(const std::string& name) const;
393 
399  virtual std::string showTagNames() const;
400 
406  virtual void setNewX(const escript::Data& arg);
407 
413  virtual void interpolateOnDomain(escript::Data& target, const escript::Data& source) const;
414 
415 
417  virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
418 
420  virtual signed char preferredInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
421 
422 
428  bool
429  commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
430 
437  virtual void interpolateAcross(escript::Data& target, const escript::Data& source) const;
438 
444  virtual bool probeInterpolationAcross(int functionSpaceType_source,const escript::AbstractDomain& targetDomain, int functionSpaceType_target) const;
445 
452  virtual void setToNormal(escript::Data& out) const;
453 
460  virtual void setToSize(escript::Data& out) const;
461 
468  virtual void setToGradient(escript::Data& grad,const escript::Data& arg) const;
469 
476  virtual void setToIntegrals(std::vector<double>& integrals,const escript::Data& arg) const;
477 
487  virtual int getSystemMatrixTypeId(const boost::python::object& options) const;
488 
499  virtual int getTransportTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
500 
507  virtual bool isCellOriented(int functionSpaceCode) const;
508 
510  virtual bool ownSample(int fs_code, index_t id) const;
511 
517  virtual void addPDEToSystem(
519  const escript::Data& A, const escript::Data& B, const escript::Data& C,
520  const escript::Data& D, const escript::Data& X, const escript::Data& Y,
521  const escript::Data& d, const escript::Data& y,
522  const escript::Data& d_contact, const escript::Data& y_contact,
523  const escript::Data& d_dirac, const escript::Data& y_dirac) const;
524 
525 
531  virtual void addPDEToLumpedSystem(
532  escript::Data& mat,
533  const escript::Data& D,
534  const escript::Data& d,
535  const escript::Data& d_dirac,
536  const bool useHRZ) const;
537 
543  virtual void addPDEToRHS(escript::Data& rhs,
544  const escript::Data& X, const escript::Data& Y,
545  const escript::Data& y, const escript::Data& y_contact, const escript::Data& y_dirac) const;
552  virtual void addPDEToTransportProblem(
554  const escript::Data& M,
555  const escript::Data& A, const escript::Data& B, const escript::Data& C,const escript::Data& D,
556  const escript::Data& X,const escript::Data& Y,
557  const escript::Data& d, const escript::Data& y,
558  const escript::Data& d_contact,const escript::Data& y_contact,
559  const escript::Data& d_dirac,const escript::Data& y_dirac) const;
560 
561 
567  escript::ASM_ptr newSystemMatrix(
568  const int row_blocksize,
569  const escript::FunctionSpace& row_functionspace,
570  const int column_blocksize,
571  const escript::FunctionSpace& column_functionspace,
572  const int type) const;
580  escript::ATP_ptr newTransportProblem(
581  const int blocksize,
582  const escript::FunctionSpace& functionspace,
583  const int type) const;
584 
589  virtual escript::Data getX() const;
590 
595  virtual escript::Data getNormal() const;
596 
601  virtual escript::Data getSize() const;
602 
607  virtual bool operator==(const escript::AbstractDomain& other) const;
609  virtual bool operator!=(const escript::AbstractDomain& other) const;
610 
617  virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
618 
624  virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
625 
627  virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
628 
629 
634  virtual
635  bool canTag(int functionSpaceCode) const;
636 
642  virtual
643  int getApproximationOrder(const int functionSpaceCode) const;
644 
645 
647  bool supportsContactElements() const;
648 
649 
651  virtual escript::Data randomFill(const escript::DataTypes::ShapeType& shape,
652  const escript::FunctionSpace& what, long seed, const boost::python::tuple& filter) const;
653 
654  protected:
655 
656  private:
657  void extractArgsFromDict(const boost::python::dict& arg, int& numData,
658  char**& names, escript::Data*& data,
659  escript::Data**& dataPtr) const;
660 
661  //
662  // pointer to the externally created dudley mesh
663  boost::shared_ptr<Dudley_Mesh> m_dudleyMesh;
664 
665  static FunctionSpaceNamesMapType m_functionSpaceTypeNames;
666 
667 };
668 
669 } // end of namespace
670 
671 #endif
AbstractContinuousDomain, base class for continuous domains.
Definition: AbstractContinuousDomain.h:46
Definition: FunctionSpace.h:34
static const int ReducedElements
Definition: dudley/src/CPPAdapter/MeshAdapter.h:76
static const int Points
Definition: dudley/src/CPPAdapter/MeshAdapter.h:79
bool probeInterpolationAcross(int fsType_source, const escript::AbstractDomain &domain, int fsType_target, int dim)
Definition: CrossDomainCoupler.cpp:36
void operator()(void const *ptr) const
Definition: dudley/src/CPPAdapter/MeshAdapter.h:49
static const int Nodes
Definition: dudley/src/CPPAdapter/MeshAdapter.h:73
Definition: dudley/src/CPPAdapter/MeshAdapter.h:47
std::vector< int > ShapeType
The shape of a single datapoint.
Definition: DataTypes.h:38
static dim_t M
Definition: SparseMatrix_saveHB.cpp:37
static const int ReducedFaceElements
Definition: dudley/src/CPPAdapter/MeshAdapter.h:78
boost::shared_ptr< AbstractTransportProblem > ATP_ptr
Definition: AbstractTransportProblem.h:162
int MPI_Comm
Definition: Esys_MPI.h:38
static const int Elements
Definition: dudley/src/CPPAdapter/MeshAdapter.h:75
static const int ReducedNodes
Definition: dudley/src/CPPAdapter/MeshAdapter.h:74
Definition: dudley/src/Mesh.h:77
static const int ContactElementsZero
Definition: dudley/src/CPPAdapter/MeshAdapter.h:80
static const int ReducedDegreesOfFreedom
Definition: dudley/src/CPPAdapter/MeshAdapter.h:72
#define DUDLEY_DLL_API
Definition: dudley/src/CPPAdapter/system_dep.h:29
int StatusType
Definition: AbstractDomain.h:48
Data represents a collection of datapoints.
Definition: Data.h:68
static const int DegreesOfFreedom
Definition: dudley/src/CPPAdapter/MeshAdapter.h:71
int getTag(unsigned char sourcex, unsigned char sourcey, unsigned char sourcez, unsigned char targetx, unsigned char targety, unsigned char targetz)
Definition: blocktools.cpp:412
Definition: DudleyAdapterException.h:24
static FunctionSpaceNamesMapType m_functionSpaceTypeNames
Definition: dudley/src/CPPAdapter/MeshAdapter.h:665
int index_t
Definition: types.h:24
static const int ReducedContactElementsOne
Definition: dudley/src/CPPAdapter/MeshAdapter.h:83
Give a short description of what AbstractTransportProblem does.
Definition: AbstractTransportProblem.h:45
static const int ContactElementsOne
Definition: dudley/src/CPPAdapter/MeshAdapter.h:82
Base class for escript system matrices.
Definition: AbstractSystemMatrix.h:37
boost::shared_ptr< Dudley_Mesh > m_dudleyMesh
Definition: dudley/src/CPPAdapter/MeshAdapter.h:663
boost::shared_ptr< AbstractSystemMatrix > ASM_ptr
Definition: AbstractSystemMatrix.h:170
Base class for all escript domains.
Definition: AbstractDomain.h:45
std::map< int, std::string > FunctionSpaceNamesMapType
Definition: dudley/src/CPPAdapter/MeshAdapter.h:326
static const int ReducedContactElementsZero
Definition: dudley/src/CPPAdapter/MeshAdapter.h:81
static const int FaceElements
Definition: dudley/src/CPPAdapter/MeshAdapter.h:77
MeshAdapter implements the AbstractContinuousDomain interface for the Dudley library.
Definition: dudley/src/CPPAdapter/MeshAdapter.h:65