13 USE netcdf
, ONLY: nf90_nowrite, nf90_open, nf90_inq_varid, nf90_close
21 INTEGER,
PRIVATE,
SAVE :: iguide_read,iguide_int,iguide_sav
22 INTEGER,
PRIVATE,
SAVE :: nlevnc, guide_plevs
23 LOGICAL,
PRIVATE,
SAVE :: guide_u,guide_v,guide_T,guide_Q,guide_P
24 LOGICAL,
PRIVATE,
SAVE :: guide_hr,guide_teta
25 LOGICAL,
PRIVATE,
SAVE :: guide_BL,guide_reg,guide_add,gamma4,guide_zon
26 LOGICAL,
PRIVATE,
SAVE :: invert_p,invert_y,ini_anal
27 LOGICAL,
PRIVATE,
SAVE :: guide_2D,guide_sav,guide_modele
29 REAL,
PRIVATE,
SAVE :: tau_min_u,tau_max_u
30 REAL,
PRIVATE,
SAVE :: tau_min_v,tau_max_v
31 REAL,
PRIVATE,
SAVE :: tau_min_T,tau_max_T
32 REAL,
PRIVATE,
SAVE :: tau_min_Q,tau_max_Q
33 REAL,
PRIVATE,
SAVE :: tau_min_P,tau_max_P
35 REAL,
PRIVATE,
SAVE :: lat_min_g,lat_max_g
36 REAL,
PRIVATE,
SAVE :: lon_min_g,lon_max_g
37 REAL,
PRIVATE,
SAVE :: tau_lon,tau_lat
39 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE,
SAVE :: alpha_u,alpha_v
40 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE,
SAVE :: alpha_T,alpha_Q
41 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE,
SAVE :: alpha_P,alpha_pcor
47 REAL,
ALLOCATABLE,
DIMENSION(:,:,:),
PRIVATE,
SAVE :: unat1,unat2
48 REAL,
ALLOCATABLE,
DIMENSION(:,:,:),
PRIVATE,
SAVE :: vnat1,vnat2
49 REAL,
ALLOCATABLE,
DIMENSION(:,:,:),
PRIVATE,
SAVE :: tnat1,tnat2
50 REAL,
ALLOCATABLE,
DIMENSION(:,:,:),
PRIVATE,
SAVE :: qnat1,qnat2
51 REAL,
ALLOCATABLE,
DIMENSION(:,:,:),
PRIVATE,
SAVE :: pnat1,pnat2
52 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PRIVATE,
SAVE :: psnat1,psnat2
53 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE,
SAVE :: apnc,bpnc
55 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PRIVATE,
SAVE :: ugui1,ugui2
56 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PRIVATE,
SAVE :: vgui1,vgui2
57 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PRIVATE,
SAVE :: tgui1,tgui2
58 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PRIVATE,
SAVE :: qgui1,qgui2
59 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE,
SAVE :: psgui1,psgui2
61 INTEGER,
SAVE,
PRIVATE :: ijb_u,ijb_v,ije_u,ije_v,ijn_u,ijn_v
62 INTEGER,
SAVE,
PRIVATE :: jjb_u,jjb_v,jje_u,jje_v,jjn_u,jjn_v
73 include
"dimensions.h"
77 INTEGER :: error,ncidpl,rid,rcod
78 CHARACTER (len = 80) :: abort_message
79 CHARACTER (len = 20) :: modname =
'guide_init'
85 CALL
getpar(
'guide_u',.true.,guide_u,
'guidage de u')
86 CALL
getpar(
'guide_v',.true.,guide_v,
'guidage de v')
87 CALL
getpar(
'guide_T',.true.,guide_t,
'guidage de T')
88 CALL
getpar(
'guide_P',.true.,guide_p,
'guidage de P')
89 CALL
getpar(
'guide_Q',.true.,guide_q,
'guidage de Q')
90 CALL
getpar(
'guide_hr',.true.,guide_hr,
'guidage de Q par H.R')
91 CALL
getpar(
'guide_teta',.
false.,guide_teta,
'guidage de T par Teta')
93 CALL
getpar(
'guide_add',.
false.,guide_add,
'for�age constant?')
94 CALL
getpar(
'guide_zon',.
false.,guide_zon,
'guidage moy zonale')
97 CALL
getpar(
'tau_min_u',0.02,tau_min_u,
'Cste de rappel min, u')
98 CALL
getpar(
'tau_max_u', 10.,tau_max_u,
'Cste de rappel max, u')
99 CALL
getpar(
'tau_min_v',0.02,tau_min_v,
'Cste de rappel min, v')
100 CALL
getpar(
'tau_max_v', 10.,tau_max_v,
'Cste de rappel max, v')
101 CALL
getpar(
'tau_min_T',0.02,tau_min_t,
'Cste de rappel min, T')
102 CALL
getpar(
'tau_max_T', 10.,tau_max_t,
'Cste de rappel max, T')
103 CALL
getpar(
'tau_min_Q',0.02,tau_min_q,
'Cste de rappel min, Q')
104 CALL
getpar(
'tau_max_Q', 10.,tau_max_q,
'Cste de rappel max, Q')
105 CALL
getpar(
'tau_min_P',0.02,tau_min_p,
'Cste de rappel min, P')
106 CALL
getpar(
'tau_max_P', 10.,tau_max_p,
'Cste de rappel max, P')
107 CALL
getpar(
'gamma4',.
false.,gamma4,
'Zone sans rappel elargie')
108 CALL
getpar(
'guide_BL',.true.,guide_bl,
'guidage dans C.Lim')
111 CALL
getpar(
'guide_sav',.
false.,guide_sav,
'sauvegarde guidage')
112 CALL
getpar(
'iguide_sav',4,iguide_sav,
'freq. sauvegarde guidage')
114 IF (iguide_sav.GT.0)
THEN
115 iguide_sav=day_step/iguide_sav
117 iguide_sav=day_step*iguide_sav
121 CALL
getpar(
'guide_reg',.
false.,guide_reg,
'guidage regional')
122 CALL
getpar(
'lat_min_g',-90.,lat_min_g,
'Latitude mini guidage ')
123 CALL
getpar(
'lat_max_g', 90.,lat_max_g,
'Latitude maxi guidage ')
124 CALL
getpar(
'lon_min_g',-180.,lon_min_g,
'longitude mini guidage ')
125 CALL
getpar(
'lon_max_g', 180.,lon_max_g,
'longitude maxi guidage ')
126 CALL
getpar(
'tau_lat', 5.,tau_lat,
'raideur lat guide regional ')
127 CALL
getpar(
'tau_lon', 5.,tau_lon,
'raideur lon guide regional ')
130 CALL
getpar(
'iguide_read',4,iguide_read,
'freq. lecture guidage')
131 CALL
getpar(
'iguide_int',4,iguide_int,
'freq. interpolation vert')
132 IF (iguide_int.EQ.0)
THEN
134 ELSEIF (iguide_int.GT.0)
THEN
135 iguide_int=day_step/iguide_int
137 iguide_int=day_step*iguide_int
139 CALL
getpar(
'guide_plevs',0,guide_plevs,
'niveaux pression fichiers guidage')
141 CALL
getpar(
'guide_modele',.
false.,guide_modele,
'niveaux pression ap+bp*psol')
142 IF (guide_modele)
THEN
146 CALL
getpar(
'ini_anal',.
false.,ini_anal,
'Etat initial = analyse')
147 CALL
getpar(
'guide_invertp',.true.,invert_p,
'niveaux p inverses')
148 CALL
getpar(
'guide_inverty',.true.,invert_y,
'inversion N-S')
149 CALL
getpar(
'guide_2D',.
false.,guide_2d,
'fichier guidage lat-P')
156 if (guide_plevs.EQ.1)
then
157 if (ncidpl.eq.-99) rcod=nf90_open(
'apbp.nc',nf90_nowrite, ncidpl)
158 elseif (guide_plevs.EQ.2)
then
159 if (ncidpl.EQ.-99) rcod=nf90_open(
'P.nc',nf90_nowrite,ncidpl)
160 elseif (guide_u)
then
161 if (ncidpl.eq.-99) rcod=nf90_open(
'u.nc',nf90_nowrite,ncidpl)
162 elseif (guide_v)
then
163 if (ncidpl.eq.-99) rcod=nf90_open(
'v.nc',nf90_nowrite,ncidpl)
164 elseif (guide_t)
then
165 if (ncidpl.eq.-99) rcod=nf90_open(
'T.nc',nf90_nowrite,ncidpl)
166 elseif (guide_q)
then
167 if (ncidpl.eq.-99) rcod=nf90_open(
'hur.nc',nf90_nowrite, ncidpl)
169 error=nf_inq_dimid(ncidpl,
'LEVEL',rid)
170 IF (error.NE.nf_noerr) error=nf_inq_dimid(ncidpl,
'PRESSURE',rid)
171 IF (error.NE.nf_noerr)
THEN
172 print *,
'Guide: probleme lecture niveaux pression'
175 error=nf_inq_dimlen(ncidpl,rid,nlevnc)
176 print *,
'Guide: nombre niveaux vert. nlevnc', nlevnc
177 rcod = nf90_close(ncidpl)
182 abort_message=
'pb in allocation guide'
184 ALLOCATE(apnc(nlevnc), stat = error)
185 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
186 ALLOCATE(bpnc(nlevnc), stat = error)
187 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
190 ALLOCATE(alpha_pcor(llm), stat = error)
191 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
192 ALLOCATE(alpha_u(
ip1jmp1), stat = error)
193 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
194 ALLOCATE(alpha_v(
ip1jm), stat = error)
195 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
196 ALLOCATE(alpha_t(
ip1jmp1), stat = error)
197 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
198 ALLOCATE(alpha_q(
ip1jmp1), stat = error)
199 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
200 ALLOCATE(alpha_p(
ip1jmp1), stat = error)
201 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
202 alpha_u=0.;alpha_v=0;alpha_t=0;alpha_q=0;alpha_p=0
205 ALLOCATE(unat1(iip1,
jjp1,nlevnc), stat = error)
206 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
207 ALLOCATE(ugui1(
ip1jmp1,llm), stat = error)
208 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
209 ALLOCATE(unat2(iip1,
jjp1,nlevnc), stat = error)
210 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
211 ALLOCATE(ugui2(
ip1jmp1,llm), stat = error)
212 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
213 unat1=0.;unat2=0.;ugui1=0.;ugui2=0.
217 ALLOCATE(tnat1(iip1,
jjp1,nlevnc), stat = error)
218 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
219 ALLOCATE(tgui1(
ip1jmp1,llm), stat = error)
220 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
221 ALLOCATE(tnat2(iip1,
jjp1,nlevnc), stat = error)
222 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
223 ALLOCATE(tgui2(
ip1jmp1,llm), stat = error)
224 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
225 tnat1=0.;tnat2=0.;tgui1=0.;tgui2=0.
229 ALLOCATE(qnat1(iip1,
jjp1,nlevnc), stat = error)
230 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
231 ALLOCATE(qgui1(
ip1jmp1,llm), stat = error)
232 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
233 ALLOCATE(qnat2(iip1,
jjp1,nlevnc), stat = error)
234 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
235 ALLOCATE(qgui2(
ip1jmp1,llm), stat = error)
236 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
237 qnat1=0.;qnat2=0.;qgui1=0.;qgui2=0.
241 ALLOCATE(vnat1(iip1,jjm,nlevnc), stat = error)
242 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
243 ALLOCATE(vgui1(
ip1jm,llm), stat = error)
244 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
245 ALLOCATE(vnat2(iip1,jjm,nlevnc), stat = error)
246 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
247 ALLOCATE(vgui2(
ip1jm,llm), stat = error)
248 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
249 vnat1=0.;vnat2=0.;vgui1=0.;vgui2=0.
252 IF (guide_plevs.EQ.2)
THEN
253 ALLOCATE(pnat1(iip1,
jjp1,nlevnc), stat = error)
254 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
255 ALLOCATE(pnat2(iip1,
jjp1,nlevnc), stat = error)
256 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
260 IF (guide_p.OR.guide_plevs.EQ.1)
THEN
261 ALLOCATE(psnat1(iip1,
jjp1), stat = error)
262 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
263 ALLOCATE(psnat2(iip1,
jjp1), stat = error)
264 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
268 ALLOCATE(psgui2(
ip1jmp1), stat = error)
269 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
270 ALLOCATE(psgui1(
ip1jmp1), stat = error)
271 IF (error /= 0) CALL
abort_gcm(modname,abort_message,1)
283 IF (guide_v) vnat1=vnat2
284 IF (guide_u) unat1=unat2
285 IF (guide_t) tnat1=tnat2
286 IF (guide_q) qnat1=qnat2
287 IF (guide_plevs.EQ.2) pnat1=pnat2
288 IF (guide_p.OR.guide_plevs.EQ.1) psnat1=psnat2
299 include
"dimensions.h"
305 INTEGER,
INTENT(IN) :: itau
306 REAL,
DIMENSION (ip1jmp1,llm),
INTENT(INOUT) :: ucov,
teta,
q,masse
307 REAL,
DIMENSION (ip1jm,llm),
INTENT(INOUT) :: vcov
308 REAL,
DIMENSION (ip1jmp1),
INTENT(INOUT) :: ps
311 LOGICAL,
SAVE :: first=.true.
313 REAL,
DIMENSION (ip1jmp1,llm) :: f_add
315 REAL,
DIMENSION (iip1,jjp1,llm) :: pk, pkf
316 REAL,
DIMENSION (iip1,jjp1,llm) ::
alpha,
beta
317 REAL,
DIMENSION (iip1,jjp1) :: pks
319 REAL,
DIMENSION (ip1jmp1,llmp1) :: p
321 INTEGER,
SAVE :: step_rea,count_no_rea,itau_test
322 REAL :: ditau, dday_step
328 ijb_u=ij_begin ; ije_u=ij_end ; ijn_u=ije_u-ijb_u+1
329 jjb_u=jj_begin ; jje_u=jj_end ; jjn_u=jje_u-jjb_u+1
330 ijb_v=ij_begin ; ije_v=ij_end ; ijn_v=ije_v-ijb_v+1
331 jjb_v=jj_begin ; jje_v=jj_end ; jjn_v=jje_v-jjb_v+1
339 print *,
'---> on rentre dans guide_main'
358 call
tau2alpha(3,iip1,jjm ,factt,tau_min_v,tau_max_v,alpha_v)
359 call
tau2alpha(2,iip1,
jjp1,factt,tau_min_u,tau_max_u,alpha_u)
360 call
tau2alpha(1,iip1,
jjp1,factt,tau_min_t,tau_max_t,alpha_t)
361 call
tau2alpha(1,iip1,
jjp1,factt,tau_min_p,tau_max_p,alpha_p)
362 call
tau2alpha(1,iip1,
jjp1,factt,tau_min_q,tau_max_q,alpha_q)
374 IF (guide_u) ucov(ijb_u:ije_u,:)=ugui2(ijb_u:ije_u,:)
375 IF (guide_v) vcov(ijb_v:ije_v,:)=ugui2(ijb_v:ije_v,:)
376 IF (guide_t)
teta(ijb_u:ije_u,:)=tgui2(ijb_u:ije_u,:)
377 IF (guide_q)
q(ijb_u:ije_u,:)=qgui2(ijb_u:ije_u,:)
379 ps(ijb_u:ije_u)=psgui2(ijb_u:ije_u)
400 IF (iguide_read.NE.0)
THEN
402 dday_step=
real(day_step)
403 IF (iguide_read.LT.0)
THEN
404 tau=ditau/dday_step/
REAL(iguide_read)
406 tau=
REAL(iguide_read)*ditau/dday_step
409 IF (reste.EQ.0.)
THEN
410 IF (itau_test.EQ.itau)
THEN
411 write(*,*)
'deuxieme passage de advreel a itau=',itau
414 IF (guide_v) vnat1(:,jjb_v:jje_v,:)=vnat2(:,jjb_v:jje_v,:)
415 IF (guide_u) unat1(:,jjb_u:jje_u,:)=unat2(:,jjb_u:jje_u,:)
416 IF (guide_t) tnat1(:,jjb_u:jje_u,:)=tnat2(:,jjb_u:jje_u,:)
417 IF (guide_q) qnat1(:,jjb_u:jje_u,:)=qnat2(:,jjb_u:jje_u,:)
418 IF (guide_plevs.EQ.2) pnat1(:,jjb_u:jje_u,:)=pnat2(:,jjb_u:jje_u,:)
419 IF (guide_p.OR.guide_plevs.EQ.1) psnat1(:,jjb_u:jje_u)=psnat2(:,jjb_u:jje_u)
422 print*,
'Lecture fichiers guidage, pas ',step_rea, &
423 'apres ',count_no_rea,
' non lectures'
432 count_no_rea=count_no_rea+1
440 IF (mod(itau,iguide_int).EQ.0)
THEN
444 IF (iguide_read.NE.0)
THEN
454 f_out=((mod(itau,iguide_sav).EQ.0).AND.guide_sav)
458 if (pressure_exner)
then
476 f_add(ijb_u:ije_u,:)=(1.-
tau)*ugui1(ijb_u:ije_u,:)+
tau*ugui2(ijb_u:ije_u,:)
478 f_add(ijb_u:ije_u,:)=(1.-
tau)*ugui1(ijb_u:ije_u,:)+
tau*ugui2(ijb_u:ije_u,:)-ucov(ijb_u:ije_u,:)
484 ucov(ijb_u:ije_u,:)=ucov(ijb_u:ije_u,:)+f_add(ijb_u:ije_u,:)
489 f_add(ijb_u:ije_u,:)=(1.-
tau)*tgui1(ijb_u:ije_u,:)+
tau*tgui2(ijb_u:ije_u,:)
491 f_add(ijb_u:ije_u,:)=(1.-
tau)*tgui1(ijb_u:ije_u,:)+
tau*tgui2(ijb_u:ije_u,:)-
teta(ijb_u:ije_u,:)
496 teta(ijb_u:ije_u,:)=
teta(ijb_u:ije_u,:)+f_add(ijb_u:ije_u,:)
501 f_add(ijb_u:ije_u,1)=(1.-
tau)*psgui1(ijb_u:ije_u)+
tau*psgui2(ijb_u:ije_u)
503 f_add(ijb_u:ije_u,1)=(1.-
tau)*psgui1(ijb_u:ije_u)+
tau*psgui2(ijb_u:ije_u)-ps(ijb_u:ije_u)
508 ps(ijb_u:ije_u)=ps(ijb_u:ije_u)+f_add(ijb_u:ije_u,1)
515 f_add(ijb_u:ije_u,:)=(1.-
tau)*qgui1(ijb_u:ije_u,:)+
tau*qgui2(ijb_u:ije_u,:)
517 f_add(ijb_u:ije_u,:)=(1.-
tau)*qgui1(ijb_u:ije_u,:)+
tau*qgui2(ijb_u:ije_u,:)-
q(ijb_u:ije_u,:)
522 q(ijb_u:ije_u,:)=
q(ijb_u:ije_u,:)+f_add(ijb_u:ije_u,:)
527 f_add(ijb_v:ije_v,:)=(1.-
tau)*vgui1(ijb_v:ije_v,:)+
tau*vgui2(ijb_v:ije_v,:)
529 f_add(ijb_v:ije_v,:)=(1.-
tau)*vgui1(ijb_v:ije_v,:)+
tau*vgui2(ijb_v:ije_v,:)-vcov(ijb_v:ije_v,:)
535 vcov(ijb_v:ije_v,:)=vcov(ijb_v:ije_v,:)+f_add(ijb_v:ije_v,:)
545 include
"dimensions.h"
549 INTEGER,
INTENT(IN) :: hsize
550 INTEGER,
INTENT(IN) :: vsize
551 REAL,
DIMENSION(hsize),
INTENT(IN) ::
alpha
552 REAL,
DIMENSION(hsize,vsize),
INTENT(INOUT) :: field
557 IF (hsize==
ip1jm)
THEN
559 field(ijb_v:ije_v,
l)=
alpha(ijb_v:ije_v)*field(ijb_v:ije_v,
l)*alpha_pcor(
l)
563 field(ijb_u:ije_u,
l)=
alpha(ijb_u:ije_u)*field(ijb_u:ije_u,
l)*alpha_pcor(
l)
574 include
"dimensions.h"
580 INTEGER,
INTENT(IN) :: typ
581 INTEGER,
INTENT(IN) :: vsize
582 INTEGER,
INTENT(IN) :: hsize
583 REAL,
DIMENSION(hsize*iip1,vsize),
INTENT(INOUT) :: field
586 LOGICAL,
SAVE :: first=.true.
587 INTEGER,
DIMENSION (2),
SAVE :: imin, imax
589 REAL,
DIMENSION (iip1) :: lond
590 REAL,
DIMENSION (hsize,vsize):: fieldm
596 imin(1)=1;imax(1)=iip1;
597 imin(2)=1;imax(2)=iip1;
600 IF (lond(
i).LT.lon_min_g) imin(1)=
i
601 IF (lond(
i).LE.lon_max_g) imax(1)=
i
605 IF (lond(
i).LT.lon_min_g) imin(2)=
i
606 IF (lond(
i).LE.lon_max_g) imax(2)=
i
617 DO i=imin(typ),imax(typ)
619 fieldm(
j,
l)=fieldm(
j,
l)+field(
ij,
l)
622 fieldm(:,
l)=fieldm(:,
l)/
REAL(imax(typ)-imin(typ)+1)
627 field(
ij,
l)=fieldm(
j,
l)
635 DO i=imin(typ),imax(typ)
637 fieldm(
j,
l)=fieldm(
j,
l)+field(
ij,
l)
640 fieldm(:,
l)=fieldm(:,
l)/
REAL(imax(typ)-imin(typ)+1)
645 field(
ij,
l)=fieldm(
j,
l)
660 include
"dimensions.h"
666 REAL,
DIMENSION (iip1,jjp1),
INTENT(IN) :: psi
667 REAL,
DIMENSION (iip1,jjp1,llm),
INTENT(IN) ::
teta
669 LOGICAL,
SAVE :: first=.true.
671 REAL,
DIMENSION (iip1,jjp1,nlevnc) :: plnc1,plnc2
672 REAL,
DIMENSION (iip1,jjp1,llm) :: plunc,plsnc
673 REAL,
DIMENSION (iip1,jjm,llm) :: plvnc
674 REAL,
DIMENSION (iip1,jjp1,llmp1) :: p
675 REAL,
DIMENSION (iip1,jjp1,llm) :: pls, pext
676 REAL,
DIMENSION (iip1,jjp1,llm) :: pbarx
677 REAL,
DIMENSION (iip1,jjm,llm) :: pbary
679 REAL,
DIMENSION (iip1,jjp1,llm) :: pk, pkf
680 REAL,
DIMENSION (iip1,jjp1,llm) ::
alpha,
beta
681 REAL,
DIMENSION (iip1,jjp1) :: pks
684 REAL,
DIMENSION (ip1jmp1,llm) :: qsat
686 REAL,
DIMENSION (iip1,jjp1,llm) :: zu1,zu2
687 REAL,
DIMENSION (iip1,jjm,llm) :: zv1,zv2
692 print *,
'Guide: conversion variables guidage'
696 IF (guide_plevs.EQ.0)
THEN
709 print*,
'Guide: verification ordre niveaux verticaux'
712 print*,
'PL(',
l,
')=',(
ap(
l)+
ap(
l+1))/2. &
713 +psi(1,jje_u)*(
bp(
l)+
bp(
l+1))/2.
715 print*,
'Fichiers guidage'
716 SELECT CASE (guide_plevs)
719 print*,
'PL(',
l,
')=',plnc2(1,jjb_u,
l)
723 print*,
'PL(',
l,
')=',apnc(
l)+bpnc(
l)*psnat2(
i,jjb_u)
727 print*,
'PL(',
l,
')=',pnat2(1,jjb_u,
l)
730 print *,
'inversion de l''ordre: invert_p=',invert_p
733 print*,
'U(',
l,
')=',unat2(1,jjb_u,
l)
738 print*,
'T(',
l,
')=',tnat2(1,jjb_u,
l)
748 IF (guide_plevs.EQ.1)
THEN
758 if (pressure_exner)
then
811 psgui1(
ij)=psnat1(
i,
j)
812 psgui2(
ij)=psnat2(
i,
j)
814 psgui1(iip1*
j)=psnat1(1,
j)
815 psgui2(iip1*
j)=psnat2(1,
j)
821 IF (guide_plevs.EQ.1)
THEN
825 plnc2(
i,
j,
l)=apnc(
l)+bpnc(
l)*psnat2(
i,
j)
826 plnc1(
i,
j,
l)=apnc(
l)+bpnc(
l)*psnat1(
i,
j)
830 ELSE IF (guide_plevs.EQ.2)
THEN
842 CALL
pres2lev(tnat1(:,jjb_u:jje_u,:),zu1(:,jjb_u:jje_u,:),nlevnc,llm, &
843 plnc1(:,jjb_u:jje_u,:),plsnc(:,jjb_u:jje_u,:),iip1,jjn_u,invert_p)
844 CALL
pres2lev(tnat2(:,jjb_u:jje_u,:),zu2(:,jjb_u:jje_u,:),nlevnc,llm, &
845 plnc2(:,jjb_u:jje_u,:),plsnc(:,jjb_u:jje_u,:),iip1,jjn_u,invert_p)
863 tgui1(
j*iip1,
l)=tgui1((
j-1)*iip1+1,
l)
864 tgui2(
j*iip1,
l)=tgui2((
j-1)*iip1+1,
l)
867 tgui1(
i,
l)=tgui1(1,
l)
869 tgui2(
i,
l)=tgui2(1,
l)
877 IF (guide_plevs.EQ.1)
THEN
881 plnc2(
i,
j,
l)=apnc(
l)+bpnc(
l)*psnat2(
i,
j)
882 plnc1(
i,
j,
l)=apnc(
l)+bpnc(
l)*psnat1(
i,
j)
886 ELSE IF (guide_plevs.EQ.2)
THEN
898 CALL
pres2lev(qnat1(:,jjb_u:jje_u,:),zu1(:,jjb_u:jje_u,:),nlevnc,llm, &
899 plnc1(:,jjb_u:jje_u,:),plsnc(:,jjb_u:jje_u,:),iip1,jjn_u,invert_p)
900 CALL
pres2lev(qnat2(:,jjb_u:jje_u,:),zu2(:,jjb_u:jje_u,:),nlevnc,llm, &
901 plnc2(:,jjb_u:jje_u,:),plsnc(:,jjb_u:jje_u,:),iip1,jjn_u,invert_p)
913 qgui1(
j*iip1,
l)=qgui1((
j-1)*iip1+1,
l)
914 qgui2(
j*iip1,
l)=qgui2((
j-1)*iip1+1,
l)
917 qgui1(
i,
l)=qgui1(1,
l)
919 qgui2(
i,
l)=qgui2(1,
l)
924 CALL
q_sat(iip1*jjn_u*llm,
teta(:,jjb_u:jje_u,:)*pk(:,jjb_u:jje_u,:)/
cpp, &
925 plsnc(:,jjb_u:jje_u,:),qsat(ijb_u:ije_u,:))
926 qgui1(ijb_u:ije_u,:)=qgui1(ijb_u:ije_u,:)*qsat(ijb_u:ije_u,:)*0.01
927 qgui2(ijb_u:ije_u,:)=qgui2(ijb_u:ije_u,:)*qsat(ijb_u:ije_u,:)*0.01
933 IF (guide_plevs.EQ.1)
THEN
942 plnc2(iip1,
j,
l)=plnc2(1,
j,
l)
943 plnc1(iip1,
j,
l)=plnc1(1,
j,
l)
946 ELSE IF (guide_plevs.EQ.2)
THEN
955 plnc2(iip1,
j,
l)=plnc2(1,
j,
l)
956 plnc1(iip1,
j,
l)=plnc1(1,
j,
l)
962 CALL
pres2lev(unat1(:,jjb_u:jje_u,:),zu1(:,jjb_u:jje_u,:),nlevnc,llm, &
963 plnc1(:,jjb_u:jje_u,:),plunc(:,jjb_u:jje_u,:),iip1,jjn_u,invert_p)
964 CALL
pres2lev(unat2(:,jjb_u:jje_u,:),zu2(:,jjb_u:jje_u,:),nlevnc,llm, &
965 plnc2(:,jjb_u:jje_u,:),plunc(:,jjb_u:jje_u,:),iip1,jjn_u,invert_p)
975 ugui1(
j*iip1,
l)=ugui1((
j-1)*iip1+1,
l)
976 ugui2(
j*iip1,
l)=ugui2((
j-1)*iip1+1,
l)
989 IF (guide_plevs.EQ.1)
THEN
1006 ELSE IF (guide_plevs.EQ.2)
THEN
1025 CALL
pres2lev(vnat1(:,jjb_v:jje_v,:),zv1(:,jjb_v:jje_v,:),nlevnc,llm, &
1026 plnc1(:,jjb_v:jje_v,:),plvnc(:,jjb_v:jje_v,:),iip1,jjn_v,invert_p)
1027 CALL
pres2lev(vnat2(:,jjb_v:jje_v,:),zv2(:,jjb_v:jje_v,:),nlevnc,llm, &
1028 plnc2(:,jjb_v:jje_v,:),plvnc(:,jjb_v:jje_v,:),iip1,jjn_v,invert_p)
1037 vgui1(
j*iip1,
l)=vgui1((
j-1)*iip1+1,
l)
1038 vgui2(
j*iip1,
l)=vgui2((
j-1)*iip1+1,
l)
1053 include
"dimensions.h"
1055 include
"comconst.h"
1056 include
"comgeom2.h"
1060 INTEGER,
INTENT(IN) :: typ
1061 INTEGER,
INTENT(IN) :: pim,pjm
1062 REAL,
INTENT(IN) :: factt
1063 REAL,
INTENT(IN) :: taumin,taumax
1065 REAL,
DIMENSION(pim,pjm),
INTENT(OUT) ::
alpha
1068 LOGICAL,
SAVE :: first=.true.
1069 REAL,
SAVE ::
gamma,dxdy_min,dxdy_max
1070 REAL,
DIMENSION (iip1,jjp1) :: zdx,zdy
1071 REAL,
DIMENSION (iip1,jjp1) :: dxdys,dxdyu
1072 REAL,
DIMENSION (iip1,jjm) :: dxdyv
1075 real alphamin,alphamax,xi
1076 integer i,
j,ilon,ilat
1079 alphamin=factt/taumax
1080 alphamax=factt/taumin
1081 IF (guide_reg.OR.guide_add)
THEN
1092 elseif (typ.eq.1)
then
1095 elseif (typ.eq.3)
then
1100 (1.+tanh((zlat-lat_min_g)/tau_lat))* &
1101 (1.+tanh((lat_max_g-zlat)/tau_lat))* &
1102 (1.+tanh((zlon-lon_min_g)/tau_lon))* &
1103 (1.+tanh((lon_max_g-zlon)/tau_lon))
1116 zdx(1,
j)=zdx(iip1,
j)
1131 dxdys(
i,
j)=sqrt(zdx(
i,
j)*zdx(
i,
j)+zdy(
i,
j)*zdy(
i,
j))
1137 dxdyu(
i,
j)=0.5*(dxdys(
i,
j)+dxdys(
i+1,
j))
1139 dxdyu(iip1,
j)=dxdyu(1,
j)
1145 dxdyv(
i,
j)=0.5*(dxdys(
i,
j)+dxdys(
i,
j+1))
1155 dxdy_min=dxdys(ilon,ilat)
1160 dxdy_max=max(dxdy_max,dxdys(
i,
j))
1165 print*,
'ATTENTION modele peu zoome'
1166 print*,
'ATTENTION on prend une constante de guidage cste'
1169 gamma=(dxdy_max-2.*dxdy_min)/(dxdy_max-dxdy_min)
1170 print*,
'gamma=',
gamma
1171 if (
gamma.lt.1.e-5)
then
1172 print*,
'gamma =',
gamma,
'<1e-5'
1179 print*,
'gamma=',
gamma
1188 elseif (typ.eq.2)
then
1191 elseif (typ.eq.3)
then
1199 xi=((dxdy_max-dxdy_)/(dxdy_max-dxdy_min))**
gamma
1201 if(lat_min_g.le.zlat .and. zlat.le.lat_max_g)
then
1202 alpha(
i,
j)=xi*alphamin+(1.-xi)*alphamax
1218 #include "netcdf.inc"
1219 #include "dimensions.h"
1220 #include "paramet.h"
1224 LOGICAL,
SAVE :: first=.true.
1226 INTEGER,
SAVE :: ncidu,varidu,ncidv,varidv,ncidp,varidp
1227 INTEGER,
SAVE :: ncidq,varidq,ncidt,varidt,ncidps,varidps
1228 INTEGER :: ncidpl,varidpl,varidap,varidbp
1230 INTEGER,
DIMENSION(4) :: start,count
1231 INTEGER :: status,rcode
1238 print*,
'Guide: ouverture des fichiers guidage '
1240 if (guide_plevs.EQ.1)
then
1241 print *,
'Lecture du guidage sur niveaux modele'
1242 rcode = nf90_open(
'apbp.nc', nf90_nowrite, ncidpl)
1243 rcode = nf90_inq_varid(ncidpl,
'AP', varidap)
1244 rcode = nf90_inq_varid(ncidpl,
'BP', varidbp)
1245 print*,
'ncidpl,varidap',ncidpl,varidap
1248 if (guide_plevs.EQ.2)
then
1249 rcode = nf90_open(
'P.nc', nf90_nowrite, ncidp)
1250 rcode = nf90_inq_varid(ncidp,
'PRES', varidp)
1251 print*,
'ncidp,varidp',ncidp,varidp
1252 if (ncidpl.eq.-99) ncidpl=ncidp
1256 rcode = nf90_open(
'u.nc', nf90_nowrite, ncidu)
1257 rcode = nf90_inq_varid(ncidu,
'UWND', varidu)
1258 print*,
'ncidu,varidu',ncidu,varidu
1259 if (ncidpl.eq.-99) ncidpl=ncidu
1263 rcode = nf90_open(
'v.nc', nf90_nowrite, ncidv)
1264 rcode = nf90_inq_varid(ncidv,
'VWND', varidv)
1265 print*,
'ncidv,varidv',ncidv,varidv
1266 if (ncidpl.eq.-99) ncidpl=ncidv
1270 rcode = nf90_open(
'T.nc', nf90_nowrite, ncidt)
1271 rcode = nf90_inq_varid(ncidt,
'AIR', varidt)
1272 print*,
'ncidT,varidT',ncidt,varidt
1273 if (ncidpl.eq.-99) ncidpl=ncidt
1277 rcode = nf90_open(
'hur.nc', nf90_nowrite, ncidq)
1278 rcode = nf90_inq_varid(ncidq,
'RH', varidq)
1279 print*,
'ncidQ,varidQ',ncidq,varidq
1280 if (ncidpl.eq.-99) ncidpl=ncidq
1283 if ((guide_p).OR.(guide_plevs.EQ.1))
then
1284 rcode = nf90_open(
'ps.nc', nf90_nowrite, ncidps)
1285 rcode = nf90_inq_varid(ncidps,
'SP', varidps)
1286 print*,
'ncidps,varidps',ncidps,varidps
1289 if (guide_plevs.EQ.0)
then
1290 rcode = nf90_inq_varid(ncidpl,
'LEVEL', varidpl)
1291 IF (rcode.NE.0) rcode = nf90_inq_varid(ncidpl,
'PRESSURE', varidpl)
1292 print*,
'ncidpl,varidpl',ncidpl,varidpl
1295 IF (guide_plevs.EQ.1)
THEN
1297 status=nf_get_vara_double(ncidpl,varidap,1,nlevnc,apnc)
1298 status=nf_get_vara_double(ncidpl,varidbp,1,nlevnc,bpnc)
1300 status=nf_get_vara_real(ncidpl,varidap,1,nlevnc,apnc)
1301 status=nf_get_vara_real(ncidpl,varidbp,1,nlevnc,bpnc)
1303 ELSEIF (guide_plevs.EQ.0)
THEN
1305 status=nf_get_vara_double(ncidpl,varidpl,1,nlevnc,apnc)
1307 status=nf_get_vara_real(ncidpl,varidpl,1,nlevnc,apnc)
1331 if (guide_plevs.EQ.2)
then
1333 status=nf_get_vara_double(ncidp,varidp,start,count,pnat2)
1335 status=nf_get_vara_real(ncidp,varidp,start,count,pnat2)
1345 status=nf_get_vara_double(ncidu,varidu,start,count,unat2)
1347 status=nf_get_vara_real(ncidu,varidu,start,count,unat2)
1358 status=nf_get_vara_double(ncidt,varidt,start,count,tnat2)
1360 status=nf_get_vara_real(ncidt,varidt,start,count,tnat2)
1370 status=nf_get_vara_double(ncidq,varidq,start,count,qnat2)
1372 status=nf_get_vara_real(ncidq,varidq,start,count,qnat2)
1384 status=nf_get_vara_double(ncidv,varidv,start,count,vnat2)
1386 status=nf_get_vara_real(ncidv,varidv,start,count,vnat2)
1394 if ((guide_p).OR.(guide_plevs.EQ.1))
then
1401 status=nf_get_vara_double(ncidps,varidps,start,count,psnat2)
1403 status=nf_get_vara_real(ncidps,varidps,start,count,psnat2)
1417 #include "netcdf.inc"
1418 #include "dimensions.h"
1419 #include "paramet.h"
1423 LOGICAL,
SAVE :: first=.true.
1425 INTEGER,
SAVE :: ncidu,varidu,ncidv,varidv,ncidp,varidp
1426 INTEGER,
SAVE :: ncidq,varidq,ncidt,varidt,ncidps,varidps
1427 INTEGER :: ncidpl,varidpl,varidap,varidbp
1429 INTEGER,
DIMENSION(4) :: start,count
1430 INTEGER :: status,rcode
1432 REAL,
DIMENSION (jjp1,llm) :: zu
1433 REAL,
DIMENSION (jjm,llm) ::
zv
1441 print*,
'Guide: ouverture des fichiers guidage '
1443 if (guide_plevs.EQ.1)
then
1444 print *,
'Lecture du guidage sur niveaux mod�le'
1445 rcode = nf90_open(
'apbp.nc', nf90_nowrite, ncidpl)
1446 rcode = nf90_inq_varid(ncidpl,
'AP', varidap)
1447 rcode = nf90_inq_varid(ncidpl,
'BP', varidbp)
1448 print*,
'ncidpl,varidap',ncidpl,varidap
1451 if (guide_plevs.EQ.2)
then
1452 rcode = nf90_open(
'P.nc', nf90_nowrite, ncidp)
1453 rcode = nf90_inq_varid(ncidp,
'PRES', varidp)
1454 print*,
'ncidp,varidp',ncidp,varidp
1455 if (ncidpl.eq.-99) ncidpl=ncidp
1459 rcode = nf90_open(
'u.nc', nf90_nowrite, ncidu)
1460 rcode = nf90_inq_varid(ncidu,
'UWND', varidu)
1461 print*,
'ncidu,varidu',ncidu,varidu
1462 if (ncidpl.eq.-99) ncidpl=ncidu
1466 rcode = nf90_open(
'v.nc', nf90_nowrite, ncidv)
1467 rcode = nf90_inq_varid(ncidv,
'VWND', varidv)
1468 print*,
'ncidv,varidv',ncidv,varidv
1469 if (ncidpl.eq.-99) ncidpl=ncidv
1473 rcode = nf90_open(
'T.nc', nf90_nowrite, ncidt)
1474 rcode = nf90_inq_varid(ncidt,
'AIR', varidt)
1475 print*,
'ncidT,varidT',ncidt,varidt
1476 if (ncidpl.eq.-99) ncidpl=ncidt
1480 rcode = nf90_open(
'hur.nc', nf90_nowrite, ncidq)
1481 rcode = nf90_inq_varid(ncidq,
'RH', varidq)
1482 print*,
'ncidQ,varidQ',ncidq,varidq
1483 if (ncidpl.eq.-99) ncidpl=ncidq
1486 if ((guide_p).OR.(guide_plevs.EQ.1))
then
1487 rcode = nf90_open(
'ps.nc', nf90_nowrite, ncidps)
1488 rcode = nf90_inq_varid(ncidps,
'SP', varidps)
1489 print*,
'ncidps,varidps',ncidps,varidps
1492 if (guide_plevs.EQ.0)
then
1493 rcode = nf90_inq_varid(ncidpl,
'LEVEL', varidpl)
1494 IF (rcode.NE.0) rcode = nf90_inq_varid(ncidpl,
'PRESSURE', varidpl)
1495 print*,
'ncidpl,varidpl',ncidpl,varidpl
1498 if (guide_plevs.EQ.1)
then
1500 status=nf_get_vara_double(ncidpl,varidap,1,nlevnc,apnc)
1501 status=nf_get_vara_double(ncidpl,varidbp,1,nlevnc,bpnc)
1503 status=nf_get_vara_real(ncidpl,varidap,1,nlevnc,apnc)
1504 status=nf_get_vara_real(ncidpl,varidbp,1,nlevnc,bpnc)
1506 elseif (guide_plevs.EQ.0)
THEN
1508 status=nf_get_vara_double(ncidpl,varidpl,1,nlevnc,apnc)
1510 status=nf_get_vara_real(ncidpl,varidpl,1,nlevnc,apnc)
1534 if (guide_plevs.EQ.2)
then
1536 status=nf_get_vara_double(ncidp,varidp,start,count,zu)
1538 status=nf_get_vara_real(ncidp,varidp,start,count,zu)
1541 pnat2(
i,:,:)=zu(:,:)
1551 status=nf_get_vara_double(ncidu,varidu,start,count,zu)
1553 status=nf_get_vara_real(ncidu,varidu,start,count,zu)
1556 unat2(
i,:,:)=zu(:,:)
1567 status=nf_get_vara_double(ncidt,varidt,start,count,zu)
1569 status=nf_get_vara_real(ncidt,varidt,start,count,zu)
1572 tnat2(
i,:,:)=zu(:,:)
1583 status=nf_get_vara_double(ncidq,varidq,start,count,zu)
1585 status=nf_get_vara_real(ncidq,varidq,start,count,zu)
1588 qnat2(
i,:,:)=zu(:,:)
1600 status=nf_get_vara_double(ncidv,varidv,start,count,
zv)
1602 status=nf_get_vara_real(ncidv,varidv,start,count,
zv)
1605 vnat2(
i,:,:)=
zv(:,:)
1614 if ((guide_p).OR.(guide_plevs.EQ.1))
then
1621 status=nf_get_vara_double(ncidps,varidps,start,count,zu(:,1))
1623 status=nf_get_vara_real(ncidps,varidps,start,count,zu(:,1))
1641 include
"dimensions.h"
1643 include
"netcdf.inc"
1644 include
"comgeom2.h"
1645 include
"comconst.h"
1649 CHARACTER,
INTENT(IN) :: varname
1650 INTEGER,
INTENT (IN) :: hsize,vsize
1651 REAL,
DIMENSION (iip1,hsize,vsize),
INTENT(IN) :: field
1652 REAL,
INTENT (IN) :: factt
1657 INTEGER :: nid, id_lonu, id_lonv, id_latu, id_latv, id_tim, id_lev
1658 INTEGER :: vid_lonu,vid_lonv,vid_latu,vid_latv,vid_cu,vid_cv,vid_lev
1659 INTEGER,
DIMENSION (3) :: dim3
1660 INTEGER,
DIMENSION (4) :: dim4,count,start
1661 INTEGER :: ierr, varid
1665 IF (mpi_rank /= 0)
RETURN
1667 print *,
'Guide: output timestep',
timestep,
'var ',varname
1673 ierr=nf_create(
"guide_ins.nc",nf_clobber,nid)
1675 ierr=nf_def_dim(nid,
"LONU",iip1,id_lonu)
1676 ierr=nf_def_dim(nid,
"LONV",iip1,id_lonv)
1677 ierr=nf_def_dim(nid,
"LATU",
jjp1,id_latu)
1678 ierr=nf_def_dim(nid,
"LATV",jjm,id_latv)
1679 ierr=nf_def_dim(nid,
"LEVEL",llm,id_lev)
1680 ierr=nf_def_dim(nid,
"TIME",nf_unlimited,id_tim)
1683 ierr=nf_def_var(nid,
"LONU",nf_float,1,id_lonu,vid_lonu)
1684 ierr=nf_def_var(nid,
"LONV",nf_float,1,id_lonv,vid_lonv)
1685 ierr=nf_def_var(nid,
"LATU",nf_float,1,id_latu,vid_latu)
1686 ierr=nf_def_var(nid,
"LATV",nf_float,1,id_latv,vid_latv)
1687 ierr=nf_def_var(nid,
"LEVEL",nf_float,1,id_lev,vid_lev)
1688 ierr=nf_def_var(nid,
"cu",nf_float,2,(/id_lonu,id_latu/),vid_cu)
1689 ierr=nf_def_var(nid,
"cv",nf_float,2,(/id_lonv,id_latv/),vid_cv)
1695 ierr = nf_put_var_double(nid,vid_lonu,
rlonu*180./
pi)
1696 ierr = nf_put_var_double(nid,vid_lonv,
rlonv*180./
pi)
1697 ierr = nf_put_var_double(nid,vid_latu,
rlatu*180./
pi)
1698 ierr = nf_put_var_double(nid,vid_latv,
rlatv*180./
pi)
1699 ierr = nf_put_var_double(nid,vid_lev,
presnivs)
1700 ierr = nf_put_var_double(nid,vid_cu,
cu)
1701 ierr = nf_put_var_double(nid,vid_cv,
cv)
1703 ierr = nf_put_var_real(nid,vid_lonu,
rlonu*180./
pi)
1704 ierr = nf_put_var_real(nid,vid_lonv,
rlonv*180./
pi)
1705 ierr = nf_put_var_real(nid,vid_latu,
rlatu*180./
pi)
1706 ierr = nf_put_var_real(nid,vid_latv,
rlatv*180./
pi)
1707 ierr = nf_put_var_real(nid,vid_lev,
presnivs)
1708 ierr = nf_put_var_real(nid,vid_cu,
cu)
1709 ierr = nf_put_var_real(nid,vid_cv,
cv)
1714 ierr = nf_redef(nid)
1716 dim4=(/id_lonv,id_latu,id_lev,id_tim/)
1717 ierr = nf_def_var(nid,
"P",nf_float,4,dim4,varid)
1720 dim3=(/id_lonv,id_latu,id_tim/)
1721 ierr = nf_def_var(nid,
"ps",nf_float,3,dim3,varid)
1725 dim4=(/id_lonu,id_latu,id_lev,id_tim/)
1726 ierr = nf_def_var(nid,
"ucov",nf_float,4,dim4,varid)
1730 dim4=(/id_lonv,id_latv,id_lev,id_tim/)
1731 ierr = nf_def_var(nid,
"vcov",nf_float,4,dim4,varid)
1735 dim4=(/id_lonv,id_latu,id_lev,id_tim/)
1736 ierr = nf_def_var(nid,
"teta",nf_float,4,dim4,varid)
1740 dim4=(/id_lonv,id_latu,id_lev,id_tim/)
1741 ierr = nf_def_var(nid,
"q",nf_float,4,dim4,varid)
1744 ierr = nf_enddef(nid)
1745 ierr = nf_close(nid)
1752 ierr=nf_open(
"guide_ins.nc",nf_write,nid)
1754 SELECT CASE (varname)
1757 ierr = nf_inq_varid(nid,
"P",varid)
1759 count=(/iip1,
jjp1,llm,1/)
1761 ierr = nf_put_vara_double(nid,varid,start,count,field)
1763 ierr = nf_put_vara_real(nid,varid,start,count,field)
1766 ierr = nf_inq_varid(nid,
"ps",varid)
1768 count=(/iip1,
jjp1,1,0/)
1770 ierr = nf_put_vara_double(nid,varid,start,count,field/factt)
1772 ierr = nf_put_vara_real(nid,varid,start,count,field/factt)
1775 ierr = nf_inq_varid(nid,
"ucov",varid)
1777 count=(/iip1,
jjp1,llm,1/)
1779 ierr = nf_put_vara_double(nid,varid,start,count,field/factt)
1781 ierr = nf_put_vara_real(nid,varid,start,count,field/factt)
1784 ierr = nf_inq_varid(nid,
"vcov",varid)
1786 count=(/iip1,jjm,llm,1/)
1788 ierr = nf_put_vara_double(nid,varid,start,count,field/factt)
1790 ierr = nf_put_vara_real(nid,varid,start,count,field/factt)
1793 ierr = nf_inq_varid(nid,
"teta",varid)
1795 count=(/iip1,
jjp1,llm,1/)
1797 ierr = nf_put_vara_double(nid,varid,start,count,field/factt)
1799 ierr = nf_put_vara_real(nid,varid,start,count,field/factt)
1802 ierr = nf_inq_varid(nid,
"q",varid)
1804 count=(/iip1,
jjp1,llm,1/)
1806 ierr = nf_put_vara_double(nid,varid,start,count,field/factt)
1808 ierr = nf_put_vara_real(nid,varid,start,count,field/factt)
1812 ierr = nf_close(nid)
1826 if(abs(
x(
i,
l)).gt.1.e10)
then
1827 zz=0.5*(
x(
i-1,
l)+
x(
i+1,
l))
1828 print*,
'correction ',
i,
l,
x(
i,
l),zz