escript
Revision_
|
00001 00002 /***************************************************************************** 00003 * 00004 * Copyright (c) 2003-2014 by University of Queensland 00005 * http://www.uq.edu.au 00006 * 00007 * Primary Business: Queensland, Australia 00008 * Licensed under the Open Software License version 3.0 00009 * http://www.opensource.org/licenses/osl-3.0.php 00010 * 00011 * Development until 2012 by Earth Systems Science Computational Center (ESSCC) 00012 * Development 2012-2013 by School of Earth Sciences 00013 * Development from 2014 by Centre for Geoscience Computing (GeoComp) 00014 * 00015 *****************************************************************************/ 00016 00017 00018 #if !defined escript_AbstractContinuousDomain_20040528_H 00019 #define escript_AbstractContinuousDomain_20040528_H 00020 00021 #include "system_dep.h" 00022 #include "AbstractDomain.h" 00023 00024 #include <string> 00025 #include <vector> 00026 00027 #include "AbstractSystemMatrix.h" 00028 #include "AbstractTransportProblem.h" 00029 00030 namespace escript { 00031 00032 // 00033 // Forward declaration 00034 class Data; 00035 00046 class AbstractContinuousDomain : public AbstractDomain { 00047 00048 public: 00049 00063 ESCRIPT_DLL_API 00064 AbstractContinuousDomain(); 00065 00079 ESCRIPT_DLL_API 00080 virtual ~AbstractContinuousDomain(); 00081 00087 ESCRIPT_DLL_API 00088 virtual bool isValidFunctionSpaceType(int functionSpaceType) const; 00089 00094 ESCRIPT_DLL_API 00095 virtual std::string getDescription() const; 00096 00101 ESCRIPT_DLL_API 00102 virtual int getContinuousFunctionCode() const; 00103 00108 ESCRIPT_DLL_API 00109 virtual int getReducedContinuousFunctionCode() const; 00110 00115 ESCRIPT_DLL_API 00116 virtual int getFunctionCode() const; 00117 00122 ESCRIPT_DLL_API 00123 virtual int getReducedFunctionCode() const; 00124 00129 ESCRIPT_DLL_API 00130 virtual int getFunctionOnBoundaryCode() const; 00131 00136 ESCRIPT_DLL_API 00137 virtual int getReducedFunctionOnBoundaryCode() const; 00138 00139 00144 ESCRIPT_DLL_API 00145 virtual int getFunctionOnContactZeroCode() const; 00146 00151 ESCRIPT_DLL_API 00152 virtual int getReducedFunctionOnContactZeroCode() const; 00153 00158 ESCRIPT_DLL_API 00159 virtual int getFunctionOnContactOneCode() const; 00160 00165 ESCRIPT_DLL_API 00166 virtual int getReducedFunctionOnContactOneCode() const; 00167 00172 ESCRIPT_DLL_API 00173 virtual int getSolutionCode() const; 00174 00179 ESCRIPT_DLL_API 00180 virtual int getReducedSolutionCode() const; 00181 00186 ESCRIPT_DLL_API 00187 virtual int getDiracDeltaFunctionsCode() const; 00188 00195 ESCRIPT_DLL_API 00196 virtual int getSystemMatrixTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const; 00197 00204 ESCRIPT_DLL_API 00205 virtual int getTransportTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const; 00206 00213 ESCRIPT_DLL_API 00214 virtual void setToIntegrals(std::vector<double>& integrals,const escript::Data& arg) const; 00215 00216 // /** 00217 // \brief 00218 // Return the domain as const AbstractContinuousDomain& 00219 // */ 00220 // ESCRIPT_DLL_API 00221 // static const AbstractContinuousDomain& asAbstractContinuousDomain(const AbstractDomain& domain); 00222 00223 00224 00225 00230 ESCRIPT_DLL_API 00231 virtual void addPDEToSystem( 00232 AbstractSystemMatrix& mat, escript::Data& rhs, 00233 const escript::Data& A, const escript::Data& B, const escript::Data& C, 00234 const escript::Data& D, const escript::Data& X, const escript::Data& Y, 00235 const escript::Data& d, const escript::Data& y, 00236 const escript::Data& d_contact, const escript::Data& y_contact, 00237 const escript::Data& d_dirac, const escript::Data& y_dirac) const; 00238 00239 // We do not require this method at this level since the python side checks to ensure it exists 00240 // before calling it. 00241 00242 // /** 00243 // \brief 00244 // adds a PDE onto the lumped stiffness matrix matrix 00245 // */ 00246 // ESCRIPT_DLL_API 00247 // virtual void addPDEToLumpedSystem( 00248 // escript::Data& mat, 00249 // const escript::Data& D, 00250 // const escript::Data& d) const; 00251 00256 ESCRIPT_DLL_API 00257 virtual void addPDEToRHS(escript::Data& rhs, 00258 const escript::Data& X, const escript::Data& Y, 00259 const escript::Data& y, const escript::Data& y_contact, const escript::Data& y_dirac) const; 00265 ESCRIPT_DLL_API 00266 virtual void addPDEToTransportProblem( 00267 AbstractTransportProblem& tp, escript::Data& source, 00268 const escript::Data& M, 00269 const escript::Data& A, const escript::Data& B, const escript::Data& C,const escript::Data& D, 00270 const escript::Data& X,const escript::Data& Y, 00271 const escript::Data& d, const escript::Data& y, 00272 const escript::Data& d_contact,const escript::Data& y_contact, 00273 const escript::Data& d_dirac,const escript::Data& y_dirac) const; 00274 00279 ESCRIPT_DLL_API 00280 virtual ASM_ptr newSystemMatrix( 00281 const int row_blocksize, 00282 const escript::FunctionSpace& row_functionspace, 00283 const int column_blocksize, 00284 const escript::FunctionSpace& column_functionspace, 00285 const int type) const; 00292 ESCRIPT_DLL_API 00293 virtual ATP_ptr newTransportProblem( 00294 const int blocksize, 00295 const escript::FunctionSpace& functionspace, 00296 const int type) const; 00297 00302 ESCRIPT_DLL_API 00303 virtual int getNumDataPointsGlobal() const; 00304 00310 ESCRIPT_DLL_API 00311 virtual std::pair<int,int> getDataShape(int functionSpaceCode) const; 00312 00317 ESCRIPT_DLL_API 00318 virtual void setNewX(const escript::Data& arg); 00319 00324 ESCRIPT_DLL_API 00325 virtual void Print_Mesh_Info(const bool full=false) const; 00326 00327 00328 protected: 00329 00330 private: 00331 00332 }; 00333 00334 } // end of namespace 00335 00336 #endif