7 IO, S, NP, NPE, KI, HPROGRAM, OLAND_USE)
68 USE modd_assim
, ONLY : lassim, cassim, cassim_isba, nie, nens, &
69 xaddtimecorr, lens_gen, nvar
73 USE modi_write_field_1d_patch
75 USE modi_writesurf_gr_snow
76 USE modi_allocate_gr_snow
77 USE modi_dealloc_gr_snow
87 CHARACTER(LEN=*),
DIMENSION(:),
INTENT(IN) :: HSELECT
88 LOGICAL,
INTENT(IN) :: OSNOWDIMNC
91 TYPE(
dst_np_t),
INTENT(INOUT) :: NDST
97 INTEGER,
INTENT(IN) :: KI
99 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
100 LOGICAL,
INTENT(IN) :: OLAND_USE
106 CHARACTER(LEN=12) :: YRECFM
107 CHARACTER(LEN=4 ) :: YLVL
108 CHARACTER(LEN=3 ) :: YVAR
109 CHARACTER(LEN=100):: YCOMMENT
110 CHARACTER(LEN=25) :: YFORM
111 CHARACTER(LEN=2) :: YPAT
113 INTEGER :: JJ, JL, JP, JNB, JNL, JNS, JNLV
116 INTEGER :: ISIZE_LMEB_PATCH
119 REAL(KIND=JPRB) :: ZHOOK_HANDLE
126 IF (
lhook)
CALL dr_hook(
'WRITESURF_ISBA_N',0,zhook_handle)
131 iwork=io%NTEMPLAYER_ARP
132 ELSEIF(io%CISBA==
'DIF')
THEN 133 iwork=io%NGROUND_LAYER
139 WRITE(ylvl,
'(I4)') jl
140 yrecfm=
'TG'//adjustl(ylvl(:len_trim(ylvl)))
142 IF (jl >= 10) yform=
'(A6,I2.2,A4)' 143 WRITE(ycomment,fmt=yform)
'X_Y_TG',jl,
' (K)' 146 np%AL(jp)%NR_P,npe%AL(jp)%XTG(:,jl),ki,s%XWORK_WR)
152 DO jl=1,io%NGROUND_LAYER
153 WRITE(ylvl,
'(I4)') jl
154 yrecfm=
'WG'//adjustl(ylvl(:len_trim(ylvl)))
156 IF (jl >= 10) yform=
'(A6,I2.2,A8)' 157 WRITE(ycomment,fmt=yform)
'X_Y_WG',jl,
' (m3/m3)' 160 np%AL(jp)%NR_P,npe%AL(jp)%XWG(:,jl),ki,s%XWORK_WR)
166 IF(io%CISBA==
'DIF')
THEN 167 iwork=io%NGROUND_LAYER
173 WRITE(ylvl,
'(I4)') jl
174 yrecfm=
'WGI'//adjustl(ylvl(:len_trim(ylvl)))
176 IF (jl >= 10) yform=
'(A7,I2.2,A8)' 177 WRITE(ycomment,yform)
'X_Y_WGI',jl,
' (m3/m3)' 180 np%AL(jp)%NR_P,npe%AL(jp)%XWGI(:,jl),ki,s%XWORK_WR)
187 ycomment=
'X_Y_WR (kg/m2)' 190 np%AL(jp)%NR_P,npe%AL(jp)%XWR(:),ki,s%XWORK_WR)
196 ycomment=
'LGLACIER key for external prep' 197 CALL write_surf(hselect,hprogram,yrecfm,io%LGLACIER,iresp,hcomment=ycomment
201 ycomment=
'X_Y_ICE_STO (kg/m2)' 204 np%AL(jp)%NR_P,npe%AL(jp)%XICE_STO(:),ki,s%XWORK_WR)
210 IF (io%CPHOTO/=
'NON' .AND. io%CPHOTO/=
'AST')
THEN 214 ycomment=
'X_Y_LAI (m2/m2)' 217 np%AL(jp)%NR_P,npe%AL(jp)%XLAI(:),ki,s%XWORK_WR)
222 IF (
trim(cassim_isba)==
"ENKF" .AND. (lassim .OR. nie/=0) )
THEN 224 IF ( xaddtimecorr(jvar)>0. )
THEN 225 WRITE(yvar,
'(I3)') jvar
226 ycomment =
'Red_Noise_Enkf' 227 yrecfm=
'RD_NS'//adjustl(yvar(:len_trim(yvar)))
230 np%AL(jp)%NR_P,np%AL(jp)%XRED_NOISE(:,jvar),ki,s%XWORK_WR
246 IF(io%CISBA==
'DIF')
THEN 249 ycomment=
'SOC key for external prep' 250 CALL write_surf(hselect,hprogram,yrecfm,io%LSOC,iresp,hcomment=ycomment
255 ycomment=
'LTEMP_ARP key for external prep' 256 CALL write_surf(hselect,hprogram,yrecfm,io%LTEMP_ARP,iresp,hcomment=ycomment
260 ycomment=
'NTEMPLAYER_ARP for external prep' 261 CALL write_surf(hselect,hprogram,yrecfm,io%NTEMPLAYER_ARP,iresp,hcomment
272 isize_lmeb_patch=
count(io%LMEB_PATCH(:))
274 IF (isize_lmeb_patch>0)
THEN 279 ycomment=
'X_Y_WRL (kg/m2)' 282 np%AL(jp)%NR_P,npe%AL(jp)%XWRL(:),ki,s%XWORK_WR)
288 ycomment=
'X_Y_WRLI (kg/m2)' 291 np%AL(jp)%NR_P,npe%AL(jp)%XWRLI(:),ki,s%XWORK_WR)
297 ycomment=
'X_Y_WRVN (kg/m2)' 300 np%AL(jp)%NR_P,npe%AL(jp)%XWRVN(:),ki,s%XWORK_WR)
307 ycomment=
'X_Y_TV (K)' 310 np%AL(jp)%NR_P,npe%AL(jp)%XTV(:),ki,s%XWORK_WR)
316 ycomment=
'X_Y_TL (K)' 319 np%AL(jp)%NR_P,npe%AL(jp)%XTL(:),ki,s%XWORK_WR)
325 ycomment=
'X_Y_TC (K)' 328 np%AL(jp)%NR_P,npe%AL(jp)%XTC(:),ki,s%XWORK_WR)
334 ycomment=
'X_Y_QC (kg/kg)' 337 np%AL(jp)%NR_P,npe%AL(jp)%XQC(:),ki,s%XWORK_WR)
351 ycomment=
'fraction for each patch (-)' 354 np%AL(jp)%NR_P,np%AL(jp)%XPATCH(:),ki,s%XWORK_WR)
360 ycomment=
'X_TSRAD_NAT (K)' 361 CALL write_surf(hselect,hprogram,yrecfm,s%XTSRAD_NAT(:),iresp,hcomment=ycomment
366 ycomment=
'X_Y_RESA (s/m)' 369 np%AL(jp)%NR_P,npe%AL(jp)%XRESA(:),ki,s%XWORK_WR)
376 DO jl=1,io%NGROUND_LAYER
377 WRITE(ylvl,
'(I4)') jl
379 IF (jl >= 10) yform=
'(A6,I2.2,A8)' 381 yrecfm=
'OLD_DG'//adjustl(ylvl(:len_trim(ylvl)))
382 WRITE(ycomment,fmt=yform)
'X_Y_OLD_DG',jl,
' (m)' 384 yrecfm=
'DG'//adjustl(ylvl(:len_trim(ylvl)))
385 WRITE(ycomment,fmt=yform)
'X_Y_DG',jl,
' (m)' 389 np%AL(jp)%NR_P,np%AL(jp)%XDG(:,jl),ki,s%XWORK_WR)
397 IF (io%CPHOTO/=
'NON')
THEN 399 ycomment=
'X_Y_AN (kgCO2/kgair m/s)' 402 np%AL(jp)%NR_P,npe%AL(jp)%XAN(:),ki,s%XWORK_WR)
406 ycomment=
'X_Y_ANDAY (kgCO2/m2/day)' 409 np%AL(jp)%NR_P,npe%AL(jp)%XANDAY(:),ki,s%XWORK_WR)
413 ycomment=
'X_Y_ANFM (kgCO2/kgair m/s)' 416 np%AL(jp)%NR_P,npe%AL(jp)%XANFM(:),ki,s%XWORK_WR)
420 ycomment=
'X_Y_LE_AGS (W/m2)' 423 np%AL(jp)%NR_P,npe%AL(jp)%XLE(:),ki,s%XWORK_WR)
428 IF (io%CPHOTO==
'NIT' .OR. io%CPHOTO==
'NCB')
THEN 430 DO jnb=1,io%NNBIOMASS
431 WRITE(ylvl,
'(I1)') jnb
432 yrecfm=
'BIOMA'//adjustl(ylvl(:len_trim(ylvl)))
433 yform=
'(A11,I1.1,A10)' 434 WRITE(ycomment,fmt=yform)
'X_Y_BIOMASS',jnb,
' (kgDM/m2)' 437 np%AL(jp)%NR_P,npe%AL(jp)%XBIOMASS(:,jnb),ki,s%XWORK_WR
442 DO jnb=2,io%NNBIOMASS
443 WRITE(ylvl,
'(I1)') jnb
444 yrecfm=
'RESPI'//adjustl(ylvl(:len_trim(ylvl)))
445 yform=
'(A16,I1.1,A10)' 446 WRITE(ycomment,fmt=yform)
'X_Y_RESP_BIOMASS',jnb,
' (kg/m2/s)' 449 np%AL(jp)%NR_P,npe%AL(jp)%XRESP_BIOMASS(:,jnb),ki,s%XWORK_WR
459 CALL write_surf(hselect,hprogram,yrecfm,io%CRESPSL,iresp,hcomment=ycomment
463 CALL write_surf(hselect,hprogram,yrecfm,io%NNLITTER,iresp,hcomment=ycomment
467 CALL write_surf(hselect,hprogram,yrecfm,io%NNLITTLEVS,iresp,hcomment=ycomment
471 CALL write_surf(hselect,hprogram,yrecfm,io%NNSOILCARB,iresp,hcomment=ycomment
473 IF(io%LSPINUPCARBS.OR.io%LSPINUPCARBW)
THEN 476 CALL write_surf(hselect,hprogram,yrecfm,io%NNBYEARSOLD,iresp,hcomment=ycomment
479 IF (io%CRESPSL==
'CNT')
THEN 482 DO jnlv=1,io%NNLITTLEVS
483 WRITE(ylvl,
'(I1,A1,I1)') jnl,
'_',jnlv
484 yrecfm=
'LITTER'//adjustl(ylvl(:len_trim(ylvl)))
485 yform=
'(A10,I1.1,A1,I1.1,A8)' 486 WRITE(ycomment,fmt=yform)
'X_Y_LITTER',jnl,
' ',jnlv,
' (gC/m2)' 489 np%AL(jp)%NR_P,npe%AL(jp)%XLITTER(:,jnl,jnlv),ki
494 DO jns=1,io%NNSOILCARB
495 WRITE(ylvl,
'(I4)') jns
496 yrecfm=
'SOILCARB'//adjustl(ylvl(:len_trim(ylvl)))
498 WRITE(ycomment,fmt=yform)
'X_Y_SOILCARB',jns,
' (gC/m2)' 501 np%AL(jp)%NR_P,npe%AL(jp)%XSOILCARB(:,jns),ki,s%XWORK_WR
505 DO jnlv=1,io%NNLITTLEVS
506 WRITE(ylvl,
'(I4)') jnlv
507 yrecfm=
'LIGN_STR'//adjustl(ylvl(:len_trim(ylvl)))
508 yform=
'(A12,I1.1,A8)' 509 WRITE(ycomment,fmt=yform)
'X_Y_LIGNIN_STRUC',jnlv,
' (-)' 512 np%AL(jp)%NR_P,npe%AL(jp)%XLIGNIN_STRUC(:,jnlv),ki
519 IF (chi%SVI%NDSTEQ > 0)
THEN 521 WRITE(yrecfm,
'(A6,I3.3)')
'F_DSTM',jsv
522 ycomment=
'X_Y_'//yrecfm//
' (kg/m2)' 525 np%AL(jp)%NR_P,ndst%AL(jp)%XSFDSTM(:,jsv),ki,s%XWORK_WR
537 CALL write_surf(hselect,hprogram,yrecfm,s%TTIME,iresp,hcomment=ycomment
539 IF (
lhook)
CALL dr_hook(
'WRITESURF_ISBA_N',1,zhook_handle)
static const char * trim(const char *name, int *n)
subroutine write_field_1d_patch(HSELECT, HPROGRAM, HRECFM, HCOMMENT, KP, KMASK, PFIELD_IN, KSIZE, PWORK_WR)
integer, parameter nundef
subroutine writesurf_gr_snow(OSNOWDIMNC, HSELECT, HPROGRAM, HSURF
subroutine writesurf_isba_n(HSELECT, OSNOWDIMNC, CHI, NDST, IO, S, NP, NPE, KI, HPROGRAM, OLAND_U