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