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