Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!SFX_LIC for details. version 1.
MODULE MODI_TRAD_BODY_ISBA
INTERFACE
FUNCTION TRAD_BODY_ISBA(HPROGRAM, PSCA_SW, PREF_SW, PEMIT_LW, PLW_RAD, &
PDIR_SW, PZENITH) RESULT(PTRAD_BODY_ISBA)
!
CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
!
REAL, DIMENSION(:), INTENT(IN) :: PSCA_SW ! Diffuse solar radiation (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PREF_SW ! Solar radiation reflected by ground (W/m2)x
REAL, DIMENSION(:), INTENT(IN) :: PEMIT_LW ! Longwave radiation emitted by the ground (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PLW_RAD ! Atmospheric longwave radiation (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PDIR_SW !Direct solar radiation (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PZENITH !solar zenithal angle (rad from vert.)
REAL, DIMENSION(SIZE(PSCA_SW)) :: PTRAD_BODY_ISBA
END FUNCTION TRAD_BODY_ISBA
END INTERFACE
END MODULE MODI_TRAD_BODY_ISBA
! ##########################################################################
FUNCTION TRAD_BODY_ISBA(HPROGRAM, PSCA_SW, PREF_SW, PEMIT_LW, PLW_RAD,&
PDIR_SW, PZENITH) RESULT(PTRAD_BODY_ISBA)
! ##########################################################################
!
!!**** *TRAD_BODY_ISBA
!!
!! PURPOSE
!! -------
!
! Computes the radiant temperature equivalent to the total radiation
! received by the human body
!
!!** METHOD
! ------
!
!! EXTERNAL
!! --------
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!! a supplement
!! MODD_CST
!!
!! REFERENCE
!! ---------
!! www.utci.org
!!
!! AUTHOR
!! ------
!!
!! R. Schoetter * Meteo-France *
!!
!! MODIFICATIONS
!! -------------
!! Original 03/2017
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CSTS, ONLY : XSTEFAN, XPI, XSURF_EPSILON, XI0
USE MODI_ABOR1_SFX
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
!
USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
USE PARKIND1 ,ONLY : JPRB
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments
!
CHARACTER(LEN=6) , INTENT(IN) :: HPROGRAM ! program calling surf. schemes
!
REAL, DIMENSION(:), INTENT(IN) :: PSCA_SW ! Diffuse solar radiation (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PREF_SW ! Solar radiation reflected by ground (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PEMIT_LW ! Longwave radiation emitted by the ground (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PLW_RAD ! Atmospheric longwave radiation (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PDIR_SW !Direct solar radiation (W/m2)
REAL, DIMENSION(:), INTENT(IN) :: PZENITH !solar zenithal angle (rad from vert.)
REAL, DIMENSION(SIZE(PSCA_SW)) :: PTRAD_BODY_ISBA
!* 0.2 declarations of local variables
REAL :: ZAB = 0.7 !absorption coef of solar radiation by human body
REAL :: ZEB = 0.97 !emissivity of human body
REAL, DIMENSION(SIZE(PSCA_SW)) :: ZFGRND !ground view factor of human body
REAL, DIMENSION(SIZE(PSCA_SW)) :: ZFSKY !sky view factor of human body
REAL, DIMENSION(SIZE(PSCA_SW)) :: ZDIRSWBODY !solar radiation received by human body
REAL, DIMENSION(SIZE(PSCA_SW)) :: ZELEV !solar elevation angle
REAL, DIMENSION(SIZE(PSCA_SW)) :: ZRADBODY !total radiation received by human body
REAL, DIMENSION(SIZE(PSCA_SW)) :: ZDIR_PERP
INTEGER :: ILUOUT ! Unit number
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!
IF (LHOOK) CALL DR_HOOK('TRAD_BODY_ISBA',0,ZHOOK_HANDLE)
!
!* 1 - calculation of view factors
!
ZFGRND(:) = 0.5
ZFSKY (:) = 0.5
!
!* 2 - base calculation for both sun and shade
!
ZRADBODY(:) = ZAB/ZEB * &
( PSCA_SW(:)*ZFSKY(:) + PREF_SW (:)*ZFGRND(:) ) &
+ PLW_RAD(:)*ZFSKY(:) + PEMIT_LW(:)*ZFGRND(:)
!
!* 3 - add direct contribution in case of sunny conditions
!
ZELEV(:) = XPI/2. - PZENITH(:)
!
WHERE (ZELEV(:).LT.1E-6)
ZELEV(:)=0.0
ENDWHERE
!
! Calculation of solar flux density with respect to a plane
! perpendicular to the direction of solar radiation
!
ZDIR_PERP(:) = PDIR_SW(:) / MAX(SIN(ZELEV(:)),0.05)
!
! Limit to 0.85 time solar constant
!
ZDIR_PERP = MAX(ZDIR_PERP, XSURF_EPSILON)
ZDIR_PERP = MIN(ZDIR_PERP, 0.85 * XI0)
!
ZDIRSWBODY(:) = ZDIR_PERP * 0.308 * COS( ZELEV(:)*(1-(ZELEV(:)*180./XPI)**2/48402.) )
!
! Check ZDIRSWBODY
!
IF ((MINVAL(ZDIRSWBODY).LT.-XSURF_EPSILON).OR.(MAXVAL(ZDIRSWBODY).GT.3000.0)) THEN
CALL GET_LUOUT(HPROGRAM,ILUOUT)
WRITE(ILUOUT,*) " "
WRITE(ILUOUT,*) "Unplausible value of direct solar radiation received by the body "
WRITE(ILUOUT,*) " "
WRITE(ILUOUT,*) "MINVAL(ZDIRSWBODY) ",MINVAL(ZDIRSWBODY)
WRITE(ILUOUT,*) "MAXVAL(ZDIRSWBODY) ",MAXVAL(ZDIRSWBODY)
CALL FLUSH(ILUOUT)
CALL ABOR1_SFX("TRAD_BODY_ISBA:Error in ZDIRSWBODY, check report")
ENDIF
!
! the direct solar radiation is weighted by a projected area factor which can be expressed by this equation
! for a rotationally symmetric human being (Fanger, 1970)
!
ZRADBODY (:) = ZRADBODY(:) + ZAB/ZEB*ZDIRSWBODY(:)
!
IF ((MINVAL(ZRADBODY).LT.-XSURF_EPSILON).OR.(MAXVAL(ZRADBODY).GT.3000.0)) THEN
CALL GET_LUOUT(HPROGRAM,ILUOUT)
WRITE(ILUOUT,*) " "
WRITE(ILUOUT,*) "Unplausible value of radiation received by the body "
WRITE(ILUOUT,*) " "
WRITE(ILUOUT,*) "MINVAL(ZRADBODY) ",MINVAL(ZRADBODY)
WRITE(ILUOUT,*) "MAXVAL(ZRADBODY) ",MAXVAL(ZRADBODY)
CALL FLUSH(ILUOUT)
CALL ABOR1_SFX("TRAD_BODY_ISBA:Error in radiation received by body, check report")
ENDIF
!
PTRAD_BODY_ISBA(:) = (ZRADBODY(:)/XSTEFAN)**0.25
!
IF (LHOOK) CALL DR_HOOK('TRAD_BODY_ISBA',1,ZHOOK_HANDLE)
!
END FUNCTION TRAD_BODY_ISBA