#energy functions to illustrate inheritance, Ellen Williams, 12/02/01

from math import *

class Energy:
	#all inputs and outputs in mks units
	g=9.8
	def __init__(self, m=1., v=0., h=0.):
		self.m=m
		self.v=v
		self.h=h
		
	def kin(self):
		ek=0.5*self.m*self.v**2
		return ek
		
	def pe(self):
		pe=self.m*self.g*self.h
		return pe
		
	def tot(self):
		etot=self.pe()+self.kin()
		return etot
		

fall = Energy(m=1., v=3., h=10.)
print fall.m, fall.v, fall.h, fall.g
print "\n"
print  fall.kin(), fall.pe(), fall.tot()
		

class Energycgs(Energy):
	#all inputs and outputs in cgs units
	g=980.
	
fallcgs=Energycgs(m=1000., v=300., h=1000)
print "\n"
print fallcgs.kin(), fallcgs.pe(), fallcgs.tot(), fallcgs.tot()*1e-7

class CGStoMKSEnergy(Energy):
    m=1.
    v=0.
    h=0.
    def __init__(self,mc=1000., vc=0., hc=0.):
        self.mc=mc
        self.vc=vc
        self.hc=hc
    def mks(self):
        self.m=self.mc/1000.
        self.v=self.vc/100.
        self.h=self.hc/100.
        return self

change=CGStoMKSEnergy(mc=1000., vc=300., hc=10000.)

print "\n"
print change.m, change.mc, change.v, change.vc
print change.mks().v
print change.g, change.h, change.pe()

class CGStoMKSEnergy2(Energy):
    mc=1000.
    vc=0.
    hc=0.
    def mks(self):
        self.m=self.mc/1000.
        self.v=self.vc/100.
        self.h=self.hc/100.
        return self

c4=CGStoMKSEnergy2(0,0,0)

print c4.m, c4.mc

c4.mc=3000.
c4.vc=300.
c4.hc=5000.
print c4.v, c4.vc
c4.mks()
print c4.v, c4.vc
print c4.kin(), c4.pe(), c4.tot()



