Go to the documentation of this file.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 namespace escript {
00026
00027
00028
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
00122
00123 ESCRIPT_DLL_API
00124 virtual double getSafeTimeStepSize() const;
00125
00126
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 }
00162 #endif