6 SUBROUTINE init_isba_n (DTCO, DGU, UG, U, IM, DTZ, DST, SLT, SV, &
7 hprogram,hinit,oland_use, &
10 pzenith,pazim,psw_bands,pdir_alb,psca_alb, &
11 pemis,ptsrad, ptsurf, &
12 kyear, kmonth,kday, ptime, &
13 hatmfile,hatmfiletype, &
78 xdata_albnir_veg, xdata_albvis_veg, &
79 xdata_albuv_veg, xdata_rsmin, &
80 xdata_root_extinction,xdata_root_lin, &
81 xdata_rgl, xdata_cv, xdata_gamma, xdata_gmes, &
82 xdata_gc, xdata_bslai, xdata_sefold, xdata_laimin,&
83 xdata_dmax, xdata_stress, xdata_f2i, &
84 xdata_veg, xdata_green, xdata_z0, xdata_z0_o_z0h, &
85 xdata_emis_eco, xdata_wrmax_cf, &
86 xdata_ce_nitro,xdata_cf_nitro,xdata_cna_nitro, &
87 xdata_soilrc_so2, xdata_soilrc_o3, xdata_re25, &
88 xdata_gmes_st, xdata_bslai_st, xdata_sefold_st, &
89 xdata_gc_st, xdata_dmax_st
104 USE modi_init_io_surf_n
108 USE modi_default_isba
109 USE modi_default_ch_dep
110 USE modi_default_ch_bio_flux
111 USE modi_default_diag_isba
112 USE modi_default_crocus
113 USE modi_read_default_isba_n
114 USE modi_read_isba_conf_n
115 USE modi_read_prep_isba_snow
116 USE modi_read_prep_isba_carbon
118 USE modi_prep_ctrl_isba
119 USE modi_read_isba_date
120 USE modi_read_pgd_isba_n
121 USE modi_compute_isba_parameters
122 USE modi_read_nam_prep_isba_n
123 USE modi_ini_data_param
125 USE modi_set_surfex_filein
127 USE modi_end_io_surf_n
129 USE yomhook
,ONLY : lhook, dr_hook
130 USE parkind1
,ONLY : jprb
138 TYPE(isba_model_t
),
INTENT(INOUT) :: im
144 TYPE(dst_t),
INTENT(INOUT) :: dst
145 TYPE(slt_t),
INTENT(INOUT) :: slt
146 TYPE(sv_t),
INTENT(INOUT) :: sv
148 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
149 CHARACTER(LEN=3),
INTENT(IN) :: hinit
150 LOGICAL,
INTENT(IN) :: oland_use
151 INTEGER,
INTENT(IN) :: ki
152 INTEGER,
INTENT(IN) :: ksv
153 INTEGER,
INTENT(IN) :: ksw
154 CHARACTER(LEN=6),
DIMENSION(KSV),
INTENT(IN) :: hsv
155 REAL,
DIMENSION(KI),
INTENT(IN) :: pco2
156 REAL,
DIMENSION(KI),
INTENT(IN) :: prhoa
157 REAL,
DIMENSION(KI),
INTENT(IN) :: pzenith
158 REAL,
DIMENSION(KI),
INTENT(IN) :: pazim
159 REAL,
DIMENSION(KSW),
INTENT(IN) :: psw_bands
160 REAL,
DIMENSION(KI,KSW),
INTENT(OUT) :: pdir_alb
161 REAL,
DIMENSION(KI,KSW),
INTENT(OUT) :: psca_alb
162 REAL,
DIMENSION(KI),
INTENT(OUT) :: pemis
163 REAL,
DIMENSION(KI),
INTENT(OUT) :: ptsrad
164 REAL,
DIMENSION(KI),
INTENT(OUT) :: ptsurf
166 INTEGER,
INTENT(IN) :: kyear
167 INTEGER,
INTENT(IN) :: kmonth
168 INTEGER,
INTENT(IN) :: kday
169 REAL,
INTENT(IN) :: ptime
172 CHARACTER(LEN=28),
INTENT(IN) :: hatmfile
173 CHARACTER(LEN=6),
INTENT(IN) :: hatmfiletype
174 CHARACTER(LEN=2),
INTENT(IN) :: htest
180 REAL,
DIMENSION(KI) :: zco2
187 INTEGER :: isize_lmeb_patch
189 REAL(KIND=JPRB) :: zhook_handle
196 IF (lhook) CALL dr_hook(
'INIT_ISBA_N',0,zhook_handle)
199 IF (htest/=
'OK')
THEN
200 CALL
abor1_sfx(
'INIT_ISBAN: FATAL ERROR DURING ARGUMENT TRANSFER')
213 im%I%CROUGH,im%I%CRUNOFF,im%I%CALBEDO,im%I%CSCOND, &
214 im%I%CC1DRY, im%I%CSOILFRZ, im%I%CDIFSFCOND, im%I%CSNOWRES, &
215 im%I%CCPSURF, im%I%XCGMAX, im%I%XCDRAG, im%I%CKSAT, im%I%LSOC, &
216 im%I%CRAIN, im%I%CHORT, im%I%LGLACIER, im%I%LCANOPY_DRAG, &
217 im%I%LVEGUPD, im%I%LSPINUPCARBS, im%I%LSPINUPCARBW, &
218 im%I%XSPINMAXS, im%I%XSPINMAXW, im%I%XCO2_START, im%I%XCO2_END, &
219 im%I%NNBYEARSPINS, im%I%NNBYEARSPINW, im%I%LNITRO_DILU )
223 CALL
default_diag_isba(im%DGI%N2M,im%DGI%LSURF_BUDGET,im%DGI%L2M_MIN_ZS,im%DGI%LRAD_BUDGET, &
224 im%DGI%LCOEF,im%DGI%LSURF_VARS,im%DGEI%LSURF_EVAP_BUDGET, &
225 im%DGMI%LSURF_MISC_BUDGET,im%DGMI%LSURF_DIAG_ALBEDO, &
226 im%DGEI%LSURF_BUDGETC,im%DGMI%LSURF_MISC_DIF,im%DGI%LPATCH_BUDGET,&
227 im%DGI%LPGD,im%DGEI%LRESET_BUDGETC,im%DGEI%LWATER_BUDGET, &
230 CALL
default_crocus(im%I%LSNOWDRIFT,im%I%LSNOWDRIFT_SUBLIM,im%I%LSNOW_ABS_ZENITH,&
231 im%I%CSNOWMETAMO,im%I%CSNOWRAD)
244 hprogram,
'FULL ',
'ISBA ',
'READ ')
246 hprogram,
'VERSION',iversion,iresp)
258 IF (hinit==
'PRE')
THEN
265 IF (im%I%CRESPSL==
'CNT')
THEN
275 ELSEIF (hinit==
'ALL')
THEN
278 hprogram,
'NATURE',
'ISBA ',
'READ ')
284 hprogram,
'RESPSL',im%I%CRESPSL,iresp)
286 hprogram,
'NLITTER',im%I%NNLITTER,iresp)
288 hprogram,
'NLITTLEVS',im%I%NNLITTLEVS,iresp)
290 hprogram,
'NSOILCARB',im%I%NNSOILCARB,iresp)
291 IF(iversion>=7.AND.(im%I%LSPINUPCARBS.OR.im%I%LSPINUPCARBW))
THEN
293 hprogram,
'NBYEARSOLD',im%I%NNBYEARSOLD,iresp)
295 im%I%NNBYEARSOLD=nundef
313 im%I%TTIME%TDATE%YEAR = nundef
314 im%I%TTIME%TDATE%MONTH= nundef
315 im%I%TTIME%TDATE%DAY = nundef
316 im%I%TTIME%TIME = xundef
319 CALL
prep_ctrl_isba(im%DGI%N2M,im%DGI%LSURF_BUDGET,im%DGI%L2M_MIN_ZS,im%DGI%LRAD_BUDGET,&
320 im%DGI%LCOEF,im%DGI%LSURF_VARS,&
321 im%DGEI%LSURF_EVAP_BUDGET,im%DGMI%LSURF_MISC_BUDGET,im%DGEI%LSURF_BUDGETC, &
322 im%DGI%LPATCH_BUDGET,im%DGMI%LSURF_MISC_DIF,iluout )
325 hprogram,hinit,iluout,hatmfile,hatmfiletype,kyear,kmonth,kday,ptime,im%I%TTIME)
329 hprogram,
'NATURE',
'ISBA ',
'READ ')
331 hprogram,
'DTCUR',im%I%TTIME,iresp)
343 hprogram,
'NATURE',
'ISBA ',
'READ ')
349 CALL
read_pgd_isba_n(im%CHI, dtco, im%DTI, dtz, dgu, im%GB, im%IG, im%I, &
353 isize_lmeb_patch=count(im%I%LMEB_PATCH(:))
359 IF ( im%I%CPHOTO/=
'NON' .AND. im%I%NPATCH/=12 .AND. im%I%NPATCH/=19 )
THEN
360 CALL
abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND NPATCH')
363 IF (hinit==
'PRE' .AND. im%I%TSNOW%SCHEME.NE.
'3-L' .AND. im%I%TSNOW%SCHEME.NE.
'CRO' .AND. im%I%CISBA==
'DIF')
THEN
364 CALL
abor1_sfx(
"INIT_ISBAN: WITH CISBA = DIF, CSNOW MUST BE 3-L OR CRO")
366 IF ( im%I%CPHOTO/=
'LAI' .AND. im%I%CPHOTO/=
'LST' .AND. im%I%CPHOTO/=
'NIT' .AND. im%I%CPHOTO/=
'NCB' .AND. lagrip)
THEN
367 CALL
abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND LAGRIP')
369 IF ( im%I%CPHOTO/=
'NCB' .AND. im%I%CRESPSL==
'CNT')
THEN
370 CALL
abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND CRESPSL')
372 IF (hinit==
'PRE' .AND. isize_lmeb_patch>0 .AND. im%I%TSNOW%SCHEME.NE.
'3-L' .AND. im%I%TSNOW%SCHEME.NE.
'CRO')
THEN
373 CALL
abor1_sfx(
"INIT_ISBAN: WITH LMEB_PATCH = TRUE, CSNOW MUST BE 3-L OR CRO")
375 IF(im%I%CPHOTO/=
'NCB'.AND.im%I%LSPINUPCARBW)
THEN
376 CALL
abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND LSPINUPCARBW (if not NCB must be false)')
378 IF(im%I%CRESPSL/=
'CNT'.AND.im%I%LSPINUPCARBS)
THEN
379 CALL
abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CRESPSL AND LSPINUPCARBS (if not CNT must be false)')
381 IF(im%I%LSPINUPCARBW.AND.
REAL(im%i%nnbyearspinw)>
REAL(im%i%nnbyearspins)*0.5)then
382 WRITE(iluout,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
383 WRITE(iluout,*)
'INIT_ISBAN: INCONSISTENCY BETWEEN NNBYEARSPINW AND NNBYEARSPINS'
384 WRITE(iluout,*)
'NNBYEARSPINW MUST BE < TO 0.5 * NNBYEARSPINS'
385 WRITE(iluout,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
386 CALL
abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN NNBYEARSPINW AND NNBYEARSPINS')
388 IF(im%I%LSPINUPCARBS.AND.(im%I%XCO2_START==xundef.OR.im%I%XCO2_END==xundef))
THEN
389 WRITE(iluout,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
390 WRITE(iluout,*)
'INIT_ISBAN: INCONSISTENCY BETWEEN LSPINUPCARBS AND XCO2_START OR XCO2_END'
391 WRITE(iluout,*)
'FOR ISBA-CC SPINUP XCO2_START AND XCO2_END MUST BE DEFINED'
392 WRITE(iluout,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
393 CALL
abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN LSPINUPCARBS AND XCO2_START OR XCO2_END')
406 ispinend=im%I%NNBYEARSPINS-nint(im%I%NNBYEARSPINS*xspin_co2)
408 im%I%LAGRI_TO_GRASS = .false.
410 IF ( im%I%LSPINUPCARBS .AND. (im%I%NNBYEARSOLD <= ispinend) )
THEN
412 im%I%LAGRI_TO_GRASS = .true.
414 CALL
ini_data_param(dtco%XDATA_VEGTYPE, psurf=dtco%XDATA_NATURE, ph_tree=xdata_h_tree,plai=xdata_lai, &
415 palbnir_veg=xdata_albnir_veg, palbvis_veg=xdata_albvis_veg, &
416 palbuv_veg=xdata_albuv_veg, prsmin=xdata_rsmin, &
417 prgl=xdata_rgl, pcv=xdata_cv, pgamma=xdata_gamma, &
418 pgmes=xdata_gmes, pgc=xdata_gc, pbslai=xdata_bslai, &
419 psefold=xdata_sefold, plaimin_out=xdata_laimin, pdmax=xdata_dmax, &
420 pstress=xdata_stress, pf2i=xdata_f2i, pveg_out=xdata_veg, &
421 pgreen=xdata_green, pz0=xdata_z0, pz0_o_z0h=xdata_z0_o_z0h, &
422 pemis_eco=xdata_emis_eco, pwrmax_cf=xdata_wrmax_cf, &
423 proot_lin=xdata_root_lin, proot_extinction=xdata_root_extinction, &
424 psoilrc_so2=xdata_soilrc_so2, psoilrc_o3=xdata_soilrc_o3, pre25=xdata_re25, &
425 pce_nitro=xdata_ce_nitro,pcf_nitro=xdata_cf_nitro,pcna_nitro=xdata_cna_nitro, &
426 pgmes_st=xdata_gmes_st, pgc_st=xdata_gc_st, pbslai_st=xdata_bslai_st, &
427 psefold_st=xdata_sefold_st, pdmax_st=xdata_dmax_st, oagri_to_grass=im%I%LAGRI_TO_GRASS)
429 zco2(:) = prhoa(:) * im%I%XCO2_START * 1.e-6 * xmco2 / xmd
431 ELSEIF(im%I%LSPINUPCARBS .AND. (im%I%NNBYEARSOLD > ispinend) .AND. (im%I%NNBYEARSOLD <= im%I%NNBYEARSPINS) )
THEN
433 zspinco2 = im%I%XCO2_START + (im%I%XCO2_END-im%I%XCO2_START) *
REAL(IM%I%NNBYEARSOLD - ISPINEND) / &
434 REAL(im%i%nnbyearspins - ispinend)
436 zco2(:) = prhoa(:) * zspinco2 * 1.e-6 * xmco2 / xmd
452 IF(lcpl_gcm.AND.im%DGI%LSURF_BUDGET)
THEN
453 im%DGEI%LSURF_EVAP_BUDGET=.true.
458 IF (oland_use .OR. hinit==
'PGD')
THEN
459 IF (lhook) CALL dr_hook(
'INIT_ISBA_N',1,zhook_handle)
464 hprogram,hinit,oland_use, &
467 pzenith,psw_bands,pdir_alb,psca_alb, &
468 pemis,ptsrad,ptsurf, &
471 IF ( im%I%CSNOWMETAMO/=
"B92" )
THEN
475 IF ( im%I%CSNOWRAD==
"TAR" .OR. im%I%CSNOWRAD==
"TA1" .OR. im%I%CSNOWRAD==
"TA2" )
THEN
479 IF (lhook) CALL dr_hook(
'INIT_ISBA_N',1,zhook_handle)
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine read_isba_date(HPROGRAM, HINIT, KLUOUT, HATMFILE, HATMFILETYPE, KYEAR, KMONTH, KDAY, PTIME, TPTIME)
subroutine default_isba(PTSTEP, POUT_TSTEP, HROUGH, HRUNOFF, HALBEDO, HSCOND, HC1DRY, HSOILFRZ, HDIFSFCOND, HSNOWRES, HCPSURF, PCGMAX, PCDRAG, HKSAT, OSOC, HRAIN, HHORT, OGLACIER, OCANOPY_DRAG, OVEGUPD, OSPINUPCARBS, OSPINUPCARBW, PSPINMAXS, PSPINMAXW, PCO2_START, PCO2_END, KNBYEARSPINS, KNBYEARSPINW, ONITRO_DILU)
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine read_prep_isba_carbon(HPROGRAM, HRESPSL)
subroutine default_diag_isba(K2M, OSURF_BUDGET, O2M_MIN_ZS, ORAD_BUDGET, OCOEF, OSURF_VARS, OSURF_EVAP_BUDGET, OSURF_MISC_BUDGET, OSURF_DIAG_ALBEDO, OSURF_BUDGETC, OSURF_MISC_DIF, OPATCH_BUDGET, OPGD, ORESET_BUDGETC, OWATER_BUDGET, PDIAG_TSTEP)
subroutine read_isba_conf_n(CHI, DGEI, DGI, DGMI, I, HPROGRAM)
subroutine abor1_sfx(YTEXT)
subroutine read_nam_prep_isba_n(HPROGRAM)
subroutine ini_data_param(PTYPE, PSURF, PSURF2, PLAI, PH_TREE, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PRSMIN, PRGL, PCV, PGAMMA, PGMES, PGC, PBSLAI, PSEFOLD, PLAIMIN_IN, PLAIMIN_OUT, PDMAX, PSTRESS, PF2I, PVEG_IN, PVEG_OUT, PGREEN, PZ0, PZ0_O_Z0H, PEMIS_ECO, PWRMAX_CF, PROOT_LIN, PROOT_EXTINCTION, PSOILRC_SO2, PSOILRC_O3, PRE25, PCE_NITRO, PCF_NITRO, PCNA_NITRO, PGMES_ST, PGC_ST, PBSLAI_ST, PSEFOLD_ST, PDMAX_ST, PGNDLITTER, PZF_TALLVEG, PRGLGV, PGAMMAGV, PRSMINGV, PROOT_EXTINCTIONGV, PWRMAX_CFGV, PH_VEG, PLAIGV_IN, PLAIGV_OUT, PZ0LITTER, OAGRI_TO_GRASS)
subroutine read_default_isba_n(CHI, DGEI, DGI, DGMI, I, HPROGRAM)
subroutine read_pgd_isba_n(CHI, DTCO, DTI, DTZ, DGU, GB, IG, I, UG, U, SV, HPROGRAM, OLAND_USE)
subroutine default_ch_dep(HCH_DRY_DEP)
subroutine end_io_surf_n(HPROGRAM)
subroutine get_luout(HPROGRAM, KLUOUT)
subroutine read_prep_isba_snow(HPROGRAM, HSNOW, KSNOW_LAYER, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, OUNIF)
subroutine default_crocus(OSNOWDRIFT, OSNOWDRIFT_SUBLIM, OSNOW_ABS_ZENITH, HSNOWMETAMO, HSNOWRAD)
subroutine read_fz06(HFILE)
subroutine init_isba_n(DTCO, DGU, UG, U, IM, DTZ, DST, SLT, SV, HPROGRAM, HINIT, OLAND_USE, KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, PAZIM, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, KYEAR, KMONTH, KDAY, PTIME, HATMFILE, HATMFILETYPE, HTEST)
subroutine prep_ctrl_isba(K2M, OSURF_BUDGET, O2M_MIN_ZS, ORAD_BUDGET, OCOEF, OSURF_VARS, OSURF_EVAP_BUDGET, OSURF_MISC_BUDGET, OSURF_BUDGETC, OPATCH_BUDGET, OSURF_MISC_DIF, KLUOUT)
subroutine compute_isba_parameters(DTCO, DGU, UG, U, IM, DST, SLT, SV, HPROGRAM, HINIT, OLAND_USE, KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, HTEST)
subroutine default_ch_bio_flux(OCH_BIO_FLUX)