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)