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