source: trunk/MESOSCALE/LMD_MM_MARS/SIMU/RUN/vert_level_python/levspe.py

Last change on this file was 2087, checked in by mlefevre, 6 years ago

MESOSCALE etas level generation. Surface pressure and scale height as argument

  • Property svn:executable set to *
File size: 1.9 KB
Line 
1#! /usr/bin/env python
2
3
4import numpy as np
5from ppclass import pp
6import ppplot
7from math import *
8import matplotlib.pyplot as plt
9
10param=np.loadtxt('paramlevspe')
11hache=param[0]
12psurf=param[1]
13nlev=param[2]
14altmax=param[3]
15epsilon=param[4]
16elong_cos=param[5]
17
18print nlev, altmax, hache, psurf, epsilon, elong_cos
19
20epsilon = epsilon / (nlev-1) / 100.
21#print, 'epsilon',epsilon
22#
23exposant = np.pi/nlev/elong_cos
24#
25# alpha (plus grand ecart en km) est determine pour que max(altitudes)=altmax
26#
27alpha =  altmax / ( (nlev-1)/2. - np.sin(2.*exposant*(nlev-1))/4./exposant + epsilon*(nlev-1)**2/2. )
28#alpha = 1.02799
29print alpha
30#
31x=np.linspace(0,nlev-1,nlev)
32#exit()
33#print,'x',x
34
35#
36# CALC
37#
38#altitudes = alpha*x/2. - alpha*sin(2.*exposant*x)/4./exposant + epsilon*alpha*x**2/2.
39altitudes = x*alpha/2. - alpha*np.sin(2.*exposant*x)/4./exposant + epsilon*alpha*x**2/2.
40#print altitudes
41
42#print altitudes
43logpressions = np.log(psurf) - altitudes/hache
44pressions=np.exp(logpressions)
45ptop=psurf*np.exp(-altmax/hache)
46#print ptop
47etas=(pressions-ptop)/(psurf-ptop)
48etas[nlev-1]=0.
49#print etas
50press=etas*(psurf-ptop)+ptop
51#print press
52pseudo=10.*np.log(psurf/press)
53#print pseudo
54#diff=pseudo - shift(pseudo,-1) & diff=-diff(0:nlev-2)
55res=[]
56res.append(0)
57for i in range(int(nlev))[1:] :
58        res.append(pseudo[i]-pseudo[i-1])
59#print res
60
61#save etas
62np.savetxt('levels',etas)
63
64plt.figure(figsize=(15, 15))
65plt.subplot(221)
66plt.plot(x, etas)
67plt.xlabel('levels')
68plt.ylabel('etas')
69plt.grid()
70#plt.title('a) NINO3 Sea Surface Temperature (seasonal)')
71#plt.hold(False)
72
73plt.subplot(222)
74plt.plot(x, pseudo)
75plt.xlabel('levels')
76plt.grid()
77plt.ylabel('pseudo-altitude (km)')
78
79plt3 = plt.subplot(223)
80plt.semilogy(x, press)
81plt.xlabel('levels')
82plt.grid()
83plt.ylabel('pression (Pa)')
84
85plt4 = plt.subplot(224)
86plt.plot(x, res)
87plt.xlabel('levels')
88plt.grid()
89plt.ylabel('resolution (km)')
90
91plt.show()
92
93
94
95
96
97
98
99
100
101
Note: See TracBrowser for help on using the repository browser.