1 | ;+ |
---|
2 | ; |
---|
3 | ; |
---|
4 | ; .. program:: fig_mld |
---|
5 | ; |
---|
6 | ; =========== |
---|
7 | ; fig_mld.pro |
---|
8 | ; =========== |
---|
9 | ; |
---|
10 | ; main POMME project program |
---|
11 | ; |
---|
12 | ; - read the 2 mld models :file:`${POMME_ID}/noeddy_mld.nc` and :file:`${POMME_ID}/eddy_mld.nc` |
---|
13 | ; - read mld insitu data and metadata |
---|
14 | ; - compute daily mean insitu mld data |
---|
15 | ; - compute daily mean modeled data in boxes of 1/2° and 1/4° around insitu measurement |
---|
16 | ; location |
---|
17 | ; - plot ++ |
---|
18 | ; |
---|
19 | ; :examples: |
---|
20 | ; |
---|
21 | ; :: |
---|
22 | ; |
---|
23 | ; IDL> fig_mld |
---|
24 | ; IDL> exit |
---|
25 | ; |
---|
26 | ; :uses: |
---|
27 | ; |
---|
28 | ; :func:`read_ncdf` |
---|
29 | ; :func:`julday` |
---|
30 | ; :func:`pltt` |
---|
31 | ; :func:`moyenne` |
---|
32 | ; :func:`domdef` |
---|
33 | ; |
---|
34 | ; :ref:`init_pom.pro` |
---|
35 | ; :func:`file_prn_to_mem` |
---|
36 | ; :func:`file_asc_to_mem` |
---|
37 | ; :func:`dmean_mld` |
---|
38 | ; :func:`join_dmean_asc` |
---|
39 | ; |
---|
40 | ; :todo: |
---|
41 | ; |
---|
42 | ; make it work |
---|
43 | ; |
---|
44 | ; consolidate |
---|
45 | ; |
---|
46 | ; delta array of 2 : .5 1 |
---|
47 | ; |
---|
48 | ; noter dans la doc data que l'axe des temps des fichiers modeles est incorrect |
---|
49 | ; |
---|
50 | ; :history: |
---|
51 | ; |
---|
52 | ; - fplod 20101129T151939Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
53 | ; |
---|
54 | ; * use http://www.dfanning.com/math_tips/nans.html to test *equality* to NaN |
---|
55 | ; |
---|
56 | ; - fplod 20101129T130822Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
57 | ; |
---|
58 | ; * add reading of insitu MLD data files and associated |
---|
59 | ; * use the right filenames for models |
---|
60 | ; * complete header |
---|
61 | ; |
---|
62 | ; - fplod 20101125T145638Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
63 | ; |
---|
64 | ; * add ReST minimal header |
---|
65 | ; |
---|
66 | ; - marina 20101125T130000Z |
---|
67 | ; |
---|
68 | ; * creation draft |
---|
69 | ; |
---|
70 | ; |
---|
71 | ;- |
---|
72 | PRO fig_mld |
---|
73 | ; |
---|
74 | compile_opt idl2, strictarrsubs |
---|
75 | ; |
---|
76 | @init_pom |
---|
77 | ; |
---|
78 | ; read MLD in model files |
---|
79 | mldm = -read_ncdf('mld', 0, 383, /timestep, file=iodir+'eddy_mld.nc', /nostruct) |
---|
80 | mldr = -read_ncdf('mld', 0, 383, /timestep, file=iodir+'noeddy_mld.nc', /nostruct) |
---|
81 | ; |
---|
82 | time=julday(09,27,2000)+dindgen(jpt) |
---|
83 | ; |
---|
84 | ; plot modeled MLD |
---|
85 | ;openps, 'fig_mld.ps' ++ |
---|
86 | pltt, mldm , box=[-22,-16, 38, 44], 't', -200, 0, color = 70, title = 'MLD' |
---|
87 | pltt, mldr , box=[-22,-16, 38, 44], 't', color = 220, /ov1d |
---|
88 | ;closeps |
---|
89 | ; |
---|
90 | ; read MLD in insitu files and metafiles |
---|
91 | data_asc=file_asc_to_mem() |
---|
92 | data_prn=file_prn_to_mem() |
---|
93 | data_dmean=dmean_mld(data_prn) |
---|
94 | data_insitu=join_dmean_asc(data_dmean,data_asc) |
---|
95 | ; |
---|
96 | ; calcul du temps des données insitu avec comme 0 le 20000927 |
---|
97 | time_insitu=julday(1,1,2001) - julday(09,27,2000) - 1 + data_insitu.doy |
---|
98 | ; |
---|
99 | ; build compatible insitu arrays with models arrays |
---|
100 | ndays = n_elements(time) |
---|
101 | mld1 = findgen(ndays) |
---|
102 | mld2 = findgen(ndays) |
---|
103 | mld3 = findgen(ndays) |
---|
104 | mld4 = findgen(ndays) |
---|
105 | mld5 = findgen(ndays) |
---|
106 | xlon = findgen(ndays) |
---|
107 | ylat = findgen(ndays) |
---|
108 | FOR iday=0, ndays - 1 DO BEGIN |
---|
109 | indice_insitu=WHERE(time_insitu EQ iday,count) |
---|
110 | IF (count EQ 0) THEN BEGIN |
---|
111 | print, '1 ', iday, ' no insitu data' |
---|
112 | mld1[iday] = !VALUES.F_NAN |
---|
113 | mld2[iday] = !VALUES.F_NAN |
---|
114 | mld3[iday] = !VALUES.F_NAN |
---|
115 | mld4[iday] = !VALUES.F_NAN |
---|
116 | mld5[iday] = !VALUES.F_NAN |
---|
117 | xlon[iday] = !VALUES.F_NAN |
---|
118 | ylat[iday] = !VALUES.F_NAN |
---|
119 | ENDIF ELSE BEGIN |
---|
120 | print, '2 ', iday, ' 1 insitu data' |
---|
121 | mld1[iday] = data_insitu[indice_insitu].mean_zhom001 |
---|
122 | mld2[iday] = data_insitu[indice_insitu].mean_zhom002 |
---|
123 | mld3[iday] = data_insitu[indice_insitu].mean_zhom005 |
---|
124 | mld4[iday] = data_insitu[indice_insitu].mean_zhom010 |
---|
125 | mld5[iday] = data_insitu[indice_insitu].mean_zhomelch |
---|
126 | xlon[iday] = data_insitu[indice_insitu].lon |
---|
127 | ylat[iday] = data_insitu[indice_insitu].lat |
---|
128 | ENDELSE |
---|
129 | ENDFOR |
---|
130 | ; |
---|
131 | ; plot insitu daily mean MLD ++ |
---|
132 | ; |
---|
133 | ; compute mean of modeled MLD in box around lat,lon insitu data |
---|
134 | mymldm = findgen(2,ndays) |
---|
135 | mymldr = findgen(2,ndays) |
---|
136 | myvarm = findgen(2,ndays) |
---|
137 | myvarr = findgen(2,ndays) |
---|
138 | ; |
---|
139 | ; define the size of the box |
---|
140 | delta=findgen(2) |
---|
141 | delta[0] = 0.5 |
---|
142 | delta[1] = 1. |
---|
143 | ; |
---|
144 | ; loop on idelta ++ |
---|
145 | idelta = 0 |
---|
146 | ; |
---|
147 | ; loop on days |
---|
148 | FOR iday=0, ndays - 1 DO BEGIN |
---|
149 | print, ' 0 iday mld1 xlon', iday, mld1[iday], xlon[iday] |
---|
150 | IF (finite(mld1[iday]) NE 0) THEN BEGIN |
---|
151 | print, ' 3 ', iday, ' insitu data' |
---|
152 | print, ' 3a ', iday, xlon[iday] |
---|
153 | domdef |
---|
154 | mybox = [ xlon[iday]-delta[idelta] $ |
---|
155 | , xlon[iday]+delta[idelta] $ |
---|
156 | , ylat[iday]-delta[idelta] $ |
---|
157 | , ylat[iday]+delta[idelta] $ |
---|
158 | ] |
---|
159 | help, mybox |
---|
160 | print, mybox |
---|
161 | |
---|
162 | ; ++ verifier que la moyenne est bien faite dans la boite et pas dans tout le domaine |
---|
163 | mldm_box = reform(read_ncdf('mld', iday, /timestep, file=iodir+'eddy_mld.nc', /nostruct, box = mybox)) |
---|
164 | mldr_box = reform(read_ncdf('mld', iday, /timestep, file=iodir+'noeddy_mld.nc', /nostruct, box = mybox)) |
---|
165 | |
---|
166 | mymldm[idelta,iday] = moyenne(mldm_box, box = mybox, 'xy') |
---|
167 | mymldr[idelta,iday] = moyenne(mldr_box, box = mybox, 'xy') |
---|
168 | myvarm[idelta,iday] = stddev(mldm) |
---|
169 | myvarr[idelta,iday] = stddev(mldr) |
---|
170 | ENDIF ELSE BEGIN |
---|
171 | print, '4 ',iday, ' no insitu data' |
---|
172 | mymldm[idelta,iday] = !VALUES.F_NAN |
---|
173 | mymldr[idelta,iday] = !VALUES.F_NAN |
---|
174 | myvarm[idelta,iday] = !VALUES.F_NAN |
---|
175 | myvarr[idelta,iday] = !VALUES.F_NAN |
---|
176 | ENDELSE |
---|
177 | ENDFOR |
---|
178 | ; |
---|
179 | ;write, jt, xlon, ylat, mld1, mld2, mld3, mld4, mld5, mymldm, mymldr,myvarm, myvarr,mymldm[1], mymldr[1],myvarm[1], myvarr[1] |
---|
180 | END |
---|