SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/layer_e_budget_get_coef.F90
Go to the documentation of this file.
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