# -*- coding: utf-8 -*-
#Eksamen i TFY4125 27. mai 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=2)

#1-3: Translasjonskinematikk, O-løper
#v(t) = v0*sin^2(omega*t)
omega = 0.0020  #1/s
v0=np.asarray([7.0,8.0,9.0,10,11,12])  #km/h
print('1-3: v0 = ',v0,' km/h')
#Oppgave 1: Middelfart
#<v> = 0.5*v0
vmiddelSI=v0*0.5/3.6  #m/s
print('1: Middelfart:',vmiddelSI,'m/s')
#Oppgave 2: Avstand mellom postene
#L = <v>*T med T = pi/omega
L = vmiddelSI*np.pi/omega  #m
print('2: Avstand mellom postene:',L/1000,'km')
#Oppgave 3: Maksimal akselerasjon
#a = dv/dt = v0*omega*sin(2*omega*t), dvs
#amax = v0*omega
amax = (v0/3.6)*omega
print('3: Maksimal akselerasjon:',amax*100,'cm/s^2')

#4-6: Rotasjonskine(ma)tikk
#v(t) = v0 (1 - exp(-t/tau))
v0 = np.asarray([11,14,17,20,23,25])
tau = np.asarray([26,23,20,17,14,11])
print('4-6: v0 = ',v0,' m/s')
print('4-6: tau = ',tau,' s')
d = 7.0
r = d/2
t = 60
#Oppgave 4: Maksimal baneakselerasjon
a_bane_max=v0/tau
print('4: Max baneakselerasjon:',a_bane_max,' m/s^2')
#Oppgave 5: Maksimal sentripetalakselerasjon i enheter av g
a_normal_max=v0**2/(g*r)
print('5: Max a_sentripetal:',a_normal_max,' g')
#Oppgave 6: Antall omdreininger på 60 sekunder
phi=(v0/r)*(t-tau+tau*np.exp(-t/tau))
runder=phi/(2*np.pi)
helerunder = runder.astype(int)
print('6: Hele runder på 60 sekunder:',helerunder)

#7-8: Svingkollisjon
#V0 = SQRT(2gL)
#V1 = V0*(M-m)/(M+m)
#v1 = V0*2M/(M+m)
#x2 = L*4M/(M+m)
M=np.asarray([90,85,80,75,70,65])*1E-3
m=np.asarray([25,30,35,40,45,50])*1E-3
print('7-8: M = ',M*1000,' g')
print('7-8: m = ',m*1000,' g')
L=0.50
V0 = np.sqrt(2*g*L)
#Oppgave 7: Fart V1 for M rett etter kollisjon
V1 = V0*(M-m)/(M+m)
print('7: V1 for M etter støt:',V1,' m/s')
#Oppgave 8: Hvor langt x2 kommer m?
x2 = L*4*M/(M+m)
print('8: Flylengde x2 for m:',x2,' m')

#9-11: Bord, trinse, klosser
M=120*1E-3
m=np.asarray([20,30,40,50,60,70])*1E-3
R=0.05
h=np.asarray([0.15,0.20,0.30,0.40,0.50,0.65])
print('9-11: m = ',m*1000,' g')
print('9-11: h = ',h*100,' cm')
#9:Akselerasjon når snora glir uten friksjon
#a = mg/(m+M)
a=m*g/(m+M)
print('9: Akselerasjon for m+M:',a,' m/s^2')
#10: Snordrag på m når snora ikke glir
#N2 trans og rot gir 3 ligninger:
#S = Ma
#mg - s = ma
#(s-S)R = I0 alpha som med alpha = a/R og
#I0 = (1/2) m R^2 gir
#s - S = (1/2) ma
#Løst mhp s får vi
#s = mg*(m/2 + M)/(3m/2 + M)
s = m*g*(m/2 + M)/(3*m/2 + M)
print('10: s når snor ikke glir:',s,' N')
#11: Sluttperiode for trinsa
#Energibevarelse gir
T=2*np.pi*R*np.sqrt((3/4 + M/(2*m))/(g*h))
print('11: Trinsas periode:',T,' s')

