ESYS13  Revision_
AbstractTransportProblem.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_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