# -*- coding: utf-8 -*-
#Eksamen i TFY4125 9. august 2022

import numpy as np

#Naturkonstanter
echarge=1.6E-19
hbar=1.05E-34
m_e=9.11E-31
m_p=1.67E-27
m_n=1.67E-27
c=3.00E8
h = 2*np.pi*hbar
kB=1.38E-23
u=1.66E-27  #atomær masseenhet i kg
g=9.81  #tyngdens akselerajon m/s^2
eps0=8.85E-12 #vakuumpermittiviteten
my0=4*np.pi*1E-7 #vakuumpermeabiliteten
k_e=9E9 #1/4*pi*eps0

np.set_printoptions(precision=5)

#1-3: Translasjonskinematikk, ørkenvandrer
#v(t) = v0*exp(-alpha*t)
#x(t) = (v0/alpha)*(1-exp(-alpha*t))
#t(x) = (-1/alpha)*ln(1-x*alpha/v0)
#a(t) = -alpha*v0*exp(-alpha*t)
v0=np.asarray([1.4,1.6])  #m/s
alpha=0.000025 #1/s
print('1-3: v0 = ',v0,' m/s')
#Oppgave 1: Max akselerasjon
amax=v0*alpha  #m/s^2
print('1: Max akselerasjon:',amax*1E6,'mikrom/s^2')
#Oppgave 2: Middelfart den første timen
t=3600
vmiddel = (v0/alpha)*(1-np.exp(-alpha*t))/t  #m/s
print('2: Middelfart den første timen:',vmiddel,'m/s')
#Oppgave 3: Ankomsttid oase
xoase=np.asarray([25000,32000]) #m
toase=(-1/alpha)*np.log(1-xoase*alpha/v0)
print('3: Ankomsttid oase:',toase/3600,'timer')

#4-6: Rotasjonskine(ma)tikk
#omega(t) = omega0*(1 - cos(omega0*t))
omega0 = np.asarray([0.15,0.10])
print('4-6: omega0 = ',omega0,' rad/s')
d = 7.0
rper = np.asarray([3.0,2.0])  #m
thele = np.asarray([126,315])  #s
#Oppgave 4: Maksimal vinkalakselerasjon
alphamax = omega0**2
print('4: Max vinkelakselerasjon:',alphamax,' rad/s^2')
#Oppgave 5: Pers maksimale banefart
vmaxper = 2*omega0*rper
print('5: Pers maksimale banefart:',vmaxper,' m/s')
#Oppgave 6: Antall hele runder på thele
phi=omega0*thele-np.sin(omega0*thele)
runder=phi/(2*np.pi)
helerunder = runder.astype(int)
print('6: Hele runder på thele sekunder:',helerunder)

#7-8: Svingkollisjon, fullstendig uelastisk
#V0 = SQRT(2gL)
#V1 = V0*M/(M+m)
#t2 = SQRT(2L/g)
M=np.asarray([80,60])*1E-3
m=np.asarray([40,61])*1E-3
L=np.asarray([60,16])*1E-2
print('7-8: M = ',M*1000,' g')
print('7-8: m = ',m*1000,' g')
print('7-8: L = ',L*100,' cm')
V0 = np.sqrt(2*g*L)
#Oppgave 7: Fart V1 for M+m rett etter kollisjon
V1 = V0*M/(M+m)
print('7: V1 for M+m etter støt:',V1,' m/s')
#Oppgave 8: Tid mellom kollisjon og landing
t2 = np.sqrt(2*L/g)
print('8: Flytid t2 for M+m:',t2,' s')

#9-11: Bord, trinse, klosser
M=90*1E-3
m=np.asarray([40,20])*1E-3  #kg
R=np.asarray([0.075,0.025])  #m
h=0.15 #m
#v=klossenes konstante fart
v=np.asarray([0.25,0.45])  #m/s
print('9-11: m = ',m*1000,' g')
print('9-11: R = ',R*100,' cm')
print('9-11: v = ',v,' m/s')
#9:Kinetisk friksjonskoeff mellom M og bord
myk = m/M
print('9: myk mellom M og bord:',myk)
#10: Snordraget, s = S = mg
s = m*g
print('10: s=S=',s,' N')
#11: Ltot mhp trinsas aksling
Ltot=R*v*(1.5*m+M)
print('11: Ltot mhp trinsas aksling:',Ltot,' Js')

#12-15: Snookerkule på snookerbord
V0=np.asarray([43,57])*0.01  #m/s
F=200 #N
print('12-15: V0 = ',V0*100,' cm/s')
print('12-15: Kollisjonskraft = ',F,' N')
m=0.141
r=0.02625
b=1.778
l=3.556
#12:Støttid kollisjonstid=mV0/F
kollisjonstid=m*V0/F
print('12: Kollisjonstid:',kollisjonstid*1000,' ms') 
#13:Kulas spinn Ls
Ls = (2/5)*m*r*V0
print('13: Kulas spinn:',Ls,' Js')
#14:Fortegn dreieimpulskomponenter
#Ls=I0*w i xy-planet; fortegnene med hh-regel
#Lb=RxMV i z-retning; fortegn med hh-regel
print('14: L1: (0+-) L2: (-+0)  L3: (-0+)')
print('14: L4: (0-+) L5: (+-0)  L6: (+0-)')
#15: Treffhøyde over bordplaten 
#h=3r/5
h=3*r/5
print('15: Treffhøyde:',h*1000,' mm')

