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
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'
175 SUBROUTINE body(field_glo)
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
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
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")
346 IF (is_mpi_root .AND. is_omp_root)
THEN
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(:,:,:)
379 CALL put_field_rgen(field_name,title,field,
size(field,2)*
size(field,3))
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"
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)
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"
499 IF (len_trim(title)>0) ierr = nf90_put_att(
nid_restart,nvarid,
"title", title)
!IM Implemente en modes sequentiel et parallele CALL rlon_glo CALL bcast(rlon_glo)!$OMP MASTER if(is_mpi_root) then!zstophy
subroutine get_var_r2(var_name, var, found)
subroutine body(field_glo)
subroutine get_var_rgen(var_name, var, var_size, found)
integer, parameter length
subroutine, public open_startphy(filename)
subroutine put_var_r2(var_name, title, var)
subroutine put_var_r3(var_name, title, var)
subroutine put_var_rgen(var_name, title, var, var_size)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
!IM Implemente en modes sequentiel et parallele CALL gather(rlat, rlat_glo) CALL bcast(rlat_glo) CALL gather(rlon
logical function inquire_field(Field_name)
subroutine put_field_r2(field_name, title, field)
subroutine, public close_restartphy
subroutine get_var_r0(var_name, var, found)
subroutine get_field_r2(field_name, field, found)
subroutine, public close_startphy
subroutine put_field_r1(field_name, title, field)
subroutine put_var_r0(var_name, title, var)
integer, save nid_restart
subroutine put_field_rgen(field_name, title, field, field_size)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
subroutine get_field_rgen(field_name, field, field_size, found)
subroutine put_var_r1(var_name, title, var)
subroutine get_var_r3(var_name, var, found)
subroutine abort_physic(modname, message, ierr)
subroutine get_field_r3(field_name, field, found)
subroutine put_field_r3(field_name, title, field)
subroutine, public open_restartphy(filename)
subroutine get_var_r1(var_name, var, found)
subroutine get_field_r1(field_name, field, found)