#12-15: Snookerkule på snookerbord
V0=np.asarray([33,43,53,63,73,83])*0.01
kollisjonstid=np.asarray([2.0,1.8,1.6,1.4,1.2,1.0])*1E-3
print('12-15: V0 = ',V0*100,' cm/s')
print('12-15: Kollisjonstid = ',kollisjonstid*1000,' ms')
m=0.141
r=0.02625
b=1.778
l=3.556
#12:Støtkraft F=mV/kollisjonstid
F=m*V0/kollisjonstid
print('12: Støtkraft:',F,' N') 
#13:Kinetisk energi K = (7/10)mV^2
K=0.7*m*V0**2
print('13: Kinetisk energi:',K*1E3,' mJ')
#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: Tid fra sluring til ren rulling
#Siden w0*r=V0 med "feil" fortegn, blir
#trull=4*V0/7*my*g
my=0.1
trull=4*V0/(7*my*g)
print('15: Tid mellom sluring og rulling:',trull,' s')

#16-20: Kulerulling på y(x)=y0*cos(kx)
v0=np.asarray([15,25,35,45,55,65])*0.01
y0=np.asarray([30,40,50,60,70,80])*0.001
r=0.01
m=np.asarray([10,20,30,40,50,60])*1E-3
Dy0 = np.asarray([1.5,2.0,3.0,1.5,2.0,2.5])
Dk = np.asarray([2.5,3.0,3.5,3.5,2.0,1.5])
print('16-20: v0 = ',v0*100,' cm/s')
print('16-20: y0 = ',y0*1000,' mm')
print('16-20: m = ',m*1000,' g')
print('16-20: Delta y0/y0 = ',Dy0,' %')
print('16-20: Delta k/k = ',Dk,' %')
k=2*np.pi/0.8
#16:Fart i bunnpunktene
v=np.sqrt(v0**2+20*g*y0/7)
print('16: Fart i bunnpunktene:',v,' m/s')
#17:Normalkraft i topp-punktene
N=m*(g-y0*(v0*k)**2)
print('17: Normalkraft i topp-punktene:',N,' N')
#18: Friksjonskraft i vendepunktene
beta=np.arctan(y0*k)
f=(2/7)*m*g*np.sin(beta)
print('18: Friksjonskraft i vendepunkt:',f*1000,' mN')
#19: Maksimal v_y
x = 0.26
y = y0*np.cos(k*x)
v = np.sqrt(v0**2 + 10*g*(y0-y)/7)
beta=np.arctan(y0*k*np.sin(k*x))
vy = v*np.sin(beta)
print('19: Maksimal vy:',vy,' m/s')
#20: Krumningsradius, relativ usikkerhet
Dy0 = np.asarray([1.5,2.0,3.0,1.5,2.0,2.5])
Dk = np.asarray([2.5,3.0,3.5,3.5,2.0,1.5])
DR = np.sqrt((Dy0)**2 + (2*Dk)**2)
print('20: Delta R/R:',DR,' %')

#Oppgave 21: Tre punktladninger på x-aksen. E(2d)
q=np.asarray([0.271,0.321,0.371,0.421,0.471,0.521])*echarge
d=np.asarray([116.3,114.3,112.3,110.3,108.3,106.3])*1E-12
print('21-22: q = ',q/echarge,' e')
print('21-22: d = ',d*1E12,' pm')
E=k_e*q*11/(18*d*d)
print('21: E(2d)=',E*1E-9,'V/nm')

#Oppgave 22: Tre punktladninger på x-aksen. V(2d)
V=-k_e*q/(3*d)
print('22: V(2d)=',V,'V')

#Oppgave 23: Radius til ekvipotensialflate rundt proton
V_ekvipot=np.asarray([3.0,3.6,4.5,4.8,6.0,7.2])*1E-9
print('23: Ekvipotensial: ',V_ekvipot*1E9,' nV')
radius=k_e*echarge/V_ekvipot
print('23: Radius ekvipot.flate:',radius*100,' cm')

#Oppgave 24: Kondensator med metallskive i midten
Q=np.asarray([20,30,40,50,60,70])*1E-9
print('24: Q = ',Q*1E9,' nC')
dist=0.0030
dplate=0.20
Vkond=2*Q*dist/(3*eps0*np.pi*(dplate/2)**2)
print('24: Spenning mellom plan:',Vkond,' V')

#Oppgave 25: Total kapasitans til fem stk C
#Oppgave 26: Spenning over C i midten
V0=np.asarray([80,92,100,116,140,148])
C=np.asarray([80,72,64,56,48,40])
print('25-26: V0 = ',V0,' V')
print('25-26: C = ',C,' nF')
CTOT=3*C/8
print('25: Total kapasitans:',CTOT,' nF')
Vmidt=2*V0/8
print('26: V over C i midten:',Vmidt,' V')

