SURFEX v8.1
General documentation of Surfex
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 (DGO, D, DC, PTSTEP, PTA, PTS, &
7  PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, &
8  PRAIN, PSNOW, 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_cls_tq
42 USE modi_cls_wind
43 USE modi_diag_surf_budget_ideal
44 USE modi_diag_surf_budgetc
45 USE modi_abor1_sfx
46 !
47 USE yomhook ,ONLY : lhook, dr_hook
48 USE parkind1 ,ONLY : jprb
49 !
50 IMPLICIT NONE
51 !
52 !* 0.1 declarations of arguments
53 !
54 TYPE(diag_options_t), INTENT(IN) :: DGO
55 TYPE(diag_t), INTENT(INOUT) :: D
56 TYPE(diag_t), INTENT(INOUT) :: DC
57 !
58 REAL , INTENT(IN) :: PTSTEP ! atmospheric time-step (s)
59 REAL, DIMENSION(:), INTENT(IN) :: PTA ! atmospheric temperature
60 REAL, DIMENSION(:), INTENT(IN) :: PTS ! surface temperature
61 REAL, DIMENSION(:), INTENT(IN) :: PQA ! atmospheric specific humidity
62 REAL, DIMENSION(:), INTENT(IN) :: PPA ! atmospheric level pressure
63 REAL, DIMENSION(:), INTENT(IN) :: PPS ! surface pressure
64 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density
65 REAL, DIMENSION(:), INTENT(IN) :: PZONA ! zonal wind
66 REAL, DIMENSION(:), INTENT(IN) :: PMERA ! meridian wind
67 REAL, DIMENSION(:), INTENT(IN) :: PHT ! atmospheric level height
68 REAL, DIMENSION(:), INTENT(IN) :: PHW ! atmospheric level height for wind
69 REAL, DIMENSION(:), INTENT(IN) :: PRAIN ! Rainfall (kg/m2/s)
70 REAL, DIMENSION(:), INTENT(IN) :: PSNOW ! Snowfall (kg/m2/s)
71 REAL, DIMENSION(:), INTENT(IN) :: PCD ! drag coefficient for momentum
72 REAL, DIMENSION(:), INTENT(IN) :: PCDN ! neutral drag coefficient
73 REAL, DIMENSION(:), INTENT(IN) :: PCH ! drag coefficient for heat
74 REAL, DIMENSION(:), INTENT(IN) :: PRI ! Richardson number
75 REAL, DIMENSION(:), INTENT(IN) :: PHU ! near-surface humidity
76 REAL, DIMENSION(:), INTENT(IN) :: PZ0 ! roughness length for momentum
77 REAL, DIMENSION(:), INTENT(IN) :: PZ0H ! roughness length for heat
78 REAL, DIMENSION(:), INTENT(IN) :: PQSAT ! humidity at saturation
79 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
80 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction
81 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux (W/m2)
82 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux (kg/m2/s)
83 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW ! direct solar radiation (on horizontal surf.)
84 ! ! (W/m2)
85 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
86 ! ! (W/m2)
87 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.) (W/m2)
88 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_ALB ! direct albedo for each spectral band (-)
89 REAL, DIMENSION(:,:),INTENT(IN):: PSCA_ALB ! diffuse albedo for each spectral band (-)
90 REAL, DIMENSION(:), INTENT(IN) :: PLE ! total latent heat flux (W/m2)
91 REAL, DIMENSION(:), INTENT(IN) :: PLEI ! sublimation heat flux (W/m2)
92 REAL, DIMENSION(:), INTENT(IN) :: PSUBL ! sublimation (kg/m2/s)
93 REAL, DIMENSION(:), INTENT(IN) :: PLWUP ! upward longwave radiation (W/m2)
94 !
95 !* 0.2 declarations of local variables
96 !
97 REAL, DIMENSION(SIZE(PTA)) :: ZH
98 REAL(KIND=JPRB) :: ZHOOK_HANDLE
99 !-------------------------------------------------------------------------------------
100 !
101 IF (lhook) CALL dr_hook('DIAG_INLINE_IDEAL_N',0,zhook_handle)
102 !
103 d%XTS(:) = pts(:)
104 !
105  IF (dgo%N2M==2) THEN
106  zh(:)=2.
107  CALL cls_tq(pta, pqa, ppa, pps, pht, &
108  pcd, pch, pri, &
109  pts, phu, pz0h, zh, &
110  d%XT2M, d%XQ2M, d%XHU2M )
111  zh(:)=10.
112  CALL cls_wind(pzona, pmera, phw, &
113  pcd, pcdn, pri, zh, &
114  d%XZON10M, d%XMER10M )
115  END IF
116 !
117  IF (dgo%N2M>=1) THEN
118  !
119  d%XT2M_MIN(:) = min(d%XT2M_MIN(:),d%XT2M(:))
120  d%XT2M_MAX(:) = max(d%XT2M_MAX(:),d%XT2M(:))
121  !
122  d%XHU2M_MIN(:) = min(d%XHU2M_MIN(:),d%XHU2M(:))
123  d%XHU2M_MAX(:) = max(d%XHU2M_MAX(:),d%XHU2M(:))
124  !
125  d%XWIND10M(:) = sqrt(d%XZON10M(:)**2+d%XMER10M(:)**2)
126  d%XWIND10M_MAX(:) = max(d%XWIND10M_MAX(:),d%XWIND10M(:))
127  !
128  !* Richardson number
129  d%XRI = pri
130  !
131  ENDIF
132 !
133 IF (dgo%LSURF_BUDGET) THEN
134  !
135  d%XLE (:) = ple(:)
136  d%XLEI (:) = plei(:)
137  d%XEVAP(:) = psftq(:)
138  d%XSUBL(:) = psubl(:)
139  !
140  CALL diag_surf_budget_ideal ( prhoa, psfth, &
141  pdir_sw, psca_sw, plw, &
142  pdir_alb, psca_alb, plwup, &
143  psfzon, psfmer, d%XLE, d%XRN, &
144  d%XH, d%XGFLUX, d%XSWD, &
145  d%XSWU, d%XSWBD, d%XSWBU, &
146  d%XLWD, d%XLWU, d%XFMU, d%XFMV )
147  !
148 END IF
149 !
150 IF( dgo%LSURF_BUDGETC)THEN
151  CALL diag_surf_budgetc(d, dc, ptstep, .true. )
152 ENDIF
153 !
154 IF (dgo%LCOEF) THEN
155  !
156  !* Transfer coefficients
157  !
158  d%XCD = pcd
159  d%XCH = pch
160  d%XCE = pch
161  !
162  !* Roughness lengths
163  !
164  d%XZ0 = pz0
165  d%XZ0H = pz0h
166  !
167 END IF
168 !
169 IF (dgo%LSURF_VARS) THEN
170  !
171  !* Humidity at saturation
172  !
173  d%XQS = pqsat
174  !
175 END IF
176 !
177 IF (lhook) CALL dr_hook('DIAG_INLINE_IDEAL_N',1,zhook_handle)
178 !-------------------------------------------------------------------------------------
179 !
180 END SUBROUTINE diag_inline_ideal_n
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:7
real, save xlvtt
Definition: modd_csts.F90:70
subroutine diag_inline_ideal_n(DGO, D, DC, 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)
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine diag_surf_budgetc(D, DC, PTSTEP, ONOTICE)
real, save xtt
Definition: modd_csts.F90:66
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:8