escript  Revision_
AbstractTransportProblem.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2018 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 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16 
17 #ifndef __ESCRIPT_ABSTRACTTRANSPORTPROBLEM_H__
18 #define __ESCRIPT_ABSTRACTTRANSPORTPROBLEM_H__
19 
20 #include "system_dep.h"
21 #include "FunctionSpace.h"
23 
24 #include <boost/python/object.hpp>
25 
26 namespace escript {
27 
28 //
29 // Forward declaration
30 class Data;
31 
43 class AbstractTransportProblem
44 {
45 public:
46 
62 
64  AbstractTransportProblem(const int blocksize,
65  const FunctionSpace& functionspace);
66 
72  virtual ~AbstractTransportProblem();
73 
75  int isEmpty() const;
76 
82  inline FunctionSpace getFunctionSpace() const
83  {
84  if (isEmpty())
85  throw TransportProblemException("Error - Transport Problem is empty.");
86  return m_functionspace;
87  }
88 
94  inline int getBlockSize() const
95  {
96  if (isEmpty())
97  throw TransportProblemException("Error - Transport Problem is empty.");
98  return m_blocksize;
99  }
100 
106  Data solve(Data& u0, Data& source, const double dt, boost::python::object& options);
107 
108 
113  virtual void resetTransport(bool preserveSolverData) const;
114 
120  void insertConstraint(Data& source, Data& q, Data& r);
121  /*
122  * \brief returns a safe time step size.
123  */
125  virtual double getSafeTimeStepSize() const;
126  /*
127  * \brief returns the value for unlimited time step size.
128  */
130  virtual double getUnlimitedTimeStepSize() const;
131 
132 
133  protected:
134 
135  private:
136 
142  virtual void setToSolution(Data& out, Data& u0, Data& source, double dt,
143  boost::python::object& options);
144 
152  virtual void copyConstraint(Data& source, Data& q, Data& r);
153 
154  int m_empty;
155  int m_blocksize;
157 
158 };
159 
160 typedef boost::shared_ptr<AbstractTransportProblem> ATP_ptr;
161 
162 } // end of namespace
163 
164 #endif // __ESCRIPT_ABSTRACTTRANSPORTPROBLEM_H__
165 
ESCRIPT_DLL_API
#define ESCRIPT_DLL_API
Definition: escriptcore/src/system_dep.h:28
AbstractTransportProblem.h
escript::Data::getDataPointShape
const DataTypes::ShapeType & getDataPointShape() const
Return a reference to the data point shape.
Definition: Data.h:691
escript::NotImplementedError
An exception class for features which are not (yet) implemented.
Definition: EsysException.h:89
escript::TransportProblemException
Definition: TransportProblemException.h:38
escript::AbstractTransportProblem::m_empty
int m_empty
Definition: AbstractTransportProblem.h:165
escript::AbstractTransportProblem::AbstractTransportProblem
AbstractTransportProblem()
Default constructor for AbstractTransportProblem.
Definition: AbstractTransportProblem.cpp:37
escript::Data::getDataPointSize
int getDataPointSize() const
Return the size of the data point. It is the product of the data point shape dimensions.
Definition: Data.cpp:1363
escript::FunctionSpace
Definition: FunctionSpace.h:45
escript::Data::getFunctionSpace
const FunctionSpace & getFunctionSpace() const
Return the function space.
Definition: Data.h:461
escript::AbstractTransportProblem::m_functionspace
FunctionSpace m_functionspace
Definition: AbstractTransportProblem.h:167
escript::AbstractTransportProblem::insertConstraint
void insertConstraint(Data &source, Data &q, Data &r)
inserts constraint u_{,t}=r where q>0 into the problem
Definition: AbstractTransportProblem.cpp:83
system_dep.h
escript::Data
Data represents a collection of datapoints.
Definition: Data.h:62
escript::AbstractTransportProblem::getBlockSize
int getBlockSize() const
returns the block size
Definition: AbstractTransportProblem.h:105
escript::DataTypes::ShapeType
std::vector< int > ShapeType
The shape of a single datapoint.
Definition: DataTypes.h:65
escript::AbstractTransportProblem::getFunctionSpace
FunctionSpace getFunctionSpace() const
returns the column function space
Definition: AbstractTransportProblem.h:93
escript::ATP_ptr
boost::shared_ptr< AbstractTransportProblem > ATP_ptr
Definition: AbstractTransportProblem.h:171
escript::AbstractTransportProblem::m_blocksize
int m_blocksize
Definition: AbstractTransportProblem.h:166
escript::AbstractTransportProblem::getUnlimitedTimeStepSize
virtual double getUnlimitedTimeStepSize() const
Definition: AbstractTransportProblem.cpp:128
escript::AbstractTransportProblem::setToSolution
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:115
escript::AbstractTransportProblem::resetTransport
virtual void resetTransport(bool preserveSolverData) const
resets the transport operator typically as they have been updated.
Definition: AbstractTransportProblem.cpp:120
TransportProblemException.h
escript::Data::isEmpty
bool isEmpty() const
Definition: Data.cpp:1135
escript::AbstractTransportProblem::~AbstractTransportProblem
virtual ~AbstractTransportProblem()
Destructor.
Definition: AbstractTransportProblem.cpp:51
escript::AbstractTransportProblem::solve
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:60
escript::AbstractTransportProblem::getSafeTimeStepSize
virtual double getSafeTimeStepSize() const
Definition: AbstractTransportProblem.cpp:124
escript
Definition: AbstractContinuousDomain.cpp:22
DataTypes.h
escript::AbstractTransportProblem::isEmpty
int isEmpty() const
Definition: AbstractTransportProblem.cpp:54
Data.h
escript::Data::expand
void expand()
Whatever the current Data type make this into a DataExpanded.
Definition: Data.cpp:1183
ESYS_ASSERT
#define ESYS_ASSERT(a, b)
EsysAssert is a MACRO that will throw an exception if the boolean condition specified is false.
Definition: Assert.h:77
escript::AbstractTransportProblem::copyConstraint
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:110
escript::ValueError
An exception class that signals an invalid argument value.
Definition: EsysException.h:99
FunctionSpace.h
escript::Data::getDataPointRank
unsigned int getDataPointRank() const
Return the rank of the point data.
Definition: Data.h:498