In [ ]:
%matplotlib inline
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
vs = np.linspace(0.0,1500,100.0);
TDs = np.linspace(0.25,4.0,0.25)
D0 = 100.0e-3
angles = np.linspace(0.0,np.pi*0.5*0.9, 100)
cosAs = np.cos(angles)
lds = np.linspace(1.0,1.0, 100)
rad2deg = 180.0/np.pi
In [ ]:
def area( caliber ):
return np.pi*(caliber*0.5)**2
def projectileMass( L, caliber=100e-3, density=7.8e+3 ):
return area(caliber)*L*density
def kineticEnergy( v, mass ):
return 0.5*mass*v**2
def flatIncidence( v, thickNor, caliber=100e-3, mass=None, density=7.8e+3, strength=2e+9, cShear=0.75, cDisp=1.0, debug=False ):
if mass is None:
mass = projectileMass( caliber*2, caliber=caliber, density=7.8e+3 )
print "mass=", mass
thick = thickNor*caliber
#print "thick=", thick
Ek = kineticEnergy( v, mass )
S = area(caliber)
Sshear = np.pi*caliber*thick*cShear
#print S,Sshear
S = np.minimum(S,Sshear)
Estatic = thick*S*strength
#print Ek,Estatic
displaced_mass = thick*S*density
Edynamic = cDisp * kineticEnergy( v, displaced_mass )
Eout = np.maximum( Ek - Estatic - Edynamic , 0 )
if debug:
plt.plot(vs,Ek*1e-6, label='Ek')
plt.plot(vs,Edynamic*1e-6, label='Edyn')
plt.plot(vs,(Estatic+Ek*0)*1e-6, label='Estat')
plt.plot(vs,Eout*1e-6,'k-',lw=2, label='Eout')
return Eout
projectile_mass = projectileMass( 2*D0, caliber=D0, density=7.8e+3 )
print "projectile mass %g [kg]" %projectile_mass
Eout = flatIncidence( vs, 1.0, caliber=D0, mass = projectile_mass, debug=True )
#plt.plot(vs,Eout*1e-6)
#flatIncidence( vs, projectile_mass, D0, caliber=D0, density=7.8e+3, strength=2e+9, cShear=0.75, cDisp=1.0 )
plt.xlabel("v [m/s]"); plt.ylabel( "E [MJ]" ); plt.legend(loc=2); plt.grid();
In [ ]:
def obiqueIncidence_1( v, thickNor, cosA ):
Eout = flatIncidence( v, thickNor/cosA )
return Eout
#print cosAs
Eout = obiqueIncidence_1( 800.0, 1.0, cosAs )
plt.plot(angles*rad2deg, Eout*1e-6)
plt.xlabel("angle [deg]"); plt.ylabel( "Eout [MJ]" ); plt.legend(loc=4); plt.grid();
In [ ]:
def ricochetAngle_1( v, ld, Yp=2e+9, rho_p=7.8e+3, rho_t=7.8e+3 ):
'''
A simple estimate of the minimum target obliquity required for the ricochet of a high speed long rod projectile
1979 J. Phys. D: Appl. Phys. 12 1825; http://iopscience.iop.org/0022-3727/12/11/011
modified hydrodynamic equation:
rho_p*(Vin-Vout)**2 + Yp = rho_t*Vout**2 + Yt
Vcrit = sqrt( 2*(Rt-Yp)/rho_p )
'''
cDens = 1.0 + np.sqrt(rho_p/rho_t)
#cShape = (l**2+d**2)/(l*d)
cShape = (ld**2 + 1)/(ld*1.0)
print cDens, cShape
rhs = (2.0/3.0)*((rho_p * v**2)/Yp)*cShape*cDens
tanA = rhs**(1.0/3.0)
return np.arctan( tanA )
for ld in [1.0,2.0,3.0,4.0,5.0]:
aCrit = ricochetAngle_1( vs, ld )
plt.plot(vs,aCrit*rad2deg, label=("l/d=%1.1f" %ld) )
plt.xlabel("v [m/s]"); plt.ylabel( "aCrit [deg]" ); plt.legend(loc=4); plt.grid();
In [ ]:
def surfaceDeflection( v, angle, caliber=100e-3, mass=None, strength=2.0e+9 ):
'''
before projectile dent into the target it is accelerated along the surface
'''
tgA = np.tan(angle)
#print tgA
if mass is None:
mass = projectileMass( caliber*2, caliber=caliber, density=7.8e+3 )
print "mass=", mass
tdent = (caliber*tgA)/v
S = area(caliber)
aT = ( strength * S * tgA ) / mass
vT = tdent * aT
#print vT
#vII = np.sqrt( vT )
angle_ = angle + np.arcsin( vT/v )
return angle_
for v in [500,750,1000,1250]:
angles_ = surfaceDeflection( v, angles )
plt.plot( angles*rad2deg, angles_*rad2deg, label=("%1.1f [km/s]" %(v*1e-3)) )
plt.plot(angles*rad2deg,angles*rad2deg,ls='--',c="#808080")
plt.xlabel("alpha [deg]"); plt.ylabel( "beta [deg]" ); plt.legend(loc=4); plt.grid(); #plt.axis('equal')
In [ ]: