escript  Revision_
Transport.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2016 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 
18 #ifndef __PASO_TRANSPORT_H__
19 #define __PASO_TRANSPORT_H__
20 
21 #define DT_FACTOR_MAX 100000.
22 
23 #include "Paso.h"
24 #include "Options.h"
25 #include "SystemMatrix.h"
26 
27 #include <escript/AbstractTransportProblem.h>
28 
29 namespace paso {
30 
32 typedef boost::shared_ptr<TransportProblem> TransportProblem_ptr;
33 typedef boost::shared_ptr<const TransportProblem> const_TransportProblem_ptr;
34 
36  public boost::enable_shared_from_this<TransportProblem>
37 {
38 public:
41 
42  TransportProblem(SystemMatrixPattern_ptr pattern, int blocksize,
43  const escript::FunctionSpace& functionspace);
44 
46 
47  virtual void resetTransport() const;
48 
49  void solve(double* u, double dt, double* u0, double* q, Options* options);
50 
51  virtual double getSafeTimeStepSize() const;
52 
53  virtual double getUnlimitedTimeStepSize() const;
54 
55  void insertConstraint(const double* r, double* source) const;
56 
57  void setUpConstraint(const double* q);
58 
59  inline dim_t getBlockSize() const
60  {
61  return transport_matrix->row_block_size;
62  }
63 
65  {
66  return transport_matrix;
67  }
68 
70  {
71  return mass_matrix;
72  }
73 
74  inline double* borrowLumpedMassMatrix() const
75  {
76  return lumped_mass_matrix;
77  }
78 
79  inline dim_t getTotalNumRows() const
80  {
81  return transport_matrix->getTotalNumRows();
82  }
83 
85  {
86  return transport_matrix->pattern->col_connector;
87  }
88 
90  {
91  return mass_matrix->mainBlock->borrowMainDiagonalPointer();
92  }
93 
94  inline static int getTypeId(int solver, int preconditioner,
95  int package, bool symmetry,
96  const escript::JMPI& mpi_info)
97  {
99  }
100 
104 
105  mutable bool valid_matrices;
107  mutable double dt_max_R;
109  mutable double dt_max_T;
110  mutable double* constraint_mask;
111 
119 
121 
122 private:
123  virtual void setToSolution(escript::Data& out, escript::Data& u0,
124  escript::Data& source, double dt,
125  boost::python::object& options);
126 
127  virtual void copyConstraint(escript::Data& source, escript::Data& q,
128  escript::Data& r);
129 };
130 
131 } // namespace paso
132 
133 #endif // __PASO_TRANSPORT_H__
134 
Definition: FunctionSpace.h:34
boost::shared_ptr< TransportProblem > TransportProblem_ptr
Definition: Transport.h:31
double * main_diagonal_mass_matrix
Definition: Transport.h:118
SystemMatrix_ptr mass_matrix
Definition: Transport.h:102
Connector_ptr borrowConnector() const
Definition: Transport.h:84
Definition: Options.h:89
double * constraint_mask
Definition: Transport.h:110
double * main_diagonal_low_order_transport_matrix
Definition: Transport.h:112
void insertConstraint(const double *r, double *source) const
Definition: Transport.cpp:214
SystemMatrix_ptr borrowTransportMatrix() const
Definition: Transport.h:64
double * reactive_matrix
Definition: Transport.h:117
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:71
TransportProblem()
Default constructor - throws exception.
dim_t getTotalNumRows() const
Definition: Transport.h:79
SystemMatrix_ptr borrowMassMatrix() const
Definition: Transport.h:69
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition: SystemMatrixPattern.h:39
boost::shared_ptr< SystemMatrix > SystemMatrix_ptr
Definition: SystemMatrix.h:40
index_t * borrowMainDiagonalPointer() const
Definition: Transport.h:89
void setUpConstraint(const double *q)
Definition: Transport.cpp:196
Definition: AMG.cpp:45
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:59
double * borrowLumpedMassMatrix() const
Definition: Transport.h:74
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:124
static int getTypeId(int solver, int preconditioner, int package, bool symmetry, const escript::JMPI &mpi_info)
Definition: Transport.h:94
Definition: Transport.h:35
Data represents a collection of datapoints.
Definition: Data.h:63
double dt_max_R
safe time step size for reactive part
Definition: Transport.h:107
boost::shared_ptr< const TransportProblem > const_TransportProblem_ptr
Definition: Transport.h:33
virtual void resetTransport() const
resets the transport operator typically as they have been updated.
Definition: Transport.cpp:180
#define MATRIX_FORMAT_DEFAULT
Definition: Paso.h:60
escript::JMPI mpi_info
Definition: Transport.h:120
void solve(double *u, double dt, double *u0, double *q, Options *options)
Definition: Transport_solve.cpp:50
SystemMatrix_ptr transport_matrix
Definition: Transport.h:101
Give a short description of what AbstractTransportProblem does.
Definition: AbstractTransportProblem.h:43
boost::shared_ptr< Connector > Connector_ptr
Definition: Coupler.h:37
dim_t getBlockSize() const
Definition: Transport.h:59
~TransportProblem()
Definition: Transport.cpp:85
#define MATRIX_FORMAT_BLK1
Definition: Paso.h:62
virtual double getUnlimitedTimeStepSize() const
Definition: Transport.cpp:190
double * lumped_mass_matrix
Definition: Transport.h:116
virtual double getSafeTimeStepSize() const
Definition: Transport_solve.cpp:193
SystemMatrix_ptr iteration_matrix
Definition: Transport.h:103
bool valid_matrices
Definition: Transport.h:105
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
double dt_max_T
safe time step size for transport part
Definition: Transport.h:109
index_t dim_t
Definition: DataTypes.h:64