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_DISPERSIVE_H
19 #define OPERATOR_EXT_DISPERSIVE_H
20 
21 //#include "operator.h"
22 #include "operator_extension.h"
23 #include "vector"
24 
25 //! Abstract base class for all dispersive material models, based on an ADE (additional differential equation)
26 class Operator_Ext_Dispersive : public Operator_Extension
27 {
28 	friend class Engine_Ext_Dispersive;
29 public:
30 	virtual ~Operator_Ext_Dispersive();
31 
GetDispersionOrder()32 	virtual int GetDispersionOrder() {return m_Order;}
33 
GetExtensionName()34 	virtual std::string GetExtensionName() const {return std::string("Dispersive Material Abstract Base class");}
35 
36 	virtual void ShowStat(std::ostream &ostr) const;
37 
38 protected:
39 	Operator_Ext_Dispersive(Operator* op);
40 	//! Copy constructor
41 	Operator_Ext_Dispersive(Operator* op, Operator_Ext_Dispersive* op_ext);
42 
43 	//! Dispersive order
44 	int m_Order;
45 
46 	//! Dispersive material count
47 	std::vector<unsigned int> m_LM_Count;
48 	//! Index with dispersive material
49 	// Array setup: m_LM_pos[N_order][direction][mesh_pos]
50 	unsigned int ***m_LM_pos;
51 
52 	bool *m_curr_ADE_On;
53 	bool *m_volt_ADE_On;
54 };
55 
56 #endif // OPERATOR_EXT_DISPERSIVE_H
57