Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F106921342
reactive_transport_solver.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, Apr 2, 13:33
Size
3 KB
Mime Type
text/x-c++
Expires
Fri, Apr 4, 13:33 (2 d)
Engine
blob
Format
Raw Data
Handle
25306267
Attached To
rSPECMICP SpecMiCP / ReactMiCP
reactive_transport_solver.hpp
View Options
#ifndef SPECMICP_REACTMICP_SOLVER_REACTIVETRANSPORTSOLVER_HPP
#define SPECMICP_REACTMICP_SOLVER_REACTIVETRANSPORTSOLVER_HPP
//! \file reactive_transport_solver.hpp The reactive transport solver
//! \namespace specmicp::reactmicp::solver Namespace containing the algorithms for the reactive transport solver
#include "common.hpp"
#include <memory>
#include "reactive_transport_solver_structs.hpp"
#include "utils/options_handler.hpp"
#include "utils/perfs_handler.hpp"
// forward declarations
// ====================
namespace
specmicp
{
namespace
reactmicp
{
namespace
solver
{
class
VariablesBase
;
using
VariablesBasePtr
=
std
::
shared_ptr
<
VariablesBase
>
;
class
TransportStaggerBase
;
class
ChemistryStaggerBase
;
class
UpscalingStaggerBase
;
using
TransportStaggerPtr
=
std
::
shared_ptr
<
TransportStaggerBase
>
;
using
ChemistryStaggerPtr
=
std
::
shared_ptr
<
ChemistryStaggerBase
>
;
using
UpscalingStaggerPtr
=
std
::
shared_ptr
<
UpscalingStaggerBase
>
;
namespace
internal
{
struct
ReactiveTransportResiduals
;
}
// end namespace internal
}
// end namespace solver
}
// end namespace reactmicp
}
// end namespace specmicp
// Reactive Transport Solver
// =========================
namespace
specmicp
{
namespace
reactmicp
{
namespace
solver
{
//! \brief The reactive transport solver
//!
//! This class solves a reactive transport problem.
//! The details of the problem are implemented in the staggers.
//!
//! There is three staggers :
//! - The transport stagger
//! - The chemistry stagger
//! - The upscaling stagger
//!
//! The transport stagger also implements the residuals used to checked the convergence.
//!
//! This algorithm do not update, modify the variables.
//! The details must be implemented in the staggers.
//! The variables shared by the algorithm is a shared_ptr to the abstract base class specmicp::reactmicp::solver::VariablesBase
//! To be useful, this variable must be casted to the true class in the staggers.
class
ReactiveTransportSolver
:
public
OptionsHandler
<
ReactiveTransportOptions
>
,
public
PerformanceHandler
<
ReactiveTransportPerformance
>
{
public
:
//! \brief Build a reactive transport
//!
//! \param transport_stagger shared_ptr to a transport stagger
//! \param chemistry_stagger shared_ptr to a chemistry stagger
//! \param upscaling_stagger shared_ptr to an upscaling stagger
ReactiveTransportSolver
(
TransportStaggerPtr
transport_stagger
,
ChemistryStaggerPtr
chemistry_stagger
,
UpscalingStaggerPtr
upscaling_stagger
)
:
m_transport_stagger
(
transport_stagger
),
m_chemistry_stagger
(
chemistry_stagger
),
m_upscaling_stagger
(
upscaling_stagger
)
{}
//! \brief Solve a timestep
//!
//! \param timestep The duration of the timestep
//! \param variables shared_ptr to the variables
ReactiveTransportReturnCode
solve_timestep
(
scalar_t
timestep
,
VariablesBasePtr
variables
);
private
:
// members
//! \brief One iteration inside the timestep
//!
//! \param variables shared_ptr to the variables
//! \param residuals struct containing the residuals information
ReactiveTransportReturnCode
one_iteration
(
VariablesBasePtr
variables
,
internal
::
ReactiveTransportResiduals
&
residuals
);
//! \brief Check the convergence
//!
//! \param variables shared_ptr to the variables
//! \param residuals struct containing the residuals information
ReactiveTransportReturnCode
check_convergence
(
VariablesBasePtr
variables
,
const
internal
::
ReactiveTransportResiduals
&
residuals
);
private
:
// attributes
TransportStaggerPtr
m_transport_stagger
;
//!< The transport stagger
ChemistryStaggerPtr
m_chemistry_stagger
;
//!< The chemistry stagger
UpscalingStaggerPtr
m_upscaling_stagger
;
//!< The upscaling stagger
};
}
// end namespace solver
}
// end namespace reactmicp
}
// end namespace specmicp
#endif
// SPECMICP_REACTMICP_SOLVER_REACTIVETRANSPORTSOLVER_HPP
Event Timeline
Log In to Comment