escript  Revision_
AbstractContinuousDomain.h
Go to the documentation of this file.
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