Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F120898952
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
Mon, Jul 7, 17:58
Size
3 KB
Mime Type
text/x-c
Expires
Wed, Jul 9, 17:58 (2 d)
Engine
blob
Format
Raw Data
Handle
27265912
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