layer_e_budget.F90 Source File


Contents

Source Code


Source Code

!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 version 2.1
!SFX_LIC version 1. See LICENSE, Licence_CeCILL_V2.1-en.txt and Licence_CeCILL_V2.1-fr.txt  
!SFX_LIC for details. version 1.
!   ##########################################################################
    SUBROUTINE LAYER_E_BUDGET( PT, PTSTEP, PIMPL, PHC, PTC, PD, PA, PB, PC, PY, PDQS )
!   ##########################################################################
!
!!****  *FLOOR_LAYER_E_BUDGET*  
!!
!!    PURPOSE
!!    -------
!
!     Computes the evoultion of building floor temperatures
!         
!     
!!**  METHOD
!     ------
!
!    6 : equations for evolution of Ts_floor 
!        *************************************************************
!
!     dTf_k(t) / dt = 1/(df_k*Cf_k) * (- 2*Kf_k-1*(Tf_k-Tf_k-1)/(df_k-1 +df_k) 
!                                      - 2*Kf_k  *(Tf_k-Tf_k+1)/(df_k+1 +df_k) )
!
!     dTf_1(t) / dt = 1/(df_1*Cf_1) * (- 2*Kw_1*(Tw_1-Tw_2)/(dw_1 +dw_2))
!
!       with
!
!   K*_k  = (d*_k+ d*_k+1)/(d*_k/k*_k+ d*_k+1/k*_k+1)
!
!
! The system is implicited (or semi-implicited).
!
! ZIMPL=1    ---> implicit system
! ZIMPL=0.5  ---> semi-implicit system
! ZIMPL=0    ---> explicit system
!
!
!
!
!!    EXTERNAL
!!    --------
!!
!!
!!    IMPLICIT ARGUMENTS
!!    ------------------
!!
!!    MODD_CST
!!
!!      
!!    REFERENCE
!!    ---------
!!
!!      
!!    AUTHOR
!!    ------
!!
!!      G. Pigeon           * Meteo-France *
!!
!!    MODIFICATIONS
!!    -------------
!!      Original    15/04/09 
!!                     08/10 (G. Pigeon) computation of residual of energy balance 
!!                                       modification of the limit condition for
!!                                       the deep temp. from the deep road temp.
!!                                       to zero flux condition. idem for sfce T
!-------------------------------------------------------------------------------
!
!*       0.     DECLARATIONS
!               ------------
!
USE MODI_TRIDIAG_GROUND
!
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
USE PARKIND1  ,ONLY : JPRB
!
IMPLICIT NONE
!
!*      0.1    declarations of arguments
!
REAL, DIMENSION(:,:), INTENT(INOUT) :: PT      ! floor layers temperatures
REAL,                 INTENT(IN)    :: PTSTEP  ! time step
REAL, DIMENSION(:,:), INTENT(IN)    :: PHC     ! heat capacity for road layers
REAL, DIMENSION(:,:), INTENT(IN)    :: PTC     ! thermal conductivity for 
                                               !road layers
REAL, DIMENSION(:,:), INTENT(IN)  :: PD      ! depth of road layers
REAL, DIMENSION(:,:), INTENT(IN)  :: PA 
REAL, DIMENSION(:,:), INTENT(IN)  :: PB 
REAL, DIMENSION(:,:), INTENT(IN)  :: PC
REAL, DIMENSION(:,:), INTENT(IN)  :: PY
REAL, DIMENSION(:), INTENT(OUT) :: PDQS
REAL,               INTENT(IN)  :: PIMPL ! implicitation coefficient
!
!*      0.2    declarations of local variables
!
!
REAL :: ZIMPL          ! implicit coefficient
REAL :: ZEXPL          ! explicit coefficient
!
REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2)) :: ZX   ! solution
!
REAL, DIMENSION(SIZE(PT,1)) :: ZEI  ! internal energy of floor at t
REAL, DIMENSION(SIZE(PT,1)) :: ZPEI ! internal energy of floor at time t+
!
INTEGER :: ILAYER          ! number of floor layers
INTEGER :: JLAYER          ! loop counter
INTEGER :: JJ              ! loop counter
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!-------------------------------------------------------------------------------
IF (LHOOK) CALL DR_HOOK('LAYER_E_BUDGET',0,ZHOOK_HANDLE)
!
ILAYER = SIZE(PT,2)
!
ZIMPL = PIMPL
ZEXPL = 1.-PIMPL
!
!-------------------------------------------------------------------------------
!
!*      1.    Preliminaries : internal energy of floor at the current time step
!             -----------------------------------------------------------------
!
ZEI(:) = 0.
DO JLAYER=1,ILAYER
  DO JJ=1,SIZE(PT,1)
     ZEI(JJ)=ZEI(JJ) + ( PHC(JJ,JLAYER)*PD(JJ,JLAYER)*PT(JJ,JLAYER) )
  ENDDO
END DO
!
!-------------------------------------------------------------------------------
!
!*     2.     Tri-diagonal system resolution
!              ------------------------------
!
 CALL TRIDIAG_GROUND(PA,PB,PC,PY,ZX)
!
DO JLAYER=1,ILAYER
  PT(:,JLAYER) = ZX(:,JLAYER)
END DO
!
!*      3.     heat storage inside floor and flux toward the floor
!              ---------------------------------------------------
!
!       3.1    internal energy of the floor at the next time step
!              --------------------------------------------------
!
ZPEI(:) = 0.0
DO JLAYER=1,ILAYER
  DO JJ=1,SIZE(PT,1)
     ZPEI(JJ) = ZPEI(JJ)+ ( PHC(JJ,JLAYER)*PD(JJ,JLAYER)*PT(JJ,JLAYER) )
  ENDDO
END DO
!
!        3.2   heat storage flux inside floor 
!              ------------------------------
!
PDQS(:)=(ZPEI(:)-ZEI(:))/PTSTEP
!
IF (LHOOK) CALL DR_HOOK('LAYER_E_BUDGET',1,ZHOOK_HANDLE)
!-------------------------------------------------------------------------------
END SUBROUTINE LAYER_E_BUDGET