SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
diag_inline_idealn.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE diag_inline_ideal_n (DGL, PTSTEP, PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA, &
7  pmera, pht, phw, prain, psnow, &
8  pcd, pcdn, pch, pri, phu, pz0, &
9  pz0h, pqsat, psfth, psftq, psfzon, psfmer, &
10  pdir_sw, psca_sw, plw, pdir_alb, psca_alb, &
11  ple, plei, psubl, plwup)
12 ! ###############################################################################
13 !
14 !!**** *DIAG_INLINE_IDEAL_n * - computes diagnostics during IDEAL time-step
15 !!
16 !! PURPOSE
17 !! -------
18 !
19 !!** METHOD
20 !! ------
21 !!
22 !! REFERENCE
23 !! ---------
24 !!
25 !!
26 !! AUTHOR
27 !! ------
28 !! P. Le Moigne
29 !!
30 !! MODIFICATIONS
31 !! -------------
32 !! Original 03/2015
33 !!------------------------------------------------------------------
34 !
35 !
37 !
38 USE modd_csts, ONLY : xtt, xlvtt
39 USE modd_surf_par, ONLY : xundef
40 !
41 USE modi_param_cls
42 USE modi_cls_tq
43 USE modi_cls_wind
44 USE modi_diag_surf_budget_ideal
45 USE modi_diag_surf_budgetc_ideal
46 USE modi_abor1_sfx
47 !
48 USE yomhook ,ONLY : lhook, dr_hook
49 USE parkind1 ,ONLY : jprb
50 !
51 IMPLICIT NONE
52 !
53 !* 0.1 declarations of arguments
54 !
55 TYPE(diag_ideal_t), INTENT(INOUT) :: dgl
56 !
57 REAL , INTENT(IN) :: ptstep ! atmospheric time-step (s)
58 REAL, DIMENSION(:), INTENT(IN) :: pta ! atmospheric temperature
59 REAL, DIMENSION(:), INTENT(IN) :: pts ! surface temperature
60 REAL, DIMENSION(:), INTENT(IN) :: pqa ! atmospheric specific humidity
61 REAL, DIMENSION(:), INTENT(IN) :: ppa ! atmospheric level pressure
62 REAL, DIMENSION(:), INTENT(IN) :: pps ! surface pressure
63 REAL, DIMENSION(:), INTENT(IN) :: prhoa ! air density
64 REAL, DIMENSION(:), INTENT(IN) :: pzona ! zonal wind
65 REAL, DIMENSION(:), INTENT(IN) :: pmera ! meridian wind
66 REAL, DIMENSION(:), INTENT(IN) :: pht ! atmospheric level height
67 REAL, DIMENSION(:), INTENT(IN) :: phw ! atmospheric level height for wind
68 REAL, DIMENSION(:), INTENT(IN) :: prain ! Rainfall (kg/m2/s)
69 REAL, DIMENSION(:), INTENT(IN) :: psnow ! Snowfall (kg/m2/s)
70 REAL, DIMENSION(:), INTENT(IN) :: pcd ! drag coefficient for momentum
71 REAL, DIMENSION(:), INTENT(IN) :: pcdn ! neutral drag coefficient
72 REAL, DIMENSION(:), INTENT(IN) :: pch ! drag coefficient for heat
73 REAL, DIMENSION(:), INTENT(IN) :: pri ! Richardson number
74 REAL, DIMENSION(:), INTENT(IN) :: phu ! near-surface humidity
75 REAL, DIMENSION(:), INTENT(IN) :: pz0 ! roughness length for momentum
76 REAL, DIMENSION(:), INTENT(IN) :: pz0h ! roughness length for heat
77 REAL, DIMENSION(:), INTENT(IN) :: pqsat ! humidity at saturation
78 REAL, DIMENSION(:), INTENT(IN) :: psfzon ! zonal friction
79 REAL, DIMENSION(:), INTENT(IN) :: psfmer ! meridian friction
80 REAL, DIMENSION(:), INTENT(IN) :: psfth ! heat flux (W/m2)
81 REAL, DIMENSION(:), INTENT(IN) :: psftq ! water flux (kg/m2/s)
82 REAL, DIMENSION(:,:),INTENT(IN):: pdir_sw ! direct solar radiation (on horizontal surf.)
83 ! ! (W/m2)
84 REAL, DIMENSION(:,:),INTENT(IN):: psca_sw ! diffuse solar radiation (on horizontal surf.)
85 ! ! (W/m2)
86 REAL, DIMENSION(:), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.) (W/m2)
87 REAL, DIMENSION(:,:),INTENT(IN):: pdir_alb ! direct albedo for each spectral band (-)
88 REAL, DIMENSION(:,:),INTENT(IN):: psca_alb ! diffuse albedo for each spectral band (-)
89 REAL, DIMENSION(:), INTENT(IN) :: ple ! total latent heat flux (W/m2)
90 REAL, DIMENSION(:), INTENT(IN) :: plei ! sublimation heat flux (W/m2)
91 REAL, DIMENSION(:), INTENT(IN) :: psubl ! sublimation (kg/m2/s)
92 REAL, DIMENSION(:), INTENT(IN) :: plwup ! upward longwave radiation (W/m2)
93 !
94 !* 0.2 declarations of local variables
95 !
96 REAL, DIMENSION(SIZE(PTA)) :: zh
97 REAL(KIND=JPRB) :: zhook_handle
98 !-------------------------------------------------------------------------------------
99 !
100 IF (lhook) CALL dr_hook('DIAG_INLINE_IDEAL_N',0,zhook_handle)
101 !
102 dgl%XDIAG_TS(:) = pts(:)
103 !
104  IF (dgl%N2M==1) THEN
105  CALL param_cls(pta, pts, pqa, ppa, prhoa, pzona, pmera, pht, phw, &
106  psfth, psftq, psfzon, psfmer, &
107  dgl%XT2M, dgl%XQ2M, dgl%XHU2M, dgl%XZON10M, dgl%XMER10M )
108  ELSE IF (dgl%N2M==2) THEN
109  zh(:)=2.
110  CALL cls_tq(pta, pqa, ppa, pps, pht, &
111  pcd, pch, pri, &
112  pts, phu, pz0h, zh, &
113  dgl%XT2M, dgl%XQ2M, dgl%XHU2M )
114  zh(:)=10.
115  CALL cls_wind(pzona, pmera, phw, &
116  pcd, pcdn, pri, zh, &
117  dgl%XZON10M, dgl%XMER10M )
118  END IF
119 !
120  IF (dgl%N2M>=1) THEN
121  !
122  dgl%XT2M_MIN(:) = min(dgl%XT2M_MIN(:),dgl%XT2M(:))
123  dgl%XT2M_MAX(:) = max(dgl%XT2M_MAX(:),dgl%XT2M(:))
124  !
125  dgl%XHU2M_MIN(:) = min(dgl%XHU2M_MIN(:),dgl%XHU2M(:))
126  dgl%XHU2M_MAX(:) = max(dgl%XHU2M_MAX(:),dgl%XHU2M(:))
127  !
128  dgl%XWIND10M(:) = sqrt(dgl%XZON10M(:)**2+dgl%XMER10M(:)**2)
129  dgl%XWIND10M_MAX(:) = max(dgl%XWIND10M_MAX(:),dgl%XWIND10M(:))
130  !
131  !* Richardson number
132  dgl%XRI = pri
133  !
134  ENDIF
135 !
136 IF (dgl%LSURF_BUDGET) THEN
137  !
138  dgl%XLE (:) = ple(:)
139  dgl%XLEI (:) = plei(:)
140  dgl%XEVAP(:) = psftq(:)
141  dgl%XSUBL(:) = psubl(:)
142  !
143  CALL diag_surf_budget_ideal( prhoa, psfth, &
144  pdir_sw, psca_sw, plw, &
145  pdir_alb, psca_alb, plwup, &
146  psfzon, psfmer, dgl%XLE, dgl%XRN, &
147  dgl%XH, dgl%XGFLUX, dgl%XSWD, &
148  dgl%XSWU, dgl%XSWBD, dgl%XSWBU, &
149  dgl%XLWD, dgl%XLWU, dgl%XFMU, dgl%XFMV )
150  !
151 END IF
152 !
153 IF( dgl%LSURF_BUDGETC)THEN
154  CALL diag_surf_budgetc_ideal(dgl, ptstep, dgl%XRN, dgl%XH, dgl%XLE, &
155  dgl%XLEI, dgl%XGFLUX, dgl%XSWD, dgl%XSWU, &
156  dgl%XLWD, dgl%XLWU, dgl%XFMU, dgl%XFMV, &
157  dgl%XEVAP, dgl%XSUBL )
158 ENDIF
159 !
160 IF (dgl%LCOEF) THEN
161  !
162  !* Transfer coefficients
163  !
164  dgl%XCD = pcd
165  dgl%XCH = pch
166  dgl%XCE = pch
167  !
168  !* Roughness lengths
169  !
170  dgl%XZ0 = pz0
171  dgl%XZ0H = pz0h
172  !
173 END IF
174 !
175 IF (dgl%LSURF_VARS) THEN
176  !
177  !* Humidity at saturation
178  !
179  dgl%XQS = pqsat
180  !
181 END IF
182 !
183 IF (lhook) CALL dr_hook('DIAG_INLINE_IDEAL_N',1,zhook_handle)
184 !-------------------------------------------------------------------------------------
185 !
186 END SUBROUTINE diag_inline_ideal_n
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:6
subroutine param_cls(PTA, PTS, PQA, PPA, PRHOA, PZONA, PMERA, PH, PHW, PSFTH, PSFTQ, PSFZON, PSFMER, PT2M, PQ2M, PHU2M, PZON10M, PMER10M)
Definition: param_cls.F90:6
subroutine diag_inline_ideal_n(DGL, PTSTEP, PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PRAIN, PSNOW, PCD, PCDN, PCH, PRI, PHU, PZ0, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PLE, PLEI, PSUBL, PLWUP)
subroutine diag_surf_budgetc_ideal(DGL, PTSTEP, PRN, PH, PLE, PLEI, PGFLUX, PSWD, PSWU, PLWD, PLWU, PFMU, PFMV, PEVAP, PSUBL)
subroutine diag_surf_budget_ideal(PRHOA, PSFTH, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PLWUP, PSFZON, PSFMER, PLE, PRN, PH, PGFLUX, PSWD, PSWU, PSWBD, PSWBU, PLWD, PLWU, PFMU, PFMV)
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)
Definition: cls_tq.F90:6