escript  Revision_
AbstractContinuousDomain.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2020 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-2017 by Centre for Geoscience Computing (GeoComp)
14 * Development from 2019 by School of Earth and Environmental Sciences
15 **
16 *****************************************************************************/
17 
18 
19 #ifndef __ESCRIPT_ABSTRACTCONTINUOUSDOMAIN_H__
20 #define __ESCRIPT_ABSTRACTCONTINUOUSDOMAIN_H__
21 
22 #include "system_dep.h"
23 #include "AbstractDomain.h"
24 #include "AbstractSystemMatrix.h"
26 
27 #include <string>
28 #include <vector>
29 
30 namespace escript {
31 
32 //
33 // Forward declaration
34 class Data;
35 
46 class ESCRIPT_DLL_API AbstractContinuousDomain : public AbstractDomain
47 {
48 
49  public:
50 
64  AbstractContinuousDomain();
65 
79  virtual ~AbstractContinuousDomain();
80 
86  virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
87 
92  virtual std::string getDescription() const;
93 
98  virtual int getContinuousFunctionCode() const;
99 
104  virtual int getReducedContinuousFunctionCode() const;
105 
110  virtual int getFunctionCode() const;
111 
116  virtual int getReducedFunctionCode() const;
117 
122  virtual int getFunctionOnBoundaryCode() const;
123 
128  virtual int getReducedFunctionOnBoundaryCode() const;
129 
130 
135  virtual int getFunctionOnContactZeroCode() const;
136 
141  virtual int getReducedFunctionOnContactZeroCode() const;
142 
147  virtual int getFunctionOnContactOneCode() const;
148 
153  virtual int getReducedFunctionOnContactOneCode() const;
154 
159  virtual int getSolutionCode() const;
160 
165  virtual int getReducedSolutionCode() const;
166 
171  virtual int getDiracDeltaFunctionsCode() const;
172 
178  virtual int getSystemMatrixTypeId(const boost::python::object& options) const;
179 
186  virtual int getTransportTypeId(int solver, int preconditioner, int package, bool symmetry) const;
187 
194  virtual void setToIntegrals(std::vector<DataTypes::real_t>& integrals,
195  const escript::Data& arg) const;
196  virtual void setToIntegrals(std::vector<DataTypes::cplx_t>& integrals,
197  const escript::Data& arg) const;
198 
199 // /**
200 // \brief
201 // Return the domain as const AbstractContinuousDomain&
202 // */
203 // static const AbstractContinuousDomain& asAbstractContinuousDomain(const AbstractDomain& domain);
204 
205 
206 
207 
212  virtual void addPDEToSystem(
213  AbstractSystemMatrix& mat, escript::Data& rhs,
214  const escript::Data& A, const escript::Data& B, const escript::Data& C,
215  const escript::Data& D, const escript::Data& X, const escript::Data& Y,
216  const escript::Data& d, const escript::Data& y,
217  const escript::Data& d_contact, const escript::Data& y_contact,
218  const escript::Data& d_dirac, const escript::Data& y_dirac) const;
219 
220 // We do not require this method at this level since the python side checks to ensure it exists
221 // before calling it.
222 
223 // /**
224 // \brief
225 // adds a PDE onto the lumped stiffness matrix matrix
226 // */
227 // virtual void addPDEToLumpedSystem(
228 // escript::Data& mat,
229 // const escript::Data& D,
230 // const escript::Data& d) const;
231 
236  virtual void addPDEToRHS(escript::Data& rhs,
237  const escript::Data& X, const escript::Data& Y,
238  const escript::Data& y, const escript::Data& y_contact, const escript::Data& y_dirac) const;
244  virtual void addPDEToTransportProblem(
245  AbstractTransportProblem& tp, escript::Data& source,
246  const escript::Data& M,
247  const escript::Data& A, const escript::Data& B, const escript::Data& C,const escript::Data& D,
248  const escript::Data& X,const escript::Data& Y,
249  const escript::Data& d, const escript::Data& y,
250  const escript::Data& d_contact,const escript::Data& y_contact,
251  const escript::Data& d_dirac,const escript::Data& y_dirac) const;
252 
257  virtual ASM_ptr newSystemMatrix(
258  const int row_blocksize,
259  const escript::FunctionSpace& row_functionspace,
260  const int column_blocksize,
261  const escript::FunctionSpace& column_functionspace,
262  const int type) const;
269  virtual ATP_ptr newTransportProblem(
270  const int blocksize,
271  const escript::FunctionSpace& functionspace,
272  const int type) const;
273 
278  virtual DataTypes::dim_t getNumDataPointsGlobal() const;
279 
285  virtual std::pair<int,DataTypes::dim_t> getDataShape(int functionSpaceCode) const;
286 
291  virtual void setNewX(const escript::Data& arg);
292 
297  virtual void Print_Mesh_Info(const bool full=false) const;
298 };
299 
300 } // end of namespace
301 
302 #endif // __ESCRIPT_ABSTRACTCONTINUOUSDOMAIN_H__
303 
ESCRIPT_DLL_API
#define ESCRIPT_DLL_API
Definition: escriptcore/src/system_dep.h:29
AbstractTransportProblem.h
escript::AbstractTransportProblem
Give a short description of what AbstractTransportProblem does.
Definition: AbstractTransportProblem.h:56
escript::FunctionSpace
Definition: FunctionSpace.h:47
system_dep.h
escript::Data
Data represents a collection of datapoints.
Definition: Data.h:63
escript::DataTypes::dim_t
index_t dim_t
Definition: DataTypes.h:90
escript::ATP_ptr
boost::shared_ptr< AbstractTransportProblem > ATP_ptr
Definition: AbstractTransportProblem.h:173
escript::AbstractSystemMatrix
Base class for escript system matrices.
Definition: AbstractSystemMatrix.h:55
AbstractDomain.h
AbstractContinuousDomain.h
escript
Definition: AbstractContinuousDomain.cpp:23
AbstractSystemMatrix.h
paso::M
static dim_t M
Definition: SparseMatrix_saveHB.cpp:50
Data.h
escript::ASM_ptr
boost::shared_ptr< AbstractSystemMatrix > ASM_ptr
Definition: AbstractSystemMatrix.h:45