From 3857e9ff4edbf06d109b4ccfb57a96e8c3d2f39e Mon Sep 17 00:00:00 2001 From: Gaelle DELAUTIER <gaelle.delautier@meteo.fr> Date: Tue, 19 Jun 2018 14:44:07 +0200 Subject: [PATCH] Gaellle 19/6/2018 : mv *.f90 *.F90 --- src/SURFEX/blowsnw_dep.f90 | 66 -- src/SURFEX/blowsnw_diffk.f90 | 69 -- src/SURFEX/blowsnw_init_names.f90 | 97 -- src/SURFEX/blowsnw_velgrav1d.f90 | 286 ----- src/SURFEX/canopy_blowsnw_subl.f90 | 276 ----- src/SURFEX/canopy_evol_blowsnw.f90 | 274 ----- src/SURFEX/gamma.f90 | 224 ---- src/SURFEX/gamma_inc_low.f90 | 130 --- src/SURFEX/modd_blowsnw_sedim_lkt1d.f90 | 54 - src/SURFEX/modd_blowsnw_surf.f90 | 77 -- src/SURFEX/modd_blowsnwn.f90 | 51 - src/SURFEX/mode_blowsnw_mblutl.f90 | 667 ------------ src/SURFEX/mode_blowsnw_sedim_lkt1d.f90 | 1297 ----------------------- src/SURFEX/mode_blowsnw_surf.f90 | 118 --- src/SURFEX/modn_blowsnw.f90 | 42 - src/SURFEX/snowpack_evol.f90 | 744 ------------- 16 files changed, 4472 deletions(-) delete mode 100644 src/SURFEX/blowsnw_dep.f90 delete mode 100644 src/SURFEX/blowsnw_diffk.f90 delete mode 100644 src/SURFEX/blowsnw_init_names.f90 delete mode 100644 src/SURFEX/blowsnw_velgrav1d.f90 delete mode 100644 src/SURFEX/canopy_blowsnw_subl.f90 delete mode 100644 src/SURFEX/canopy_evol_blowsnw.f90 delete mode 100644 src/SURFEX/gamma.f90 delete mode 100644 src/SURFEX/gamma_inc_low.f90 delete mode 100644 src/SURFEX/modd_blowsnw_sedim_lkt1d.f90 delete mode 100644 src/SURFEX/modd_blowsnw_surf.f90 delete mode 100644 src/SURFEX/modd_blowsnwn.f90 delete mode 100644 src/SURFEX/mode_blowsnw_mblutl.f90 delete mode 100644 src/SURFEX/mode_blowsnw_sedim_lkt1d.f90 delete mode 100644 src/SURFEX/mode_blowsnw_surf.f90 delete mode 100644 src/SURFEX/modn_blowsnw.f90 delete mode 100644 src/SURFEX/snowpack_evol.f90 diff --git a/src/SURFEX/blowsnw_dep.f90 b/src/SURFEX/blowsnw_dep.f90 deleted file mode 100644 index 0d82d32e8..000000000 --- a/src/SURFEX/blowsnw_dep.f90 +++ /dev/null @@ -1,66 +0,0 @@ - -!########################################################### - SUBROUTINE BLOWSNW_DEP (K2D_SNWBEG, K2D_SNWEND,PTA,PPA, & - PRHODREF,PSVT,PSFSNW) -!########################################################### - !------------------------------------------------------------------------------- - ! - !* 0. DECLARATIONS - ! ------------ - ! - USE MODE_BLOWSNW_SURF - USE MODI_BLOWSNW_VELGRAV1D - USE MODD_CSTS, ONLY : XG,XRHOLI, XPI - USE MODD_BLOWSNW_SURF - - ! - IMPLICIT NONE - ! - !* 0.1 Declarations of dummy arguments : - ! - INTEGER, INTENT(IN) :: K2D_SNWBEG, K2D_SNWEND ! index of first and last blowing snow 2D variable sent to MNH - REAL, DIMENSION(:), INTENT(IN) :: PTA ! air temperature - REAL, DIMENSION(:), INTENT(IN) :: PPA ! air pressure - REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! air density - REAL, DIMENSION(:,:), INTENT(INOUT) :: PSVT ! blowing snow concentration - ! in surface units (__/m3) - REAL, DIMENSION(:,:), INTENT(INOUT) :: PSFSNW ! blowing snow concentration fluxes - - - - - ! - ! - !* 0.2 Declarations of local variables : - ! - REAL, DIMENSION(SIZE(PSVT,1),1, SIZE(PSVT,2)) :: ZSVT - REAL, DIMENSION(SIZE(PSVT,1),1) :: ZBET, ZRG,ZTA,ZPA - REAL, DIMENSION(SIZE(PSVT,1),1,SIZE(PSVT,2)) :: ZVGK ! Terminal fallspeed (m/s) - - INTEGER :: JN - - -! Save scalars in local array -DO JN=1,SIZE(PSVT,2) - ZSVT(:,1,JN)=MAX(PSVT(:,JN),1E-60) -END DO -ZTA(:,1)=PTA(:) -ZPA(:,1)=PPA(:) - -! Get gamma parameter distribution : scale factor and mean radius at the first -! level in the atmosphere -CALL SNOWMOMENT2SIZE(ZSVT, PBETA1D=ZBET, PRG1D=ZRG ) -! Compute mass-weighted terminal fall speed based on particles distribution and -! atmospheric conditions. -CALL BLOWSNW_VELGRAV1D(ZBET, ZRG, ZTA, PRHODREF,ZPA, ZVGK) - -! Compute sedimentation fluxes of blowing snow variables - -PSVT(:,K2D_SNWBEG) = PSVT(:,1) * ZVGK(:,1,1) -PSVT(:,K2D_SNWBEG+1) = PSVT(:,2) * ZVGK(:,1,2) - - -PSFSNW(:,1:2) = PSVT(:,K2D_SNWBEG:(K2D_SNWBEG+1)) - - -END SUBROUTINE BLOWSNW_DEP diff --git a/src/SURFEX/blowsnw_diffk.f90 b/src/SURFEX/blowsnw_diffk.f90 deleted file mode 100644 index 725d3271f..000000000 --- a/src/SURFEX/blowsnw_diffk.f90 +++ /dev/null @@ -1,69 +0,0 @@ -!! ####################################### -SUBROUTINE BLOWSNW_DIFFK(PK, PTKE, PVGK,KSNW,PKSNW) - -!! Compute particle eddy diffusivity for number and momentum -!! ZZETA is the ratio between eddy diffusivity for momentum -!! znd eddy diffusivity for number and mass. -!! The value 0.25 is based on a sensititivy analysis using -!! vertical profile of blowing snow fluxes and concentration -!! measured using SPC and mechanical snow trap at Col du Lac -!! Blanc experimental site. More in details in the PhD thesis -!! of V. Vionnet : Etudes du transport de la neige par le vent en -!! conditions alpines : observations et modelisation a l'aide d'un -!! modele couple atmosphere/manteau neigeux - -USE MODD_BLOWSNW_SURF -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB - -IMPLICIT NONE - ! - !* 0.1 Declarations of dummy arguments : - ! -REAL, DIMENSION(:,:), INTENT(IN) :: PK ! flow eddy diffusivity -REAL, DIMENSION(:,:), INTENT(IN) :: PTKE ! turbulent kineti energy -REAL, DIMENSION(:,:,:), INTENT(IN) :: PVGK ! particle fall speed -INTEGER, INTENT(IN) :: KSNW ! number of blowing snow variables -! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PKSNW ! particle eddy diffusivity - ! including inertial effects - ! - ! - !* 0.2 Declarations of local variables : - ! -REAL :: ZBETAC -REAL :: ZZETA -INTEGER :: JSV ! Loop counter -LOGICAL :: ONEW_K -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! - ! - ! - !* 1.0 Initialize constants - ! -IF (LHOOK) CALL DR_HOOK('BLOWSNW_DIFFK',0,ZHOOK_HANDLE) - - -ZBETAC = 1. -ONEW_K=.FALSE. - - ! - ! - !* 2.0 Compute eddy diffusivity for number and mass - ! -IF(ONEW_K) THEN - DO JSV =1,KSNW - PKSNW(:,:,JSV) = PK(:,:)*(1.+(ZBETAC*PVGK(:,:,JSV))**2./(1./3.*PTKE(:,:)))**(-1.) - ENDDO -ELSE -! - ZZETA = 0.25 - DO JSV =1,KSNW - PKSNW(:,:,JSV)=PK(:,:)/XRSNOW_SBL - ENDDO -ENDIF - -IF (LHOOK) CALL DR_HOOK('BLOWSNW_DIFFK',1,ZHOOK_HANDLE) - -END SUBROUTINE BLOWSNW_DIFFK diff --git a/src/SURFEX/blowsnw_init_names.f90 b/src/SURFEX/blowsnw_init_names.f90 deleted file mode 100644 index 4d6d8746e..000000000 --- a/src/SURFEX/blowsnw_init_names.f90 +++ /dev/null @@ -1,97 +0,0 @@ -!! ########################################### -SUBROUTINE BLOWSNW_INIT_NAMES (KLUOUT,HSV,KSNWEQ,KSV_SNWBEG,KSV_SNWEND, & - K2DSNWEQ,K2D_SNWBEG,K2D_SNWEND ) -!! ########################################### -!! -!!*** *SNW_INIT_NAMES* -!! -!! PURPOSE -!! ------- -!! Read and filter all chemical species into the CSV array -!! initialize NSV_SNWBEG and NSV_SNWEND index for the begin and the ending chemical index -!! -!! -!! REFERENCE -!! --------- -!! Modified dst_init_names (february 2005) -!! -!! AUTHOR -!! ------ -!! Vincent VIONNET <vincent.vionnet@meteo.fr> -!! -!! MODIFICATIONS -!! ------------- -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! - -INTEGER, INTENT(IN) :: KLUOUT ! output listing channel -CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSV ! name of chemical species - ! with character # for chemistry -INTEGER, INTENT(OUT) :: KSNWEQ ! number of blowing snow related variables -INTEGER, INTENT(OUT) :: KSV_SNWBEG ! first blowing snow related scalar -INTEGER, INTENT(OUT) :: KSV_SNWEND ! last blowing snow related scalar -INTEGER, INTENT(OUT) :: K2DSNWEQ ! number of 2D blowing snow related variables -INTEGER, INTENT(OUT) :: K2D_SNWBEG ! first 2D blowing snow related scalar -INTEGER, INTENT(OUT) :: K2D_SNWEND ! last 2D blowing snow related scalar -! -!* 0.2 declarations of local variables -INTEGER :: JSV !! loop on scalar variables -CHARACTER(LEN=4) :: YRC1 -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -!------------------------------------------------------------------------------- - -!Initialize output variables -IF (LHOOK) CALL DR_HOOK('BLOWSNW_INIT_NAMES',0,ZHOOK_HANDLE) - -KSNWEQ = 0 -KSV_SNWBEG=0 -KSV_SNWEND=0 - -K2DSNWEQ = 0 -K2D_SNWBEG=0 -K2D_SNWEND=0 - -DO JSV=1, SIZE(HSV) - YRC1= HSV(JSV)(1:4) - IF (YRC1 == 'SNWM') THEN - KSNWEQ = KSNWEQ + 1 - IF (KSNWEQ == 1) THEN - KSV_SNWBEG=JSV - ENDIF !Check on first time - ELSE IF (YRC1 == 'SNWC') THEN - K2DSNWEQ = K2DSNWEQ + 1 - IF (K2DSNWEQ == 1) THEN - K2D_SNWBEG=JSV - ENDIF !Check on first time - ELSE !Not snow variables - !DO NOTHING - ENDIF -ENDDO -! -! Set the output list of scalar to the input list of scalars - -! Get the index of the last blowing snow relevant tracer -KSV_SNWEND = KSV_SNWBEG + KSNWEQ -1 -! Get the index of the last 2D blowing snow relevant tracer -K2D_SNWEND = K2D_SNWBEG + K2DSNWEQ -1 - -! -IF (LHOOK) CALL DR_HOOK('BLOWSNW_INIT_NAMES',1,ZHOOK_HANDLE) -! -END SUBROUTINE BLOWSNW_INIT_NAMES diff --git a/src/SURFEX/blowsnw_velgrav1d.f90 b/src/SURFEX/blowsnw_velgrav1d.f90 deleted file mode 100644 index d5bc2a19d..000000000 --- a/src/SURFEX/blowsnw_velgrav1d.f90 +++ /dev/null @@ -1,286 +0,0 @@ -!SFX_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier -!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SFX_LIC for details. version 1. -!----------------------------------------------------------------- -!! ####################################### -SUBROUTINE BLOWSNW_VELGRAV1D(PBETA, PRG, PTA, PRHODREF,PPABST,PVGK) - -!! ------- -!! -!! Compute number- and mass-averaged settling velocity for -!! blowing snow particles based on several methods : -!! - Mitchell (1996) : numerical integration assuming spherical -!! particles (expensive) -!! - Carrier (1953) and Dover (1993) : numerical integration (expensive) -!! - look-up table based on Carrier (1953) depending on mean radius and -!! pressure -!! - None : assume no settling velocity -!! -!! REFERENCE -!! --------- -!! -!! Mitchell (1996) : Use of mass- and area-dimensionla power laws for -!! determining precipitation particle terminal velocities, JAS, -!! 53(12),1710-1723 -!! Carrier, C. : On Slow Viscous Flow, Tech. rep., Office of Naval Research, Contract Nonr-653(00), Brown -!! University, Providence, RI, 1953. -!! Dover, S. : Numerical Modelling of Blowing Snow, Ph.D. thesis, University of Leeds, U.K., 1993. -!! -!! AUTHOR -!! ------ -!! V. Vionnet (CNRM/GMME/MOSAYC) -!! -!! MODIFICATIONS -!! ------------- -!! Philippe Wautelet 28/05/2018: corrected truncated integer division (1*10**(-6) -> 1E-6) -!! -!! NB : this routine is similar to the routine implemented in Meso-NH (blowsnow_velgrav.f90) -! -!! - -USE MODD_BLOWSNW_SURF -USE MODD_CSTS - -USE MODI_GAMMA_INC_LOW - -USE MODE_BLOWSNW_SEDIM_LKT1D - -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB - -IMPLICIT NONE - ! - !* 0.1 Declarations of dummy arguments : - ! - REAL, DIMENSION(:,:), INTENT(IN) :: PBETA ! distribution scale parameter [m] - REAL, DIMENSION(:,:), INTENT(IN) :: PRG ! mean radius [m] - REAL, DIMENSION(:,:), INTENT(IN) :: PTA ! air temperature - REAL, DIMENSION(:,:), INTENT(IN) :: PPABST ! air pressure - REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! air density - REAL, DIMENSION(:,:,:), INTENT(OUT) :: PVGK ! terminal fallspeed [m/s] - ! - ! - !* 0.2 Declarations of local variables : - ! - - REAL, DIMENSION(SIZE(PTA,1),SIZE(PTA,2)) :: ZMU !air kinematic viscosity [m2/s] - REAL, DIMENSION(SIZE(PTA,1),SIZE(PTA,2)) :: ZR1 ! first limit radius in integration - REAL, DIMENSION(SIZE(PTA,1),SIZE(PTA,2)) :: ZR2 ! second limit radius in integration [m] - REAL, DIMENSION(SIZE(PTA,1),SIZE(PTA,2)) :: ZAM1 ! Parameter avr in Mitchell - REAL, DIMENSION(SIZE(PTA,1),SIZE(PTA,2)) :: ZAM2 ! - REAL, DIMENSION(SIZE(PTA,1),SIZE(PTA,2)) :: ZAM3 ! - -REAL, DIMENSION(SIZE(PTA,1),SIZE(PTA,2)) :: ZAA -REAL, DIMENSION(SIZE(PTA,1)) :: ZBB -INTEGER, DIMENSION(SIZE(PTA,1),SIZE(PTA,2)) :: NMAX -INTEGER :: ZNUM_EXP,ZMAS_EXP -REAL :: ZGAM,ZVEL_CARRIER,ZR -REAL :: ZW_M3,ZW_M0 -REAL :: ZSUM_VEL_M3,ZSUM_M3,ZSUM_VEL_M0,ZSUM_M0 -REAL :: ZDELTAR -REAL :: ZGAMB,ZGAM_BM3, ZGAM_BM3B - INTEGER JI,JJ,II,JK,ILAYER ! Loop counter - -REAL(KIND=JPRB) :: ZHOOK_HANDLE - - ! - !* 0.3 Initialization of variables : - ! -IF (LHOOK) CALL DR_HOOK('BLOWSNW_VELGRAV1D',0,ZHOOK_HANDLE) - -ZDELTAR = 1e-6 -ZGAM = GAMMA(XEMIALPHA_SNW) -ILAYER=SIZE(PTA,2) - -! Sutherland's equation for kinematic viscosity -DO JK=1,ILAYER - ZMU(:,JK)=1.8325d-5*416.16/(PTA(:,JK)+120)*(PTA(:,JK)/296.16)*SQRT(PTA(:,JK)/296.16)/PRHODREF(:) -END DO - - ! - !* 1 Compute number- and mass-averaged settling velocity : - ! - -IF(CSNOW_SEDIM=='TABC') THEN -! -! Sedimentation of snow particles is computed according to Carrier's drag coofficient. -! To reduce computational time; look-up tables are used. They depend on the -! average radius and the pressure (interpolation) -! - CALL BLOWSNW_SEDIM_LKT1D(PRG,PPABST,PVGK) - -ELSE IF(CSNOW_SEDIM=='MITC') THEN ! Sedimentation following Mitchell (1996) - - ZGAMB = GAMMA(XEMIALPHA_SNW+3) - ZGAM_BM3 = GAMMA(3*XBM3-1+XEMIALPHA_SNW) - ZGAM_BM3B = GAMMA(3*XBM3+2+XEMIALPHA_SNW) - - ! Compute limit radius for integration of Mitchell's formulation - ZR1(:,:)=RLIM(ZMU,PRHODREF,XBESTL_1) - ZR2(:,:)=RLIM(ZMU,PRHODREF,XBESTL_2) - ! Compute parameter avr for integration of Mitchell's formulation - ZAM1(:,:)=AVR(XAM1,XBM1,PRHODREF,ZMU) - ZAM2(:,:)=AVR(XAM2,XBM2,PRHODREF,ZMU) - ZAM3(:,:)=AVR(XAM3,XBM3,PRHODREF,ZMU) - -DO JI=1,SIZE(PTA,1) - DO JK=1,ILAYER -!Number weighted terminal velocity - PVGK(JI,JK,1)=(PBETA(JI,JK)**(3*XBM1-1)*ZAM1(JI,JK)* & - GAMMA_INC_LOW(3*XBM1-1+XEMIALPHA_SNW,ZR1(JI,JK)/PBETA(JI,JK)) + & - PBETA(JI,JK)**(3*XBM2-1)*ZAM2(JI,JK)* & - (GAMMA_INC_LOW(3*XBM2-1+XEMIALPHA_SNW,ZR2(JI,JK)/PBETA(JI,JK))- & - GAMMA_INC_LOW(3*XBM2-1+XEMIALPHA_SNW,ZR1(JI,JK)/PBETA(JI,JK)))+ & - PBETA(JI,JK)**(3*XBM3-1)*ZAM3(JI,JK)* & - (ZGAM_BM3-GAMMA_INC_LOW(3*XBM3-1+XEMIALPHA_SNW,ZR2(JI,JK)/PBETA(JI,JK))))/ZGAM -!Mass weighted terminal velocity - PVGK(JI,JK,2)=(PBETA(JI,JK)**(3*XBM1-1)*ZAM1(JI,JK)* & - GAMMA_INC_LOW(3*XBM1+2+XEMIALPHA_SNW,ZR1(JI,JK)/PBETA(JI,JK)) + & - PBETA(JI,JK)**(3*XBM2-1)*ZAM2(JI,JK)* & - (GAMMA_INC_LOW(3*XBM2+2+XEMIALPHA_SNW,ZR2(JI,JK)/PBETA(JI,JK))- & - GAMMA_INC_LOW(3*XBM2+2+XEMIALPHA_SNW,ZR1(JI,JK)/PBETA(JI,JK)))+ & - PBETA(JI,JK)**(3*XBM3-1)*ZAM3(JI,JK)* & - (ZGAM_BM3B-GAMMA_INC_LOW(3*XBM3+2+XEMIALPHA_SNW,ZR2(JI,JK)/PBETA(JI,JK))))/ZGAMB - ENDDO -ENDDO - - -ELSE IF(CSNOW_SEDIM=='CARR') THEN -! Settling velocity is computed according to Carrier's drag coofficient. -! This method is used in other blowing snow model such as PIEKTUK or SNOWSTORM -! We perfom a numerical integration since no analytical solution exists. - -ZAA(:,:) = 6.203*ZMU(:,:)/2 -ZBB(:) = 5.516*XRHOLI/(4*PRHODREF(:))*XG -NMAX(:,:)=GET_INDEX(PBETA,ZDELTAR) - -! Exponent used to weight the number-averaged falling speed -ZNUM_EXP=0. -! Exponent used to weight the mass-averaged falling speed -ZMAS_EXP=3. - - -DO JI=1,SIZE(PTA,1) - DO JK=1,ILAYER - ZSUM_M3=0. - ZSUM_M0=0. - ZSUM_VEL_M0=0. - ZSUM_VEL_M3=0. - DO II=1,NMAX(JI,JK) - ZR = 1E-6+(II-0.5)*ZDELTAR - ZVEL_CARRIER = - ZAA(JI,JK)/ZR+((ZAA(JI,JK)/ZR)**2.+ZBB(JI)*ZR)**0.5 - ZW_M0=ZR**(XEMIALPHA_SNW-1)*exp(-ZR/PBETA(JI,JK))/(PBETA(JI,JK)**XEMIALPHA_SNW*ZGAM) - - ZW_M3=ZR**ZMAS_EXP*ZW_M0 - ZW_M0=ZR**ZNUM_EXP*ZW_M0 - - ZSUM_M3 = ZSUM_M3+ZW_M3*ZDELTAR - ZSUM_M0 = ZSUM_M0+ZW_M0*ZDELTAR - - - ZSUM_VEL_M0 = ZSUM_VEL_M0+ ZW_M0*ZVEL_CARRIER*ZDELTAR - ZSUM_VEL_M3 = ZSUM_VEL_M3+ ZW_M3*ZVEL_CARRIER*ZDELTAR - ENDDO - PVGK(JI,JK,1) = ZSUM_VEL_M0/ZSUM_M0 - PVGK(JI,JK,2) = ZSUM_VEL_M3/ZSUM_M3 - ENDDO -ENDDO - -ELSE - -! Settling velocity is set equal to 0. -PVGK(:,:,1) = 0. -PVGK(:,:,2) = 0. - - -END IF - -IF (LHOOK) CALL DR_HOOK('BLOWSNW_VELGRAV1D',1,ZHOOK_HANDLE) - -CONTAINS - - -FUNCTION RLIM(PMU,PRHODREF,PBEST_LIM) RESULT(PRLIM) -! -!! PURPOSE -!! ------- -! Calculate the radius of a sperical particle for a given Best Number -! -! -USE MODD_CSTS, ONLY : XRHOLI,XG -! -! -!* 0.1 declarations of arguments -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! (kg/m3) -REAL, DIMENSION(:,:), INTENT(IN) :: PMU ! (m2/s) -REAL, INTENT(IN) :: PBEST_LIM! (-) - -! -REAL, DIMENSION(SIZE(PMU,1),SIZE(PMU,2)) :: PRLIM ! (m) -INTEGER JK -! -DO JK=1,SIZE(PMU,2) - PRLIM(:,JK)=(3./32.*PRHODREF(:)/(XRHOLI*XG)*PMU(:,JK)**2.*PBEST_LIM)**0.333333333 -END DO - -END FUNCTION RLIM - -FUNCTION AVR(PARE,PBRE,PRHODEF,PMU) RESULT(PAVR) -! -!! PURPOSE -!! ------- -! Calculate the parameter av_r in Michell formulation -! -! -USE MODD_CSTS, ONLY : XRHOLI,XG - -! -! -!* 0.1 declarations of arguments -! -REAL, INTENT(IN) :: PARE ! (-) -REAL, INTENT(IN) :: PBRE ! (-) -REAL, DIMENSION(:), INTENT(IN) :: PRHODEF ! (kg/m3) -REAL, DIMENSION(:,:), INTENT(IN) :: PMU ! (m2/s) - -! -REAL, DIMENSION(SIZE(PMU,1),SIZE(PMU,2)) :: PAVR ! (-) -! -INTEGER JK - -DO JK=1,SIZE(PMU,2) - PAVR(:,JK)=2.**(3.*PBRE-1.)*PARE*PMU(:,JK)**(1.-2.*PBRE)*(4./3.*XRHOLI/PRHODEF(:)*XG)**PBRE -END DO - -END FUNCTION AVR - -FUNCTION GET_INDEX(PBETA,PDELTAR) RESULT(KMAX) -! -!! PURPOSE -!! ------- -! Calculate the upper index in numerical integration of Carrier's formulation -! Index equals to 5* mean radius -! -! -USE MODD_BLOWSNW_SURF - -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -REAL, INTENT(IN) :: PDELTAR ! (-) -REAL, DIMENSION(:,:), INTENT(IN) :: PBETA ! (kg/m3) - -! -INTEGER, DIMENSION(SIZE(PBETA,1),SIZE(PBETA,2)) :: KMAX ! (-) -! - -KMAX(:,:)=int(PBETA(:,:)*XEMIALPHA_SNW*5/PDELTAR) - - -END FUNCTION GET_INDEX - -END SUBROUTINE BLOWSNW_VELGRAV1D diff --git a/src/SURFEX/canopy_blowsnw_subl.f90 b/src/SURFEX/canopy_blowsnw_subl.f90 deleted file mode 100644 index e6e2ad5eb..000000000 --- a/src/SURFEX/canopy_blowsnw_subl.f90 +++ /dev/null @@ -1,276 +0,0 @@ -! ######################################### - SUBROUTINE CANOPY_BLOWSNW_SUBL(KI,KLVL,KSNW,PTSTEP,PBLOWSNW,PT,PQ,PRHOA,PP, & - PBLOWSNWS,PDZ,PSFTQ,PSFTH,PSNW_SUBL ) - -USE MODD_CSTS -USE MODD_BLOWSNW_SURF -! -USE MODE_BLOWSNW_SURF -! -USE MODI_BLOWSNW_VELGRAV1D - -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -INTEGER, INTENT(IN) :: KI ! number of horizontal points -INTEGER, INTENT(IN) :: KLVL ! number of levels in canopy -INTEGER, INTENT(IN) :: KSNW ! number of snow variables in canopy -REAL, INTENT(IN) :: PTSTEP ! time-step -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PT ! Temperature at canopy levels (K) -REAL, DIMENSION(KI,KLVL),INTENT(IN) :: PP ! air presseure at canopy levels (Pa) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PQ ! humidity at canopy levels (kg/m3) -REAL, DIMENSION(KI,KLVL,KSNW), INTENT(IN) :: PBLOWSNW ! blowing snow variables at canopy levels (1: #_s/kg, 2: kg_s/kg) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PDZ ! depth of canopy levels (m) - -REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3) - -REAL, DIMENSION(KI), INTENT(INOUT) :: PSFTH ! flux of heat (W/m2) -REAL, DIMENSION(KI), INTENT(INOUT) :: PSFTQ ! flux of water vapor (kg/m2/s) - -REAL, DIMENSION(KI,KLVL,KSNW), INTENT(INOUT) :: PBLOWSNWS ! snow variables tendency due to sublimation at Canopy levels -! (1: #_s/kg/s, 2: kg_s/kg/s) -REAL, DIMENSION(KI,KSNW+1), INTENT(INOUT) :: PSNW_SUBL ! Diagnostic !Sublimation rate - ! 1: Instantaneous number 2: Instantaneous mass 3: Accumulated Mass -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -INTEGER JK,JI,JSV - -REAL, DIMENSION(KI,KLVL) :: ZBET ! Scale parameter of the gamma distribution (m) -REAL, DIMENSION(KI,KLVL,KSNW) :: ZVGK ! Terminal fallspeed (m/s) -REAL, DIMENSION(KI,KLVL) :: ZRG ! Mean radius (m) -REAL, DIMENSION(KI,KLVL) :: ZEXN ! Exner function at full levels -REAL, DIMENSION(KI,KLVL) :: ZW ! working array -REAL, DIMENSION(KI) :: ZT ! average temprature of Canopy -REAL, DIMENSION(KI,KLVL) :: ZLSFACT! L_s/(C_ph) - -REAL, DIMENSION(KI,KLVL,KSNW) :: ZSNW ! work variable : pot. temp at futur instant -! ! (or past at the end of the routine) -REAL, DIMENSION(KI,KLVL-1) :: ZMU ! air kinematic viscosity -REAL, DIMENSION(KI,KLVL-1) :: ZNU ! Nusselt number (-) -REAL, DIMENSION(KI,KLVL-1) :: ZKA ! air thermal conductivity -REAL, DIMENSION(KI,KLVL-1) :: ZDV ! diffusivity of water vapor in the air. -REAL, DIMENSION(KI,KLVL-1) :: ZAI ! denominator in Thorpe and Masson (66) equation -REAL, DIMENSION(KI,KLVL-1) :: ZUSI ! undersaturation over ice -REAL, DIMENSION(KI,KLVL-1) :: ZSUBL_NUM,ZSUBL_MASS ! sublimation rate (number and mass) -REAL, DIMENSION(KI) :: ZCOL_SUBL ! integrated sublimation rate (kg/m2/s) -! -LOGICAL :: LSUBL_ALPINE3D -REAL :: ZR_EFF ! Effective radius for the computation of sublimation -REAL, DIMENSION(KI,KLVL) :: ZAA ! Coeff used in the computation of terminal fallspeed (m/s) -REAL, DIMENSION(KI,KLVL) :: ZBB ! Coeff used in the computation of terminal fallspeed (m/s) -! -!------------------------------------------------------------------------------- -! -! -!* 1. initializations -! -!------------------------------------------------------------------------------- -DO JK=1,(KLVL-1) -! Sutherland's equation for kinematic viscosity - ZMU(:,JK)=1.8325d-5*416.16/(PT(:,JK)+120)*(PT(:,JK)/296.16)*SQRT(PT(:,JK)/296.16)/PRHOA(:) -! Thermal conductivity of the air - ZKA(:,JK) = 2.38E-2 + 0.0071E-2 * ( PT(:,JK) - XTT ) ! k_a -! Diffusivity of water vapor in the air. - ZDV(:,JK) = 0.211E-4 * (PT(:,JK)/XTT)**1.94 * (XP00/PP(:,JK)) ! D_v -END DO - -!* Compute the denominator in the Thorpe and Masson (66) equation -! -ZAI(:,:) = EXP( XALPI - XBETAI/PT(:,1:(KLVL-1)) - XGAMI*ALOG(PT(:,1:(KLVL-1)))) ! es_i -! -DO JK=1,(KLVL-1) - ! Undersaturation over ice - ZUSI(:,JK) = PQ(:,JK)/PRHOA(:)*( PP(:,JK)-ZAI(:,JK) ) / ( (XMV/XMD) * ZAI(:,JK) ) - 1.0 - ! denominator in the Thorpe and Masson (66) equation - ZAI(:,JK) = ( XLSTT + (XCPV-XCI)*(PT(:,JK)-XTT) ) / (ZKA(:,JK)*PT(:,JK)) & - *( ( XLSTT + (XCPV-XCI)*(PT(:,JK)-XTT) ) / (XRV*PT(:,JK)) - 1.) & - + (XRV*PT(:,JK)) / (ZDV(:,JK)*ZAI(:,JK)) -END DO - -ZUSI(:,:) =MIN(ZUSI(:,:),0.) - -! -DO JK=1,(KLVL) - ZW(:,JK) = XCPD+XCPV*PQ(:,JK)/PRHOA(:) -END DO -! -ZLSFACT(:,:) = (XLSTT+(XCPV-XCI)*(PT(:,:)-XTT))/ZW(:,:) ! L_s/(*C_ph) -! -ZEXN = (PP/XP00)**(XRD/XCPD) -! -ZSUBL_NUM = 0. -ZSUBL_MASS = 0. -ZCOL_SUBL=0. -! -LSUBL_ALPINE3D = .FALSE. ! Compute sublimation using the method of reprsentative - ! radius implemented in Alpine 3D (Groot and al, 2011) -! - -IF(LSUBL_ALPINE3D) THEN -! -!------------------------------------------------------------------------------- -! -! -!* 2. Compute settling velocity based on the effective radius -! --------------- -! -!------------------------------------------------------------------------------- - ZR_EFF = 73.5e-6 ! Effective radius computed following the Swiss - ! method. This effective radius give the same total - ! sublimation for a equal concentration an ensemble of - ! gamma distributed particles with rm = 35e-6 m and - ! alpha=3 - ZRG(:,:) = ZR_EFF - ZBET(:,:) = ZR_EFF/XEMIALPHA_SNW -! -! -!* compute gravitational velocities -! - CALL BLOWSNW_VELGRAV1D(ZBET, ZRG, PT, PRHOA,PP, ZVGK) -! -!------------------------------------------------------------------------------- -! -! -!* 3. Compute sublimation rate based on formulation of Thorpe and Masson (66) -! Note that no integration is computed on the particle spectra -! --------------- -! -!------------------------------------------------------------------------------- -! -! Nusselt Number using effective radius -ZNU(:,:) = NUSSELT(ZRG(:,1:(KLVL-1)),ZMU(:,1:(KLVL-1)),ZVGK(:,1:(KLVL-1),2)) - -ZSUBL_MASS(:,:) = 3*PBLOWSNW(:,1:(KLVL-1),2)*ZNU(:,:)*ZUSI(:,:) & - /(2*ZAI(:,:)*XRHOLI*ZR_EFF**2) - - -ELSE - - -!------------------------------------------------------------------------------- -! -! -!* 2. Compute settling velocity based on the size distribution of the previous time -! step: used as ventilation velocity -! --------------- -! -!------------------------------------------------------------------------------- - -! -! Convert canopy variables in _/m3 -! -DO JK=1,KLVL - DO JSV=1,KSNW - ZSNW(:,JK,JSV)=PBLOWSNW(:,JK,JSV)*PRHOA(:) - ENDDO -ENDDO -! -!* compute BETA, RG and moments -! -CALL SNOWMOMENT2SIZE(ZSNW, PBETA1D=ZBET, PRG1D=ZRG ) -! -!* compute gravitational velocities -! -CALL BLOWSNW_VELGRAV1D(ZBET, ZRG, PT, PRHOA,PP, ZVGK) -! -!------------------------------------------------------------------------------- -! -! -!* 3. Compute sublimation rate based on formulation of Thorpe and Masson (66) -! --------------- -! -!------------------------------------------------------------------------------- -! -! Nusselt Number using mean radius of particle size distribution -ZNU(:,:) = NUSSELT(ZRG(:,1:(KLVL-1)),ZMU(:,1:(KLVL-1)),ZVGK(:,1:(KLVL-1),2)) - - -! mass averaged sublimation rate follows Dery and Yau (1999) and avoids -! numerical integration over the particle spectrum -ZSUBL_MASS(:,:) = PBLOWSNW(:,1:(KLVL-1),2)*ZNU(:,:)*ZUSI(:,:)/ & - (ZAI(:,:)*2*XRHOLI*ZRG(:,1:(KLVL-1))**2) -! -! -ENDIF -! Restriction of ZSUM_SUBL to insure coherence between vapor and blowing snow -! mixing ratio -! -DO JI=1,KI - DO JK=1,(KLVL-1) - ZSUBL_MASS(JI,JK) = MIN( PQ(JI,JK)/(PRHOA(JI)*PTSTEP),ZSUBL_MASS(JI,JK))* & - (0.5+SIGN(0.5,ZSUBL_MASS(JI,JK)))- & - MIN(PBLOWSNW(JI,JK,2)/PTSTEP,ABS(ZSUBL_MASS(JI,JK)))* & - (0.5-SIGN(0.5,ZSUBL_MASS(JI,JK))) - ZSUBL_MASS(JI,JK)=MIN(0.,ZSUBL_MASS(JI,JK)) ! Sink of snow -! -! number-averaged sublimation rate -! Change in concentration rate Sn = Sb*N/qb (Dery and Yau,2000) -! - IF(ZSUBL_MASS(JI,JK)<0.) THEN - ZSUBL_NUM(JI,JK) = ZSUBL_MASS(JI,JK)*PBLOWSNW(JI,JK,1)/PBLOWSNW(JI,JK,2) - END IF - ZCOL_SUBL(JI) = ZCOL_SUBL(JI)+ZSUBL_MASS(JI,JK)*PRHOA(JI)*PDZ(JI,JK) -!* Compute modification of heat and vapor fluxes due to -! sublimation of blowing snow particles in Canopy -! These fluxes are then sent to MNH - PSFTQ(JI) = PSFTQ(JI) - ZSUBL_MASS(JI,JK)*PRHOA(JI)*PDZ(JI,JK) - PSFTH(JI) = PSFTH(JI) + ZSUBL_MASS(JI,JK)*PRHOA(JI)*PDZ(JI,JK)* & - (XLSTT+(XCPV-XCI)*(PT(JI,JK)-XTT))/ZEXN(JI,JK) - END DO -! ZT(JI) = SUM(PT(JI,1:(KLVL-1)))/(KLVL-1) -END DO -! -! Store number and mass sublimation rate -PBLOWSNWS(:,1:(KLVL-1),1) = ZSUBL_NUM(:,:) -PBLOWSNWS(:,1:(KLVL-1),2) = ZSUBL_MASS(:,:) - -! Store integrated sublimation rate in mmSWE/day -PSNW_SUBL(:,2) = ZCOL_SUBL(:)*3600*24/XRHOLW*1000 -! Store accumulated sublimation rate in mmSWE -PSNW_SUBL(:,3) = PSNW_SUBL(:,3)+ZCOL_SUBL(:)*PTSTEP - -CONTAINS - -FUNCTION NUSSELT(PR,PMU,PVEL_VENT) RESULT(PNU) -! -!! PURPOSE -!! ------- -! Calculate the Nusselt number for a given particle radius -! Formulation based on Lee (1975) -! -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -REAL, DIMENSION(:,:), INTENT(IN) :: PR ! (m) -REAL, DIMENSION(:,:), INTENT(IN) :: PMU ! (m2/s) -REAL, DIMENSION(:,:), INTENT(IN) :: PVEL_VENT ! (m/s) -! -REAL, DIMENSION(SIZE(PMU,1),SIZE(PMU,2)) :: PNU ! (m/s) -! -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(SIZE(PMU,1),SIZE(PMU,2)) :: ZRE -! -! -!* 1 Calculate Reynolds number -! -ZRE(:,:) = 2*PR(:,:)*PVEL_VENT(:,:)/PMU(:,:) -! -!* 2 Calculate Nusselt number -! -WHERE(ZRE(:,:)<10) - PNU(:,:) = 1.79+0.606*ZRE(:,:)**0.5 -ELSEWHERE - PNU(:,:) = 1.88+0.580*ZRE(:,:)**0.5 -END WHERE - -END FUNCTION NUSSELT - -END SUBROUTINE CANOPY_BLOWSNW_SUBL diff --git a/src/SURFEX/canopy_evol_blowsnw.f90 b/src/SURFEX/canopy_evol_blowsnw.f90 deleted file mode 100644 index 088ca2aff..000000000 --- a/src/SURFEX/canopy_evol_blowsnw.f90 +++ /dev/null @@ -1,274 +0,0 @@ -! ######################################### - SUBROUTINE CANOPY_EVOL_BLOWSNW(KI,KLVL,KSNW,PTSTEP,PSNWA,PK, & - PSFLUX_SNW,PZ,PDZ,PDZF,PSNW,PRHOA,PSNWDEP, & - PTHT,PPABST,PSNW_SUBL,PTKE) -! ######################################### -! -!!**** *CANOPY_EVOL_BLOWSNW* - evolution of blowing snow variables in canopy -!! -!! -!! PURPOSE -!! ------- -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! V. Vionnet *Meteo France* -!! -!! MODIFICATIONS -!! ------------- -!! Original 04/2012 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_BLOWSNW_n -USE MODD_BLOWSNW_SURF - -USE MODE_BLOWSNW_SURF - -USE MODI_TRIDIAG_GROUND -USE MODI_BLOWSNW_VELGRAV1D -USE MODI_BLOWSNW_DIFFK - -! -IMPLICIT NONE -! -!* 0.1 Declarations of arguments -! ------------------------- -! -INTEGER, INTENT(IN) :: KI ! number of horizontal points -INTEGER, INTENT(IN) :: KLVL ! number of levels in canopy -INTEGER, INTENT(IN) :: KSNW ! number of drifting snow variables -REAL, INTENT(IN) :: PTSTEP ! time-step (s) -REAL, DIMENSION(KI,KSNW), INTENT(IN) :: PSNWA ! Blowing snow variables at forcing levels (__ /kg) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PK ! mixing exchange coefficient (m2/s) -REAL, DIMENSION(KI,KSNW), INTENT(INOUT) :: PSFLUX_SNW ! surface flux w'snw' (mkg/kg/s) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PZ ! heights of canopy levels (m) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PDZ ! deltaZ between canopy half levels, -! ! located at full levels (m) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PDZF ! deltaZ between canopy (full) levels, -! ! located at half levels (m) -REAL, DIMENSION(KI,KLVL,KSNW), INTENT(INOUT) :: PSNW ! drifting snow at canopy levels (kg/kg) -REAL, DIMENSION(KI,KLVL,KSNW), INTENT(IN) :: PSNW_SUBL ! drifting snow sublimation rate at canopy levels (kg/kg/s) - ! zero when sublimation is not activated -REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PTHT ! air temperature (K) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PPABST ! air pressure (Pa) -REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PTKE ! air pressure (Pa) -REAL, DIMENSION(KI,KSNW), INTENT(OUT) :: PSNWDEP ! sedimentation flux at the bottom of Canopy - -! -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -INTEGER :: JLAYER ! loop counter on layers -INTEGER :: JSV ! loop counter on blowing snow variables -INTEGER :: JI ! loop counter on grid points -! -REAL, DIMENSION(KI) :: ZZREF ! height of forcing level -REAL, DIMENSION(KI,KSNW) :: ZSNWC ! Blowing Snow content in canopy layers (__ /m3) - -REAL, DIMENSION(KI,KLVL) :: ZBET ! Scale parameter of the gamma distribution (m) -REAL, DIMENSION(KI,KLVL,KSNW) :: ZVGK ! Terminal fallspeed (m/s) -REAL, DIMENSION(KI,KLVL,KSNW) :: ZKSNW ! particle eddy diffusivity -REAL, DIMENSION(KI,KLVL) :: ZRG ! Mean radius (m) -REAL, DIMENSION(KI,KLVL-1,KSNW) :: ZA,ZB,ZC,ZRHS ! Term of the tridiagonal matrix -REAL, DIMENSION(KI,KLVL,KSNW) :: ZSNW ! work variable : pot. temp at futur instant -! ! (or past at the end of the routine) -LOGICAL, DIMENSION(KI) :: GEMIS ! Logical=TRUE if snow is emitted in the atmosphere for the - ! first time -INTEGER :: IPRINT -! -!------------------------------------------------------------------------------- -! -! -!* 1. initializations -! --------------- -! -IPRINT = 1 -! -GEMIS(:)= .FALSE. -! -!------------------------------------------------------------------------------- -! -! -!* 2. Compute settling velocity based on the size distribution of the previous time -! step -! --------------- -! -!------------------------------------------------------------------------------- -! -! Convert canopy variables in _/m3 -! -DO JLAYER=1,KLVL - DO JSV=1,KSNW - ZSNW(:,JLAYER,JSV)=PSNW(:,JLAYER,JSV)*PRHOA(:) - ENDDO -ENDDO - -! -!* compute BETA, RG and moments -! -CALL SNOWMOMENT2SIZE(ZSNW, PBETA1D=ZBET, PRG1D=ZRG ) -! -!* Initialize profile of radius if no snow is present in the atmosphere -! We use Pomeroy's theoretical profile. -! - -DO JI=1,KI - IF(PSFLUX_SNW(JI,2)>0 .AND. ALL(PSNW(JI,:,2)==0.)) THEN - GEMIS(JI) = .TRUE. - DO JLAYER=1,KLVL - ZRG(JI,JLAYER)=XEMIRADIUS_SNW*(PZ(JI,JLAYER)/0.05)**(-0.258) - ZBET(JI,JLAYER) = ZRG(JI,JLAYER)/XEMIALPHA_SNW - END DO - END IF -END DO -!* compute gravitational velocities -! -! -CALL BLOWSNW_VELGRAV1D(ZBET, ZRG, PTHT, PRHOA,PPABST, ZVGK) - -! -! Mettre en place cas spécial avec flux positif et pas de neige dans l'atmo -! initialisation du profil de rayon et de vitesse de chute suivant la méthode -! de Déry -! -!* compute particle eddy diffusivity -! -! -CALL BLOWSNW_DIFFK(PK, PTKE, ZVGK,KSNW, ZKSNW) -! -! -!------------------------------------------------------------------------------- -! -! -!* 3. Initialize coefficients of the tridiagonal matrix -! --------------- -! -!------------------------------------------------------------------------------- -! -! Lower boundary: turbulent flux PSFLUX_SNW at the surface -! -DO JSV = 1,KSNW - ZA(:,1,JSV) = 0. - ZB(:,1,JSV) = 1+(ZKSNW(:,2,JSV)/PDZF(:,2)+ZVGK(:,1,JSV))*PTSTEP/PDZ(:,1) - ZC(:,1,JSV) = -(ZKSNW(:,2,JSV)/PDZF(:,2)+ZVGK(:,2,JSV))*PTSTEP/PDZ(:,1) - ZRHS(:,1,JSV)= PSNW(:,1,JSV)+PSFLUX_SNW(:,JSV)*PTSTEP/PDZ(:,1)+ & - PSNW_SUBL(:,1,JSV)*PTSTEP -END DO -! -! Upper boundary: imposed concentration at level KLVL -! -DO JSV = 1,KSNW - ZC(:,KLVL-1,JSV) = 0. - ZRHS(:,KLVL-1,JSV)= PSNW(:,KLVL-1,JSV)+PSNW_SUBL(:,KLVL-1,JSV)*PTSTEP+ & - PSNW(:,KLVL,JSV)*PTSTEP/ & - PDZ(:,KLVL-1)*(ZVGK(:,KLVL,JSV)+ZKSNW(:,KLVL,JSV)/PDZF(:,KLVL)) -END DO -! -! Values at other levels -! -DO JSV = 1,KSNW - DO JLAYER=2,(KLVL-1) - ZA(:,JLAYER,JSV)= -(ZKSNW(:,JLAYER,JSV)/PDZF(:,JLAYER))*PTSTEP/PDZ(:,JLAYER) - ZB(:,JLAYER,JSV)=1+PTSTEP/PDZ(:,JLAYER)*(ZKSNW(:,JLAYER+1,JSV)/PDZF(:,JLAYER+1)+ & - ZKSNW(:,JLAYER,JSV)/PDZF(:,JLAYER)+ZVGK(:,JLAYER,JSV)) - IF(JLAYER<(KLVL-1)) THEN - ZC(:,JLAYER,JSV) = -(ZKSNW(:,JLAYER+1,JSV)/PDZF(:,JLAYER+1)+ZVGK(:,JLAYER+1,JSV)) & - *PTSTEP/PDZ(:,JLAYER) - ZRHS(:,JLAYER,JSV) = PSNW(:,JLAYER,JSV)+PSNW_SUBL(:,JLAYER,JSV)*PTSTEP - END IF - END DO -END DO -! -!------------------------------------------------------------------------------- -! -! -!* 4. Solve tridiagonal system -! --------------- -! -!------------------------------------------------------------------------------- -! -DO JSV = 1,KSNW - - CALL TRIDIAG_GROUND(ZA(:,:,JSV),ZB(:,:,JSV),ZC(:,:,JSV),ZRHS(:,:,JSV), & - ZSNW(:,1:KLVL-1,JSV)) -END DO -! -! -!------------------------------------------------------------------------------- -! -!* 5. updated fluxes -! ---------------------- -! -! Compute net flux sent to Meso-NH: use top of canopy instead of surface -! -DO JI=1,KI - DO JSV=1,KSNW - IF(GEMIS(JI)) THEN - PSFLUX_SNW(JI,JSV) = MAX(-ZKSNW (JI,KLVL,JSV) * (PSNW(JI,KLVL,JSV)-ZSNW(JI,KLVL-1,JSV))/PDZF(JI,KLVL)* & - (1-ZVGK(JI,KLVL,JSV)*PTSTEP/(2*PZ(JI,KLVL))),0.) - ELSE - PSFLUX_SNW(JI,JSV) = -ZKSNW (JI,KLVL,JSV) * (PSNW(JI,KLVL,JSV)-ZSNW(JI,KLVL-1,JSV))/PDZF(JI,KLVL)- & - ZVGK(JI,KLVL,JSV)*PSNW(JI,KLVL,JSV) - ENDIF - PSFLUX_SNW(JI,JSV) = PSFLUX_SNW(JI,JSV)*PRHOA(JI) ! Convert flux in kg_{snow}/m2/s - END DO -END DO -! -! Update sedimentation flux send to Crocus at the next time step -! - -DO JSV=1,KSNW - PSNWDEP(:,JSV) = ZVGK(:,1,JSV)*ZSNW(:,1,JSV)*PRHOA(:) -END DO -! -! Store sedimentation flux at the bottom of Canopy as a diagnostic -!XSNSED(:,1:2) = -PSNWDEP(:,1:2) ! Instantaneous fluxes (number and mass) -!XSNSED(:,3) = XSNSED(:,3)+XSNSED(:,2)*PTSTEP ! Accumulated flux (mass) - - -! -!------------------------------------------------------------------------------- -! -!* 6. New value of blowing snow variables (at full levels) -! ---------------------------------- -! -PSNW(:,1:(KLVL-1),:) = ZSNW(:,1:(KLVL-1),:) -! -!------------------------------------------------------------------------------- -! -!* 7. Update total Canopy variables -! ---------------------------------- -! -!ZSNWC =0. -! Compute number and mass content of Canopy layer. -!DO JI=1,KI -! ZZREF(JI) = SUM(PDZ(JI,1:(KLVL-1))) -! DO JSV=1,KSNW -! DO JLAYER=1,(KLVL-1) -! ZSNWC(JI,JSV) = ZSNWC(JI,JSV)+PSNW(JI,JLAYER,JSV)*PDZ(JI,JLAYER)*PRHOA(JI) -! END DO -! PSNOW_CANO(JI,JSV)=ZSNWC(JI,JSV)/ZZREF(JI) -! END DO -!END DO -! - -END SUBROUTINE CANOPY_EVOL_BLOWSNW diff --git a/src/SURFEX/gamma.f90 b/src/SURFEX/gamma.f90 deleted file mode 100644 index cd7e04fbd..000000000 --- a/src/SURFEX/gamma.f90 +++ /dev/null @@ -1,224 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!######################## - MODULE MODI_GAMMA -!######################## -! -INTERFACE GAMMA -! -FUNCTION GAMMA_X0D(PX) RESULT(PGAMMA) -REAL, INTENT(IN) :: PX -REAL :: PGAMMA -END FUNCTION GAMMA_X0D -! -FUNCTION GAMMA_X1D(PX) RESULT(PGAMMA) -REAL, DIMENSION(:), INTENT(IN) :: PX -REAL, DIMENSION(SIZE(PX)) :: PGAMMA -END FUNCTION GAMMA_X1D -! -END INTERFACE -END MODULE MODI_GAMMA -! -!-------------------------------------------------------------------------- -! -! -!* 1. FUNCTION GAMMA FOR SCALAR VARIABLE -! -! -! ###################################### - FUNCTION GAMMA_X0D(PX) RESULT(PGAMMA) -! ###################################### -! -! -!!**** *GAMMA * - Gamma function -!! -!! -!! PURPOSE -!! ------- -! The purpose of this function is to compute the Generalized gamma -! function of its argument. -! -! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! NONE -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! Press, Teukolsky, Vetterling and Flannery: Numerical Recipes, 206-207 -!! -!! AUTHOR -!! ------ -!! Jean-Pierre Pinty *LA/OMP* -!! -!! MODIFICATIONS -!! ------------- -!! Original 7/11/95 -!! C. Barthe 9/11/09 add a function for 1D arguments -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments and result -! -REAL, INTENT(IN) :: PX -REAL :: PGAMMA -! -!* 0.2 declarations of local variables -! -INTEGER :: JJ ! Loop index -REAL :: ZSER,ZSTP,ZTMP,ZX,ZY,ZCOEF(6) -REAL :: ZPI -! -!------------------------------------------------------------------------------- -! -!* 1. SOME CONSTANTS -! -------------- -! -ZCOEF(1) = 76.18009172947146 -ZCOEF(2) =-86.50532032941677 -ZCOEF(3) = 24.01409824083091 -ZCOEF(4) = -1.231739572450155 -ZCOEF(5) = 0.1208650973866179E-2 -ZCOEF(6) = -0.5395239384953E-5 -ZSTP = 2.5066282746310005 -! -ZPI = 3.141592654 -! -!------------------------------------------------------------------------------- -! -!* 2. COMPUTE GAMMA -! ------------- -! -IF (PX .LT. 0.) THEN - ZX = 1. - PX -ELSE - ZX = PX -END IF -ZY = ZX -ZTMP = ZX + 5.5 -ZTMP = (ZX + 0.5) * ALOG(ZTMP) - ZTMP -ZSER = 1.000000000190015 -! -DO JJ = 1, 6 - ZY = ZY + 1.0 - ZSER = ZSER + ZCOEF(JJ) / ZY -END DO -! -IF (PX .LT. 0.) THEN - PGAMMA = ZPI / SIN(ZPI*PX) / EXP(ZTMP + ALOG(ZSTP*ZSER/ZX)) -ELSE - PGAMMA = EXP(ZTMP + ALOG(ZSTP*ZSER/ZX)) -END IF -RETURN -! -END FUNCTION GAMMA_X0D -! -!------------------------------------------------------------------------------- -! -! -!* 1. FUNCTION GAMMA FOR 1D ARRAY -! -! -! ###################################### - FUNCTION GAMMA_X1D(PX) RESULT(PGAMMA) -! ###################################### -! -! -!!**** *GAMMA * - Gamma function -!! -!! -!! PURPOSE -!! ------- -! The purpose of this function is to compute the Generalized gamma -! function of its argument. -! -! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! NONE -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! Press, Teukolsky, Vetterling and Flannery: Numerical Recipes, 206-207 -!! -!! AUTHOR -!! ------ -!! Jean-Pierre Pinty *LA/OMP* -!! -!! MODIFICATIONS -!! ------------- -!! Original 7/11/95 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments and result -! -REAL, DIMENSION(:), INTENT(IN) :: PX -REAL, DIMENSION(SIZE(PX)) :: PGAMMA -! -!* 0.2 declarations of local variables -! -INTEGER :: JJ ! Loop index -REAL, DIMENSION(SIZE(PX)) :: ZSER,ZSTP,ZTMP,ZX,ZY -REAL :: ZCOEF(6) -REAL :: ZPI -! -!------------------------------------------------------------------------------- -! -!* 1. SOME CONSTANTS -! -------------- -! -ZCOEF(1) = 76.18009172947146 -ZCOEF(2) =-86.50532032941677 -ZCOEF(3) = 24.01409824083091 -ZCOEF(4) = -1.231739572450155 -ZCOEF(5) = 0.1208650973866179E-2 -ZCOEF(6) = -0.5395239384953E-5 -ZSTP = 2.5066282746310005 -! -ZPI = 3.141592654 -ZX(:) = PX(:) -WHERE ( PX(:)<0.0 ) - ZX(:) = 1.- PX(:) -END WHERE -ZY(:) = ZX(:) -ZTMP(:) = ZX(:) + 5.5 -ZTMP(:) = (ZX(:) + 0.5)*ALOG(ZTMP(:)) - ZTMP(:) -ZSER(:) = 1.000000000190015 -! -DO JJ = 1 , 6 - ZY(:) = ZY(:) + 1.0 - ZSER(:) = ZSER(:) + ZCOEF(JJ)/ZY(:) -END DO -! -PGAMMA(:) = EXP( ZTMP(:) + ALOG( ZSTP*ZSER(:)/ZX(:) ) ) -WHERE ( PX(:)<0.0 ) - PGAMMA(:) = ZPI/SIN(ZPI*PX(:))/PGAMMA(:) -END WHERE -RETURN -! -END FUNCTION GAMMA_X1D diff --git a/src/SURFEX/gamma_inc_low.f90 b/src/SURFEX/gamma_inc_low.f90 deleted file mode 100644 index 1329e2ce7..000000000 --- a/src/SURFEX/gamma_inc_low.f90 +++ /dev/null @@ -1,130 +0,0 @@ -!#################### -MODULE MODI_GAMMA_INC_LOW -!#################### -! -INTERFACE -! -FUNCTION GAMMA_INC_LOW(PA,PX) RESULT(PGAMMA_INC_LOW) -REAL, INTENT(IN) :: PA -REAL, INTENT(IN) :: PX -REAL :: PGAMMA_INC_LOW -END FUNCTION GAMMA_INC_LOW -! -END INTERFACE -! -END MODULE MODI_GAMMA_INC_LOW -! ############################################# - FUNCTION GAMMA_INC_LOW(PA,PX) RESULT(PGAMMA_INC_LOW) -! ############################################# -! -! -!!**** *GAMMA_INC_LOW * - Generalized gamma function -!! -!! -!! PURPOSE -!! ------- -! The purpose of this function is to compute the generalized -!! lower incomplete Gamma function of its argument. -!! -!! /X -!! | -!! GAMMA_INC_LOW(A,X)= ---- | Z**(A-1) EXP(-Z) dZ with A >0 -!! | -!! /0 -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! NONE -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! MODULE MODI_GAMMA : computation of the Gamma function -!! -!! REFERENCE -!! --------- -!! U. Blahak : Efficient approximation of the incomplete gamma function for -!! use in cloud model applications, GMD, 2010 -!! -!! -!! AUTHOR -!! ------ -!! V. Vionnet (CNRM/GMME) -!! -!! MODIFICATIONS -!! ------------- -!! Original 20/09/10 -! -!* 0. DECLARATIONS -! ------------ -! -USE MODI_GAMMA -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments and result -! -REAL, INTENT(IN) :: PA -REAL, INTENT(IN) :: PX -REAL :: PGAMMA_INC_LOW -! -!* 0.2 declarations of local variables -! -REAL :: ZP(6), ZQ(4), ZR(4), ZS(5) -REAL :: ZC(4) -REAL :: ZWORK -! -!* 0.3 initializations of local variables -! -ZP(1) = 9.4368392235E-3 -ZP(2) = -1.0782666481E-4 -ZP(3) = -5.8969657295E-6 -ZP(4) = 2.8939523781E-7 -ZP(5) = 1.0043326298E-1 -ZP(6) = 5.5637848465E-1 - -ZQ(1) = 1.1464706419E-1 -ZQ(2) = 2.6963429121 -ZQ(3) = -2.9647038257 -ZQ(4) = 2.1080724954 - -ZR(1) = 0.0 -ZR(2) = 1.1428716184 -ZR(3) = -6.6981186438E-3 -ZR(4) = 1.0480765092E-4 - -ZS(1) = 1.0356711153 -ZS(2) = 2.3423452308 -ZS(3) = -3.6174503174E-1 -ZS(4) = -3.1376557650 -ZS(5) = 2.9092306039 -! -!* 1 Compute coefficients -! -IF( (PX.LT.0.0).OR.(PA.LE.0.0) ) THEN - PRINT *,' BAD ARGUMENTS IN GAMMA_INC_LOW' -!callabortstop -CALL ABORT - STOP -END IF -! -! -ZC(1) = 1.+ZP(1)*PA+ZP(2)*PA**2+ZP(3)*PA**3+ZP(4)*PA**4+ZP(5)*(EXP(-ZP(6)*PA)-1) -! -ZC(2) = ZQ(1) + ZQ(2)/PA + ZQ(3)/PA**2 + ZQ(4)/PA**3 -! -ZC(3) = ZR(1)+ZR(2)*PA+ZR(3)*PA**2+ZR(4)*PA**3 -! -ZC(4) = ZS(1) + ZS(2)/PA + ZS(3)/PA**2 + ZS(4)/PA**3 + ZS(5)/PA**4 -! -!* 2 Compute final results -! -ZWORK = 0.5+0.5*TANH(ZC(2)*(PX-ZC(3))) - -PGAMMA_INC_LOW = EXP(-PX)* PX**PA * (1./PA +ZC(1)*PX/(PA*(PA+1.))+(ZC(1)*PX)**2/(PA*(PA+1.)*(PA+2.))) & - * (1.-ZWORK) + GAMMA(PA)*ZWORK*(1.-ZC(4)**(-PX)) -RETURN -! -END FUNCTION GAMMA_INC_LOW diff --git a/src/SURFEX/modd_blowsnw_sedim_lkt1d.f90 b/src/SURFEX/modd_blowsnw_sedim_lkt1d.f90 deleted file mode 100644 index e2a909cbd..000000000 --- a/src/SURFEX/modd_blowsnw_sedim_lkt1d.f90 +++ /dev/null @@ -1,54 +0,0 @@ - -!! ######################## - MODULE MODD_BLOWSNW_SEDIM_LKT1D -!! ######################## -!! -!! PURPOSE -!! ------- -!! -!! Purpose: Contains look up tables for settling velocity of drifitng snow particles -!! The parameters to be looked up are: -!! 1) Number-averaged settling velocity -!! 2) Mass-averaged settling velocity -!! -!! All values are pre-calculated using matlab. -!! -!! -!! METHOD -!! ------ -!! -!! -!! REFERENCE -!! --------- -!! Based on MODD_DUST_OPT_LKT (Pierre Tulet) -!! -!! -!! AUTHOR -!! ------ -!! Vincent VIONNET (CNRM) -!! -!! -!! MODIFICATIONS -!! ------------- -!! -!!-------------------------------------------------------------------- -!! DECLARATIONS -!! ------------ - - IMPLICIT NONE - PUBLIC - - INTEGER, PARAMETER :: NMAX_RADIUS_LKT1D=196 !Max number of radii in look up tables () - INTEGER, PARAMETER :: NMAX_PRESSURE_LKT1D=4 !Max number of pressure in lkt - - !Declaration of the look up tables - REAL, DIMENSION(NMAX_RADIUS_LKT1D,NMAX_PRESSURE_LKT1D) :: XNUMB_SPEED_LKT1D - REAL, DIMENSION(NMAX_RADIUS_LKT1D,NMAX_PRESSURE_LKT1D) :: XMASS_SPEED_LKT1D - - !Declaration of the max and min values taken into account in the tables - REAL, PARAMETER :: XRADIUS_LKT1D_MIN = 5 ![um] smallest number median radius taken into account - REAL, PARAMETER :: XRADIUS_LKT1D_MAX = 200 ![um] largest number median radius taken into account - REAL, PARAMETER :: XPRESSURE_LKT1D_MIN = 45000 ![Pa] smallest pressure coefficient taken into account - REAL, PARAMETER :: XPRESSURE_LKT1D_MAX = 105000 ![Pa] largest pressure coefficient taken into account - -END MODULE MODD_BLOWSNW_SEDIM_LKT1D diff --git a/src/SURFEX/modd_blowsnw_surf.f90 b/src/SURFEX/modd_blowsnw_surf.f90 deleted file mode 100644 index 343848755..000000000 --- a/src/SURFEX/modd_blowsnw_surf.f90 +++ /dev/null @@ -1,77 +0,0 @@ -!----------------------------------------------------------------- - MODULE MODD_BLOWSNW_SURF -! -! Contains parameters for blowing snow simulation -! - IMPLICIT NONE -! -! Snow density : cf Liston et Sturm (1998) - REAL, PARAMETER :: XRHO_DEP=280.0 -! -! Deposited snow grains are round and small : s=1,r=0.4mm - REAL,PARAMETER :: XSDEP_GRA1=99.0 - REAL,PARAMETER :: XSDEP_GRA2=0.0004 -! -! Minimal mean radius (um) - REAL,PARAMETER :: XINIRADIUS_SNW = 5.e-6 -! Minimum allowed number concentration (#/m3) - REAL,PARAMETER :: XN0MIN_SNW = 1 - -! Parameters used in KC02 parameterization for settling velocity - REAL,PARAMETER :: XC0 = 0.29 - REAL,PARAMETER :: XDELTA0 = 9.06 - -! Parameters used in Mitchell (96) parameterization for settling velocity - REAL,PARAMETER :: XAM1 = 0.04394 - REAL,PARAMETER :: XAM2 = 0.06049 - REAL,PARAMETER :: XAM3 = 0.2072 - REAL,PARAMETER :: XBM1 = 0.970 - REAL,PARAMETER :: XBM2 = 0.831 - REAL,PARAMETER :: XBM3 = 0.638 - REAL,PARAMETER :: XBESTL_1 = 10.0 - REAL,PARAMETER :: XBESTL_2 = 585. - -! Grain size distribution is a two parameter gamma distribution - REAL :: XEMIRADIUS_SNW - REAL :: XEMIALPHA_SNW -! - LOGICAL :: LSNOW_SALT ! Flag to fix snow concentration in the saltation layer - ! Snow concentration in the saltation layer (kg_{snow}/m3_{air}) if LSNOW_SALT = T - REAL :: XCONC_SALT - ! - LOGICAL :: LSNOW_PRECIP ! Flag to impose uniform and constant precipitation rate - ! Fixed snow precipitation rate SWE (kg/ (m2 s)) if LSNOW_PRECIP = T - REAL :: XSNOW_PRECIP - LOGICAL :: LBLOWSNW_ADV ! Flag to account for advection effects on - ! total mass and number in Canopy variables and - ! to compute divergence of - ! saltation flux - LOGICAL :: LBLOWSNW_CANOSUBL ! Flag to activate sublimation of Canopy variables - - LOGICAL :: LBLOWSNW_CANODIAG ! Flag to get additional diagnostic at Canopy levels : mean radius - ! and number and mass variables in _/m3 - - LOGICAL :: LSNOW_WIND ! Flag to activate effects of snow particle on wind profile - ! Increase in surface rougnhess due to saltation following Dover (1993) z0_s = z0_ns*(u*/uth*)² - REAL :: XSNOW_ROUGHNESS ! = 0 not activated; =1 activated - ! Buoyancy effect in presence of suspended particles of blowing snow. - REAL :: XSNOW_BUOYANCY ! = 0 not activated; =1 activated - CHARACTER(LEN=4) :: CSNOW_SALT ! Paramaterization to compute particle flux in saltation -! 'POME': Pomeroy and Gray, 1990 -! 'SORE': Sorensen (1991) : used at SLF before Doorshot's model -! 'MANN': Concentration in the saltation layer is computed according to Mann -! parameterization for particle number density just above the ground (10 cm) - CHARACTER(LEN=4) :: CSNOW_SEDIM ! Paramaterization to compute settling velocity -! 'CARR': follow Carrier's drag coefficient -! 'TABC': based on tabuleted values of Carrier's formulation for alpha=3 -! 'MITC': based on Mitchell's formulation for settling velocity of ice spheres -! 'NONE': sedimentation is desactivated (for test only!) -! - REAL :: XRSNOW_SBL ! Ratio between diffusion coefficient for scalar - ! variables and blowing snow variables - ! RSNOW_SBL = KSCA/KSNOW = 4. - ! See Vionnet (PhD, 2012, In French) and Vionnet et al (TC, 2014) - ! for a complete dicsussion -! - END MODULE MODD_BLOWSNW_SURF - diff --git a/src/SURFEX/modd_blowsnwn.f90 b/src/SURFEX/modd_blowsnwn.f90 deleted file mode 100644 index 346e56dae..000000000 --- a/src/SURFEX/modd_blowsnwn.f90 +++ /dev/null @@ -1,51 +0,0 @@ -MODULE MODD_BLOWSNW_n - -!Purpose: -!Declare variables and constants necessary to do the blowing snow calculations -!Here are only the variables which depend on the grid! - -!Author: Vincent Vionnet -! based on modd_dstn.F90 -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE - -TYPE BLOWSNW_t - - REAL, DIMENSION(:,:),POINTER :: XSFSNW ! Blowing snow fluxes - ! 1: Number deposition flux 2: Mass deposition flux 3: Streamwise saltation flux - REAL, DIMENSION(:,:),POINTER :: XSNW_SUBL !Sublimation rate - ! 1: Instantaneous number 2: Instantaneous mass 3: Accumulated Mass - REAL, DIMENSION(:,:),POINTER :: XSNW_FTURB ! Snow surface turbulent flux - ! 1: Instantaneous number 2: Instantaneous mass 3: Accumulated Mass - REAL, DIMENSION(:,:),POINTER :: XSNW_FSED ! Snow surface sedimentation flux - ! 1: Instantaneous number 2: Instantaneous mass 3: Accumulated Mass - REAL, DIMENSION(:,:),POINTER :: XSNW_FNET ! Total surface net flux - ! (salt+ susp) - ! 1: Instantaneous number 2: Instantaneous mass 3: Accumulated Mass - REAL, DIMENSION(:,:),POINTER :: XSNW_FSALT ! Saltation deposition/erosion flux - ! 1: streamwise flux 2: Instantaneous 3: Accumulated - REAL, DIMENSION(:,:),POINTER :: XSNW_CANO_RGA ! !Blowing snow radius at canopy levels (m) - REAL, DIMENSION(:,:,:),POINTER :: XSNW_CANO_VAR ! !Blowing snow variables at canopy levels (_/m3) - - -END TYPE BLOWSNW_t - -CONTAINS - -SUBROUTINE BLOWSNW_INIT(YBLOWSNW) -TYPE(BLOWSNW_t), INTENT(INOUT) :: YBLOWSNW -REAL(KIND=JPRB) :: ZHOOK_HANDLE -IF (LHOOK) CALL DR_HOOK("MODD_BLOWSNW_N:BLOWSNW_INIT",0,ZHOOK_HANDLE) - NULLIFY(YBLOWSNW%XSFSNW) - NULLIFY(YBLOWSNW%XSNW_SUBL) - NULLIFY(YBLOWSNW%XSNW_FTURB) - NULLIFY(YBLOWSNW%XSNW_FSED) - NULLIFY(YBLOWSNW%XSNW_FNET) - NULLIFY(YBLOWSNW%XSNW_FSALT) -IF (LHOOK) CALL DR_HOOK("MODD_BLOWSNW_N:BLOWSNW_INIT",1,ZHOOK_HANDLE) -END SUBROUTINE BLOWSNW_INIT - -END MODULE MODD_BLOWSNW_n diff --git a/src/SURFEX/mode_blowsnw_mblutl.f90 b/src/SURFEX/mode_blowsnw_mblutl.f90 deleted file mode 100644 index f730e1bc8..000000000 --- a/src/SURFEX/mode_blowsnw_mblutl.f90 +++ /dev/null @@ -1,667 +0,0 @@ -!----------------------------------------------------------------- -! ################## - MODULE MODE_BLOWSNW_MBLUTL -! ################## -! -!!**** *MODE_BLOWSNW_MBLUTL * - contains subroutines to determine: -! - threshold velocity for snow erosion as a function of snow -! pack properties, -! - blown snow particles concentration in the saltation layer, -! - surface turbulent flux of blown snow particles -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! AUTHOR -!! ------ -!! V. Vionnet * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 21/03/08 -!! -!----------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! -! -!------------------------------------------------------------------------------- -CONTAINS - - - FUNCTION SNOW_MBL_INDEX(PSNOWGRAN1, PSNOWGRAN2) & -RESULT(PMBLINDEX) -! -!! PURPOSE -!! ------- -! Calculate the mobility index as a function of snow grain type -! Based on G&M,1998 : PROTEON, Centre d'Etude de la Neige -! -USE MODD_SNOW_METAMO, ONLY : XGRAN,XEPSI -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -! -!* 0.1 Declarations of arguments -! -REAL, INTENT(IN) :: PSNOWGRAN1, PSNOWGRAN2 -! -REAL :: PMBLINDEX -! -!* 0.2 declarations of local variables -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! -! 0.3 Initialization -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SNOW_MBL_INDEX',0,ZHOOK_HANDLE) -! -PMBLINDEX=0. -! -! 1. Computation -! -IF(PSNOWGRAN1<XEPSI)THEN - PMBLINDEX=-0.75*PSNOWGRAN1/XGRAN-0.5*PSNOWGRAN2/ & - XGRAN+0.5 -ELSE IF(PSNOWGRAN1>=0 .AND. PSNOWGRAN2>0) THEN - PMBLINDEX=-0.583*PSNOWGRAN2*1000-0.833*PSNOWGRAN1/ & - XGRAN+0.833 -ELSE - PMBLINDEX=0. -ENDIF - -PMBLINDEX=MAX(MIN(PMBLINDEX,1.),-0.9999) - -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SNOW_MBL_INDEX',1,ZHOOK_HANDLE) - -END FUNCTION SNOW_MBL_INDEX - - - SUBROUTINE WIND_RFR_THR(PWIND_RFR_THR,PSNOWGRAN1, & - PSNOWGRAN2) -! -!! PURPOSE -!! ------- -! -! Computation of threshold wind speed at level of reference (5 -! meter from G&M) -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB - IMPLICIT NONE -! -! 0.1 declarations of arguments -! -! - REAL, INTENT(IN) :: PSNOWGRAN1, PSNOWGRAN2 - - REAL, INTENT(INOUT) ::PWIND_RFR_THR -! -! 0.2 declaration of local variables -! - REAL :: ZMBLINDEX - REAL(KIND=JPRB) :: ZHOOK_HANDLE - -! -! 1. mobility index -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:WIND_RFR_THR',0,ZHOOK_HANDLE) -! - ZMBLINDEX= SNOW_MBL_INDEX(PSNOWGRAN1,PSNOWGRAN2) -! -! 2. threshold 5-m wind speed -! - PWIND_RFR_THR=(log(2.868)-log(1+ZMBLINDEX))/0.085 -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:WIND_RFR_THR',1,ZHOOK_HANDLE) -! - END SUBROUTINE WIND_RFR_THR - - SUBROUTINE WIND_FRC_THR(PWIND_RFR_THR,PZ0EFF, & - PWIND_FRC_THR) -! -!! PURPOSE -!! ------- -! -! Compute threshold friction velocity from the threshold -! velocity at a reference height of 5 m. We assume a log profile -! in the SBL with z0 the same as used to compute CDSNOW -! -! - USE MODD_CSTS,ONLY : XKARMAN -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! - IMPLICIT NONE -! -! 0.1 declarations of arguments -! - REAL, INTENT(IN) :: PZ0EFF - REAL, INTENT(IN) :: PWIND_RFR_THR -! - REAL, INTENT(OUT) :: PWIND_FRC_THR -! -! 0.2 declaration of local variables - REAL :: ZCD - REAL(KIND=JPRB) :: ZHOOK_HANDLE - -! ! -! 0.3 Initialization -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:WIND_FRC_THR',0,ZHOOK_HANDLE) -! - ZCD = (XKARMAN/LOG(5/PZ0EFF))**2 - -! 1. Threshold friction velocity -! - PWIND_FRC_THR=SQRT(ZCD)*PWIND_RFR_THR -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:WIND_FRC_THR',1,ZHOOK_HANDLE) -! - END SUBROUTINE WIND_FRC_THR - - SUBROUTINE CONC_SALT(PCONC_SALT,PWIND_FRC_SALT,PWIND_FRC_THR, & - PRHOA,PQSALT,PSNOWLIQ,PSNOWHIST) -! -!! PURPOSE -!! ------- -! -! Saltation layer parameterization : computes -! - snow particle concentration (kg/m3) -! - streamwise saltation flux (kg/m/s) -! -! -USE MODD_CSTS, ONLY : XG,XRHOLI -USE MODD_BLOWSNW_SURF -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB - - IMPLICIT NONE -! -! 0.1 declarations of arguments -! - REAL, INTENT(IN) :: PWIND_FRC_SALT,PRHOA, & - PWIND_FRC_THR - - REAL, INTENT(IN) :: PSNOWLIQ,PSNOWHIST - REAL, INTENT(INOUT) :: PCONC_SALT - REAL, INTENT(OUT) :: PQSALT -! -! 0.2 declaration of local variables -! - REAL :: ZSALT_FLUX - REAL :: ZHSALT - REAL :: ZUPART - REAL(KIND=JPRB) :: ZHOOK_HANDLE - -! -! 0.3 Initialization -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:CONC_SALT',0,ZHOOK_HANDLE) -! -! 1. Streamiwise saltation flux : horizontal saltation, transport rate under -! equilibrium conditions - -! - IF(PWIND_FRC_SALT>=PWIND_FRC_THR) THEN ! Transport in saltation - IF(CSNOW_SALT=='POME' .OR. CSNOW_SALT=='TPOM') THEN -! -! Formulation of Pomeroy and Gray, 1990 -! - ZSALT_FLUX=0.68*PRHOA*PWIND_FRC_THR* & - (PWIND_FRC_SALT**2-PWIND_FRC_THR**2)/ & - (PWIND_FRC_SALT*XG) - - ELSE IF(CSNOW_SALT=='SORE'.OR. CSNOW_SALT=='TSOR') THEN -! -! Formulation of Sorensen (2004) (initially developped for sand) -! with coefficients adapted for snow based on the wind-tunnel -! measurement of Nishimura and Hunt (2000). More details in the PhD -! thesis of Vionnet (2012) -! - ZSALT_FLUX=PRHOA/XG*PWIND_FRC_SALT**3.* & - (1.-PWIND_FRC_THR**2./PWIND_FRC_SALT**2.)* & - (2.6+2.*PWIND_FRC_THR/PWIND_FRC_SALT+2.5* & - PWIND_FRC_THR**2./PWIND_FRC_SALT**2.) - ENDIF - ELSE ! No transport - ZSALT_FLUX=0. - ENDIF -! -! Saltation does not occur when : -! - surface layer is wet -! - historical variable is higher than 1 : crust of non-transportable snow - IF(PSNOWLIQ>0 .OR. PSNOWHIST>0) THEN - ZSALT_FLUX=0 - ENDIF -! -! Store streamise saltation flux for future advection - PQSALT=ZSALT_FLUX -! -! 2. Saltation height (Pomeroy and Male, 1992) -! - ZHSALT = 0.08436*PWIND_FRC_SALT**1.27 -! -! 3. Horizontalparticle velocity Up=2,8.U*t -! according to Pomeroy and Gray (1900) -! - ZUPART = 2.8*PWIND_FRC_THR -! -! 4. Saltating particle concentration -! - IF(ZSALT_FLUX>0.) THEN - PCONC_SALT=ZSALT_FLUX/(ZUPART*ZHSALT) - ELSE - PCONC_SALT=0. - ENDIF - - IF(CSNOW_SALT=='TPOM' .OR. CSNOW_SALT=='TSOR') THEN -! Compute concentration at the top of the saltation layer assuming -! an exponential flux profile in the saltation layer (cf Doorschot -! et al., 2004 and Nishimura and Hunt, 2000). - IF(ZSALT_FLUX>0.) THEN - PCONC_SALT = ZSALT_FLUX*0.45*XG/PWIND_FRC_SALT**2 & - *EXP(-0.45*ZHSALT*XG/PWIND_FRC_SALT**2) & - /(ZUPART) - ENDIF - ENDIF - - IF(LSNOW_SALT) THEN -! Imposed concentration in the saltation layer (only for sensitivity -! studies) - PCONC_SALT= XCONC_SALT - PQSALT = XCONC_SALT*ZUPART*ZHSALT - END IF -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:CONC_SALT',1,ZHOOK_HANDLE) -! - END SUBROUTINE CONC_SALT - - - SUBROUTINE SNOW_FLUX(PCONC_SALT,PVMOD,PCONC_SURF, & - PCDSNOW,PSNOW_FLUX) -! Compute snow turbulent vertical flux as in Gallee et al (2001) -! Flux=u*q*=Cd.V.(Q(Surf)-Q(Salt)) (kg/(m2.s)) -! Cd : drag coefficient of momentum -! V wind speed in the lowest level of the atmo. model (m/s) -! Q(Surf) blown snow concentration in the lowest level of the atmo. model (kg/m3) -! Q(Salt) blown snow concentration in the saltation layer (kg/m3) -! Only positive flux : from the saltation layer to the model lowest level. Deposition is computed later -! -! NOTE: the lowest level of the atmo. model can be Canopy or directly Meso-NH if Canopy is -! not activated -! -USE MODD_CSTS, ONLY : XG,XRHOLI, XPI -USE MODD_BLOWSNW_SURF -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB - - IMPLICIT NONE -! -! 0.1 declarations of arguments -! - REAL, INTENT(IN) :: PCONC_SALT,PCDSNOW,PVMOD - REAL, DIMENSION(:),INTENT(IN) :: PCONC_SURF -! - REAL, DIMENSION(:),INTENT(OUT) :: PSNOW_FLUX -! -! -! 0.2 declaration of local variables -! - REAL :: ZNUM_SALT ! Number particle concentration in the saltation -! layer (#.m^{-3}) - REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! 1. Initialisation following the gamma distribution -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SNOW_FLUX',0,ZHOOK_HANDLE) -! - ZNUM_SALT = 3*PCONC_SALT/(4*XPI*XRHOLI*(XEMIALPHA_SNW+2.)*(XEMIALPHA_SNW+1.)* & - XEMIALPHA_SNW*(XEMIRADIUS_SNW/XEMIALPHA_SNW)**3) -! -! 2. Turbulent fluxes -! -! Number flux -! - PSNOW_FLUX(1)=MAX(0.,-PCDSNOW*PVMOD*(PCONC_SURF(1)- & - ZNUM_SALT)) -! Mass flux - PSNOW_FLUX(2)=MAX(0.,-PCDSNOW*PVMOD*(PCONC_SURF(2)- & - PCONC_SALT)) -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SNOW_FLUX',1,ZHOOK_HANDLE) -! -END SUBROUTINE SNOW_FLUX - - - SUBROUTINE SURFACE_RI_PART(PCONC_SALT, PCONC_SURF,PRHOA, & - PZREF, PUREF, PDIRCOSZW, PVMOD, PRI_PART ) -! ###################################################################### -! -!!**** *SURFACE_RI* -!! -!! PURPOSE -!! ------- -! -! Computes the component of richardson number near the ground associated -! with particle-induced buoyancy. -! -! -!!** METHOD -!! ------ -! -! Based on surface_ri.f90 -! -! -!! EXTERNAL -!! -------- -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! MODD_CST -!! MODD_GROUND_PAR -!! -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! -!! V. Vionnet * Meteo-France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 04/10/10 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CSTS,ONLY : XRV, XRD, XG -USE MODI_WIND_THRESHOLD -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -REAL, INTENT(IN) :: PCONC_SALT ! Concentration of blowing snow particle -! in the saltation layer (kg/m3) -REAL, INTENT(IN) :: PCONC_SURF ! Concentration of blowing snow particle -! at the 1st atmospheric level (kg/m3) -REAL, INTENT(IN) :: PVMOD ! module of the horizontal wind -REAL, INTENT(IN) :: PRHOA ! air density (kg/m3) -! -REAL, INTENT(IN) :: PZREF ! reference height of the first - ! atmospheric level -REAL, INTENT(IN) :: PUREF ! reference height of the wind -! ! NOTE this is different from ZZREF -! ! ONLY in stand-alone/forced mode, -! ! NOT when coupled to a model (MesoNH) -REAL, INTENT(IN) :: PDIRCOSZW! Cosine of the angle between -! ! the normal to the surface and -! ! the vertical -! -REAL, INTENT(OUT) :: PRI_PART ! "Particle" Richardson number -! -!* 0.2 declarations of local variables -! -REAL :: ZVMOD -REAL(KIND=JPRB) :: ZHOOK_HANDLE -!------------------------------------------------------------------------------- -! -! 1. Richardson number -! ----------------- -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SURFACE_RI_PART',0,ZHOOK_HANDLE) -! -ZVMOD = PVMOD -! -! - ! Richardson's number -PRI_PART = XG * PDIRCOSZW/PRHOA * PUREF * PUREF & - * (PCONC_SALT-PCONC_SURF) & - / (ZVMOD*ZVMOD) /PZREF -!------------------------------------------------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SURFACE_RI_PART',1,ZHOOK_HANDLE) -! -END SUBROUTINE SURFACE_RI_PART - -! ################################################################# - SUBROUTINE SURFACE_CD_PART(PRI, PZREF, PUREF, PZ0EFF, PZ0H, & - PCD, PCDN) -! ################################################################# -! -!!**** *SURFACE_CD_PART* -!! -!! PURPOSE -!! ------- -! -! Computes the drag coefficients for momentum near the ground -! including particle-induced buoyancy. -! -!!** METHOD -!! ------ -! -! 1 and 2 : computation of relative humidity near the ground -! -! 3 : richardson number including particle-induced buoyancy -! -! 4 : the aerodynamical resistance for heat transfers is deduced -! -! 5 : the drag coefficient for momentum ZCD is computed -! including particle-induced buoyancy -! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! -!! V. Vionnet * Meteo-France * -!! Based on surface_cd.f90 by V. Masson -!! -!! MODIFICATIONS -!! ------------- -!! Original 04/10/10 - -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CSTS,ONLY : XKARMAN -! -USE MODE_THERMOS -! -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -! -REAL, INTENT(IN) :: PRI ! Richardson number -REAL, INTENT(IN) :: PZREF ! reference height of the first - ! atmospheric level -REAL, INTENT(IN) :: PUREF ! reference height of the wind -! ! NOTE this is different from ZZREF -! ! ONLY in stand-alone/forced mode, -! ! NOT when coupled to a model (MesoNH) -REAL, INTENT(IN) :: PZ0EFF ! roughness length for momentum - ! with subgrid-scale orography -REAL, INTENT(IN) :: PZ0H ! roughness length for heat -! -REAL, INTENT(OUT) :: PCD ! drag coefficient for momentum -REAL, INTENT(OUT) :: PCDN ! neutral drag coefficient for momentum -! -!* 0.2 declarations of local variables -! -! -REAL :: ZZ0EFF, ZZ0H, ZMU, & - ZCMSTAR, ZPM, ZCM, ZFM -INTEGER :: JJ -REAL(KIND=JPRB) :: ZHOOK_HANDLE - -!------------------------------------------------------------------------------- -! -!* 1. Drag coefficient for momentum transfers -! --------------------------------------- -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SURFACE_CD_PART',0,ZHOOK_HANDLE) -! - ZZ0EFF = MIN(PZ0EFF,PUREF*0.5) - ZZ0H = MIN(ZZ0EFF,PZ0H) -! - ZMU = LOG( MIN(ZZ0EFF/ZZ0H,200.) ) -! - PCDN = (XKARMAN/LOG(PUREF/ZZ0EFF))**2 - - ZCMSTAR = CMSTAR(ZMU) - ZPM = PM(ZMU) -! - ZCM = 10.*ZCMSTAR*PCDN*( PUREF/ZZ0EFF )**ZPM -! - IF ( PRI > 0.0 ) THEN - ZFM = 1. + 10.*PRI / SQRT( 1.+5.*PRI ) - ZFM = 1. / ZFM - ELSE - ZFM = 1. - 10.*PRI / ( 1.+ZCM*SQRT(-PRI) ) - ENDIF -! - PCD = PCDN*ZFM -! -! -!------------------------------------------------------------------------------- -! -! -! -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SURFACE_CD_PART',1,ZHOOK_HANDLE) - -! -CONTAINS -! -! functions used in the calculation -! the terms Cm -! - FUNCTION CMSTAR(X) - REAL, INTENT(IN) :: X - REAL :: CMSTAR - ! - CMSTAR = 6.8741 + 2.6933*X - 0.3601*X*X + 0.0154*X*X*X - ! - END FUNCTION CMSTAR - ! - ! - FUNCTION PM(X) - REAL, INTENT(IN) :: X - REAL :: PM - ! - PM = 0.5233 - 0.0815*X + 0.0135*X*X - 0.0010*X*X*X - ! - END FUNCTION PM - -! -!------------------------------------------------------------------------------- - - -! -END SUBROUTINE SURFACE_CD_PART - -SUBROUTINE SOLVE_CD(PUSTAR,PVMOD,PRHOA,PCONC_SURF,PZREF,PUREF,PDIRCOSZW, & - PWIND_FRC_THR,PRI,PZ0EFF,HSNOWRES,PZ0H,PRES,PRI_TOT, & - PCDSNOW,PSNOWLIQ,PSNOWHIST) - -! -! Compute the value of the function used in the Newton's iterative algorithm. -! - - -USE MODD_BLOWSNW_SURF -USE MODD_SNOW_PAR, ONLY : X_RI_MAX -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -REAL, INTENT(IN) :: PUSTAR -REAL, INTENT(IN) :: PSNOWLIQ,PSNOWHIST -REAL, INTENT(IN) :: PVMOD,PRHOA,PCONC_SURF,PZREF,PUREF -REAL, INTENT(IN) :: PDIRCOSZW,PWIND_FRC_THR,PRI,PZ0EFF,PZ0H -REAL, INTENT(OUT) :: PCDSNOW, PRI_TOT,PRES -CHARACTER(LEN=*), INTENT(IN) :: HSNOWRES -! -!* 0.2 declarations of local variables -! -REAL :: ZCONC_SALT,ZRI_PART,ZCD, ZCDN, ZZ0_TEMP,ZQSALT -REAL(KIND=JPRB) :: ZHOOK_HANDLE - -PRI_TOT = PRI -ZZ0_TEMP = PZ0EFF - -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SOLVE_CD',0,ZHOOK_HANDLE) - -IF(XSNOW_BUOYANCY==1) THEN -! -! Blown snow particles concentration (kg/m3) in the saltation -! layer -! -CALL CONC_SALT(ZCONC_SALT,PUSTAR,PWIND_FRC_THR,PRHOA,ZQSALT ,& - PSNOWLIQ,PSNOWHIST) - -CALL SURFACE_RI_PART(ZCONC_SALT,PCONC_SURF, PRHOA, & - PZREF, PUREF, PDIRCOSZW, PVMOD, ZRI_PART ) - -! -PRI_TOT = PRI + ZRI_PART -! -! Simple adaptation of method by Martin and Lejeune (1998) -! to apply a lower limit to turbulent transfer coef -! by defining a maximum Richarson number for stable -! conditions: -! -IF(HSNOWRES=='RIL') PRI_TOT = MIN(X_RI_MAX, PRI_TOT) -END IF - -IF(XSNOW_ROUGHNESS==1 .AND. PUSTAR > PWIND_FRC_THR ) THEN - ! Increase in surface rougnhess due to saltation following - ! Dover (1993) z0_s = z0_ns*(u*/uth*)� - ! Limit increase to value observed over snow surface - ZZ0_TEMP = MIN(PZ0EFF * (PUSTAR/PWIND_FRC_THR)**2,0.01) -END IF - -CALL SURFACE_CD_PART(PRI_TOT, PZREF, PUREF, ZZ0_TEMP, PZ0H, PCDSNOW, ZCDN) - -PRES = PUSTAR - SQRT(PCDSNOW)* PVMOD - -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_MBLUTL:SOLVE_CD',1,ZHOOK_HANDLE) - - -END SUBROUTINE SOLVE_CD - -END MODULE MODE_BLOWSNW_MBLUTL diff --git a/src/SURFEX/mode_blowsnw_sedim_lkt1d.f90 b/src/SURFEX/mode_blowsnw_sedim_lkt1d.f90 deleted file mode 100644 index 095aa45ce..000000000 --- a/src/SURFEX/mode_blowsnw_sedim_lkt1d.f90 +++ /dev/null @@ -1,1297 +0,0 @@ - -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source: /sxturb1/data1/mesonh/CODEMNH/mode_dustopt.f90,v $ $Revision: 1.1.2.1 $ -! masdev4_7 BUG1 2007/06/29 12:06:27 -!----------------------------------------------------------------- -! ################### -MODULE MODE_BLOWSNW_SEDIM_LKT1D -! ################### -! -!! -!! PURPOSE -!! ------- -!! -!! Sedimentation of snow particles is computed according to Carrier's drag coofficient. -!! To reduce computational time; look-up tables are used. They depend on the -!! average radius and the pressure (interpolation) -!! AUTHOR -!! ------ -!! Vincent Vionnet (CNRM/GMEI) -!! -!! MODIFICATIONS -!! ------------- -!! - IMPLICIT NONE - PUBLIC - -CONTAINS - - -! Sedimentation of snow particles is computed according to Carrier's drag coofficient. -! To reduce computational time; look-up tables are used. They depend on the -! average radius and the pressure (interpolation) - -SUBROUTINE BLOWSNW_SEDIM_LKT1D(PRG, & ! Mean radius (m) - PABST,& ! Pressure - PVGK) ! Number and mass average settling velocity - -USE MODD_BLOWSNW_SEDIM_LKT1D - -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -!* 0.1 declarations of arguments -! -REAL, DIMENSION(:,:), INTENT(IN) :: PRG -REAL, DIMENSION(:,:), INTENT(IN) :: PABST -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PVGK -! -!* 0.2 declaration of local variables -! -REAL, DIMENSION(SIZE(PRG,1),SIZE(PRG,2)) :: ZRG, ZPRESSURE -REAL :: ZIND,ZFACT_RG,ZFACT_PRESSURE -REAL :: ZV1_MASS,ZV1_NUMB,ZV2_MASS,ZV2_NUMB -INTEGER :: RG_IDX,PR_IDX -INTEGER :: JI,JJ,JK,II !Loop counter -REAL :: M2UM ! Convert m to um - -REAL(KIND=JPRB) :: ZHOOK_HANDLE - -IF (LHOOK) CALL DR_HOOK('BLOWSNW_SEDIM_LKT1D',0,ZHOOK_HANDLE) - -M2UM = 1000000 - - -!Remove unphysical values for rg and pressure -ZRG(:,:) = MIN( MAX(XRADIUS_LKT1D_MIN,PRG(:,:)*M2UM), XRADIUS_LKT1D_MAX) -ZPRESSURE(:,:) = MIN( MAX(XPRESSURE_LKT1D_MIN,PABST(:,:)), XPRESSURE_LKT1D_MAX-1.) -ZFACT_RG = DBLE(NMAX_RADIUS_LKT1D-1)/(XRADIUS_LKT1D_MAX-XRADIUS_LKT1D_MIN) -ZFACT_PRESSURE = DBLE(NMAX_PRESSURE_LKT1D-1)/(XPRESSURE_LKT1D_MAX-XPRESSURE_LKT1D_MIN) - -DO JI=1,SIZE(PRG,1) - DO JK=1,SIZE(PRG,2) - !Get the correct indexes for the look up tables - RG_IDX = INT((ZRG(JI,JK)-XRADIUS_LKT1D_MIN)*ZFACT_RG + 1.5) - ZIND = (ZPRESSURE(JI,JK)-XPRESSURE_LKT1D_MIN)*ZFACT_PRESSURE + 1. - PR_IDX = INT(ZIND) - ZV1_NUMB = XNUMB_SPEED_LKT1D(RG_IDX,PR_IDX) - ZV2_NUMB = XNUMB_SPEED_LKT1D(RG_IDX,PR_IDX+1) - ZV1_MASS = XMASS_SPEED_LKT1D(RG_IDX,PR_IDX) - ZV2_MASS = XMASS_SPEED_LKT1D(RG_IDX,PR_IDX+1) - ! Linear interpolation to get correct values - PVGK(JI,JK,1) = ZV1_NUMB + (ZIND - PR_IDX) * (ZV2_NUMB-ZV1_NUMB) - PVGK(JI,JK,2) = ZV1_MASS + (ZIND - PR_IDX) * (ZV2_MASS-ZV1_MASS) -! PVGK(JI,JK,3) = PVGK(JI,JK,2) - ENDDO -ENDDO - -IF (LHOOK) CALL DR_HOOK('BLOWSNW_SEDIM_LKT1D',1,ZHOOK_HANDLE) - -END SUBROUTINE BLOWSNW_SEDIM_LKT1D - -SUBROUTINE BLOWSNW_SEDIM_LKT1D_SET - -USE MODD_BLOWSNW_SEDIM_LKT1D - -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB -! -!* 0.2 declaration of local variables -! -LOGICAL :: OPIEKTUK - -REAL(KIND=JPRB) :: ZHOOK_HANDLE - -IF (LHOOK) CALL DR_HOOK('BLOWSNW_SEDIM_LKT1D_SET',0,ZHOOK_HANDLE) - -OPIEKTUK=.FALSE. - -IF(OPIEKTUK) THEN - -XNUMB_SPEED_LKT1D(1,1:4) = (/0.015056,0.013491,0.012659,0.012142/) -XMASS_SPEED_LKT1D(1,1:4) = (/0.026814,0.025878,0.025363,0.025028/) - -XNUMB_SPEED_LKT1D(2,1:4) = (/0.018595,0.017278,0.016572,0.016129/) -XMASS_SPEED_LKT1D(2,1:4) = (/0.036750,0.035901,0.035405,0.035061/) - -XNUMB_SPEED_LKT1D(3,1:4) = (/0.023150,0.021999,0.021372,0.020972/) -XMASS_SPEED_LKT1D(3,1:4) = (/0.048615,0.047758,0.047209,0.046796/) - -XNUMB_SPEED_LKT1D(4,1:4) = (/0.028622,0.027576,0.026992,0.026605/) -XMASS_SPEED_LKT1D(4,1:4) = (/0.062287,0.061322,0.060637,0.060081/) - -XNUMB_SPEED_LKT1D(5,1:4) = (/0.034946,0.033956,0.033378,0.032979/) -XMASS_SPEED_LKT1D(5,1:4) = (/0.077657,0.076464,0.075545,0.074760/) - -XNUMB_SPEED_LKT1D(6,1:4) = (/0.042073,0.041092,0.040487,0.040046/) -XMASS_SPEED_LKT1D(6,1:4) = (/0.094610,0.093053,0.091783,0.090669/) - -XNUMB_SPEED_LKT1D(7,1:4) = (/0.049963,0.048943,0.048273,0.047759/) -XMASS_SPEED_LKT1D(7,1:4) = (/0.113031,0.110950,0.109200,0.107647/) - -XNUMB_SPEED_LKT1D(8,1:4) = (/0.058579,0.057469,0.056693,0.056071/) -XMASS_SPEED_LKT1D(8,1:4) = (/0.132797,0.130017,0.127645,0.125534/) - -XNUMB_SPEED_LKT1D(9,1:4) = (/0.067886,0.066631,0.065704,0.064936/) -XMASS_SPEED_LKT1D(9,1:4) = (/0.153787,0.150115,0.146970,0.144180/) - -XNUMB_SPEED_LKT1D(10,1:4) = (/0.077848,0.076388,0.075262,0.074306/) -XMASS_SPEED_LKT1D(10,1:4) = (/0.175877,0.171111,0.167037,0.163443/) - -XNUMB_SPEED_LKT1D(11,1:4) = (/0.088431,0.086701,0.085324,0.084137/) -XMASS_SPEED_LKT1D(11,1:4) = (/0.198946,0.192874,0.187714,0.183195/) - -XNUMB_SPEED_LKT1D(12,1:4) = (/0.099598,0.097531,0.095847,0.094384/) -XMASS_SPEED_LKT1D(12,1:4) = (/0.222876,0.215284,0.208884,0.203321/) - -XNUMB_SPEED_LKT1D(13,1:4) = (/0.111314,0.108836,0.106789,0.105003/) -XMASS_SPEED_LKT1D(13,1:4) = (/0.247555,0.238228,0.230436,0.223719/) - -XNUMB_SPEED_LKT1D(14,1:4) = (/0.123545,0.120580,0.118111,0.115954/) -XMASS_SPEED_LKT1D(14,1:4) = (/0.272876,0.261603,0.252275,0.244297/) - -XNUMB_SPEED_LKT1D(15,1:4) = (/0.136256,0.132725,0.129774,0.127197/) -XMASS_SPEED_LKT1D(15,1:4) = (/0.298740,0.285316,0.274314,0.264979/) - -XNUMB_SPEED_LKT1D(16,1:4) = (/0.149412,0.145235,0.141740,0.138697/) -XMASS_SPEED_LKT1D(16,1:4) = (/0.325053,0.309281,0.296478,0.285697/) - -XNUMB_SPEED_LKT1D(17,1:4) = (/0.162981,0.158074,0.153975,0.150418/) -XMASS_SPEED_LKT1D(17,1:4) = (/0.351731,0.333423,0.318701,0.306394/) - -XNUMB_SPEED_LKT1D(18,1:4) = (/0.176929,0.171209,0.166446,0.162329/) -XMASS_SPEED_LKT1D(18,1:4) = (/0.378696,0.357675,0.340926,0.327022/) - -XNUMB_SPEED_LKT1D(19,1:4) = (/0.191225,0.184610,0.179123,0.174402/) -XMASS_SPEED_LKT1D(19,1:4) = (/0.405877,0.381980,0.363105,0.347539/) - -XNUMB_SPEED_LKT1D(20,1:4) = (/0.205840,0.198246,0.191977,0.186607/) -XMASS_SPEED_LKT1D(20,1:4) = (/0.433212,0.406284,0.385195,0.367912/) - -XNUMB_SPEED_LKT1D(21,1:4) = (/0.220743,0.212088,0.204981,0.198922/) -XMASS_SPEED_LKT1D(21,1:4) = (/0.460642,0.430545,0.407161,0.388113/) - -XNUMB_SPEED_LKT1D(22,1:4) = (/0.235908,0.226112,0.218111,0.211323/) -XMASS_SPEED_LKT1D(22,1:4) = (/0.488118,0.454722,0.428975,0.408121/) - -XNUMB_SPEED_LKT1D(23,1:4) = (/0.251307,0.240291,0.231345,0.223789/) -XMASS_SPEED_LKT1D(23,1:4) = (/0.515594,0.478783,0.450612,0.427917/) - -XNUMB_SPEED_LKT1D(24,1:4) = (/0.266917,0.254604,0.244661,0.236303/) -XMASS_SPEED_LKT1D(24,1:4) = (/0.543030,0.502700,0.472052,0.447487/) - -XNUMB_SPEED_LKT1D(25,1:4) = (/0.282714,0.269029,0.258041,0.248846/) -XMASS_SPEED_LKT1D(25,1:4) = (/0.570392,0.526448,0.493278,0.466821/) - -XNUMB_SPEED_LKT1D(26,1:4) = (/0.298675,0.283547,0.271468,0.261404/) -XMASS_SPEED_LKT1D(26,1:4) = (/0.597648,0.550009,0.514278,0.485909/) - -XNUMB_SPEED_LKT1D(27,1:4) = (/0.314780,0.298139,0.284925,0.273963/) -XMASS_SPEED_LKT1D(27,1:4) = (/0.624772,0.573364,0.535041,0.504748/) - -XNUMB_SPEED_LKT1D(28,1:4) = (/0.331009,0.312788,0.298398,0.286511/) -XMASS_SPEED_LKT1D(28,1:4) = (/0.651741,0.596502,0.555561,0.523332/) - -XNUMB_SPEED_LKT1D(29,1:4) = (/0.347343,0.327479,0.311875,0.299037/) -XMASS_SPEED_LKT1D(29,1:4) = (/0.678535,0.619410,0.575831,0.541661/) - -XNUMB_SPEED_LKT1D(30,1:4) = (/0.363766,0.342198,0.325343,0.311530/) -XMASS_SPEED_LKT1D(30,1:4) = (/0.705138,0.642081,0.595848,0.559734/) - -XNUMB_SPEED_LKT1D(31,1:4) = (/0.380262,0.356932,0.338792,0.323983/) -XMASS_SPEED_LKT1D(31,1:4) = (/0.731535,0.664507,0.615609,0.577551/) - -XNUMB_SPEED_LKT1D(32,1:4) = (/0.396817,0.371670,0.352213,0.336387/) -XMASS_SPEED_LKT1D(32,1:4) = (/0.757714,0.686683,0.635115,0.595114/) - -XNUMB_SPEED_LKT1D(33,1:4) = (/0.413415,0.386400,0.365596,0.348735/) -XMASS_SPEED_LKT1D(33,1:4) = (/0.783665,0.708606,0.654364,0.612425/) - -XNUMB_SPEED_LKT1D(34,1:4) = (/0.430045,0.401112,0.378935,0.361022/) -XMASS_SPEED_LKT1D(34,1:4) = (/0.809380,0.730275,0.673358,0.629488/) - -XNUMB_SPEED_LKT1D(35,1:4) = (/0.446695,0.415799,0.392222,0.373242/) -XMASS_SPEED_LKT1D(35,1:4) = (/0.834854,0.751687,0.692100,0.646306/) - -XNUMB_SPEED_LKT1D(36,1:4) = (/0.463354,0.430450,0.405452,0.385391/) -XMASS_SPEED_LKT1D(36,1:4) = (/0.860079,0.772843,0.710590,0.662883/) - -XNUMB_SPEED_LKT1D(37,1:4) = (/0.480012,0.445061,0.418618,0.397465/) -XMASS_SPEED_LKT1D(37,1:4) = (/0.885054,0.793743,0.728833,0.679223/) - -XNUMB_SPEED_LKT1D(38,1:4) = (/0.496660,0.459623,0.431717,0.409459/) -XMASS_SPEED_LKT1D(38,1:4) = (/0.909775,0.814389,0.746832,0.695331/) - -XNUMB_SPEED_LKT1D(39,1:4) = (/0.513288,0.474131,0.444744,0.421372/) -XMASS_SPEED_LKT1D(39,1:4) = (/0.934241,0.834783,0.764591,0.711212/) - -XNUMB_SPEED_LKT1D(40,1:4) = (/0.529891,0.488579,0.457695,0.433201/) -XMASS_SPEED_LKT1D(40,1:4) = (/0.958451,0.854928,0.782114,0.726871/) - -XNUMB_SPEED_LKT1D(41,1:4) = (/0.546459,0.502964,0.470567,0.444943/) -XMASS_SPEED_LKT1D(41,1:4) = (/0.982404,0.874825,0.799404,0.742312/) - -XNUMB_SPEED_LKT1D(42,1:4) = (/0.562987,0.517279,0.483358,0.456598/) -XMASS_SPEED_LKT1D(42,1:4) = (/1.006102,0.894479,0.816467,0.757540/) - -XNUMB_SPEED_LKT1D(43,1:4) = (/0.579469,0.531523,0.496065,0.468163/) -XMASS_SPEED_LKT1D(43,1:4) = (/1.029545,0.913893,0.833306,0.772561/) - -XNUMB_SPEED_LKT1D(44,1:4) = (/0.595899,0.545691,0.508686,0.479638/) -XMASS_SPEED_LKT1D(44,1:4) = (/1.052735,0.933071,0.849927,0.787379/) - -XNUMB_SPEED_LKT1D(45,1:4) = (/0.612272,0.559780,0.521219,0.491021/) -XMASS_SPEED_LKT1D(45,1:4) = (/1.075673,0.952016,0.866335,0.802000/) - -XNUMB_SPEED_LKT1D(46,1:4) = (/0.628584,0.573789,0.533664,0.502312/) -XMASS_SPEED_LKT1D(46,1:4) = (/1.098364,0.970733,0.882533,0.816428/) - -XNUMB_SPEED_LKT1D(47,1:4) = (/0.644831,0.587714,0.546018,0.513511/) -XMASS_SPEED_LKT1D(47,1:4) = (/1.120808,0.989225,0.898526,0.830668/) - -XNUMB_SPEED_LKT1D(48,1:4) = (/0.661009,0.601554,0.558281,0.524618/) -XMASS_SPEED_LKT1D(48,1:4) = (/1.143009,1.007497,0.914320,0.844724/) - -XNUMB_SPEED_LKT1D(49,1:4) = (/0.677115,0.615307,0.570453,0.535632/) -XMASS_SPEED_LKT1D(49,1:4) = (/1.164969,1.025553,0.929918,0.858602/) - -XNUMB_SPEED_LKT1D(50,1:4) = (/0.693145,0.628971,0.582533,0.546554/) -XMASS_SPEED_LKT1D(50,1:4) = (/1.186693,1.043397,0.945325,0.872306/) - -XNUMB_SPEED_LKT1D(51,1:4) = (/0.709098,0.642547,0.594520,0.557383/) -XMASS_SPEED_LKT1D(51,1:4) = (/1.208184,1.061034,0.960546,0.885840/) - -XNUMB_SPEED_LKT1D(52,1:4) = (/0.724970,0.656031,0.606415,0.568121/) -XMASS_SPEED_LKT1D(52,1:4) = (/1.229445,1.078468,0.975584,0.899209/) - -XNUMB_SPEED_LKT1D(53,1:4) = (/0.740760,0.669425,0.618217,0.578768/) -XMASS_SPEED_LKT1D(53,1:4) = (/1.250479,1.095703,0.990445,0.912417/) - -XNUMB_SPEED_LKT1D(54,1:4) = (/0.756466,0.682727,0.629927,0.589324/) -XMASS_SPEED_LKT1D(54,1:4) = (/1.271291,1.112743,1.005133,0.925468/) - -XNUMB_SPEED_LKT1D(55,1:4) = (/0.772086,0.695937,0.641545,0.599790/) -XMASS_SPEED_LKT1D(55,1:4) = (/1.291884,1.129592,1.019651,0.938366/) - -XNUMB_SPEED_LKT1D(56,1:4) = (/0.787619,0.709055,0.653071,0.610166/) -XMASS_SPEED_LKT1D(56,1:4) = (/1.312262,1.146255,1.034004,0.951114/) - -XNUMB_SPEED_LKT1D(57,1:4) = (/0.803064,0.722080,0.664505,0.620455/) -XMASS_SPEED_LKT1D(57,1:4) = (/1.332428,1.162735,1.048195,0.963717/) - -XNUMB_SPEED_LKT1D(58,1:4) = (/0.818419,0.735013,0.675849,0.630655/) -XMASS_SPEED_LKT1D(58,1:4) = (/1.352387,1.179036,1.062228,0.976179/) - -XNUMB_SPEED_LKT1D(59,1:4) = (/0.833684,0.747853,0.687103,0.640769/) -XMASS_SPEED_LKT1D(59,1:4) = (/1.372142,1.195163,1.076108,0.988502/) - -XNUMB_SPEED_LKT1D(60,1:4) = (/0.848858,0.760601,0.698268,0.650797/) -XMASS_SPEED_LKT1D(60,1:4) = (/1.391697,1.211118,1.089838,1.000691/) - -XNUMB_SPEED_LKT1D(61,1:4) = (/0.863940,0.773257,0.709343,0.660740/) -XMASS_SPEED_LKT1D(61,1:4) = (/1.411055,1.226906,1.103420,1.012748/) - -XNUMB_SPEED_LKT1D(62,1:4) = (/0.878931,0.785821,0.720331,0.670599/) -XMASS_SPEED_LKT1D(62,1:4) = (/1.430221,1.242531,1.116860,1.024677/) - -XNUMB_SPEED_LKT1D(63,1:4) = (/0.893829,0.798295,0.731231,0.680376/) -XMASS_SPEED_LKT1D(63,1:4) = (/1.449198,1.257995,1.130160,1.036481/) - -XNUMB_SPEED_LKT1D(64,1:4) = (/0.908635,0.810678,0.742046,0.690070/) -XMASS_SPEED_LKT1D(64,1:4) = (/1.467989,1.273303,1.143323,1.048163/) - -XNUMB_SPEED_LKT1D(65,1:4) = (/0.923348,0.822970,0.752774,0.699684/) -XMASS_SPEED_LKT1D(65,1:4) = (/1.486598,1.288458,1.156352,1.059726/) - -XNUMB_SPEED_LKT1D(66,1:4) = (/0.937969,0.835174,0.763418,0.709218/) -XMASS_SPEED_LKT1D(66,1:4) = (/1.505028,1.303463,1.169251,1.071173/) - -XNUMB_SPEED_LKT1D(67,1:4) = (/0.952498,0.847288,0.773979,0.718673/) -XMASS_SPEED_LKT1D(67,1:4) = (/1.523284,1.318321,1.182023,1.082507/) - -XNUMB_SPEED_LKT1D(68,1:4) = (/0.966934,0.859315,0.784456,0.728051/) -XMASS_SPEED_LKT1D(68,1:4) = (/1.541367,1.333036,1.194671,1.093730/) - -XNUMB_SPEED_LKT1D(69,1:4) = (/0.981278,0.871254,0.794852,0.737352/) -XMASS_SPEED_LKT1D(69,1:4) = (/1.559283,1.347610,1.207196,1.104844/) - -XNUMB_SPEED_LKT1D(70,1:4) = (/0.995531,0.883107,0.805167,0.746578/) -XMASS_SPEED_LKT1D(70,1:4) = (/1.577033,1.362047,1.219603,1.115853/) - -XNUMB_SPEED_LKT1D(71,1:4) = (/1.009692,0.894874,0.815403,0.755729/) -XMASS_SPEED_LKT1D(71,1:4) = (/1.594621,1.376349,1.231894,1.126759/) - -XNUMB_SPEED_LKT1D(72,1:4) = (/1.023762,0.906556,0.825559,0.764807/) -XMASS_SPEED_LKT1D(72,1:4) = (/1.612050,1.390520,1.244071,1.137565/) - -XNUMB_SPEED_LKT1D(73,1:4) = (/1.037742,0.918153,0.835638,0.773813/) -XMASS_SPEED_LKT1D(73,1:4) = (/1.629324,1.404562,1.256136,1.148271/) - -XNUMB_SPEED_LKT1D(74,1:4) = (/1.051632,0.929668,0.845640,0.782747/) -XMASS_SPEED_LKT1D(74,1:4) = (/1.646445,1.418477,1.268093,1.158882/) - -XNUMB_SPEED_LKT1D(75,1:4) = (/1.065432,0.941100,0.855567,0.791611/) -XMASS_SPEED_LKT1D(75,1:4) = (/1.663415,1.432269,1.279944,1.169398/) - -XNUMB_SPEED_LKT1D(76,1:4) = (/1.079144,0.952451,0.865418,0.800406/) -XMASS_SPEED_LKT1D(76,1:4) = (/1.680239,1.445941,1.291690,1.179822/) - -XNUMB_SPEED_LKT1D(77,1:4) = (/1.092767,0.963721,0.875196,0.809133/) -XMASS_SPEED_LKT1D(77,1:4) = (/1.696919,1.459493,1.303335,1.190156/) - -XNUMB_SPEED_LKT1D(78,1:4) = (/1.106302,0.974911,0.884901,0.817793/) -XMASS_SPEED_LKT1D(78,1:4) = (/1.713457,1.472930,1.314880,1.200402/) - -XNUMB_SPEED_LKT1D(79,1:4) = (/1.119751,0.986023,0.894534,0.826387/) -XMASS_SPEED_LKT1D(79,1:4) = (/1.729856,1.486253,1.326328,1.210562/) - -XNUMB_SPEED_LKT1D(80,1:4) = (/1.133114,0.997057,0.904096,0.834916/) -XMASS_SPEED_LKT1D(80,1:4) = (/1.746119,1.499464,1.337680,1.220637/) - -XNUMB_SPEED_LKT1D(81,1:4) = (/1.146391,1.008013,0.913588,0.843380/) -XMASS_SPEED_LKT1D(81,1:4) = (/1.762249,1.512567,1.348938,1.230630/) - -XNUMB_SPEED_LKT1D(82,1:4) = (/1.159583,1.018894,0.923011,0.851782/) -XMASS_SPEED_LKT1D(82,1:4) = (/1.778248,1.525562,1.360105,1.240542/) - -XNUMB_SPEED_LKT1D(83,1:4) = (/1.172691,1.029699,0.932367,0.860121/) -XMASS_SPEED_LKT1D(83,1:4) = (/1.794117,1.538452,1.371182,1.250374/) - -XNUMB_SPEED_LKT1D(84,1:4) = (/1.185716,1.040431,0.941655,0.868399/) -XMASS_SPEED_LKT1D(84,1:4) = (/1.809861,1.551240,1.382171,1.260130/) - -XNUMB_SPEED_LKT1D(85,1:4) = (/1.198659,1.051089,0.950877,0.876616/) -XMASS_SPEED_LKT1D(85,1:4) = (/1.825481,1.563927,1.393074,1.269809/) - -XNUMB_SPEED_LKT1D(86,1:4) = (/1.211519,1.061674,0.960034,0.884774/) -XMASS_SPEED_LKT1D(86,1:4) = (/1.840979,1.576515,1.403892,1.279414/) - -XNUMB_SPEED_LKT1D(87,1:4) = (/1.224299,1.072188,0.969127,0.892874/) -XMASS_SPEED_LKT1D(87,1:4) = (/1.856357,1.589006,1.414628,1.288946/) - -XNUMB_SPEED_LKT1D(88,1:4) = (/1.236999,1.082631,0.978157,0.900916/) -XMASS_SPEED_LKT1D(88,1:4) = (/1.871619,1.601402,1.425282,1.298406/) - -XNUMB_SPEED_LKT1D(89,1:4) = (/1.249619,1.093005,0.987124,0.908901/) -XMASS_SPEED_LKT1D(89,1:4) = (/1.886765,1.613704,1.435857,1.307797/) - -XNUMB_SPEED_LKT1D(90,1:4) = (/1.262160,1.103309,0.996029,0.916830/) -XMASS_SPEED_LKT1D(90,1:4) = (/1.901798,1.625916,1.446354,1.317118/) - -XNUMB_SPEED_LKT1D(91,1:4) = (/1.274624,1.113546,1.004874,0.924705/) -XMASS_SPEED_LKT1D(91,1:4) = (/1.916720,1.638037,1.456774,1.326373/) - -XNUMB_SPEED_LKT1D(92,1:4) = (/1.287011,1.123716,1.013659,0.932525/) -XMASS_SPEED_LKT1D(92,1:4) = (/1.931533,1.650070,1.467120,1.335561/) - -XNUMB_SPEED_LKT1D(93,1:4) = (/1.299322,1.133819,1.022385,0.940291/) -XMASS_SPEED_LKT1D(93,1:4) = (/1.946239,1.662017,1.477391,1.344684/) - -XNUMB_SPEED_LKT1D(94,1:4) = (/1.311558,1.143857,1.031053,0.948005/) -XMASS_SPEED_LKT1D(94,1:4) = (/1.960839,1.673878,1.487590,1.353744/) - -XNUMB_SPEED_LKT1D(95,1:4) = (/1.323719,1.153830,1.039663,0.955667/) -XMASS_SPEED_LKT1D(95,1:4) = (/1.975336,1.685656,1.497718,1.362741/) - -XNUMB_SPEED_LKT1D(96,1:4) = (/1.335806,1.163739,1.048217,0.963278/) -XMASS_SPEED_LKT1D(96,1:4) = (/1.989732,1.697353,1.507777,1.371677/) - -XNUMB_SPEED_LKT1D(97,1:4) = (/1.347820,1.173586,1.056715,0.970839/) -XMASS_SPEED_LKT1D(97,1:4) = (/2.004027,1.708969,1.517766,1.380553/) - -XNUMB_SPEED_LKT1D(98,1:4) = (/1.359762,1.183370,1.065158,0.978350/) -XMASS_SPEED_LKT1D(98,1:4) = (/2.018225,1.720505,1.527689,1.389370/) - -XNUMB_SPEED_LKT1D(99,1:4) = (/1.371633,1.193093,1.073547,0.985812/) -XMASS_SPEED_LKT1D(99,1:4) = (/2.032326,1.731964,1.537546,1.398129/) - -XNUMB_SPEED_LKT1D(100,1:4) = (/1.383434,1.202756,1.081883,0.993226/) -XMASS_SPEED_LKT1D(100,1:4) = (/2.046332,1.743347,1.547338,1.406831/) - -XNUMB_SPEED_LKT1D(101,1:4) = (/1.395164,1.212358,1.090166,1.000593/) -XMASS_SPEED_LKT1D(101,1:4) = (/2.060244,1.754655,1.557066,1.415476/) - -XNUMB_SPEED_LKT1D(102,1:4) = (/1.406826,1.221902,1.098397,1.007913/) -XMASS_SPEED_LKT1D(102,1:4) = (/2.074065,1.765889,1.566731,1.424067/) - -XNUMB_SPEED_LKT1D(103,1:4) = (/1.418419,1.231388,1.106576,1.015187/) -XMASS_SPEED_LKT1D(103,1:4) = (/2.087796,1.777051,1.576336,1.432604/) - -XNUMB_SPEED_LKT1D(104,1:4) = (/1.429945,1.240816,1.114705,1.022415/) -XMASS_SPEED_LKT1D(104,1:4) = (/2.101438,1.788142,1.585879,1.441088/) - -XNUMB_SPEED_LKT1D(105,1:4) = (/1.441405,1.250187,1.122785,1.029599/) -XMASS_SPEED_LKT1D(105,1:4) = (/2.114993,1.799162,1.595363,1.449519/) - -XNUMB_SPEED_LKT1D(106,1:4) = (/1.452798,1.259502,1.130815,1.036739/) -XMASS_SPEED_LKT1D(106,1:4) = (/2.128462,1.810114,1.604789,1.457899/) - -XNUMB_SPEED_LKT1D(107,1:4) = (/1.464126,1.268762,1.138796,1.043835/) -XMASS_SPEED_LKT1D(107,1:4) = (/2.141846,1.820998,1.614157,1.466229/) - -XNUMB_SPEED_LKT1D(108,1:4) = (/1.475390,1.277968,1.146730,1.050888/) -XMASS_SPEED_LKT1D(108,1:4) = (/2.155147,1.831815,1.623469,1.474509/) - -XNUMB_SPEED_LKT1D(109,1:4) = (/1.486590,1.287119,1.154617,1.057899/) -XMASS_SPEED_LKT1D(109,1:4) = (/2.168367,1.842567,1.632725,1.482740/) - -XNUMB_SPEED_LKT1D(110,1:4) = (/1.497727,1.296218,1.162457,1.064869/) -XMASS_SPEED_LKT1D(110,1:4) = (/2.181506,1.853254,1.641926,1.490923/) - -XNUMB_SPEED_LKT1D(111,1:4) = (/1.508802,1.305264,1.170252,1.071797/) -XMASS_SPEED_LKT1D(111,1:4) = (/2.194566,1.863878,1.651074,1.499059/) - -XNUMB_SPEED_LKT1D(112,1:4) = (/1.519815,1.314258,1.178001,1.078686/) -XMASS_SPEED_LKT1D(112,1:4) = (/2.207547,1.874440,1.660168,1.507149/) - -XNUMB_SPEED_LKT1D(113,1:4) = (/1.530768,1.323200,1.185705,1.085534/) -XMASS_SPEED_LKT1D(113,1:4) = (/2.220452,1.884940,1.669211,1.515192/) - -XNUMB_SPEED_LKT1D(114,1:4) = (/1.541660,1.332093,1.193365,1.092342/) -XMASS_SPEED_LKT1D(114,1:4) = (/2.233281,1.895380,1.678202,1.523191/) - -XNUMB_SPEED_LKT1D(115,1:4) = (/1.552493,1.340935,1.200982,1.099112/) -XMASS_SPEED_LKT1D(115,1:4) = (/2.246036,1.905760,1.687143,1.531145/) - -XNUMB_SPEED_LKT1D(116,1:4) = (/1.563267,1.349728,1.208556,1.105844/) -XMASS_SPEED_LKT1D(116,1:4) = (/2.258718,1.916081,1.696034,1.539056/) - -XNUMB_SPEED_LKT1D(117,1:4) = (/1.573983,1.358473,1.216088,1.112538/) -XMASS_SPEED_LKT1D(117,1:4) = (/2.271327,1.926345,1.704876,1.546924/) - -XNUMB_SPEED_LKT1D(118,1:4) = (/1.584642,1.367169,1.223578,1.119195/) -XMASS_SPEED_LKT1D(118,1:4) = (/2.283865,1.936552,1.713669,1.554749/) - -XNUMB_SPEED_LKT1D(119,1:4) = (/1.595243,1.375818,1.231026,1.125815/) -XMASS_SPEED_LKT1D(119,1:4) = (/2.296333,1.946702,1.722416,1.562533/) - -XNUMB_SPEED_LKT1D(120,1:4) = (/1.605789,1.384420,1.238434,1.132398/) -XMASS_SPEED_LKT1D(120,1:4) = (/2.308732,1.956798,1.731115,1.570275/) - -XNUMB_SPEED_LKT1D(121,1:4) = (/1.616279,1.392976,1.245802,1.138946/) -XMASS_SPEED_LKT1D(121,1:4) = (/2.321063,1.966839,1.739769,1.577977/) - -XNUMB_SPEED_LKT1D(122,1:4) = (/1.626714,1.401487,1.253130,1.145459/) -XMASS_SPEED_LKT1D(122,1:4) = (/2.333327,1.976827,1.748377,1.585640/) - -XNUMB_SPEED_LKT1D(123,1:4) = (/1.637095,1.409952,1.260419,1.151937/) -XMASS_SPEED_LKT1D(123,1:4) = (/2.345524,1.986762,1.756940,1.593263/) - -XNUMB_SPEED_LKT1D(124,1:4) = (/1.647423,1.418372,1.267670,1.158380/) -XMASS_SPEED_LKT1D(124,1:4) = (/2.357657,1.996645,1.765460,1.600847/) - -XNUMB_SPEED_LKT1D(125,1:4) = (/1.657697,1.426749,1.274882,1.164790/) -XMASS_SPEED_LKT1D(125,1:4) = (/2.369725,2.006477,1.773936,1.608394/) - -XNUMB_SPEED_LKT1D(126,1:4) = (/1.667919,1.435082,1.282057,1.171166/) -XMASS_SPEED_LKT1D(126,1:4) = (/2.381730,2.016258,1.782369,1.615902/) - -XNUMB_SPEED_LKT1D(127,1:4) = (/1.678089,1.443372,1.289194,1.177509/) -XMASS_SPEED_LKT1D(127,1:4) = (/2.393673,2.025990,1.790760,1.623374/) - -XNUMB_SPEED_LKT1D(128,1:4) = (/1.688208,1.451619,1.296295,1.183819/) -XMASS_SPEED_LKT1D(128,1:4) = (/2.405554,2.035672,1.799109,1.630809/) - -XNUMB_SPEED_LKT1D(129,1:4) = (/1.698276,1.459825,1.303360,1.190098/) -XMASS_SPEED_LKT1D(129,1:4) = (/2.417374,2.045306,1.807417,1.638208/) - -XNUMB_SPEED_LKT1D(130,1:4) = (/1.708294,1.467989,1.310389,1.196344/) -XMASS_SPEED_LKT1D(130,1:4) = (/2.429135,2.054892,1.815685,1.645572/) - -XNUMB_SPEED_LKT1D(131,1:4) = (/1.718262,1.476113,1.317382,1.202560/) -XMASS_SPEED_LKT1D(131,1:4) = (/2.440836,2.064431,1.823912,1.652900/) - -XNUMB_SPEED_LKT1D(132,1:4) = (/1.728182,1.484195,1.324341,1.208744/) -XMASS_SPEED_LKT1D(132,1:4) = (/2.452479,2.073924,1.832101,1.660194/) - -XNUMB_SPEED_LKT1D(133,1:4) = (/1.738053,1.492238,1.331265,1.214897/) -XMASS_SPEED_LKT1D(133,1:4) = (/2.464065,2.083371,1.840251,1.667454/) - -XNUMB_SPEED_LKT1D(134,1:4) = (/1.747876,1.500242,1.338155,1.221021/) -XMASS_SPEED_LKT1D(134,1:4) = (/2.475594,2.092772,1.848362,1.674680/) - -XNUMB_SPEED_LKT1D(135,1:4) = (/1.757651,1.508206,1.345011,1.227114/) -XMASS_SPEED_LKT1D(135,1:4) = (/2.487067,2.102129,1.856435,1.681873/) - -XNUMB_SPEED_LKT1D(136,1:4) = (/1.767380,1.516132,1.351834,1.233179/) -XMASS_SPEED_LKT1D(136,1:4) = (/2.498485,2.111442,1.864471,1.689033/) - -XNUMB_SPEED_LKT1D(137,1:4) = (/1.777063,1.524020,1.358625,1.239214/) -XMASS_SPEED_LKT1D(137,1:4) = (/2.509848,2.120712,1.872471,1.696161/) - -XNUMB_SPEED_LKT1D(138,1:4) = (/1.786699,1.531870,1.365383,1.245220/) -XMASS_SPEED_LKT1D(138,1:4) = (/2.521158,2.129938,1.880434,1.703257/) - -XNUMB_SPEED_LKT1D(139,1:4) = (/1.796290,1.539683,1.372109,1.251198/) -XMASS_SPEED_LKT1D(139,1:4) = (/2.532415,2.139123,1.888361,1.710321/) - -XNUMB_SPEED_LKT1D(140,1:4) = (/1.805837,1.547459,1.378803,1.257148/) -XMASS_SPEED_LKT1D(140,1:4) = (/2.543619,2.148265,1.896253,1.717354/) - -XNUMB_SPEED_LKT1D(141,1:4) = (/1.815339,1.555198,1.385466,1.263070/) -XMASS_SPEED_LKT1D(141,1:4) = (/2.554771,2.157367,1.904109,1.724357/) - -XNUMB_SPEED_LKT1D(142,1:4) = (/1.824797,1.562902,1.392098,1.268965/) -XMASS_SPEED_LKT1D(142,1:4) = (/2.565873,2.166428,1.911932,1.731329/) - -XNUMB_SPEED_LKT1D(143,1:4) = (/1.834212,1.570570,1.398700,1.274833/) -XMASS_SPEED_LKT1D(143,1:4) = (/2.576924,2.175448,1.919720,1.738272/) - -XNUMB_SPEED_LKT1D(144,1:4) = (/1.843584,1.578203,1.405271,1.280674/) -XMASS_SPEED_LKT1D(144,1:4) = (/2.587925,2.184429,1.927474,1.745184/) - -XNUMB_SPEED_LKT1D(145,1:4) = (/1.852913,1.585801,1.411812,1.286489/) -XMASS_SPEED_LKT1D(145,1:4) = (/2.598877,2.193370,1.935196,1.752068/) - -XNUMB_SPEED_LKT1D(146,1:4) = (/1.862200,1.593365,1.418324,1.292277/) -XMASS_SPEED_LKT1D(146,1:4) = (/2.609780,2.202273,1.942884,1.758922/) - -XNUMB_SPEED_LKT1D(147,1:4) = (/1.871446,1.600895,1.424807,1.298040/) -XMASS_SPEED_LKT1D(147,1:4) = (/2.620636,2.211138,1.950540,1.765749/) - -XNUMB_SPEED_LKT1D(148,1:4) = (/1.880651,1.608391,1.431261,1.303778/) -XMASS_SPEED_LKT1D(148,1:4) = (/2.631444,2.219964,1.958164,1.772547/) - -XNUMB_SPEED_LKT1D(149,1:4) = (/1.889815,1.615855,1.437687,1.309490/) -XMASS_SPEED_LKT1D(149,1:4) = (/2.642205,2.228754,1.965756,1.779317/) - -XNUMB_SPEED_LKT1D(150,1:4) = (/1.898938,1.623285,1.444084,1.315177/) -XMASS_SPEED_LKT1D(150,1:4) = (/2.652920,2.237507,1.973317,1.786059/) - -XNUMB_SPEED_LKT1D(151,1:4) = (/1.908022,1.630682,1.450454,1.320840/) -XMASS_SPEED_LKT1D(151,1:4) = (/2.663589,2.246223,1.980847,1.792775/) - -XNUMB_SPEED_LKT1D(152,1:4) = (/1.917067,1.638048,1.456795,1.326478/) -XMASS_SPEED_LKT1D(152,1:4) = (/2.674213,2.254903,1.988347,1.799464/) - -XNUMB_SPEED_LKT1D(153,1:4) = (/1.926072,1.645382,1.463110,1.332092/) -XMASS_SPEED_LKT1D(153,1:4) = (/2.684792,2.263547,1.995816,1.806126/) - -XNUMB_SPEED_LKT1D(154,1:4) = (/1.935039,1.652684,1.469398,1.337683/) -XMASS_SPEED_LKT1D(154,1:4) = (/2.695328,2.272156,2.003255,1.812761/) - -XNUMB_SPEED_LKT1D(155,1:4) = (/1.943967,1.659955,1.475659,1.343249/) -XMASS_SPEED_LKT1D(155,1:4) = (/2.705819,2.280731,2.010665,1.819371/) - -XNUMB_SPEED_LKT1D(156,1:4) = (/1.952858,1.667196,1.481894,1.348793/) -XMASS_SPEED_LKT1D(156,1:4) = (/2.716268,2.289271,2.018046,1.825955/) - -XNUMB_SPEED_LKT1D(157,1:4) = (/1.961711,1.674406,1.488102,1.354314/) -XMASS_SPEED_LKT1D(157,1:4) = (/2.726673,2.297777,2.025398,1.832514/) - -XNUMB_SPEED_LKT1D(158,1:4) = (/1.970527,1.681586,1.494285,1.359812/) -XMASS_SPEED_LKT1D(158,1:4) = (/2.737037,2.306249,2.032721,1.839048/) - -XNUMB_SPEED_LKT1D(159,1:4) = (/1.979307,1.688736,1.500443,1.365287/) -XMASS_SPEED_LKT1D(159,1:4) = (/2.747359,2.314689,2.040016,1.845557/) - -XNUMB_SPEED_LKT1D(160,1:4) = (/1.988050,1.695857,1.506575,1.370740/) -XMASS_SPEED_LKT1D(160,1:4) = (/2.757640,2.323095,2.047283,1.852041/) - -XNUMB_SPEED_LKT1D(161,1:4) = (/1.996758,1.702948,1.512682,1.376171/) -XMASS_SPEED_LKT1D(161,1:4) = (/2.767879,2.331469,2.054523,1.858501/) - -XNUMB_SPEED_LKT1D(162,1:4) = (/2.005429,1.710011,1.518765,1.381580/) -XMASS_SPEED_LKT1D(162,1:4) = (/2.778079,2.339810,2.061735,1.864937/) - -XNUMB_SPEED_LKT1D(163,1:4) = (/2.014066,1.717045,1.524823,1.386968/) -XMASS_SPEED_LKT1D(163,1:4) = (/2.788238,2.348120,2.068920,1.871349/) - -XNUMB_SPEED_LKT1D(164,1:4) = (/2.022667,1.724051,1.530857,1.392335/) -XMASS_SPEED_LKT1D(164,1:4) = (/2.798359,2.356398,2.076078,1.877737/) - -XNUMB_SPEED_LKT1D(165,1:4) = (/2.031235,1.731029,1.536867,1.397680/) -XMASS_SPEED_LKT1D(165,1:4) = (/2.808440,2.364645,2.083210,1.884102/) - -XNUMB_SPEED_LKT1D(166,1:4) = (/2.039768,1.737979,1.542854,1.403004/) -XMASS_SPEED_LKT1D(166,1:4) = (/2.818482,2.372861,2.090316,1.890445/) - -XNUMB_SPEED_LKT1D(167,1:4) = (/2.048267,1.744901,1.548817,1.408308/) -XMASS_SPEED_LKT1D(167,1:4) = (/2.828486,2.381046,2.097396,1.896764/) - -XNUMB_SPEED_LKT1D(168,1:4) = (/2.056733,1.751797,1.554757,1.413592/) -XMASS_SPEED_LKT1D(168,1:4) = (/2.838452,2.389202,2.104450,1.903061/) - -XNUMB_SPEED_LKT1D(169,1:4) = (/2.065165,1.758666,1.560673,1.418855/) -XMASS_SPEED_LKT1D(169,1:4) = (/2.848381,2.397327,2.111478,1.909335/) - -XNUMB_SPEED_LKT1D(170,1:4) = (/2.073565,1.765508,1.566568,1.424098/) -XMASS_SPEED_LKT1D(170,1:4) = (/2.858272,2.405422,2.118481,1.915587/) - -XNUMB_SPEED_LKT1D(171,1:4) = (/2.081932,1.772324,1.572439,1.429321/) -XMASS_SPEED_LKT1D(171,1:4) = (/2.868127,2.413489,2.125460,1.921817/) - -XNUMB_SPEED_LKT1D(172,1:4) = (/2.090267,1.779113,1.578289,1.434525/) -XMASS_SPEED_LKT1D(172,1:4) = (/2.877945,2.421526,2.132413,1.928025/) - -XNUMB_SPEED_LKT1D(173,1:4) = (/2.098570,1.785877,1.584116,1.439709/) -XMASS_SPEED_LKT1D(173,1:4) = (/2.887727,2.429534,2.139343,1.934212/) - -XNUMB_SPEED_LKT1D(174,1:4) = (/2.106841,1.792616,1.589922,1.444874/) -XMASS_SPEED_LKT1D(174,1:4) = (/2.897473,2.437514,2.146247,1.940378/) - -XNUMB_SPEED_LKT1D(175,1:4) = (/2.115081,1.799329,1.595706,1.450021/) -XMASS_SPEED_LKT1D(175,1:4) = (/2.907184,2.445466,2.153128,1.946522/) - -XNUMB_SPEED_LKT1D(176,1:4) = (/2.123290,1.806017,1.601469,1.455148/) -XMASS_SPEED_LKT1D(176,1:4) = (/2.916860,2.453389,2.159985,1.952645/) - -XNUMB_SPEED_LKT1D(177,1:4) = (/2.131469,1.812680,1.607211,1.460256/) -XMASS_SPEED_LKT1D(177,1:4) = (/2.926502,2.461285,2.166819,1.958747/) - -XNUMB_SPEED_LKT1D(178,1:4) = (/2.139617,1.819319,1.612931,1.465347/) -XMASS_SPEED_LKT1D(178,1:4) = (/2.936108,2.469153,2.173629,1.964829/) - -XNUMB_SPEED_LKT1D(179,1:4) = (/2.147735,1.825934,1.618631,1.470418/) -XMASS_SPEED_LKT1D(179,1:4) = (/2.945681,2.476994,2.180415,1.970891/) - -XNUMB_SPEED_LKT1D(180,1:4) = (/2.155823,1.832524,1.624310,1.475472/) -XMASS_SPEED_LKT1D(180,1:4) = (/2.955219,2.484808,2.187179,1.976932/) - -XNUMB_SPEED_LKT1D(181,1:4) = (/2.163881,1.839091,1.629969,1.480508/) -XMASS_SPEED_LKT1D(181,1:4) = (/2.964725,2.492595,2.193920,1.982952/) - -XNUMB_SPEED_LKT1D(182,1:4) = (/2.171911,1.845633,1.635608,1.485526/) -XMASS_SPEED_LKT1D(182,1:4) = (/2.974196,2.500355,2.200638,1.988953/) - -XNUMB_SPEED_LKT1D(183,1:4) = (/2.179911,1.852153,1.641227,1.490527/) -XMASS_SPEED_LKT1D(183,1:4) = (/2.983635,2.508089,2.207334,1.994935/) - -XNUMB_SPEED_LKT1D(184,1:4) = (/2.187882,1.858649,1.646826,1.495510/) -XMASS_SPEED_LKT1D(184,1:4) = (/2.993041,2.515797,2.214008,2.000896/) - -XNUMB_SPEED_LKT1D(185,1:4) = (/2.195825,1.865123,1.652406,1.500476/) -XMASS_SPEED_LKT1D(185,1:4) = (/3.002415,2.523478,2.220659,2.006838/) - -XNUMB_SPEED_LKT1D(186,1:4) = (/2.203740,1.871573,1.657966,1.505425/) -XMASS_SPEED_LKT1D(186,1:4) = (/3.011756,2.531134,2.227288,2.012761/) - -XNUMB_SPEED_LKT1D(187,1:4) = (/2.211626,1.878001,1.663507,1.510356/) -XMASS_SPEED_LKT1D(187,1:4) = (/3.021065,2.538765,2.233896,2.018664/) - -XNUMB_SPEED_LKT1D(188,1:4) = (/2.219485,1.884407,1.669029,1.515272/) -XMASS_SPEED_LKT1D(188,1:4) = (/3.030343,2.546369,2.240482,2.024548/) - -XNUMB_SPEED_LKT1D(189,1:4) = (/2.227317,1.890790,1.674532,1.520170/) -XMASS_SPEED_LKT1D(189,1:4) = (/3.039589,2.553949,2.247046,2.030413/) - -XNUMB_SPEED_LKT1D(190,1:4) = (/2.235121,1.897152,1.680017,1.525052/) -XMASS_SPEED_LKT1D(190,1:4) = (/3.048803,2.561504,2.253589,2.036260/) - -XNUMB_SPEED_LKT1D(191,1:4) = (/2.242899,1.903492,1.685483,1.529918/) -XMASS_SPEED_LKT1D(191,1:4) = (/3.057987,2.569033,2.260111,2.042088/) - -XNUMB_SPEED_LKT1D(192,1:4) = (/2.250649,1.909810,1.690930,1.534767/) -XMASS_SPEED_LKT1D(192,1:4) = (/3.067139,2.576538,2.266612,2.047897/) - -XNUMB_SPEED_LKT1D(193,1:4) = (/2.258373,1.916107,1.696360,1.539601/) -XMASS_SPEED_LKT1D(193,1:4) = (/3.076261,2.584018,2.273091,2.053687/) - -XNUMB_SPEED_LKT1D(194,1:4) = (/2.266071,1.922383,1.701771,1.544419/) -XMASS_SPEED_LKT1D(194,1:4) = (/3.085353,2.591474,2.279550,2.059459/) - -XNUMB_SPEED_LKT1D(195,1:4) = (/2.273743,1.928638,1.707164,1.549221/) -XMASS_SPEED_LKT1D(195,1:4) = (/3.094414,2.598906,2.285989,2.065213/) - -XNUMB_SPEED_LKT1D(196,1:4) = (/2.281388,1.934872,1.712540,1.554007/) -XMASS_SPEED_LKT1D(196,1:4) = (/3.103445,2.606313,2.292406,2.070949/) - -ELSE - -XNUMB_SPEED_LKT1D(1,1:4) = (/0.012923,0.010176,0.008721,0.007819/) -XMASS_SPEED_LKT1D(1,1:4) = (/0.018036,0.016773,0.016098,0.015674/) - -XNUMB_SPEED_LKT1D(2,1:4) = (/0.013461,0.011087,0.009829,0.009049/) -XMASS_SPEED_LKT1D(2,1:4) = (/0.023476,0.022401,0.021816,0.021441/) - -XNUMB_SPEED_LKT1D(3,1:4) = (/0.014584,0.012500,0.011393,0.010706/) -XMASS_SPEED_LKT1D(3,1:4) = (/0.030187,0.029222,0.028679,0.028317/) - -XNUMB_SPEED_LKT1D(4,1:4) = (/0.016219,0.014360,0.013371,0.012754/) -XMASS_SPEED_LKT1D(4,1:4) = (/0.038072,0.037155,0.036609,0.036224/) - -XNUMB_SPEED_LKT1D(5,1:4) = (/0.018310,0.016629,0.015730,0.015165/) -XMASS_SPEED_LKT1D(5,1:4) = (/0.047064,0.046132,0.045537,0.045090/) - -XNUMB_SPEED_LKT1D(6,1:4) = (/0.020817,0.019276,0.018445,0.017918/) -XMASS_SPEED_LKT1D(6,1:4) = (/0.057103,0.056092,0.055395,0.054841/) - -XNUMB_SPEED_LKT1D(7,1:4) = (/0.023711,0.022279,0.021496,0.020993/) -XMASS_SPEED_LKT1D(7,1:4) = (/0.068133,0.066973,0.066115,0.065403/) - -XNUMB_SPEED_LKT1D(8,1:4) = (/0.026970,0.025618,0.024866,0.024373/) -XMASS_SPEED_LKT1D(8,1:4) = (/0.080101,0.078711,0.077628,0.076702/) - -XNUMB_SPEED_LKT1D(9,1:4) = (/0.030573,0.029277,0.028539,0.028043/) -XMASS_SPEED_LKT1D(9,1:4) = (/0.092951,0.091243,0.089862,0.088661/) - -XNUMB_SPEED_LKT1D(10,1:4) = (/0.034506,0.033242,0.032501,0.031988/) -XMASS_SPEED_LKT1D(10,1:4) = (/0.106627,0.104505,0.102750,0.101209/) - -XNUMB_SPEED_LKT1D(11,1:4) = (/0.038754,0.037498,0.036737,0.036194/) -XMASS_SPEED_LKT1D(11,1:4) = (/0.121072,0.118434,0.116222,0.114275/) - -XNUMB_SPEED_LKT1D(12,1:4) = (/0.043304,0.042033,0.041234,0.040646/) -XMASS_SPEED_LKT1D(12,1:4) = (/0.136230,0.132967,0.130214,0.127791/) - -XNUMB_SPEED_LKT1D(13,1:4) = (/0.048144,0.046834,0.045980,0.045332/) -XMASS_SPEED_LKT1D(13,1:4) = (/0.152045,0.148043,0.144661,0.141694/) - -XNUMB_SPEED_LKT1D(14,1:4) = (/0.053263,0.051889,0.050960,0.050238/) -XMASS_SPEED_LKT1D(14,1:4) = (/0.168461,0.163602,0.159505,0.155926/) - -XNUMB_SPEED_LKT1D(15,1:4) = (/0.058650,0.057188,0.056164,0.055350/) -XMASS_SPEED_LKT1D(15,1:4) = (/0.185425,0.179591,0.174690,0.170431/) - -XNUMB_SPEED_LKT1D(16,1:4) = (/0.064293,0.062716,0.061579,0.060657/) -XMASS_SPEED_LKT1D(16,1:4) = (/0.202884,0.195954,0.190165,0.185160/) - -XNUMB_SPEED_LKT1D(17,1:4) = (/0.070183,0.068465,0.067192,0.066145/) -XMASS_SPEED_LKT1D(17,1:4) = (/0.220788,0.212643,0.205881,0.200068/) - -XNUMB_SPEED_LKT1D(18,1:4) = (/0.076309,0.074421,0.072992,0.071802/) -XMASS_SPEED_LKT1D(18,1:4) = (/0.239089,0.229611,0.221794,0.215114/) - -XNUMB_SPEED_LKT1D(19,1:4) = (/0.082660,0.080575,0.078967,0.077617/) -XMASS_SPEED_LKT1D(19,1:4) = (/0.257743,0.246815,0.237865,0.230261/) - -XNUMB_SPEED_LKT1D(20,1:4) = (/0.089227,0.086915,0.085107,0.083579/) -XMASS_SPEED_LKT1D(20,1:4) = (/0.276705,0.264215,0.254057,0.245475/) - -XNUMB_SPEED_LKT1D(21,1:4) = (/0.095999,0.093431,0.091400,0.089677/) -XMASS_SPEED_LKT1D(21,1:4) = (/0.295936,0.281775,0.270337,0.260729/) - -XNUMB_SPEED_LKT1D(22,1:4) = (/0.102968,0.100113,0.097837,0.095901/) -XMASS_SPEED_LKT1D(22,1:4) = (/0.315398,0.299461,0.286676,0.275995/) - -XNUMB_SPEED_LKT1D(23,1:4) = (/0.110123,0.106952,0.104407,0.102240/) -XMASS_SPEED_LKT1D(23,1:4) = (/0.335056,0.317241,0.303047,0.291251/) - -XNUMB_SPEED_LKT1D(24,1:4) = (/0.117455,0.113937,0.111101,0.108685/) -XMASS_SPEED_LKT1D(24,1:4) = (/0.354877,0.335090,0.319428,0.306477/) - -XNUMB_SPEED_LKT1D(25,1:4) = (/0.124956,0.121059,0.117911,0.115228/) -XMASS_SPEED_LKT1D(25,1:4) = (/0.374832,0.352981,0.335796,0.321654/) - -XNUMB_SPEED_LKT1D(26,1:4) = (/0.132616,0.128310,0.124826,0.121860/) -XMASS_SPEED_LKT1D(26,1:4) = (/0.394892,0.370892,0.352133,0.336769/) - -XNUMB_SPEED_LKT1D(27,1:4) = (/0.140427,0.135680,0.131839,0.128573/) -XMASS_SPEED_LKT1D(27,1:4) = (/0.415033,0.388802,0.368423,0.351807/) - -XNUMB_SPEED_LKT1D(28,1:4) = (/0.148381,0.143163,0.138942,0.135360/) -XMASS_SPEED_LKT1D(28,1:4) = (/0.435230,0.406693,0.384651,0.366757/) - -XNUMB_SPEED_LKT1D(29,1:4) = (/0.156469,0.150749,0.146127,0.142212/) -XMASS_SPEED_LKT1D(29,1:4) = (/0.455462,0.424548,0.400805,0.381609/) - -XNUMB_SPEED_LKT1D(30,1:4) = (/0.164684,0.158432,0.153387,0.149124/) -XMASS_SPEED_LKT1D(30,1:4) = (/0.475710,0.442354,0.416873,0.396356/) - -XNUMB_SPEED_LKT1D(31,1:4) = (/0.173019,0.166204,0.160716,0.156089/) -XMASS_SPEED_LKT1D(31,1:4) = (/0.495955,0.460096,0.432847,0.410989/) - -XNUMB_SPEED_LKT1D(32,1:4) = (/0.181465,0.174058,0.168107,0.163101/) -XMASS_SPEED_LKT1D(32,1:4) = (/0.516182,0.477765,0.448718,0.425503/) - -XNUMB_SPEED_LKT1D(33,1:4) = (/0.190017,0.181988,0.175554,0.170155/) -XMASS_SPEED_LKT1D(33,1:4) = (/0.536376,0.495348,0.464478,0.439893/) - -XNUMB_SPEED_LKT1D(34,1:4) = (/0.198667,0.189987,0.183050,0.177245/) -XMASS_SPEED_LKT1D(34,1:4) = (/0.556524,0.512839,0.480122,0.454155/) - -XNUMB_SPEED_LKT1D(35,1:4) = (/0.207409,0.198050,0.190592,0.184366/) -XMASS_SPEED_LKT1D(35,1:4) = (/0.576614,0.530228,0.495645,0.468287/) - -XNUMB_SPEED_LKT1D(36,1:4) = (/0.216236,0.206171,0.198173,0.191513/) -XMASS_SPEED_LKT1D(36,1:4) = (/0.596634,0.547509,0.511043,0.482285/) - -XNUMB_SPEED_LKT1D(37,1:4) = (/0.225143,0.214345,0.205789,0.198683/) -XMASS_SPEED_LKT1D(37,1:4) = (/0.616576,0.564676,0.526312,0.496148/) - -XNUMB_SPEED_LKT1D(38,1:4) = (/0.234125,0.222565,0.213435,0.205871/) -XMASS_SPEED_LKT1D(38,1:4) = (/0.636432,0.581725,0.541450,0.509875/) - -XNUMB_SPEED_LKT1D(39,1:4) = (/0.243175,0.230829,0.221107,0.213073/) -XMASS_SPEED_LKT1D(39,1:4) = (/0.656192,0.598651,0.556454,0.523465/) - -XNUMB_SPEED_LKT1D(40,1:4) = (/0.252288,0.239130,0.228801,0.220286/) -XMASS_SPEED_LKT1D(40,1:4) = (/0.675851,0.615450,0.571323,0.536917/) - -XNUMB_SPEED_LKT1D(41,1:4) = (/0.261459,0.247465,0.236513,0.227507/) -XMASS_SPEED_LKT1D(41,1:4) = (/0.695402,0.632120,0.586055,0.550232/) - -XNUMB_SPEED_LKT1D(42,1:4) = (/0.270684,0.255830,0.244240,0.234732/) -XMASS_SPEED_LKT1D(42,1:4) = (/0.714841,0.648658,0.600651,0.563410/) - -XNUMB_SPEED_LKT1D(43,1:4) = (/0.279958,0.264220,0.251977,0.241958/) -XMASS_SPEED_LKT1D(43,1:4) = (/0.734162,0.665062,0.615109,0.576451/) - -XNUMB_SPEED_LKT1D(44,1:4) = (/0.289277,0.272632,0.259723,0.249184/) -XMASS_SPEED_LKT1D(44,1:4) = (/0.753363,0.681331,0.629429,0.589356/) - -XNUMB_SPEED_LKT1D(45,1:4) = (/0.298636,0.281063,0.267475,0.256405/) -XMASS_SPEED_LKT1D(45,1:4) = (/0.772438,0.697464,0.643612,0.602127/) - -XNUMB_SPEED_LKT1D(46,1:4) = (/0.308031,0.289509,0.275228,0.263621/) -XMASS_SPEED_LKT1D(46,1:4) = (/0.791386,0.713460,0.657659,0.614765/) - -XNUMB_SPEED_LKT1D(47,1:4) = (/0.317459,0.297967,0.282982,0.270828/) -XMASS_SPEED_LKT1D(47,1:4) = (/0.810204,0.729318,0.671569,0.627270/) - -XNUMB_SPEED_LKT1D(48,1:4) = (/0.326916,0.306435,0.290733,0.278026/) -XMASS_SPEED_LKT1D(48,1:4) = (/0.828890,0.745039,0.685344,0.639645/) - -XNUMB_SPEED_LKT1D(49,1:4) = (/0.336399,0.314908,0.298479,0.285211/) -XMASS_SPEED_LKT1D(49,1:4) = (/0.847442,0.760622,0.698986,0.651891/) - -XNUMB_SPEED_LKT1D(50,1:4) = (/0.345905,0.323386,0.306218,0.292382/) -XMASS_SPEED_LKT1D(50,1:4) = (/0.865859,0.776069,0.712494,0.664010/) - -XNUMB_SPEED_LKT1D(51,1:4) = (/0.355429,0.331865,0.313949,0.299539/) -XMASS_SPEED_LKT1D(51,1:4) = (/0.884139,0.791379,0.725871,0.676004/) - -XNUMB_SPEED_LKT1D(52,1:4) = (/0.364970,0.340344,0.321668,0.306678/) -XMASS_SPEED_LKT1D(52,1:4) = (/0.902284,0.806553,0.739118,0.687873/) - -XNUMB_SPEED_LKT1D(53,1:4) = (/0.374525,0.348819,0.329376,0.313799/) -XMASS_SPEED_LKT1D(53,1:4) = (/0.920290,0.821592,0.752236,0.699621/) - -XNUMB_SPEED_LKT1D(54,1:4) = (/0.384090,0.357289,0.337069,0.320900/) -XMASS_SPEED_LKT1D(54,1:4) = (/0.938160,0.836498,0.765227,0.711250/) - -XNUMB_SPEED_LKT1D(55,1:4) = (/0.393664,0.365752,0.344747,0.327981/) -XMASS_SPEED_LKT1D(55,1:4) = (/0.955892,0.851270,0.778093,0.722760/) - -XNUMB_SPEED_LKT1D(56,1:4) = (/0.403243,0.374207,0.352408,0.335041/) -XMASS_SPEED_LKT1D(56,1:4) = (/0.973486,0.865911,0.790835,0.734154/) - -XNUMB_SPEED_LKT1D(57,1:4) = (/0.412827,0.382651,0.360051,0.342077/) -XMASS_SPEED_LKT1D(57,1:4) = (/0.990944,0.880422,0.803455,0.745434/) - -XNUMB_SPEED_LKT1D(58,1:4) = (/0.422411,0.391083,0.367675,0.349091/) -XMASS_SPEED_LKT1D(58,1:4) = (/1.008265,0.894804,0.815955,0.756602/) - -XNUMB_SPEED_LKT1D(59,1:4) = (/0.431996,0.399502,0.375279,0.356079/) -XMASS_SPEED_LKT1D(59,1:4) = (/1.025450,0.909058,0.828337,0.767660/) - -XNUMB_SPEED_LKT1D(60,1:4) = (/0.441578,0.407905,0.382861,0.363043/) -XMASS_SPEED_LKT1D(60,1:4) = (/1.042500,0.923186,0.840602,0.778610/) - -XNUMB_SPEED_LKT1D(61,1:4) = (/0.451155,0.416293,0.390420,0.369981/) -XMASS_SPEED_LKT1D(61,1:4) = (/1.059416,0.937190,0.852753,0.789453/) - -XNUMB_SPEED_LKT1D(62,1:4) = (/0.460727,0.424663,0.397957,0.376892/) -XMASS_SPEED_LKT1D(62,1:4) = (/1.076198,0.951071,0.864790,0.800192/) - -XNUMB_SPEED_LKT1D(63,1:4) = (/0.470291,0.433014,0.405469,0.383776/) -XMASS_SPEED_LKT1D(63,1:4) = (/1.092848,0.964831,0.876717,0.810828/) - -XNUMB_SPEED_LKT1D(64,1:4) = (/0.479845,0.441346,0.412957,0.390633/) -XMASS_SPEED_LKT1D(64,1:4) = (/1.109366,0.978471,0.888534,0.821364/) - -XNUMB_SPEED_LKT1D(65,1:4) = (/0.489389,0.449658,0.420420,0.397462/) -XMASS_SPEED_LKT1D(65,1:4) = (/1.125755,0.991992,0.900243,0.831801/) - -XNUMB_SPEED_LKT1D(66,1:4) = (/0.498921,0.457948,0.427856,0.404263/) -XMASS_SPEED_LKT1D(66,1:4) = (/1.142015,1.005398,0.911847,0.842140/) - -XNUMB_SPEED_LKT1D(67,1:4) = (/0.508440,0.466215,0.435266,0.411034/) -XMASS_SPEED_LKT1D(67,1:4) = (/1.158147,1.018689,0.923347,0.852385/) - -XNUMB_SPEED_LKT1D(68,1:4) = (/0.517944,0.474460,0.442648,0.417777/) -XMASS_SPEED_LKT1D(68,1:4) = (/1.174153,1.031866,0.934744,0.862536/) - -XNUMB_SPEED_LKT1D(69,1:4) = (/0.527432,0.482681,0.450004,0.424490/) -XMASS_SPEED_LKT1D(69,1:4) = (/1.190034,1.044933,0.946041,0.872595/) - -XNUMB_SPEED_LKT1D(70,1:4) = (/0.536903,0.490877,0.457331,0.431174/) -XMASS_SPEED_LKT1D(70,1:4) = (/1.205791,1.057889,0.957240,0.882565/) - -XNUMB_SPEED_LKT1D(71,1:4) = (/0.546356,0.499047,0.464630,0.437828/) -XMASS_SPEED_LKT1D(71,1:4) = (/1.221426,1.070738,0.968341,0.892445/) - -XNUMB_SPEED_LKT1D(72,1:4) = (/0.555790,0.507193,0.471900,0.444452/) -XMASS_SPEED_LKT1D(72,1:4) = (/1.236941,1.083480,0.979347,0.902240/) - -XNUMB_SPEED_LKT1D(73,1:4) = (/0.565205,0.515311,0.479141,0.451046/) -XMASS_SPEED_LKT1D(73,1:4) = (/1.252336,1.096117,0.990259,0.911949/) - -XNUMB_SPEED_LKT1D(74,1:4) = (/0.574599,0.523403,0.486353,0.457610/) -XMASS_SPEED_LKT1D(74,1:4) = (/1.267613,1.108651,1.001079,0.921574/) - -XNUMB_SPEED_LKT1D(75,1:4) = (/0.583971,0.531468,0.493535,0.464143/) -XMASS_SPEED_LKT1D(75,1:4) = (/1.282774,1.121083,1.011808,0.931117/) - -XNUMB_SPEED_LKT1D(76,1:4) = (/0.593321,0.539505,0.500688,0.470646/) -XMASS_SPEED_LKT1D(76,1:4) = (/1.297820,1.133415,1.022448,0.940580/) - -XNUMB_SPEED_LKT1D(77,1:4) = (/0.602648,0.547514,0.507811,0.477119/) -XMASS_SPEED_LKT1D(77,1:4) = (/1.312753,1.145648,1.033001,0.949964/) - -XNUMB_SPEED_LKT1D(78,1:4) = (/0.611952,0.555495,0.514903,0.483560/) -XMASS_SPEED_LKT1D(78,1:4) = (/1.327573,1.157785,1.043468,0.959271/) - -XNUMB_SPEED_LKT1D(79,1:4) = (/0.621231,0.563447,0.521966,0.489972/) -XMASS_SPEED_LKT1D(79,1:4) = (/1.342283,1.169826,1.053851,0.968501/) - -XNUMB_SPEED_LKT1D(80,1:4) = (/0.630486,0.571370,0.528998,0.496353/) -XMASS_SPEED_LKT1D(80,1:4) = (/1.356884,1.181774,1.064150,0.977656/) - -XNUMB_SPEED_LKT1D(81,1:4) = (/0.639715,0.579264,0.536000,0.502703/) -XMASS_SPEED_LKT1D(81,1:4) = (/1.371378,1.193628,1.074368,0.986738/) - -XNUMB_SPEED_LKT1D(82,1:4) = (/0.648918,0.587128,0.542971,0.509023/) -XMASS_SPEED_LKT1D(82,1:4) = (/1.385765,1.205392,1.084505,0.995748/) - -XNUMB_SPEED_LKT1D(83,1:4) = (/0.658095,0.594963,0.549912,0.515313/) -XMASS_SPEED_LKT1D(83,1:4) = (/1.400047,1.217066,1.094564,1.004687/) - -XNUMB_SPEED_LKT1D(84,1:4) = (/0.667245,0.602768,0.556823,0.521572/) -XMASS_SPEED_LKT1D(84,1:4) = (/1.414226,1.228653,1.104546,1.013556/) - -XNUMB_SPEED_LKT1D(85,1:4) = (/0.676368,0.610543,0.563703,0.527802/) -XMASS_SPEED_LKT1D(85,1:4) = (/1.428304,1.240152,1.114451,1.022357/) - -XNUMB_SPEED_LKT1D(86,1:4) = (/0.685464,0.618287,0.570552,0.534001/) -XMASS_SPEED_LKT1D(86,1:4) = (/1.442280,1.251566,1.124281,1.031092/) - -XNUMB_SPEED_LKT1D(87,1:4) = (/0.694531,0.626002,0.577371,0.540170/) -XMASS_SPEED_LKT1D(87,1:4) = (/1.456158,1.262896,1.134038,1.039760/) - -XNUMB_SPEED_LKT1D(88,1:4) = (/0.703570,0.633686,0.584159,0.546309/) -XMASS_SPEED_LKT1D(88,1:4) = (/1.469938,1.274143,1.143723,1.048363/) - -XNUMB_SPEED_LKT1D(89,1:4) = (/0.712581,0.641340,0.590918,0.552418/) -XMASS_SPEED_LKT1D(89,1:4) = (/1.483622,1.285309,1.153336,1.056903/) - -XNUMB_SPEED_LKT1D(90,1:4) = (/0.721563,0.648964,0.597645,0.558498/) -XMASS_SPEED_LKT1D(90,1:4) = (/1.497210,1.296395,1.162879,1.065381/) - -XNUMB_SPEED_LKT1D(91,1:4) = (/0.730516,0.656557,0.604343,0.564548/) -XMASS_SPEED_LKT1D(91,1:4) = (/1.510705,1.307402,1.172354,1.073797/) - -XNUMB_SPEED_LKT1D(92,1:4) = (/0.739440,0.664119,0.611010,0.570569/) -XMASS_SPEED_LKT1D(92,1:4) = (/1.524108,1.318331,1.181761,1.082152/) - -XNUMB_SPEED_LKT1D(93,1:4) = (/0.748334,0.671651,0.617648,0.576560/) -XMASS_SPEED_LKT1D(93,1:4) = (/1.537419,1.329184,1.191101,1.090449/) - -XNUMB_SPEED_LKT1D(94,1:4) = (/0.757199,0.679153,0.624255,0.582523/) -XMASS_SPEED_LKT1D(94,1:4) = (/1.550640,1.339962,1.200377,1.098687/) - -XNUMB_SPEED_LKT1D(95,1:4) = (/0.766034,0.686624,0.630833,0.588456/) -XMASS_SPEED_LKT1D(95,1:4) = (/1.563773,1.350665,1.209587,1.106867/) - -XNUMB_SPEED_LKT1D(96,1:4) = (/0.774839,0.694064,0.637380,0.594361/) -XMASS_SPEED_LKT1D(96,1:4) = (/1.576819,1.361296,1.218735,1.114992/) - -XNUMB_SPEED_LKT1D(97,1:4) = (/0.783614,0.701474,0.643898,0.600238/) -XMASS_SPEED_LKT1D(97,1:4) = (/1.589779,1.371855,1.227820,1.123060/) - -XNUMB_SPEED_LKT1D(98,1:4) = (/0.792358,0.708854,0.650387,0.606085/) -XMASS_SPEED_LKT1D(98,1:4) = (/1.602653,1.382343,1.236844,1.131075/) - -XNUMB_SPEED_LKT1D(99,1:4) = (/0.801073,0.716204,0.656846,0.611905/) -XMASS_SPEED_LKT1D(99,1:4) = (/1.615444,1.392761,1.245807,1.139036/) - -XNUMB_SPEED_LKT1D(100,1:4) = (/0.809757,0.723523,0.663276,0.617697/) -XMASS_SPEED_LKT1D(100,1:4) = (/1.628153,1.403111,1.254711,1.146944/) - -XNUMB_SPEED_LKT1D(101,1:4) = (/0.818411,0.730812,0.669677,0.623461/) -XMASS_SPEED_LKT1D(101,1:4) = (/1.640780,1.413394,1.263557,1.154800/) - -XNUMB_SPEED_LKT1D(102,1:4) = (/0.827035,0.738071,0.676049,0.629197/) -XMASS_SPEED_LKT1D(102,1:4) = (/1.653326,1.423610,1.272346,1.162605/) - -XNUMB_SPEED_LKT1D(103,1:4) = (/0.835628,0.745300,0.682393,0.634906/) -XMASS_SPEED_LKT1D(103,1:4) = (/1.665794,1.433760,1.281077,1.170360/) - -XNUMB_SPEED_LKT1D(104,1:4) = (/0.844190,0.752499,0.688707,0.640588/) -XMASS_SPEED_LKT1D(104,1:4) = (/1.678183,1.443846,1.289753,1.178066/) - -XNUMB_SPEED_LKT1D(105,1:4) = (/0.852722,0.759668,0.694994,0.646243/) -XMASS_SPEED_LKT1D(105,1:4) = (/1.690496,1.453868,1.298375,1.185723/) - -XNUMB_SPEED_LKT1D(106,1:4) = (/0.861224,0.766808,0.701252,0.651870/) -XMASS_SPEED_LKT1D(106,1:4) = (/1.702733,1.463828,1.306942,1.193332/) - -XNUMB_SPEED_LKT1D(107,1:4) = (/0.869695,0.773918,0.707481,0.657472/) -XMASS_SPEED_LKT1D(107,1:4) = (/1.714894,1.473726,1.315456,1.200894/) - -XNUMB_SPEED_LKT1D(108,1:4) = (/0.878135,0.780999,0.713683,0.663046/) -XMASS_SPEED_LKT1D(108,1:4) = (/1.726982,1.483564,1.323918,1.208409/) - -XNUMB_SPEED_LKT1D(109,1:4) = (/0.886545,0.788050,0.719858,0.668595/) -XMASS_SPEED_LKT1D(109,1:4) = (/1.738997,1.493341,1.332329,1.215879/) - -XNUMB_SPEED_LKT1D(110,1:4) = (/0.894925,0.795072,0.726004,0.674117/) -XMASS_SPEED_LKT1D(110,1:4) = (/1.750941,1.503059,1.340688,1.223305/) - -XNUMB_SPEED_LKT1D(111,1:4) = (/0.903274,0.802066,0.732124,0.679614/) -XMASS_SPEED_LKT1D(111,1:4) = (/1.762813,1.512720,1.348998,1.230685/) - -XNUMB_SPEED_LKT1D(112,1:4) = (/0.911593,0.809030,0.738216,0.685085/) -XMASS_SPEED_LKT1D(112,1:4) = (/1.774616,1.522323,1.357258,1.238023/) - -XNUMB_SPEED_LKT1D(113,1:4) = (/0.919882,0.815966,0.744281,0.690531/) -XMASS_SPEED_LKT1D(113,1:4) = (/1.786349,1.531869,1.365470,1.245317/) - -XNUMB_SPEED_LKT1D(114,1:4) = (/0.928140,0.822873,0.750319,0.695951/) -XMASS_SPEED_LKT1D(114,1:4) = (/1.798015,1.541360,1.373634,1.252569/) - -XNUMB_SPEED_LKT1D(115,1:4) = (/0.936369,0.829751,0.756331,0.701346/) -XMASS_SPEED_LKT1D(115,1:4) = (/1.809613,1.550796,1.381751,1.259780/) - -XNUMB_SPEED_LKT1D(116,1:4) = (/0.944567,0.836601,0.762316,0.706717/) -XMASS_SPEED_LKT1D(116,1:4) = (/1.821145,1.560178,1.389821,1.266949/) - -XNUMB_SPEED_LKT1D(117,1:4) = (/0.952735,0.843423,0.768275,0.712063/) -XMASS_SPEED_LKT1D(117,1:4) = (/1.832612,1.569506,1.397846,1.274078/) - -XNUMB_SPEED_LKT1D(118,1:4) = (/0.960874,0.850218,0.774208,0.717385/) -XMASS_SPEED_LKT1D(118,1:4) = (/1.844014,1.578782,1.405825,1.281167/) - -XNUMB_SPEED_LKT1D(119,1:4) = (/0.968982,0.856984,0.780115,0.722682/) -XMASS_SPEED_LKT1D(119,1:4) = (/1.855353,1.588006,1.413760,1.288217/) - -XNUMB_SPEED_LKT1D(120,1:4) = (/0.977061,0.863722,0.785996,0.727955/) -XMASS_SPEED_LKT1D(120,1:4) = (/1.866629,1.597178,1.421652,1.295229/) - -XNUMB_SPEED_LKT1D(121,1:4) = (/0.985111,0.870434,0.791852,0.733205/) -XMASS_SPEED_LKT1D(121,1:4) = (/1.877843,1.606301,1.429500,1.302202/) - -XNUMB_SPEED_LKT1D(122,1:4) = (/0.993131,0.877117,0.797682,0.738431/) -XMASS_SPEED_LKT1D(122,1:4) = (/1.888996,1.615373,1.437305,1.309137/) - -XNUMB_SPEED_LKT1D(123,1:4) = (/1.001121,0.883774,0.803487,0.743633/) -XMASS_SPEED_LKT1D(123,1:4) = (/1.900088,1.624397,1.445069,1.316036/) - -XNUMB_SPEED_LKT1D(124,1:4) = (/1.009083,0.890404,0.809268,0.748812/) -XMASS_SPEED_LKT1D(124,1:4) = (/1.911121,1.633372,1.452791,1.322898/) - -XNUMB_SPEED_LKT1D(125,1:4) = (/1.017015,0.897007,0.815023,0.753969/) -XMASS_SPEED_LKT1D(125,1:4) = (/1.922095,1.642299,1.460472,1.329723/) - -XNUMB_SPEED_LKT1D(126,1:4) = (/1.024918,0.903583,0.820754,0.759102/) -XMASS_SPEED_LKT1D(126,1:4) = (/1.933011,1.651179,1.468113,1.336514/) - -XNUMB_SPEED_LKT1D(127,1:4) = (/1.032792,0.910133,0.826461,0.764213/) -XMASS_SPEED_LKT1D(127,1:4) = (/1.943870,1.660012,1.475715,1.343269/) - -XNUMB_SPEED_LKT1D(128,1:4) = (/1.040638,0.916656,0.832143,0.769302/) -XMASS_SPEED_LKT1D(128,1:4) = (/1.954672,1.668800,1.483277,1.349990/) - -XNUMB_SPEED_LKT1D(129,1:4) = (/1.048455,0.923153,0.837802,0.774368/) -XMASS_SPEED_LKT1D(129,1:4) = (/1.965418,1.677543,1.490800,1.356677/) - -XNUMB_SPEED_LKT1D(130,1:4) = (/1.056243,0.929625,0.843437,0.779412/) -XMASS_SPEED_LKT1D(130,1:4) = (/1.976110,1.686240,1.498285,1.363330/) - -XNUMB_SPEED_LKT1D(131,1:4) = (/1.064003,0.936070,0.849048,0.784434/) -XMASS_SPEED_LKT1D(131,1:4) = (/1.986746,1.694894,1.505733,1.369950/) - -XNUMB_SPEED_LKT1D(132,1:4) = (/1.071735,0.942490,0.854635,0.789435/) -XMASS_SPEED_LKT1D(132,1:4) = (/1.997329,1.703504,1.513143,1.376537/) - -XNUMB_SPEED_LKT1D(133,1:4) = (/1.079438,0.948885,0.860199,0.794414/) -XMASS_SPEED_LKT1D(133,1:4) = (/2.007859,1.712071,1.520517,1.383092/) - -XNUMB_SPEED_LKT1D(134,1:4) = (/1.087114,0.955254,0.865741,0.799372/) -XMASS_SPEED_LKT1D(134,1:4) = (/2.018336,1.720596,1.527855,1.389615/) - -XNUMB_SPEED_LKT1D(135,1:4) = (/1.094762,0.961598,0.871259,0.804309/) -XMASS_SPEED_LKT1D(135,1:4) = (/2.028761,1.729079,1.535157,1.396106/) - -XNUMB_SPEED_LKT1D(136,1:4) = (/1.102382,0.967917,0.876755,0.809225/) -XMASS_SPEED_LKT1D(136,1:4) = (/2.039136,1.737520,1.542423,1.402567/) - -XNUMB_SPEED_LKT1D(137,1:4) = (/1.109975,0.974212,0.882228,0.814120/) -XMASS_SPEED_LKT1D(137,1:4) = (/2.049459,1.745921,1.549655,1.408996/) - -XNUMB_SPEED_LKT1D(138,1:4) = (/1.117540,0.980482,0.887679,0.818994/) -XMASS_SPEED_LKT1D(138,1:4) = (/2.059733,1.754281,1.556852,1.415396/) - -XNUMB_SPEED_LKT1D(139,1:4) = (/1.125079,0.986727,0.893107,0.823848/) -XMASS_SPEED_LKT1D(139,1:4) = (/2.069957,1.762601,1.564016,1.421766/) - -XNUMB_SPEED_LKT1D(140,1:4) = (/1.132590,0.992948,0.898514,0.828682/) -XMASS_SPEED_LKT1D(140,1:4) = (/2.080133,1.770882,1.571146,1.428106/) - -XNUMB_SPEED_LKT1D(141,1:4) = (/1.140074,0.999145,0.903899,0.833496/) -XMASS_SPEED_LKT1D(141,1:4) = (/2.090260,1.779125,1.578243,1.434417/) - -XNUMB_SPEED_LKT1D(142,1:4) = (/1.147531,1.005319,0.909262,0.838290/) -XMASS_SPEED_LKT1D(142,1:4) = (/2.100340,1.787329,1.585307,1.440699/) - -XNUMB_SPEED_LKT1D(143,1:4) = (/1.154962,1.011468,0.914604,0.843064/) -XMASS_SPEED_LKT1D(143,1:4) = (/2.110373,1.795495,1.592339,1.446953/) - -XNUMB_SPEED_LKT1D(144,1:4) = (/1.162366,1.017594,0.919924,0.847819/) -XMASS_SPEED_LKT1D(144,1:4) = (/2.120359,1.803623,1.599339,1.453179/) - -XNUMB_SPEED_LKT1D(145,1:4) = (/1.169744,1.023697,0.925223,0.852555/) -XMASS_SPEED_LKT1D(145,1:4) = (/2.130300,1.811715,1.606307,1.459377/) - -XNUMB_SPEED_LKT1D(146,1:4) = (/1.177096,1.029777,0.930502,0.857271/) -XMASS_SPEED_LKT1D(146,1:4) = (/2.140195,1.819770,1.613245,1.465548/) - -XNUMB_SPEED_LKT1D(147,1:4) = (/1.184422,1.035833,0.935759,0.861968/) -XMASS_SPEED_LKT1D(147,1:4) = (/2.150045,1.827789,1.620152,1.471691/) - -XNUMB_SPEED_LKT1D(148,1:4) = (/1.191722,1.041867,0.940996,0.866647/) -XMASS_SPEED_LKT1D(148,1:4) = (/2.159851,1.835772,1.627028,1.477808/) - -XNUMB_SPEED_LKT1D(149,1:4) = (/1.198996,1.047877,0.946213,0.871306/) -XMASS_SPEED_LKT1D(149,1:4) = (/2.169612,1.843720,1.633874,1.483899/) - -XNUMB_SPEED_LKT1D(150,1:4) = (/1.206245,1.053866,0.951409,0.875947/) -XMASS_SPEED_LKT1D(150,1:4) = (/2.179331,1.851633,1.640691,1.489964/) - -XNUMB_SPEED_LKT1D(151,1:4) = (/1.213468,1.059832,0.956585,0.880570/) -XMASS_SPEED_LKT1D(151,1:4) = (/2.189007,1.859512,1.647479,1.496002/) - -XNUMB_SPEED_LKT1D(152,1:4) = (/1.220666,1.065775,0.961741,0.885175/) -XMASS_SPEED_LKT1D(152,1:4) = (/2.198640,1.867357,1.654237,1.502016/) - -XNUMB_SPEED_LKT1D(153,1:4) = (/1.227839,1.071697,0.966877,0.889761/) -XMASS_SPEED_LKT1D(153,1:4) = (/2.208232,1.875168,1.660967,1.508004/) - -XNUMB_SPEED_LKT1D(154,1:4) = (/1.234987,1.077597,0.971994,0.894330/) -XMASS_SPEED_LKT1D(154,1:4) = (/2.217782,1.882946,1.667668,1.513967/) - -XNUMB_SPEED_LKT1D(155,1:4) = (/1.242110,1.083475,0.977091,0.898881/) -XMASS_SPEED_LKT1D(155,1:4) = (/2.227291,1.890690,1.674342,1.519906/) - -XNUMB_SPEED_LKT1D(156,1:4) = (/1.249209,1.089331,0.982169,0.903414/) -XMASS_SPEED_LKT1D(156,1:4) = (/2.236759,1.898403,1.680988,1.525820/) - -XNUMB_SPEED_LKT1D(157,1:4) = (/1.256283,1.095166,0.987228,0.907930/) -XMASS_SPEED_LKT1D(157,1:4) = (/2.246188,1.906083,1.687607,1.531710/) - -XNUMB_SPEED_LKT1D(158,1:4) = (/1.263333,1.100980,0.992267,0.912428/) -XMASS_SPEED_LKT1D(158,1:4) = (/2.255577,1.913731,1.694198,1.537577/) - -XNUMB_SPEED_LKT1D(159,1:4) = (/1.270359,1.106773,0.997288,0.916909/) -XMASS_SPEED_LKT1D(159,1:4) = (/2.264927,1.921348,1.700763,1.543420/) - -XNUMB_SPEED_LKT1D(160,1:4) = (/1.277360,1.112544,1.002290,0.921374/) -XMASS_SPEED_LKT1D(160,1:4) = (/2.274238,1.928934,1.707301,1.549240/) - -XNUMB_SPEED_LKT1D(161,1:4) = (/1.284338,1.118295,1.007274,0.925821/) -XMASS_SPEED_LKT1D(161,1:4) = (/2.283510,1.936489,1.713814,1.555036/) - -XNUMB_SPEED_LKT1D(162,1:4) = (/1.291292,1.124026,1.012239,0.930252/) -XMASS_SPEED_LKT1D(162,1:4) = (/2.292745,1.944014,1.720300,1.560810/) - -XNUMB_SPEED_LKT1D(163,1:4) = (/1.298222,1.129736,1.017186,0.934666/) -XMASS_SPEED_LKT1D(163,1:4) = (/2.301942,1.951509,1.726761,1.566562/) - -XNUMB_SPEED_LKT1D(164,1:4) = (/1.305129,1.135425,1.022115,0.939064/) -XMASS_SPEED_LKT1D(164,1:4) = (/2.311102,1.958974,1.733197,1.572291/) - -XNUMB_SPEED_LKT1D(165,1:4) = (/1.312013,1.141094,1.027026,0.943445/) -XMASS_SPEED_LKT1D(165,1:4) = (/2.320226,1.966409,1.739607,1.577999/) - -XNUMB_SPEED_LKT1D(166,1:4) = (/1.318874,1.146744,1.031919,0.947810/) -XMASS_SPEED_LKT1D(166,1:4) = (/2.329313,1.973815,1.745993,1.583684/) - -XNUMB_SPEED_LKT1D(167,1:4) = (/1.325711,1.152373,1.036794,0.952159/) -XMASS_SPEED_LKT1D(167,1:4) = (/2.338364,1.981193,1.752354,1.589348/) - -XNUMB_SPEED_LKT1D(168,1:4) = (/1.332526,1.157983,1.041652,0.956493/) -XMASS_SPEED_LKT1D(168,1:4) = (/2.347379,1.988542,1.758692,1.594991/) - -XNUMB_SPEED_LKT1D(169,1:4) = (/1.339318,1.163573,1.046492,0.960810/) -XMASS_SPEED_LKT1D(169,1:4) = (/2.356360,1.995863,1.765005,1.600613/) - -XNUMB_SPEED_LKT1D(170,1:4) = (/1.346088,1.169143,1.051315,0.965112/) -XMASS_SPEED_LKT1D(170,1:4) = (/2.365305,2.003155,1.771294,1.606214/) - -XNUMB_SPEED_LKT1D(171,1:4) = (/1.352835,1.174695,1.056121,0.969398/) -XMASS_SPEED_LKT1D(171,1:4) = (/2.374216,2.010421,1.777560,1.611794/) - -XNUMB_SPEED_LKT1D(172,1:4) = (/1.359560,1.180227,1.060910,0.973669/) -XMASS_SPEED_LKT1D(172,1:4) = (/2.383093,2.017658,1.783803,1.617354/) - -XNUMB_SPEED_LKT1D(173,1:4) = (/1.366263,1.185740,1.065682,0.977925/) -XMASS_SPEED_LKT1D(173,1:4) = (/2.391936,2.024869,1.790023,1.622893/) - -XNUMB_SPEED_LKT1D(174,1:4) = (/1.372943,1.191234,1.070437,0.982166/) -XMASS_SPEED_LKT1D(174,1:4) = (/2.400745,2.032053,1.796220,1.628413/) - -XNUMB_SPEED_LKT1D(175,1:4) = (/1.379602,1.196710,1.075176,0.986391/) -XMASS_SPEED_LKT1D(175,1:4) = (/2.409522,2.039211,1.802394,1.633912/) - -XNUMB_SPEED_LKT1D(176,1:4) = (/1.386240,1.202167,1.079898,0.990602/) -XMASS_SPEED_LKT1D(176,1:4) = (/2.418265,2.046342,1.808546,1.639393/) - -XNUMB_SPEED_LKT1D(177,1:4) = (/1.392856,1.207605,1.084604,0.994798/) -XMASS_SPEED_LKT1D(177,1:4) = (/2.426976,2.053447,1.814676,1.644853/) - -XNUMB_SPEED_LKT1D(178,1:4) = (/1.399450,1.213025,1.089294,0.998979/) -XMASS_SPEED_LKT1D(178,1:4) = (/2.435655,2.060527,1.820784,1.650295/) - -XNUMB_SPEED_LKT1D(179,1:4) = (/1.406023,1.218427,1.093968,1.003146/) -XMASS_SPEED_LKT1D(179,1:4) = (/2.444302,2.067581,1.826871,1.655717/) - -XNUMB_SPEED_LKT1D(180,1:4) = (/1.412575,1.223811,1.098625,1.007298/) -XMASS_SPEED_LKT1D(180,1:4) = (/2.452918,2.074610,1.832936,1.661121/) - -XNUMB_SPEED_LKT1D(181,1:4) = (/1.419107,1.229177,1.103267,1.011437/) -XMASS_SPEED_LKT1D(181,1:4) = (/2.461502,2.081613,1.838980,1.666506/) - -XNUMB_SPEED_LKT1D(182,1:4) = (/1.425617,1.234525,1.107893,1.015560/) -XMASS_SPEED_LKT1D(182,1:4) = (/2.470056,2.088592,1.845003,1.671872/) - -XNUMB_SPEED_LKT1D(183,1:4) = (/1.432106,1.239856,1.112504,1.019670/) -XMASS_SPEED_LKT1D(183,1:4) = (/2.478579,2.095547,1.851005,1.677220/) - -XNUMB_SPEED_LKT1D(184,1:4) = (/1.438575,1.245168,1.117099,1.023766/) -XMASS_SPEED_LKT1D(184,1:4) = (/2.487071,2.102477,1.856986,1.682550/) - -XNUMB_SPEED_LKT1D(185,1:4) = (/1.445024,1.250464,1.121678,1.027848/) -XMASS_SPEED_LKT1D(185,1:4) = (/2.495533,2.109383,1.862948,1.687863/) - -XNUMB_SPEED_LKT1D(186,1:4) = (/1.451452,1.255742,1.126243,1.031917/) -XMASS_SPEED_LKT1D(186,1:4) = (/2.503966,2.116266,1.868888,1.693157/) - -XNUMB_SPEED_LKT1D(187,1:4) = (/1.457860,1.261003,1.130792,1.035971/) -XMASS_SPEED_LKT1D(187,1:4) = (/2.512369,2.123125,1.874809,1.698433/) - -XNUMB_SPEED_LKT1D(188,1:4) = (/1.464248,1.266247,1.135327,1.040013/) -XMASS_SPEED_LKT1D(188,1:4) = (/2.520743,2.129960,1.880710,1.703693/) - -XNUMB_SPEED_LKT1D(189,1:4) = (/1.470616,1.271474,1.139846,1.044041/) -XMASS_SPEED_LKT1D(189,1:4) = (/2.529088,2.136772,1.886591,1.708934/) - -XNUMB_SPEED_LKT1D(190,1:4) = (/1.476965,1.276684,1.144351,1.048055/) -XMASS_SPEED_LKT1D(190,1:4) = (/2.537404,2.143562,1.892453,1.714159/) - -XNUMB_SPEED_LKT1D(191,1:4) = (/1.483293,1.281878,1.148841,1.052056/) -XMASS_SPEED_LKT1D(191,1:4) = (/2.545692,2.150328,1.898295,1.719367/) - -XNUMB_SPEED_LKT1D(192,1:4) = (/1.489603,1.287055,1.153316,1.056045/) -XMASS_SPEED_LKT1D(192,1:4) = (/2.553951,2.157072,1.904119,1.724558/) - -XNUMB_SPEED_LKT1D(193,1:4) = (/1.495892,1.292215,1.157777,1.060020/) -XMASS_SPEED_LKT1D(193,1:4) = (/2.562183,2.163794,1.909923,1.729732/) - -XNUMB_SPEED_LKT1D(194,1:4) = (/1.502163,1.297360,1.162224,1.063982/) -XMASS_SPEED_LKT1D(194,1:4) = (/2.570387,2.170493,1.915708,1.734889/) - -XNUMB_SPEED_LKT1D(195,1:4) = (/1.508414,1.302488,1.166656,1.067932/) -XMASS_SPEED_LKT1D(195,1:4) = (/2.578563,2.177171,1.921475,1.740031/) - -XNUMB_SPEED_LKT1D(196,1:4) = (/1.514647,1.307599,1.171075,1.071869/) -XMASS_SPEED_LKT1D(196,1:4) = (/2.586713,2.183826,1.927223,1.745156/) - -ENDIF - -IF (LHOOK) CALL DR_HOOK('BLOWSNW_SEDIM_LKT1D_SET',0,ZHOOK_HANDLE) - -END SUBROUTINE BLOWSNW_SEDIM_LKT1D_SET - -END MODULE MODE_BLOWSNW_SEDIM_LKT1D diff --git a/src/SURFEX/mode_blowsnw_surf.f90 b/src/SURFEX/mode_blowsnw_surf.f90 deleted file mode 100644 index 996b5b97c..000000000 --- a/src/SURFEX/mode_blowsnw_surf.f90 +++ /dev/null @@ -1,118 +0,0 @@ -!! ######################## -MODULE MODE_BLOWSNW_SURF -!! ######################## -!! - - USE MODD_BLOWSNW_SURF - USE MODD_CSTS - USE MODD_BLOWSNW_n - - - IMPLICIT NONE - PUBLIC - -CONTAINS - -SUBROUTINE SNOWMOMENT2SIZE( & - PSVT & !I [XX/m3] input scalar variables (moment of distribution) - , PBETA1D & !O [m] scale factor of blowing snow particles distribution (gamma distribution) - , PRG1D & !O [m] number mean radius of blowing snow particles distribution - ) - !! ############################################################ - !! - !! - !! PURPOSE - !! ------- - !! Translate the two moments M0 and M3 into - !! Values which can be understood more easily (R, beta) - !! At this point, M3 is in kg_{snow}/m3, M0 in #/m3 - !! - !! - !! REFERENCE - !! --------- - !! Based on mode_dst_surf.f90 (Tulet et al) - !! - !! AUTHOR - !! ------ - !! Vincent Vionnet - !! - !! MODIFICATIONS - !! ------------- - !! - !! EXTERNAL - !! -------- - !! None - !! - USE YOMHOOK ,ONLY : LHOOK, DR_HOOK - USE PARKIND1 ,ONLY : JPRB - - IMPLICIT NONE - !! - !------------------------------------------------------------------------------- - ! - !* 0. DECLARATIONS - ! ------------ - ! - !* 0.1 declarations of arguments - ! - !INPUT - REAL, DIMENSION(:,:,:), INTENT(IN) :: PSVT !I [ __ /m3] moments in surface units - - !OUTPUT - REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PBETA1D !O [m] scale factor deviation - REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PRG1D !O [m] number median diameter - ! - ! - !* 0.2 declarations local variables - ! - REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZSV ! [snow particles moment concentration] - REAL,DIMENSION(:,:), ALLOCATABLE :: ZBETA ! [-] standard deviation - REAL,DIMENSION(:,:), ALLOCATABLE :: ZRG ! [um] number median diameter - INTEGER :: JK !Loop index - REAL, DIMENSION(2) :: ZPMIN - REAL :: ZRGMIN - REAL(KIND=JPRB) :: ZHOOK_HANDLE - -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_SURF:SNOWMOMENT2SIZE',0,ZHOOK_HANDLE) - - ALLOCATE (ZBETA(SIZE(PSVT,1),SIZE(PSVT,2))) - ALLOCATE (ZRG(SIZE(PSVT,1),SIZE(PSVT,2))) - ALLOCATE (ZSV(SIZE(PSVT,1), SIZE(PSVT,2),SIZE(PSVT,3))) - - !Save the moments in a local array - ZSV(:,:,:) = MAX(PSVT(:,:,:), 1E-80) - -!Get minimum values possible - ZPMIN(1) = XN0MIN_SNW - ZRGMIN = XINIRADIUS_SNW - ZPMIN(2) = 4*XPI*XRHOLI/3*(ZRGMIN/XEMIALPHA_SNW)**3.*(XEMIALPHA_SNW+2)*(XEMIALPHA_SNW+1)*XEMIALPHA_SNW*XN0MIN_SNW - ZSV(:,:,1)=MAX(PSVT(:,:,1),ZPMIN(1)) - ZSV(:,:,2)=MAX(PSVT(:,:,2),ZPMIN(2)) - - DO JK=1,SIZE(PSVT,2) - ZBETA(:,JK)=((3*ZSV(:,JK,2))/(4*XPI*XRHOLI*(XEMIALPHA_SNW+2)*(XEMIALPHA_SNW+1)*XEMIALPHA_SNW*ZSV(:,JK,1)))**(1./3.) - - ZRG(:,JK) = ZBETA(:,JK)*XEMIALPHA_SNW - - END DO - - !Give the beta-values to the passed array - IF(PRESENT(PBETA1D))THEN - PBETA1D(:,:) = ZBETA(:,:) - ENDIF - - !Get the number median radius - IF(PRESENT(PRG1D))THEN - PRG1D(:,:)= ZRG(:,:) - ENDIF - - DEALLOCATE(ZSV) - DEALLOCATE(ZRG) - DEALLOCATE(ZBETA) - -IF (LHOOK) CALL DR_HOOK('MODE_BLOWSNW_SURF:SNOWMOMENT2SIZE',1,ZHOOK_HANDLE) - - -END SUBROUTINE SNOWMOMENT2SIZE - -END MODULE MODE_BLOWSNW_SURF diff --git a/src/SURFEX/modn_blowsnw.f90 b/src/SURFEX/modn_blowsnw.f90 deleted file mode 100644 index d03644939..000000000 --- a/src/SURFEX/modn_blowsnw.f90 +++ /dev/null @@ -1,42 +0,0 @@ -!! -!! ##################### - MODULE MODN_BLOWSNW -!! ##################### -!! -!!*** *MODN_SNW* -!! -!! PURPOSE -!! ------- -! Namelist for snow drift scheme -!! -!!** AUTHOR -!! ------ -!! V. Vionnet *CNRM* -! -!! MODIFICATIONS -!! ------------- -!! Original 03/2010 -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -USE MODD_BLOWSNW_SURF, ONLY : LSNOW_SALT, XCONC_SALT, XSNOW_PRECIP, LSNOW_PRECIP, & - LSNOW_WIND, XSNOW_ROUGHNESS, XSNOW_BUOYANCY, & - XEMIRADIUS_SNW,XEMIALPHA_SNW,CSNOW_SALT, & - CSNOW_SEDIM,LBLOWSNW_CANOSUBL,LBLOWSNW_CANODIAG, & - XRSNOW_SBL,LBLOWSNW_ADV - -!! -!----------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ----------------- -IMPLICIT NONE -SAVE -NAMELIST /NAM_SURF_BLOWSNW/ & - LSNOW_SALT, XCONC_SALT, XSNOW_PRECIP, LSNOW_PRECIP, LSNOW_WIND, & !Parameterization type - XSNOW_ROUGHNESS, XSNOW_BUOYANCY,XEMIRADIUS_SNW,XEMIALPHA_SNW , & - CSNOW_SALT, CSNOW_SEDIM,LBLOWSNW_CANOSUBL,LBLOWSNW_CANODIAG, & - XRSNOW_SBL,LBLOWSNW_ADV - -! -END MODULE MODN_BLOWSNW diff --git a/src/SURFEX/snowpack_evol.f90 b/src/SURFEX/snowpack_evol.f90 deleted file mode 100644 index 370879352..000000000 --- a/src/SURFEX/snowpack_evol.f90 +++ /dev/null @@ -1,744 +0,0 @@ -SUBROUTINE SNOWPACK_EVOL(HSNOWRES,PBLOWSNW_FLUX,PSNOWHEAT,PSNOWSWE,PSNOWRHO, & - PSNOWGRAN1,PSNOWGRAN2,PSNOWHIST,PSNOWAGE, & - PTSTEP,PRHOA,PTA,PBLOWSNW_CONC, & - PVMOD,PQA,PPS,PUREF,PEXNS,PDIRCOSZW,PZREF, & - PZ0EFF,PZ0H,PBLOWSNW_DEP,PTG) -! ###################################################################### -! ########################################################################## -! -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to simulate the mass exchange between the -!! snowpack and the atmosphere when coupled to Meso-NH. A net mass flux flux is computed. -!! - If erosion occurs, it is simumated by this routine. -!! - If deposition occurs, the deposited mass flux is computed, sent to Crocus -!! and is added to the snowfall -!! -!! -!!** METHOD -!! ------ -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! Vionnet et al, The Cryosphere, 2014 -!! -!! AUTHOR -!! ------ -!! V. Vionnet * CNRM/GAME* -!! -!! MODIFICATIONS -!! ------------- -!! Original 10/10/11 -! -!* 0. DECLARATIONS - -USE MODD_CSTS, ONLY : XLMTT, XTT, XCI,XRHOLW -USE MODD_SNOW_PAR, ONLY : X_RI_MAX -USE MODD_BLOWSNW_SURF -USE MODD_BLOWSNW_n -USE MODD_SNOW_METAMO - -USE MODE_SNOW3L -USE MODE_THERMOS - -USE MODI_SURFACE_RI -USE MODI_SURFACE_CD - -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE PARKIND1 ,ONLY : JPRB - -IMPLICIT NONE -! =============================================================== -! -! 0.1 declarations of arguments -! -! =============================================================== -! - CHARACTER(LEN=*), INTENT(IN) :: HSNOWRES -! HSNOWRES = ISBA-SNOW3L turbulant exchange option -! 'DEF' = Default: Louis (ISBA: Noilhan and Mahfouf 1996) -! 'RIL' = Limit Richarson number under very stable -! conditions - - REAL, DIMENSION(:), INTENT(IN) :: PTA,PRHOA,PVMOD,PZ0EFF,PQA,PEXNS, & - PUREF,PZREF,PDIRCOSZW,PPS,PZ0H,PTG -! PTA = atmospheric temperature at level za (K) -! PRHOA = air density (kg/m3) -! PVMOD = modulus of the wind parallel to the orography (m/s) -! PZ0EFF = roughness length for momentum -! PQA = atmospheric specific humidity -! at level za -! PEXNS = Exner function -! PUREF = reference height of the wind -! PZREF = reference height of the first -! PDIRCOSZW = Cosinus of the angle between the -! normal to the surface and the vertical -! atmospheric level -! PPS = surface pressure -! PZ0H = grid box average roughness length for heat -! PTG = Surface soil temperature (effective -! temperature of the layer lying below snowpack) - - REAL, DIMENSION(:,:), INTENT(INOUT) :: PSNOWHEAT,PSNOWSWE,PSNOWRHO -! PSNOWHEAT = Snow layer(s) heat content (J/m3) -! PSNOWRHO = Snow layer(s) averaged density (kg/m3) -! PSNOWSWE = Snow layer(s) liquid Water Equivalent (SWE:kg m-2) - - REAL, DIMENSION(:,:), INTENT(INOUT) :: PSNOWGRAN1,PSNOWGRAN2, & - PSNOWHIST,PSNOWAGE -! PSNOWGRAN1 = Snow layer(s) grain parameter 1 -! PSNOWGRAN2 = Snow layer(s) grain parameter 2 -! PSNOWHIST = Snow layer(s) grain historical parameter -! PSNOWAGE = Snow layer(s) age - - REAL, DIMENSION(:,:) , INTENT(IN) :: PBLOWSNW_CONC -! PBLOWSNW_CONC = blowing snow particle concentration -! (1: number; 2: mass) - - REAL, DIMENSION(:,:) , INTENT(INOUT) :: PBLOWSNW_FLUX -! PBLOWSNW_FLUX = Blowing snow particles flux -! IN : sedimentation flux from previous time step (1,2) -! contribution of saltation transport to snowpack mass balance (3) -! 1: number (#/m2/s); 2: mass (kg/m2/s), 3: (kg/m2/s) -! OUT: emitted turbulent flux + streamwise saltation flux -! 1: number (#/m2/s); 2: mass (kg/m2/s), 3: kg/m/s -! - REAL, DIMENSION(:) , INTENT(OUT) :: PBLOWSNW_DEP -! PBLOWSNW_DEP = deposion flux of blowing snow particles (sent to Crocus) -! - REAL, INTENT(IN) :: PTSTEP -! PTSTEP = time step of the integration - -! =============================================================== -! -! 0.2 declarations of local variables -! -! =============================================================== - INTEGER JWRK, JJ ! Loop counters - INTEGER INLVLS ! maximum number of snow layers - REAL SWE_MAX ! Maximum SWE that can be removed from a snow layer - REAL SWE_DEP ! SWE which is deposited - REAL ZMOB ! Mobility index of the eroded layer - - - REAL, DIMENSION(SIZE(PRHOA)) :: T_EROSION ! Erosion time step - - INTEGER, DIMENSION(SIZE(PRHOA)) :: INLVLS_USE ! decrit nbre de couches effectives initiales - INTEGER, DIMENSION(SIZE(PRHOA)) :: INLVLS_USE_TMP ! decrit nbre de couches effectives en cours d'�volution - - LOGICAL, DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: LAYER_USE ! - LOGICAL, DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: LAYER_USE_TMP ! - - REAL , DIMENSION(SIZE(PRHOA),2) :: ZTURBFLUX ! blowing snow turbulent flux - REAL , DIMENSION(SIZE(PRHOA),2) :: ZSEDFLUX ! blowing snow sedimentation flux - REAL , DIMENSION(SIZE(PRHOA)) :: ZSALT_CONTR ! contribution of saltation transport to snowpack mass balance - REAL , DIMENSION(SIZE(PRHOA),2) :: ZTOTFLUX_TURB ! total turbulent blowing snow flux - REAL , DIMENSION(SIZE(PRHOA)) :: ZTOTFLUX_SALT ! total saltation mass flux - REAL , DIMENSION(SIZE(PRHOA)) :: ZSALTFLUX ! streamwise saltation mass flux - REAL , DIMENSION(SIZE(PRHOA)) :: ZEMIMOB ! emitted mobility index - REAL , DIMENSION(SIZE(PRHOA)) :: ZDEPMOB ! deposited mobility index - REAL , DIMENSION(SIZE(PRHOA)) :: ZUSTAR ! friction velocity - REAL , DIMENSION(SIZE(PRHOA)) :: ZRISNOW ! Richardson number over snow - REAL , DIMENSION(SIZE(PRHOA)) :: ZCDSNOW ! Drag coefficient for momentum over snow - - - REAL, DIMENSION(SIZE(PRHOA)) :: ZEXNA, ZQSAT, ZCDN,ZTEMP_RI - - ! Temporary snow variables - REAL , DIMENSION(SIZE(PRHOA,1)) :: ZSNOW ! total snow depth - - REAL,DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZSNOWGRAN1,ZSNOWGRAN2, & - ZSNOWHIST,ZSNOWAGE - - REAL, DIMENSION(SIZE(PSNOWRHO,1),SIZE(PSNOWRHO,2)) :: ZSNOWHEAT,ZSNOWDZ, & - ZSNOWSWE,ZSNOWRHO,ZSNOWTEMP,ZSNOWLIQ, & - ZSCAP - - REAL(KIND=JPRB) :: ZHOOK_HANDLE -! =============================================================== -! -! 1. Initialization of local variables -! -! =============================================================== -! -IF (LHOOK) CALL DR_HOOK('SNOWPACK_EVOL',0,ZHOOK_HANDLE) - -INLVLS = SIZE(PSNOWSWE(:,:),2) - - - -ZSEDFLUX(:,:)= -PBLOWSNW_FLUX(:,1:2) -ZSALT_CONTR(:) = -PBLOWSNW_FLUX(:,3) - -ZTOTFLUX_TURB(:,:)=0. - -ZTOTFLUX_SALT(:)=0. -ZSALTFLUX(:)=0. - -ZEMIMOB(:) =0. -ZDEPMOB(:) =0. - -! Initialize snowpack characteristics -ZSNOWGRAN1(:,:)=PSNOWGRAN1(:,:) -ZSNOWGRAN2(:,:)=PSNOWGRAN2(:,:) -ZSNOWHIST(:,:) =PSNOWHIST(:,:) -ZSNOWAGE(:,:) =PSNOWAGE(:,:) -ZSNOWHEAT(:,:) =PSNOWHEAT(:,:) -ZSNOWRHO(:,:) =PSNOWRHO(:,:) -ZSNOWSWE(:,:) =PSNOWSWE(:,:) - - -! Initially : no deposition of blowing snow particles -PBLOWSNW_DEP(:) = 0. - - -WHERE (PSNOWSWE(:,:)>0.) - LAYER_USE(:,:)=.TRUE. - ZSNOWDZ(:,:) = PSNOWSWE(:,:)/PSNOWRHO(:,:) -ELSEWHERE - LAYER_USE(:,:)=.FALSE. - ZSNOWDZ(:,:) =0. -ENDWHERE - -ZSNOWTEMP(:,:)= 0. - -! Initialize temperature where snow is present -WHERE (LAYER_USE(:,:)) -ZSCAP(:,:) = SNOW3LSCAP(PSNOWRHO) -! -ZSNOWTEMP(:,:) = XTT + ( ((PSNOWHEAT(:,:)/ZSNOWDZ(:,:)) & - + XLMTT*PSNOWRHO(:,:))/ZSCAP(:,:) ) -! -ZSNOWLIQ(:,:) = MAX(0.0,ZSNOWTEMP(:,:)-XTT)*ZSCAP(:,:)* & - ZSNOWDZ(:,:)/(XLMTT*XRHOLW) -! -ZSNOWTEMP(:,:) = MIN(XTT,ZSNOWTEMP(:,:)) -END WHERE - -! Temperature used to compute Richardson number depending if the soil is -! covered by snow or not. -ZTEMP_RI(:) = 0. -WHERE(ZSNOWTEMP(:,1)>0.) - ZTEMP_RI(:) = ZSNOWTEMP(:,1) -ELSEWHERE - ZTEMP_RI(:) = PTG(:) -END WHERE - - -ZQSAT(:) = QSATI(ZTEMP_RI(:),PPS(:)) -ZEXNA(:) = PEXNS(:) -! -! Compute Richardson number -! -CALL SURFACE_RI(ZTEMP_RI(:), ZQSAT, PEXNS, ZEXNA, PTA, PQA, & - PZREF, PUREF, PDIRCOSZW, PVMOD, ZRISNOW ) -! -! Simple adaptation of method by Martin and Lejeune (1998) -! to apply a lower limit to turbulent transfer coef -! by defining a maximum Richarson number for stable -! conditions: -! -IF(HSNOWRES=='RIL') ZRISNOW(:) = MIN(X_RI_MAX, ZRISNOW(:)) -! -! Compute drag coefficient for momentum -! -CALL SURFACE_CD(ZRISNOW, PZREF, PUREF, PZ0EFF, PZ0H, ZCDSNOW, ZCDN) -! -! Compute friction velocity -! -ZUSTAR(:) = SQRT(ZCDSNOW(:)*PVMOD(:)**2) -! -! -! Initialize snow layering -! - - -INLVLS_USE(:)=0 -DO JJ=1,INLVLS - WHERE(LAYER_USE(:,JJ)) INLVLS_USE(:)=JJ -ENDDO -INLVLS_USE_TMP(:)=INLVLS_USE(:) -LAYER_USE_TMP(:,:)=LAYER_USE(:,:) - -! =============================================================== -! -! 2. Compute net flux of blowing snow particles -! and update of snowpack accordingly -! -! =============================================================== -! Loop on snow covered points - DO JWRK=1,SIZE(PSNOWSWE,1) - T_EROSION(JWRK)=PTSTEP - DO JJ=1,INLVLS_USE(JWRK) - ZSNOW(JWRK) = SUM(ZSNOWDZ(JWRK,1:INLVLS_USE_TMP(JWRK))) - -! Turbulent flux - IF(LSNOW_WIND) THEN - ! Buoyancy effects in presence of suspended particles are taken into account. - ! Iterations are necessary to reach a balance between u* and - ! concentration in the saltation layer. - CALL SNOWFLUX_GET_TURB(ZSNOWGRAN1(JWRK,1),ZSNOWGRAN2(JWRK,1), & - ZSNOWLIQ(JWRK,1),ZSNOWHIST(JWRK,1),PRHOA(JWRK),ZTURBFLUX(JWRK,:), & - PBLOWSNW_CONC(JWRK,:),PVMOD(JWRK),ZCDSNOW(JWRK),PZ0EFF(JWRK),ZMOB, & - ZRISNOW(JWRK),PZREF(JWRK),PZ0H(JWRK),PUREF(JWRK), HSNOWRES, & - PDIRCOSZW(JWRK),ZSALTFLUX(JWRK)) - ELSE - ! Buoyancy effects in presence of suspended particles are not - ! taken into account. Only thermal effect are included. Snow turbulent flux is directly computed. - CALL SNOWFLUX_GET(ZSNOWGRAN1(JWRK,1),ZSNOWGRAN2(JWRK,1), & - ZSNOWLIQ(JWRK,1),ZSNOWHIST(JWRK,1),ZUSTAR(JWRK),PRHOA(JWRK),ZTURBFLUX(JWRK,:), & - PBLOWSNW_CONC(JWRK,:),PVMOD(JWRK),ZCDSNOW(JWRK),PZ0EFF(JWRK),ZMOB,ZSALTFLUX(JWRK)) - END IF - ! Negative net flux : snow deposition - IF(ZTURBFLUX(JWRK,2)+ZSEDFLUX(JWRK,2)+ZSALT_CONTR(JWRK)<=0.) THEN - SWE_DEP=-(ZTURBFLUX(JWRK,2)+ZSEDFLUX(JWRK,2)+ZSALT_CONTR(JWRK))*T_EROSION(JWRK) - PBLOWSNW_DEP(JWRK) = SWE_DEP / PTSTEP - ZTOTFLUX_TURB(JWRK,:)=ZTOTFLUX_TURB(JWRK,:)+T_EROSION(JWRK)/PTSTEP*ZTURBFLUX(JWRK,:) - ZTOTFLUX_SALT(JWRK)=ZTOTFLUX_SALT(JWRK)+T_EROSION(JWRK)/PTSTEP*ZSALTFLUX(JWRK) - ZEMIMOB(JWRK) = ZEMIMOB(JWRK)+T_EROSION(JWRK)/PTSTEP*ZMOB - T_EROSION(JWRK)=0. - EXIT - - ! Positive net flux : snow erosion - ELSE IF(ZTURBFLUX(JWRK,2)+ZSEDFLUX(JWRK,2)+ZSALT_CONTR(JWRK)>0.) THEN - ! SWE potentially eroded during the T_EROSION - SWE_MAX=(ZTURBFLUX(JWRK,2)+ZSEDFLUX(JWRK,2)+ZSALT_CONTR(JWRK))*T_EROSION(JWRK) - - ! Only layer JJ is partially eroded - IF(SWE_MAX<=ZSNOWSWE(JWRK,1)) THEN ! Only layer JJ is partially eroded - CALL SNOWEROSION(SWE_MAX,ZSNOWHEAT(JWRK,:),ZSNOWDZ(JWRK,:),ZSNOWSWE(JWRK,:), & - ZSNOWRHO(JWRK,:),ZSNOWGRAN1(JWRK,:),ZSNOWGRAN2(JWRK,:) & - ,ZSNOWHIST(JWRK,:),ZSNOWAGE(JWRK,:),ZSNOWLIQ(JWRK,:), & - INLVLS_USE_TMP(JWRK),LAYER_USE_TMP(JWRK,:),PVMOD(JWRK),PTSTEP) - ZTOTFLUX_TURB(JWRK,:)=ZTOTFLUX_TURB(JWRK,:)+T_EROSION(JWRK)/PTSTEP*ZTURBFLUX(JWRK,:) - ZTOTFLUX_SALT(JWRK)=ZTOTFLUX_SALT(JWRK)+T_EROSION(JWRK)/PTSTEP*ZSALTFLUX(JWRK) - ZEMIMOB(JWRK) = ZEMIMOB(JWRK)+T_EROSION(JWRK)/PTSTEP*ZMOB - T_EROSION(JWRK)=0. - EXIT - - ! Layer JJ is totally eroded and removed from the snowpack, next layer is then checked - ! to see if blowing snow occurs - ELSE - T_EROSION(JWRK)=T_EROSION(JWRK)*(1-ZSNOWSWE(JWRK,1)/SWE_MAX) - ZTOTFLUX_TURB(JWRK,:)=ZTOTFLUX_TURB(JWRK,:)+(1-T_EROSION(JWRK)/PTSTEP)*ZTURBFLUX(JWRK,:) - ZTOTFLUX_SALT(JWRK)=ZTOTFLUX_SALT(JWRK)+(1-T_EROSION(JWRK)/PTSTEP)*ZSALTFLUX(JWRK) - CALL SNOWEROSION(ZSNOWSWE(JWRK,1),ZSNOWHEAT(JWRK,:),ZSNOWDZ(JWRK,:), & - ZSNOWSWE(JWRK,:), ZSNOWRHO(JWRK,:),ZSNOWGRAN1(JWRK,:), & - ZSNOWGRAN2(JWRK,:),ZSNOWHIST(JWRK,:),ZSNOWAGE(JWRK,:),ZSNOWLIQ(JWRK,:), & - INLVLS_USE_TMP(JWRK),LAYER_USE_TMP(JWRK,:),PVMOD(JWRK),PTSTEP) - ZEMIMOB(JWRK) = ZEMIMOB(JWRK)+(1-T_EROSION(JWRK)/PTSTEP)*ZMOB - END IF - END IF - END DO - - - IF(T_EROSION(JWRK)>0.AND.(ZSEDFLUX(JWRK,2)+ZSALT_CONTR(JWRK))<-XUEPSI) THEN - ! Take into account two cases : - ! - Snow pack has been totally eroded during less - ! than one time step and potential deposition is - ! computed for the remaining part of the time step - ! - Deposition of blown snow particles on bare ground - !write(*,*) 'Deposition en excedent' - - SWE_DEP=-(ZSEDFLUX(JWRK,2)+ZSALT_CONTR(JWRK))*T_EROSION(JWRK) - PBLOWSNW_DEP(JWRK) = SWE_DEP / PTSTEP - write(*,*)'pb T_EROSION',T_EROSION(JWRK),JWRK - write(*,*)'pb INLVLS_OLD',SWE_DEP - write(*,*) ZTURBFLUX(JWRK,2) -! STOP 'deposition en excedent' - ENDIF - - ! Compute final snow depth that may have changed because of erosion. - IF(INLVLS_USE_TMP(JWRK)>0) THEN - ZSNOW(JWRK) = SUM(ZSNOWDZ(JWRK,1:INLVLS_USE_TMP(JWRK))) - ELSE - ZSNOW(JWRK) = 0. - ENDIF - - END DO - - -! =============================================================== -! -! 3. Final computation -! -! =============================================================== - -! Update final snowpack - PSNOWGRAN1(:,:)=ZSNOWGRAN1(:,:) - PSNOWGRAN2(:,:)=ZSNOWGRAN2(:,:) - PSNOWHIST (:,:)=ZSNOWHIST (:,:) - PSNOWAGE (:,:)=ZSNOWAGE (:,:) - PSNOWHEAT (:,:)=ZSNOWHEAT (:,:) - PSNOWRHO (:,:)=ZSNOWRHO (:,:) - PSNOWSWE (:,:)=ZSNOWDZ(:,:)*PSNOWRHO(:,:) - -! Snow fluxes sent to Canopy or directly to Meso-NH if Canopy is activated - - PBLOWSNW_FLUX(:,1)=ZTOTFLUX_TURB(:,1) ! Save total number turbulent flux - PBLOWSNW_FLUX(:,2)=ZTOTFLUX_TURB(:,2) ! Save total mass turbulent flux - PBLOWSNW_FLUX(:,3)=ZTOTFLUX_SALT(:) ! Save streamwise saltation flux - -IF (LHOOK) CALL DR_HOOK('SNOWPACK_EVOL',1,ZHOOK_HANDLE) - -CONTAINS - - SUBROUTINE SNOWFLUX_GET(PSNOWGRAN1,PSNOWGRAN2, & - PSNOWLIQ,PSNOWHIST,PUSTAR,PRHOA,PBLOWSNW_FLUX, & - PBLOWSNW_CONC,PVMOD,PCDSNOW,PZ0EFF,PMOB,PQSALT) -! -!! PURPOSE -!! ------- -! Calculates turbulent blowing snow flux and streamwise saltation flux as a function -! of wind speed and snowpack properties -! -! Returns : -! - emitted turbulent flux -! - mobility index of emitted snow -! - streamwise saltation flux -! -! - USE MODE_BLOWSNW_MBLUTL - - IMPLICIT NONE -! -! 0.1 declarations of arguments -! -! - REAL, INTENT(IN) :: PSNOWGRAN1,PSNOWGRAN2,PSNOWLIQ,PSNOWHIST -! - REAL, INTENT(IN) :: PUSTAR,PRHOA - REAL, INTENT(IN) :: PVMOD,PCDSNOW,PZ0EFF - REAL, DIMENSION(:) , INTENT(IN) :: PBLOWSNW_CONC - - REAL, INTENT(OUT) :: PMOB - REAL, DIMENSION(:) , INTENT(OUT) :: PBLOWSNW_FLUX - REAL, INTENT(OUT) :: PQSALT ! Streamwise saltation mass flux (kg/m/s) -! -! 0.2 declaration of local variables -! - REAL :: ZMBLINDEX - REAL :: ZWIND_RFR_THR,ZWIND_FRC,ZWIND_FRC_THR, & - ZWIND_FRC_SALT - - REAL :: ZCONC_SALT - - REAL(KIND=JPRB) :: ZHOOK_HANDLE -! -! 0.3 Initialization -! -IF (LHOOK) CALL DR_HOOK('SNOWPACK_EVOL:SNOWFLUX_GET',0,ZHOOK_HANDLE) - -! - ZWIND_FRC = PUSTAR - PMOB = SNOW_MBL_INDEX(PSNOWGRAN1, PSNOWGRAN2) -! -! 1. Threshold Wind at 5m -! - CALL WIND_RFR_THR(ZWIND_RFR_THR,PSNOWGRAN1,PSNOWGRAN2) -! -! 2. Threshold Friction velocity -! - CALL WIND_FRC_THR(ZWIND_RFR_THR,PZ0EFF,ZWIND_FRC_THR) -! -! 3. Blown snow particles concentration (kg/m3) in the saltation layer - -! - CALL CONC_SALT(ZCONC_SALT,ZWIND_FRC,ZWIND_FRC_THR,PRHOA,PQSALT, & - PSNOWLIQ,PSNOWHIST) -! -! 4. Turbulent flux of blowing snow particles -! - CALL SNOW_FLUX(ZCONC_SALT,PVMOD,PBLOWSNW_CONC,PCDSNOW,PBLOWSNW_FLUX) -! -! Snowdrfit does not occur when: -! - surface layer is wet -! - historical variable is higher than 1 : crust of non-transportable snow - IF(PSNOWLIQ>0 .OR. PSNOWHIST>0) THEN - PBLOWSNW_FLUX(:)=0 - ENDIF -! - -IF (LHOOK) CALL DR_HOOK('SNOWPACK_EVOL:SNOWFLUX_GET',1,ZHOOK_HANDLE) - - END SUBROUTINE SNOWFLUX_GET - - - SUBROUTINE SNOWFLUX_GET_TURB(PSNOWGRAN1,PSNOWGRAN2, & - PSNOWLIQ,PSNOWHIST,PRHOA,PBLOWSNW_FLUX, & - PBLOWSNW_CONC,PVMOD,PCDSNOW,PZ0EFF,PMOB,PRI,PZREF,PZ0H, & - PUREF, HSNOWRES, PDIRCOSZW,PQSALT ) - - USE MODE_BLOWSNW_MBLUTL - USE MODD_BLOWSNW_SURF - -IMPLICIT NONE -! -! -!! PURPOSE -!! ------- -! Routine that compute emitted turbulent flux accounting for influence of -! blown snow particles on the wind profile. -! Return : -! - emitted turbulent flux -! - mobility index of emitted snow -! - streamwise saltation flux -! - Richardson number including particle-induced buoyancy -! - modified drag coefficient for momentum -! -! Routine to be tested!! -! -! 0.1 declarations of arguments -! -! - REAL, INTENT(IN) :: PSNOWGRAN1,PSNOWGRAN2,PSNOWLIQ,PSNOWHIST -! - REAL, INTENT(IN) :: PRHOA - REAL, INTENT(IN) :: PVMOD,PZ0EFF - REAL, INTENT(IN) :: PZREF, PZ0H, PUREF, PDIRCOSZW - REAL, DIMENSION(:) , INTENT(IN) :: PBLOWSNW_CONC - - CHARACTER(LEN=*), INTENT(IN) :: HSNOWRES -! - REAL, INTENT(INOUT) :: PCDSNOW, PRI -! - REAL, INTENT(OUT) :: PMOB - REAL, DIMENSION(:) , INTENT(OUT) :: PBLOWSNW_FLUX - REAL, INTENT(OUT) :: PQSALT ! Streamwise saltation mass flux (kg/m/s) -! -! 0.2 declaration of local variables -! - REAL :: ZMBLINDEX - REAL :: ZWIND_RFR_THR,ZWIND_FRC,ZWIND_FRC_THR - REAL :: ZCD_TEMP, ZCDN - REAL :: ZCONC_SALT - REAL :: ZRI_TOT ! Total richardson number (thermal + particle -! buoyancy included) - REAL :: ZRI_PART ! Particle richardson number ( particle -! buoyancy included) - REAL :: ZB,ZDELTA,ZY,ZY_DRIV,ZY_TEMP - INTEGER :: II,JJ - INTEGER :: NITER - - REAL(KIND=JPRB) :: ZHOOK_HANDLE - - -! -! 0.3 Initialization -! -IF (LHOOK) CALL DR_HOOK('SNOWPACK_EVOL:SNOWFLUX_GET_TURB',0,ZHOOK_HANDLE) -! - ZWIND_FRC = SQRT(PCDSNOW*PVMOD**2) - ZCD_TEMP = PCDSNOW ! Drag coefficient without particle-induced buoyancy -! and increase in aerodynamic rougnhess due to saltation - ZRI_TOT = PRI ! Richardson number without particle-induced buoyancy -! Parameters for Newton's method - ZDELTA = 0.01 - JJ=0 - ZB = ZWIND_FRC-999 - NITER = 5 ! Number of iterations to compute u* and Conc_salt - ! - ! Compute mobility index based on surface layer properties - PMOB = SNOW_MBL_INDEX(PSNOWGRAN1, PSNOWGRAN2); -! -! 1. Threshold Wind at 5m -! - CALL WIND_RFR_THR(ZWIND_RFR_THR,PSNOWGRAN1,PSNOWGRAN2) -! -! 2. Threshold Friction velocity -! - CALL WIND_FRC_THR(ZWIND_RFR_THR,PZ0EFF,ZWIND_FRC_THR) -! -! 3. Newton method to find u*, Ri and CD -! -DO WHILE(ABS(ZWIND_FRC-ZB)>0.001) - JJ=JJ+1 - ZB=ZWIND_FRC - IF(JJ>NITER) EXIT - CALL SOLVE_CD(ZWIND_FRC+ZDELTA,PVMOD,PRHOA,PBLOWSNW_CONC(2),PZREF,PUREF,PDIRCOSZW, & - ZWIND_FRC_THR,PRI,PZ0EFF,HSNOWRES,PZ0H,ZY_TEMP,ZRI_TOT,ZCD_TEMP, & - PSNOWLIQ,PSNOWHIST) - - CALL SOLVE_CD(ZWIND_FRC,PVMOD,PRHOA,PBLOWSNW_CONC(2),PZREF,PUREF,PDIRCOSZW, & - ZWIND_FRC_THR,PRI,PZ0EFF,HSNOWRES,PZ0H,ZY,ZRI_TOT,ZCD_TEMP, & - PSNOWLIQ,PSNOWHIST) - - ZY_DRIV = (ZY_TEMP-ZY)/ZDELTA - ZWIND_FRC = ZB- ZY/ZY_DRIV -END DO -! -! 4. Blown snow particles concentration in saltation (kg/m3) -! - CALL CONC_SALT(ZCONC_SALT,ZWIND_FRC,ZWIND_FRC_THR,PRHOA,PQSALT, & - PSNOWLIQ,PSNOWHIST) -! -! 5. Turbulent flux of blown snow particles -! - CALL SNOW_FLUX(ZCONC_SALT,PVMOD,PBLOWSNW_CONC,ZCD_TEMP,PBLOWSNW_FLUX) -! -! Snowdrfit does not occur when : -! - surface layer is wet -! - historical variable is higher than 1 : crust of non-transportable snow -! - IF(PSNOWLIQ>0 .OR. PSNOWHIST>0) THEN - PBLOWSNW_FLUX(:)=0 - ENDIF - -! Update Richardson number and drag coefficient for momentum - PRI = ZRI_TOT - PCDSNOW = ZCD_TEMP - - IF (LHOOK) CALL DR_HOOK('SNOWPACK_EVOL:SNOWFLUX_GET_TURB',1,ZHOOK_HANDLE) - - END SUBROUTINE SNOWFLUX_GET_TURB - - - SUBROUTINE SNOWEROSION(PSWE_REM,PSNOWHEAT,PSNOWDZ,PSNOWSWE, & - PSNOWRHO,PSNOWGRAN1,PSNOWGRAN2,PSNOWHIST,& - PSNOWAGE,PSNOWLIQ,INLVLS_USE,LAYER_USE, & - PVMOD, PTSTEP) -! -USE MODE_SNOW3L -USE MODD_SNOW_PAR -USE MODD_CSTS, ONLY : XLMTT, XTT, XCI -USE MODE_BLOWSNW_MBLUTL -! -IMPLICIT NONE -! -!! PURPOSE -!! ------- -! -! Erosion of the snowpack surface layer : -! reduces heat content, SWE and thickness -! -! ASSUMPTION: the snowpack surface layer is never totally eroded. -! Total erosion is insured earlier. -! -! 0.1 declarations of arguments -! -! - REAL, INTENT(IN) :: PSWE_REM ! Snow mass to be removed -! from the snow top layer (never exceed top layer thickness) - REAL, INTENT(IN) :: PVMOD, PTSTEP -! -! Top layers properties to be updated -! - REAL, DIMENSION(:), INTENT(INOUT) :: PSNOWHEAT,PSNOWDZ,PSNOWSWE,PSNOWRHO, & - PSNOWGRAN1,PSNOWGRAN2,PSNOWHIST,PSNOWAGE,PSNOWLIQ - - LOGICAL, DIMENSION(:), INTENT(INOUT) :: LAYER_USE - INTEGER,INTENT(INOUT) :: INLVLS_USE - -! 0.2 declaration of local variables -! - REAL :: ZSNOW_REM - REAL ::ZSNOWHMASS,ZSNOWTEMP - REAL :: ZRMOB,ZRDRIFT,ZPROFEQ,ZRT,ZSNOWRHO2 - REAL :: ZDRO, ZDGR1,ZDGR2 - REAL, DIMENSION(SIZE(PSNOWRHO,1)) :: ZSCAP - INTEGER :: JLAYER,KNLVLS - LOGICAL :: OEVOL_GRAIN - REAL(KIND=JPRB) :: ZHOOK_HANDLE - -! -! 0.3 initialization -! -IF (LHOOK) CALL DR_HOOK('SNOWPACK_EVOL:SNOWEROSION',0,ZHOOK_HANDLE) -! -ZSNOW_REM=0.0 -ZPROFEQ=0.0 -KNLVLS = SIZE(PSNOWSWE,1) -! -! Option to simulated evolution of snow properties in areas where -! erosion occurs -! -OEVOL_GRAIN = .FALSE. - - -! 1. Remove snow from surface layer - - IF(PSWE_REM==PSNOWSWE(1)) THEN ! Surface layer is totally removed. - DO JLAYER=1,INLVLS_USE-1 - PSNOWSWE(JLAYER)=PSNOWSWE(JLAYER+1) - PSNOWHEAT(JLAYER)=PSNOWHEAT(JLAYER+1) - PSNOWDZ(JLAYER)=PSNOWDZ(JLAYER+1) - PSNOWRHO(JLAYER)=PSNOWRHO(JLAYER+1) - PSNOWLIQ(JLAYER)=PSNOWLIQ(JLAYER+1) - PSNOWGRAN1(JLAYER)=PSNOWGRAN1(JLAYER+1) - PSNOWGRAN2(JLAYER)=PSNOWGRAN2(JLAYER+1) - PSNOWHIST(JLAYER)=PSNOWHIST(JLAYER+1) - PSNOWAGE(JLAYER)=PSNOWAGE(JLAYER+1) - ENDDO - PSNOWSWE(INLVLS_USE)=0.0 - PSNOWRHO(INLVLS_USE)=999. - PSNOWDZ(INLVLS_USE)=0. - PSNOWGRAN1(INLVLS_USE)=0. - PSNOWGRAN2(INLVLS_USE)=0. - PSNOWHIST(INLVLS_USE)=0. - PSNOWAGE(INLVLS_USE)=0. - PSNOWHEAT(INLVLS_USE)=0. - PSNOWLIQ(INLVLS_USE)=0. - LAYER_USE(INLVLS_USE)=.FALSE. - INLVLS_USE=INLVLS_USE-1 - ELSE - ZSCAP = SNOW3LSCAP(PSNOWRHO) - ZSNOWTEMP = XTT + (PSNOWHEAT(1) + & - XLMTT*PSNOWRHO(1)*PSNOWDZ(1))/ & - (ZSCAP(1)*MAX(XSNOWDMIN/KNLVLS,PSNOWDZ(1))) - ZSNOWTEMP = MIN(XTT, ZSNOWTEMP) - ZSNOWHMASS = PSWE_REM*(XCI*(ZSNOWTEMP-XTT)-XLMTT) -! -! 2.Reduce total pack depth - ZSNOW_REM=PSWE_REM/PSNOWRHO(1) - PSNOWDZ(1)=PSNOWDZ(1)-ZSNOW_REM -! 3.Reduce heat content - PSNOWHEAT(1)=PSNOWHEAT(1)-ZSNOWHMASS - PSNOWSWE(1)=PSNOWDZ(1)*PSNOWRHO(1) -! 4.Evolution of the remaining layer to simulate subgrid density increase -! and grain shape and size evolution due snowdrift. - IF(OEVOL_GRAIN) THEN - DO JLAYER=1,INLVLS_USE - ZSNOWRHO2 = PSNOWRHO(JLAYER) - ZRMOB = SNOW_MBL_INDEX(PSNOWGRAN1(JLAYER),PSNOWGRAN2(JLAYER)) - IF(PSNOWHIST(JLAYER).ge.2) ZRMOB = MIN(ZRMOB,-0.0583) - ZRDRIFT = ZRMOB-(2.868*EXP(-0.085*PVMOD)-1.) - ZPROFEQ = ZPROFEQ + 0.5* PSNOWDZ(JLAYER) * (3.25-ZRDRIFT) - ZRT=MAX(0.,ZRDRIFT*EXP(-ZPROFEQ/0.1)) - - IF(PSNOWRHO(JLAYER).lt.350.) THEN - ZDRO=(350.-PSNOWRHO(JLAYER))*PTSTEP/12./3600.*ZRT - PSNOWRHO(JLAYER)=MIN(350.,PSNOWRHO(JLAYER)+ZDRO) - PSNOWDZ(JLAYER)=PSNOWDZ(JLAYER)*ZSNOWRHO2/ & - PSNOWRHO(JLAYER) - END IF -! Dendritic snow - IF (PSNOWGRAN1(JLAYER).lt.0.) THEN - ZDGR1=-PSNOWGRAN1(JLAYER)*PTSTEP/12./3600.*ZRT*0.5 - ZDGR1=MIN(ZDGR1,-0.99*PSNOWGRAN1(JLAYER)) - ZDGR2=ZRT*PTSTEP/12./3600.*(99.-PSNOWGRAN2(JLAYER)) - PSNOWGRAN1(JLAYER)=PSNOWGRAN1(JLAYER)+ZDGR1 - PSNOWGRAN2(JLAYER)=MIN(99.,PSNOWGRAN2(JLAYER)+zdgr2) - ELSE ! Non dendritic snow - ZDGR1=PTSTEP/12./3600.*ZRT*(99.-PSNOWGRAN1(JLAYER)) - ZDGR2=PTSTEP/12./3600.*ZRT*5./10000. - PSNOWGRAN1(JLAYER)=MIN(99.,PSNOWGRAN1(JLAYER)+ZDGR1) - PSNOWGRAN2(JLAYER)=MAX(0.0003,PSNOWGRAN2(JLAYER)-ZDGR2) - END IF - END DO - END IF - - END IF - - IF (LHOOK) CALL DR_HOOK('SNOWPACK_EVOL:SNOWEROSION',1,ZHOOK_HANDLE) - - END SUBROUTINE SNOWEROSION - -END SUBROUTINE SNOWPACK_EVOL -- GitLab