Escript  Revision_4320
dudley/src/CPPAdapter/MeshAdapter.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2013 by University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Open Software License version 3.0
9 * http://www.opensource.org/licenses/osl-3.0.php
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development since 2012 by School of Earth Sciences
13 *
14 *****************************************************************************/
15 
16 
17 #if !defined dudley_MeshAdapter_20040526_H
18 #define dudley_MeshAdapter_20040526_H
19 #include "system_dep.h"
20 
21 extern "C" {
22 #include "dudley/Mesh.h"
23 #include "dudley/Dudley.h"
24 #include "dudley/Assemble.h"
25 #include "esysUtils/Esys_MPI.h"
26 }
27 
28 #include "DudleyError.h"
29 #include "DudleyAdapterException.h"
30 
31 #include <pasowrap/SystemMatrixAdapter.h>
32 #include <pasowrap/TransportProblemAdapter.h>
33 #include "escript/AbstractContinuousDomain.h"
34 #include "escript/FunctionSpace.h"
35 #include "escript/FunctionSpaceFactory.h"
36 
37 #include <boost/shared_ptr.hpp>
38 #include <boost/python/dict.hpp>
39 #include <boost/python/extract.hpp>
40 
41 #include <map>
42 #include <vector>
43 #include <string>
44 #include <sstream>
45 
46 namespace dudley {
47 
49 {
50  void operator()(void const *ptr) const
51  {
52  }
53 };
54 
55 
67 
68  public:
69 
70  //
71  // Codes for function space types supported
72  static const int DegreesOfFreedom;
73  static const int ReducedDegreesOfFreedom;
74  static const int Nodes;
75  static const int ReducedNodes;
76  static const int Elements;
77  static const int ReducedElements;
78  static const int FaceElements;
79  static const int ReducedFaceElements;
80  static const int Points;
81  static const int ContactElementsZero;
82  static const int ReducedContactElementsZero;
83  static const int ContactElementsOne;
84  static const int ReducedContactElementsOne;
85 
105  MeshAdapter(Dudley_Mesh* dudleyMesh=0);
106 
112  MeshAdapter(const MeshAdapter& in);
113 
121  ~MeshAdapter();
122 
128  virtual int getMPISize() const;
135  virtual int getMPIRank() const;
136 
143  virtual void MPIBarrier() const;
144 
151  virtual bool onMasterProcessor() const;
152 
154 #ifdef ESYS_MPI
155  MPI_Comm
156 #else
157  unsigned int
158 #endif
159  getMPIComm() const;
160 
161 
168  void write(const std::string& fileName) const;
169 
175  void Print_Mesh_Info(const bool full=false) const;
176 
183  void dump(const std::string& fileName) const;
184 
190  Dudley_Mesh* getDudley_Mesh() const;
191 
199  int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
200 
207  const int* borrowSampleReferenceIDs(int functionSpaceType) const;
208 
215  virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
216 
222  virtual std::string getDescription() const;
223 
229  virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
230 
237 
243  virtual int getContinuousFunctionCode() const;
244 
250  virtual int getReducedContinuousFunctionCode() const;
251 
257  virtual int getFunctionCode() const;
258 
264  virtual int getReducedFunctionCode() const;
265 
271  virtual int getFunctionOnBoundaryCode() const;
272 
278  virtual int getReducedFunctionOnBoundaryCode() const;
279 
285  virtual int getFunctionOnContactZeroCode() const;
286 
292  virtual int getReducedFunctionOnContactZeroCode() const;
293 
299  virtual int getFunctionOnContactOneCode() const;
300 
306  virtual int getReducedFunctionOnContactOneCode() const;
307 
313  virtual int getSolutionCode() const;
314 
320  virtual int getReducedSolutionCode() const;
321 
327  virtual int getDiracDeltaFunctionsCode() const;
328 
333  typedef std::map<int, std::string> FunctionSpaceNamesMapType;
334 
339  virtual int getDim() const;
340 
350  virtual StatusType getStatus() const;
351 
352 
358  virtual int getNumDataPointsGlobal() const;
359 
366  virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
367 
374  virtual void setToX(escript::Data& arg) const;
375 
383  virtual void setTagMap(const std::string& name, int tag);
384 
391  virtual int getTag(const std::string& name) const;
392 
399  virtual bool isValidTagName(const std::string& name) const;
400 
406  virtual std::string showTagNames() const;
407 
413  virtual void setNewX(const escript::Data& arg);
414 
420  virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
421 
422 
424  virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
425 
427  virtual signed char preferredInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
428 
429 
435  bool
436  commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
437 
444  virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
445 
451  virtual bool probeInterpolationACross(int functionSpaceType_source,const escript::AbstractDomain& targetDomain, int functionSpaceType_target) const;
452 
459  virtual void setToNormal(escript::Data& out) const;
460 
467  virtual void setToSize(escript::Data& out) const;
468 
475  virtual void setToGradient(escript::Data& grad,const escript::Data& arg) const;
476 
483  virtual void setToIntegrals(std::vector<double>& integrals,const escript::Data& arg) const;
484 
495  virtual int getSystemMatrixTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
496 
507  virtual int getTransportTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
508 
515  virtual bool isCellOriented(int functionSpaceCode) const;
516 
518  virtual bool ownSample(int fs_code, index_t id) const;
519 
525  virtual void addPDEToSystem(
527  const escript::Data& A, const escript::Data& B, const escript::Data& C,
528  const escript::Data& D, const escript::Data& X, const escript::Data& Y,
529  const escript::Data& d, const escript::Data& y,
530  const escript::Data& d_contact, const escript::Data& y_contact,
531  const escript::Data& d_dirac, const escript::Data& y_dirac) const;
532 
533 
539  virtual void addPDEToLumpedSystem(
540  escript::Data& mat,
541  const escript::Data& D,
542  const escript::Data& d,
543  const escript::Data& d_dirac,
544  const bool useHRZ) const;
545 
551  virtual void addPDEToRHS(escript::Data& rhs,
552  const escript::Data& X, const escript::Data& Y,
553  const escript::Data& y, const escript::Data& y_contact, const escript::Data& y_dirac) const;
560  virtual void addPDEToTransportProblem(
562  const escript::Data& M,
563  const escript::Data& A, const escript::Data& B, const escript::Data& C,const escript::Data& D,
564  const escript::Data& X,const escript::Data& Y,
565  const escript::Data& d, const escript::Data& y,
566  const escript::Data& d_contact,const escript::Data& y_contact,
567  const escript::Data& d_dirac,const escript::Data& y_dirac) const;
568 
569 
576  const int row_blocksize,
577  const escript::FunctionSpace& row_functionspace,
578  const int column_blocksize,
579  const escript::FunctionSpace& column_functionspace,
580  const int type) const;
589  const int blocksize,
590  const escript::FunctionSpace& functionspace,
591  const int type) const;
592 
597  virtual escript::Data getX() const;
598 
603  virtual escript::Data getNormal() const;
604 
609  virtual escript::Data getSize() const;
610 
615  virtual bool operator==(const escript::AbstractDomain& other) const;
617  virtual bool operator!=(const escript::AbstractDomain& other) const;
618 
625  virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
626 
632  virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
633 
635  virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
636 
637 
642  virtual
643  bool canTag(int functionSpaceCode) const;
644 
650  virtual
651  int getApproximationOrder(const int functionSpaceCode) const;
652 
653 
655  bool supportsContactElements() const;
656  protected:
657 
658  private:
659  void extractArgsFromDict(const boost::python::dict& arg, int& numData,
660  char**& names, escriptDataC*& data,
661  escriptDataC**& dataPtr) const;
662 
663  //
664  // pointer to the externally created dudley mesh
665  boost::shared_ptr<Dudley_Mesh> m_dudleyMesh;
666 
668 
669 };
670 
671 } // end of namespace
672 
673 #endif