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_AbstractTransportProblem_H 00016 #define escript_AbstractTransportProblem_H 00017 #include "system_dep.h" 00018 00019 #include "FunctionSpace.h" 00020 #include "TransportProblemException.h" 00021 #include <boost/python/object.hpp> 00022 00023 00024 00025 namespace escript { 00026 00027 // 00028 // Forward declaration 00029 class Data; 00030 00042 class AbstractTransportProblem { 00043 00044 public: 00045 00059 ESCRIPT_DLL_API 00060 AbstractTransportProblem(); 00061 00062 ESCRIPT_DLL_API 00063 AbstractTransportProblem(const int blocksize, 00064 const FunctionSpace& functionspace); 00065 00070 ESCRIPT_DLL_API 00071 virtual ~AbstractTransportProblem(); 00072 00073 ESCRIPT_DLL_API 00074 int isEmpty() const; 00075 00080 ESCRIPT_DLL_API 00081 inline FunctionSpace getFunctionSpace() const 00082 { 00083 if (isEmpty()) 00084 throw TransportProblemException("Error - Transport Problem is empty."); 00085 return m_functionspace; 00086 } 00087 00092 ESCRIPT_DLL_API 00093 inline int getBlockSize() const 00094 { 00095 if (isEmpty()) 00096 throw TransportProblemException("Error - Transport Problem is empty."); 00097 return m_blocksize; 00098 } 00099 00104 ESCRIPT_DLL_API 00105 Data solve(Data& u0, Data& source, const double dt, boost::python::object& options) const; 00106 00107 00111 ESCRIPT_DLL_API 00112 virtual void resetTransport() const; 00113 00118 ESCRIPT_DLL_API 00119 void insertConstraint(Data& source, Data& q, Data& r) const; 00120 /* 00121 * \brief returns a safe time step size. 00122 */ 00123 ESCRIPT_DLL_API 00124 virtual double getSafeTimeStepSize() const; 00125 /* 00126 * \brief returns the value for unlimited time step size. 00127 */ 00128 ESCRIPT_DLL_API 00129 virtual double getUnlimitedTimeStepSize() const; 00130 00131 00132 protected: 00133 00134 private: 00135 00140 ESCRIPT_DLL_API 00141 virtual void setToSolution(Data& out, Data& u0, Data& source, const double dt, boost::python::object& options) const; 00142 00149 ESCRIPT_DLL_API 00150 virtual void copyConstraint(Data& source, Data& q, Data& r) const; 00151 00152 int m_empty; 00153 int m_blocksize; 00154 FunctionSpace m_functionspace; 00155 00156 }; 00157 00158 00159 typedef boost::shared_ptr<AbstractTransportProblem> ATP_ptr; 00160 00161 } // end of namespace 00162 #endif