escript  Revision_
FCT_Solver.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 #ifndef __PASO_FCTSOLVER_H__
19 #define __PASO_FCTSOLVER_H__
20 
21 #include "Transport.h"
22 #include "FluxLimiter.h"
23 #include "Solver.h"
24 
25 namespace paso {
26 
28 {
30 
31  ~FCT_Solver();
32 
33  SolverResult update(double* u, double* u_old, Options* options, Performance* pp);
34 
35  SolverResult updateNL(double* u, double* u_old, Options* options, Performance* pp);
36 
37  SolverResult updateLCN(double* u, double* u_old, Options* options, Performance* pp);
38 
39  void initialize(double dt, Options* options, Performance* pp);
40 
41  static double getSafeTimeStepSize(const_TransportProblem_ptr tp);
42 
43  static void setLowOrderOperator(TransportProblem_ptr tp);
44 
45  void setAntiDiffusionFlux_linearCN(SystemMatrix_ptr<double> flux_matrix);
46 
47  void setAntiDiffusionFlux_BE(SystemMatrix_ptr<double> flux_matrix);
48 
49  void setAntiDiffusionFlux_CN(SystemMatrix_ptr<double> flux_matrix);
50 
51  void setMuPaLu(double* out, const_Coupler_ptr<real_t> coupler, double a);
52 
53  inline double getTheta()
54  {
55  return method == PASO_BACKWARD_EULER ? 1. : 0.5;
56  }
57 
62  double omega;
63  double dt;
64  double* b;
65  double* z;
66  double* du;
68  Coupler_ptr<real_t> u_old_coupler; /* last time step */
69 };
70 
71 
72 } // namespace paso
73 
74 #endif // __PASO_FCTSOLVER_H__
75 
paso::EPSILON
static const real_t EPSILON
Definition: ReactiveSolver.cpp:40
paso::LARGE_POSITIVE_FLOAT
static const real_t LARGE_POSITIVE_FLOAT
Definition: FCT_Solver.cpp:43
PASO_DLL_API
#define PASO_DLL_API
Definition: paso/src/system_dep.h:29
escript::DataTypes::real_t
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:52
paso::const_Coupler_ptr
boost::shared_ptr< const Coupler< T > > const_Coupler_ptr
Definition: Coupler.h:44
paso::FCT_Solver::omega
double omega
Definition: FCT_Solver.h:62
paso::util::lsup
double lsup(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global Lsup of x
Definition: PasoUtil.cpp:466
paso::FCT_Solver::method
index_t method
Definition: FCT_Solver.h:61
FluxLimiter.h
paso::Divergence
@ Divergence
Definition: Paso.h:51
paso::FCT_Solver::updateLCN
SolverResult updateLCN(double *u, double *u_old, Options *options, Performance *pp)
linear crank-nicolson update
Definition: FCT_Solver.cpp:143
paso::Performance_startMonitor
void Performance_startMonitor(Performance *pp, int monitor)
switches on a monitor
Definition: performance.cpp:163
paso::FCT_FluxLimiter::addLimitedFluxes_Complete
void addLimitedFluxes_Complete(double *b)
Definition: FluxLimiter.cpp:207
paso::FCT_Solver::dt
double dt
Definition: FCT_Solver.h:63
paso::SystemMatrix
this class holds a (distributed) stiffness matrix
Definition: SystemMatrix.h:50
paso::FCT_FluxLimiter::setU_tilde
void setU_tilde(const double *Mu_tilde)
Definition: FluxLimiter.cpp:62
paso::Coupler
Definition: Coupler.h:100
paso::FCT_FluxLimiter::u_tilde_coupler
Coupler_ptr< real_t > u_tilde_coupler
Definition: FluxLimiter.h:53
paso::FCT_Solver::setAntiDiffusionFlux_CN
void setAntiDiffusionFlux_CN(SystemMatrix_ptr< double > flux_matrix)
Definition: FCT_Solver.cpp:385
paso::Options::tolerance
double tolerance
Definition: Options.h:114
paso::FCT_Solver::u_coupler
Coupler_ptr< real_t > u_coupler
Definition: FCT_Solver.h:67
paso::FCT_FluxLimiter
Definition: FluxLimiter.h:27
PASO_CRANK_NICOLSON
#define PASO_CRANK_NICOLSON
Definition: Options.h:72
paso::FCT_Solver::b
double * b
Definition: FCT_Solver.h:64
paso::FCT_Solver::mpi_info
escript::JMPI mpi_info
Definition: FCT_Solver.h:59
escript::DataTypes::real_t_max
real_t real_t_max()
Returns the maximum finite value for the real_t type.
Definition: DataTypes.h:90
paso::const_SystemMatrixPattern_ptr
boost::shared_ptr< const SystemMatrixPattern > const_SystemMatrixPattern_ptr
Definition: SystemMatrixPattern.h:42
PERFORMANCE_PRECONDITIONER_INIT
#define PERFORMANCE_PRECONDITIONER_INIT
Definition: performance.h:44
paso::InputError
@ InputError
Definition: Paso.h:47
paso::Options::verbose
bool verbose
Definition: Options.h:118
weipa::VisItControl::initialize
bool initialize(const std::string &simFile, const std::string &comment)
Definition: VisItControl.cpp:178
paso::SystemMatrix_ptr
boost::shared_ptr< SystemMatrix< T > > SystemMatrix_ptr
Definition: SystemMatrix.h:42
paso::FCT_FluxLimiter::mpi_info
escript::JMPI mpi_info
Definition: FluxLimiter.h:46
paso::FCT_Solver::updateNL
SolverResult updateNL(double *u, double *u_old, Options *options, Performance *pp)
Definition: FCT_Solver.cpp:211
paso::FCT_Solver::setLowOrderOperator
static void setLowOrderOperator(TransportProblem_ptr tp)
Definition: FCT_Solver.cpp:597
Solver.h
paso::util::copy
void copy(dim_t N, double *out, const double *in)
out = in
Definition: PasoUtil.h:88
paso::FCT_Solver::~FCT_Solver
~FCT_Solver()
Definition: FCT_Solver.cpp:74
paso::FCT_Solver::du
double * du
Definition: FCT_Solver.h:66
paso::FCT_Solver::update
SolverResult update(double *u, double *u_old, Options *options, Performance *pp)
Definition: FCT_Solver.cpp:125
paso::util::update
void update(dim_t n, double a, double *x, double b, const double *y)
Definition: PasoUtil.cpp:339
paso::TransportProblem_ptr
boost::shared_ptr< TransportProblem > TransportProblem_ptr
Definition: Transport.h:32
paso::util::l2
double l2(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global L2 norm of x
Definition: PasoUtil.cpp:501
escript::DataTypes::dim_t
index_t dim_t
Definition: DataTypes.h:66
escript::JMPI
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:74
paso::FCT_Solver::getTheta
double getTheta()
Definition: FCT_Solver.h:53
PASO_LINEAR_CRANK_NICOLSON
#define PASO_LINEAR_CRANK_NICOLSON
Definition: Options.h:71
paso::Coupler_ptr
boost::shared_ptr< Coupler< T > > Coupler_ptr
Definition: Coupler.h:43
paso::FCT_Solver::setMuPaLu
void setMuPaLu(double *out, const_Coupler_ptr< real_t > coupler, double a)
Definition: FCT_Solver.cpp:666
paso::FCT_Solver::getSafeTimeStepSize
static double getSafeTimeStepSize(const_TransportProblem_ptr tp)
Definition: FCT_Solver.cpp:545
paso::FCT_Solver::u_old_coupler
Coupler_ptr< real_t > u_old_coupler
Definition: FCT_Solver.h:68
paso::FCT_FluxLimiter::u_tilde
double * u_tilde
Definition: FluxLimiter.h:48
paso::Solver_BiCGStab
SolverResult Solver_BiCGStab(SystemMatrix_ptr< double > A, double *r, double *x, dim_t *iter, double *tolerance, Performance *pp)
Definition: BiCGStab.cpp:77
paso::SolverResult
SolverResult
Definition: Paso.h:44
paso::Options::iter_max
dim_t iter_max
Definition: Options.h:121
paso::MaxIterReached
@ MaxIterReached
Definition: Paso.h:46
paso::solve_free
void solve_free(SystemMatrix< T > *A)
Definition: Solver.h:79
paso::Options::use_local_preconditioner
bool use_local_preconditioner
Definition: Options.h:130
PASO_GS
#define PASO_GS
Definition: Options.h:64
paso::FCT_FluxLimiter::antidiffusive_fluxes
SystemMatrix_ptr< double > antidiffusive_fluxes
Definition: FluxLimiter.h:45
FCT_Solver.h
paso::FCT_Solver
Definition: FCT_Solver.h:28
paso::const_TransportProblem_ptr
boost::shared_ptr< const TransportProblem > const_TransportProblem_ptr
Definition: Transport.h:34
Transport.h
paso::FCT_FluxLimiter::addLimitedFluxes_Start
void addLimitedFluxes_Start()
Definition: FluxLimiter.cpp:137
MPI_DOUBLE
#define MPI_DOUBLE
Definition: EsysMPI.h:49
MPI_MIN
#define MPI_MIN
Definition: EsysMPI.h:55
paso::Options::ode_solver
int ode_solver
Definition: Options.h:132
paso::Preconditioner
Definition: Preconditioner.h:37
paso::PasoException
PasoException exception class.
Definition: PasoException.h:34
paso::Options::preconditioner
int preconditioner
Definition: Options.h:120
paso::util::scale
void scale(dim_t N, double *x, double a)
x = a*x
Definition: PasoUtil.h:94
PASO_JACOBI
#define PASO_JACOBI
Definition: Options.h:47
escript::DataTypes::index_t
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:61
paso::Performance_stopMonitor
void Performance_stopMonitor(Performance *pp, int monitor)
switches off a monitor
Definition: performance.cpp:182
paso::Preconditioner_Smoother_solve_byTolerance
SolverResult Preconditioner_Smoother_solve_byTolerance(SystemMatrix_ptr< double > A, Preconditioner_Smoother *gs, double *x, const double *b, double atol, dim_t *sweeps, bool x_is_initial)
Definition: Smoother.cpp:127
paso::FCT_Solver::flux_limiter
FCT_FluxLimiter * flux_limiter
Definition: FCT_Solver.h:60
paso::Options::sweeps
int sweeps
Definition: Options.h:127
Preconditioner.h
PasoUtil.h
paso::util::zeroes
void zeroes(dim_t n, double *x)
fills array x with zeroes
Definition: PasoUtil.cpp:319
MIN3
#define MIN3(_arg1_, _arg2_, _arg3_)
Definition: FCT_Solver.cpp:39
paso::Preconditioner_Smoother_solve
void Preconditioner_Smoother_solve(SystemMatrix_ptr< double > A, Preconditioner_Smoother *gs, double *x, const double *b, dim_t sweeps, bool x_is_initial)
Definition: Smoother.cpp:100
paso::M
static dim_t M
Definition: SparseMatrix_saveHB.cpp:37
paso::FCT_Solver::setAntiDiffusionFlux_BE
void setAntiDiffusionFlux_BE(SystemMatrix_ptr< double > flux_matrix)
Definition: FCT_Solver.cpp:436
escript::DataTypes::real_t_eps
real_t real_t_eps()
Returns the machine epsilon for the real_t type.
Definition: DataTypes.h:99
paso::FCT_Solver::transportproblem
const_TransportProblem_ptr transportproblem
Definition: FCT_Solver.h:58
PASO_BACKWARD_EULER
#define PASO_BACKWARD_EULER
Definition: Options.h:73
paso::Options::absolute_tolerance
double absolute_tolerance
Definition: Options.h:115
paso
Definition: BiCGStab.cpp:25
paso::FCT_Solver::z
double * z
Definition: FCT_Solver.h:65
paso::NoError
@ NoError
Definition: Paso.h:45
paso::const_SystemMatrix_ptr
boost::shared_ptr< const SystemMatrix< T > > const_SystemMatrix_ptr
Definition: SystemMatrix.h:43
paso::Options
Definition: Options.h:80
paso::FCT_Solver::initialize
void initialize(double dt, Options *options, Performance *pp)
Definition: FCT_Solver.cpp:83
paso::Performance
Definition: performance.h:56
paso::Options::num_iter
dim_t num_iter
Definition: Options.h:135
paso::FCT_Solver::setAntiDiffusionFlux_linearCN
void setAntiDiffusionFlux_linearCN(SystemMatrix_ptr< double > flux_matrix)
Definition: FCT_Solver.cpp:492
paso::FCT_Solver::FCT_Solver
FCT_Solver(const_TransportProblem_ptr tp, Options *options)
Definition: FCT_Solver.cpp:45