WarpX
Loading...
Searching...
No Matches
ThetaImplicitEM.H
Go to the documentation of this file.
1/* Copyright 2024 Justin Angus
2 *
3 * This file is part of WarpX.
4 *
5 * License: BSD-3-Clause-LBNL
6 */
7#ifndef THETA_IMPLICIT_EM_H_
8#define THETA_IMPLICIT_EM_H_
9
11#include "ImplicitSolver.H"
12
13#include <AMReX_Array.H>
14#include <AMReX_MultiFab.H>
15#include <AMReX_REAL.H>
16
51
53{
54public:
55
56 ThetaImplicitEM() = default;
57
58 ~ThetaImplicitEM() override = default;
59
60 // Prohibit Move and Copy operations
65
66 void Define ( WarpX* a_WarpX ) override;
67
68 void PrintParameters () const override;
69
77 void OneStep ( amrex::Real start_time,
78 amrex::Real a_dt,
79 int a_step ) override;
80
81 void ComputeRHS ( WarpXSolverVec& a_RHS,
82 const WarpXSolverVec& a_E,
83 amrex::Real start_time,
84 int a_nl_iter,
85 bool a_from_jacobian ) override;
86
87 // This parameter is used for the time-step fraction in the PC for implicit
88 // treatment of light waves in the curl-curl MLMG solver.
89 // This function should return zero if light waves are not treated implicitly
90 [[nodiscard]] virtual amrex::Real GetThetaForPC () const override { return m_theta; }
91
92private:
93
103
107 void UpdateWarpXFields ( const WarpXSolverVec& a_E,
108 amrex::Real start_time );
109
114 void FinishFieldUpdate ( amrex::Real end_time );
115
116};
117
118#endif
amrex::Real m_theta
Time-biasing parameter for fields used on RHS to advance system.
Definition ImplicitSolver.H:133
ImplicitSolver()=default
void Define(WarpX *a_WarpX) override
Read user-provided parameters that control the implicit solver. Allocate internal arrays for intermed...
Definition ThetaImplicitEM.cpp:15
ThetaImplicitEM()=default
WarpXSolverVec m_Eold
Definition ThetaImplicitEM.H:102
void ComputeRHS(WarpXSolverVec &a_RHS, const WarpXSolverVec &a_E, amrex::Real start_time, int a_nl_iter, bool a_from_jacobian) override
Computes the RHS of the equation corresponding to the specified implicit algorithm....
Definition ThetaImplicitEM.cpp:127
void OneStep(amrex::Real start_time, amrex::Real a_dt, int a_step) override
Advances the simulation one time step.
Definition ThetaImplicitEM.cpp:79
WarpXSolverVec m_E
Solver vectors to be used in the nonlinear solver to solve for the electric field E....
Definition ThetaImplicitEM.H:102
void FinishFieldUpdate(amrex::Real end_time)
Nonlinear solver is for the time-centered values of E. After the solver, need to use m_E and m_Eold t...
Definition ThetaImplicitEM.cpp:163
void PrintParameters() const override
Definition ThetaImplicitEM.cpp:64
ThetaImplicitEM(ThetaImplicitEM &&)=delete
~ThetaImplicitEM() override=default
ThetaImplicitEM & operator=(ThetaImplicitEM &&)=delete
virtual amrex::Real GetThetaForPC() const override
Definition ThetaImplicitEM.H:90
ThetaImplicitEM(const ThetaImplicitEM &)=delete
ThetaImplicitEM & operator=(const ThetaImplicitEM &)=delete
void UpdateWarpXFields(const WarpXSolverVec &a_E, amrex::Real start_time)
Update the E and B fields owned by WarpX.
Definition ThetaImplicitEM.cpp:148
Definition WarpX.H:85
This is a wrapper class around a Vector of pointers to MultiFabs that contains basic math operators a...
Definition WarpXSolverVec.H:58