6 SUBROUTINE writesurf_teb_n (HSELECT, OSNOWDIMNC, DTCO, U, TOP, BOP, T, B, ODATA_ROAD_DIR, TPN, &
7 GDO, GDS, GDPEK, GRO, GRS, GRPEK, HPROGRAM,KPATCH,HWRITE)
53 USE modi_end_io_surf_n
54 USE modi_init_io_surf_n
57 USE modi_writesurf_gr_snow
58 USE modi_writesurf_teb_garden_n
59 USE modi_writesurf_teb_greenroof_n
75 CHARACTER(LEN=*),
DIMENSION(:),
INTENT(IN) :: HSELECT
76 LOGICAL,
INTENT(IN) :: OSNOWDIMNC
82 TYPE(
teb_t),
INTENT(IN) :: T
83 TYPE(
bem_t),
INTENT(IN) :: B
84 LOGICAL,
INTENT(IN) :: ODATA_ROAD_DIR
93 CHARACTER(LEN=6),
INTENT(IN) :: HPROGRAM
94 INTEGER,
INTENT(IN) :: KPATCH
95 CHARACTER(LEN=3),
INTENT(IN) :: HWRITE
101 REAL,
DIMENSION(0,0,1) :: ZWSN_WR, ZRHO_WR, ZHEA_WR, ZAGE_WR, ZSG1_WR, ZSG2_WR
102 REAL,
DIMENSION(0,1) :: ZALB_WR
104 INTEGER,
DIMENSION(SIZE(T%XT_ROOF,1)) :: IMASK
106 CHARACTER(LEN=12) :: YRECFM
107 CHARACTER(LEN=100):: YCOMMENT
108 CHARACTER(LEN=3) :: YPATCH
109 CHARACTER(LEN=7) :: YDIR
110 CHARACTER(LEN=100):: YSTRING
112 INTEGER :: JLAYER, JI
113 REAL(KIND=JPRB) :: ZHOOK_HANDLE
117 IF (
lhook)
CALL dr_hook(
'WRITESURF_TEB_N',0,zhook_handle)
120 IF (top%NTEB_PATCH>1)
WRITE(ypatch,fmt=
'(A,I1,A)')
'T',kpatch,
'_' 126 ycomment=
'Option for Road orientation in TEB scheme' 127 CALL write_surf(hselect,hprogram,
'ROAD_DIR',top%CROAD_DIR,iresp,ycomment
128 'Option for Wall representation in TEB scheme' 129 CALL write_surf(hselect,hprogram,
'WALL_OPT',top%CWALL_OPT,iresp,ycomment
137 DO jlayer=1,top%NROOF_LAYER
138 WRITE(yrecfm,
'(A3,A5,I1.1,A1)') ypatch,
'TROOF',jlayer,
' ' 139 WRITE(ycomment,
'(A9,I1.1,A4)')
'X_Y_TROOF',jlayer,
' (K)' 140 yrecfm=adjustl(yrecfm)
141 CALL write_surf(hselect,hprogram,yrecfm,t%XT_ROOF(:,jlayer),iresp,hcomment
148 yrecfm=ypatch//
'WS_ROOF' 149 yrecfm=adjustl(yrecfm)
150 ycomment=
'WS_ROOF (kg/m2)' 151 CALL write_surf(hselect,hprogram,yrecfm,t%XWS_ROOF(:),iresp,hcomment=ycomment
156 DO jlayer=1,top%NROAD_LAYER
157 WRITE(yrecfm,
'(A3,A5,I1.1,A1)') ypatch,
'TROAD',jlayer,
' ' 158 yrecfm=adjustl(yrecfm)
159 IF (top%CROAD_DIR==
'UNIF' .OR. odata_road_dir)
THEN 160 ystring =
'X_Y_TROAD' 161 ELSEIF (
SIZE(t%XROAD_DIR)>0)
THEN 164 ystring=
trim(ydir)//
' ROAD TEMP. LAYER ' 166 ystring=
'? ROAD TEMP. LAYER ' 168 WRITE(ycomment,
'(A,I1.1,A4)')
trim(ystring), jlayer,
' (K)' 169 CALL write_surf(hselect,hprogram,yrecfm,t%XT_ROAD(:,jlayer),iresp,hcomment
175 yrecfm=ypatch//
'WS_ROAD' 176 yrecfm=adjustl(yrecfm)
177 ycomment=
'WS_ROAD (kg/m2)' 178 CALL write_surf(hselect,hprogram,yrecfm,t%XWS_ROAD(:),iresp,hcomment=ycomment
183 DO jlayer=1,top%NWALL_LAYER
184 IF (top%CWALL_OPT==
'UNIF')
THEN 185 WRITE(yrecfm,
'(A3,A5,I1.1,A1)') ypatch,
'TWALL',jlayer,
' ' 186 yrecfm=adjustl(yrecfm)
187 WRITE(ycomment,
'(A9,I1.1,A4)')
'X_Y_TWALL',jlayer,
' (K)' 188 CALL write_surf(hselect,hprogram,yrecfm,t%XT_WALL_A(:,jlayer),iresp,hcomment
191 WRITE(yrecfm,
'(A3,A6,I1.1)') ypatch,
'TWALLA',jlayer
192 yrecfm=adjustl(yrecfm)
193 IF (odata_road_dir)
THEN 194 ystring =
'X_Y_TWALL_A' 195 ELSEIF (
SIZE(t%XROAD_DIR)>0)
THEN 198 ystring=
trim(ydir)//
'-FACING WALL TEMP. LAYER ' 200 ystring=
'?-FACING WALL TEMP. LAYER ' 202 WRITE(ycomment,
'(A,I1.1,A4)')
trim(ystring), jlayer,
' (K)' 203 CALL write_surf(hselect,hprogram,yrecfm,t%XT_WALL_A(:,jlayer),iresp,hcomment
206 WRITE(yrecfm,
'(A3,A6,I1.1)') ypatch,
'TWALLB',jlayer
207 yrecfm=adjustl(yrecfm)
208 IF (odata_road_dir)
THEN 209 ystring =
'X_Y_TWALL_B' 210 ELSEIF (
SIZE(t%XROAD_DIR)>0)
THEN 213 ystring=
trim(ydir)//
'-FACING WALL TEMP. LAYER ' 215 ystring=
'?-FACING WALL TEMP. LAYER ' 217 WRITE(ycomment,
'(A,I1.1,A4)')
trim(ystring), jlayer,
' (K)' 218 CALL write_surf(hselect,hprogram,yrecfm,t%XT_WALL_B(:,jlayer),iresp,hcomment
224 DO jlayer=1,top%NROOF_LAYER
225 WRITE(yrecfm,fmt=
'(A,I1.1)')
'D_ROOF',jlayer
226 ycomment=
'Roof layer thickness' 228 hprogram,yrecfm,t%XD_ROOF(:,jlayer),iresp,hcomment=ycomment
230 DO jlayer=1,top%NWALL_LAYER
231 WRITE(yrecfm,fmt=
'(A,I1.1)')
'D_WALL',jlayer
232 ycomment=
'WALL layer thickness' 233 CALL write_surf(hselect,hprogram,yrecfm,t%XD_WALL(:,jlayer),iresp,hcomment
235 DO jlayer=1,top%NROAD_LAYER
236 WRITE(yrecfm,fmt=
'(A,I1.1)')
'D_ROAD',jlayer
237 ycomment=
'ROAD layer thickness' 238 CALL write_surf(hselect,hprogram,yrecfm,t%XD_ROAD(:,jlayer),iresp,hcomment
240 IF (top%CBEM==
'BEM')
THEN 241 DO jlayer=1,bop%NFLOOR_LAYER
242 WRITE(yrecfm,fmt=
'(A,I1.1)')
'D_FLOOR',jlayer
243 ycomment=
'FLOOR layer thickness' 244 CALL write_surf(hselect,hprogram,yrecfm,b%XD_FLOOR(:,jlayer),iresp
252 yrecfm=ypatch//
'TI_BLD' 253 yrecfm=adjustl(yrecfm)
254 ycomment=
'TI_BLD (K)' 255 CALL write_surf(hselect,hprogram,yrecfm,b%XTI_BLD(:),iresp,hcomment=ycomment
260 yrecfm=ypatch//
'T_WIN1' 261 yrecfm=adjustl(yrecfm)
262 ycomment=
'T_WIN1 (K)' 263 CALL write_surf(hselect,hprogram,yrecfm,b%XT_WIN1(:),iresp,hcomment=ycomment
265 IF (top%CBEM==
'BEM')
THEN 268 yrecfm=ypatch//
'QI_BLD' 269 yrecfm=adjustl(yrecfm)
270 ycomment=
'QI_BLD (kg/kg)' 271 CALL write_surf(hselect,hprogram,yrecfm,b%XQI_BLD(:),iresp,hcomment=ycomment
276 yrecfm=ypatch//
'T_WIN2' 277 yrecfm=adjustl(yrecfm)
278 ycomment=
'T_WIN2 (K)' 279 CALL write_surf(hselect,hprogram,yrecfm,b%XT_WIN2(:),iresp,hcomment=ycomment
283 DO jlayer=1,bop%NFLOOR_LAYER
284 WRITE(yrecfm,
'(A3,A5,I1.1,A1)') ypatch,
'TFLOO',jlayer,
' ' 285 WRITE(ycomment,
'(A9,I1.1,A4)')
'X_Y_TFLOO',jlayer,
' (K)' 286 yrecfm=adjustl(yrecfm)
287 CALL write_surf(hselect,hprogram,yrecfm,b%XT_FLOOR(:,jlayer),iresp,hcomment
292 DO jlayer=1,bop%NFLOOR_LAYER
293 WRITE(yrecfm,
'(A3,A5,I1.1,A1)') ypatch,
'TMASS',jlayer,
' ' 294 WRITE(ycomment,
'(A9,I1.1,A4)')
'X_Y_TMASS',jlayer,
' (K)' 295 yrecfm=adjustl(yrecfm)
296 CALL write_surf(hselect,hprogram,yrecfm,b%XT_MASS(:,jlayer),iresp,hcomment
303 yrecfm=ypatch//
'TI_ROAD' 304 yrecfm=adjustl(yrecfm)
305 ycomment=
'TI_ROAD (K)' 306 CALL write_surf(hselect,hprogram,yrecfm,t%XTI_ROAD(:),iresp,hcomment=ycomment
310 DO ji = 1,
SIZE(t%XT_ROOF,1)
316 SIZE(t%XT_ROOF,1),imask,0,t%TSNOW_ROOF, &
317 zwsn_wr,zrho_wr,zhea_wr,zage_wr,zsg1_wr, &
318 zsg2_wr,zhis_wr,zalb_wr)
322 SIZE(t%XT_ROOF,1),imask,0,t%TSNOW_ROAD, &
323 zwsn_wr,zrho_wr,zhea_wr,zage_wr,zsg1_wr, &
324 zsg2_wr,zhis_wr,zalb_wr)
333 yrecfm=ypatch//
'TCANYON' 334 yrecfm=adjustl(yrecfm)
335 ycomment=
'T_CANYON (K)' 336 CALL write_surf(hselect,hprogram,yrecfm,t%XT_CANYON(:),iresp,hcomment=ycomment
340 yrecfm=ypatch//
'QCANYON' 341 yrecfm=adjustl(yrecfm)
342 ycomment=
'Q_CANYON (kg/kg)' 343 CALL write_surf(hselect,hprogram,yrecfm,t%XQ_CANYON(:),iresp,hcomment=ycomment
348 IF (top%LSOLAR_PANEL)
THEN 349 yrecfm=ypatch//
'THER_PDAY' 350 yrecfm=adjustl(yrecfm)
351 ycomment=
'Thermal Solar Panels present day production (J/m2)' 352 IF (.NOT.
ASSOCIATED(tpn%XTHER_PRODC_DAY))
THEN 354 ALLOCATE(tpn%XTHER_PRODC_DAY(
SIZE(b%XTI_BLD)))
355 tpn%XTHER_PRODC_DAY=0.
357 CALL write_surf(hselect,hprogram,yrecfm,tpn%XTHER_PRODC_DAY(:),iresp,hcomment
367 CALL write_surf(hselect,hprogram,yrecfm,top%TTIME,iresp,hcomment=ycomment
377 IF (top%LGARDEN)
THEN 379 CALL init_io_surf_n(dtco, u, hprogram,
'TOWN ',
'TEB ',
'WRITE',
'GARDEN_PROGNOSTIC.OUT.nc' 384 IF (top%LGREENROOF)
THEN 386 CALL init_io_surf_n(dtco, u, hprogram,
'TOWN ',
'TEB ',
'WRITE',
'GREENROOF_PROGNOSTIC.OUT.nc' 390 IF (
lhook)
CALL dr_hook(
'WRITESURF_TEB_N',1,zhook_handle)
396 REAL,
INTENT(IN) :: PDIR
397 CHARACTER(LEN=7),
INTENT(OUT) :: HDIR
400 IF (pdir<0) zdir = pdir +360.
401 IF (zdir>= 0. .AND. zdir< 11.25) hdir=
'N-S ' 402 IF (zdir>= 11.25 .AND. zdir< 33.75) hdir=
'NNE-SSW' 403 IF (zdir>= 33.75 .AND. zdir< 56.25) hdir=
'NE-SW' 404 IF (zdir>= 56.25 .AND. zdir< 78.75) hdir=
'ENE-WSW' 405 IF (zdir>= 78.75 .AND. zdir<101.25) hdir=
'E-W ' 406 IF (zdir>=101.25 .AND. zdir<123.75) hdir=
'ESE-WNW' 407 IF (zdir>=123.75 .AND. zdir<146.25) hdir=
'SE-NW ' 408 IF (zdir>=146.25 .AND. zdir<168.75) hdir=
'SSE-NNW' 409 IF (zdir>=168.75 .AND. zdir<180.00) hdir=
'N-S ' 412 REAL,
INTENT(IN) :: PDIR
413 CHARACTER(LEN=7),
INTENT(OUT) :: HDIR
416 IF (pdir<0) zdir = pdir +360.
417 IF (zdir>= 0. .AND. zdir< 11.25) hdir=
'E ' 418 IF (zdir>= 11.25 .AND. zdir< 33.75) hdir=
'ESE ' 419 IF (zdir>= 33.75 .AND. zdir< 56.25) hdir=
'SE ' 420 IF (zdir>= 56.25 .AND. zdir< 78.75) hdir=
'SSE ' 421 IF (zdir>= 78.75 .AND. zdir<101.25) hdir=
'S ' 422 IF (zdir>=101.25 .AND. zdir<123.75) hdir=
'SSW ' 423 IF (zdir>=123.75 .AND. zdir<146.25) hdir=
'SW ' 424 IF (zdir>=146.25 .AND. zdir<168.75) hdir=
'WSW ' 425 IF (zdir>=168.75 .AND. zdir<180.00) hdir=
'W ' 428 REAL,
INTENT(IN) :: PDIR
429 CHARACTER(LEN=7),
INTENT(OUT) :: HDIR
432 IF (pdir<0) zdir = pdir +360.
433 IF (zdir>= 0. .AND. zdir< 11.25) hdir=
'W ' 434 IF (zdir>= 11.25 .AND. zdir< 33.75) hdir=
'WNW ' 435 IF (zdir>= 33.75 .AND. zdir< 56.25) hdir=
'NW ' 436 IF (zdir>= 56.25 .AND. zdir< 78.75) hdir=
'NNW ' 437 IF (zdir>= 78.75 .AND. zdir<101.25) hdir=
'N ' 438 IF (zdir>=101.25 .AND. zdir<123.75) hdir=
'NNE ' 439 IF (zdir>=123.75 .AND. zdir<146.25) hdir=
'NE ' 440 IF (zdir>=146.25 .AND. zdir<168.75) hdir=
'ENE ' 441 IF (zdir>=168.75 .AND. zdir<180.00) hdir=
'E '
static const char * trim(const char *name, int *n)
subroutine writesurf_teb_garden_n(HSELECT, OSNOWDIMNC, IO, S, PEK
subroutine writesurf_teb_n(HSELECT, OSNOWDIMNC, DTCO, U, TOP, BOP
subroutine wallb_dir(PDIR, HDIR)
subroutine road_dir(PDIR, HDIR)
subroutine end_io_surf_n(HPROGRAM)
subroutine writesurf_teb_greenroof_n(HSELECT, OSNOWDIMNC, IO, S,
subroutine writesurf_gr_snow(OSNOWDIMNC, HSELECT, HPROGRAM, HSURF
subroutine walla_dir(PDIR, HDIR)
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION