18 #include "dimensions.h"
27 #include "description.h"
42 REAL tab_cntrl(length)
45 character*80 abort_message
49 INTEGER dims2(2), dims3(3), dims4(4)
51 INTEGER idim_rlonu, idim_rlonv, idim_rlatu, idim_rlatv
52 INTEGER idim_s, idim_sig
57 INTEGER yyears0,jjour0, mmois0
66 call ju2ymds(
zjulian, yyears0, mmois0, jjour0, hours)
77 tab_cntrl(1) =
REAL(
iim)
78 tab_cntrl(2) =
REAL(jjm)
79 tab_cntrl(3) =
REAL(llm)
118 IF( ysinus ) tab_cntrl(27) = 1.
121 tab_cntrl(30) =
REAL(iday_end)
130 ierr = nf_create(fichnom, nf_clobber, nid)
131 IF (ierr.NE.nf_noerr)
THEN
132 write(
lunout,*)
"dynredem0: Pb d ouverture du fichier "
134 write(
lunout,*)
' ierr = ', ierr
140 ierr = nf_put_att_text(nid, nf_global,
"title", 27,
141 .
"Fichier demmarage dynamique")
145 ierr = nf_def_dim(nid,
"index", length, idim_index)
146 ierr = nf_def_dim(nid,
"rlonu", iip1, idim_rlonu)
147 ierr = nf_def_dim(nid,
"rlatu",
jjp1, idim_rlatu)
148 ierr = nf_def_dim(nid,
"rlonv", iip1, idim_rlonv)
149 ierr = nf_def_dim(nid,
"rlatv", jjm, idim_rlatv)
150 ierr = nf_def_dim(nid,
"sigs", llm, idim_s)
151 ierr = nf_def_dim(nid,
"sig",
llmp1, idim_sig)
152 ierr = nf_def_dim(nid,
"temps", nf_unlimited, idim_tim)
154 ierr = nf_enddef(nid)
161 ierr = nf_def_var(nid,
"controle",nf_double,1,idim_index,nvarid)
163 ierr = nf_def_var(nid,
"controle",nf_float,1,idim_index,nvarid)
166 ierr = nf_put_att_text(nid, nvarid,
"title", 22,
167 .
"Parametres de controle")
168 ierr = nf_enddef(nid)
169 call nf95_put_var(nid,nvarid,tab_cntrl)
174 ierr = nf_def_var(nid,
"rlonu",nf_double,1,idim_rlonu,nvarid)
176 ierr = nf_def_var(nid,
"rlonu",nf_float,1,idim_rlonu,nvarid)
179 ierr = nf_put_att_text(nid, nvarid,
"title", 23,
180 .
"Longitudes des points U")
181 ierr = nf_enddef(nid)
182 call nf95_put_var(nid,nvarid,
rlonu)
187 ierr = nf_def_var(nid,
"rlatu",nf_double,1,idim_rlatu,nvarid)
189 ierr = nf_def_var(nid,
"rlatu",nf_float,1,idim_rlatu,nvarid)
192 ierr = nf_put_att_text(nid, nvarid,
"title", 22,
193 .
"Latitudes des points U")
194 ierr = nf_enddef(nid)
195 call nf95_put_var(nid,nvarid,
rlatu)
200 ierr = nf_def_var(nid,
"rlonv",nf_double,1,idim_rlonv,nvarid)
202 ierr = nf_def_var(nid,
"rlonv",nf_float,1,idim_rlonv,nvarid)
205 ierr = nf_put_att_text(nid, nvarid,
"title", 23,
206 .
"Longitudes des points V")
207 ierr = nf_enddef(nid)
208 call nf95_put_var(nid,nvarid,
rlonv)
213 ierr = nf_def_var(nid,
"rlatv",nf_double,1,idim_rlatv,nvarid)
215 ierr = nf_def_var(nid,
"rlatv",nf_float,1,idim_rlatv,nvarid)
218 ierr = nf_put_att_text(nid, nvarid,
"title", 22,
219 .
"Latitudes des points V")
220 ierr = nf_enddef(nid)
221 call nf95_put_var(nid,nvarid,
rlatv)
226 ierr = nf_def_var(nid,
"nivsigs",nf_double,1,idim_s,nvarid)
228 ierr = nf_def_var(nid,
"nivsigs",nf_float,1,idim_s,nvarid)
231 ierr = nf_put_att_text(nid, nvarid,
"title", 28,
232 .
"Numero naturel des couches s")
233 ierr = nf_enddef(nid)
234 call nf95_put_var(nid,nvarid,
nivsigs)
239 ierr = nf_def_var(nid,
"nivsig",nf_double,1,idim_sig,nvarid)
241 ierr = nf_def_var(nid,
"nivsig",nf_float,1,idim_sig,nvarid)
244 ierr = nf_put_att_text(nid, nvarid,
"title", 32,
245 .
"Numero naturel des couches sigma")
246 ierr = nf_enddef(nid)
247 call nf95_put_var(nid,nvarid,
nivsig)
252 ierr = nf_def_var(nid,
"ap",nf_double,1,idim_sig,nvarid)
254 ierr = nf_def_var(nid,
"ap",nf_float,1,idim_sig,nvarid)
257 ierr = nf_put_att_text(nid, nvarid,
"title", 26,
258 .
"Coefficient A pour hybride")
259 ierr = nf_enddef(nid)
260 call nf95_put_var(nid,nvarid,
ap)
265 ierr = nf_def_var(nid,
"bp",nf_double,1,idim_sig,nvarid)
267 ierr = nf_def_var(nid,
"bp",nf_float,1,idim_sig,nvarid)
270 ierr = nf_put_att_text(nid, nvarid,
"title", 26,
271 .
"Coefficient B pour hybride")
272 ierr = nf_enddef(nid)
273 call nf95_put_var(nid,nvarid,
bp)
278 ierr = nf_def_var(nid,
"presnivs",nf_double,1,idim_s,nvarid)
280 ierr = nf_def_var(nid,
"presnivs",nf_float,1,idim_s,nvarid)
283 ierr = nf_enddef(nid)
284 call nf95_put_var(nid,nvarid,
presnivs)
289 dims2(1) = idim_rlonu
290 dims2(2) = idim_rlatu
293 ierr = nf_def_var(nid,
"cu",nf_double,2,dims2,nvarid)
295 ierr = nf_def_var(nid,
"cu",nf_float,2,dims2,nvarid)
298 ierr = nf_put_att_text(nid, nvarid,
"title", 29,
299 .
"Coefficient de passage pour U")
300 ierr = nf_enddef(nid)
301 call nf95_put_var(nid,nvarid,
cu)
304 dims2(1) = idim_rlonv
305 dims2(2) = idim_rlatv
308 ierr = nf_def_var(nid,
"cv",nf_double,2,dims2,nvarid)
310 ierr = nf_def_var(nid,
"cv",nf_float,2,dims2,nvarid)
313 ierr = nf_put_att_text(nid, nvarid,
"title", 29,
314 .
"Coefficient de passage pour V")
315 ierr = nf_enddef(nid)
316 call nf95_put_var(nid,nvarid,
cv)
321 dims2(1) = idim_rlonv
322 dims2(2) = idim_rlatu
325 ierr = nf_def_var(nid,
"aire",nf_double,2,dims2,nvarid)
327 ierr = nf_def_var(nid,
"aire",nf_float,2,dims2,nvarid)
330 ierr = nf_put_att_text(nid, nvarid,
"title", 22,
331 .
"Aires de chaque maille")
332 ierr = nf_enddef(nid)
333 call nf95_put_var(nid,nvarid,
aire)
338 dims2(1) = idim_rlonv
339 dims2(2) = idim_rlatu
342 ierr = nf_def_var(nid,
"phisinit",nf_double,2,dims2,nvarid)
344 ierr = nf_def_var(nid,
"phisinit",nf_float,2,dims2,nvarid)
347 ierr = nf_put_att_text(nid, nvarid,
"title", 19,
348 .
"Geopotentiel au sol")
349 ierr = nf_enddef(nid)
350 call nf95_put_var(nid,nvarid,
phis)
358 ierr = nf_def_var(nid,
"temps",nf_double,1,idim_tim,nvarid)
360 ierr = nf_def_var(nid,
"temps",nf_float,1,idim_tim,nvarid)
363 ierr = nf_put_att_text(nid, nvarid,
"title", 19,
364 .
"Temps de simulation")
365 write(unites,200)yyears0,mmois0,jjour0
366 200
format(
'days since ',i4,
'-',i2.2,
'-',i2.2,
' 00:00:00')
367 ierr = nf_put_att_text(nid, nvarid,
"units", 30,
371 dims4(1) = idim_rlonu
372 dims4(2) = idim_rlatu
377 ierr = nf_def_var(nid,
"ucov",nf_double,4,dims4,nvarid)
379 ierr = nf_def_var(nid,
"ucov",nf_float,4,dims4,nvarid)
382 ierr = nf_put_att_text(nid, nvarid,
"title", 9,
385 dims4(1) = idim_rlonv
386 dims4(2) = idim_rlatv
391 ierr = nf_def_var(nid,
"vcov",nf_double,4,dims4,nvarid)
393 ierr = nf_def_var(nid,
"vcov",nf_float,4,dims4,nvarid)
396 ierr = nf_put_att_text(nid, nvarid,
"title", 9,
399 dims4(1) = idim_rlonv
400 dims4(2) = idim_rlatu
405 ierr = nf_def_var(nid,
"teta",nf_double,4,dims4,nvarid)
407 ierr = nf_def_var(nid,
"teta",nf_float,4,dims4,nvarid)
410 ierr = nf_put_att_text(nid, nvarid,
"title", 11,
413 dims4(1) = idim_rlonv
414 dims4(2) = idim_rlatu
421 ierr = nf_def_var(nid,tname(iq),nf_double,4,dims4,nvarid)
423 ierr = nf_def_var(nid,tname(iq),nf_float,4,dims4,nvarid)
426 ierr = nf_put_att_text(nid, nvarid,
"title", 12,ttext(iq))
430 dims4(1) = idim_rlonv
431 dims4(2) = idim_rlatu
436 ierr = nf_def_var(nid,
"masse",nf_double,4,dims4,nvarid)
438 ierr = nf_def_var(nid,
"masse",nf_float,4,dims4,nvarid)
441 ierr = nf_put_att_text(nid, nvarid,
"title", 12,
444 dims3(1) = idim_rlonv
445 dims3(2) = idim_rlatu
449 ierr = nf_def_var(nid,
"ps",nf_double,3,dims3,nvarid)
451 ierr = nf_def_var(nid,
"ps",nf_float,3,dims3,nvarid)
454 ierr = nf_put_att_text(nid, nvarid,
"title", 15,
457 ierr = nf_enddef(nid)
460 write(
lunout,*)
'dynredem0: iim,jjm,llm,iday_end',
461 &
iim,jjm,llm,iday_end
462 write(
lunout,*)
'dynredem0: rad,omeg,g,cpp,kappa',
468 . vcov,ucov,
teta,
q,masse,ps)
471 use netcdf
, only: NF90_get_VAR
478 #include "dimensions.h"
480 #include "description.h"
481 #include "netcdf.inc"
485 #include "iniprint.h"
489 REAL vcov(iip1,jjm,llm),ucov(iip1,
jjp1,llm)
491 REAL ps(iip1,
jjp1),masse(iip1,
jjp1,llm)
492 REAL q(iip1,
jjp1, llm, nqtot)
493 CHARACTER*(*) fichnom
496 INTEGER nid, nvarid, nid_trac, nvarid_trac
498 INTEGER ierr, ierr_file
502 REAL tab_cntrl(length)
504 character*80 abort_message
510 modname =
'dynredem1'
511 ierr = nf_open(fichnom, nf_write, nid)
512 IF (ierr .NE. nf_noerr)
THEN
513 write(
lunout,*)
"dynredem1: Pb. d ouverture "//trim(fichnom)
520 ierr = nf_inq_varid(nid,
"temps", nvarid)
521 IF (ierr .NE. nf_noerr)
THEN
522 write(
lunout,*) nf_strerror(ierr)
523 abort_message=
'Variable temps n est pas definie'
524 CALL
abort_gcm(modname,abort_message,ierr)
526 call nf95_put_var(nid,nvarid,
time,start=(/nb/))
527 write(
lunout,*)
"dynredem1: Enregistrement pour ", nb,
time
532 ierr = nf_inq_varid(nid,
"controle", nvarid)
533 IF (ierr .NE. nf_noerr)
THEN
534 abort_message=
"dynredem1: Le champ <controle> est absent"
536 CALL
abort_gcm(modname,abort_message,ierr)
538 ierr = nf90_get_var(nid, nvarid, tab_cntrl)
540 call nf95_put_var(nid,nvarid,tab_cntrl)
544 ierr = nf_inq_varid(nid,
"ucov", nvarid)
545 IF (ierr .NE. nf_noerr)
THEN
546 abort_message=
"Variable ucov n est pas definie"
548 CALL
abort_gcm(modname,abort_message,ierr)
550 call nf95_put_var(nid,nvarid,ucov)
552 ierr = nf_inq_varid(nid,
"vcov", nvarid)
553 IF (ierr .NE. nf_noerr)
THEN
554 abort_message=
"Variable vcov n est pas definie"
556 CALL
abort_gcm(modname,abort_message,ierr)
558 call nf95_put_var(nid,nvarid,vcov)
560 ierr = nf_inq_varid(nid,
"teta", nvarid)
561 IF (ierr .NE. nf_noerr)
THEN
562 abort_message=
"Variable teta n est pas definie"
564 CALL
abort_gcm(modname,abort_message,ierr)
566 call nf95_put_var(nid,nvarid,
teta)
568 IF (type_trac ==
'inca')
THEN
570 ierr_file = nf_open(
"start_trac.nc", nf_nowrite,nid_trac)
571 IF (ierr_file .NE.nf_noerr)
THEN
572 write(
lunout,*)
'dynredem1: Pb d''ouverture du fichier',
574 write(
lunout,*)
' ierr = ', ierr_file
581 IF (type_trac /=
'inca')
THEN
582 ierr = nf_inq_varid(nid, tname(iq), nvarid)
583 IF (ierr .NE. nf_noerr)
THEN
584 abort_message=
"Variable tname(iq) n est pas definie"
586 CALL
abort_gcm(modname,abort_message,ierr)
588 call nf95_put_var(nid,nvarid,
q(:,:,:,iq))
591 IF (ierr_file .ne. 2)
THEN
592 ierr = nf_inq_varid(nid_trac, tname(iq), nvarid_trac)
593 IF (ierr .NE. nf_noerr)
THEN
594 write(
lunout,*)
"dynredem1: ",trim(tname(iq)),
595 &
" est absent de start_trac.nc"
596 ierr = nf_inq_varid(nid, tname(iq), nvarid)
597 IF (ierr .NE. nf_noerr)
THEN
598 abort_message=
"dynredem1: Variable "//
599 & trim(tname(iq))//
" n est pas definie"
601 CALL
abort_gcm(modname,abort_message,ierr)
603 call nf95_put_var(nid,nvarid,
q(:,:,:,iq))
606 write(
lunout,*)
"dynredem1: ",trim(tname(iq)),
607 &
" est present dans start_trac.nc"
608 ierr = nf90_get_var(nid_trac, nvarid_trac, trac_tmp)
609 IF (ierr .NE. nf_noerr)
THEN
610 abort_message=
"dynredem1: Lecture echouee pour"//
613 CALL
abort_gcm(modname,abort_message,ierr)
615 ierr = nf_inq_varid(nid, tname(iq), nvarid)
616 IF (ierr .NE. nf_noerr)
THEN
617 abort_message=
"dynredem1: Variable "//
618 & trim(tname(iq))//
" n est pas definie"
620 CALL
abort_gcm(modname,abort_message,ierr)
622 call nf95_put_var(nid, nvarid, trac_tmp)
628 ierr = nf_inq_varid(nid, tname(iq), nvarid)
629 IF (ierr .NE. nf_noerr)
THEN
630 abort_message=
"dynredem1: Variable "//
631 & trim(tname(iq))//
" n est pas definie"
633 CALL
abort_gcm(modname,abort_message,ierr)
635 call nf95_put_var(nid,nvarid,
q(:,:,:,iq))
642 ierr = nf_inq_varid(nid,
"masse", nvarid)
643 IF (ierr .NE. nf_noerr)
THEN
644 abort_message=
"dynredem1: Variable masse n est pas definie"
646 CALL
abort_gcm(modname,abort_message,ierr)
648 call nf95_put_var(nid,nvarid,masse)
650 ierr = nf_inq_varid(nid,
"ps", nvarid)
651 IF (ierr .NE. nf_noerr)
THEN
652 abort_message=
"dynredem1: Variable ps n est pas definie"
654 CALL
abort_gcm(modname,abort_message,ierr)
656 call nf95_put_var(nid,nvarid,ps)