escript  Revision_
FCT_Solver.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 #ifndef __PASO_FCTSOLVER_H__
18 #define __PASO_FCTSOLVER_H__
19 
20 #include "Transport.h"
21 #include "FluxLimiter.h"
22 #include "Solver.h"
23 
24 namespace paso {
25 
27 struct FCT_Solver
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 
42 
44 
46 
47  void setAntiDiffusionFlux_BE(SystemMatrix_ptr flux_matrix);
48 
49  void setAntiDiffusionFlux_CN(SystemMatrix_ptr flux_matrix);
50 
51  void setMuPaLu(double* out, const_Coupler_ptr 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 u_old_coupler; /* last time step */
69 };
70 
71 
72 } // namespace paso
73 
74 #endif // __PASO_FCTSOLVER_H__
75 
boost::shared_ptr< TransportProblem > TransportProblem_ptr
Definition: Transport.h:31
SolverResult update(double *u, double *u_old, Options *options, Performance *pp)
Definition: FCT_Solver.cpp:125
Coupler_ptr u_old_coupler
Definition: FCT_Solver.h:68
#define PASO_DLL_API
Definition: Paso.h:58
boost::shared_ptr< const Coupler > const_Coupler_ptr
Definition: Coupler.h:43
Definition: FluxLimiter.h:26
Definition: Options.h:89
SolverResult updateNL(double *u, double *u_old, Options *options, Performance *pp)
Definition: FCT_Solver.cpp:211
void setAntiDiffusionFlux_BE(SystemMatrix_ptr flux_matrix)
Definition: FCT_Solver.cpp:436
SolverResult updateLCN(double *u, double *u_old, Options *options, Performance *pp)
linear crank-nicolson update
Definition: FCT_Solver.cpp:143
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:71
~FCT_Solver()
Definition: FCT_Solver.cpp:74
double * du
Definition: FCT_Solver.h:66
double * b
Definition: FCT_Solver.h:64
FCT_FluxLimiter * flux_limiter
Definition: FCT_Solver.h:60
const_TransportProblem_ptr transportproblem
Definition: FCT_Solver.h:58
void setAntiDiffusionFlux_linearCN(SystemMatrix_ptr flux_matrix)
Definition: FCT_Solver.cpp:492
Definition: performance.h:54
boost::shared_ptr< SystemMatrix > SystemMatrix_ptr
Definition: SystemMatrix.h:40
double * z
Definition: FCT_Solver.h:65
Definition: AMG.cpp:45
void setAntiDiffusionFlux_CN(SystemMatrix_ptr flux_matrix)
Definition: FCT_Solver.cpp:385
double dt
Definition: FCT_Solver.h:63
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:59
static void setLowOrderOperator(TransportProblem_ptr tp)
Definition: FCT_Solver.cpp:597
FCT_Solver(const_TransportProblem_ptr tp, Options *options)
Definition: FCT_Solver.cpp:45
void setMuPaLu(double *out, const_Coupler_ptr coupler, double a)
Definition: FCT_Solver.cpp:666
boost::shared_ptr< const TransportProblem > const_TransportProblem_ptr
Definition: Transport.h:33
void initialize(double dt, Options *options, Performance *pp)
Definition: FCT_Solver.cpp:83
escript::JMPI mpi_info
Definition: FCT_Solver.h:59
boost::shared_ptr< Coupler > Coupler_ptr
Definition: Coupler.h:41
Coupler_ptr u_coupler
Definition: FCT_Solver.h:67
double getTheta()
Definition: FCT_Solver.h:53
double omega
Definition: FCT_Solver.h:62
static double getSafeTimeStepSize(const_TransportProblem_ptr tp)
Definition: FCT_Solver.cpp:545
SolverResult
Definition: Paso.h:42
index_t method
Definition: FCT_Solver.h:61
#define PASO_BACKWARD_EULER
Definition: Options.h:83
Definition: FCT_Solver.h:27