6 SUBROUTINE init_isba_n (DTCO, OREAD_BUDGETC, UG, U, USS, GCP, IM, DTZ,&
7 NDST, SLT, SV, HPROGRAM, HINIT, OLAND_USE, &
8 KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, &
9 PAZIM, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, &
10 PTSRAD, PTSURF, KYEAR, KMONTH, KDAY, PTIME, &
11 TPDATE_END, HATMFILE, HATMFILETYPE, HTEST )
93 USE modd_agri
, ONLY : lagrip
100 USE modd_co2v_par
, ONLY : xmco2, xspin_co2
103 USE modi_init_io_surf_n
107 USE modi_default_isba
108 USE modi_default_ch_dep
109 USE modi_default_ch_bio_flux
110 USE modi_default_diag_isba
111 USE modi_default_crocus
112 USE modi_read_default_isba_n
113 USE modi_read_isba_conf_n
114 USE modi_read_prep_isba_snow
115 USE modi_read_prep_isba_carbon
117 USE modi_prep_ctrl_isba
118 USE modi_read_isba_date
119 USE modi_read_pgd_isba_n
120 USE modi_compute_isba_parameters
121 USE modi_read_nam_prep_isba_n
122 USE modi_ini_data_param
124 USE modi_set_surfex_filein
126 USE modi_end_io_surf_n
138 LOGICAL,
INTENT(IN) :: OREAD_BUDGETC
141 TYPE(
sso_t),
INTENT(INOUT) :: USS
147 TYPE(
dst_np_t),
INTENT(INOUT) :: NDST
148 TYPE(
slt_t),
INTENT(INOUT) :: SLT
149 TYPE(
sv_t),
INTENT(INOUT) :: SV
151 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
152 CHARACTER(LEN=3),
INTENT(IN) :: HINIT
153 LOGICAL,
INTENT(IN) :: OLAND_USE
154 INTEGER,
INTENT(IN) :: KI
155 INTEGER,
INTENT(IN) :: KSV
156 INTEGER,
INTENT(IN) :: KSW
157 CHARACTER(LEN=6),
DIMENSION(KSV),
INTENT(IN) :: HSV
158 REAL,
DIMENSION(KI),
INTENT(IN) :: PCO2
159 REAL,
DIMENSION(KI),
INTENT(IN) :: PRHOA
160 REAL,
DIMENSION(KI),
INTENT(IN) :: PZENITH
161 REAL,
DIMENSION(KI),
INTENT(IN) :: PAZIM
162 REAL,
DIMENSION(KSW),
INTENT(IN) :: PSW_BANDS
163 REAL,
DIMENSION(KI,KSW),
INTENT(OUT) :: PDIR_ALB
164 REAL,
DIMENSION(KI,KSW),
INTENT(OUT) :: PSCA_ALB
165 REAL,
DIMENSION(KI),
INTENT(OUT) :: PEMIS
166 REAL,
DIMENSION(KI),
INTENT(OUT) :: PTSRAD
167 REAL,
DIMENSION(KI),
INTENT(OUT) :: PTSURF
169 INTEGER,
INTENT(IN) :: KYEAR
170 INTEGER,
INTENT(IN) :: KMONTH
171 INTEGER,
INTENT(IN) :: KDAY
172 REAL,
INTENT(IN) :: PTIME
174 TYPE(
date),
INTENT(INOUT) :: TPDATE_END
176 CHARACTER(LEN=28),
INTENT(IN) :: HATMFILE
177 CHARACTER(LEN=6),
INTENT(IN) :: HATMFILETYPE
178 CHARACTER(LEN=2),
INTENT(IN) :: HTEST
184 REAL,
DIMENSION(KI) :: ZCO2
191 INTEGER :: ISIZE_LMEB_PATCH
193 CHARACTER(LEN=3) :: YSNOW_SCHEME
194 INTEGER :: ISNOW_NLAYER, JP
196 REAL(KIND=JPRB) :: ZHOOK_HANDLE
206 IF (htest/=
'OK')
THEN 207 CALL abor1_sfx(
'INIT_ISBAN: FATAL ERROR DURING ARGUMENT TRANSFER')
220 im%O%CRUNOFF, im%O%CSCOND, &
221 im%O%CC1DRY, im%O%CSOILFRZ, im%O%CDIFSFCOND, im%O%CSNOWRES, &
222 im%O%CCPSURF, im%O%XCGMAX, im%O%XCDRAG, im%O%CKSAT, im%O%LSOC, &
223 im%O%CRAIN, im%O%CHORT, im%O%LGLACIER, im%O%LCANOPY_DRAG, &
224 im%O%LVEGUPD, im%O%LSPINUPCARBS, im%O%LSPINUPCARBW, &
225 im%O%XSPINMAXS, im%O%XSPINMAXW, im%O%XCO2_START, im%O%XCO2_END, &
226 im%O%NNBYEARSPINS, im%O%NNBYEARSPINW, im%O%LNITRO_DILU )
230 CALL default_diag_isba(im%ID%O%N2M, im%ID%O%LSURF_BUDGET, im%ID%O%L2M_MIN_ZS, im%ID%O%LRAD_BUDGET, &
231 im%ID%O%LCOEF, im%ID%O%LSURF_VARS, im%ID%DE%LSURF_EVAP_BUDGET, &
232 im%ID%DM%LSURF_MISC_BUDGET, im%ID%DM%LSURF_DIAG_ALBEDO, &
233 im%ID%O%LSURF_BUDGETC, im%ID%DM%LSURF_MISC_DIF, im%ID%O%LPATCH_BUDGET, &
234 im%ID%O%LPGD, im%ID%O%LRESET_BUDGETC, im%ID%DE%LWATER_BUDGET, &
235 im%ID%DM%LPROSNOW,im%ID%DM%LVOLUMETRIC_SNOWLIQ,im%ID%O%XDIAG_TSTEP )
237 CALL default_crocus(im%O%LSNOWDRIFT, im%O%LSNOWDRIFT_SUBLIM, im%O%LSNOW_ABS_ZENITH, &
238 im%O%CSNOWMETAMO, im%O%CSNOWRAD)
249 CALL read_surf(hprogram,
'VERSION',iversion,iresp)
261 IF (hinit==
'PRE')
THEN 268 IF (im%O%CRESPSL==
'CNT')
THEN 278 ELSEIF (hinit==
'ALL')
THEN 285 CALL read_surf(hprogram,
'RESPSL',im%O%CRESPSL,iresp)
286 CALL read_surf(hprogram,
'NLITTER',im%O%NNLITTER,iresp)
287 CALL read_surf(hprogram,
'NLITTLEVS',im%O%NNLITTLEVS,iresp)
288 CALL read_surf(hprogram,
'NSOILCARB',im%O%NNSOILCARB,iresp)
289 IF(iversion>=7.AND.(im%O%LSPINUPCARBS.OR.im%O%LSPINUPCARBW))
THEN 290 CALL read_surf(hprogram,
'NBYEARSOLD',im%O%NNBYEARSOLD,iresp)
300 IF (im%O%CISBA/=
"DIF")
THEN 315 im%S%TTIME%TDATE%YEAR =
nundef 316 im%S%TTIME%TDATE%MONTH=
nundef 317 im%S%TTIME%TDATE%DAY =
nundef 321 CALL prep_ctrl_isba(im%ID%O, im%ID%DE%LSURF_EVAP_BUDGET, im%ID%DM%LSURF_MISC_BUDGET, &
322 im%ID%DM%LSURF_MISC_DIF, iluout)
324 CALL read_isba_date(hprogram, hinit, iluout, hatmfile, hatmfiletype, kyear, kmonth, kday, ptime, im%S%TTIME)
325 tpdate_end = im%S%TTIME%TDATE
329 CALL read_surf(hprogram,
'DTCUR',im%S%TTIME,iresp)
346 CALL read_pgd_isba_n(im%CHI, dtco, im%DTV, dtz, im%GB, im%G, im%ISS, im%O, im%S, im%K, &
347 ug, u, uss, gcp, sv, hprogram, oland_use, tpdate_end)
349 IF (hinit==
'PRE')
THEN 350 DO jp = 1,im%O%NPATCH
351 im%NPE%AL(jp)%TSNOW%SCHEME = ysnow_scheme
352 im%NPE%AL(jp)%TSNOW%NLAYER = isnow_nlayer
356 isize_lmeb_patch=
count(im%O%LMEB_PATCH(:))
362 IF ( im%O%CPHOTO/=
'NON' .AND. im%O%NPATCH/=12 .AND. im%O%NPATCH/=19 )
THEN 363 CALL abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND NPATCH')
366 IF (hinit==
'PRE' .AND. ysnow_scheme.NE.
'3-L' .AND. ysnow_scheme.NE.
'CRO' .AND. im%O%CISBA==
'DIF')
THEN 367 CALL abor1_sfx(
"INIT_ISBAN: WITH CISBA = DIF, CSNOW MUST BE 3-L OR CRO")
369 IF ( im%O%CPHOTO/=
'NIT' .AND. im%O%CPHOTO/=
'NCB' .AND. lagrip)
THEN 370 CALL abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND LAGRIP')
372 IF ( im%O%CPHOTO/=
'NCB' .AND. im%O%CRESPSL==
'CNT')
THEN 373 CALL abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND CRESPSL')
375 IF (hinit==
'PRE' .AND. isize_lmeb_patch>0 .AND. ysnow_scheme.NE.
'3-L' .AND. ysnow_scheme.NE.
'CRO')
THEN 376 CALL abor1_sfx(
"INIT_ISBAN: WITH LMEB_PATCH = TRUE, CSNOW MUST BE 3-L OR CRO")
378 IF(im%O%CPHOTO/=
'NCB'.AND.im%O%LSPINUPCARBW)
THEN 379 CALL abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND LSPINUPCARBW (if not NCB must be false)')
381 IF(im%O%CRESPSL/=
'CNT'.AND.im%O%LSPINUPCARBS)
THEN 382 CALL abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN CRESPSL AND LSPINUPCARBS (if not CNT must be false)')
384 IF(im%O%LSPINUPCARBW.AND.
REAL(im%o%nnbyearspinw)>
REAL(im%o%nnbyearspins)*0.5)then
385 WRITE(iluout,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 386 WRITE(iluout,*)
'INIT_ISBAN: INCONSISTENCY BETWEEN NNBYEARSPINW AND NNBYEARSPINS' 387 WRITE(iluout,*)
'NNBYEARSPINW MUST BE < TO 0.5 * NNBYEARSPINS' 388 WRITE(iluout,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 389 CALL abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN NNBYEARSPINW AND NNBYEARSPINS')
391 IF(im%O%LSPINUPCARBS.AND.(im%O%XCO2_START==
xundef.OR.im%O%XCO2_END==
xundef))
THEN 392 WRITE(iluout,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 393 WRITE(iluout,*)
'INIT_ISBAN: INCONSISTENCY BETWEEN LSPINUPCARBS AND XCO2_START OR XCO2_END' 394 WRITE(iluout,*)
'FOR ISBA-CC SPINUP XCO2_START AND XCO2_END MUST BE DEFINED' 395 WRITE(iluout,*)
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' 396 CALL abor1_sfx(
'INIT_ISBAN: INCONSISTENCY BETWEEN LSPINUPCARBS AND XCO2_START OR XCO2_END')
409 ispinend=im%O%NNBYEARSPINS-nint(im%O%NNBYEARSPINS*xspin_co2)
411 im%O%LAGRI_TO_GRASS = .false.
413 IF ( im%O%LSPINUPCARBS .AND. (im%O%NNBYEARSOLD <= ispinend) )
THEN 415 im%O%LAGRI_TO_GRASS = .true.
432 zco2(:) = prhoa(:) * im%O%XCO2_START * 1.e-6 * xmco2 /
xmd 434 ELSEIF(im%O%LSPINUPCARBS .AND. (im%O%NNBYEARSOLD > ispinend) .AND. (im%O%NNBYEARSOLD <= im%O%NNBYEARSPINS) )
THEN 436 zspinco2 = im%O%XCO2_START + (im%O%XCO2_END-im%O%XCO2_START) *
REAL(IM%O%NNBYEARSOLD - ISPINEND) / &
437 REAL(im%o%nnbyearspins - ispinend)
439 zco2(:) = prhoa(:) * zspinco2 * 1.e-6 * xmco2 /
xmd 455 IF(
lcpl_gcm.AND.im%ID%O%LSURF_BUDGET)
THEN 456 im%ID%DE%LSURF_EVAP_BUDGET=.true.
461 IF (oland_use .OR. hinit==
'PGD')
THEN 467 im%O, im%DTV, im%SB, im%S, im%G, im%K, im%NK, &
468 im%NG, im%NP, im%NPE, im%NAG, im%NISS, im%ISS, &
469 im%NCHI, im%CHI, im%ID, im%GB, im%NGB, &
470 ndst, slt, sv, hprogram,hinit,oland_use, &
471 ki,ksv,ksw, hsv,zco2,prhoa, &
472 pzenith,psw_bands,pdir_alb,psca_alb, &
473 pemis,ptsrad,ptsurf,htest )
475 IF ( im%O%CSNOWMETAMO/=
"B92" )
THEN 479 IF ( im%O%CSNOWRAD==
"TAR" .OR. im%O%CSNOWRAD==
"TA1" .OR. im%O%CSNOWRAD==
"TA2" )
THEN 483 IF (hinit==
'ALL')
THEN 484 ysnow_scheme = im%NPE%AL(1)%TSNOW%SCHEME
485 isnow_nlayer = im%NPE%AL(1)%TSNOW%NLAYER
490 ALLOCATE(im%S%XWORK_WR(ki,im%O%NPATCH))
491 im%S%XWORK_WR(:,:) =
xundef 493 ALLOCATE(im%S%XWSN_WR(ki,isnow_nlayer,im%O%NPATCH))
494 ALLOCATE(im%S%XRHO_WR(ki,isnow_nlayer,im%O%NPATCH))
495 ALLOCATE(im%S%XALB_WR(ki,im%O%NPATCH))
496 IF (ysnow_scheme==
'3-L' .OR. ysnow_scheme==
'CRO')
THEN 497 ALLOCATE(im%S%XHEA_WR(ki,isnow_nlayer,im%O%NPATCH))
498 ALLOCATE(im%S%XAGE_WR(ki,isnow_nlayer,im%O%NPATCH))
499 IF (ysnow_scheme==
'CRO')
THEN 500 ALLOCATE(im%S%XSG1_WR(ki,isnow_nlayer,im%O%NPATCH))
501 ALLOCATE(im%S%XSG2_WR(ki,isnow_nlayer,im%O%NPATCH))
502 ALLOCATE(im%S%XHIS_WR(ki,isnow_nlayer,im%O%NPATCH))
504 ALLOCATE(im%S%XSG1_WR(0,0,1))
505 ALLOCATE(im%S%XSG2_WR(0,0,1))
506 ALLOCATE(im%S%XHIS_WR(0,0,1))
509 ALLOCATE(im%S%XHEA_WR(0,0,1))
510 ALLOCATE(im%S%XAGE_WR(0,0,1))
513 ALLOCATE(im%S%TDATE_WR(ki,im%O%NPATCH))
517 ALLOCATE(im%S%XWORK_WR(0,1))
519 ALLOCATE(im%S%XWSN_WR(0,0,1))
520 ALLOCATE(im%S%XRHO_WR(0,0,1))
521 ALLOCATE(im%S%XALB_WR(0,1))
522 ALLOCATE(im%S%XHEA_WR(0,0,1))
523 ALLOCATE(im%S%XAGE_WR(0,0,1))
524 ALLOCATE(im%S%XSG1_WR(0,0,1))
525 ALLOCATE(im%S%XSG2_WR(0,0,1))
526 ALLOCATE(im%S%XHIS_WR(0,0,1))
528 ALLOCATE(im%S%TDATE_WR(0,1))
real, dimension(:,:), allocatable xdata_ce_nitro
real, dimension(:,:), allocatable xdata_albnir_veg
real, dimension(:,:), allocatable xdata_sefold_st
real, dimension(:,:), allocatable xdata_root_lin
subroutine read_pgd_isba_n(CHI, DTCO, DTV, DTZ, GB, IG, ISS, IO,
real, dimension(:,:), allocatable xdata_albvis_veg
real, dimension(:,:), allocatable xdata_soilrc_so2
real, dimension(:,:,:), allocatable xdata_z0
real, dimension(:,:), allocatable xdata_rgl
real, dimension(:,:), allocatable xdata_gc
real, dimension(:,:), allocatable xdata_dmax
real, dimension(:,:), allocatable xdata_gmes_st
real, dimension(:,:), allocatable xdata_albuv_veg
subroutine set_surfex_filein(HPROGRAM, HMASK)
subroutine default_isba(PTSTEP, POUT_TSTEP,
subroutine read_prep_isba_carbon(HPROGRAM, HRESPSL)
subroutine read_default_isba_n(CHI, DE, DGO, DMI, IO, HPROGRAM)
real, dimension(:,:), allocatable xdata_gamma
real, dimension(:,:), allocatable xdata_laimin
real, dimension(:,:), allocatable xdata_gmes
real, dimension(:,:), allocatable xdata_cv
subroutine read_isba_conf_n(CHI, DE, DGO, DMI, IO, HPROGRAM)
subroutine prep_ctrl_isba(DGO, OSURF_EVAP_BUDGET, OSURF_MISC_BUDGET, OSURF_MISC_DIF, KLUOUT)
subroutine abor1_sfx(YTEXT)
real, dimension(:,:), allocatable xdata_z0_o_z0h
subroutine compute_isba_parameters(DTCO, OREAD_BUDGETC, UG, U, IO, DTI, SB, S, IG, K, NK, NIG, NP, NPE, NAG, NISS, ISS, NCHI, CHI, ID, GB, NGB, NDST, SLT, SV, HPROGRAM, HINIT, OLAND_USE, KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, HTEST)
real, dimension(:,:), allocatable xdata_bslai
real, dimension(:,:), allocatable xdata_dmax_st
subroutine read_nam_prep_isba_n(HPROGRAM)
subroutine default_diag_isba(K2M, OSURF_BUDGET, O2M_MIN_ZS, ORAD_BUDG
real, dimension(:,:), allocatable xdata_rsmin
subroutine read_prep_isba_snow(HPROGRAM, HSNOW, KSNOW_LAYER, HFILE, HF
real, dimension(:,:), allocatable xdata_bslai_st
subroutine read_isba_date( HPROGRAM, HINIT, KLUOUT, HATMFILE, HATMFILE
integer, parameter nundef
real, dimension(:,:), allocatable xdata_cf_nitro
subroutine read_fz06(HFILE)
real, dimension(:,:), allocatable xdata_wrmax_cf
subroutine default_ch_dep(HCH_DRY_DEP)
subroutine default_crocus(OSNOWDRIFT, OSNOWDRIFT_SUBLIM, OSNOW_ABS_Z
subroutine end_io_surf_n(HPROGRAM)
subroutine get_luout(HPROGRAM, KLUOUT)
real, dimension(:,:,:), allocatable xdata_veg
real, dimension(:,:), allocatable xdata_h_tree
real, dimension(:,:,:), allocatable xdata_green
real, dimension(:,:,:), allocatable xdata_lai
subroutine init_isba_n(DTCO, OREAD_BUDGETC, UG, U, USS, GCP, IM, DTZ, NDST, 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, TPDATE_END, HATMFILE, HATMFILETYPE, HTEST)
real, dimension(:,:), allocatable xdata_soilrc_o3
real, dimension(:,:), allocatable xdata_gc_st
real, dimension(:,:), allocatable xdata_re25
real, dimension(:,:), allocatable xdata_cna_nitro
real, dimension(:,:), allocatable xdata_stress
real, dimension(:,:), allocatable xdata_f2i
real, dimension(:,:,:), allocatable xdata_emis_eco
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
real, dimension(:,:), allocatable xdata_sefold
real, dimension(:,:), allocatable xdata_root_extinction
subroutine ini_data_param(PLAI, PH_TREE, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PR
subroutine default_ch_bio_flux(OCH_BIO_FLUX)