8   REAL,
ALLOCATABLE,
DIMENSION(:),
SAVE :: 
io_lat 
    9   REAL,
ALLOCATABLE,
DIMENSION(:),
SAVE :: 
io_lon 
   11   INTEGER, 
SAVE :: 
npstn 
   12   INTEGER, 
ALLOCATABLE, 
DIMENSION(:), 
SAVE :: 
nptabij 
   37       INTEGER, 
INTENT(IN) :: ito
 
   44                                 jj_nb, jj_begin, jj_end, ii_begin, ii_end, &
 
   45                                 mpi_size, mpi_rank, klon_mpi, &
 
   50   USE ioipsl
, only: flio_dom_set
 
   53   use wxios
, only: wxios_domain_param
 
   56     REAL,
DIMENSION(klon),
INTENT(IN) :: 
rlon 
   57     REAL,
DIMENSION(klon),
INTENT(IN) :: 
rlat 
   59     REAL,
DIMENSION(klon_glo)        :: rlat_glo
 
   60     REAL,
DIMENSION(klon_glo)        :: rlon_glo
 
   62     INTEGER,
DIMENSION(2) :: ddid
 
   63     INTEGER,
DIMENSION(2) :: dsg
 
   64     INTEGER,
DIMENSION(2) :: dsl
 
   65     INTEGER,
DIMENSION(2) :: dpf
 
   66     INTEGER,
DIMENSION(2) :: dpl
 
   67     INTEGER,
DIMENSION(2) :: dhs
 
   68     INTEGER,
DIMENSION(2) :: dhe 
 
   70     INTEGER :: data_ibegin, data_iend
 
  116     dhs=(/ ii_begin-1,0 /)
 
  117     IF (mpi_rank==mpi_size-1) 
THEN 
  123 #ifndef CPP_IOIPSL_NO_OUTPUT     
  124     CALL flio_dom_set(mpi_size,mpi_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe, &
 
  129     IF (mpi_rank == 0) 
THEN 
  132         data_ibegin = ii_begin - 1
 
  135     IF (mpi_rank == mpi_size-1) 
THEN 
  138         data_iend = ii_end + 1
 
  142       write(
lunout,*) 
"init_iophy_new: mpirank=",mpi_rank,
" iibegin=",ii_begin , 
" ii_end=",ii_end,
" jjbegin=",jj_begin,
" jj_nb=",jj_nb,
" jj_end=",jj_end
 
  144       write(
lunout,*) 
"init_iophy_new: mpirank=",mpi_rank,
" data_ibegin=",data_ibegin,
" data_iend=",data_iend
 
  145       write(
lunout,*) 
"init_iophy_new: mpirank=",mpi_rank,
" data_ibegin=",data_ibegin,
" data_iend=",data_iend
 
  146       write(
lunout,*) 
"init_iophy_new: mpirank=",mpi_rank,
" is_south_pole=",is_south_pole
 
  151                             1, 
nbp_lon, ii_begin, ii_end, jj_begin, jj_end,             &
 
  152                             klon_mpi+2*(
nbp_lon-1), data_ibegin, data_iend,             &
 
  162   USE ioipsl
, only: flio_dom_set
 
  165     REAL,
DIMENSION(nbp_lon),
INTENT(IN) :: lon
 
  166     REAL,
DIMENSION(nbp_lat),
INTENT(IN) :: lat
 
  168     INTEGER,
DIMENSION(2) :: ddid
 
  169     INTEGER,
DIMENSION(2) :: dsg
 
  170     INTEGER,
DIMENSION(2) :: dsl
 
  171     INTEGER,
DIMENSION(2) :: dpf
 
  172     INTEGER,
DIMENSION(2) :: dpl
 
  173     INTEGER,
DIMENSION(2) :: dhs
 
  174     INTEGER,
DIMENSION(2) :: dhe 
 
  187     dhs=(/ ii_begin-1,0 /)
 
  188     if (mpi_rank==mpi_size-1) 
then 
  194 #ifndef CPP_IOIPSL_NO_OUTPUT  
  195     call flio_dom_set(mpi_size,mpi_rank,ddid,dsg,dsl,dpf,dpl,dhs,dhe, &
 
  202  SUBROUTINE histbeg_phyxios(name,itau0,zjulian,dtime,ffreq,lev,nhori,nid_day)
 
  205                                 jj_begin, jj_end, jj_nb
 
  209   use wxios
, only: wxios_add_file
 
  214     character*(*), 
INTENT(IN) :: name
 
  215     integer, 
INTENT(IN) :: itau0
 
  216     REAL,
INTENT(IN) :: zjulian
 
  217     REAL,
INTENT(IN) :: dtime
 
  218     character(LEN=*), 
INTENT(IN) :: ffreq
 
  219     INTEGER,
INTENT(IN) :: lev
 
  220     integer,
intent(out) :: nhori
 
  221     integer,
intent(out) :: nid_day
 
  226                    1,
nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day)
 
  234     IF((.NOT. is_using_mpi) .OR. is_mpi_root) 
THEN 
  236       IF (.not. ok_all_xml) 
THEN 
  237         CALL wxios_add_file(name, ffreq, lev)
 
  245   SUBROUTINE histbeg_phy(name,itau0,zjulian,dtime,nhori,nid_day)
 
  253     character*(*), 
INTENT(IN) :: name
 
  254     integer, 
INTENT(IN) :: itau0
 
  255     REAL,
INTENT(IN) :: zjulian
 
  256     REAL,
INTENT(IN) :: dtime
 
  257     integer,
intent(out) :: nhori
 
  258     integer,
intent(out) :: nid_day
 
  261 #ifndef CPP_IOIPSL_NO_OUTPUT  
  264                    1,
nbp_lon,1,jj_nb,itau0, zjulian, dtime, nhori, nid_day)
 
  276              plon,plat,plon_bounds,plat_bounds, &
 
  287     REAL,
