Quellcode für praktikum.literaturwerte

# -*- coding: utf-8 -*-

"""
Dieses Modul enthält Literaturwerte bzw. Herstellerangaben, die bei der Auswertung im
Grundpraktikum Physik nützlich, aber nicht einfach anders zugänglich sind.
"""

from numpy import exp,sqrt

[Doku]def saettigungsdampfdruck_wasser(t): ''' Näherungsformel nach Magnus für den Sättigungsdampfdruck über einer Wasseroberfläche :param t: Temperatur in °C :type t: float Quelle: https://de.wikipedia.org/wiki/S%C3%A4ttigungsdampfdruck (abgerufen am 4.7.2019) :rtype: Sättigungsdampfdruck in mbar (bzw. hPa) ''' # in mbar=hPa return 6.112 * exp(17.62*t / (243.12 + t))
[Doku]def molare_masse_luft(phi, p, t): ''' Berechung der molaren Masse von (feuchter) Luft :param phi: relative Luftfeuchtigkeit :type phi: float :param p: Luftdruck in mbar :type p: float :param t: Temperatur in °C :type t: float :rtype: Molare Masse der feuchten Luft in g/mol. ''' if phi < 0. or phi > 1.: raise ValueError('Luftfeuchtigkeit muss im Intervall [0,1] liegen!') ML = 28.949 # molare Masse von Luft (g/mol) MW = 18. # molare Masse von Wasser (g/mol) pS = saettigungsdampfdruck_wasser(t) M = phi*(pS/p)*MW + (1.-phi*pS/p)*ML return M
[Doku]def dichte_luft(phi, p, t): ''' Berechung der Dichte von (feuchter) Luft :param phi: relative Luftfeuchtigkeit :type phi: float :param p: Luftdruck in mbar :type p: float :param t: Temperatur in °C :type t: float :rtype: Dichte der feuchten Luft in :math:`kg/m^3`. ''' if phi < 0. or phi > 1.: raise ValueError('Luftfeuchtigkeit muss im Intervall [0,1] liegen!') T = t + 273.15 RL = 287.058 # J/(kg K) RW = 461.523 pS = saettigungsdampfdruck_wasser(t) Rf = RL / (1. - phi*(pS/p) * (1. - RL/RW)) rho = p / (Rf*T) * 1.e2 # mbar -> SI-standard return rho
[Doku]def brechungsindex_luft(lambd, t=20.0, p=1013.25, e=13.33): ''' Berechnung des Brechungsindex von Luft :param lambd: Vakuumwellenlänge der Lichtquelle in :math:`\mu{}m` :param t: Temperatur in °C :param p: Luftdruck in mbar :param e: Wasserdampfpartialdruck (Feuchtigkeit) in mbar Quelle: Kohlrausch, Praktische Physik, 23. Auflage, Band 1, S. 461 Die Formel gilt in guter Näherung im Temperaturbereich von 15 bis 30 °C und im Druckbereich von 933 bis 1067 mbar, außerdem für ein CO2-Volumengehalt von 0,03%. Mit der Formel lassen sich nicht die im Kohlrausch angegebenen beispielhaften Werte für einzelne Wellenlängen reproduzieren. Gleichwohl stimmen die Werte für trockene Luft mit denen überein, die sich nach dem CRC Handbook (78. Auflage, S. 10-259) berechnen lassen (das CRC Handbook gibt keine Formel für feuchte Luft an). :rtype: Brechungsindex der Luft ''' cA = 8.34213e-5 cB = 2.40603e-2 # um^-2 cC = 130. # um^-2 cD = 1.5997e-4 # um^-2 cE = 38.9 # um^-2 sigma2 = 1.0/(lambd**2) nLNm1 = cA + cB/(cC - sigma2) + cD/(cE - sigma2) cAlpha = 3.671e-3 # degC^-1 cBeta = 4.292e-8 # mbar^-1 cGamma = 3.43e-8 # um^2 mbar^-1 t0 = 15.0 # degC p0 = 1013.25 # mbar nLm1 = nLNm1 * (1.0 + cAlpha*t0) / (1.0 + cAlpha*t) * (p/p0) - (cBeta - cGamma*sigma2) * e return 1.0 + nLm1
def n_dryair(lambd, t=20.0, p=1013.25): # CRC Handbook (78th ed, p. 10-259) sigma2 = 1.0/(lambd**2) nm1 = 1.e-8 * (8342.13 + 2406030./(130-sigma2) + 15997./(38.9-sigma2)) pPascal = 100.*p corr = pPascal * (1. + pPascal*(61.3-t)*1.e-10) / (96095.4 * (1.0 + 0.003661*t)) return 1.0 + nm1*corr
[Doku]def n_schott_f2(lambd): ''' Formel für den Brechungsindex des Schott-Glases F2 (Flintglas) Quelle: https://www.schott.com/d/advanced_optics/47d79895-2965-472d-83ed-af9e48ac72c0/1.1/schott-optisches-glas-datenblatt-sammlung-german-17012017.pdf :param lambd: Vakuumwellenlänge der Lichtquelle in :math:`\mu{}m` :rtype: Brechungsindex bei der gegebenen Wellenlänge. ''' B1 = 1.34533359 B2 = 0.209073176 B3 = 0.937357162 C1 = 0.00997743871 C2 = 0.0470450767 C3 = 111.8867640 l2 = lambd**2 nsqrm1 = B1*l2/(l2-C1) + B2*l2/(l2-C2) + B3*l2/(l2-C3) return sqrt(1.0 + nsqrm1)
[Doku]def n_schott_nsf10(lambd): ''' Formel für den Brechungsindex des Schott-Glases N-SF10 (Schwerflintglas) Quelle: https://www.schott.com/d/advanced_optics/47d79895-2965-472d-83ed-af9e48ac72c0/1.1/schott-optisches-glas-datenblatt-sammlung-german-17012017.pdf :param lambd: Vakuumwellenlänge der Lichtquelle in :math:`\mu{}m` :rtype: Brechungsindex bei der gegebenen Wellenlänge. ''' B1 = 1.62153902 B2 = 0.256287842 B3 = 1.644475520 C1 = 0.01222414570 C2 = 0.0595736775 C3 = 147.4687930 l2 = lambd**2 nsqrm1 = B1*l2/(l2-C1) + B2*l2/(l2-C2) + B3*l2/(l2-C3) return sqrt(1.0 + nsqrm1)
[Doku]def schallgeschwindigkeit_luft(T): ''' Näherungsformel für die Schallgeschwindigkeit in Luft Quelle: Wikipedia, https://de.wikipedia.org/wiki/Schallgeschwindigkeit :param T: Temperatur in Kelvin :rtype: Schallgeschwindigkeit in m/s. ''' return sqrt(1.402 * 8.3145 * T / 0.02896)
if __name__ == '__main__': import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.family'] = 'sans-serif' plt.rcParams['font.sans-serif'] = 'Arial' plt.rcParams['font.weight'] = 'bold' plt.rcParams['figure.titleweight'] = 'bold' plt.rcParams['axes.labelsize'] = 'large' plt.rcParams['axes.labelweight'] = 'bold' plt.rcParams['axes.formatter.useoffset'] = 'False' pnorm = 1013.25 tnorm = 22.0 hnorm = 0.5 enorm = hnorm * saettigungsdampfdruck_wasser(tnorm) lambdnorm = 0.632 nnorm = brechungsindex_luft(lambd=lambdnorm, t=tnorm, p=pnorm, e=enorm) nmin = nnorm - 0.000011 nmax = nnorm + 0.00001 #print('H20 Partialdruck = %.3f mbar' % enorm) ylabel = '$n_\mathrm{Luft}$' fig, ax = plt.subplots(2, 2, figsize=(20,10)) lambdas = np.arange(400., 800., 5.) ax[0][0].plot(lambdas, brechungsindex_luft(lambdas/1000., t=tnorm, p=pnorm, e=enorm), 'b-') ax[0][0].set_title(u'Abhängigkeit von der Wellenlänge', fontweight='bold') ax[0][0].set_xlabel('$\lambda$ (nm)') ax[0][0].set_ylabel(ylabel) ax[0][0].set_ylim(nmin, nmax) ts = np.arange(19., 25., 0.1) ax[0][1].plot(ts, brechungsindex_luft(lambdnorm, t=ts, p=pnorm, e=enorm), 'b-') ax[0][1].set_title(u'Temperaturabhängigkeit', fontweight='bold') ax[0][1].set_xlabel(u'$t$ (°C)') ax[0][1].set_ylabel(ylabel) ax[0][1].set_ylim(nmin, nmax) ps = np.arange(980., 1040., 1.) ax[1][0].plot(ps, brechungsindex_luft(lambdnorm, t=tnorm, p=ps, e=enorm), 'b-') ax[1][0].set_title(u'Druckabhängigkeit', fontweight='bold') ax[1][0].set_xlabel('$P$ (mbar)') ax[1][0].set_ylabel(ylabel) ax[1][0].set_ylim(nmin, nmax) hs = np.arange(0., 100.1, 2.) es = saettigungsdampfdruck_wasser(tnorm) * hs/100. ax[1][1].plot(hs, brechungsindex_luft(lambdnorm, t=tnorm, p=pnorm, e=es), 'b-') ax[1][1].set_title(u'Abhängigkeit von der Luftfeuchtigkeit', fontweight='bold') ax[1][1].set_xlabel('rel. Luftfeuchte (%)') ax[1][1].set_ylabel(ylabel) ax[1][1].set_xlim(0., 100.) ax[1][1].set_ylim(nmin, nmax) plt.tight_layout() plt.show()