escript
Revision_
|
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