DIMENSION(klon),
INTENT(IN) :: rlon
 
  288     REAL,
DIMENSION(klon),
INTENT(IN) :: rlat
 
  289     integer, 
INTENT(IN) :: itau0
 
  290     REAL,
INTENT(IN) :: zjulian
 
  291     REAL,
INTENT(IN) :: dtime
 
  292     integer, 
INTENT(IN) :: pim
 
  293     integer, 
intent(out) :: nnhori
 
  294     character(len=20), 
INTENT(IN) :: nname
 
  295     INTEGER, 
intent(out) :: nnid_day
 
  297     REAL,
DIMENSION(klon_glo)        :: rlat_glo
 
  298     REAL,
DIMENSION(klon_glo)        :: rlon_glo
 
  299     INTEGER, 
DIMENSION(pim), 
INTENT(IN)  :: tabij
 
  300     REAL,
DIMENSION(pim), 
INTENT(IN) :: plat, plon
 
  301     INTEGER,
DIMENSION(pim), 
INTENT(IN) :: ipt, jpt
 
  302     REAL,
DIMENSION(pim,2), 
intent(out) :: plat_bounds, plon_bounds
 
  304     INTEGER, 
SAVE :: tabprocbeg, tabprocend
 
  307     INTEGER, 
PARAMETER :: nip=1
 
  309     REAL, 
allocatable, 
DIMENSION(:) :: npplat, npplon
 
  310     REAL, 
allocatable, 
DIMENSION(:,:) :: npplat_bounds, npplon_bounds
 
  311     REAL, 
DIMENSION(nbp_lon,nbp_lat) :: zx_lon, zx_lat
 
  313     CALL gather(rlat,rlat_glo)
 
  315     CALL gather(rlon,rlon_glo)
 
  323      plon_bounds(i,1)=rlon_glo(tabij(i)-1)
 
  324      plon_bounds(i,2)=rlon_glo(tabij(i)+1)
 
  325      if(plon_bounds(i,2).LE.0..AND.plon_bounds(i,1).GE.0.) 
THEN 
  326       if(rlon_glo(tabij(i)).GE.0.) 
THEN 
  327        plon_bounds(i,2)=-1*plon_bounds(i,2)
 
  330      if(plon_bounds(i,2).GE.0..AND.plon_bounds(i,1).LE.0.) 
THEN 
  331       if(rlon_glo(tabij(i)).LE.0.) 
THEN 
  332        plon_bounds(i,2)=-1*plon_bounds(i,2)
 
  337       plat_bounds(i,1)=rlat_glo(tabij(i))
 
  339       plat_bounds(i,1)=rlat_glo(tabij(i)-
nbp_lon)
 
  341      plat_bounds(i,2)=rlat_glo(tabij(i)+
nbp_lon)
 
  350      IF(.NOT. 
ALLOCATED(
nptabij)) 
THEN 
  360          zx_lon(i,1) = rlon_glo(i+1)
 
  361          zx_lon(i,
nbp_lat) = rlon_glo(i+1)
 
  369      plon_bounds(i,1)=zx_lon(ipt(i)-1,jpt(i))
 
  370      plon_bounds(i,2)=zx_lon(ipt(i)+1,jpt(i))
 
  372      if (ipt(i).EQ.1) 
