SURFEX v8.1
General documentation of Surfex
coupling_ideal_flux.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 coupling_ideal_flux (DGO, D, DC, HPROGRAM, HCOUPLING, PTIMEC, &
7  PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PAZIM, &
8  PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, &
9  PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, &
10  PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, &
11  PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, &
12  PPEW_A_COEF, PPEW_B_COEF, &
13  PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST )
14 ! ############################################################
15 !
16 !!**** *COUPLING_IDEAL_FLUX * - Computes the surface fluxes for the temperature,
17 !! vapor, horizontal components of the wind and the scalar variables.
18 !!
19 !! PURPOSE
20 !! -------
21 ! Give prescribed values of the surface fluxes for the potential
22 ! temperature, the vapor, the horizontal components of the wind and the
23 ! scalar variables. These fluxes are unsteady when a diurnal cycle
24 ! is taken into account.
25 !
26 !!** METHOD
27 !! ------
28 !! A temporal interpolation is performed to recover the values of the
29 !! fluxes at every instant of the simulation. The different values of the
30 !! prescribed fluxes are given at their declarations.
31 !! For the wind, z0 can also be prescribed and the flux is determined
32 !! with a neutral drag coefficient.
33 !!
34 !!
35 !! REFERENCE
36 !! ---------
37 !!
38 !!
39 !! AUTHOR
40 !! ------
41 !! V. Masson
42 !! (from J. Cuxart and J. Stein)
43 !!
44 !! MODIFICATIONS
45 !! -------------
46 !! Original 01/2004
47 !! Modified 09/2012 : J. Escobar , SIZE(PTA) not allowed without-interface , replace by KI
48 !! B. Decharme 04/2013 new coupling variables
49 !! P. Le Moigne 03/2015 add diagnostics IDEAL case
50 !! R. ROEHRIG 06/2015 add PTSTEP in TEMP_FORC_DISTS
51 !-------------------------------------------------------------------------------
52 !
53 !* 0. DECLARATIONS
54 ! ------------
55 !
56 !
58 !
59 USE modd_csts, ONLY : xrd, xcpd, xp00, xpi, xlvtt, xday, xkarman, xtt, &
60  xlstt, xstefan
63  xtimef, xtimet
64 USE modd_surf_par, ONLY : xundef
65 !
66 USE mode_sbls
67 USE mode_thermos
68 !
69 USE modi_diag_inline_ideal_n
70 USE modi_surface_aero_cond
71 USE modi_surface_ri
72 USE modi_surface_cd
73 !
74 USE yomhook ,ONLY : lhook, dr_hook
75 USE parkind1 ,ONLY : jprb
76 !
77 USE modi_abor1_sfx
78 !
79 IMPLICIT NONE
80 !
81 !* 0.1 declarations of arguments
82 !
83 !
84 TYPE(diag_options_t), INTENT(IN) :: DGO
85 TYPE(diag_t), INTENT(INOUT) :: D
86 TYPE(diag_t), INTENT(INOUT) :: DC
87 !
88  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
89  CHARACTER(LEN=1), INTENT(IN) :: HCOUPLING ! type of coupling
90  ! 'E' : explicit
91  ! 'I' : implicit
92 REAL, INTENT(IN) :: PTIMEC ! cumulated time since beginning of simulation
93 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
94 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
95 INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
96 REAL, INTENT(IN) :: PTIME ! current time since midnight (UTC, s)
97 INTEGER, INTENT(IN) :: KI ! number of points
98 INTEGER, INTENT(IN) :: KSV ! number of scalars
99 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
100 REAL, DIMENSION(KI), INTENT(IN) :: PTSUN ! solar time (s from midnight)
101 REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s)
102 REAL, DIMENSION(KI), INTENT(IN) :: PZREF ! height of T,q forcing (m)
103 REAL, DIMENSION(KI), INTENT(IN) :: PUREF ! height of wind forcing (m)
104 !
105 REAL, DIMENSION(KI), INTENT(IN) :: PTA ! air temperature forcing (K)
106 REAL, DIMENSION(KI), INTENT(IN) :: PQA ! air humidity forcing (kg/m3)
107 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3)
108 REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV ! scalar variables
109 ! ! chemistry: first char. in HSV: '#' (molecule/m3)
110 ! !
111  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV ! name of all scalar variables
112 REAL, DIMENSION(KI), INTENT(IN) :: PU ! zonal wind (m/s)
113 REAL, DIMENSION(KI), INTENT(IN) :: PV ! meridian wind (m/s)
114 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.)
115 ! ! (W/m2)
116 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
117 ! ! (W/m2)
118 REAL, DIMENSION(KSW),INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m)
119 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! zenithal angle (radian from the vertical)
120 REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! azimuthal angle (radian from North, clockwise)
121 REAL, DIMENSION(KI), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
122 ! ! (W/m2)
123 REAL, DIMENSION(KI), INTENT(IN) :: PPS ! pressure at atmospheric model surface (Pa)
124 REAL, DIMENSION(KI), INTENT(IN) :: PPA ! pressure at forcing level (Pa)
125 REAL, DIMENSION(KI), INTENT(IN) :: PZS ! atmospheric model orography (m)
126 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration in the air (kg/m3)
127 REAL, DIMENSION(KI), INTENT(IN) :: PSNOW ! snow precipitation (kg/m2/s)
128 REAL, DIMENSION(KI), INTENT(IN) :: PRAIN ! liquid precipitation (kg/m2/s)
129 !
130 !
131 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH ! flux of heat (W/m2)
132 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ ! flux of water vapor (kg/m2/s)
133 REAL, DIMENSION(KI), INTENT(OUT) :: PSFU ! zonal momentum flux (Pa)
134 REAL, DIMENSION(KI), INTENT(OUT) :: PSFV ! meridian momentum flux (Pa)
135 REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2 ! flux of CO2 (m/s*kg_CO2/kg_air)
136 REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS ! flux of scalar var. (kg/m2/s)
137 !
138 REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD ! radiative temperature (K)
139 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band (-)
140 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-)
141 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity (-)
142 !
143 REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
144 REAL, DIMENSION(KI), INTENT(OUT) :: PZ0 ! roughness length for momentum (m)
145 REAL, DIMENSION(KI), INTENT(OUT) :: PZ0H ! roughness length for heat (m)
146 REAL, DIMENSION(KI), INTENT(OUT) :: PQSURF ! specific humidity at surface (kg/kg)
147 !
148 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients
149 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I'
150 REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF
151 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF
152 REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF
153 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF
154  CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
155 
156 !
157 !
158 !* 0.2 declarations of local variables
159 !
160 REAL, DIMENSION(KI) :: ZZ0 ! roughness length
161 REAL, DIMENSION(KI) :: ZLMO ! Monin-Obuhkov length
162 REAL, DIMENSION(KI) :: ZTHA ! air potential temperature
163 REAL, DIMENSION(KI) :: ZRVA ! water vapor mixing ratio
164 REAL, DIMENSION(KI) :: ZUSTAR ! friction velocity
165 REAL, DIMENSION(KI) :: ZWIND ! wind
166 REAL, DIMENSION(KI) :: ZQ0 ! surface temperature flux (mK/s)
167 REAL, DIMENSION(KI) :: ZE0 ! surface vapor flux (mkg/kg/s)
168 REAL, DIMENSION(KI) :: ZQA ! specific humidity (kg/kg)
169 REAL, DIMENSION(KI) :: ZDIRCOSZW
170 REAL, DIMENSION(KI) :: ZEXNS, ZEXNA
171 REAL, DIMENSION(KI) :: ZAC, ZRA, ZCH, ZCD, ZCDN, ZRI
172 REAL, DIMENSION(KI) :: ZHU
173 REAL, DIMENSION(KI) :: ZLE ! total latent heat flux (W/m2)
174 REAL, DIMENSION(KI) :: ZLEI ! sublimation heat flux (W/m2)
175 REAL, DIMENSION(KI) :: ZSUBL ! sublimation (kg/m2/s)
176 REAL, DIMENSION(KI) :: ZLWUP ! upward longwave flux at t
177 REAL, DIMENSION(KI,KSW) :: ZDIR_ALB ! Direct albedo at time t ,
178 REAL, DIMENSION(KI,KSW) :: ZSCA_ALB ! Diffuse albedo at time t
179 !
180 INTEGER :: ISWB ! number of shortwave spectral bands
181 INTEGER :: JSWB ! loop counter on shortwave spectral bands
182 !
183 REAL :: ZALPHA ! interpolation coefficient
184 INTEGER :: IHOURF ! number of hours since midnight
185 INTEGER :: IHOURT
186 INTEGER :: JITER ! convergence loop counter
187 INTEGER :: JSV ! loop on scalar variables
188 !
189 LOGICAL :: GCALL_LMO ! flag in non-neutral case
190 !
191 INTEGER :: ILUOUT ! output listing logical unit
192 REAL(KIND=JPRB) :: ZHOOK_HANDLE
193 !
194 !-------------------------------------------------------------------------------------
195 IF (lhook) CALL dr_hook('COUPLING_IDEAL_FLUX',0,zhook_handle)
196 IF (htest/='OK') THEN
197  CALL abor1_sfx('COUPLING_IDEAL_FLUX: FATAL ERROR DURING ARGUMENT TRANSFER')
198 END IF
199 !----------------------------------------------------------------------------------
200 zle(:) = xundef
201 zlei(:) = xundef
202 zsubl(:) = xundef
203 zlwup(:) = xundef
204 !
205 !* 2. COMPUTE TIME
206 ! ------------
207 !
208  CALL temp_forc_dists (ptimec,ptstep,nforcf,xtimef,ihourf,zalpha)
209 !
210 !----------------------------------------------------------------------------------
211 !
212 !* 3. CONS. TEMPERATURE SURFACE FLUX
213 ! ------------------------------
214 !
215 psfth(:) = xsfth(ihourf) + ( xsfth(ihourf+1)-xsfth(ihourf) )*zalpha
216 !
217 gcall_lmo = ( xsfth(ihourf) + ( xsfth(ihourf+1)-xsfth(ihourf) )*zalpha ) /=0.
218 !----------------------------------------------------------------------------------
219 !
220 !* 4. CONS. MIXING RATIO SURFACE FLUX
221 ! -------------------------------
222 !
223 psftq(:) = xsftq(ihourf) + ( xsftq(ihourf+1)-xsftq(ihourf) )*zalpha
224 !
225 gcall_lmo = gcall_lmo .OR. ( xsftq(ihourf) + ( xsftq(ihourf+1)-xsftq(ihourf) )*zalpha ) /=0.
226 !----------------------------------------------------------------------------------
227 !
228 !* 5. WIND SURFACE FLUX
229 ! -----------------
230 !
231 !* 5.1 wind
232 !
233 zwind(:) = sqrt(pu**2+pv**2)
234 !
235 !* 5.2 Compute the surface stresses
236 !
237 SELECT CASE (custartype)
238 !
239 !
240  CASE ('USTAR')
241  ! when u* is prescribed
242  zustar(:) = xustar(ihourf) + ( xustar(ihourf+1)-xustar(ihourf) )*zalpha
243  !
244  CASE ('Z0 ')
245  !
246  !* spatialized roughness length
247  !
248  zz0(:) = xz0
249  !
250  !* water mixing ratio
251  !
252  zrva(:) = 0.
253  zqa(:) = pqa(:) / prhoa(:)
254  !
255  WHERE (zqa(:)/=0.) zrva(:) = 1./(1./zqa(:) - 1.)
256  !
257  !* air potential temperature
258  ztha(:) = pta(:) * (xp00/ppa(:))**(xrd/xcpd)
259  !
260  !* cinematic surface fluxes
261  zq0(:) = psfth(:) / xcpd / prhoa(:)
262  ze0(:) = psftq(:) / prhoa(:)
263  !
264  !
265  !* neutral case, as guess
266  zlmo(:) = xundef
267  zustar(:) = ustar(zwind(:),pzref(:),zz0(:),zlmo(:))
268  !
269  !* iterations in non-neutral case
270  IF (gcall_lmo) THEN
271  zustar(:) = max( zustar(:), 0.01 )
272  DO jiter=1,10
273  zlmo(:) = lmo(zustar(:),ztha(:),zrva(:),zq0(:),ze0(:))
274  zustar(:) = ustar(zwind(:),pzref(:),zz0(:),zlmo(:))
275  END DO
276  END IF
277  !
278  !
279 END SELECT
280 !
281 psfu = 0.
282 psfv = 0.
283 WHERE (zwind>0.)
284  psfu = - prhoa * zustar**2 * pu / zwind
285  psfv = - prhoa * zustar**2 * pv / zwind
286 END WHERE
287 !
288 !-------------------------------------------------------------------------------
289 !
290 !* 6. SCALAR VARIABLES FLUXES.
291 ! -----------------------
292 !
293 DO jsv=1,SIZE(psfts,2)
294  psfts(:,jsv) = xsfts(ihourf,jsv) + ( xsfts(ihourf+1,jsv)-xsfts(ihourf,jsv) )*zalpha
295 END DO
296 !
297 !-------------------------------------------------------------------------------
298 !
299 !* 7. CO2 FLUXES.
300 ! ----------
301 !
302 psfco2(:) = xsfco2(ihourf) + ( xsfco2(ihourf+1)-xsfco2(ihourf) )*zalpha
303 !
304 !-------------------------------------------------------------------------------
305 !
306 !* 8. OTHER OUTPUTS (RADIATIVE QUANTITIES) SET TO A CONSTANT VALUE
307 ! ------------------------------------
308 !
309  CALL temp_forc_dists (ptimec,ptstep,nforct,xtimet,ihourt,zalpha)
310 !
311 ptrad(:) = xtsrad(ihourt) + ( xtsrad(ihourt+1)-xtsrad(ihourt) )*zalpha
312 !
313 pdir_alb = xalb
314 psca_alb = xalb
315 pemis = xemis
316 !
317 ptsurf(:) = ptrad(:)
318 pz0(:) = xz0
319 pz0h(:) = xz0
320 pqsurf(:) = qsat(ptsurf(:),pps(:))
321 !
322 !-------------------------------------------------------------------------------
323 !
324 !* 9. INLINE DIAGNOSTICS
325 ! ------------------
326 !
327 zdircoszw = 1.
328 !
329 zexns(:) = (pps(:)/xp00)**(xrd/xcpd)
330 zexna(:) = (ppa(:)/xp00)**(xrd/xcpd)
331 zqa(:) = pqa(:) / prhoa(:)
332 !
333 zhu(:)=1.
334 !
335 WHERE (ptsurf(:)<xtt)
336  zle(:) = psftq(:) * xlstt
337  zlei(:) = psftq(:) * xlstt
338  zsubl(:) = psftq(:)
339 ELSEWHERE
340  zle(:) = psftq(:) * xlvtt
341  zlei(:) = 0.0
342  zsubl(:) = 0.0
343 END WHERE
344 !
345 zlwup(:)=(1.-pemis(:))*plw(:)+pemis(:)*xstefan*ptsurf(:)**4
346 !
347  CALL surface_ri(ptsurf,pqsurf,zexns,zexna,pta,pqa,pzref, puref, zdircoszw,zwind,zri)
348 
349  CALL surface_aero_cond(zri, pzref, puref, zwind, pz0, pz0h, zac, zra, zch)
350 
351  CALL surface_cd(zri, pzref, puref, pz0, pz0h, zcd, zcdn)
352 
353  CALL diag_inline_ideal_n(dgo, d, dc, ptstep, pta, ptsurf, &
354  zqa, ppa, pps, prhoa, pu, pv, pzref, puref, &
355  prain, psnow, zcd, zcdn, zch, zri, zhu, pz0, &
356  pz0h, pqsurf, psfth, psftq, psfu, psfv, &
357  pdir_sw, psca_sw, plw, pdir_alb, psca_alb, &
358  zle, zlei, zsubl, zlwup )
359 !
360 IF (lhook) CALL dr_hook('COUPLING_IDEAL_FLUX',1,zhook_handle)
361 !
362 !-------------------------------------------------------------------------------
363 CONTAINS
364 !
365 SUBROUTINE temp_forc_dists (PTIMEIN,PSTEP,KFORC,PTIMES,KHOUR,PALPHA)
366 !
367 IMPLICIT NONE
368 !
369 REAL, INTENT(IN) :: PTIMEIN
370 REAL, INTENT(IN) :: PSTEP
371 INTEGER, INTENT(IN) :: KFORC
372 REAL, DIMENSION(:), INTENT(IN) :: PTIMES
373 INTEGER, INTENT(OUT):: KHOUR
374 REAL, INTENT(OUT):: PALPHA
375 !
376 INTEGER :: JT
377 REAL :: ZTIMEIN
378 REAL(KIND=JPRB) :: ZHOOK_HANDLE
379 !
380 IF (lhook) CALL dr_hook('COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS',0,zhook_handle)
381 !
382 ztimein = ptimein
383 !
384 IF (ptimes(kforc)==xundef) THEN
385  khour = 1
386  palpha = 0.
387 ELSEIF (ztimein<ptimes(1).OR.ztimein>ptimes(kforc)) THEN
388  WRITE(*,*) 'COUPLING_IDEAL_FLUX', ztimein, ptimes(1), ptimes(kforc)
389  CALL abor1_sfx("COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS: PTIMEC OUT OF BOUNDS!!!")
390 ELSEIF (ztimein==ptimes(kforc)) THEN
391  khour = kforc
392  palpha = 0.
393 ELSE
394  DO jt = kforc,1,-1
395  IF (ptimein.GE.ptimes(jt)) THEN
396  khour = jt
397  EXIT
398  ENDIF
399  ENDDO
400  palpha = (ptimein-ptimes(khour)) / (ptimes(khour+1)-ptimes(khour))
401 ENDIF
402 !
403 IF (lhook) CALL dr_hook('COUPLING_IDEAL_FLUX:TEMP_FORC_DISTS',1,zhook_handle)
404 !
405 END SUBROUTINE temp_forc_dists
406 !
407 END SUBROUTINE coupling_ideal_flux
real, dimension(:,:), allocatable xsfts
real, save xcpd
Definition: modd_csts.F90:63
subroutine surface_ri(PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PDIRCOSZW, PVMOD, PRI)
Definition: surface_ri.F90:8
real, save xstefan
Definition: modd_csts.F90:59
subroutine temp_forc_dists(PTIMEIN, PSTEP, KFORC, PTIMES, KHOUR, PALPHA)
character(len=5) custartype
real, save xlvtt
Definition: modd_csts.F90:70
real, save xpi
Definition: modd_csts.F90:43
real, dimension(:), allocatable xtimet
real, save xlstt
Definition: modd_csts.F90:71
real, dimension(:), allocatable xtsrad
real, save xkarman
Definition: modd_csts.F90:48
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)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
real, save xrd
Definition: modd_csts.F90:62
real, dimension(:), allocatable xsfth
subroutine surface_aero_cond(PRI, PZREF, PUREF, PVMOD, PZ0, PZ0H, PAC, PRA, PCH)
real, dimension(:), allocatable xsfco2
integer, parameter jprb
Definition: parkind1.F90:32
real, save xday
Definition: modd_csts.F90:45
subroutine surface_cd(PRI, PZREF, PUREF, PZ0EFF, PZ0H, PCD, PCDN)
Definition: surface_cd.F90:8
logical lhook
Definition: yomhook.F90:15
subroutine coupling_ideal_flux(DGO, D, DC, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
real, dimension(:), allocatable xtimef
real, dimension(:), allocatable xustar
real, save xtt
Definition: modd_csts.F90:66
real, save xp00
Definition: modd_csts.F90:57
real, dimension(:), allocatable xsftq