/***************************************************************************
 *   Copyright (C) 2005 by David Saxton                                    *
 *   david@bluehaze.org                                                    *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 ***************************************************************************/

#ifndef INDUCTANCE_H
#define INDUCTANCE_H

#include "reactive.h"

/**

@author David Saxton
*/
class Inductance : public Reactive
{
	public:
		enum Method
		{
			m_none, // None
			m_euler, // Backward Euler
			m_trap // Trapezoidal (currently unimplemented)
		};
		Inductance( double capacitance, double delta );
		virtual ~Inductance();
	
		virtual Type type() const { return Element_Inductance; }
		/**
		 * Set the stepping use for numerical integration of inductance, and the
		 * interval between successive updates.
		 */
		void setMethod( Method m );
		virtual void time_step();
		virtual void add_initial_dc();
		void setInductance( double i );
		virtual void add_map();
	
	protected:
		virtual void updateCurrents();
		virtual bool updateStatus();
	
	private:
		double m_inductance; // Inductance
		Method m_method; // Method of integration
		
		double r_eq_old;
		double v_eq_old;
};

#endif
