1 /*
2 *	Copyright (C) 2010 Thorsten Liebig (Thorsten.Liebig@gmx.de)
3 *
4 *	This program is free software: you can redistribute it and/or modify
5 *	it under the terms of the GNU General Public License as published by
6 *	the Free Software Foundation, either version 3 of the License, or
7 *	(at your option) any later version.
8 *
9 *	This program is distributed in the hope that it will be useful,
10 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
11 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 *	GNU General Public License for more details.
13 *
14 *	You should have received a copy of the GNU General Public License
15 *	along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 */
17 
18 #ifndef OPERATOR_EXT_LORENTZMATERIAL_H
19 #define OPERATOR_EXT_LORENTZMATERIAL_H
20 
21 #include "FDTD/operator.h"
22 #include "operator_ext_dispersive.h"
23 
24 class Operator_Ext_LorentzMaterial : public Operator_Ext_Dispersive
25 {
26 	friend class Engine_Ext_LorentzMaterial;
27 public:
28 	Operator_Ext_LorentzMaterial(Operator* op);
29 	virtual ~Operator_Ext_LorentzMaterial();
30 
31 	virtual Operator_Extension* Clone(Operator* op);
32 
33 	virtual bool BuildExtension();
34 
35 	virtual Engine_Extension* CreateEngineExtention();
36 
IsCylinderCoordsSave(bool closedAlpha,bool R0_included)37 	virtual bool IsCylinderCoordsSave(bool closedAlpha, bool R0_included) const {UNUSED(closedAlpha); UNUSED(R0_included); return true;}
IsCylindricalMultiGridSave(bool child)38 	virtual bool IsCylindricalMultiGridSave(bool child) const {UNUSED(child); return true;}
IsMPISave()39 	virtual bool IsMPISave() const {return true;}
40 
GetExtensionName()41 	virtual string GetExtensionName() const {return string("Drude/Lorentz Dispersive Material Extension");}
42 
43 	virtual void ShowStat(ostream &ostr) const;
44 
45 protected:
46 	//! Copy constructor
47 	Operator_Ext_LorentzMaterial(Operator* op, Operator_Ext_LorentzMaterial* op_ext);
48 
49 	//ADE update coefficients, array setup: coeff[N_order][direction][mesh_pos_index]
50 	FDTD_FLOAT ***v_int_ADE;
51 	FDTD_FLOAT ***v_ext_ADE;
52 	FDTD_FLOAT ***i_int_ADE;
53 	FDTD_FLOAT ***i_ext_ADE;
54 
55 	bool *m_curr_Lor_ADE_On;
56 	bool *m_volt_Lor_ADE_On;
57 
58 	FDTD_FLOAT ***v_Lor_ADE;
59 	FDTD_FLOAT ***i_Lor_ADE;
60 };
61 
62 #endif // OPERATOR_EXT_LORENTZMATERIAL_H
63