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)
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)
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
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout