Escript  Revision_4320
AbstractContinuousDomain.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 escript_AbstractContinuousDomain_20040528_H
18 #define escript_AbstractContinuousDomain_20040528_H
19 
20 #include "system_dep.h"
21 #include "AbstractDomain.h"
22 
23 #include <string>
24 #include <vector>
25 
26 #include "AbstractSystemMatrix.h"
28 
29 namespace escript {
30 
31 //
32 // Forward declaration
33 class Data;
34 
46 
47  public:
48 
64 
79  virtual ~AbstractContinuousDomain();
80 
87  virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
88 
94  virtual std::string getDescription() const;
95 
101  virtual int getContinuousFunctionCode() const;
102 
108  virtual int getReducedContinuousFunctionCode() const;
109 
115  virtual int getFunctionCode() const;
116 
122  virtual int getReducedFunctionCode() const;
123 
129  virtual int getFunctionOnBoundaryCode() const;
130 
136  virtual int getReducedFunctionOnBoundaryCode() const;
137 
138 
144  virtual int getFunctionOnContactZeroCode() const;
145 
151  virtual int getReducedFunctionOnContactZeroCode() const;
152 
158  virtual int getFunctionOnContactOneCode() const;
159 
165  virtual int getReducedFunctionOnContactOneCode() const;
166 
172  virtual int getSolutionCode() const;
173 
179  virtual int getReducedSolutionCode() const;
180 
186  virtual int getDiracDeltaFunctionsCode() const;
187 
195  virtual int getSystemMatrixTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
196 
204  virtual int getTransportTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
205 
213  virtual void setToIntegrals(std::vector<double>& integrals,const escript::Data& arg) const;
214 
215 // /**
216 // \brief
217 // Return the domain as const AbstractContinuousDomain&
218 // */
219 // ESCRIPT_DLL_API
220 // static const AbstractContinuousDomain& asAbstractContinuousDomain(const AbstractDomain& domain);
221 
222 
223 
224 
230  virtual void addPDEToSystem(
232  const escript::Data& A, const escript::Data& B, const escript::Data& C,
233  const escript::Data& D, const escript::Data& X, const escript::Data& Y,
234  const escript::Data& d, const escript::Data& y,
235  const escript::Data& d_contact, const escript::Data& y_contact,
236  const escript::Data& d_dirac, const escript::Data& y_dirac) const;
237 
238 // We do not require this method at this level since the python side checks to ensure it exists
239 // before calling it.
240 
241 // /**
242 // \brief
243 // adds a PDE onto the lumped stiffness matrix matrix
244 // */
245 // ESCRIPT_DLL_API
246 // virtual void addPDEToLumpedSystem(
247 // escript::Data& mat,
248 // const escript::Data& D,
249 // const escript::Data& d) const;
250 
256  virtual void addPDEToRHS(escript::Data& rhs,
257  const escript::Data& X, const escript::Data& Y,
258  const escript::Data& y, const escript::Data& y_contact, const escript::Data& y_dirac) const;
265  virtual void addPDEToTransportProblem(
267  const escript::Data& M,
268  const escript::Data& A, const escript::Data& B, const escript::Data& C,const escript::Data& D,
269  const escript::Data& X,const escript::Data& Y,
270  const escript::Data& d, const escript::Data& y,
271  const escript::Data& d_contact,const escript::Data& y_contact,
272  const escript::Data& d_dirac,const escript::Data& y_dirac) const;
273 
279  virtual ASM_ptr newSystemMatrix(
280  const int row_blocksize,
281  const escript::FunctionSpace& row_functionspace,
282  const int column_blocksize,
283  const escript::FunctionSpace& column_functionspace,
284  const int type) const;
293  const int blocksize,
294  const escript::FunctionSpace& functionspace,
295  const int type) const;
296 
302  virtual int getNumDataPointsGlobal() const;
303 
310  virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
311 
317  virtual void setNewX(const escript::Data& arg);
318 
324  virtual void Print_Mesh_Info(const bool full=false) const;
325 
326 
327  protected:
328 
329  private:
330 
331 };
332 
333 } // end of namespace
334 
335 #endif