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 PASO_DLL_API 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 
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 
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 
#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
SystemMatrix_ptr< double > transport_matrix
Definition: Transport.h:102
bool valid_matrices
Definition: Transport.h:106
SystemMatrix_ptr< double > mass_matrix
Definition: Transport.h:103
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
index_t * borrowMainDiagonalPointer() const
Definition: Transport.h:90
SystemMatrix_ptr< double > borrowMassMatrix() const
Definition: Transport.h:70
dim_t getBlockSize() const
Definition: Transport.h:60
double * main_diagonal_mass_matrix
Definition: Transport.h:119
double * borrowLumpedMassMatrix() const
Definition: Transport.h:75
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 > borrowTransportMatrix() const
Definition: Transport.h:65
SystemMatrix_ptr< double > iteration_matrix
Definition: Transport.h:104
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.
index_t dim_t
Definition: DataTypes.h:66
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:61
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:74
Definition: BiCGStab.cpp:25
boost::shared_ptr< TransportProblem > TransportProblem_ptr
Definition: Transport.h:32
boost::shared_ptr< SystemMatrix< T > > SystemMatrix_ptr
Definition: SystemMatrix.h:42
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition: SystemMatrixPattern.h:40
boost::shared_ptr< Connector > Connector_ptr
Definition: Coupler.h:38
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