6 hprogram, ki, pswe, pswe_orig, oinitsnow, oinc, htest )
22 USE modd_snow_par, ONLY : xansmin, xansmax, xrhosmin, xrhosmax
27 USE yomhook
, ONLY : lhook,dr_hook
28 USE parkind1
, ONLY : jprb
32 TYPE(isba_t
),
INTENT(INOUT) :: i
34 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
35 INTEGER,
INTENT(IN) :: ki
36 REAL,
DIMENSION(KI),
INTENT(IN) :: pswe
37 REAL,
DIMENSION(KI),
INTENT(INOUT) :: pswe_orig
38 LOGICAL,
INTENT(IN) :: oinitsnow
39 LOGICAL,
INTENT(IN) :: oinc
40 CHARACTER(LEN=2),
INTENT(IN) :: htest
44 REAL,
DIMENSION(KI) :: zswe
45 REAL,
DIMENSION(KI) :: zsweinc
46 REAL,
DIMENSION(KI) :: zts
48 REAL,
DIMENSION(KI) :: zsnr
49 REAL,
DIMENSION(KI) :: zsna
51 REAL(KIND=JPRB) :: zhook_handle
55 IF (lhook) CALL dr_hook(
'ASSIM_ISBA_UPDATE_SNOW',0,zhook_handle)
58 CALL
abor1_sfx(
'ASSIM_ISBA_n: FATAL ERROR DURING ARGUMENT TRANSFER')
61 IF ( i%TSNOW%SCHEME==
'D95' )
THEN
64 IF ( i%NPATCH > 1 ) CALL
abor1_sfx(
"Update of snow is only implemented for D95 and one patch")
66 CALL
abor1_sfx(
"Update of snow is only implemented for D95")
71 pswe_orig(:) = i%TSNOW%WSNOW(:,jl,jp)
73 zts(:) = i%XTG(:,1,jp)
77 WHERE ( pswe(:)/=xundef .AND. pswe(:)<1.0e-10 .AND. zts(:)>xtt )
81 i%TSNOW%WSNOW(:,jl,jp) = zswe(:)
89 zswe(:) = i%TSNOW%WSNOW(:,jl,jp)
90 zsna(:) = i%TSNOW%ALB (:,jp)
91 zsnr(:) = i%TSNOW%RHO (:,jl,jp)
94 IF ( .NOT. oinitsnow ) zswe(:) = pswe(:)
97 zsweinc(:) = zswe(:) - pswe_orig(:)
98 WRITE(*,
'(" SURFRESERV.NEIGE - min, mean, max: ",3E13.4)') minval(zswe),maxval(zswe),sum(zswe)/ki
99 WRITE(*,*)
'Mean SN increments over NATURE ',sum(zsweinc)/ki
103 WHERE ( pswe_orig(:) < 1.0e-10 .AND. zswe(:)>= 1.0e-10 )
104 zsna(:) = 0.5 * ( xansmin + xansmax )
105 zsnr(:) = 0.5 * ( xrhosmin + xrhosmax )
108 i%TSNOW%WSNOW(:,jl,jp) = zswe(:)
109 i%TSNOW%ALB (:,jp) = zsna(:)
110 i%TSNOW%RHO (:,jl,jp) = zsnr(:)
115 IF (lhook) CALL dr_hook(
'ASSIM_ISBA_UPDATE_SNOW',1,zhook_handle)
subroutine abor1_sfx(YTEXT)
subroutine assim_isba_update_snow(I, HPROGRAM, KI, PSWE, PSWE_ORIG, OINITSNOW, OINC, HTEST)