ESScript  Revision_4488
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 #include "dudley/Mesh.h"
22 #include "dudley/Dudley.h"
23 #include "dudley/Assemble.h"
24 #include "esysUtils/Esys_MPI.h"
25 
26 #include "DudleyError.h"
27 #include "DudleyAdapterException.h"
28 
29 #include <pasowrap/SystemMatrixAdapter.h>
30 #include <pasowrap/TransportProblemAdapter.h>
31 #include "escript/AbstractContinuousDomain.h"
32 #include "escript/FunctionSpace.h"
33 #include "escript/FunctionSpaceFactory.h"
34 
35 #include <boost/shared_ptr.hpp>
36 #include <boost/python/dict.hpp>
37 #include <boost/python/extract.hpp>
38 
39 #include <map>
40 #include <vector>
41 #include <string>
42 #include <sstream>
43 
44 namespace dudley {
45 
47 {
48  void operator()(void const *ptr) const
49  {
50  }
51 };
52 
53 
65 
66  public:
67 
68  //
69  // Codes for function space types supported
70  static const int DegreesOfFreedom;
71  static const int ReducedDegreesOfFreedom;
72  static const int Nodes;
73  static const int ReducedNodes;
74  static const int Elements;
75  static const int ReducedElements;
76  static const int FaceElements;
77  static const int ReducedFaceElements;
78  static const int Points;
79  static const int ContactElementsZero;
80  static const int ReducedContactElementsZero;
81  static const int ContactElementsOne;
82  static const int ReducedContactElementsOne;
83 
103  MeshAdapter(Dudley_Mesh* dudleyMesh=0);
104 
110  MeshAdapter(const MeshAdapter& in);
111 
119  ~MeshAdapter();
120 
126  virtual int getMPISize() const;
133  virtual int getMPIRank() const;
134 
141  virtual void MPIBarrier() const;
142 
149  virtual bool onMasterProcessor() const;
150 
152 #ifdef ESYS_MPI
153  MPI_Comm
154 #else
155  unsigned int
156 #endif
157  getMPIComm() const;
158 
159 
166  void write(const std::string& fileName) const;
167 
173  void Print_Mesh_Info(const bool full=false) const;
174 
181  void dump(const std::string& fileName) const;
182 
188  Dudley_Mesh* getDudley_Mesh() const;
189 
197  int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
198 
205  const int* borrowSampleReferenceIDs(int functionSpaceType) const;
206 
213  virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
214 
220  virtual std::string getDescription() const;
221 
227  virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
228 
235 
241  virtual int getContinuousFunctionCode() const;
242 
248  virtual int getReducedContinuousFunctionCode() const;
249 
255  virtual int getFunctionCode() const;
256 
262  virtual int getReducedFunctionCode() const;
263 
269  virtual int getFunctionOnBoundaryCode() const;
270 
276  virtual int getReducedFunctionOnBoundaryCode() const;
277 
283  virtual int getFunctionOnContactZeroCode() const;
284 
290  virtual int getReducedFunctionOnContactZeroCode() const;
291 
297  virtual int getFunctionOnContactOneCode() const;
298 
304  virtual int getReducedFunctionOnContactOneCode() const;
305 
311  virtual int getSolutionCode() const;
312 
318  virtual int getReducedSolutionCode() const;
319 
325  virtual int getDiracDeltaFunctionsCode() const;
326 
331  typedef std::map<int, std::string> FunctionSpaceNamesMapType;
332 
337  virtual int getDim() const;
338 
348  virtual StatusType getStatus() const;
349 
350 
356  virtual int getNumDataPointsGlobal() const;
357 
364  virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
365 
372  virtual void setToX(escript::Data& arg) const;
373 
381  virtual void setTagMap(const std::string& name, int tag);
382 
389  virtual int getTag(const std::string& name) const;
390 
397  virtual bool isValidTagName(const std::string& name) const;
398 
404  virtual std::string showTagNames() const;
405 
411  virtual void setNewX(const escript::Data& arg);
412 
418  virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
419 
420 
422  virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
423 
425  virtual signed char preferredInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
426 
427 
433  bool
434  commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
435 
442  virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
443 
449  virtual bool probeInterpolationACross(int functionSpaceType_source,const escript::AbstractDomain& targetDomain, int functionSpaceType_target) const;
450 
457  virtual void setToNormal(escript::Data& out) const;
458 
465  virtual void setToSize(escript::Data& out) const;
466 
473  virtual void setToGradient(escript::Data& grad,const escript::Data& arg) const;
474 
481  virtual void setToIntegrals(std::vector<double>& integrals,const escript::Data& arg) const;
482 
493  virtual int getSystemMatrixTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
494 
505  virtual int getTransportTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
506 
513  virtual bool isCellOriented(int functionSpaceCode) const;
514 
516  virtual bool ownSample(int fs_code, index_t id) const;
517 
523  virtual void addPDEToSystem(
525  const escript::Data& A, const escript::Data& B, const escript::Data& C,
526  const escript::Data& D, const escript::Data& X, const escript::Data& Y,
527  const escript::Data& d, const escript::Data& y,
528  const escript::Data& d_contact, const escript::Data& y_contact,
529  const escript::Data& d_dirac, const escript::Data& y_dirac) const;
530 
531 
537  virtual void addPDEToLumpedSystem(
538  escript::Data& mat,
539  const escript::Data& D,
540  const escript::Data& d,
541  const escript::Data& d_dirac,
542  const bool useHRZ) const;
543 
549  virtual void addPDEToRHS(escript::Data& rhs,
550  const escript::Data& X, const escript::Data& Y,
551  const escript::Data& y, const escript::Data& y_contact, const escript::Data& y_dirac) const;
558  virtual void addPDEToTransportProblem(
560  const escript::Data& M,
561  const escript::Data& A, const escript::Data& B, const escript::Data& C,const escript::Data& D,
562  const escript::Data& X,const escript::Data& Y,
563  const escript::Data& d, const escript::Data& y,
564  const escript::Data& d_contact,const escript::Data& y_contact,
565  const escript::Data& d_dirac,const escript::Data& y_dirac) const;
566 
567 
574  const int row_blocksize,
575  const escript::FunctionSpace& row_functionspace,
576  const int column_blocksize,
577  const escript::FunctionSpace& column_functionspace,
578  const int type) const;
587  const int blocksize,
588  const escript::FunctionSpace& functionspace,
589  const int type) const;
590 
595  virtual escript::Data getX() const;
596 
601  virtual escript::Data getNormal() const;
602 
607  virtual escript::Data getSize() const;
608 
613  virtual bool operator==(const escript::AbstractDomain& other) const;
615  virtual bool operator!=(const escript::AbstractDomain& other) const;
616 
623  virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
624 
630  virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
631 
633  virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
634 
635 
640  virtual
641  bool canTag(int functionSpaceCode) const;
642 
648  virtual
649  int getApproximationOrder(const int functionSpaceCode) const;
650 
651 
653  bool supportsContactElements() const;
654  protected:
655 
656  private:
657  void extractArgsFromDict(const boost::python::dict& arg, int& numData,
658  char**& names, escriptDataC*& data,
659  escriptDataC**& dataPtr) const;
660 
661  //
662  // pointer to the externally created dudley mesh
663  boost::shared_ptr<Dudley_Mesh> m_dudleyMesh;
664 
666 
667 };
668 
669 } // end of namespace
670 
671 #endif