3 SUBROUTINE limit_slab(itime, dtime, jour, lmt_bils, diff_sst, diff_siv)
17 INTEGER,
INTENT(IN) :: itime
18 INTEGER,
INTENT(IN) :: jour
19 REAL ,
INTENT(IN) :: dtime
20 REAL,
DIMENSION(klon),
INTENT(OUT) :: lmt_bils, diff_sst, diff_siv
24 REAL,
DIMENSION(:),
ALLOCATABLE,
SAVE :: bils_save, diff_sst_save
25 REAL,
DIMENSION(:),
ALLOCATABLE,
SAVE :: diff_siv_save
31 INTEGER :: nvarid, nid, ierr, i
32 INTEGER,
DIMENSION(2) :: start, epais
33 REAL,
DIMENSION(klon_glo):: bils_glo, sst_l_glo, sst_lp1_glo, diff_sst_glo
34 REAL,
DIMENSION(klon_glo):: siv_l_glo, siv_lp1_glo, diff_siv_glo
35 CHARACTER (len = 20) :: modname =
'limit_slab'
36 LOGICAL :: read_bils,read_sst,read_siv
42 lmt_pas = nint(86400./dtime)
45 IF (mod(itime-1, lmt_pas) == 0)
THEN
48 print*,
'in limit_slab time to read, itime=',itime
53 ierr = nf90_open(
'limit_slab.nc', nf90_nowrite, nid)
54 IF (ierr /= nf90_noerr)
THEN
72 ierr = nf90_inq_varid(nid,
'BILS_OCE', nvarid)
73 IF (ierr /= nf90_noerr)
THEN
76 ierr = nf90_get_var(nid,nvarid,bils_glo,start,epais)
77 IF (ierr /= nf90_noerr) read_bils=.
false.
80 ierr = nf90_inq_varid(nid,
'SST', nvarid)
81 IF (ierr /= nf90_noerr)
THEN
84 ierr = nf90_get_var(nid,nvarid,sst_l_glo,start,epais)
85 IF (ierr /= nf90_noerr) read_sst=.
false.
88 IF (start(2) > 360) start(2)=1
89 ierr = nf90_get_var(nid,nvarid,sst_lp1_glo,start,epais)
90 IF (ierr /= nf90_noerr) read_sst=.
false.
94 ierr = nf90_inq_varid(nid,
'SICV', nvarid)
95 IF (ierr /= nf90_noerr)
THEN
99 ierr = nf90_get_var(nid,nvarid,siv_l_glo,start,epais)
100 IF (ierr /= nf90_noerr) read_siv=.
false.
103 IF (start(2) > 360) start(2)=1
104 ierr = nf90_get_var(nid,nvarid,siv_lp1_glo,start,epais)
105 IF (ierr /= nf90_noerr) read_siv=.
false.
112 ierr = nf90_close(nid)
113 IF (ierr /= nf90_noerr)
CALL abort_physic(modname,
'Pb when closing file', 1)
118 diff_sst_glo(i) = sst_lp1_glo(i) - sst_l_glo(i)
124 diff_siv_glo(i) = siv_lp1_glo(i) - siv_l_glo(i)
131 IF (.NOT.
ALLOCATED(bils_save))
THEN
132 ALLOCATE(bils_save(
klon), diff_sst_save(
klon), diff_siv_save(
klon), stat=ierr)
133 IF (ierr /= 0)
CALL abort_physic(
'limit_slab',
'pb in allocation',1)
138 CALL scatter(bils_glo, bils_save)
143 CALL scatter(diff_sst_glo, diff_sst_save)
148 CALL scatter(diff_siv_glo, diff_siv_save)
155 lmt_bils(:) = bils_save(:)
156 diff_sst(:) = diff_sst_save(:)
157 diff_siv(:) = diff_siv_save(:)
subroutine limit_slab(itime, dtime, jour, lmt_bils, diff_sst, diff_siv)
!$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
!$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 abort_physic(modname, message, ierr)