7 lmt_sst_p, pctsrf_new_p)
40 INTEGER,
INTENT(IN) ::
itime
41 INTEGER,
INTENT(IN) :: jour
42 INTEGER,
INTENT(IN) :: knon
43 INTEGER,
DIMENSION(klon_loc),
INTENT(IN) :: knindex
44 REAL ,
INTENT(IN) ::
dtime
45 LOGICAL,
INTENT(IN) :: debut
49 REAL,
INTENT(OUT),
DIMENSION(klon_loc) :: lmt_sst_p
50 REAL,
INTENT(OUT),
DIMENSION(klon_loc,nbsrf) :: pctsrf_new_p
56 INTEGER,
SAVE :: lmt_pas
59 LOGICAL,
SAVE :: deja_lu
61 INTEGER,
SAVE :: jour_lu
63 CHARACTER (len = 20),
SAVE :: fich =
'limit.nc'
65 LOGICAL,
SAVE :: newlmt = .true.
67 LOGICAL,
SAVE :: check = .
false.
69 REAL,
ALLOCATABLE ,
SAVE,
DIMENSION(:) :: sst_lu_p
71 REAL,
ALLOCATABLE ,
SAVE,
DIMENSION(:,:) :: pct_tmp_p
76 INTEGER :: nid, nvarid
79 INTEGER,
DIMENSION(2) :: start, epais
80 CHARACTER (len = 20) :: modname =
'interfoce_lim'
81 CHARACTER (len = 80) :: abort_message
82 REAL,
DIMENSION(klon_glo,nbsrf) :: pctsrf_new
83 REAL,
DIMENSION(klon_glo,nbsrf) :: pct_tmp
84 REAL,
DIMENSION(klon_glo) :: sst_lu
85 REAL,
DIMENSION(klon_glo) :: nat_lu
94 IF (debut .AND. .NOT.
ALLOCATED(sst_lu_p))
THEN
95 lmt_pas = nint(86400./
dtime * 1.0)
97 ALLOCATE(sst_lu_p(klon_loc))
98 ALLOCATE(pct_tmp_p(klon_loc,nbsrf))
101 IF ((jour - jour_lu) /= 0) deja_lu = .
false.
103 IF (check)
WRITE(*,*) modname,
' :: jour, jour_lu, deja_lu', jour, jour_lu, deja_lu
104 IF (check)
WRITE(*,*) modname,
' :: itime, lmt_pas ',
itime, lmt_pas,
dtime
111 IF (mod(
itime-1, lmt_pas) == 0 .AND. .NOT. deja_lu)
THEN
114 IF (is_mpi_root)
THEN
117 ierr = nf_open(fich, nf_nowrite,nid)
118 IF (ierr.NE.nf_noerr)
THEN
119 abort_message =
'Pb d''ouverture du fichier de conditions aux limites'
134 ierr = nf_inq_varid(nid,
'FOCE', nvarid)
135 IF (ierr /= nf_noerr)
THEN
136 abort_message =
'Le champ <FOCE> est absent'
140 ierr = nf_get_vara_double(nid,nvarid,start,epais,pct_tmp(1,is_oce))
142 ierr = nf_get_vara_real(nid,nvarid,start,epais,pct_tmp(1,is_oce))
144 IF (ierr /= nf_noerr)
THEN
145 abort_message =
'Lecture echouee pour <FOCE>'
151 ierr = nf_inq_varid(nid,
'FSIC', nvarid)
152 IF (ierr /= nf_noerr)
THEN
153 abort_message =
'Le champ <FSIC> est absent'
157 ierr = nf_get_vara_double(nid,nvarid,start,epais,pct_tmp(1,is_sic))
159 ierr = nf_get_vara_real(nid,nvarid,start,epais,pct_tmp(1,is_sic))
161 IF (ierr /= nf_noerr)
THEN
162 abort_message =
'Lecture echouee pour <FSIC>'
168 ierr = nf_inq_varid(nid,
'FTER', nvarid)
169 IF (ierr /= nf_noerr)
THEN
170 abort_message =
'Le champ <FTER> est absent'
174 ierr = nf_get_vara_double(nid,nvarid,start,epais,pct_tmp(1,is_ter))
176 ierr = nf_get_vara_real(nid,nvarid,start,epais,pct_tmp(1,is_ter))
178 IF (ierr /= nf_noerr)
THEN
179 abort_message =
'Lecture echouee pour <FTER>'
185 ierr = nf_inq_varid(nid,
'FLIC', nvarid)
186 IF (ierr /= nf_noerr)
THEN
187 abort_message =
'Le champ <FLIC> est absent'
191 ierr = nf_get_vara_double(nid,nvarid,start,epais,pct_tmp(1,is_lic))
193 ierr = nf_get_vara_real(nid,nvarid,start,epais,pct_tmp(1,is_lic))
195 IF (ierr /= nf_noerr)
THEN
196 abort_message =
'Lecture echouee pour <FLIC>'
202 ierr = nf_inq_varid(nid,
'NAT', nvarid)
203 IF (ierr /= nf_noerr)
THEN
204 abort_message =
'Le champ <NAT> est absent'
208 ierr = nf_get_vara_double(nid,nvarid,start,epais, nat_lu)
210 ierr = nf_get_vara_real(nid,nvarid,start,epais, nat_lu)
212 IF (ierr /= nf_noerr)
THEN
213 abort_message =
'Lecture echouee pour <NAT>'
222 pct_tmp(
ii,nint(nat_lu(
ii)) + 1) = 1.
229 pctsrf_new(:,2)= pct_tmp(:,1)
230 pctsrf_new(:,1)= pct_tmp(:,2)
236 ierr = nf_inq_varid(nid,
'SST', nvarid)
237 IF (ierr /= nf_noerr)
THEN
238 abort_message =
'Le champ <SST> est absent'
242 ierr = nf_get_vara_double(nid,nvarid,start,epais, sst_lu)
244 ierr = nf_get_vara_real(nid,nvarid,start,epais, sst_lu)
246 IF (ierr /= nf_noerr)
THEN
247 abort_message =
'Lecture echouee pour <SST>'
267 CALL
scatter(pct_tmp(:,is_oce),pct_tmp_p(:,is_oce))
268 CALL
scatter(pct_tmp(:,is_sic),pct_tmp_p(:,is_sic))
277 lmt_sst_p = 999999999.
280 lmt_sst_p(
ii) = sst_lu_p(knindex(
ii))
284 pctsrf_new_p(
ii,is_oce)=pct_tmp_p(
ii,is_oce)
285 pctsrf_new_p(
ii,is_sic)=pct_tmp_p(
ii,is_sic)