escript  Revision_
AbstractTransportProblem.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2020 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
14 * Development from 2019 by School of Earth and Environmental Sciences
15 **
16 *****************************************************************************/
17 
18 #ifndef __ESCRIPT_ABSTRACTTRANSPORTPROBLEM_H__
19 #define __ESCRIPT_ABSTRACTTRANSPORTPROBLEM_H__
20 
21 #include "system_dep.h"
22 #include "FunctionSpace.h"
24 
25 #include <boost/python/object.hpp>
26 
27 namespace escript {
28 
29 //
30 // Forward declaration
31 class Data;
32 
45 {
46 public:
47 
63 
65  AbstractTransportProblem(const int blocksize,
66  const FunctionSpace& functionspace);
67 
73  virtual ~AbstractTransportProblem();
74 
76  int isEmpty() const;
77 
84  {
85  if (isEmpty())
86  throw TransportProblemException("Error - Transport Problem is empty.");
87  return m_functionspace;
88  }
89 
95  inline int getBlockSize() const
96  {
97  if (isEmpty())
98  throw TransportProblemException("Error - Transport Problem is empty.");
99  return m_blocksize;
100  }
101 
107  Data solve(Data& u0, Data& source, const double dt, boost::python::object& options);
108 
109 
114  virtual void resetTransport(bool preserveSolverData) const;
115 
121  void insertConstraint(Data& source, Data& q, Data& r);
122  /*
123  * \brief returns a safe time step size.
124  */
126  virtual double getSafeTimeStepSize() const;
127  /*
128  * \brief returns the value for unlimited time step size.
129  */
131  virtual double getUnlimitedTimeStepSize() const;
132 
133 
134  protected:
135 
136  private:
137 
143  virtual void setToSolution(Data& out, Data& u0, Data& source, double dt,
144  boost::python::object& options);
145 
153  virtual void copyConstraint(Data& source, Data& q, Data& r);
154 
155  int m_empty;
158 
159 };
160 
161 typedef boost::shared_ptr<AbstractTransportProblem> ATP_ptr;
162 
163 } // end of namespace
164 
165 #endif // __ESCRIPT_ABSTRACTTRANSPORTPROBLEM_H__
166 
Give a short description of what AbstractTransportProblem does.
Definition: AbstractTransportProblem.h:45
virtual void copyConstraint(Data &source, Data &q, Data &r)
copy constraint u_{,t}=r where q>0 into the problem it can be assumed that q and r are not empty and ...
Definition: AbstractTransportProblem.cpp:100
Data solve(Data &u0, Data &source, const double dt, boost::python::object &options)
returns the solution u for a time step dt>0 with initial value u0 at time t=0
Definition: AbstractTransportProblem.cpp:50
int m_blocksize
Definition: AbstractTransportProblem.h:156
int m_empty
Definition: AbstractTransportProblem.h:155
void insertConstraint(Data &source, Data &q, Data &r)
inserts constraint u_{,t}=r where q>0 into the problem
Definition: AbstractTransportProblem.cpp:73
FunctionSpace getFunctionSpace() const
returns the column function space
Definition: AbstractTransportProblem.h:83
FunctionSpace m_functionspace
Definition: AbstractTransportProblem.h:157
virtual double getSafeTimeStepSize() const
Definition: AbstractTransportProblem.cpp:114
int getBlockSize() const
returns the block size
Definition: AbstractTransportProblem.h:95
virtual double getUnlimitedTimeStepSize() const
Definition: AbstractTransportProblem.cpp:118
virtual void resetTransport(bool preserveSolverData) const
resets the transport operator typically as they have been updated.
Definition: AbstractTransportProblem.cpp:110
int isEmpty() const
Definition: AbstractTransportProblem.cpp:44
AbstractTransportProblem()
Default constructor for AbstractTransportProblem.
Definition: AbstractTransportProblem.cpp:27
virtual void setToSolution(Data &out, Data &u0, Data &source, double dt, boost::python::object &options)
sets solution out by time step dt.
Definition: AbstractTransportProblem.cpp:105
virtual ~AbstractTransportProblem()
Destructor.
Definition: AbstractTransportProblem.cpp:41
Data represents a collection of datapoints.
Definition: Data.h:64
Definition: FunctionSpace.h:36
Definition: TransportProblemException.h:29
#define ESCRIPT_DLL_API
Definition: escriptcore/src/system_dep.h:30
Definition: AbstractContinuousDomain.cpp:23
boost::shared_ptr< AbstractTransportProblem > ATP_ptr
Definition: AbstractTransportProblem.h:161