SURFEX v7.3
General documentation of Surfex
|
00001 ! ############################################################################### 00002 SUBROUTINE CIRCUMSOLAR_RAD(PDIR_SW, PSCA_SW, PZENITH, PF1_o_B) 00003 ! ############################################################################### 00004 ! 00005 !!**** *CIRCUMSOLAR_RAD * 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 !! 00010 ! compute the fraction of the scattered solar radiation that has a 00011 ! directionnal behaviour, it is from the circumsolar region 00012 ! for an horizontal surface 00013 !! 00014 !!** METHOD 00015 !! ------ 00016 !! 00017 !! REFERENCE 00018 !! --------- 00019 !! 00020 ! Engeneering Reference, EnergyPlus DOE, 2012 00021 ! Perez, 1990 00022 !! 00023 !! AUTHOR 00024 !! ------ 00025 !! G. Pigeon 00026 !! 00027 !! MODIFICATIONS 00028 !! ------------- 00029 !! Original 27/11/2012 00030 !!--------------------------------------------------------------- 00031 ! 00032 ! 00033 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00034 USE PARKIND1 ,ONLY : JPRB 00035 USE MODD_CSTS ,ONLY : XPI 00036 00037 IMPLICIT NONE 00038 ! 00039 !* 0.1 declarations of arguments 00040 ! 00041 REAL, DIMENSION(:), INTENT(IN) :: PDIR_SW ! direct radiation 00042 REAL, DIMENSION(:), INTENT(IN) :: PSCA_SW ! scattered radiation 00043 REAL, DIMENSION(:), INTENT(IN) :: PZENITH ! solar zenith angle 00044 REAL, DIMENSION(:), INTENT(OUT) :: PF1_o_B ! coef 00045 ! 00046 !* 0.2 declarations of local variables 00047 ! 00048 REAL, DIMENSION(SIZE(PZENITH)) :: ZE !sky clearness factor 00049 REAL, DIMENSION(SIZE(PZENITH)) :: ZB ! b coef 00050 REAL, DIMENSION(SIZE(PZENITH)) :: ZF1 !factors depending on ZE and Z 00051 REAL, DIMENSION(SIZE(PZENITH)) :: ZF11, ZF13 !factors depending on ZE 00052 REAL, PARAMETER :: ZK = 1.041 !coef. from EP Engineering Reference 00053 REAL, PARAMETER :: ZBMIN = 0.087 !coef. from EP Engineering Reference 00054 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00055 REAL, DIMENSION(SIZE(PZENITH)) :: ZELEV 00056 INTEGER :: JJ 00057 !------------------------------------------------------------------------------- 00058 IF (LHOOK) CALL DR_HOOK('MODE_CONV_DOE:CHTC_VERT_DOE',0,ZHOOK_HANDLE) 00059 00060 ZELEV = XPI/2. - PZENITH 00061 00062 PF1_o_B = 0. 00063 WHERE(PSCA_SW > 0) 00064 ZE = ((PSCA_SW + PDIR_SW) / PSCA_SW + ZK * ZELEV**3) / (1 + ZK * ZELEV**3) 00065 ELSEWHERE 00066 ZE = -1 00067 ENDWHERE 00068 00069 DO JJ=1,SIZE(ZELEV) 00070 ZB(JJ) = MAX(ZBMIN, cos(ZELEV(JJ))) 00071 ENDDO 00072 00073 CALL FIJ(ZE, ZF11, ZF13) 00074 ZF1 = ZF11 + ZF13 * ZELEV 00075 00076 PF1_o_B = ZF1 / ZB 00077 DO JJ=1,SIZE(PF1_o_B) 00078 PF1_o_B(JJ) = MIN(PF1_o_B(JJ), 1.) 00079 PF1_o_B(JJ) = MAX(PF1_o_B(JJ), 0.) 00080 ENDDO 00081 00082 IF (LHOOK) CALL DR_HOOK('MODE_CONV_DOE:CHTC_VERT_DOE',1,ZHOOK_HANDLE) 00083 !------------------------------------------------------------------------------- 00084 CONTAINS 00085 SUBROUTINE FIJ(PE, PF11, PF13) 00086 REAL, DIMENSION(:), INTENT(IN) :: PE !sky clearness factor 00087 REAL, DIMENSION(:), INTENT(OUT):: PF11 00088 REAL, DIMENSION(:), INTENT(OUT):: PF13 00089 00090 WHERE(PE < 0 ) 00091 PF11 = 0 00092 PF13 = 0 00093 ELSEWHERE(PE < 1.065) 00094 PF11 = -0.0083117 00095 PF13 = -0.0620636 00096 ELSEWHERE(PE >= 1.065 .AND. PE < 1.230 ) 00097 PF11 = 0.1299457 00098 PF13 = -0.1513752 00099 ELSEWHERE(PE >= 1.230 .AND. PE < 1.500 ) 00100 PF11 = 0.3296958 00101 PF13 = -0.2210958 00102 ELSEWHERE(PE >= 1.500 .AND. PE < 1.950) 00103 PF11 = 0.5682053 00104 PF13 = -0.2951290 00105 ELSEWHERE(PE >= 1.950 .AND. PE < 2.800 ) 00106 PF11 = 0.8730280 00107 PF13 = -0.3616149 00108 ELSEWHERE(PE >= 2.800 .AND. PE < 4.500) 00109 PF11 = 1.1326077 00110 PF13 = -0.4118494 00111 ELSEWHERE(PE >= 4.500 .AND. PE < 6.200) 00112 PF11 = 1.0601591 00113 PF13 = -0.3589221 00114 ELSEWHERE 00115 PF11 = 0.6777470 00116 PF13 = -0.2504286 00117 ENDWHERE 00118 00119 END SUBROUTINE FIJ 00120 00121 END SUBROUTINE CIRCUMSOLAR_RAD