#16-20: Kulerulling på y(x)=y0*exp(-alpha*x/L)
v0=0
y0=0.30
r=0.01
L=1.4
m=0.01
alpha=np.asarray([3.0,2.0])
#16:Fart i x=L
vL=np.sqrt(10*g*y0*(1-np.exp(-alpha))/7)
print('16: Fart i x=L:',vL,' m/s')
#17:mys_min for ren rulling fra start
mys_min=2*alpha*y0/(7*L)
print('17: mys_min for ren rulling fra start:',mys_min)
#18: Friksjonskraft i x=L/2
beta=np.arctan(alpha*y0*np.exp(-alpha/2)/L)
f=(2/7)*m*g*np.sin(beta)
print('18: Friksjonskraft i x=L/2:',f*1000,' mN')
#19: Akselerasjon ved x=0
beta0=np.arctan(alpha*y0/L)
a0=(5/7)*g*np.sin(beta0)
print('19: Akselerasjon ved x=0',a0,' m/s^2')
#20: Måleserie for ankomsttid ved x=L
tL = np.asarray([0.53,0.52,0.46,0.47,0.47,0.52,0.57,0.50,0.48,0.55])
tLmiddel=np.sum(tL)/10
print('20: Midlere ankomsttid x=L:',tLmiddel,' s')
deltatL=np.sqrt(np.sum((tL-tLmiddel)**2)/90)
print('20: Standardfeil i midlere ankomsttid x=L:',deltatL,' s')


#Oppgave 21-24: Tre punktladninger på x-aksen.
q=np.asarray([1.0,2.0])*echarge
d=np.asarray([1.0,3.0])*1E-9
print('21-22: q = ',q/echarge,' e')
print('21-22: d = ',d*1E9,' nm')
#21: E i x=d/2
E=(k_e*q/d**2)*(4-8+4/3)
print('21: E(d/2)=',E*1E-9,'GV/m')
#22: V i d/2
V=(k_e*q/d)*(2+4-2)
print('22: V(d/2)=',V,'V')

#Oppgave 23: Sted mellom d og 2d der V=0
x0 = d*(5+np.sqrt(13))/6
print('23: Sted x der V=0: ',x0*1E9,' nm')
#Oppgave 24: Vinkel mellom F og x-aksen
Fx=4/np.sqrt(2)
Fy=4-2/np.sqrt(2)
beta=np.arctan(Fy/Fx)
print('24: Vinkel mellom F og x-aksen:',beta*180/np.pi,' grader')

#Oppgave 25: Spenning over C nede til høyre
#Oppgave 26: Ladning på C oppe til venstre
V0=np.asarray([12,36]) #Volt
C=np.asarray([12,36])  #nF
print('25-26: V0 = ',V0,' V')
print('25-26: C = ',C,' nF')
Vnedhoyre=V0/8
print('25: V nede høyre:',Vnedhoyre,' V')
Qoppvenstre=3*V0*C/8
print('26: Q oppe venstre:',Qoppvenstre,' nC')

#Oppgave 27: Spenning over R nede til høyre
#Oppgave 28: Strøm gjennom R oppe til venstre
V0=np.asarray([12,36])  #Volt
R=np.asarray([12,36])   #Ohm
print('27-28: V0 = ',V0,' V')
print('27-28: R = ',R,' Ohm')
Vhoyrened=V0/8
print('27: V over R ned høyre:',Vhoyrened,' V')
Ioppvenstre=3*V0/(8*R)
print('28: I gjennom R opp venstre:',Ioppvenstre,' A')

#Oppgave 29-32: Enkel RC-krets med oppladet C fra start
Q0=np.asarray([25,40])*1E-3
R=np.asarray([25,40])*1E6
C=np.asarray([25,40])*1E-6
U0=Q0**2/(2*C)
tau=R*C
tslutt=np.asarray([25,40])*60  #sek
I0=Q0/(R*C)
Islutt=I0*np.exp(-tslutt/tau)
t80=(R*C/2)*np.log(5)
print('29: U0 = ',U0,' J')
print('30: I0 = ',I0,' A')
print('31: Islutt = ',Islutt,' A')
print('32: t80 = ',t80,' s')

#33-34
#Oppgave 33: Radius for elektron i uniformt B-felt
v_0=np.asarray([2.5,5.5])*1E5
B_0=np.asarray([0.55,0.25])
radius=m_e*v_0/(echarge*B_0)
print('33: Baneradius elektron i B-felt:',radius*1E6,' mikrom')
#Oppgave 34: Retning kraft på elektron i uniformt B-felt
print('34: I negativ z-retning')

#Oppgave 35-36: Magnetisk dipolmoment for kvadratisk spole
#og maksimalt dreiemoment i uniformt magnetfelt
I=np.asarray([3,5])
a=np.asarray([2.0,4.0])*0.01
N=400
B=0.75
print('35: I = ',I,' A')
print('35: a = ',a*100,' cm')
magdip=N*I*a**2
taumax=N*I*B*a**2
print('35: Magnetisk dipolmoment:',magdip,' Am^2')
print('36: Maksimalt dreiemoment:',taumax,' Nm')


#37-40: Svingekrets
Q0=75E-6
R=0.002
C=np.asarray([1.0,5.0])*1E-6
L=np.asarray([0.20,0.80])
omega0=1/np.sqrt(L*C)
I0=omega0*Q0
print('37: I0:',I0*1E3,' mA')
periode=2*np.pi/omega0
print('38: Halve perioden er ',1000*periode/2,' millisek')
t90=(2*L/R)*np.log(10/9)
print('39: Tid til Imax red til 90%:',t90,' s')
#Tilsvarende tallverdier i dempet mekanisk system:
m=L
k=1/C
b=R
print('40: m=',m,' kg')
print('40: k=',k,' N/m')
print('40: b=',b,' kg/s')