ESScript  Revision_4488
TransportProblemAdapter.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2013 by University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Open Software License version 3.0
9 * http://www.opensource.org/licenses/osl-3.0.php
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development since 2012 by School of Earth Sciences
13 *
14 *****************************************************************************/
15 
16 /* This file was extracted from finley's CPPAdapter then modified */
17 
18 #if !defined TransportProblemAdapter_H
19 #define TransportProblemAdapter_H
20 #include "system_dep.h"
21 
22 #include "paso/Transport.h"
23 #include "paso/Options.h"
24 
25 #include "PasoException.h"
26 
27 #include "escript/AbstractTransportProblem.h"
28 #include "escript/Data.h"
29 #include "escript/UtilC.h"
30 
31 #include <boost/python/object.hpp>
32 #include <boost/shared_ptr.hpp>
33 #include <boost/python/extract.hpp>
34 
35 namespace paso {
36 
38 
47  public:
48 
56 
63  const int block_size,
64  const escript::FunctionSpace& functionspace);
65 
73 
80 
86  {
87  return dynamic_cast<const escript::AbstractTransportProblem&>(*this);
88  }
89 
94  inline static const TransportProblemAdapter& asTransportProblemAdapter(const AbstractTransportProblem& transportproblem)
95  {
96  return dynamic_cast<const TransportProblemAdapter&>(transportproblem);
97  }
98 
103  virtual void resetTransport() const;
104 
109  virtual double getSafeTimeStepSize() const;
110 
115  virtual double getUnlimitedTimeStepSize() const;
116 
123  static int getTransportTypeId(const int solver, const int preconditioner,
124  const int package, const bool symmetry, Esys_MPIInfo* mpiInfo);
125 
126  protected:
127 
128  private:
129 
135  virtual void setToSolution(escript::Data& out,escript::Data& u0, escript::Data& source,const double dt, boost::python::object& options) const;
136 
137 
144  virtual void copyConstraint(escript::Data& source, escript::Data& q, escript::Data& r) const;
145 
146 
147  //
148  // pointer to the externally created transport_problem.
149  //
150  boost::shared_ptr<Paso_TransportProblem> m_transport_problem;
151 
152 };
153 
154 } // end of namespace
155 #endif