|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE ICE_SEA_FLUX(PZ0ICE, & 00003 PTA, PEXNA, PRHOA, PTICE, PEXNS, PQA, PRR, PRS, & 00004 PVMOD, PZREF, PUREF, & 00005 PPS, PQSAT, & 00006 PSFTH, PSFTQ, PUSTAR, & 00007 PCD, PCDN, PCH, PRI, PRESA, PZ0HICE ) 00008 ! ####################################################################### 00009 ! 00010 ! 00011 !!**** *ICE_SEA_FLUX* 00012 !! 00013 !! PURPOSE 00014 !! ------- 00015 ! Calculate the surface fluxes of heat, moisture, and momentum over 00016 ! sea ice. adapted from WATER_FLUX 00017 ! 00018 !!** METHOD 00019 !! ------ 00020 ! 00021 !! EXTERNAL 00022 !! -------- 00023 !! 00024 !! IMPLICIT ARGUMENTS 00025 !! ------------------ 00026 !! 00027 !! 00028 !! REFERENCE 00029 !! --------- 00030 !! 00031 !! AUTHOR 00032 !! ------ 00033 !! S. Belair * Meteo-France * 00034 !! 00035 !! MODIFICATIONS 00036 !! ------------- 00037 !! Original 01/09/95 00038 !! (J.Stein) 16/11/95 use PUSLOPE and Theta to compute Ri 00039 !! (P.Lacarrere) 19/03/96 bug in the ZTHVI and ZTHVIS computations 00040 !! (J.Stein) 27/03/96 use only H and LE in the soil scheme 00041 !! (P.Jabouille) 12/11/96 bug in the Z0 computation 00042 !! (V.Masson) 01/02/00 detection of sea ice 00043 !! (P. Tulet) 01/10/03 aerodynamical resistance output 00044 !! (P. LeMoigne) 29/03/04 bug in the heat flux computation 00045 !! (P. LeMoigne) 09/02/06 Z0H as output 00046 !! B. Decharme 06/2009 limitation of Ri 00047 !! Modified 09/2009 B. Decharme: limitation of Ri in surface_ri.F90 00048 !------------------------------------------------------------------------------- 00049 ! 00050 !* 0. DECLARATIONS 00051 ! ------------ 00052 ! 00053 USE MODD_CSTS, ONLY : XG, XCPD 00054 USE MODD_SURF_PAR, ONLY : XUNDEF 00055 USE MODD_SURF_ATM, ONLY : LDRAG_COEF_ARP, LRRGUST_ARP, XRRSCALE, & 00056 XRRGAMMA, XUTILGUST 00057 USE MODD_SNOW_PAR, ONLY : XZ0SN, XZ0HSN 00058 ! 00059 USE MODI_SURFACE_RI 00060 USE MODI_SURFACE_AERO_COND 00061 USE MODI_SURFACE_CD 00062 USE MODI_SURFACE_CDCH_1DARP 00063 USE MODI_WIND_THRESHOLD 00064 ! 00065 USE MODE_THERMOS 00066 ! 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 ! 00077 REAL, DIMENSION(:), INTENT(IN) :: PTA ! air temperature at atm. level 00078 REAL, DIMENSION(:), INTENT(IN) :: PQA ! air humidity at atm. level (kg/kg) 00079 REAL, DIMENSION(:), INTENT(IN) :: PEXNA ! Exner function at atm. level 00080 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density at atm. level 00081 REAL, DIMENSION(:), INTENT(IN) :: PVMOD ! module of wind at atm. wind level 00082 REAL, DIMENSION(:), INTENT(IN) :: PZREF ! atm. level for temp. and humidity 00083 REAL, DIMENSION(:), INTENT(IN) :: PUREF ! atm. level for wind 00084 REAL, DIMENSION(:), INTENT(IN) :: PTICE ! Sea ice Surface Temperature 00085 REAL, DIMENSION(:), INTENT(IN) :: PEXNS ! Exner function at sea surface 00086 REAL, DIMENSION(:), INTENT(IN) :: PPS ! air pressure at sea surface 00087 REAL, DIMENSION(:), INTENT(IN) :: PRR ! rain rate 00088 REAL, DIMENSION(:), INTENT(IN) :: PRS ! snow rate 00089 ! 00090 REAL, DIMENSION(:), INTENT(INOUT) :: PZ0ICE! roughness length over the sea ice 00091 ! 00092 ! 00093 ! surface fluxes : latent heat, sensible heat, friction fluxes 00094 REAL, DIMENSION(:), INTENT(OUT) :: PSFTH ! heat flux (W/m2) 00095 REAL, DIMENSION(:), INTENT(OUT) :: PSFTQ ! water flux (kg/m2/s) 00096 REAL, DIMENSION(:), INTENT(OUT) :: PUSTAR! friction velocity (m/s) 00097 ! 00098 ! diagnostics 00099 REAL, DIMENSION(:), INTENT(OUT) :: PQSAT ! humidity at saturation 00100 REAL, DIMENSION(:), INTENT(OUT) :: PCD ! heat drag coefficient 00101 REAL, DIMENSION(:), INTENT(OUT) :: PCDN ! momentum drag coefficient 00102 REAL, DIMENSION(:), INTENT(OUT) :: PCH ! neutral momentum drag coefficient 00103 REAL, DIMENSION(:), INTENT(OUT) :: PRI ! Richardson number 00104 REAL, DIMENSION(:), INTENT(OUT) :: PRESA ! aerodynamical resistance 00105 REAL, DIMENSION(:), INTENT(OUT) :: PZ0HICE ! heat roughness length 00106 ! 00107 ! 00108 !* 0.2 declarations of local variables 00109 ! 00110 ! 00111 REAL, DIMENSION(SIZE(PTA)) :: ZVMOD ! wind modulus 00112 REAL, DIMENSION(SIZE(PTA)) :: ZUSTAR2 ! square of friction velocity 00113 REAL, DIMENSION(SIZE(PTA)) :: ZAC ! Aerodynamical conductance 00114 REAL, DIMENSION(SIZE(PTA)) :: ZRA ! Aerodynamical resistance 00115 REAL, DIMENSION(SIZE(PTA)) :: ZDIRCOSZW ! orography slope cosine (=1 on water!) 00116 REAL, DIMENSION(SIZE(PTA)) :: ZFP ! working variable 00117 REAL, DIMENSION(SIZE(PTA)) :: ZRRCOR ! correction od CD, CH, CDN due to moist-gustiness 00118 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00119 00120 ! 00121 !------------------------------------------------------------------------------- 00122 ! 00123 ! 1. Initializations 00124 ! --------------- 00125 ! 00126 IF (LHOOK) CALL DR_HOOK('ICE_SEA_FLUX',0,ZHOOK_HANDLE) 00127 ZDIRCOSZW=1. 00128 ! 00129 PRI(:) = XUNDEF 00130 PCH(:) = XUNDEF 00131 PCD(:) = XUNDEF 00132 PCDN(:) = XUNDEF 00133 ! 00134 PSFTH (:)=XUNDEF 00135 PSFTQ (:)=XUNDEF 00136 PUSTAR(:)=XUNDEF 00137 PRESA(:)=XUNDEF 00138 ! 00139 ! 00140 ! 1.1 Saturated specified humidity near the water surface 00141 ! --------------------------------------------------- 00142 ! 00143 PQSAT(:) = QSAT(PTICE(:),PPS(:)) 00144 ! 00145 !------------------------------------------------------------------------------- 00146 ! 00147 ! 2. Calculate the drag coefficient for momentum (PCD) 00148 ! ------------------------------------------------- 00149 ! 00150 ! 2.1 Richardson number 00151 ! ----------------- 00152 ! 00153 00154 CALL SURFACE_RI(PTICE,PQSAT,PEXNS,PEXNA,PTA,PQA, & 00155 PZREF, PUREF, ZDIRCOSZW,PVMOD,PRI) 00156 ! 00157 ! 00158 ! 2.2 Z0 for sea ice 00159 ! -------------------- 00160 ! 00161 PZ0HICE(:) = XZ0HSN 00162 ! 00163 PZ0ICE (:) = XZ0SN 00164 ! 00165 ! 2.3 Drag coefficient 00166 ! ---------------- 00167 ! 00168 ZVMOD(:)=WIND_THRESHOLD(PVMOD(:),PUREF(:)) 00169 ! 00170 IF (LDRAG_COEF_ARP) THEN 00171 ! 00172 CALL SURFACE_CDCH_1DARP(PZREF, PZ0ICE, PZ0HICE , ZVMOD, PTA, PTICE, & 00173 PQA, PQSAT, PCD, PCDN, PCH ) 00174 ! 00175 ZRA(:) = 1. / ( PCH(:) * ZVMOD(:) ) 00176 ! 00177 ELSE 00178 00179 CALL SURFACE_CD(PRI, PZREF, PUREF, PZ0ICE, PZ0HICE , PCD, PCDN) 00180 ! 00181 !------------------------------------------------------------------------------- 00182 ! 00183 ! 3. Drag coefficient for heat and aerodynamical resistance 00184 ! ------------------------------------------------------- 00185 ! 00186 CALL SURFACE_AERO_COND(PRI, PZREF, PUREF, ZVMOD, PZ0ICE, PZ0HICE , ZAC, ZRA, PCH) 00187 ! 00188 ENDIF 00189 ! 00190 ZUSTAR2(:) = PCD(:)*ZVMOD(:)*ZVMOD(:) 00191 ! 00192 PRESA(:) = ZRA(:) 00193 ! 00194 IF (LRRGUST_ARP) THEN 00195 ZFP(:)=MAX(0.0,PRR(:)+PRS(:)) 00196 ZRRCOR(:)=SQRT(1.0+((((ZFP(:)/(ZFP(:)+XRRSCALE))**XRRGAMMA)*XUTILGUST)**2) & 00197 /(PCD(:)*ZVMOD(:)**2)) 00198 00199 PCD = PCD*ZRRCOR 00200 PCH = PCH*ZRRCOR 00201 PCDN = PCDN*ZRRCOR 00202 ENDIF 00203 ! 00204 !------------------------------------------------------------------------------- 00205 ! 00206 ! 4. The fluxes 00207 ! ---------- 00208 ! 00209 PSFTH (:) = XCPD * PRHOA(:) * PCH(:) * ZVMOD(:) * ( PTICE(:) -PTA(:) * PEXNS(:) / PEXNA(:) ) / PEXNS(:) 00210 PSFTQ (:) = PRHOA(:) * PCH(:) * ZVMOD(:) * ( PQSAT(:)-PQA(:) ) 00211 PUSTAR(:) = SQRT(ZUSTAR2(:)) 00212 IF (LHOOK) CALL DR_HOOK('ICE_SEA_FLUX',1,ZHOOK_HANDLE) 00213 ! 00214 ! 00215 !------------------------------------------------------------------------------- 00216 ! 00217 END SUBROUTINE ICE_SEA_FLUX
1.8.0