*IF DEF,A08_5A AJS1F401.1513
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.14538
C GTS2F400.14539
C Use, duplication or disclosure of this code is subject to the GTS2F400.14540
C restrictions as set forth in the contract. GTS2F400.14541
C GTS2F400.14542
C Meteorological Office GTS2F400.14543
C London Road GTS2F400.14544
C BRACKNELL GTS2F400.14545
C Berkshire UK GTS2F400.14546
C RG12 2SZ GTS2F400.14547
C GTS2F400.14548
C If no contract has been raised with this copy of the code, the use, GTS2F400.14549
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.14550
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.14551
C Modelling at the above address. GTS2F400.14552
C ******************************COPYRIGHT****************************** GTS2F400.14553
C GTS2F400.14554
CLL SUBROUTINE SFSNOW ------------------------------------------------ SFSNOW2A.3
CLL SFSNOW2A.4
CLL Purpose: Calculates the decrease/increase in snowdepth due to the SFSNOW2A.5
CLL sublimation/deposition of lying snow; adds the large- SFSNOW2A.6
CLL scale and convective snowfall to the snowdepth; SFSNOW2A.7
CLL melts snow when the input surface temperature is above SFSNOW2A.8
CLL the melting point of ice, and adjusts the surface SFSNOW2A.9
CLL temperature to account for latent cooling thus caused. SFSNOW2A.10
CLL SFSNOW2A.11
CLL Model Modification history from model version 3.0: SFSNOW2A.12
CLL version Date SFSNOW2A.13
CLL SFSNOW2A.14
CLL 4.4 17/9/97 Updates snow grain size if required for ARE2F404.489
CLL prognostic snow albedo R. Essery ARE2F404.490
CLL ARE2F404.491
CLL Programming standard: Unified Model Documentation Paper No.4 SFSNOW2A.15
CLL version no. 2, dated 18/1/90. SFSNOW2A.16
CLL SFSNOW2A.17
CLL Logical component covered: P251. SFSNOW2A.18
CLL SFSNOW2A.19
CLL System task: SFSNOW2A.20
CLL SFSNOW2A.21
CLL Documentation: um documentation paper no 25 SFSNOW2A.22
CLLEND------------------------------------------------------------------ SFSNOW2A.30
C SFSNOW2A.31
C*L ARGUMENTS:--------------------------------------------------------- SFSNOW2A.32
SUBROUTINE SFSNOW( 3,4SFSNOW2A.33
+ ASOIL,CONV_SNOW,LS_SNOW,SNOW_SUB,TSTAR,TIMESTEP,POINTS, ARE2F404.492
+ LYING_SNOW,RGRAIN,L_SNOW_ALBEDO,TS1,SNOWMELT, ARE2F404.493
+ SNOMLT_SUB_HTF,STF_HF_SNOW_MELT, ARE2F404.494
+ LTIMER) AJS1F401.1515
IMPLICIT NONE SFSNOW2A.37
INTEGER POINTS ! IN Number of points to be processed. SFSNOW2A.38
REAL SFSNOW2A.39
+ ASOIL(POINTS) ! IN Reciprocal areal heat capacity of top SFSNOW2A.40
C ! soil layer (K m2 / J). SFSNOW2A.41
+,CONV_SNOW(POINTS) ! IN Convective snowfall (kg per sq m per s) SFSNOW2A.42
+,LS_SNOW(POINTS) ! IN Large-scale snowfall (kg per sq m per s) SFSNOW2A.43
+,SNOW_SUB(POINTS) ! IN Sublimation of lying snow (kg/sq m/s). SFSNOW2A.44
+,TIMESTEP ! IN Timestep in seconds. SFSNOW2A.45
+,TSTAR(POINTS) ! IN Surface temperature (K). ARE2F404.495
REAL SFSNOW2A.46
+ LYING_SNOW(POINTS) ! INOUT Snow on the ground (kg per sq m). SFSNOW2A.47
+,RGRAIN(POINTS) ! INOUT Snow grain size (microns). ARE2F404.496
+,SNOWMELT(POINTS) ! IN Surface snowmelt (kg/m2/s). SFSNOW2A.48
C ! OUT Total snowmelt (kg/m2/s). SFSNOW2A.49
+,TS1(POINTS) ! INOUT Surface layer temperature (K). SFSNOW2A.50
REAL SFSNOW2A.51
+ SNOMLT_SUB_HTF(POINTS)! OUT Sub-surface snowmelt heat flux (W/m2) SFSNOW2A.52
LOGICAL SFSNOW2A.53
+ STF_HF_SNOW_MELT ! IN Stash flag for snow melt heat flux SFSNOW2A.54
+,L_SNOW_ALBEDO ! IN Flag for prognostic snow albedo ARE2F404.497
LOGICAL AJS1F401.1516
+ LTIMER AJS1F401.1517
C----------------------------------------------------------------------- SFSNOW2A.55
C* SFSNOW2A.56
C Define common then local physical constants -------------------------- SFSNOW2A.57
*CALL C_LHEAT
SFSNOW2A.58
*CALL C_0_DG_C
SFSNOW2A.59
C NO EXTERNAL SUBROUTINES CALLED---------------------------------------- SFSNOW2A.60
C*---------------------------------------------------------------------- SFSNOW2A.61
C Define local variables----------------------------------------------- SFSNOW2A.62
REAL SFSNOW2A.63
+ SNOMLT_SUB ! Sub-surface snow melt. SFSNOW2A.64
+,R0 ! Grain size for fresh snow (microns). ARE2F404.498
+,RMAX ! Maximum snow grain size (microns). ARE2F404.499
+,RATE ! Grain area growth rate (microns**2 / s). ARE2F404.500
+,SNOWFALL ! Snowfall in timestep (kg/m2). ARE2F404.501
PARAMETER (R0 = 50., RMAX = 2000.) ARE2F404.502
INTEGER I ! Loop counter; horizontal field index. SFSNOW2A.65
C SFSNOW2A.66
IF (LTIMER) THEN AJS1F401.1518
CALL TIMER
('SFSNOW ',3) AJS1F401.1519
ENDIF AJS1F401.1520
DO 1 I=1,POINTS SFSNOW2A.67
SNOMLT_SUB = 0.0 SFSNOW2A.68
C SFSNOW2A.69
C----------------------------------------------------------------------- SFSNOW2A.70
CL Alter snowdepth as a result of snowfall, turbulent mass transport and SFSNOW2A.71
CL surface melt. SFSNOW2A.72
C----------------------------------------------------------------------- SFSNOW2A.73
C SFSNOW2A.74
LYING_SNOW(I) = TIMESTEP*(LS_SNOW(I) + CONV_SNOW(I)) + SFSNOW2A.75
& MAX( 0.0, LYING_SNOW(I)-TIMESTEP*(SNOW_SUB(I)+SNOWMELT(I)) ) SFSNOW2A.76
C SFSNOW2A.77
C----------------------------------------------------------------------- SFSNOW2A.78
CL Melt snow over land if TS1 is above freezing. SFSNOW2A.79
CL Adjust TS1 accordingly. SFSNOW2A.80
C----------------------------------------------------------------------- SFSNOW2A.81
C SFSNOW2A.82
IF (TS1(I).GT.TM .AND. LYING_SNOW(I).GT.0.0) THEN SFSNOW2A.83
IF (ASOIL(I).GT.0.0) THEN SFSNOW2A.84
SNOMLT_SUB = MIN( LYING_SNOW(I)/TIMESTEP, SFSNOW2A.85
& (TS1(I) - TM)/(LF*ASOIL(I)*TIMESTEP) ) SFSNOW2A.86
!----------------------------------------------------------------------- SFSNOW2A.87
! For N/S boundaries in LAMS and polar rows in global model SFSNOW2A.88
! ASOIL will not have been calculated for these rows so diagnostics SFSNOW2A.89
! are not valid so just set to zero SFSNOW2A.90
!----------------------------------------------------------------------- SFSNOW2A.91
ELSE SFSNOW2A.92
SNOMLT_SUB = 0.0 SFSNOW2A.93
ENDIF SFSNOW2A.94
TS1(I) = TS1(I) - ASOIL(I)*TIMESTEP*LF*SNOMLT_SUB SFSNOW2A.95
LYING_SNOW(I) = LYING_SNOW(I) - TIMESTEP*SNOMLT_SUB SFSNOW2A.96
SNOWMELT(I) = SNOWMELT(I) + SNOMLT_SUB SFSNOW2A.97
ENDIF SFSNOW2A.98
IF (STF_HF_SNOW_MELT) SNOMLT_SUB_HTF(I) = LF*SNOMLT_SUB SFSNOW2A.99
1 CONTINUE SFSNOW2A.100
ARE2F404.503
!----------------------------------------------------------------------- ARE2F404.504
! Increment snow grain size used in albedo calculations ARE2F404.505
!----------------------------------------------------------------------- ARE2F404.506
IF ( L_SNOW_ALBEDO ) THEN ARE2F404.507
DO I=1,POINTS ARE2F404.508
IF ( LYING_SNOW(I) .GT. 0.) THEN ARE2F404.509
SNOWFALL = TIMESTEP*(LS_SNOW(I) + CONV_SNOW(I)) ARE2F404.510
RATE = 0.6 ARE2F404.511
IF (TSTAR(I) .LT. TM) THEN ARE2F404.512
IF (RGRAIN(I) .LT. 150.) THEN ARE2F404.513
RATE = 0.06 ARE2F404.514
ELSE ARE2F404.515
RATE = 0.23E6*EXP(-3.7E4/(8.13451*TSTAR(I))) ARE2F404.516
ENDIF ARE2F404.517
ENDIF ARE2F404.518
RGRAIN(I) = SQRT( RGRAIN(I)**2 + (RATE/3.14159)*TIMESTEP ) ARE2F404.519
& - (RGRAIN(I) - R0)*SNOWFALL/2.5 ARE2F404.520
RGRAIN(I) = MIN( RMAX, RGRAIN(I) ) ARE2F404.521
RGRAIN(I) = MAX( R0, RGRAIN(I) ) ARE2F404.522
ELSE ARE2F404.523
RGRAIN(I) = R0 ARE2F404.524
ENDIF ARE2F404.525
ENDDO ARE2F404.526
ENDIF ARE2F404.527
ARE2F404.528
IF (LTIMER) THEN AJS1F401.1521
CALL TIMER
('SFSNOW ',4) AJS1F401.1522
ENDIF AJS1F401.1523
RETURN SFSNOW2A.101
END SFSNOW2A.102
*ENDIF SFSNOW2A.103