00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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 class Data;
00026
00027 namespace escript {
00028
00040 class AbstractTransportProblem {
00041
00042 public:
00043
00057 ESCRIPT_DLL_API
00058 AbstractTransportProblem();
00059
00060 ESCRIPT_DLL_API
00061 AbstractTransportProblem(const double theta,
00062 const int blocksize,
00063 const FunctionSpace& functionspace);
00064
00069 ESCRIPT_DLL_API
00070 virtual ~AbstractTransportProblem();
00071
00072 ESCRIPT_DLL_API
00073 int isEmpty() const;
00074
00079 ESCRIPT_DLL_API
00080 inline FunctionSpace getFunctionSpace() const
00081 {
00082 if (isEmpty())
00083 throw TransportProblemException("Error - Transport Problem is empty.");
00084 return m_functionspace;
00085 }
00086
00091 ESCRIPT_DLL_API
00092 inline int getBlockSize() const
00093 {
00094 if (isEmpty())
00095 throw TransportProblemException("Error - Transport Problem is empty.");
00096 return m_blocksize;
00097 }
00098
00103 ESCRIPT_DLL_API
00104 Data solve(Data& source, const double dt, boost::python::object& options) const;
00105
00110 ESCRIPT_DLL_API
00111 void setInitialValue(Data& u) const;
00112
00116 ESCRIPT_DLL_API
00117 virtual void resetTransport() const;
00118
00123 ESCRIPT_DLL_API
00124 void insertConstraint(Data& source, Data& q, Data& r, const double factor) const;
00125
00126
00127
00128 ESCRIPT_DLL_API
00129 virtual double getSafeTimeStepSize() const;
00130
00131
00132
00133 ESCRIPT_DLL_API
00134 virtual double getUnlimitedTimeStepSize() const;
00135
00136
00137 protected:
00138
00139 private:
00140
00145 ESCRIPT_DLL_API
00146 virtual void setToSolution(Data& out,Data& source,const double dt, boost::python::object& options) const;
00147
00152 ESCRIPT_DLL_API
00153 virtual void copyInitialValue(Data& u) const;
00160 ESCRIPT_DLL_API
00161 virtual void copyConstraint(Data& source, Data& q, Data& r, const double factor) const;
00162
00163 int m_empty;
00164 int m_blocksize;
00165 double m_theta;
00166 FunctionSpace m_functionspace;
00167
00168 };
00169
00170
00171 }
00172 #endif