4 INTEGER,
SAVE :: nid_start
5 INTEGER,
SAVE :: nid_restart
7 INTEGER,
SAVE :: idim1,idim2,idim3,idim4
8 INTEGER,
PARAMETER :: length=100
35 CHARACTER(LEN=*) :: filename
38 IF (is_mpi_root .AND. is_omp_root)
THEN
39 ierr = nf90_open(filename, nf90_nowrite,nid_start)
40 IF (ierr.NE.nf90_noerr)
THEN
41 write(6,*)
' Pb d''ouverture du fichier '//filename
42 write(6,*)
' ierr = ', ierr
55 IF (is_mpi_root .AND. is_omp_root)
THEN
56 ierr = nf90_close(nid_start)
66 CHARACTER(LEN=*) :: field_name
71 IF (is_mpi_root .AND. is_omp_root)
THEN
72 ierr=nf90_inq_varid(nid_start,field_name,varid)
73 IF (ierr==nf90_noerr)
THEN
87 CHARACTER(LEN=*),
INTENT(IN) :: field_name
88 REAL,
INTENT(INOUT) :: field(:)
89 LOGICAL,
INTENT(OUT),
OPTIONAL :: found
91 IF (present(found))
THEN
101 CHARACTER(LEN=*),
INTENT(IN) :: field_name
102 REAL,
INTENT(INOUT) :: field(:,:)
103 LOGICAL,
INTENT(OUT),
OPTIONAL :: found
105 IF (present(found))
THEN
116 CHARACTER(LEN=*),
INTENT(IN) :: field_name
117 REAL,
INTENT(INOUT) :: field(:,:,:)
118 LOGICAL,
INTENT(OUT),
OPTIONAL :: found
120 IF (present(found))
THEN
121 CALL
get_field_rgen(field_name,field,
size(field,2)*
size(field,3),found)
134 CHARACTER(LEN=*) :: field_name
135 INTEGER :: field_size
136 REAL :: field(klon,field_size)
137 LOGICAL,
OPTIONAL :: found
139 REAL :: field_glo(klon_glo,field_size)
144 IF (is_mpi_root .AND. is_omp_root)
THEN
146 ierr=nf90_inq_varid(nid_start,field_name,varid)
148 IF (ierr==nf90_noerr)
THEN
157 CALL
bcast(tmp_found)
160 CALL scatter(field_glo,field)
163 IF (present(found))
THEN
166 IF (.NOT. tmp_found)
THEN
167 print*,
'phyetat0: Le champ <'//field_name//
'> est absent'
176 REAL :: field_glo(klon_glo*field_size)
177 ierr=nf90_get_var(nid_start,varid,field_glo)
178 IF (ierr/=nf90_noerr)
THEN
180 print*,
'phyetat0: Lecture echouee pour <'//field_name//
'>'
182 IF (field_name==
'CLWCON' .OR. field_name==
'RNEBCON' .OR. field_name==
'RATQS')
THEN
185 ierr=nf90_get_var(nid_start,varid,field_glo(1:klon_glo))
186 IF (ierr/=nf90_noerr)
THEN
187 print*,
'phyetat0: Lecture echouee aussi en 2D pour <'//field_name//
'>'
190 print*,
'phyetat0: La variable <'//field_name//
'> lu sur surface seulement'
204 CHARACTER(LEN=*),
INTENT(IN) :: var_name
205 REAL,
INTENT(INOUT) ::
var
206 LOGICAL,
OPTIONAL,
INTENT(OUT) :: found
210 IF (present(found))
THEN
221 CHARACTER(LEN=*),
INTENT(IN) :: var_name
222 REAL,
INTENT(INOUT) ::
var(:)
223 LOGICAL,
OPTIONAL,
INTENT(OUT) :: found
225 IF (present(found))
THEN
235 CHARACTER(LEN=*),
INTENT(IN) :: var_name
236 REAL,
INTENT(OUT) ::
var(:,:)
237 LOGICAL,
OPTIONAL,
INTENT(OUT) :: found
239 IF (present(found))
THEN
249 CHARACTER(LEN=*),
INTENT(IN) :: var_name
250 REAL,
INTENT(INOUT) ::
var(:,:,:)
251 LOGICAL,
OPTIONAL,
INTENT(OUT) :: found
253 IF (present(found))
THEN
267 CHARACTER(LEN=*) :: var_name
269 REAL ::
var(var_size)
270 LOGICAL,
OPTIONAL :: found
276 IF (is_mpi_root .AND. is_omp_root)
THEN
278 ierr=nf90_inq_varid(nid_start,var_name,varid)
280 IF (ierr==nf90_noerr)
THEN
281 ierr=nf90_get_var(nid_start,varid,
var)
282 IF (ierr/=nf90_noerr)
THEN
283 print*,
'phyetat0: Lecture echouee pour <'//var_name//
'>'
293 CALL
bcast(tmp_found)
299 IF (present(found))
THEN
302 IF (.NOT. tmp_found)
THEN
303 print*,
'phyetat0: La variable champ <'//var_name//
'> est absente'
317 CHARACTER(LEN=*),
INTENT(IN) :: filename
320 IF (is_mpi_root .AND. is_omp_root)
THEN
321 ierr = nf90_create(filename, nf90_clobber, nid_restart)
322 IF (ierr/=nf90_noerr)
THEN
323 write(6,*)
' Pb d''ouverture du fichier '//filename
324 write(6,*)
' ierr = ', ierr
328 ierr = nf90_put_att(nid_restart, nf90_global,
"title",
"Fichier redemmarage physique")
330 ierr = nf90_def_dim(nid_restart,
"index", length, idim1)
331 ierr = nf90_def_dim(nid_restart,
"points_physiques", klon_glo, idim2)
332 ierr = nf90_def_dim(nid_restart,
"horizon_vertical", klon_glo*
klev, idim3)
333 ierr = nf90_def_dim(nid_restart,
"horizon_klevp1", klon_glo*klevp1, idim4)
335 ierr = nf90_enddef(nid_restart)
346 IF (is_mpi_root .AND. is_omp_root)
THEN
347 ierr = nf90_close(nid_restart)
355 CHARACTER(LEN=*),
INTENT(IN) :: field_name
356 CHARACTER(LEN=*),
INTENT(IN) ::
title
357 REAL,
INTENT(IN) :: field(:)
365 CHARACTER(LEN=*),
INTENT(IN) :: field_name
366 CHARACTER(LEN=*),
INTENT(IN) ::
title
367 REAL,
INTENT(IN) :: field(:,:)
375 CHARACTER(LEN=*),
INTENT(IN) :: field_name
376 CHARACTER(LEN=*),
INTENT(IN) ::
title
377 REAL,
INTENT(IN) :: field(:,:,:)
389 CHARACTER(LEN=*),
INTENT(IN) :: field_name
390 CHARACTER(LEN=*),
INTENT(IN) ::
title
391 INTEGER,
INTENT(IN) :: field_size
392 REAL,
INTENT(IN) :: field(klon,field_size)
394 REAL :: field_glo(klon_glo,field_size)
400 CALL
gather(field,field_glo)
402 IF (is_mpi_root .AND. is_omp_root)
THEN
404 IF (field_size==1)
THEN
406 ELSE IF (field_size==
klev)
THEN
408 ELSE IF (field_size==klevp1)
THEN
411 print *,
"erreur phyredem : probleme de dimension"
415 ierr = nf90_redef(nid_restart)
417 ierr = nf90_def_var(nid_restart, field_name, nf90_double,(/ idim /),nvarid)
419 ierr = nf90_def_var(nid_restart, field_name, nf90_float,(/ idim /),nvarid)
421 IF (len_trim(
title) > 0) ierr = nf90_put_att(nid_restart,nvarid,
"title",
title)
422 ierr = nf90_enddef(nid_restart)
423 ierr = nf90_put_var(nid_restart,nvarid,reshape(field_glo,(/klon_glo*field_size/)))
430 CHARACTER(LEN=*),
INTENT(IN) :: var_name
431 CHARACTER(LEN=*),
INTENT(IN) ::
title
432 REAL,
INTENT(IN) ::
var
444 CHARACTER(LEN=*),
INTENT(IN) :: var_name
445 CHARACTER(LEN=*),
INTENT(IN) ::
title
446 REAL,
INTENT(IN) ::
var(:)
454 CHARACTER(LEN=*),
INTENT(IN) :: var_name
455 CHARACTER(LEN=*),
INTENT(IN) ::
title
456 REAL,
INTENT(IN) ::
var(:,:)
464 CHARACTER(LEN=*),
INTENT(IN) :: var_name
465 CHARACTER(LEN=*),
INTENT(IN) ::
title
466 REAL,
INTENT(IN) ::
var(:,:,:)
477 CHARACTER(LEN=*),
INTENT(IN) :: var_name
478 CHARACTER(LEN=*),
INTENT(IN) ::
title
479 INTEGER,
INTENT(IN) :: var_size
480 REAL,
INTENT(IN) ::
var(var_size)
485 IF (is_mpi_root .AND. is_omp_root)
THEN
487 IF (var_size/=length)
THEN
488 print *,
"erreur phyredem : probleme de dimension"
492 ierr = nf90_redef(nid_restart)
495 ierr = nf90_def_var(nid_restart, var_name, nf90_double,(/ idim1 /),nvarid)
497 ierr = nf90_def_var(nid_restart, var_name, nf90_float,(/ idim1 /),nvarid)
499 IF (len_trim(
title)>0) ierr = nf90_put_att(nid_restart,nvarid,
"title",
title)
500 ierr = nf90_enddef(nid_restart)
502 ierr = nf90_put_var(nid_restart,nvarid,
var)