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
30namespace paso {
31
32class PASO_DLL_API TransportProblem;
33typedef boost::shared_ptr<TransportProblem> TransportProblem_ptr;
34typedef boost::shared_ptr<const TransportProblem> const_TransportProblem_ptr;
35
37 public boost::enable_shared_from_this<TransportProblem>
38{
39public:
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
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
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
123private:
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
#define MATRIX_FORMAT_BLK1
Definition Paso.h:63
#define MATRIX_FORMAT_DEFAULT
Definition Paso.h:61
Give a short description of what AbstractTransportProblem does.
Definition AbstractTransportProblem.h:45
Data represents a collection of datapoints.
Definition Data.h:64
Definition FunctionSpace.h:36
Definition Transport.h:38
index_t * borrowMainDiagonalPointer() const
Definition Transport.h:90
SystemMatrix_ptr< double > transport_matrix
Definition Transport.h:102
bool valid_matrices
Definition Transport.h:106
double * borrowLumpedMassMatrix() const
Definition Transport.h:75
SystemMatrix_ptr< double > mass_matrix
Definition Transport.h:103
SystemMatrix_ptr< double > borrowTransportMatrix() const
Definition Transport.h:65
double * reactive_matrix
Definition Transport.h:118
static int getTypeId(int solver, int preconditioner, int package, bool symmetry, const escript::JMPI &mpi_info)
Definition Transport.h:95
dim_t getBlockSize() const
Definition Transport.h:60
double * main_diagonal_mass_matrix
Definition Transport.h:119
Connector_ptr borrowConnector() const
Definition Transport.h:85
escript::JMPI mpi_info
Definition Transport.h:121
dim_t getTotalNumRows() const
Definition Transport.h:80
double * constraint_mask
Definition Transport.h:111
SystemMatrix_ptr< double > iteration_matrix
Definition Transport.h:104
SystemMatrix_ptr< double > borrowMassMatrix() const
Definition Transport.h:70
double * main_diagonal_low_order_transport_matrix
Definition Transport.h:113
double dt_max_T
safe time step size for transport part
Definition Transport.h:110
double * lumped_mass_matrix
Definition Transport.h:117
double dt_max_R
safe time step size for reactive part
Definition Transport.h:108
TransportProblem()
Default constructor - throws exception.
boost::shared_ptr< JMPI_ > JMPI
Definition EsysMPI.h:76
Definition BiCGStab.cpp:25
boost::shared_ptr< TransportProblem > TransportProblem_ptr
Definition Transport.h:33
boost::shared_ptr< SystemMatrix< T > > SystemMatrix_ptr
Definition SystemMatrix.h:42
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition SystemMatrixPattern.h:41
boost::shared_ptr< Connector > Connector_ptr
Definition Coupler.h:39
boost::shared_ptr< const TransportProblem > const_TransportProblem_ptr
Definition Transport.h:34
#define PASO_DLL_API
Definition paso/src/system_dep.h:29
Definition Options.h:80