SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/snow_heat_to_t_wliq.F90
Go to the documentation of this file.
00001 !      ########################
00002 MODULE MODI_SNOW_HEAT_TO_T_WLIQ
00003 !      ########################
00004 !
00005 INTERFACE SNOW_HEAT_TO_T_WLIQ
00006 !
00007 SUBROUTINE SNOW_HEAT_TO_T_WLIQ_1D(PHEAT,PRHO,PT,PWLIQ)
00008 REAL, DIMENSION(:), INTENT(IN)           :: PHEAT  ! snow heat density        (J/m3)
00009 REAL, DIMENSION(:), INTENT(IN)           :: PRHO   ! snow density             (kg/m3)
00010 REAL, DIMENSION(:), INTENT(OUT)          :: PT     ! snow temperature profile (K)
00011 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL:: PWLIQ  ! liquid water profile     (kg/m3)
00012 END SUBROUTINE SNOW_HEAT_TO_T_WLIQ_1D
00013 !
00014 SUBROUTINE SNOW_HEAT_TO_T_WLIQ_2D(PHEAT,PRHO,PT,PWLIQ)
00015 REAL, DIMENSION(:,:), INTENT(IN)           :: PHEAT  ! snow heat density        (J/m3)
00016 REAL, DIMENSION(:,:), INTENT(IN)           :: PRHO   ! snow density             (kg/m3)
00017 REAL, DIMENSION(:,:), INTENT(OUT)          :: PT     ! snow temperature profile (K)
00018 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL:: PWLIQ  ! liquid water profile     (kg/m3)
00019 END SUBROUTINE SNOW_HEAT_TO_T_WLIQ_2D
00020 !
00021 SUBROUTINE SNOW_HEAT_TO_T_WLIQ_3D(PHEAT,PRHO,PT,PWLIQ)
00022 REAL, DIMENSION(:,:,:), INTENT(IN)           :: PHEAT  ! snow heat density        (J/m3)
00023 REAL, DIMENSION(:,:,:), INTENT(IN)           :: PRHO   ! snow density             (kg/m3)
00024 REAL, DIMENSION(:,:,:), INTENT(OUT)          :: PT     ! snow temperature profile (K)
00025 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL:: PWLIQ  ! liquid water profile     (kg/m3)
00026 END SUBROUTINE SNOW_HEAT_TO_T_WLIQ_3D
00027 !
00028 END INTERFACE
00029 !
00030 END MODULE MODI_SNOW_HEAT_TO_T_WLIQ
00031 !
00032 !          ###########################################
00033 SUBROUTINE SNOW_HEAT_TO_T_WLIQ_1D(PHEAT,PRHO,PT,PWLIQ)
00034 !          ###########################################
00035 !
00036 USE MODD_SURF_PAR,   ONLY : XUNDEF
00037 USE MODD_CSTS,       ONLY : XTT, XLMTT
00038 USE MODE_SNOW3L
00039 !
00040 !
00041 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00042 USE PARKIND1  ,ONLY : JPRB
00043 !
00044 IMPLICIT NONE
00045 !
00046 !
00047 !
00048 !*      0.1    declarations of arguments
00049 !
00050 REAL, DIMENSION(:), INTENT(IN)           :: PHEAT  ! snow heat density        (J/m3)
00051 REAL, DIMENSION(:), INTENT(IN)           :: PRHO   ! snow density             (kg/m3)
00052 REAL, DIMENSION(:), INTENT(OUT)          :: PT     ! snow temperature profile (K)
00053 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL:: PWLIQ  ! liquid water profile     (kg/m3)
00054 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00055 !
00056 !
00057 !*      0.2    declarations of local variables
00058 !
00059 !---------------------------------------------------------------------------
00060 !
00061 IF (LHOOK) CALL DR_HOOK('MODI_SNOW_HEAT_TO_T_WLIQ:SNOW_HEAT_TO_T_WLIQ_1D',0,ZHOOK_HANDLE)
00062 PT = XUNDEF
00063 IF (PRESENT(PWLIQ)) PWLIQ = XUNDEF
00064 !
00065 !* temperature from heat
00066 !
00067 WHERE(PRHO/=XUNDEF) PT = XTT + (PHEAT + XLMTT*PRHO) / SNOW3LSCAP(PRHO)
00068 !
00069 !* effect of liquid water
00070 !
00071 IF (PRESENT(PWLIQ)) THEN
00072   WHERE(PRHO/=XUNDEF) PWLIQ = (PT-XTT) * SNOW3LSCAP(PRHO) / XLMTT
00073 END IF
00074 !
00075 !* physical limits
00076 !
00077 IF (PRESENT(PWLIQ)) THEN
00078   PT = MIN(XTT,PT)
00079   PWLIQ = MAX(0.,PWLIQ)
00080   PWLIQ = MIN(SNOW3LWLIQMAX(PRHO),PWLIQ)
00081 END IF
00082 IF (LHOOK) CALL DR_HOOK('MODI_SNOW_HEAT_TO_T_WLIQ:SNOW_HEAT_TO_T_WLIQ_1D',1,ZHOOK_HANDLE)
00083 !
00084 !---------------------------------------------------------------------------
00085 !
00086 END SUBROUTINE SNOW_HEAT_TO_T_WLIQ_1D
00087 !
00088 !          ###########################################
00089 SUBROUTINE SNOW_HEAT_TO_T_WLIQ_2D(PHEAT,PRHO,PT,PWLIQ)
00090 !          ###########################################
00091 !
00092 USE MODD_SURF_PAR,   ONLY : XUNDEF
00093 USE MODD_CSTS,       ONLY : XTT, XLMTT
00094 USE MODE_SNOW3L
00095 !
00096 !
00097 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00098 USE PARKIND1  ,ONLY : JPRB
00099 !
00100 IMPLICIT NONE
00101 !
00102 !
00103 !
00104 !*      0.1    declarations of arguments
00105 !
00106 REAL, DIMENSION(:,:), INTENT(IN)           :: PHEAT  ! snow heat density        (J/m3)
00107 REAL, DIMENSION(:,:), INTENT(IN)           :: PRHO   ! snow density             (kg/m3)
00108 REAL, DIMENSION(:,:), INTENT(OUT)          :: PT     ! snow temperature profile (K)
00109 REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL:: PWLIQ  ! liquid water profile     (kg/m3)
00110 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00111 !
00112 !
00113 !*      0.2    declarations of local variables
00114 !
00115 !---------------------------------------------------------------------------
00116 !
00117 IF (LHOOK) CALL DR_HOOK('MODI_SNOW_HEAT_TO_T_WLIQ:SNOW_HEAT_TO_T_WLIQ_2D',0,ZHOOK_HANDLE)
00118 PT = XUNDEF
00119 IF (PRESENT(PWLIQ)) PWLIQ = XUNDEF
00120 !
00121 !* temperature from heat
00122 !
00123 WHERE(PRHO/=XUNDEF) PT = XTT + (PHEAT + XLMTT*PRHO) / SNOW3LSCAP(PRHO)
00124 !
00125 !* effect of liquid water
00126 !
00127 IF (PRESENT(PWLIQ)) THEN
00128   WHERE(PRHO/=XUNDEF) PWLIQ = (PT-XTT) * SNOW3LSCAP(PRHO) / XLMTT
00129 END IF
00130 !
00131 !* physical limits
00132 !
00133 IF (PRESENT(PWLIQ)) THEN
00134   PT = MIN(XTT,PT)
00135   PWLIQ = MAX(0.,PWLIQ)
00136   PWLIQ = MIN(SNOW3LWLIQMAX(PRHO),PWLIQ)
00137 END IF
00138 IF (LHOOK) CALL DR_HOOK('MODI_SNOW_HEAT_TO_T_WLIQ:SNOW_HEAT_TO_T_WLIQ_2D',1,ZHOOK_HANDLE)
00139 !
00140 !---------------------------------------------------------------------------
00141 !
00142 END SUBROUTINE SNOW_HEAT_TO_T_WLIQ_2D
00143 !
00144 !          ###########################################
00145 SUBROUTINE SNOW_HEAT_TO_T_WLIQ_3D(PHEAT,PRHO,PT,PWLIQ)
00146 !          ###########################################
00147 !
00148 USE MODD_SURF_PAR,   ONLY : XUNDEF
00149 USE MODD_CSTS,       ONLY : XTT, XLMTT
00150 USE MODE_SNOW3L
00151 !
00152 !
00153 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00154 USE PARKIND1  ,ONLY : JPRB
00155 !
00156 IMPLICIT NONE
00157 !
00158 !
00159 !
00160 !*      0.1    declarations of arguments
00161 !
00162 REAL, DIMENSION(:,:,:), INTENT(IN)           :: PHEAT  ! snow heat density        (J/m3)
00163 REAL, DIMENSION(:,:,:), INTENT(IN)           :: PRHO   ! snow density             (kg/m3)
00164 REAL, DIMENSION(:,:,:), INTENT(OUT)          :: PT     ! snow temperature profile (K)
00165 REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL:: PWLIQ  ! liquid water profile     (kg/m3)
00166 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00167 !
00168 !
00169 !*      0.2    declarations of local variables
00170 !
00171 !---------------------------------------------------------------------------
00172 !
00173 IF (LHOOK) CALL DR_HOOK('MODI_SNOW_HEAT_TO_T_WLIQ:SNOW_HEAT_TO_T_WLIQ_3D',0,ZHOOK_HANDLE)
00174 PT = XUNDEF
00175 IF (PRESENT(PWLIQ)) PWLIQ = XUNDEF
00176 !
00177 !* temperature from heat
00178 !
00179 WHERE(PRHO/=XUNDEF) PT = XTT + (PHEAT + XLMTT*PRHO) / SNOW3LSCAP(PRHO)
00180 !
00181 !* effect of liquid water
00182 !
00183 IF (PRESENT(PWLIQ)) THEN
00184   WHERE(PRHO/=XUNDEF) PWLIQ = (PT-XTT) * SNOW3LSCAP(PRHO) / XLMTT
00185 END IF
00186 !
00187 !* physical limits
00188 !
00189 IF (PRESENT(PWLIQ)) THEN
00190   PT = MIN(XTT,PT)
00191   PWLIQ = MAX(0.,PWLIQ)
00192   PWLIQ = MIN(SNOW3LWLIQMAX(PRHO),PWLIQ)
00193 END IF
00194 IF (LHOOK) CALL DR_HOOK('MODI_SNOW_HEAT_TO_T_WLIQ:SNOW_HEAT_TO_T_WLIQ_3D',1,ZHOOK_HANDLE)
00195 !
00196 !---------------------------------------------------------------------------
00197 !
00198 END SUBROUTINE SNOW_HEAT_TO_T_WLIQ_3D