ESYS13
Revision_
|
00001 00002 /******************************************************* 00003 * 00004 * Copyright (c) 2003-2012 by University of Queensland 00005 * Earth Systems Science Computational Center (ESSCC) 00006 * http://www.uq.edu.au/esscc 00007 * 00008 * Primary Business: Queensland, Australia 00009 * Licensed under the Open Software License version 3.0 00010 * http://www.opensource.org/licenses/osl-3.0.php 00011 * 00012 *******************************************************/ 00013 00014 00015 #if !defined escript_AbstractContinuousDomain_20040528_H 00016 #define escript_AbstractContinuousDomain_20040528_H 00017 00018 #include "system_dep.h" 00019 #include "AbstractDomain.h" 00020 00021 #include <string> 00022 #include <vector> 00023 00024 #include "AbstractSystemMatrix.h" 00025 #include "AbstractTransportProblem.h" 00026 00027 namespace escript { 00028 00029 // 00030 // Forward declaration 00031 class Data; 00032 00043 class AbstractContinuousDomain : public AbstractDomain { 00044 00045 public: 00046 00060 ESCRIPT_DLL_API 00061 AbstractContinuousDomain(); 00062 00076 ESCRIPT_DLL_API 00077 virtual ~AbstractContinuousDomain(); 00078 00084 ESCRIPT_DLL_API 00085 virtual bool isValidFunctionSpaceType(int functionSpaceType) const; 00086 00091 ESCRIPT_DLL_API 00092 virtual std::string getDescription() const; 00093 00098 ESCRIPT_DLL_API 00099 virtual int getContinuousFunctionCode() const; 00100 00105 ESCRIPT_DLL_API 00106 virtual int getReducedContinuousFunctionCode() const; 00107 00112 ESCRIPT_DLL_API 00113 virtual int getFunctionCode() const; 00114 00119 ESCRIPT_DLL_API 00120 virtual int getReducedFunctionCode() const; 00121 00126 ESCRIPT_DLL_API 00127 virtual int getFunctionOnBoundaryCode() const; 00128 00133 ESCRIPT_DLL_API 00134 virtual int getReducedFunctionOnBoundaryCode() const; 00135 00136 00141 ESCRIPT_DLL_API 00142 virtual int getFunctionOnContactZeroCode() const; 00143 00148 ESCRIPT_DLL_API 00149 virtual int getReducedFunctionOnContactZeroCode() const; 00150 00155 ESCRIPT_DLL_API 00156 virtual int getFunctionOnContactOneCode() const; 00157 00162 ESCRIPT_DLL_API 00163 virtual int getReducedFunctionOnContactOneCode() const; 00164 00169 ESCRIPT_DLL_API 00170 virtual int getSolutionCode() const; 00171 00176 ESCRIPT_DLL_API 00177 virtual int getReducedSolutionCode() const; 00178 00183 ESCRIPT_DLL_API 00184 virtual int getDiracDeltaFunctionsCode() const; 00185 00192 ESCRIPT_DLL_API 00193 virtual int getSystemMatrixTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const; 00194 00201 ESCRIPT_DLL_API 00202 virtual int getTransportTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const; 00203 00210 ESCRIPT_DLL_API 00211 virtual void setToIntegrals(std::vector<double>& integrals,const escript::Data& arg) const; 00212 00213 // /** 00214 // \brief 00215 // Return the domain as const AbstractContinuousDomain& 00216 // */ 00217 // ESCRIPT_DLL_API 00218 // static const AbstractContinuousDomain& asAbstractContinuousDomain(const AbstractDomain& domain); 00219 00220 00221 00222 00227 ESCRIPT_DLL_API 00228 virtual void addPDEToSystem( 00229 AbstractSystemMatrix& mat, escript::Data& rhs, 00230 const escript::Data& A, const escript::Data& B, const escript::Data& C, 00231 const escript::Data& D, const escript::Data& X, const escript::Data& Y, 00232 const escript::Data& d, const escript::Data& y, 00233 const escript::Data& d_contact, const escript::Data& y_contact, 00234 const escript::Data& d_dirac, const escript::Data& y_dirac) const; 00235 00236 // We do not require this method at this level since the python side checks to ensure it exists 00237 // before calling it. 00238 00239 // /** 00240 // \brief 00241 // adds a PDE onto the lumped stiffness matrix matrix 00242 // */ 00243 // ESCRIPT_DLL_API 00244 // virtual void addPDEToLumpedSystem( 00245 // escript::Data& mat, 00246 // const escript::Data& D, 00247 // const escript::Data& d) const; 00248 00253 ESCRIPT_DLL_API 00254 virtual void addPDEToRHS(escript::Data& rhs, 00255 const escript::Data& X, const escript::Data& Y, 00256 const escript::Data& y, const escript::Data& y_contact, const escript::Data& y_dirac) const; 00262 ESCRIPT_DLL_API 00263 virtual void addPDEToTransportProblem( 00264 AbstractTransportProblem& tp, escript::Data& source, 00265 const escript::Data& M, 00266 const escript::Data& A, const escript::Data& B, const escript::Data& C,const escript::Data& D, 00267 const escript::Data& X,const escript::Data& Y, 00268 const escript::Data& d, const escript::Data& y, 00269 const escript::Data& d_contact,const escript::Data& y_contact, 00270 const escript::Data& d_dirac,const escript::Data& y_dirac) const; 00271 00276 ESCRIPT_DLL_API 00277 virtual ASM_ptr newSystemMatrix( 00278 const int row_blocksize, 00279 const escript::FunctionSpace& row_functionspace, 00280 const int column_blocksize, 00281 const escript::FunctionSpace& column_functionspace, 00282 const int type) const; 00289 ESCRIPT_DLL_API 00290 virtual ATP_ptr newTransportProblem( 00291 const int blocksize, 00292 const escript::FunctionSpace& functionspace, 00293 const int type) const; 00294 00299 ESCRIPT_DLL_API 00300 virtual int getNumDataPointsGlobal() const; 00301 00307 ESCRIPT_DLL_API 00308 virtual std::pair<int,int> getDataShape(int functionSpaceCode) const; 00309 00314 ESCRIPT_DLL_API 00315 virtual void setNewX(const escript::Data& arg); 00316 00321 ESCRIPT_DLL_API 00322 virtual void Print_Mesh_Info(const bool full=false) const; 00323 00324 00325 protected: 00326 00327 private: 00328 00329 }; 00330 00331 } // end of namespace 00332 00333 #endif