Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F82394839
reactive_transport_solver_structs.hpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Sep 11, 04:08
Size
3 KB
Mime Type
text/x-c
Expires
Fri, Sep 13, 04:08 (2 d)
Engine
blob
Format
Raw Data
Handle
20692213
Attached To
rSPECMICP SpecMiCP / ReactMiCP
reactive_transport_solver_structs.hpp
View Options
#ifndef SPECMICP_REACTMICP_SOLVER_REACTIVETRANSPORTSOLVERSTRUCTS_HPP
#define SPECMICP_REACTMICP_SOLVER_REACTIVETRANSPORTSOLVERSTRUCTS_HPP
#include "common.hpp"
//! \file reactive_transport_solver_structs.hpp Structs used by the reactive transport solver
namespace
specmicp
{
namespace
reactmicp
{
namespace
solver
{
//! \brief Return codes used by the reactive transport solver
enum
class
ReactiveTransportReturnCode
{
UpscalingFailure
=
-
13
,
//!< Upscaling stagger has failed
ChemistryFailure
=
-
12
,
//!< Chemistry stagger has failed
TransportFailure
=
-
11
,
//!< Transport stagger has failed
StaggerFailure
=
-
10
,
//!< A stagger has failed
MaximumIterationsReached
=
-
2
,
//!< Maximum number of fixed-point iterations is reached
StationaryPoint
=
-
1
,
//!< The solver has reached a stationnary points
NotConvergedYet
=
0
,
//!< The solver has not converged yet
ResidualMinimized
=
1
,
//!< The residuals are minimized
ErrorMinimized
=
2
,
//!< The error is minimized (may indicate a stationnary point)
GoodEnough
=
3
,
//!< Good enough
TransportBypass
=
5
,
//!< Transport is minimized, no need to do iterations
};
//! \brief Options used by the reactive transport solver
struct
ReactiveTransportOptions
{
scalar_t
residuals_tolerance
;
//!< Relative tolerance for the residuals
scalar_t
absolute_residuals_tolerance
;
//!< Absolute tolerance for the residuals
scalar_t
step_tolerance
;
//!< Absolute tolerance for the step
scalar_t
good_enough_tolerance
;
//!< Relative tolerance to detect a stationnary point
index_t
maximum_iterations
;
//!< Maximum number of iterations allowed
bool
implicit_upscaling
;
//!< When true, the upscaling problem is solved at each iteration
//! \brief Use a Sequential Non-iterative Algorithm
void
set_snia
()
{
maximum_iterations
=
1
;}
//! \brief Return true if the problem is solved using a SNIA
bool
is_snia
()
{
return
maximum_iterations
<=
1
;}
ReactiveTransportOptions
()
:
residuals_tolerance
(
1e-4
),
absolute_residuals_tolerance
(
1e-16
),
step_tolerance
(
1e-10
),
good_enough_tolerance
(
1e-2
),
maximum_iterations
(
100
),
implicit_upscaling
(
false
)
{}
};
//! \brief Struct containing performance information
//!
//! This is valid for one timestep.
struct
ReactiveTransportPerformance
{
scalar_t
timestep
;
//!< Timestep used
index_t
nb_iterations
;
//!< The number of fixed-point iterations for this timestep
ReactiveTransportReturnCode
return_code
;
//!< The return code of the timestep
scalar_t
residuals
;
//!< The norm of the residuals at the end of the timestep
scalar_t
total_time
;
//!< Time spent solving one timestep
scalar_t
transport_time
;
//!< Time spent solving the transport problem
scalar_t
chemistry_time
;
//!< Time spent solving the chemistry problem
ReactiveTransportPerformance
()
:
nb_iterations
(
0
),
return_code
(
ReactiveTransportReturnCode
::
NotConvergedYet
),
residuals
(
HUGE_VAL
),
total_time
(
0.0
),
transport_time
(
0.0
),
chemistry_time
(
0.0
)
{}
};
//! \brief Struct containing the execution time of the staggers
struct
ReactiveTransportTimer
{
scalar_t
transport_time
;
scalar_t
chemistry_time
;
scalar_t
upscaling_time
;
};
}
// end namespace solver
}
// end namespace reactmicp
}
// end namespace specmicp
#endif
// SPECMICP_REACTMICP_SOLVER_REACTIVETRANSPORTSOLVERSTRUCTS_HPP
Event Timeline
Log In to Comment