then 
  373       plon_bounds(i,1)=zx_lon(
nbp_lon,jpt(i))
 
  374       plon_bounds(i,2)=360.+zx_lon(ipt(i)+1,jpt(i))
 
  378       plon_bounds(i,2)=360.+zx_lon(1,jpt(i))
 
  381      plat_bounds(i,1)=zx_lat(ipt(i),jpt(i)-1)
 
  382      plat_bounds(i,2)=zx_lat(ipt(i),jpt(i)+1)
 
  384      if (jpt(i).EQ.1) 
then 
  385       plat_bounds(i,1)=zx_lat(ipt(i),1)+0.001
 
  386       plat_bounds(i,2)=zx_lat(ipt(i),1)-0.001
 
  390       plat_bounds(i,1)=zx_lat(ipt(i),
nbp_lat)+0.001
 
  391       plat_bounds(i,2)=zx_lat(ipt(i),
nbp_lat)-0.001
 
  399 #ifndef CPP_IOIPSL_NO_OUTPUT  
  400      call histbeg(nname,pim,plon,plon_bounds, & 
 
  402                            itau0, zjulian, dtime, nnhori, nnid_day)
 
  407       tabprocbeg=klon_mpi_begin
 
  408       tabprocend=klon_mpi_end
 
  409       IF(tabij(ip).GE.tabprocbeg.AND.tabij(ip).LE.tabprocend) 
THEN 
  415      IF(.NOT. 
ALLOCATED(
nptabij)) 
THEN 
  418       ALLOCATE(npplon_bounds(
npstn,2), npplat_bounds(
npstn,2))
 
  422       IF(tabij(ip).GE.tabprocbeg.AND.tabij(ip).LE.tabprocend) 
THEN 
  427        npplon(npproc)=plon(ip)
 
  428        npplat(npproc)=plat(ip)
 
  429        npplon_bounds(npproc,1)=plon_bounds(ip,1)
 
  430        npplon_bounds(npproc,2)=plon_bounds(ip,2)
 
  431        npplat_bounds(npproc,1)=plat_bounds(ip,1)
 
  432        npplat_bounds(npproc,2)=plat_bounds(ip,2)
 
  436         print*,
'iophy_mpi rank ip lon lat',mpi_rank,ip,plon(ip),plat(ip)
 
  440 #ifndef CPP_IOIPSL_NO_OUTPUT  
  442                             npplat,npplat_bounds, &
 
  451   SUBROUTINE histdef2d_old (iff,lpoint,flag_var,nomvar,titrevar,unitvar)
 
  453     USE ioipsl
, only: histdef
 
  464     INTEGER, 
