escript  Revision_
TransportProblemAdapter.h
Go to the documentation of this file.
00001 
00002 /*****************************************************************************
00003 *
00004 * Copyright (c) 2003-2014 by University of Queensland
00005 * http://www.uq.edu.au
00006 *
00007 * Primary Business: Queensland, Australia
00008 * Licensed under the Open Software License version 3.0
00009 * http://www.opensource.org/licenses/osl-3.0.php
00010 *
00011 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
00012 * Development 2012-2013 by School of Earth Sciences
00013 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
00014 *
00015 *****************************************************************************/
00016 
00017 /* This file was extracted from finley's CPPAdapter then modified */
00018 
00019 #ifndef __PASOWRAP_TRANSPORTPROBLEMADAPTER_H__
00020 #define __PASOWRAP_TRANSPORTPROBLEMADAPTER_H__
00021 
00022 #include "system_dep.h"
00023 
00024 #include "paso/Transport.h"
00025 #include "paso/Options.h"
00026 
00027 #include "PasoException.h"
00028 
00029 #include "escript/AbstractTransportProblem.h"
00030 #include "escript/Data.h"
00031 #include "escript/UtilC.h"
00032 
00033 #include <boost/python/object.hpp>
00034 #include <boost/shared_ptr.hpp>
00035 #include <boost/python/extract.hpp>
00036 
00037 namespace paso {
00038 
00039 PASOWRAP_DLL_API
00040 class TransportProblemAdapter : public escript::AbstractTransportProblem
00041 {
00042 
00051 public:
00052 
00058   TransportProblemAdapter();
00059 
00064   TransportProblemAdapter(TransportProblem_ptr transport_problem,
00065                           int block_size,
00066                           const escript::FunctionSpace& functionspace);
00067 
00072   ~TransportProblemAdapter() {}
00073 
00078   TransportProblem_ptr getPaso_TransportProblem() const;
00079 
00083   virtual void resetTransport() const;
00084 
00088   virtual double getSafeTimeStepSize() const;
00089 
00093   virtual double getUnlimitedTimeStepSize() const;
00094 
00100   static int getTransportTypeId(const int solver, const int preconditioner,
00101           const int package, const bool symmetry, Esys_MPIInfo* mpiInfo);
00102 
00103  protected:
00104 
00105  private:
00106 
00111     virtual void setToSolution(escript::Data& out, escript::Data& u0,
00112                                escript::Data& source, double dt,
00113                                boost::python::object& options) const;
00114    
00115 
00122     virtual void copyConstraint(escript::Data& source, escript::Data& q,
00123                                 escript::Data& r) const;
00124 
00125 
00126    //
00127    // shared pointer to the externally created transport_problem.
00128    //
00129    TransportProblem_ptr m_transport_problem;
00130 
00131 };
00132 
00133 } // end of namespace
00134 
00135 #endif // __PASOWRAP_TRANSPORTPROBLEMADAPTER_H__
00136