*IF DEF,A03_5A SFMELT5A.2
C *****************************COPYRIGHT****************************** SFMELT5A.3
C (c) CROWN COPYRIGHT 1996, METEOROLOGICAL OFFICE, All Rights Reserved. SFMELT5A.4
C SFMELT5A.5
C Use, duplication or disclosure of this code is subject to the SFMELT5A.6
C restrictions as set forth in the contract. SFMELT5A.7
C SFMELT5A.8
C Meteorological Office SFMELT5A.9
C London Road SFMELT5A.10
C BRACKNELL SFMELT5A.11
C Berkshire UK SFMELT5A.12
C RG12 2SZ SFMELT5A.13
C SFMELT5A.14
C If no contract has been raised with this copy of the code, the use, SFMELT5A.15
C duplication or disclosure of it is strictly prohibited. Permission SFMELT5A.16
C to do so must first be obtained in writing from the Head of Numerical SFMELT5A.17
C Modelling at the above address. SFMELT5A.18
C ******************************COPYRIGHT****************************** SFMELT5A.19
C SUBROUTINE SF_MELT---------------------------------------------------- SFMELT5A.20
C Purpose : Calculates surface melting (snow and sea-ice) and increments SFMELT5A.21
C in surface fluxes to satisfy energy balance. SFMELT5A.22
C Sub-surface snowmelt is calculated and snowdepth incremented SFMELT5A.23
C by melt and sublimation in P251. SFMELT5A.24
C R.Essery 19/1/95 SFMELT5A.25
C Modification History: AJC1F405.67
C Version Date Change AJC1F405.68
C 4.5 Jul. 98 Kill the IBM specific lines (JCThil) AJC1F405.69
C----------------------------------------------------------------------- SFMELT5A.26
SUBROUTINE SF_MELT( 3,6SFMELT5A.27
+ P_FIELD,P1,LAND_FIELD,LAND1 SFMELT5A.28
+,POINTS,LAND_MASK,LAND_PTS,LAND_INDEX SFMELT5A.32
+,ALPHA1,ASHTF,ASURF,ICE_FRACT SFMELT5A.34
+,RHOKH1_PRIME,TIMESTEP,SIMLT,SMLT,DFQW,DIFF_SENS_HTF SFMELT5A.35
+,EI,LYING_SNOW,SURF_HT_FLUX,TSTAR,TI SFMELT5A.36
+,SICE_MLT_HTF,SNOMLT_SURF_HTF,SNOWMELT,LTIMER SFMELT5A.37
+) SFMELT5A.38
IMPLICIT NONE SFMELT5A.39
LOGICAL LTIMER SFMELT5A.40
INTEGER SFMELT5A.41
+ P_FIELD ! IN No. of gridpoints in the whole grid. SFMELT5A.42
+,P1 ! IN 1st P-pt in full field to be processed. SFMELT5A.43
+,LAND_FIELD ! IN No. of land points in the whole grid. SFMELT5A.44
+,LAND1 ! IN 1st L-pt in full field to be processed. SFMELT5A.45
+,POINTS ! IN No. of gridpoints to be processed. SFMELT5A.46
+,LAND_PTS ! IN No. of land points to be processed. SFMELT5A.47
LOGICAL SFMELT5A.48
+ LAND_MASK(P_FIELD) ! IN T for land points, F otherwise. SFMELT5A.49
INTEGER SFMELT5A.51
+ LAND_INDEX(P_FIELD) ! IN Index of land points on the P-grid. SFMELT5A.52
C ! The ith element contains the position SFMELT5A.53
C ! in whole grid of the ith land point. SFMELT5A.54
REAL SFMELT5A.56
+ ALPHA1(P_FIELD) ! IN Gradient of saturated specific SFMELT5A.57
C ! humidity with respect to temp. SFMELT5A.58
C ! between the bottom model layer SFMELT5A.59
C ! and the surface. SFMELT5A.60
+,ASHTF(P_FIELD) ! IN Forward time weighted coeff. SFMELT5A.61
C ! to calculate the soil heat flux SFMELT5A.62
C ! between the surface and top soil SFMELT5A.63
C ! layer (W/m2/K). SFMELT5A.64
+,ASURF(P_FIELD) ! IN Reciprocal areal heat capacity of SFMELT5A.65
C ! top soil layer or sea-ice surface SFMELT5A.66
C ! layer (m2 K / J). SFMELT5A.67
+,ICE_FRACT(P_FIELD) ! IN Fraction of gridbox which is covered SFMELT5A.68
C ! by sea-ice. SFMELT5A.69
+,RHOKH1_PRIME(P_FIELD)! IN Modified forward time-weighted SFMELT5A.70
C ! transfer coefficient. SFMELT5A.71
+,TIMESTEP ! IN Timestep (sec). SFMELT5A.72
LOGICAL SFMELT5A.73
+ SIMLT ! IN STASH flag for sea-ice melting ht flux. SFMELT5A.74
+,SMLT ! IN STASH flag for snow melting ht flux. SFMELT5A.75
REAL SFMELT5A.76
+ DFQW(P_FIELD) ! INOUT Increment to the flux of total SFMELT5A.77
C ! water. SFMELT5A.78
+,DIFF_SENS_HTF(P_FIELD)! INOUT Increment to the sensible heat SFMELT5A.79
C ! flux (W/m2). SFMELT5A.80
+,EI(P_FIELD) ! INOUT Sublimation from lying snow or SFMELT5A.81
C ! sea-ice (Kg/m2/s). SFMELT5A.82
+,LYING_SNOW(P_FIELD) ! INOUT Lying snow (kg/m2). SFMELT5A.83
+,SURF_HT_FLUX(P_FIELD)! INOUT Net downward heat flux at surface SFMELT5A.84
C ! over land or sea-ice fraction of SFMELT5A.85
C ! gridbox (W/m2). SFMELT5A.86
+,TSTAR(P_FIELD) ! INOUT Surface temperature (K). SFMELT5A.87
+,TI(P_FIELD) ! INOUT Sea-ice surface layer temp. (K). SFMELT5A.88
+,SICE_MLT_HTF(P_FIELD)! OUT Heat flux due to melting of sea-ice SFMELT5A.89
C ! (W/m2). SFMELT5A.90
+,SNOMLT_SURF_HTF(P_FIELD)! OUT Heat flux due to surface melting SFMELT5A.91
C ! of snow (W/m2). SFMELT5A.92
+,SNOWMELT(P_FIELD) ! OUT Surface snowmelt (kg/m2/s). SFMELT5A.93
*CALL C_0_DG_C
SFMELT5A.94
*CALL C_LHEAT
SFMELT5A.95
*CALL C_R_CP
SFMELT5A.96
REAL SFMELT5A.97
+ DMELT ! Temporary in calculations of melting SFMELT5A.98
C ! heat fluxes. SFMELT5A.99
+,DIFF_EI ! Increment to sublimation. SFMELT5A.100
+,DTSTAR ! Increment to surface temperature. SFMELT5A.101
+,DIFF_SURF_HTF ! Increment to surface heat flux. SFMELT5A.102
+,SNOW_MAX ! Snow available for melting at land SFMELT5A.103
C ! points. SFMELT5A.104
+,TSTARMAX ! Maximum gridbox mean surface temperature SFMELT5A.105
C ! at sea points with ice. SFMELT5A.106
INTEGER SFMELT5A.107
+ I ! Loop counter - full horizontal field. SFMELT5A.108
+,L ! Loop counter - land field. SFMELT5A.109
C SFMELT5A.110
IF (LTIMER) THEN SFMELT5A.111
CALL TIMER
('SFMELT ',3) SFMELT5A.112
ENDIF SFMELT5A.113
DO 1 I=P1,P1+POINTS-1 SFMELT5A.114
IF (SIMLT) SICE_MLT_HTF(I) = 0.0 SFMELT5A.115
IF (SMLT) SNOMLT_SURF_HTF(I) = 0.0 SFMELT5A.116
SNOWMELT(I) = 0.0 SFMELT5A.117
1 CONTINUE SFMELT5A.118
CDIR$ IVDEP SFMELT5A.124
! Fujitsu vectorization directive GRB0F405.499
!OCL NOVREC GRB0F405.500
DO 10 L=LAND1,LAND1+LAND_PTS-1 SFMELT5A.125
I = LAND_INDEX(L) SFMELT5A.126
C SFMELT5A.128
C----------------------------------------------------------------------- SFMELT5A.129
C Melt snow if TSTAR is greater than TM. SFMELT5A.130
C----------------------------------------------------------------------- SFMELT5A.131
SNOW_MAX = MAX(0.0, LYING_SNOW(I) - EI(I)*TIMESTEP ) SFMELT5A.132
IF ( SNOW_MAX.GT.0.0 .AND. TSTAR(I).GT.TM ) THEN SFMELT5A.133
DMELT = ( CP + LC * ALPHA1(I) ) * RHOKH1_PRIME(I) + ASHTF(I) SFMELT5A.134
DTSTAR = - MIN ( TSTAR(I) - TM , SFMELT5A.135
& LF * SNOW_MAX / ( TIMESTEP * DMELT ) ) SFMELT5A.136
DMELT = DMELT + LF * ALPHA1(I) * RHOKH1_PRIME(I) SFMELT5A.137
SNOWMELT(I) = - DMELT * DTSTAR / LF SFMELT5A.138
DIFF_SENS_HTF(I) = DIFF_SENS_HTF(I) + SFMELT5A.139
& CP * RHOKH1_PRIME(I) * DTSTAR SFMELT5A.140
DIFF_EI = ALPHA1(I) * RHOKH1_PRIME(I) * DTSTAR SFMELT5A.141
EI(I) = EI(I) + DIFF_EI SFMELT5A.142
DFQW(I) = DFQW(I) + DIFF_EI SFMELT5A.143
DIFF_SURF_HTF = ASHTF(I) * DTSTAR SFMELT5A.144
SURF_HT_FLUX(I) = SURF_HT_FLUX(I) + DIFF_SURF_HTF SFMELT5A.145
TSTAR(I) = TSTAR(I) + DTSTAR SFMELT5A.146
IF (SMLT) SNOMLT_SURF_HTF(I) = LF*SNOWMELT(I) SFMELT5A.147
ENDIF SFMELT5A.148
10 CONTINUE ! End of loop over land points SFMELT5A.152
DO 20 I=P1,P1+POINTS-1 SFMELT5A.153
IF ( .NOT. LAND_MASK(I) ) THEN SFMELT5A.154
IF ( ICE_FRACT(I) .GT. 0.0 ) THEN SFMELT5A.156
C----------------------------------------------------------------------- SFMELT5A.157
C Melt sea-ice if TSTAR > TSTARMAX or TI > TM. SFMELT5A.158
C----------------------------------------------------------------------- SFMELT5A.159
TSTARMAX = ICE_FRACT(I)*TM + (1.0 - ICE_FRACT(I))*TFS SFMELT5A.160
IF ( TSTAR(I) .GT. TSTARMAX ) THEN SFMELT5A.161
DTSTAR = TSTARMAX - TSTAR(I) SFMELT5A.162
DMELT = (CP + (LC + LF)*ALPHA1(I))*RHOKH1_PRIME(I) SFMELT5A.163
& + ASHTF(I) SFMELT5A.164
DIFF_SENS_HTF(I) = CP * RHOKH1_PRIME(I) * DTSTAR SFMELT5A.165
DIFF_EI = ALPHA1(I) * RHOKH1_PRIME(I) * DTSTAR SFMELT5A.166
EI(I) = EI(I) + DIFF_EI SFMELT5A.167
DFQW(I) = DFQW(I) + DIFF_EI SFMELT5A.168
DIFF_SURF_HTF = ASHTF(I) * DTSTAR SFMELT5A.169
TI(I) =TI(I) + ASURF(I) * TIMESTEP * DIFF_SURF_HTF SFMELT5A.170
TSTAR(I) = TSTARMAX SFMELT5A.171
IF (SIMLT) SICE_MLT_HTF(I) = - DMELT * DTSTAR SFMELT5A.172
ENDIF SFMELT5A.173
IF ( TI(I) .GT. TM ) THEN SFMELT5A.174
IF (SIMLT) SICE_MLT_HTF(I) = SICE_MLT_HTF(I) + SFMELT5A.175
& (TI(I) - TM)/(ASURF(I)*TIMESTEP) SFMELT5A.176
TI(I) = TM SFMELT5A.177
ENDIF SFMELT5A.178
SFMELT5A.179
ENDIF ! Sea-ice SFMELT5A.180
ENDIF ! Sea SFMELT5A.185
20 CONTINUE ! End of loop over sea points SFMELT5A.186
IF (LTIMER) THEN SFMELT5A.188
CALL TIMER
('SFMELT ',4) SFMELT5A.189
ENDIF SFMELT5A.190
RETURN SFMELT5A.191
END SFMELT5A.192
*ENDIF SFMELT5A.193