escript  Revision_
Transport.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 
19 #ifndef __PASO_TRANSPORT_H__
20 #define __PASO_TRANSPORT_H__
21 
22 #define DT_FACTOR_MAX 100000.
23 
24 #include "Paso.h"
25 #include "Options.h"
26 #include "SystemMatrix.h"
27 
28 #include <escript/AbstractTransportProblem.h>
29 
30 namespace paso {
31 
32 class TransportProblem;
33 typedef boost::shared_ptr<TransportProblem> TransportProblem_ptr;
34 typedef boost::shared_ptr<const TransportProblem> const_TransportProblem_ptr;
35 
37  public boost::enable_shared_from_this<TransportProblem>
38 {
39 public:
42 
43  TransportProblem(SystemMatrixPattern_ptr pattern, int blocksize,
44  const escript::FunctionSpace& functionspace);
45 
47 
48  virtual void resetTransport(bool preserveSolverData) const;
49 
50  void solve(double* u, double dt, double* u0, double* q, Options* options);
51 
52  virtual double getSafeTimeStepSize() const;
53 
54  virtual double getUnlimitedTimeStepSize() const;
55 
56  void insertConstraint(const double* r, double* source) const;
57 
58  void setUpConstraint(const double* q);
59 
60  inline dim_t getBlockSize() const
61  {
62  return transport_matrix->row_block_size;
63  }
64 
66  {
67  return transport_matrix;
68  }
69 
70  inline SystemMatrix_ptr borrowMassMatrix() const
71  {
72  return mass_matrix;
73  }
74 
75  inline double* borrowLumpedMassMatrix() const
76  {
77  return lumped_mass_matrix;
78  }
79 
80  inline dim_t getTotalNumRows() const
81  {
82  return transport_matrix->getTotalNumRows();
83  }
84 
85  inline Connector_ptr borrowConnector() const
86  {
87  return transport_matrix->pattern->col_connector;
88  }
89 
90  inline index_t* borrowMainDiagonalPointer() const
91  {
92  return mass_matrix->mainBlock->borrowMainDiagonalPointer();
93  }
94 
95  inline static int getTypeId(int solver, int preconditioner,
96  int package, bool symmetry,
97  const escript::JMPI& mpi_info)
98  {
100  }
101 
105 
106  mutable bool valid_matrices;
108  mutable double dt_max_R;
110  mutable double dt_max_T;
111  mutable double* constraint_mask;
112 
120 
122 
123 private:
124  virtual void setToSolution(escript::Data& out, escript::Data& u0,
125  escript::Data& source, double dt,
126  boost::python::object& options);
127 
128  virtual void copyConstraint(escript::Data& source, escript::Data& q,
129  escript::Data& r);
130 };
131 
132 } // namespace paso
133 
134 #endif // __PASO_TRANSPORT_H__
135 
MATRIX_FORMAT_BLK1
#define MATRIX_FORMAT_BLK1
Definition: Paso.h:63
paso::LARGE_POSITIVE_FLOAT
static const real_t LARGE_POSITIVE_FLOAT
Definition: FCT_Solver.cpp:44
escript::Data::isComplex
bool isComplex() const
True if components of this data are stored as complex.
Definition: Data.cpp:1164
PASO_ONE
#define PASO_ONE
Definition: Paso.h:67
paso::TransportProblem::TransportProblem
TransportProblem()
Default constructor - throws exception.
paso::TransportProblem::insertConstraint
void insertConstraint(const double *r, double *source) const
Definition: Transport.cpp:223
paso::TransportProblem::lumped_mass_matrix
double * lumped_mass_matrix
Definition: Transport.h:116
escript::DataTypes::real_t
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:76
paso::TransportProblem::~TransportProblem
~TransportProblem()
Definition: Transport.cpp:85
PERFORMANCE_MVM
#define PERFORMANCE_MVM
Definition: performance.h:58
escript::Data::requireWrite
void requireWrite()
Ensures data is ready for write access. This means that the data will be resolved if lazy and will be...
Definition: Data.cpp:1243
paso::Performance_startMonitor
void Performance_startMonitor(Performance *pp, int monitor)
switches on a monitor
Definition: performance.cpp:176
paso::SystemMatrix
this class holds a (distributed) stiffness matrix
Definition: SystemMatrix.h:60
paso::TransportProblem::reactive_matrix
double * reactive_matrix
Definition: Transport.h:117
paso::TransportProblem::setToSolution
virtual void setToSolution(escript::Data &out, escript::Data &u0, escript::Data &source, double dt, boost::python::object &options)
sets solution out by time step dt.
Definition: Transport.cpp:94
paso::TransportProblem::borrowMainDiagonalPointer
index_t * borrowMainDiagonalPointer() const
Definition: Transport.h:89
paso::TransportProblem::getTotalNumRows
dim_t getTotalNumRows() const
Definition: Transport.h:79
paso::solve_free
void solve_free(SystemMatrix *in)
Definition: solve.cpp:142
escript::Data::getDataPointShape
const DataTypes::ShapeType & getDataPointShape() const
Return a reference to the data point shape.
Definition: Data.h:704
paso::SystemMatrix_ptr
boost::shared_ptr< SystemMatrix > SystemMatrix_ptr
Definition: SystemMatrix.h:53
paso::TransportProblem::borrowMassMatrix
SystemMatrix_ptr borrowMassMatrix() const
Definition: Transport.h:69
escript::DataTypes::DataVectorAlt::data
ElementType * data()
Definition: DataVectorAlt.h:225
paso::SystemMatrixPattern_ptr
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition: SystemMatrixPattern.h:52
paso::Solver_TFQMR
SolverResult Solver_TFQMR(SystemMatrix_ptr A, double *B, double *X, dim_t *iter, double *tolerance, Performance *pp)
Definition: TFQMR.cpp:75
paso::TransportProblem::mass_matrix
SystemMatrix_ptr mass_matrix
Definition: Transport.h:102
escript::AbstractTransportProblem
Give a short description of what AbstractTransportProblem does.
Definition: AbstractTransportProblem.h:56
escript::DataTypes::real_t_max
real_t real_t_max()
Returns the maximum finite value for the real_t type.
Definition: DataTypes.h:114
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:1364
paso::InputError
Definition: Paso.h:71
paso::TransportProblem::constraint_mask
double * constraint_mask
Definition: Transport.h:110
escript::FunctionSpace
Definition: FunctionSpace.h:47
escript::Data::getFunctionSpace
const FunctionSpace & getFunctionSpace() const
Return the function space.
Definition: Data.h:462
Options.h
paso::TransportProblem::borrowConnector
Connector_ptr borrowConnector() const
Definition: Transport.h:84
Solver.h
paso::util::copy
void copy(dim_t N, double *out, const double *in)
out = in
Definition: PasoUtil.h:113
paso::Breakdown
Definition: Paso.h:73
Paso.h
paso::util::update
void update(dim_t n, double a, double *x, double b, const double *y)
Definition: PasoUtil.cpp:365
escript::Data
Data represents a collection of datapoints.
Definition: Data.h:63
paso::TransportProblem_ptr
boost::shared_ptr< TransportProblem > TransportProblem_ptr
Definition: Transport.h:31
paso::util::l2
double l2(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global L2 norm of x
Definition: PasoUtil.cpp:527
paso::TransportProblem::borrowTransportMatrix
SystemMatrix_ptr borrowTransportMatrix() const
Definition: Transport.h:64
paso::TransportProblem::dt_max_R
double dt_max_R
safe time step size for reactive part
Definition: Transport.h:107
paso::TransportProblem::copyConstraint
virtual void copyConstraint(escript::Data &source, escript::Data &q, escript::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: Transport.cpp:129
escript::DataTypes::dim_t
index_t dim_t
Definition: DataTypes.h:90
escript::AbstractTransportProblem::getFunctionSpace
FunctionSpace getFunctionSpace() const
returns the column function space
Definition: AbstractTransportProblem.h:95
escript::JMPI
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:71
paso::TransportProblem::transport_matrix
SystemMatrix_ptr transport_matrix
Definition: Transport.h:101
escript::Data::getSampleDataRW
DataTypes::real_t * getSampleDataRW(DataTypes::RealVectorType::size_type sampleNo, DataTypes::real_t dummy=0)
Return the sample data for the given sample no. Please do not use this unless you NEED to access samp...
Definition: Data.h:1953
PERFORMANCE_SOLVER
#define PERFORMANCE_SOLVER
Definition: performance.h:55
PERFORMANCE_PRECONDITIONER
#define PERFORMANCE_PRECONDITIONER
Definition: performance.h:57
paso::SolverResult
SolverResult
Definition: Paso.h:55
paso::TransportProblem::setUpConstraint
void setUpConstraint(const double *q)
Definition: Transport.cpp:205
SystemMatrix.h
paso::MaxIterReached
Definition: Paso.h:70
paso::TransportProblem::solve
void solve(double *u, double dt, double *u0, double *q, Options *options)
Definition: Transport_solve.cpp:63
paso::Options::updateEscriptDiagnostics
void updateEscriptDiagnostics(boost::python::object &options) const
updates SolverBuddy diagnostics from this
Definition: Options.cpp:442
paso::TransportProblem::getBlockSize
dim_t getBlockSize() const
Definition: Transport.h:59
paso::util::linearCombination
void linearCombination(dim_t n, double *z, double a, const double *x, double b, const double *y)
Definition: PasoUtil.cpp:414
paso::TransportProblem
Definition: Transport.h:35
paso::TransportProblem::getTypeId
static int getTypeId(int solver, int preconditioner, int package, bool symmetry, const escript::JMPI &mpi_info)
Definition: Transport.h:94
paso::const_TransportProblem_ptr
boost::shared_ptr< const TransportProblem > const_TransportProblem_ptr
Definition: Transport.h:33
escript::Data::copyWithMask
void copyWithMask(const Data &other, const Data &mask)
Copy other Data object into this Data object where mask is positive.
Definition: Data.cpp:855
Transport.h
paso::TransportProblem::getSafeTimeStepSize
virtual double getSafeTimeStepSize() const
Definition: Transport_solve.cpp:206
paso::PasoException
PasoException exception class.
Definition: PasoException.h:45
paso::SystemMatrixType
int SystemMatrixType
Definition: SystemMatrix.h:57
escript::DataTypes::index_t
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:85
paso::TransportProblem::valid_matrices
bool valid_matrices
Definition: Transport.h:105
paso::Performance_stopMonitor
void Performance_stopMonitor(Performance *pp, int monitor)
switches off a monitor
Definition: performance.cpp:195
paso::TransportProblem::borrowLumpedMassMatrix
double * borrowLumpedMassMatrix() const
Definition: Transport.h:74
paso::TransportProblem::getUnlimitedTimeStepSize
virtual double getUnlimitedTimeStepSize() const
Definition: Transport.cpp:199
Preconditioner.h
PasoUtil.h
paso::util::zeroes
void zeroes(dim_t n, double *x)
fills array x with zeroes
Definition: PasoUtil.cpp:345
paso::TransportProblem::mpi_info
escript::JMPI mpi_info
Definition: Transport.h:120
paso::TransportProblem::iteration_matrix
SystemMatrix_ptr iteration_matrix
Definition: Transport.h:103
paso::Connector_ptr
boost::shared_ptr< Connector > Connector_ptr
Definition: Coupler.h:50
paso::TransportProblem::main_diagonal_mass_matrix
double * main_diagonal_mass_matrix
Definition: Transport.h:118
paso::TransportProblem::dt_max_T
double dt_max_T
safe time step size for transport part
Definition: Transport.h:109
escript::Data::getExpandedVectorReference
DataTypes::RealVectorType & getExpandedVectorReference(DataTypes::real_t dummy=0)
Ensures that the Data is expanded and returns its underlying vector Does not check for exclusive writ...
Definition: Data.cpp:5845
paso::TransportProblem::resetTransport
virtual void resetTransport(bool preserveSolverData) const
resets the transport operator typically as they have been updated.
Definition: Transport.cpp:189
paso
Definition: BiCGStab.cpp:26
escript::Data::expand
void expand()
Whatever the current Data type make this into a DataExpanded.
Definition: Data.cpp:1184
paso::NoError
Definition: Paso.h:69
escript::ValueError
An exception class that signals an invalid argument value.
Definition: EsysException.h:101
paso::util::innerProduct
double innerProduct(dim_t n, const double *x, const double *y, escript::JMPI mpiinfo)
returns the inner product of global arrays x and y
Definition: PasoUtil.cpp:454
paso::Options
Definition: Options.h:77
MATRIX_FORMAT_DEFAULT
#define MATRIX_FORMAT_DEFAULT
Definition: Paso.h:61
paso::TransportProblem::main_diagonal_low_order_transport_matrix
double * main_diagonal_low_order_transport_matrix
Definition: Transport.h:112
PASO_ZERO
#define PASO_ZERO
Definition: Paso.h:68