Phoxonics  1.0
Object Oriented FDTD Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
PhxElectroMagnetic2D.hpp
Go to the documentation of this file.
1 /*
2  * PhxElectroMagnetic2D.hpp
3  *
4  * Created on: Dec 10, 2014
5  * Author: nano
6  */
7 
8 #ifndef PHXELECTROMAGNETIC2D_HPP_
9 #define PHXELECTROMAGNETIC2D_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 
27 public:
28  explicit PhxElectroMagnetic2D();
29  virtual ~PhxElectroMagnetic2D();
30 
31  int periods { 0 };
32  int time_steps { 0 };
33  int use_threads { 0 };
34  std::string component1 { "" };
35  std::string component2 { "" };
36  std::string component3 { "" };
37  std::string propagation_direction { "" };
38  std::string h5topng_zoom { "" };
39 
40  // this can vary in the config
41  double lambda_0 { 0.0 };
42  double lambda { 0.0 };
43  double resolution { 0.0 };
44 
45  // electromagnetic variables dependent on lamda_0 and size
46  double tao_0 { 0.0 };
47  double ttao_0 { 0.0 };
48  double omega_0 { 0.0 };
49  double t_0 { 0.0 };
50  double t_f { 0.0 };
51  double sigma { 0.0 };
52  double dx { 0.0 };
53  double dy { 0.0 };
54  double dt { 0.0 };
55 
56  // configures object and initializes data from config
57  void configure() override final;
58 
59  // prints object data
60  void print_me() override final;
61 
62  // starts engine process
63  void start(std::shared_ptr<GridBase> grid_base,
64  std::vector<std::shared_ptr<SourceBase>> sources_base,
65  std::vector<std::shared_ptr<DetectorBase>> detectors_base,
66  std::shared_ptr<PmlBase> pml_base) override final;
67 
68  // engine process
69  void process() override final;
70 
71  // update electric and magnetic fields
72  void update_field(std::string component) override final;
73 
74  // apply sources (gaussian)
75  void apply_sources(double time) override final;
76 
77  //record fluxes
78  void apply_detectors(double time) override final;
79 
80  // initialize hdf5 files
81  void init_hdf5_files() override final;
82 
83  // record hdf5 slice
84  void record_hdf5_slice() override final;
85 
86  // visualize in real time
87  void visualize_real_time() override final;
88 
89  // calculate detectors amplitude and phase
90  void calculate_detectors_amp_phase() override final;
91 
92  // records detector data in hdf5 format
93  void record_hdf5_detectors() override final;
94 
95  // hdf5 shell execution script generation
96  void generate_hdf5_shell(bool execute_shell) override final;
97 
98 private:
99  std::shared_ptr<ElectroMagCells2D> em_cells_2d_;
100 
101  std::shared_ptr<ElectroMagPml2D> em_pml_2d_ { nullptr };
102  bool has_pml_ { false };
103 
104  void init_detectors();
105 
106  std::shared_ptr<phoxonics::common::Hdf5Grid2DSlice> hdf5_grid2d_slice_c1_ { nullptr };
107  std::shared_ptr<phoxonics::common::Hdf5Grid2DSlice> hdf5_grid2d_slice_c2_ { nullptr };
108  std::shared_ptr<phoxonics::common::Hdf5Grid2DSlice> hdf5_grid2d_slice_c3_ { nullptr };
109 };
110 
111 } /* namespace core */
112 } /* namespace phoxonics */
113 
114 #endif /* PHXELECTROMAGNETIC2D_HPP_ */
std::string component1
Definition: PhxElectroMagnetic2D.hpp:34
double lambda
Definition: PhxElectroMagnetic2D.hpp:42
double t_f
Definition: PhxElectroMagnetic2D.hpp:50
void apply_sources(double time) overridefinal
Definition: PhxElectroMagnetic2D.cpp:319
Definition: ElectroMagCells2D.hpp:29
Definition: CommonBase.hpp:14
void configure() overridefinal
Definition: PhxElectroMagnetic2D.cpp:23
void record_hdf5_slice() overridefinal
Definition: PhxElectroMagnetic2D.cpp:354
STL namespace.
std::string propagation_direction
Definition: PhxElectroMagnetic2D.hpp:37
void update_field(std::string component) overridefinal
Definition: PhxElectroMagnetic2D.cpp:185
double ttao_0
Definition: PhxElectroMagnetic2D.hpp:47
Definition: PhxElectroMagnetic2D.hpp:26
double omega_0
Definition: PhxElectroMagnetic2D.hpp:48
double sigma
Definition: PhxElectroMagnetic2D.hpp:51
std::string component3
Definition: PhxElectroMagnetic2D.hpp:36
virtual ~PhxElectroMagnetic2D()
Definition: PhxElectroMagnetic2D.cpp:19
int time_steps
Definition: PhxElectroMagnetic2D.hpp:32
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: PhxElectroMagnetic2D.cpp:140
double tao_0
Definition: PhxElectroMagnetic2D.hpp:46
void generate_hdf5_shell(bool execute_shell) overridefinal
Definition: PhxElectroMagnetic2D.cpp:397
PhxElectroMagnetic2D()
Definition: PhxElectroMagnetic2D.cpp:15
void print_me() overridefinal
Definition: PhxElectroMagnetic2D.cpp:120
int periods
Definition: PhxElectroMagnetic2D.hpp:31
double resolution
Definition: PhxElectroMagnetic2D.hpp:43
Definition: PmlBase.hpp:22
Definition: DetectorBase.hpp:22
Definition: EngineBase.hpp:26
void process() overridefinal
Definition: PhxElectroMagnetic2D.cpp:155
Definition: GridBase.hpp:26
void record_hdf5_detectors() overridefinal
Definition: PhxElectroMagnetic2D.cpp:390
double t_0
Definition: PhxElectroMagnetic2D.hpp:49
std::string h5topng_zoom
Definition: PhxElectroMagnetic2D.hpp:38
void visualize_real_time() overridefinal
Definition: PhxElectroMagnetic2D.cpp:367
std::string component2
Definition: PhxElectroMagnetic2D.hpp:35
Definition: ElectroMagPml2D.hpp:21
double dt
Definition: PhxElectroMagnetic2D.hpp:54
void apply_detectors(double time) overridefinal
Definition: PhxElectroMagnetic2D.cpp:326
Definition: SourceBase.hpp:22
int use_threads
Definition: PhxElectroMagnetic2D.hpp:33
double dy
Definition: PhxElectroMagnetic2D.hpp:53
double dx
Definition: PhxElectroMagnetic2D.hpp:52
void calculate_detectors_amp_phase() overridefinal
Definition: PhxElectroMagnetic2D.cpp:383
void init_hdf5_files() overridefinal
Definition: PhxElectroMagnetic2D.cpp:333
double lambda_0
Definition: PhxElectroMagnetic2D.hpp:41