#Oppgave 27: Total motstand til fem stk R
#Oppgave 28: Spenning over R i midten
V0=np.asarray([44,56,72,80,104,116])
R=np.asarray([30,36,45,51,63,78])
print('27-28: V0 = ',V0,' V')
print('27-28: R = ',R,' Ohm')
RTOT=8*R/3
print('27: Total motstand:',RTOT,' Ohm')
Vmidt=V0/4
print('28: V over R i midten:',Vmidt,' V')

#Oppgave 29-31: DC-krets med R + RC + R
V0=np.asarray([30,40,50,60,70,80])*1E3
R=np.asarray([24,23,22,21,20,19])*1E6
C=np.asarray([1.0,2.0,3.0,4.0,5.0,6.0])*1E-6
print('29-31: V0 = ',V0/1000,' kV')
print('29-31: C = ',C*1E6,' mikroF')
print('29-31: R = ',R*1E-6,' MOhm')
#29: Total strøm etter lang tid
ITOT=V0/(3*R)
print('29: Total strøm:',ITOT*1E3,' mA')
#Oppgave 30: Ladning på C etter lang tid
Q=V0*C/3
print('30: Ladning på C:',Q*1000,' mC')
#Oppgave 31: Total strøm I like etter tilkobling av V0
ISTART=V0/(2*R)
print('31: Total strøm like etter t=0:',ISTART*1E3,' mA')

#Oppgave 32: Tapt energi etter 60 s i oppladet RC-krets
Q0=np.asarray([15,16,17,18,19,20])*1E-3
R=np.asarray([15,16,17,18,19,20])*1E6
C=np.asarray([15,16,17,18,19,20])*1E-6
Ustart=Q0**2/(2*C)
tau=R*C
tslutt=np.asarray([40,50,60,70,80,90])
print('32: Q0 = ',Q0*1E3,' mC')
print('32: R = ',R*1E-6,' MOhm')
print('32: C = ',C*1E6,' mikroF')
print('32: tslutt = ',tslutt,' s')
Utapt=Ustart*(1-np.exp(-2*tslutt/tau))
print('32: Tapt energi ved tslutt:',Utapt,' J')

#33-34
#Oppgave 33: Radius for proton i uniformt B-felt
v_0=np.asarray([4.5,5.5,6.5,7.5,8.5,9.5])*1E5
print('33-34: v0 = ',v_0/10000,' mil/s')
B_0=0.45
v=np.sqrt(13)*v_0
radius=m_p*v/(echarge*B_0)
print('33: Baneradius proton i B-felt:',radius*1000,' mm')
#Oppgave 34: Akselerasjon for proton i uniformt B-felt
aproton=echarge*v*B_0/m_p
print('34: Aks. for proton i B-felt:',aproton*1E-12,' m/mikros^2')

#Oppgave 35: Magnetisk dipolmoment for 6-kantet ledersløyfe
I=np.asarray([12,15,18,21,24,27])
a=np.asarray([12,15,18,21,24,27])*0.01
print('35: I = ',I,' A')
print('35: a = ',a*100,' cm')
magdip=3*np.sqrt(3)*I*a**2/2
print('35: Magnetisk dipolmoment:',magdip,' Am^2')

#Oppgave 36: C og L som gir gitt Q-faktor og f0 for gitt R
#f0=np.asarray([98,98,98])*1E3
#Q=np.asarray([1E3,1E3,1E3])
R=np.asarray([100,150,200,250,300,350])
print('36: R = ',R,' Ohm')
f0=98000
Q=1000
w0=f0*2*np.pi
#L=(Q*R/(2*np.pi*f0))**(2/3)
#C=1/(2*np.pi*f0*Q*Q*R*R)**(2/3)
C=1/(w0*Q*R)
L=Q*R/w0
print('36: C:',C*1E12,' pF')
print('36: L:',L,' H')

#37-39: Svingekrets på resonans
V0=np.asarray([1,2,3,4,5,6])
print('37-39: V0 = ',V0,' V')
R=100
C=1.0E-6
L=0.20
Q0=V0*np.sqrt(L*C)/R
VR0=V0
VC0=Q0/C
VL0=V0*np.sqrt(L/C)/R
print('37: VR0:',VR0,' V')
print('38: VC0:',VC0,' V')
print('39: VL0:',VL0,' V')

#Oppgave 40: Spenning i 3-fase spenningskilde
V0=np.asarray([125,225,325,425,525,625])
print('40: V0 = ',V0,' V')
f=50
w=2*np.pi*f
V310=np.sqrt(3)*V0
print('40: Amplituden til V31:',V310,' V')
