WarpX
Loading...
Searching...
No Matches
ExternalVectorPotential.H
Go to the documentation of this file.
1/* Copyright 2024 The WarpX Community
2 *
3 * This file is part of WarpX.
4 *
5 * Authors: S. Eric Clark (Helion Energy)
6 *
7 * License: BSD-3-Clause-LBNL
8 */
9
10#ifndef WARPX_EXTERNAL_VECTOR_POTENTIAL_H_
11#define WARPX_EXTERNAL_VECTOR_POTENTIAL_H_
12
13#include "Fields.H"
14
16
20#include "Utils/WarpXConst.H"
22
24
25#include <AMReX_Array.H>
26#include <AMReX_REAL.H>
27#include <AMReX_BoxArray.H>
28#include <AMReX_IntVect.H>
30
31#include <optional>
32
44{
45protected:
47
48 std::vector<std::string> m_field_names;
49
50 std::vector<std::string> m_Ax_ext_grid_function;
51 std::vector<std::string> m_Ay_ext_grid_function;
52 std::vector<std::string> m_Az_ext_grid_function;
53 std::vector<std::array< std::unique_ptr<amrex::Parser>, 3>> m_A_external_parser;
54 std::vector<std::array< amrex::ParserExecutor<4>, 3>> m_A_external;
55
56 std::vector<std::string> m_A_ext_time_function;
57 std::vector<std::unique_ptr<amrex::Parser>> m_A_external_time_parser;
58 std::vector<amrex::ParserExecutor<1>> m_A_time_scale;
59
60 std::vector<bool> m_read_A_from_file;
61 std::vector<std::string> m_external_file_path;
62
63 // Clean div A
64 bool m_do_clean_divA = true;
65
66public:
67
68 // Default Constructor
70
71 void ReadParameters ();
72
73 void AllocateLevelMFs (
75 int lev, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm,
76 int ncomps,
77 const amrex::IntVect& ngEB,
78 const amrex::IntVect& Ex_nodal_flag,
79 const amrex::IntVect& Ey_nodal_flag,
80 const amrex::IntVect& Ez_nodal_flag,
81 const amrex::IntVect& Bx_nodal_flag,
82 const amrex::IntVect& By_nodal_flag,
83 const amrex::IntVect& Bz_nodal_flag
84 );
85
86 void InitData ();
87
89 void CalculateExternalCurlA (std::string& coil_name);
90
93 ablastr::fields::VectorField const& dstField,
94 amrex::Real scale_factor,
95 ablastr::fields::VectorField const& srcField,
96 std::array< std::unique_ptr<amrex::iMultiFab>,3> const& eb_update);
97
99 amrex::Real t,
100 amrex::Real dt
101 );
102};
103
104#endif //WARPX_TIME_DEPENDENT_VECTOR_POTENTIAL_H_
#define AMREX_FORCE_INLINE
void AllocateLevelMFs(ablastr::fields::MultiFabRegister &fields, int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, int ncomps, const amrex::IntVect &ngEB, const amrex::IntVect &Ex_nodal_flag, const amrex::IntVect &Ey_nodal_flag, const amrex::IntVect &Ez_nodal_flag, const amrex::IntVect &Bx_nodal_flag, const amrex::IntVect &By_nodal_flag, const amrex::IntVect &Bz_nodal_flag)
Definition ExternalVectorPotential.cpp:84
std::vector< std::string > m_Ay_ext_grid_function
Definition ExternalVectorPotential.H:51
bool m_do_clean_divA
Definition ExternalVectorPotential.H:64
std::vector< std::string > m_Az_ext_grid_function
Definition ExternalVectorPotential.H:52
std::vector< std::string > m_A_ext_time_function
Definition ExternalVectorPotential.H:56
std::vector< std::unique_ptr< amrex::Parser > > m_A_external_time_parser
Definition ExternalVectorPotential.H:57
std::vector< std::string > m_Ax_ext_grid_function
Definition ExternalVectorPotential.H:50
std::vector< amrex::ParserExecutor< 1 > > m_A_time_scale
Definition ExternalVectorPotential.H:58
std::vector< std::string > m_external_file_path
Definition ExternalVectorPotential.H:61
std::vector< std::string > m_field_names
Definition ExternalVectorPotential.H:48
void ReadParameters()
Definition ExternalVectorPotential.cpp:27
void InitData()
Definition ExternalVectorPotential.cpp:141
ExternalVectorPotential()
Definition ExternalVectorPotential.cpp:21
AMREX_FORCE_INLINE void AddExternalFieldFromVectorPotential(ablastr::fields::VectorField const &dstField, amrex::Real scale_factor, ablastr::fields::VectorField const &srcField, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > const &eb_update)
Definition ExternalVectorPotential.cpp:270
int m_nFields
Definition ExternalVectorPotential.H:46
std::vector< std::array< std::unique_ptr< amrex::Parser >, 3 > > m_A_external_parser
Definition ExternalVectorPotential.H:53
void UpdateHybridExternalFields(amrex::Real t, amrex::Real dt)
Definition ExternalVectorPotential.cpp:332
std::vector< bool > m_read_A_from_file
Definition ExternalVectorPotential.H:60
void CalculateExternalCurlA()
Definition ExternalVectorPotential.cpp:232
std::vector< std::array< amrex::ParserExecutor< 4 >, 3 > > m_A_external
Definition ExternalVectorPotential.H:54
Definition EffectivePotentialPoissonSolver.H:63
std::array< amrex::MultiFab *, 3 > VectorField
Definition MultiFabRegister.H:191
IntVectND< 3 > IntVect
Definition MultiFabRegister.H:262