SURFEX v7.3
General documentation of Surfex
|
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