SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/floor_layer_e_budget.F90
Go to the documentation of this file.
00001 !   ##########################################################################
00002     SUBROUTINE FLOOR_LAYER_E_BUDGET(PT_FLOOR, PTSTEP, PHC_FLOOR, PTC_FLOOR, PD_FLOOR, &
00003                                     PFLX_BLD_FLOOR, PDQS_FLOOR, PIMB_FLOOR,           &
00004                                     PF_FLOOR_MASS, PF_FLOOR_WALL, PF_FLOOR_WIN,       &
00005                                     PF_FLOOR_ROOF, PRADHT_IN,           &
00006                                     PTS_MASS, PRAD_WALL_FLOOR, PRAD_ROOF_FLOOR,       &
00007                                     PRAD_WIN_FLOOR, PLOAD_FLOOR, PTI_BLD,             &
00008                                     PRAD_FLOOR_MASS, PCONV_FLOOR_BLD                  )
00009 !   ##########################################################################
00010 !
00011 !!****  *FLOOR_LAYER_E_BUDGET*  
00012 !!
00013 !!    PURPOSE
00014 !!    -------
00015 !
00016 !     Computes the evoultion of building floor temperatures
00017 !         
00018 !     
00019 !!**  METHOD
00020 !     ------
00021 !
00022 !    6 : equations for evolution of Ts_floor 
00023 !        *************************************************************
00024 !
00025 !     dTf_k(t) / dt = 1/(df_k*Cf_k) * (- 2*Kf_k-1*(Tf_k-Tf_k-1)/(df_k-1 +df_k) 
00026 !                                      - 2*Kf_k  *(Tf_k-Tf_k+1)/(df_k+1 +df_k) )
00027 !
00028 !     dTf_1(t) / dt = 1/(df_1*Cf_1) * (- 2*Kw_1*(Tw_1-Tw_2)/(dw_1 +dw_2))
00029 !
00030 !       with
00031 !
00032 !   K*_k  = (d*_k+ d*_k+1)/(d*_k/k*_k+ d*_k+1/k*_k+1)
00033 !
00034 !
00035 ! The system is implicited (or semi-implicited).
00036 !
00037 ! ZIMPL=1    ---> implicit system
00038 ! ZIMPL=0.5  ---> semi-implicit system
00039 ! ZIMPL=0    ---> explicit system
00040 !
00041 !
00042 !
00043 !
00044 !!    EXTERNAL
00045 !!    --------
00046 !!
00047 !!
00048 !!    IMPLICIT ARGUMENTS
00049 !!    ------------------
00050 !!
00051 !!    MODD_CST
00052 !!
00053 !!      
00054 !!    REFERENCE
00055 !!    ---------
00056 !!
00057 !!      
00058 !!    AUTHOR
00059 !!    ------
00060 !!
00061 !!      G. Pigeon           * Meteo-France *
00062 !!
00063 !!    MODIFICATIONS
00064 !!    -------------
00065 !!      Original    15/04/09 
00066 !!      G. Pigeon      08/10 computation of residual of energy balance 
00067 !!                           modification of the limit condition for
00068 !!                           the deep temp. from the deep road temp.
00069 !!                           to zero flux condition. idem for sfce T
00070 !!      G. Pigeon      11/11 split in 2 for floor and mass to be flux conservative
00071 !!      G. Pigeon      09/12 modif of conv. coef + implicitation of the exchange
00072 !-------------------------------------------------------------------------------
00073 !
00074 !*       0.     DECLARATIONS
00075 !               ------------
00076 !
00077 USE MODI_LAYER_E_BUDGET_GET_COEF
00078 USE MODI_LAYER_E_BUDGET
00079 USE MODE_CONV_DOE
00080 !
00081 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00082 USE PARKIND1  ,ONLY : JPRB
00083 !
00084 IMPLICIT NONE
00085 !
00086 !*      0.1    declarations of arguments
00087 !
00088 REAL, DIMENSION(:,:), INTENT(INOUT) :: PT_FLOOR     ! floor layers temperatures
00089 REAL,                 INTENT(IN)    :: PTSTEP       ! time step
00090 REAL, DIMENSION(:,:), INTENT(IN)    :: PHC_FLOOR    ! heat capacity for road layers
00091 REAL, DIMENSION(:,:), INTENT(IN)    :: PTC_FLOOR    ! thermal conductivity for 
00092                                                     !road layers
00093 REAL, DIMENSION(:,:), INTENT(IN)  :: PD_FLOOR       ! depth of road layers
00094 REAL, DIMENSION(:),   INTENT(OUT)  :: PFLX_BLD_FLOOR !flux from building to floor
00095 REAL, DIMENSION(:),   INTENT(OUT) :: PDQS_FLOOR !heat storage inside the floor
00096 REAL, DIMENSION(:),   INTENT(OUT) :: PIMB_FLOOR !floor energy residual imbalance for verification
00097 REAL, DIMENSION(:), INTENT(IN)    :: PF_FLOOR_MASS  ! View factor floor-mass
00098 REAL, DIMENSION(:), INTENT(IN)    :: PF_FLOOR_WALL  ! View factor floor-wall
00099 REAL, DIMENSION(:), INTENT(IN)    :: PF_FLOOR_WIN   ! View factor floor-window
00100 REAL, DIMENSION(:), INTENT(IN)    :: PF_FLOOR_ROOF  ! View factor floor-roof
00101 REAL, DIMENSION(:), INTENT(IN)    :: PRADHT_IN      ! Indoor radiant heat transfer coefficient
00102                                                     ! [W K-1 m-2]
00103 REAL, DIMENSION(:), INTENT(IN)    :: PTS_MASS  ! surf. mass temp. (contact with bld air)
00104 REAL, DIMENSION(:), INTENT(IN)    :: PRAD_ROOF_FLOOR ! rad. fluxes from roof to floor[W m-2(roof)]
00105 REAL, DIMENSION(:), INTENT(IN)    :: PRAD_WALL_FLOOR ! rad. fluxes from wall to floor[W m-2(wall)]
00106 REAL, DIMENSION(:), INTENT(IN)    :: PRAD_WIN_FLOOR  ! rad. fluxes from win to floor[W m-2(win)]
00107 REAL, DIMENSION(:), INTENT(IN)    :: PTI_BLD   ! indoor air temp.
00108 REAL, DIMENSION(:), INTENT(IN)    :: PLOAD_FLOOR ! solar and internal load to the floor
00109 REAL, DIMENSION(:), INTENT(OUT)   :: PRAD_FLOOR_MASS  ! rad. fluxes from floor to mass [W m-2(floor)]
00110 REAL, DIMENSION(:), INTENT(OUT)   :: PCONV_FLOOR_BLD  ! conv. fluxes from floor to bld [W m-2(floor)]
00111 !
00112 !*      0.2    declarations of local variables
00113 !
00114 !
00115 REAL :: ZIMPL=1.0      ! implicit coefficient
00116 REAL :: ZEXPL=0.0      ! explicit coefficient
00117 !
00118 REAL, DIMENSION(SIZE(PT_FLOOR,1),SIZE(PT_FLOOR,2)) :: ZA, ! lower diag.
00119                                                       ZB, ! main  diag.
00120                                                       ZC, ! upper diag.
00121                                                       ZY   ! r.h.s.
00122 !
00123 REAL, DIMENSION(SIZE(PT_FLOOR,1)) :: ZTS_FLOOR ! surf. floor temp.  used for rad. exchanges
00124 REAL, DIMENSION(SIZE(PT_FLOOR,1)) :: ZTS_FLOOR_CONV ! surf. floor temp. used for conv exchanges
00125                                                ! used during calculation
00126 REAL, DIMENSION(SIZE(PT_FLOOR,1)) :: ZCHTC_IN_FLOOR   ! Indoor floor convec heat transfer coefficient
00127                                                     ! [W K-1 m-2(bld)]
00128 
00129 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00130 INTEGER :: JJ
00131 !-------------------------------------------------------------------------------
00132 IF (LHOOK) CALL DR_HOOK('FLOOR_LAYER_E_BUDGET',0,ZHOOK_HANDLE)
00133 !
00134 ! *Convection heat transfer coefficients [W m-2 K-1]
00135 !  From EP Engineering Reference
00136 ZCHTC_IN_FLOOR(:) = CHTC_UP_DOE(PT_FLOOR(:,1), PTI_BLD(:))
00137 DO JJ=1,SIZE(ZCHTC_IN_FLOOR)
00138    ZCHTC_IN_FLOOR(JJ) = MAX(1., ZCHTC_IN_FLOOR(JJ))
00139 ENDDO
00140 
00141 
00142 !
00143  CALL LAYER_E_BUDGET_GET_COEF( PT_FLOOR, PTSTEP, ZIMPL, PHC_FLOOR, PTC_FLOOR, PD_FLOOR, &
00144                               ZA, ZB, ZC, ZY )
00145 !
00146 ZTS_FLOOR(:) = PT_FLOOR(:,1) 
00147 
00148 ZB(:,1) = ZB(:,1) + ZIMPL * &
00149    (ZCHTC_IN_FLOOR(:)*4./3. + PRADHT_IN(:) * PF_FLOOR_MASS(:))
00150 
00151 
00152 ZY(:,1) = ZY(:,1)  &
00153    + ZCHTC_IN_FLOOR(:) * (PTI_BLD(:) - 1./3. * PT_FLOOR(:, 1) * (4* ZEXPL -1))  &
00154    + PF_FLOOR_WIN  (:) * PRAD_WIN_FLOOR(:)                    &
00155    + PF_FLOOR_WALL (:) * PRAD_WALL_FLOOR(:)                   &
00156    + PF_FLOOR_ROOF (:) * PRAD_ROOF_FLOOR(:)                   &
00157    + PRADHT_IN(:) * PF_FLOOR_MASS (:) * (PTS_MASS(:) - ZEXPL * PT_FLOOR(:,1))  &
00158    + PLOAD_FLOOR(:)
00159 !
00160  CALL LAYER_E_BUDGET( PT_FLOOR, PTSTEP, ZIMPL, PHC_FLOOR, PTC_FLOOR, PD_FLOOR, &
00161                      ZA, ZB, ZC, ZY, PDQS_FLOOR )
00162 !
00163 !*      floor surface temperature used in the implicit formulation
00164 !       ----------------------------------------------------------
00165 ZTS_FLOOR_CONV(:) = 4./3. * ZIMPL * PT_FLOOR(:,1) + 1./3. * ZTS_FLOOR(:) * (4 * ZEXPL - 1.)
00166 ZTS_FLOOR(:) = ZEXPL * ZTS_FLOOR(:) + ZIMPL * PT_FLOOR(:,1)
00167 !
00168 !*      fluxes with mass and indoor air
00169 !       ----------------------------------------------------------
00170 PRAD_FLOOR_MASS(:) = PRADHT_IN(:)    * (ZTS_FLOOR(:) - PTS_MASS(:))
00171 PCONV_FLOOR_BLD(:) = ZCHTC_IN_FLOOR(:) * (ZTS_FLOOR_CONV(:) - PTI_BLD (:))
00172 !
00173 !*     Flux between floor and indoor surfaces and air
00174 !       ------------------------------------------------
00175 PFLX_BLD_FLOOR(:) = - PCONV_FLOOR_BLD(:)  &
00176        + PF_FLOOR_WIN  (:) * PRAD_WIN_FLOOR(:)  &
00177        + PF_FLOOR_WALL (:) * PRAD_WALL_FLOOR(:) &
00178        + PF_FLOOR_ROOF (:) * PRAD_ROOF_FLOOR(:) &
00179        + PRADHT_IN(:) * PF_FLOOR_MASS(:) * (PTS_MASS (:)  - ZTS_FLOOR(:)) &
00180        + PLOAD_FLOOR(:)
00181 !
00182 !*     Floor residual energy imbalance for verification
00183 !       ------------------------------------------------
00184 PIMB_FLOOR(:) = PFLX_BLD_FLOOR(:) - PDQS_FLOOR(:)
00185 !
00186 IF (LHOOK) CALL DR_HOOK('FLOOR_LAYER_E_BUDGET',1,ZHOOK_HANDLE)
00187 !-------------------------------------------------------------------------------
00188 END SUBROUTINE FLOOR_LAYER_E_BUDGET