16 REAL,
ALLOCATABLE,
DIMENSION(:,:),
SAVE,
PRIVATE :: pctsrf
18 REAL,
ALLOCATABLE,
DIMENSION(:),
SAVE,
PRIVATE :: rugos
20 REAL,
ALLOCATABLE,
DIMENSION(:),
SAVE,
PRIVATE :: albedo
22 REAL,
ALLOCATABLE,
DIMENSION(:),
SAVE,
PRIVATE :: sst
24 LOGICAL,
SAVE :: read_continents=.FALSE.
44 INTEGER,
INTENT(IN) ::
itime
45 INTEGER,
INTENT(IN) :: jour
46 REAL ,
INTENT(IN) ::
dtime
50 REAL,
DIMENSION(klon,nbsrf),
INTENT(OUT) :: pctsrf_new
51 LOGICAL,
INTENT(OUT) :: is_modified
60 pctsrf_new(:,:) = pctsrf(:,:)
79 INTEGER,
INTENT(IN) ::
itime
80 INTEGER,
INTENT(IN) :: jour
81 REAL ,
INTENT(IN) ::
dtime
82 INTEGER,
INTENT(IN) :: knon
83 INTEGER,
DIMENSION(klon),
INTENT(IN) :: knindex
86 REAL,
DIMENSION(klon),
INTENT(OUT) :: rugos_out
87 REAL,
DIMENSION(klon),
INTENT(OUT) :: alb_out
92 LOGICAL :: is_modified
95 IF (type_ocean ==
'couple')
THEN
101 rugos_out(
i) = rugos(knindex(
i))
102 alb_out(
i) = albedo(knindex(
i))
115 INTEGER,
INTENT(IN) :: knon
116 INTEGER,
DIMENSION(klon),
INTENT(IN) :: knindex
117 REAL,
DIMENSION(klon),
INTENT(OUT) :: sst_out
122 sst_out(
i) = sst(knindex(
i))
151 include
"indicesol.h"
156 INTEGER,
INTENT(IN) ::
itime
157 INTEGER,
INTENT(IN) :: jour
158 REAL ,
INTENT(IN) ::
dtime
160 LOGICAL,
INTENT(OUT) :: is_modified
165 INTEGER,
SAVE :: lmt_pas
167 LOGICAL,
SAVE :: first_call=.true.
169 INTEGER,
SAVE :: jour_lu = -1
173 INTEGER :: nid, nvarid
175 INTEGER,
DIMENSION(2) :: start, epais
176 REAL,
DIMENSION(klon_glo,nbsrf) :: pct_glo
177 REAL,
DIMENSION(klon_glo) :: sst_glo
178 REAL,
DIMENSION(klon_glo) :: rug_glo
179 REAL,
DIMENSION(klon_glo) :: alb_glo
180 CHARACTER(len=20) :: modname=
'limit_read_mod'
191 lmt_pas = nint(86400./
dtime * 1.0)
194 IF ( type_ocean /=
'couple' )
THEN
195 ALLOCATE(pctsrf(klon,nbsrf), sst(klon), stat=ierr)
196 IF (ierr /= 0) CALL
abort_gcm(modname,
'PB in allocating pctsrf and sst',1)
199 IF ( .NOT. ok_veget )
THEN
200 ALLOCATE(rugos(klon), albedo(klon), stat=ierr)
201 IF (ierr /= 0) CALL
abort_gcm(modname,
'PB in allocating rugos and albedo',1)
213 is_modified = .false.
214 IF (mod(
itime-1, lmt_pas) == 0 .OR. jour_lu /= jour )
THEN
218 IF (is_mpi_root)
THEN
220 ierr = nf90_open(
'limit.nc', nf90_nowrite, nid)
221 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,&
222 'Pb d''ouverture du fichier de conditions aux limites',1)
236 IF ( type_ocean /=
'couple')
THEN
239 ierr = nf90_inq_varid(nid,
'FOCE', nvarid)
240 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Le champ <FOCE> est absent',1)
242 ierr = nf90_get_var(nid,nvarid,pct_glo(:,is_oce),start,epais)
243 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Lecture echouee pour <FOCE>' ,1)
246 ierr = nf90_inq_varid(nid,
'FSIC', nvarid)
247 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Le champ <FSIC> est absent',1)
249 ierr = nf90_get_var(nid,nvarid,pct_glo(:,is_sic),start,epais)
250 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Lecture echouee pour <FSIC>' ,1)
254 IF (read_continents .OR.
itime == 1)
THEN
257 ierr = nf90_inq_varid(nid,
'FTER', nvarid)
258 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Le champ <FTER> est absent',1)
260 ierr = nf90_get_var(nid,nvarid,pct_glo(:,is_ter),start,epais)
261 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Lecture echouee pour <FTER>',1)
264 ierr = nf90_inq_varid(nid,
'FLIC', nvarid)
265 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Le champ <FLIC> est absent',1)
267 ierr = nf90_get_var(nid,nvarid,pct_glo(:,is_lic),start,epais)
268 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Lecture echouee pour <FLIC>',1)
277 IF ( type_ocean /=
'couple')
THEN
279 ierr = nf90_inq_varid(nid,
'SST', nvarid)
280 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Le champ <SST> est absent',1)
282 ierr = nf90_get_var(nid,nvarid,sst_glo,start,epais)
283 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Lecture echouee pour <SST>',1)
292 IF (.NOT. ok_veget)
THEN
295 ierr = nf90_inq_varid(nid,
'ALB', nvarid)
296 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Le champ <ALB> est absent',1)
298 ierr = nf90_get_var(nid,nvarid,alb_glo,start,epais)
299 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Lecture echouee pour <ALB>',1)
302 ierr = nf90_inq_varid(nid,
'RUG', nvarid)
303 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Le champ <RUG> est absent',1)
305 ierr = nf90_get_var(nid,nvarid,rug_glo,start,epais)
306 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Lecture echouee pour <RUG>',1)
314 ierr = nf90_close(nid)
315 IF (ierr /= nf90_noerr) CALL
abort_gcm(modname,
'Pb when closing file', 1)
321 IF ( type_ocean /=
'couple')
THEN
323 CALL
scatter(pct_glo(:,is_oce),pctsrf(:,is_oce))
324 CALL
scatter(pct_glo(:,is_sic),pctsrf(:,is_sic))
325 IF (read_continents .OR.
itime == 1)
THEN
326 CALL
scatter(pct_glo(:,is_ter),pctsrf(:,is_ter))
327 CALL
scatter(pct_glo(:,is_lic),pctsrf(:,is_lic))
331 IF (.NOT. ok_veget)
THEN