DIMENSION(nfiles)       :: flag_var
 
  465     CHARACTER(LEN=20)                 :: nomvar
 
  466     CHARACTER(LEN=*)                 :: titrevar
 
  467     CHARACTER(LEN=*)                 :: unitvar
 
  481        IF ( flag_var(iff)<=
lev_files(iff) ) 
THEN 
  482           CALL histdef (
nid_files(iff),nomvar,titrevar,unitvar, &
 
  487        IF ( flag_var(iff)<=
lev_files(iff) ) 
THEN 
  488           CALL histdef (
nid_files(iff),nomvar,titrevar,unitvar, &
 
  495     IF (nomvar==
'topswad' .OR. nomvar==
'topswai' .OR. nomvar==
'solswad' .OR. nomvar==
'solswai' ) 
THEN 
  496        IF  ( flag_var(iff)<=
lev_files(iff) ) 
THEN 
  504   SUBROUTINE histdef3d_old (iff,lpoint,flag_var,nomvar,titrevar,unitvar)
 
  506     USE ioipsl
, only: histdef
 
  519     INTEGER, 
DIMENSION(nfiles)       :: flag_var
 
  520     CHARACTER(LEN=20)                 :: nomvar
 
  521     CHARACTER(LEN=*)                 :: titrevar
 
  522     CHARACTER(LEN=*)                 :: unitvar
 
  536        IF ( flag_var(iff)<=
lev_files(iff) ) 
THEN 
  537           CALL histdef (
nid_files(iff), nomvar, titrevar, unitvar, &
 
  540                zstophym, 
zoutm(iff))
 
  543        IF ( flag_var(iff)<=
lev_files(iff) ) 
THEN 
  544           CALL histdef (
nid_files(iff), nomvar, titrevar, unitvar, &
 
  561     USE ioipsl
, only: histdef
 
  569     use wxios
, only: wxios_add_field_to_file
 
  579     CHARACTER(LEN=20) :: typeecrit
 
  584     IF (index(var%type_ecrit(iff), 
"once") > 0) 
THEN 
  586     ELSE IF(index(var%type_ecrit(iff), 
"t_min") > 0) 
THEN 
  587        typeecrit = 
't_min(X)' 
  588     ELSE IF(index(var%type_ecrit(iff), 
"t_max") > 0) 
THEN 
  589        typeecrit = 
't_max(X)' 
  590     ELSE IF(index(var%type_ecrit(iff), 
"inst") > 0) 
THEN 
  591        typeecrit = 
'inst(X)' 
  596     IF (typeecrit==
'inst(X)'.OR.typeecrit==
'once') 
THEN 
  608       IF (.not. ok_all_xml) 
THEN 
  609         IF ( var%flag(iff)<=
lev_files(iff) ) 
THEN 
  611           var%description, var%unit, var%flag(iff), typeecrit)
 
  613             WRITE(
lunout,*) 
'histdef2d: call wxios_add_field_to_file var%name iff: ', &
 
  619 #ifndef CPP_IOIPSL_NO_OUTPUT  
  621        IF ( var%flag(iff)<=
lev_files(iff) ) 
THEN 
  622           CALL histdef (
nid_files(iff), var%name, var%description, var%unit, &
 
  624                typeecrit, zstophym,
zoutm(iff))                
 
  628           CALL histdef (
nid_files(iff), var%name, var%description, var%unit, &
 
  630                typeecrit, zstophym,
zoutm(iff))                
 
  636     IF (var%name==
'topswad' .OR. var%name==
'topswai' .OR. var%name==
'solswad' .OR. var%name==
'solswai' ) 
THEN 
  637        IF  ( var%flag(iff)<=
lev_files(iff) ) 
THEN 
  645     USE ioipsl
, only: histdef
 
  655     use wxios
, only: wxios_add_field_to_file
 
  665     CHARACTER(LEN=20) :: typeecrit
 
  669     IF (index(var%type_ecrit(iff), 
"once") > 0) 
THEN 
  671     ELSE IF(index(var%type_ecrit(iff), 
"t_min") > 0) 
THEN 
  672        typeecrit = 
't_min(X)' 
  673     ELSE IF(index(var%type_ecrit(iff), 
"t_max") > 0) 
THEN 
  674        typeecrit = 
't_max(X)' 
  675     ELSE IF(index(var%type_ecrit(iff), 
"inst") > 0) 
THEN 
  676        typeecrit = 
'inst(X)' 
  685     IF (typeecrit==
'inst(X)'.OR.typeecrit==
'once') 
THEN 
  694        IF (.not. ok_all_xml) 
THEN 
  695          IF ( var%flag(iff)<=
lev_files(iff) ) 
THEN 
  697          var%description, var%unit, var%flag(iff), typeecrit)
 
  699              WRITE(
lunout,*) 
'histdef3d: call wxios_add_field_to_file var%name iff: ', &
 
  705 #ifndef CPP_IOIPSL_NO_OUTPUT  
  707        IF ( var%flag(iff)<=
lev_files(iff) ) 
THEN 
  708           CALL histdef (
nid_files(iff), var%name, var%description, var%unit, &
 
  711                zstophym, 
zoutm(iff))
 
  715           CALL histdef (
nid_files(iff), var%name, var%description, var%unit, &
 
  718                typeecrit, zstophym,
zoutm(iff))
 
  727     use ioipsl
, only: getin
 
  732     CHARACTER(LEN=20)                :: nam_var
 
  733     INTEGER, 
DIMENSION(nfiles)      :: flag_var
 
  735     IF(
prt_level>10) 
WRITE(
lunout,*)
'Avant getin: nam_var flag_var ',nam_var,flag_var(:)
 
  736     CALL getin(
'flag_'//nam_var,flag_var)
 
  737     CALL getin(
'name_'//nam_var,nam_var)
 
  738     IF(
prt_level>10) 
WRITE(
lunout,*)
'Apres getin: nam_var flag_var ',nam_var,flag_var(:)
 
  749   USE ioipsl
, only: histwrite
 
  754     integer,
INTENT(IN) :: nid
 
  755     logical,
INTENT(IN) :: lpoint 
 
  756     character*(*), 
INTENT(IN) :: name
 
  757     integer, 
INTENT(IN) :: itau
 
  758     REAL,
DIMENSION(:),
INTENT(IN) :: field
 
  759     REAL,
DIMENSION(klon_mpi) :: buffer_omp
 
  760     INTEGER, 
allocatable, 
DIMENSION(:) :: index2d
 
  764     REAL,
allocatable,
DIMENSION(:) :: fieldok
 
  767     IF (
size(field)/=
klon) 
CALL abort_physic(
'iophy::histwrite2d',
'Field first DIMENSION not equal to klon',1)
 
  769     CALL gather_omp(field,buffer_omp)    
 
  771     CALL grid1dto2d_mpi(buffer_omp,field2d)
 
  773      ALLOCATE(index2d(
nbp_lon*jj_nb))
 
  774      ALLOCATE(fieldok(
nbp_lon*jj_nb))
 
  776      CALL histwrite(nid,name,itau,field2d,
nbp_lon*jj_nb,index2d)
 
  777      IF (
prt_level >= 10) 
write(
lunout,*)
'Finished sending ',name,
' to IOIPSL' 
  779      ALLOCATE(fieldok(
npstn))
 
  780      ALLOCATE(index2d(
npstn))
 
  786        fieldok(ip)=buffer_omp(
nptabij(ip))
 
  791        IF(
nptabij(ip).GE.klon_mpi_begin.AND. &
 
  792           nptabij(ip).LE.klon_mpi_end) 
THEN 
  793          fieldok(ip)=buffer_omp(
nptabij(ip)-klon_mpi_begin+1)
 
  798      CALL histwrite(nid,name,itau,fieldok,
npstn,index2d)
 
  799      IF (
prt_level >= 10) 
write(
lunout,*)
'Finished sending ',name,
' to IOIPSL' 
  815   use ioipsl
, only: histwrite
 
  819     integer,
INTENT(IN) :: nid
 
  820     logical,
INTENT(IN) :: lpoint
 
  821     character*(*), 
INTENT(IN) :: name
 
  822     integer, 
INTENT(IN) :: itau
 
  823     REAL,
DIMENSION(:,:),
INTENT(IN) :: field  
 
  824     REAL,
DIMENSION(klon_mpi,size(field,2)) :: buffer_omp
 
  825     REAL :: Field3d(
nbp_lon,jj_nb,size(field,2))
 
  826     INTEGER :: ip, n, nlev
 
  827     INTEGER, 
ALLOCATABLE, 
DIMENSION(:) :: index3d
 
  828     REAL,
allocatable, 
DIMENSION(:,:) :: fieldok
 
  831     IF (
size(field,1)/=
klon) 
CALL abort_physic(
'iophy::histwrite3d',
'Field first DIMENSION not equal to klon',1)
 
  834     CALL gather_omp(field,buffer_omp)
 
  836     CALL grid1dto2d_mpi(buffer_omp,field3d)
 
  838      ALLOCATE(index3d(
nbp_lon*jj_nb*nlev))
 
  839      ALLOCATE(fieldok(
nbp_lon*jj_nb,nlev))
 
  841      CALL histwrite(nid,name,itau,field3d,
nbp_lon*jj_nb*nlev,index3d)
 
  842      IF (
prt_level >= 10) 
write(
lunout,*)
'Finished sending ',name,
' to IOIPSL' 
  845       ALLOCATE(index3d(
npstn*nlev))
 
  846       ALLOCATE(fieldok(
npstn,nlev))
 
  853         fieldok(ip,n)=buffer_omp(
nptabij(ip),n)
 
  859         IF(
nptabij(ip).GE.klon_mpi_begin.AND. &
 
  860          nptabij(ip).LE.klon_mpi_end) 
THEN 
  861          fieldok(ip,n)=buffer_omp(
nptabij(ip)-klon_mpi_begin+1,n)
 
  867       CALL histwrite(nid,name,itau,fieldok,
npstn*nlev,index3d)
 
  868       IF (
prt_level >= 10) 
write(
lunout,*)
'Finished sending ',name,
' to IOIPSL' 
  883                                 jj_nb, klon_mpi, klon_mpi_begin, &
 
  885   USE ioipsl
, only: histwrite
 
  892   USE xios
, only: xios_send_field
 
  900     REAL, 
DIMENSION(:), 
INTENT(IN) :: field
 
  901     INTEGER, 
INTENT(IN), 
OPTIONAL :: STD_iff 
 
  903     INTEGER :: iff, iff_beg, iff_end
 
  904     LOGICAL, 
SAVE  :: firstx
 
  907     REAL,
DIMENSION(klon_mpi) :: buffer_omp
 
  908     INTEGER, 
allocatable, 
DIMENSION(:) :: index2d
 
  912     REAL, 
ALLOCATABLE, 
DIMENSION(:) :: fieldok
 
  915       WRITE(
lunout,*)
'Begin histwrite2d_phy for ',trim(var%name)
 
  918       IF (
PRESENT(std_iff)) 
THEN 
  930       IF (.not. ok_all_xml) 
THEN 
  932       write(
lunout,*).not.
"histwrite2d_phy: vars_defined ; time to define ", &
 
  935       DO iff=iff_beg, iff_end
 
  945     IF (
SIZE(field)/=
klon) 
CALL abort_physic(
'iophy::histwrite2d_phy',
'Field first DIMENSION not equal to klon',1)
 
  948       write(
lunout,*).not.
"histwrite2d_phy: vars_defined ; time to gather and write ", &
 
  952     CALL gather_omp(field,buffer_omp)
 
  954     CALL grid1dto2d_mpi(buffer_omp,field2d)
 
  962              write(
lunout,*)
'Dans iophy histwrite2D,var%name ',&
 
  965           CALL xios_send_field(var%name, field2d)
 
  967              write(
lunout,*)
'Dans iophy histwrite2D,var%name apres xios_send ',&
 
  971         CALL abort_physic (
'iophy',
'cannot have ok_all_xml = .T. without CPP_XIOS defined' ,1)
 
  974         DO iff=iff_beg, iff_end
 
  980                      write(
lunout,*)
'Dans iophy histwrite2D,iff,var%name ',&
 
  982                      write(
lunout,*).NOT.
"histwrite2d_phy:clef_stations(iff)and iff==iff_beg, call xios_send_field" 
  984                   CALL xios_send_field(var%name, field2d)
 
  990                         ALLOCATE(index2d(
nbp_lon*jj_nb))
 
  991                         ALLOCATE(fieldok(
nbp_lon*jj_nb))
 
  992 #ifndef CPP_IOIPSL_NO_OUTPUT  
 1004                         ALLOCATE(fieldok(
npstn))
 
 1005                         ALLOCATE(index2d(
npstn))
 
 1009                             fieldok(ip)=buffer_omp(
nptabij(ip))
 
 1013                                 write(
lunout,*)
'histwrite2d_phy is_sequential npstn ip namenptabij',
npstn,ip,var%name,
nptabij(ip)
 
 1014                                      IF(
nptabij(ip).GE.klon_mpi_begin.AND. &
 
 1015                                         nptabij(ip).LE.klon_mpi_end) 
THEN 
 1016                                        fieldok(ip)=buffer_omp(
nptabij(ip)-klon_mpi_begin+1)
 
 1020 #ifndef CPP_IOIPSL_NO_OUTPUT  
 1022                          write(
lunout,*)
"histwrite2d_phy: clef_stations(iff) and iff==iff_beg, call wxios_write_2D" 
 1035   IF (
prt_level >= 10) 
WRITE(
lunout,*)
'End histwrite2d_phy ',trim(var%name)
 
 1043                                 jj_nb, klon_mpi, klon_mpi_begin, &
 
 1045   USE ioipsl
, only: histwrite
 
 1051   USE xios
, only: xios_send_field
 
 1056   include 
'clesphys.h' 
 1059     REAL, 
DIMENSION(:,:), 
INTENT(IN) :: field 
 
 1060     INTEGER, 
INTENT(IN), 
OPTIONAL :: STD_iff 
 
 1062     INTEGER :: iff, iff_beg, iff_end
 
 1063     LOGICAL, 
SAVE  :: firstx
 
 1065     REAL,
DIMENSION(klon_mpi,SIZE(field,2)) :: buffer_omp
 
 1066     REAL :: Field3d(
nbp_lon,jj_nb,size(field,2))
 
 1067     INTEGER :: ip, n, nlev, nlevx
 
 1068     INTEGER, 
ALLOCATABLE, 
DIMENSION(:) :: index3d
 
 1069     REAL,
ALLOCATABLE, 
DIMENSION(:,:) :: fieldok
 
 1074       IF (
PRESENT(std_iff)) 
THEN 
 1086       DO iff=iff_beg, iff_end
 
 1094     IF (
SIZE(field,1)/=
klon) 
CALL abort_physic(
'iophy::histwrite3d',
'Field first DIMENSION not equal to klon',1)
 
 1096     if (nlev.eq.
klev+1) 
then 
 1102     CALL gather_omp(field,buffer_omp)
 
 1104     CALL grid1dto2d_mpi(buffer_omp,field3d)
 
 1110       IF (ok_all_xml) 
THEN 
 1113              write(
lunout,*)
'Dans iophy histwrite3D,var%name ',&
 
 1116           CALL xios_send_field(var%name, field3d(:,:,1:nlevx))
 
 1118         CALL abort_physic (
'iophy',
'cannot have ok_all_xml = .T. without CPP_XIOS defined' ,1)
 
 1123      DO iff=iff_beg, iff_end
 
 1128                   write(
lunout,*)
'Dans iophy, histwrite3D iff nlev klev firstx', &
 
 1129                                   iff,nlev,
klev, firstx                       
 
 1130                   write(
lunout,*)
'histwrite3d_phy: call xios_send_field for ', &
 
 1131                                   trim(var%name), 
' with iim jjm nlevx = ', &
 
 1134                 CALL xios_send_field(var%name, field3d(:,:,1:nlevx))
 
 1139                         ALLOCATE(index3d(
nbp_lon*jj_nb*nlev))
 
 1140                         ALLOCATE(fieldok(
nbp_lon*jj_nb,nlev))
 
 1142 #ifndef CPP_IOIPSL_NO_OUTPUT  
 1154                         ALLOCATE(index3d(
npstn*nlev))
 
 1155                         ALLOCATE(fieldok(
npstn,nlev))
 
 1160                                           fieldok(ip,n)=buffer_omp(
nptabij(ip),n)
 
 1166                                                 IF(
nptabij(ip).GE.klon_mpi_begin.AND. &
 
 1167                                                       nptabij(ip).LE.klon_mpi_end) 
THEN 
 1168                                                 fieldok(ip,n)=buffer_omp(
nptabij(ip)-klon_mpi_begin+1,n)
 
 1173 #ifndef CPP_IOIPSL_NO_OUTPUT  
 1190   SUBROUTINE histwrite2d_xios(field_name,field)
 
 1196   USE xios
, only: xios_send_field
 
 1201     CHARACTER(LEN=*), 
INTENT(IN) :: field_name
 
 1202     REAL, 
DIMENSION(:), 
INTENT(IN) :: field
 
 1204     REAL,
DIMENSION(klon_mpi) :: buffer_omp
 
 1205     INTEGER, 
allocatable, 
DIMENSION(:) :: index2d
 
 1206     REAL :: Field2d(
nbp_lon,jj_nb)
 
 1209     REAL, 
ALLOCATABLE, 
DIMENSION(:) :: fieldok
 
 1211     IF (
prt_level >= 10) 
WRITE(
lunout,*)
'Begin histrwrite2d_xios ',field_name
 
 1214     IF (
SIZE(field)/=
klon) 
CALL abort_physic(
'iophy::histwrite2d_xios',
'Field first DIMENSION not equal to klon',1)
 
 1216     CALL gather_omp(field,buffer_omp)    
 
 1218     CALL grid1dto2d_mpi(buffer_omp,field2d)
 
 1225         ALLOCATE(index2d(
nbp_lon*jj_nb))
 
 1226         ALLOCATE(fieldok(
nbp_lon*jj_nb))
 
 1229         CALL xios_send_field(field_name, field2d)
 
 1232         ALLOCATE(fieldok(
npstn))
 
 1233         ALLOCATE(index2d(
npstn))
 
 1237                 fieldok(ip)=buffer_omp(
nptabij(ip))
 
 1241                 print*,
'histwrite2d_xios is_sequential npstn ip namenptabij',
npstn,ip,field_name,
nptabij(ip)
 
 1242                 IF(
nptabij(ip).GE.klon_mpi_begin.AND. &
 
 1243                 nptabij(ip).LE.klon_mpi_end) 
THEN 
 1244                     fieldok(ip)=buffer_omp(
nptabij(ip)-klon_mpi_begin+1)
 
 1255   IF (
prt_level >= 10) 
WRITE(
lunout,*)
'End histrwrite2d_xios ',field_name
 
 1256   END SUBROUTINE histwrite2d_xios
 
 1260   SUBROUTINE histwrite3d_xios(field_name, field)
 
 1265   USE xios
, only: xios_send_field
 
 1271     CHARACTER(LEN=*), 
INTENT(IN) :: field_name
 
 1272     REAL, 
DIMENSION(:,:), 
INTENT(IN) :: field 
 
 1274     REAL,
DIMENSION(klon_mpi,SIZE(field,2)) :: buffer_omp
 
 1275     REAL :: Field3d(
nbp_lon,jj_nb,size(field,2))
 
 1276     INTEGER :: ip, n, nlev
 
 1277     INTEGER, 
ALLOCATABLE, 
DIMENSION(:) :: index3d
 
 1278     REAL,
ALLOCATABLE, 
DIMENSION(:,:) :: fieldok
 
 1280   IF (
prt_level >= 10) 
write(
lunout,*)
'Begin histrwrite3d_xios ',field_name
 
 1283     IF (
SIZE(field,1)/=
klon) 
CALL abort_physic(
'iophy::histwrite3d',
'Field first DIMENSION not equal to klon',1)
 
 1287     CALL gather_omp(field,buffer_omp)
 
 1289     CALL grid1dto2d_mpi(buffer_omp,field3d)
 
 1296         ALLOCATE(index3d(
nbp_lon*jj_nb*nlev))
 
 1297         ALLOCATE(fieldok(
nbp_lon*jj_nb,nlev))
 
 1298         CALL xios_send_field(field_name, field3d(:,:,1:nlev))
 
 1302         ALLOCATE(index3d(
npstn*nlev))
 
 1303         ALLOCATE(fieldok(
npstn,nlev))
 
 1308                     fieldok(ip,n)=buffer_omp(
nptabij(ip),n)
 
 1314                     IF(
nptabij(ip).GE.klon_mpi_begin.AND. &
 
 1315                     nptabij(ip).LE.klon_mpi_end) 
THEN 
 1316                         fieldok(ip,n)=buffer_omp(
nptabij(ip)-klon_mpi_begin+1,n)
 
 1326   IF (
prt_level >= 10) 
write(
lunout,*)
'End histrwrite3d_xios ',field_name
 
 1327   END SUBROUTINE histwrite3d_xios
 
!IM Implemente en modes sequentiel et parallele CALL rlon_glo CALL bcast(rlon_glo)!$OMP MASTER if(is_mpi_root) then!zstophy
 
integer, save phys_domain_id
 
character(len=20), dimension(nfiles), save phys_out_filenames
 
real, dimension(:), allocatable, save io_lat
 
subroutine histdef3d_old(iff, lpoint, flag_var, nomvar, titrevar, unitvar)
 
c c zjulian c cym CALL iim cym klev cym zjulian
 
subroutine init_iophy(lat, lon)
 
subroutine histdef2d(iff, var)
 
integer, dimension(nfiles), save nid_files
 
!$Header!integer nvarmx dtime
 
subroutine conf_physoutputs(nam_var, flag_var)
 
subroutine histwrite3d_phy_old(nid, lpoint, name, itau, field)
 
real, dimension(nfiles), save zoutm
 
subroutine histbeg_phyxios(name, itau0, zjulian, dtime, ffreq, lev, nhori, nid_day)
 
logical, save swaero_diag
 
subroutine histdef2d_old(iff, lpoint, flag_var, nomvar, titrevar, unitvar)
 
!$Id klon initialisation mois suivants day_rain itap ENDIF!Calcul fin de nday_rain calcul nday_rain itap DO i
 
logical, save vars_defined
 
integer, dimension(nfiles), save nhorim
 
!$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
 
logical, dimension(nfiles), save clef_stations
 
!IM Implemente en modes sequentiel et parallele CALL gather(rlat, rlat_glo) CALL bcast(rlat_glo) CALL gather(rlon
 
integer, dimension(nfiles), save levmin
 
subroutine set_itau_iophy(ito)
 
!FH On elimine toutes les clefs physiques dans la dynamique prt_level
 
integer, dimension(nfiles), save levmax
 
subroutine histwrite2d_phy(nid, lpoint, name, itau, field)
 
subroutine histbeg_phy(name, itau0, zjulian, dtime, nhori, nid_day)
 
integer, dimension(:), allocatable, save nptabij
 
real, dimension(:), allocatable, save io_lon
 
subroutine histwrite2d_phy_old(nid, lpoint, name, itau, field)
 
!$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
 
character(len=20), dimension(nfiles), save type_ecri
 
subroutine histbeg_phy_points(rlon, rlat, pim, tabij, ipt, jpt, plon, plat, plon_bounds, plat_bounds, nname, itau0, zjulian, dtime, nnhori, nnid_day)
 
c c $Id c nbregdyn DO klon c rlat(i) c ENDIF!lon c ENDIF!lat ENDIF!pctsrf ENDDO!klon ENDDO!nbregdyn cIM 190504 ENDIF!ok_regdyn cIM somme de toutes les nhistoW BEG IF(debut) THEN DO nreg
 
integer, parameter nfiles
 
character(len=20), dimension(nfiles), save type_ecri_files
 
subroutine gr_fi_ecrit(nfield, nlon, iim, jjmp1, fi, ecrit)
 
subroutine abort_physic(modname, message, ierr)
 
integer, dimension(nfiles), save lev_files
 
c c zjulian c cym CALL iim cym klev iim cym jjmp1 cym On stoke le fichier bilKP instantanne s jmax_ins print On stoke le fichier bilKP instantanne s s cym cym nid_bilKPins ENDIF c cIM BEG c cIM cf AM BEG region cym CALL histbeg("histbilKP_ins", iim, zx_lon(:, 1), cym.jjmp1, zx_lat(1,:), cym.imin_ins, imax_ins-imin_ins+1, cym.jmin_ins, jmax_ins-jmin_ins+1, cym.itau_phy, zjulian, dtime, cym.nhori, nid_bilKPins) CALL histbeg_phy("histbilKP_ins"
 
logical, dimension(nfiles), save clef_files
 
subroutine histdef3d(iff, var)
 
subroutine histwrite3d_phy(nid, lpoint, name, itau, field)
 
subroutine init_iophy_new(rlat, rlon)
 
logical, save is_sequential
 
integer, dimension(nfiles), save nvertm
 
c c $Id c nbregdyn DO klon c rlon(i)
 
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout