6 SUBROUTINE start_lake_of(KDAY, KMONTH, PLON, PLAT, PDEPTH, & ! IN
7 PT_SNOW, PT_ICE, PT_MNW, PT_WML, PT_BOT, PT_B1, PCT, & ! Lake variables
8 PH_SNOW, PH_ICE, PH_ML, PH_B1, PT_SFC)
67 INTEGER,
INTENT(IN) :: KDAY, &
69 REAL,
INTENT(IN) :: PLON, PLAT
71 REAL,
INTENT(IN) :: PDEPTH
72 REAL,
INTENT(OUT) :: PT_SNOW, &
91 REAL,
DIMENSION(1,1) :: ZWT_SNOW, ZWT_ICE, ZWT_MNW, ZWT_WML, ZWT_BOT, ZWT_B1, ZWCT, &
92 ZWH_SNOW, ZWH_ICE, ZWH_ML, ZWH_B1, ZWT_SFC
93 REAL :: ZFT_SNOW, ZFT_ICE, ZFT_MNW, ZFT_WML, ZFT_BOT, ZFT_B1, ZFCT, &
94 ZFH_SNOW, ZFH_ICE, ZFH_ML, ZFH_B1, ZFT_SFC
95 REAL,
DIMENSION(NGRADDEPTH_LTA) :: ZDISTD
96 REAL :: ZWLON, ZWLAT, ZWDEPTH
100 INTEGER :: ID_LAKELTA, ID_MONTH, &
101 ID_DEC, ID_LON, ID_LAT, ID_DEPTH, &
102 ID_T_SNOW, ID_T_ICE, ID_T_MNW, ID_T_WML, ID_T_BOT, ID_T_B1, ID_CT, &
103 ID_H_SNOW, ID_H_ICE, ID_H_ML, ID_H_B1, ID_T_SFC
104 INTEGER :: IDEC, IMONTH
105 INTEGER :: ILON, ILAT
107 INTEGER,
DIMENSION(1) :: ILOC_DEPTH
109 INTEGER :: IMONTHN, IDECN, ILONN, ILATN, IDEPTHN
110 INTEGER,
DIMENSION(5) :: NINDEX
111 REAL(KIND=JPRB) :: ZHOOK_HANDLE
118 IF(kday.LE.0 .OR. kday.GT.31)
CALL abor1_sfx(
"START_LAKE_OF: WRONG DAY NUMBER (!!!!)")
119 IF(kmonth.LE.0 .OR. kmonth.GT.12)
CALL abor1_sfx(
"START_LAKE_OF: WRONG MONTH NUMBER (!!!!)")
120 IF(plon.LT.-180. .OR. plon.GT.180.)
CALL abor1_sfx(
"START_LAKE_OF: WRONG LONGITUDE (!!!!)")
121 IF(plat.LT.-90. .OR. plat.GT.90.)
CALL abor1_sfx(
"START_LAKE_OF: WRONG LATITUDE (!!!!)")
141 ilon = nint(zwlon) +
nlong/2 + 1
147 CALL abor1_sfx(
"START_LAKE_OF: YOUR LAKE DEPTH IS TOO SMALL TO ACTIVATE CLI_LAKE IN SOME POINTS")
151 zwdepth = min(pdepth,50.)
153 iloc_depth = minloc(zdistd)
154 idepth = iloc_depth(1)
158 iret = nf90_open(
trim(adjustl(
clakelta)),nf90_nowrite,id_lakelta)
159 IF (iret.NE.0)
CALL abor1_sfx(
"START_LAKE_OF: WRONG OR NO LAKE DATA FILE")
163 iret = nf90_inq_dimid(id_lakelta,
"NMonth", id_month)
164 iret = nf90_inquire_dimension(id_lakelta, id_month, len=imonthn)
165 IF (imonthn.NE.12)
CALL abor1_sfx(
"START_LAKE_OF: NUMBER OF MONTHS IN THE LAKE FILE IS NOT 12????")
167 iret = nf90_inq_dimid(id_lakelta,
"NDec", id_dec)
168 iret = nf90_inquire_dimension(id_lakelta, id_dec, len=idecn)
169 IF (idecn.NE.3)
CALL abor1_sfx(
"START_LAKE_OF: NUMBER OF DECADES IN MONTH IN THE LAKE FILE IS NOT 3????")
171 iret = nf90_inq_dimid(id_lakelta,
"NLon", id_lon)
172 iret = nf90_inquire_dimension(id_lakelta, id_lon, len=ilonn)
173 IF (ilonn.NE.
nlong)
CALL abor1_sfx(
"START_LAKE_OF: WRONG NUMBER OF POINTS IN LONGITUDE IN THE LAKE FILE!")
175 iret = nf90_inq_dimid(id_lakelta,
"NLat", id_lat)
176 iret = nf90_inquire_dimension(id_lakelta, id_lat, len=ilatn)
177 IF (ilatn.NE.
nlatg)
CALL abor1_sfx(
"START_LAKE_OF: WRONG NUMBER OF POINTS IN LONGITUDE IN THE LAKE FILE!")
179 iret = nf90_inq_dimid(id_lakelta,
"NDepth", id_depth)
180 iret = nf90_inquire_dimension(id_lakelta, id_depth, len=idepthn)
181 IF (idepthn.NE.
ngraddepth_lta)
CALL abor1_sfx(
"START_LAKE_OF: WRONG NUMBER OF GRADATIONS IN DEPTH IN THE LAKE FILE!")
183 iret = nf90_inq_varid(id_lakelta,
"T_snow", id_t_snow)
184 iret = nf90_inq_varid(id_lakelta,
"T_ice", id_t_ice)
185 iret = nf90_inq_varid(id_lakelta,
"T_mnw", id_t_mnw)
186 iret = nf90_inq_varid(id_lakelta,
"T_wML", id_t_wml)
187 iret = nf90_inq_varid(id_lakelta,
"T_bot", id_t_bot)
188 iret = nf90_inq_varid(id_lakelta,
"T_B1", id_t_b1)
189 iret = nf90_inq_varid(id_lakelta,
"C_T", id_ct)
190 iret = nf90_inq_varid(id_lakelta,
"h_snow", id_h_snow)
191 iret = nf90_inq_varid(id_lakelta,
"h_ice", id_h_ice)
192 iret = nf90_inq_varid(id_lakelta,
"h_ML", id_h_ml)
193 iret = nf90_inq_varid(id_lakelta,
"H_B1", id_h_b1)
194 iret = nf90_inq_varid(id_lakelta,
"T_sfc", id_t_sfc)
204 iret = nf90_get_att(id_lakelta, id_t_snow,
'_FillValue',zft_snow)
205 iret = nf90_get_att(id_lakelta, id_t_ice,
'_FillValue',zft_ice)
206 iret = nf90_get_att(id_lakelta, id_t_mnw,
'_FillValue',zft_mnw)
207 iret = nf90_get_att(id_lakelta, id_t_wml,
'_FillValue',zft_wml)
208 iret = nf90_get_att(id_lakelta, id_t_bot,
'_FillValue',zft_bot)
209 iret = nf90_get_att(id_lakelta, id_t_b1,
'_FillValue',zft_b1)
210 iret = nf90_get_att(id_lakelta, id_ct,
'_FillValue',zfct)
211 iret = nf90_get_att(id_lakelta, id_h_snow,
'_FillValue',zfh_snow)
212 iret = nf90_get_att(id_lakelta, id_h_ice,
'_FillValue',zfh_ice)
213 iret = nf90_get_att(id_lakelta, id_h_ml,
'_FillValue',zfh_ml)
214 iret = nf90_get_att(id_lakelta, id_h_b1,
'_FillValue',zfh_b1)
215 iret = nf90_get_att(id_lakelta, id_t_snow,
'_FillValue',zft_sfc)
217 iret = nf90_get_var(id_lakelta, id_t_snow, zwt_snow, nindex)
218 iret = nf90_get_var(id_lakelta, id_t_ice, zwt_ice, nindex)
219 iret = nf90_get_var(id_lakelta, id_t_mnw, zwt_mnw, nindex)
220 iret = nf90_get_var(id_lakelta, id_t_wml, zwt_wml, nindex)
221 iret = nf90_get_var(id_lakelta, id_t_bot, zwt_bot, nindex)
222 iret = nf90_get_var(id_lakelta, id_t_b1, zwt_b1, nindex)
223 iret = nf90_get_var(id_lakelta, id_ct, zwct, nindex)
224 iret = nf90_get_var(id_lakelta, id_h_snow, zwh_snow, nindex)
225 iret = nf90_get_var(id_lakelta, id_h_ice, zwh_ice, nindex)
226 iret = nf90_get_var(id_lakelta, id_h_ml, zwh_ml, nindex)
227 iret = nf90_get_var(id_lakelta, id_h_b1, zwh_b1, nindex)
228 iret = nf90_get_var(id_lakelta, id_t_sfc, zwt_sfc, nindex)
232 iret = nf90_close(id_lakelta)
237 lexist=(zwt_snow(1,1).NE.zft_snow .AND. zwt_ice(1,1).NE.zft_ice .AND. zwt_mnw(1,1).NE.zft_mnw .AND. &
238 zwt_wml(1,1).NE.zft_wml .AND. zwt_bot(1,1).NE.zft_bot .AND. zwt_b1(1,1).NE.zft_b1 .AND. &
239 zwct(1,1).NE.zfct .AND. zwh_snow(1,1).NE.zfh_snow .AND. zwh_ice(1,1).NE.zfh_ice .AND. &
240 zwh_ml(1,1).NE.zfh_ml .AND. zwh_b1(1,1).NE.zfh_b1 .AND. zwt_sfc(1,1).NE.zft_sfc)
static const char * trim(const char *name, int *n)
character(len=80), parameter clakelta
subroutine start_lake_of(KDAY, KMONTH, PLON, PLAT, PDEPTH, PT_SNOW, PT_ICE, PT_MNW, PT_WML, PT_BOT, PT_B1, PCT, PH_SNOW, PH_ICE, PH_ML, PH_B1, PT_SFC)
subroutine abor1_sfx(YTEXT)
real, dimension(ngraddepth_lta), parameter xcentrgraddepth_lta
integer, parameter ngraddepth_lta
real, parameter xfirstlat