|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ########################################################################## 00002 SUBROUTINE LAYER_E_BUDGET_GET_COEF(PT, PTSTEP, PIMPL, PHC, PTC, PD, PA, PB, PC, PY) 00003 ! ########################################################################## 00004 ! 00005 !!**** *LAYER_E_BUDGET_GET_COEF* 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 ! Computes the evoultion of building floor temperatures 00011 ! 00012 ! 00013 !!** METHOD 00014 ! ------ 00015 ! 00016 ! 6 : equations for evolution of Ts_floor 00017 ! ************************************************************* 00018 ! 00019 ! dTf_k(t) / dt = 1/(df_k*Cf_k) * (- 2*Kf_k-1*(Tf_k-Tf_k-1)/(df_k-1 +df_k) 00020 ! - 2*Kf_k *(Tf_k-Tf_k+1)/(df_k+1 +df_k) ) 00021 ! 00022 ! dTf_1(t) / dt = 1/(df_1*Cf_1) * (- 2*Kw_1*(Tw_1-Tw_2)/(dw_1 +dw_2)) 00023 ! 00024 ! with 00025 ! 00026 ! K*_k = (d*_k+ d*_k+1)/(d*_k/k*_k+ d*_k+1/k*_k+1) 00027 ! 00028 ! 00029 ! The system is implicited (or semi-implicited). 00030 ! 00031 ! ZIMPL=1 ---> implicit system 00032 ! ZIMPL=0.5 ---> semi-implicit system 00033 ! ZIMPL=0 ---> explicit system 00034 ! 00035 ! 00036 ! 00037 ! 00038 !! EXTERNAL 00039 !! -------- 00040 !! 00041 !! 00042 !! IMPLICIT ARGUMENTS 00043 !! ------------------ 00044 !! 00045 !! MODD_CST 00046 !! 00047 !! 00048 !! REFERENCE 00049 !! --------- 00050 !! 00051 !! 00052 !! AUTHOR 00053 !! ------ 00054 !! 00055 !! G. Pigeon * Meteo-France * 00056 !! 00057 !! MODIFICATIONS 00058 !! ------------- 00059 !! Original 15/04/09 00060 !! 08/10 (G. Pigeon) computation of residual of energy balance 00061 !! modification of the limit condition for 00062 !! the deep temp. from the deep road temp. 00063 !! to zero flux condition. idem for sfce T 00064 !------------------------------------------------------------------------------- 00065 ! 00066 !* 0. DECLARATIONS 00067 ! ------------ 00068 ! 00069 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00070 USE PARKIND1 ,ONLY : JPRB 00071 ! 00072 IMPLICIT NONE 00073 ! 00074 !* 0.1 declarations of arguments 00075 ! 00076 REAL, DIMENSION(:,:), INTENT(IN) :: PT ! floor layers temperatures 00077 REAL, INTENT(IN) :: PTSTEP ! time step 00078 REAL, DIMENSION(:,:), INTENT(IN) :: PHC ! heat capacity for road layers 00079 REAL, DIMENSION(:,:), INTENT(IN) :: PTC ! thermal conductivity for road layers 00080 REAL, DIMENSION(:,:), INTENT(IN) :: PD ! depth of road layers 00081 REAL, DIMENSION(:,:), INTENT(OUT) :: PA 00082 REAL, DIMENSION(:,:), INTENT(OUT) :: PB 00083 REAL, DIMENSION(:,:), INTENT(OUT) :: PC 00084 REAL, DIMENSION(:,:), INTENT(OUT) :: PY 00085 REAL, INTENT(IN) :: PIMPL ! implicitation coefficient 00086 ! 00087 !* 0.2 declarations of local variables 00088 ! 00089 REAL :: ZIMPL ! implicit coefficient 00090 REAL :: ZEXPL ! explicit coefficient 00091 ! 00092 ! mean thermal conductivity over distance between 2 layers 00093 REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2)) :: ZMTC_O_D 00094 ! thermal capacity times layer depth 00095 REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2)) :: ZHC_D 00096 ! 00097 INTEGER :: ILAYER ! number of floor layers 00098 INTEGER :: JLAYER ! loop counter 00099 INTEGER :: JJ ! loop counter 00100 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00101 !------------------------------------------------------------------------------- 00102 IF (LHOOK) CALL DR_HOOK('LAYER_E_BUDGET_GET_COEF',0,ZHOOK_HANDLE) 00103 ! 00104 !* 1. layer thermal properties 00105 ! ------------------------ 00106 ! 00107 ZIMPL = PIMPL 00108 ZEXPL = 1. - PIMPL 00109 ! 00110 ILAYER = SIZE(PT,2) 00111 ZMTC_O_D(:,:) = 0. 00112 ! 00113 DO JLAYER=1,ILAYER-1 00114 DO JJ=1,SIZE(PT,1) 00115 ZMTC_O_D(JJ,JLAYER) = 2./( PD(JJ,JLAYER)/PTC(JJ,JLAYER) + PD(JJ,JLAYER+1)/PTC(JJ,JLAYER+1) ) 00116 ZHC_D (JJ,JLAYER) = PHC(JJ,JLAYER) * PD(JJ,JLAYER) 00117 ENDDO 00118 END DO 00119 ! 00120 DO JJ=1,SIZE(PT,1) 00121 ZHC_D(JJ,ILAYER) = PHC(JJ,ILAYER) * PD(JJ,ILAYER) 00122 ENDDO 00123 ! 00124 !------------------------------------------------------------------------------- 00125 ! 00126 !* 3. Surface layer coefficients 00127 ! ------------------------------ 00128 ! 00129 ! no implication for Ts and use of flux from BEM or BLD_E_BUDGET 00130 DO JLAYER = 1, ILAYER 00131 DO JJ = 1, SIZE(PT,1) 00132 ! 00133 IF ( JLAYER == 1 ) THEN 00134 PA(JJ,JLAYER) = 0. 00135 ELSE 00136 PA(JJ,JLAYER) = - ZIMPL * ZMTC_O_D(JJ,JLAYER-1) 00137 ENDIF 00138 ! 00139 IF ( JLAYER == ILAYER ) THEN 00140 PC(JJ,JLAYER) = 0. 00141 ELSE 00142 PC(JJ,JLAYER) = - ZIMPL * ZMTC_O_D(JJ,JLAYER) 00143 ENDIF 00144 ! 00145 PB(JJ,JLAYER) = ZHC_D(JJ,JLAYER)/PTSTEP 00146 PY(JJ,JLAYER) = ZHC_D(JJ,JLAYER)/PTSTEP * PT(JJ,JLAYER) 00147 ! 00148 IF ( JLAYER .GT. 1.) THEN 00149 PB(JJ,JLAYER) = PB(JJ,JLAYER) + ZIMPL * ZMTC_O_D(JJ,JLAYER-1) 00150 PY(JJ,JLAYER) = PY(JJ,JLAYER) + ZEXPL * ZMTC_O_D(JJ,JLAYER-1) * ( PT(JJ,JLAYER-1) - PT(JJ,JLAYER) ) 00151 ENDIF 00152 ! 00153 IF ( JLAYER .LT. ILAYER) THEN 00154 PB(JJ,JLAYER) = PB(JJ,JLAYER) + ZIMPL * ZMTC_O_D(JJ,JLAYER) 00155 PY(JJ,JLAYER) = PY(JJ,JLAYER) + ZEXPL * ZMTC_O_D(JJ,JLAYER) * ( PT(JJ,JLAYER+1) - PT(JJ,JLAYER) ) 00156 ENDIF 00157 ! 00158 ENDDO 00159 ! 00160 ENDDO 00161 ! 00162 IF (LHOOK) CALL DR_HOOK('LAYER_E_BUDGET_GET_COEF',1,ZHOOK_HANDLE) 00163 !------------------------------------------------------------------------------- 00164 END SUBROUTINE LAYER_E_BUDGET_GET_COEF
1.8.0