Phoxonics  1.0
Object Oriented FDTD Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ElectroMagnetic2D.hpp
Go to the documentation of this file.
1 /*
2  * ElectroMagnetic2D.hpp
3  *
4  * Created on: Oct 20, 2014
5  * Author: nano
6  */
7 
8 #ifndef ELECTROMAGNETIC2D_HPP_
9 #define ELECTROMAGNETIC2D_HPP_
10 
11 #include "../../../common/common.hpp"
12 #include "../../../visual/visual.hpp"
13 #include "EngineBase.hpp"
14 #include "EngineFactoryReg.hpp"
15 #include "../cells/ElectroMagCells2D.hpp"
16 #include "../cell/ElectroMagCell.hpp"
17 #include "../pml/ElectroMagPml2D.hpp"
18 #include <string>
19 #include <memory>
20 #include <thread>
21 #include <chrono>
22 
23 namespace phoxonics {
24 namespace core {
25 
26 class ElectroMagnetic2D : public EngineBase {
27 public:
28  explicit ElectroMagnetic2D();
29  virtual ~ElectroMagnetic2D();
30 
31  int periods { 0 };
32  int use_threads { 0 };
33  std::string component1 { "" };
34  std::string component2 { "" };
35  std::string component3 { "" };
36  std::string propagation_direction { "" };
37  std::shared_ptr<ElectroMagCells2D> em_cells_2d_;
38 
39  // configures object and initializes data from config
40  void configure() override final;
41 
42  // prints object data
43  void print_me() override final;
44 
45  // starts engine process
46  void start(std::shared_ptr<GridBase> grid_base,
47  std::vector<std::shared_ptr<SourceBase>> sources_base,
48  std::vector<std::shared_ptr<DetectorBase>> detectors_base,
49  std::shared_ptr<PmlBase> pml_base) override final;
50 
51  // engine process
52  void process() override final;
53 
54  // update electric and magnetic fields
55  void update_field(std::string component) override final;
56 
57  // apply sources
58  void apply_sources(double time) override final;
59 
60  //record fluxes
61  void apply_detectors(double time) override final;
62 
63  // initialize hdf5 files
64  void init_hdf5_files() override final;
65 
66  // record hdf5 slice
67  void record_hdf5_slice() override final;
68 
69  // visualize in real time
70  void visualize_real_time() override final;
71 
72  // calculate detectors amplitude and phase
73  void calculate_detectors_amp_phase() override final;
74 
75  // records detector data in hdf5 format
76  void record_hdf5_detectors() override final;
77 
78  // hdf5 shell execution script generation
79  void generate_hdf5_shell(bool execute_shell) override final;
80 
81 private:
82  std::shared_ptr<ElectroMagPml2D> em_pml_2d_ { nullptr };
83  bool has_pml_ { false };
84 
85  std::shared_ptr<phoxonics::common::Hdf5Grid2DSlice> hdf5_grid2d_slice_c1_ { nullptr };
86  std::shared_ptr<phoxonics::common::Hdf5Grid2DSlice> hdf5_grid2d_slice_c2_ { nullptr };
87  std::shared_ptr<phoxonics::common::Hdf5Grid2DSlice> hdf5_grid2d_slice_c3_ { nullptr };
88 };
89 
90 } /* namespace core */
91 } /* namespace phoxonics */
92 
93 #endif /* ELECTROMAGNETIC2D_HPP_ */
void record_hdf5_slice() overridefinal
Definition: ElectroMagnetic2D.cpp:336
void record_hdf5_detectors() overridefinal
Definition: ElectroMagnetic2D.cpp:372
int periods
Definition: ElectroMagnetic2D.hpp:31
Definition: CommonBase.hpp:14
void generate_hdf5_shell(bool execute_shell) overridefinal
Definition: ElectroMagnetic2D.cpp:379
STL namespace.
void visualize_real_time() overridefinal
Definition: ElectroMagnetic2D.cpp:349
void print_me() overridefinal
Definition: ElectroMagnetic2D.cpp:115
void configure() overridefinal
Definition: ElectroMagnetic2D.cpp:23
std::string component1
Definition: ElectroMagnetic2D.hpp:33
std::string propagation_direction
Definition: ElectroMagnetic2D.hpp:36
std::shared_ptr< ElectroMagCells2D > em_cells_2d_
Definition: ElectroMagnetic2D.hpp:37
virtual ~ElectroMagnetic2D()
Definition: ElectroMagnetic2D.cpp:19
std::string component2
Definition: ElectroMagnetic2D.hpp:34
Definition: ElectroMagnetic2D.hpp:26
Definition: PmlBase.hpp:22
Definition: DetectorBase.hpp:22
int use_threads
Definition: ElectroMagnetic2D.hpp:32
Definition: EngineBase.hpp:26
Definition: GridBase.hpp:26
ElectroMagnetic2D()
Definition: ElectroMagnetic2D.cpp:15
void apply_sources(double time) overridefinal
Definition: ElectroMagnetic2D.cpp:301
void process() overridefinal
Definition: ElectroMagnetic2D.cpp:140
void calculate_detectors_amp_phase() overridefinal
Definition: ElectroMagnetic2D.cpp:365
Definition: ElectroMagPml2D.hpp:21
void update_field(std::string component) overridefinal
Definition: ElectroMagnetic2D.cpp:168
Definition: SourceBase.hpp:22
std::string component3
Definition: ElectroMagnetic2D.hpp:35
void apply_detectors(double time) overridefinal
Definition: ElectroMagnetic2D.cpp:308
void init_hdf5_files() overridefinal
Definition: ElectroMagnetic2D.cpp:315
void start(std::shared_ptr< GridBase > grid_base, std::vector< std::shared_ptr< SourceBase >> sources_base, std::vector< std::shared_ptr< DetectorBase >> detectors_base, std::shared_ptr< PmlBase > pml_base) overridefinal
Definition: ElectroMagnetic2D.cpp:126