SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
modi_gltools_chkinp.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 !GLT_LIC The GELATO model is a seaice model used in stand-alone or embedded mode.
6 !GLT_LIC It has been developed by Meteo-France. The holder of GELATO is Meteo-France.
7 !GLT_LIC
8 !GLT_LIC This software is governed by the CeCILL-C license under French law and biding
9 !GLT_LIC by the rules of distribution of free software. See the CeCILL-C_V1-en.txt
10 !GLT_LIC (English) and CeCILL-C_V1-fr.txt (French) for details. The CeCILL is a free
11 !GLT_LIC software license, explicitly compatible with the GNU GPL
12 !GLT_LIC (see http://www.gnu.org/licenses/license-list.en.html#CeCILL)
13 !GLT_LIC
14 !GLT_LIC The CeCILL-C licence agreement grants users the right to modify and re-use the
15 !GLT_LIC software governed by this free software license. The exercising of this right
16 !GLT_LIC is conditional upon the obligation to make available to the community the
17 !GLT_LIC modifications made to the source code of the software so as to contribute to
18 !GLT_LIC its evolution.
19 !GLT_LIC
20 !GLT_LIC In consideration of access to the source code and the rights to copy, modify
21 !GLT_LIC and redistribute granted by the license, users are provided only with a limited
22 !GLT_LIC warranty and the software's author, the holder of the economic rights, and the
23 !GLT_LIC successive licensors only have limited liability. In this respect, the risks
24 !GLT_LIC associated with loading, using, modifying and/or developing or reproducing the
25 !GLT_LIC software by the user are brought to the user's attention, given its Free
26 !GLT_LIC Software status, which may make it complicated to use, with the result that its
27 !GLT_LIC use is reserved for developers and experienced professionals having in-depth
28 !GLT_LIC computer knowledge. Users are therefore encouraged to load and test the
29 !GLT_LIC suitability of the software as regards their requirements in conditions enabling
30 !GLT_LIC the security of their systems and/or data to be ensured and, more generally, to
31 !GLT_LIC use and operate it in the same conditions of security.
32 !GLT_LIC
33 !GLT_LIC The GELATO sofware is cureently distibuted with the SURFEX software, available at
34 !GLT_LIC http://www.cnrm.meteo.fr/surfex. The fact that you download the software deemed that
35 !GLT_LIC you had knowledge of the CeCILL-C license and that you accept its terms.
36 !GLT_LIC Attempts to use this software in a way not complying with CeCILL-C license
37 !GLT_LIC may lead to prosecution.
38 !GLT_LIC
39 ! =======================================================================
40 ! ====================== MODULE modi_gltools_chkinp =======================
41 ! =======================================================================
42 !
43 ! Goal:
44 ! -----
45 ! This module contains a subroutine that prints for every glt_gelato
46 ! input field :
47 ! - global minimum
48 ! - global maximum
49 ! - global average (no weighing with grid cell surfaces)
50 ! - values for every field at a specified grid point
51 ! Note (for further development). Compared to modi_gltools_chkout, the
52 ! name of the list of input fields (yfld) is different from that of
53 ! glt_output fields in chkout.
54 !
55 ! Created : 2003/12 (D. Salas y Melia)
56 ! Modified: 2008/12 (D. Salas y Melia) rewriting
57 ! Modified: 2009/08 (D. Salas y Melia) double or single physics
58 ! Modified: 2012/11 (D. Salas y Melia) parallelism & super-type
59 ! Modified: 2014/01 (D. Salas y Melia) use standard wrivai for writing
60 !
61 ! ------------------- BEGIN MODULE modi_gltools_chkinp --------------------
62 !
63 !THXS_SFX!MODULE modi_gltools_chkinp
64 !THXS_SFX!INTERFACE
65 !THXS_SFX!!
66 !THXS_SFX!SUBROUTINE gltools_chkinp( kdate,tpglt )
67 !THXS_SFX!!
68 !THXS_SFX! USE modd_types_glt
69 !THXS_SFX! INTEGER, INTENT(in) :: &
70 !THXS_SFX! kdate
71 !THXS_SFX! TYPE(t_glt), INTENT(in) :: &
72 !THXS_SFX! tpglt
73 !THXS_SFX!END SUBROUTINE gltools_chkinp
74 !THXS_SFX!!
75 !THXS_SFX!END INTERFACE
76 !THXS_SFX!END MODULE modi_gltools_chkinp
77 !
78 ! -------------------- END MODULE modi_gltools_chkinp ---------------------
79 !
80 !
81 ! -----------------------------------------------------------------------
82 ! ------------------------- SUBROUTINE gltools_chkinp ---------------------------
83 !
84 ! * Subroutine that prints mini, maxi and average of every Gelato input
85 ! field, plus field values at one specified grid point.
86 !
87 SUBROUTINE gltools_chkinp( kdate,tpglt )
88 !
89  USE modd_types_glt
90  USE modd_glt_param
91  USE modi_gltools_nwords
92  USE modi_gltools_strsplit
94  USE lib_mpp
95  IMPLICIT none
96 !
97 ! .. Dummy arguments
98 !
99  INTEGER, INTENT(in) :: &
100  kdate
101  TYPE(t_glt), INTENT(in) :: &
102  tpglt
103 !
104 ! .. Local variables
105 !
106  LOGICAL :: &
107  y3d,y3dd,ydo
108  CHARACTER(2) :: &
109  ynum
110  CHARACTER(80) :: &
111  ystep,yfile
112  CHARACTER(200) :: &
113  yfld
114  CHARACTER(80), DIMENSION(:), ALLOCATABLE :: &
115  ylistfld
116  INTEGER :: &
117  infld,imonth,jf,jk
118  REAL :: &
119  zofac,zmin,zmax,zsum
120  REAL, DIMENSION(SIZE(tpglt%dom,1),SIZE(tpglt%dom,2)) :: &
121  zwork2
122  REAL, DIMENSION(SIZE(tpglt%atm_ice,1),SIZE(tpglt%dom,1),SIZE(tpglt%dom,2)) :: &
123  zwork3
124  REAL, DIMENSION(SIZE(tpglt%sit_d,1),SIZE(tpglt%dom,1),SIZE(tpglt%dom,2)) :: &
125  zwork3d
126  REAL, DIMENSION(nxglo,nyglo) :: &
127  zbathy
128  TYPE(t_def) :: &
129  tznam
130 !
131 !
132 ! 1. Initialisations
133 ! ===================
134 !
135  IF ( nprinto>=2 ) THEN
136 !
137 ! .. List of all fields to be analysed (in a single string variable)
138 ! The user can change this list at will, provided that:
139 ! - the length of this string (named yallfld) is less than
140 ! the declared value
141 ! - every word in this string is associated to an action in
142 ! the case construct that follows.
143 !
144  IF ( nnflxin==0 ) THEN
145  yfld='pbat pqml pqoc ptml psml pssh puml pvml &
146 & plip psop pztx pmty &
147 & pnsfm pdflm pswam pevam'
148  ELSE
149  yfld='pbat pqml pqoc ptml psml pssh puml pvml &
150 & plip psop pztx pmty &
151 & pnsfi pdfli pswai pevai pnsfw pdflw pswaw pevaw'
152  ENDIF
153 !
154  IF ( ntd/=0 ) THEN
155  yfld = trim(yfld) // ' asn fsi hsi hsn rsn tsf ssi age'
156  ENDIF
157 !
158 ! .. Get number of words in yfld, then get the list of fields in a vector
159 !
160  infld = gltools_nwords( yfld )
161  ALLOCATE( ylistfld(infld) )
162 !
163  ylistfld = gltools_strsplit( yfld,infld )
164 !
165 ! .. Surface grid factor
166 !
167  zofac = 1. / xdomsrf_g
168 !
169 !
170 !
171 ! 2. Print information
172 ! =====================
173 !
174 ! 2.1. General prints
175 ! --------------------
176 !
177  IF ( lwg ) THEN
178  WRITE(noutlu,*)
179  WRITE(noutlu,*) &
180  '===================== Control Gelato input data ' // &
181  '====================='
182 !
183  WRITE(noutlu,*) 'First Time-Step :',tpglt%ind%beg
184  WRITE(noutlu,*) 'Current Time-Step:',tpglt%ind%cur
185  WRITE(noutlu,*) 'Last Time-Step :',tpglt%ind%end
186 !
187  WRITE(noutlu,*)
188  WRITE(noutlu,*) &
189  ' minimum maximum average'
190  WRITE(noutlu,*) &
191  ' ============ ============ ============'
192  ENDIF
193 !
194 !
195 ! 2.2. Loop on fields
196 ! --------------------
197 !
198  DO jf=1,infld
199 !
200 ! .. Determine to which field the input label is associated
201 !
202  y3d = .false.
203  y3dd = .false.
204 !
205  IF ( trim(ylistfld(jf))=='pbat' ) THEN
206  zwork2(:,:) = tpglt%bat(:,:)
207  ELSE IF ( trim(ylistfld(jf))=='pqml' ) THEN
208  zwork2(:,:) = tpglt%oce_all(:,:)%qml
209  ELSE IF ( trim(ylistfld(jf))=='pqoc' ) THEN
210  zwork2(:,:) = tpglt%oce_all(:,:)%qoc
211  ELSE IF ( trim(ylistfld(jf))=='ptml' ) THEN
212  zwork2(:,:) = tpglt%oce_all(:,:)%tml
213  ELSE IF ( trim(ylistfld(jf))=='psml' ) THEN
214  zwork2(:,:) = tpglt%oce_all(:,:)%sml
215  ELSE IF ( trim(ylistfld(jf))=='pssh' ) THEN
216  zwork2(:,:) = tpglt%oce_all(:,:)%ssh
217  ELSE IF ( trim(ylistfld(jf))=='puml' ) THEN
218  zwork2(:,:) = tpglt%oce_all(:,:)%uml
219  ELSE IF ( trim(ylistfld(jf))=='pvml' ) THEN
220  zwork2(:,:) = tpglt%oce_all(:,:)%vml
221  ELSE IF ( trim(ylistfld(jf))=='plip' ) THEN
222  zwork2(:,:) = tpglt%atm_all(:,:)%lip
223  ELSE IF ( trim(ylistfld(jf))=='psop' ) THEN
224  zwork2(:,:) = tpglt%atm_all(:,:)%sop
225  ELSE IF ( trim(ylistfld(jf))=='pztx' ) THEN
226  zwork2(:,:) = tpglt%atm_all(:,:)%ztx
227  ELSE IF ( trim(ylistfld(jf))=='pmty' ) THEN
228  zwork2(:,:) = tpglt%atm_all(:,:)%mty
229  ELSE IF ( trim(ylistfld(jf))=='pnsfm' ) THEN
230  zwork2(:,:) = tpglt%atm_mix(1,:,:)%nsf
231  ELSE IF ( trim(ylistfld(jf))=='pdflm' ) THEN
232  zwork2(:,:) = tpglt%atm_mix(1,:,:)%dfl
233  ELSE IF ( trim(ylistfld(jf))=='pswam' ) THEN
234  zwork2(:,:) = tpglt%atm_mix(1,:,:)%swa
235  ELSE IF ( trim(ylistfld(jf))=='pevam' ) THEN
236  zwork2(:,:) = tpglt%atm_mix(1,:,:)%eva
237  ELSE IF ( trim(ylistfld(jf))=='pnsfw' ) THEN
238  zwork2(:,:) = tpglt%atm_wat(:,:)%nsf
239  ELSE IF ( trim(ylistfld(jf))=='pdflw' ) THEN
240  zwork2(:,:) = tpglt%atm_wat(:,:)%dfl
241  ELSE IF ( trim(ylistfld(jf))=='pswaw' ) THEN
242  zwork2(:,:) = tpglt%atm_wat(:,:)%swa
243  ELSE IF ( trim(ylistfld(jf))=='pevaw' ) THEN
244  zwork2(:,:) = tpglt%atm_wat(:,:)%eva
245  ELSE IF ( trim(ylistfld(jf))=='pnsfi' ) THEN
246  y3d = .true.
247  zwork3(:,:,:) = tpglt%atm_ice(:,:,:)%nsf
248  ELSE IF ( trim(ylistfld(jf))=='pdfli' ) THEN
249  y3d = .true.
250  zwork3(:,:,:) = tpglt%atm_ice(:,:,:)%dfl
251  ELSE IF ( trim(ylistfld(jf))=='pswai' ) THEN
252  y3d = .true.
253  zwork3(:,:,:) = tpglt%atm_ice(:,:,:)%swa
254  ELSE IF ( trim(ylistfld(jf))=='pevai' ) THEN
255  y3d = .true.
256  zwork3(:,:,:) = tpglt%atm_ice(:,:,:)%eva
257  ELSE IF ( trim(ylistfld(jf))=='asn' ) THEN
258  y3dd = .true.
259  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%asn
260  ELSE IF ( trim(ylistfld(jf))=='fsi' ) THEN
261  y3dd = .true.
262  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%fsi
263  ELSE IF ( trim(ylistfld(jf))=='hsi' ) THEN
264  y3dd = .true.
265  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%hsi
266  ELSE IF ( trim(ylistfld(jf))=='hsn' ) THEN
267  y3dd = .true.
268  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%hsn
269  ELSE IF ( trim(ylistfld(jf))=='rsn' ) THEN
270  y3dd = .true.
271  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%rsn
272  ELSE IF ( trim(ylistfld(jf))=='tsf' ) THEN
273  y3dd = .true.
274  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%tsf
275  ELSE IF ( trim(ylistfld(jf))=='ssi' ) THEN
276  y3dd = .true.
277  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%ssi
278  ELSE IF ( trim(ylistfld(jf))=='age' ) THEN
279  y3dd = .true.
280  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%age
281  ELSE IF ( trim(ylistfld(jf))=='vmp' ) THEN
282  y3dd = .true.
283  zwork3d(:,:,:) = tpglt%sit_d(:,:,:)%vmp
284  ELSE
285  IF ( lwg ) THEN
286  WRITE(noutlu,*) '**** WARNING ****'
287  WRITE(noutlu,*) ' In routine imod_tools_chkinp'
288  WRITE(noutlu,*) ' ==> field ' // trim(ylistfld(jf)) // &
289  ' is unknown.'
290  ENDIF
291  ENDIF
292 !
293 ! .. Print information
294 !
295  IF ( y3d ) THEN
296  DO jk=1,nnflxin
297  zmin = minval( zwork3(jk,:,:),mask=tpglt%dom%tmk==1 )
298  zmax = maxval( zwork3(jk,:,:),mask=tpglt%dom%tmk==1 )
299  zsum = sum( zwork3(jk,:,:)*tpglt%dom%srf ) * zofac
300  CALL mpp_min(zmin)
301  CALL mpp_max(zmax)
302  CALL mpp_sum(zsum)
303  IF ( lwg ) THEN
304  WRITE(noutlu,1020) jk
305  WRITE(noutlu,1010) adjustl(ylistfld(jf)),zmin,zmax,zsum
306  ENDIF
307  END DO
308  ELSE IF ( y3dd ) THEN
309  DO jk=1,ntd
310  zmin = minval( zwork3d(jk,:,:),mask=tpglt%dom%tmk==1 )
311  zmax = maxval( zwork3d(jk,:,:),mask=tpglt%dom%tmk==1 )
312  zsum = sum( zwork3d(jk,:,:)*tpglt%dom%srf ) * zofac
313  CALL mpp_min(zmin)
314  CALL mpp_max(zmax)
315  CALL mpp_sum(zsum)
316  IF ( lwg ) THEN
317  WRITE(noutlu,1020) jk
318  WRITE(noutlu,1010) adjustl(ylistfld(jf)),zmin,zmax,zsum
319  ENDIF
320  END DO
321  ELSE
322  zmin = minval( zwork2(:,:),mask=tpglt%dom%tmk==1 )
323  zmax = maxval( zwork2(:,:),mask=tpglt%dom%tmk==1 )
324  zsum = sum( zwork2(:,:)*tpglt%dom%srf ) * zofac
325  IF ( lwg ) WRITE(noutlu,1010) adjustl(ylistfld(jf)),zmin,zmax,zsum
326  ENDIF
327 !
328  END DO
329 !
330  IF ( lwg ) THEN
331  WRITE(noutlu,*)
332  WRITE(noutlu,*) &
333  '===================================================================='
334  WRITE(noutlu,*)
335  ENDIF
336  DEALLOCATE( ylistfld )
337 !
338  ENDIF
339 !
340 !
341 !
342 ! 3. Save gelato input fields
343 ! ============================
344 !
345  ydo = nsavinp==1 .AND. lwg
346 !
347  IF ( ydo ) THEN
348  WRITE(noutlu,*) 'CHKINP: Saving Gelato input data'
349  WRITE(noutlu,*) '=================================='
350  WRITE(noutlu,*) ' '
351 !
352 ! .. Compute file name
353 !
354  imonth = ( kdate - 10000*( kdate/10000 ) ) / 100
355  WRITE( ystep,fmt='(I7)' ) tpglt%ind%cur
356  WRITE( yfile,fmt='("/inpfld_",I2.2,"_",A)' ) &
357  imonth,trim( adjustl(ystep) )
358  yfile = trim(ciopath) // trim( adjustl(yfile) )
359 !
360 ! .. Open and write file
361 !
362  OPEN( unit=nsavlu, file=yfile, form='UNFORMATTED' )
363  ENDIF
364 !
365  IF ( nsavinp==1 ) THEN
366  tznam = t_def( "","","BATHYOCE","","T","SCALAR" )
367  CALL gltools_wrivai( tznam,tpglt%bat,kunit=nsavlu,kdbl=1 )
368  tznam = t_def( "","","OIQMLQML","","T","SCALAR" )
369  CALL gltools_wrivai( tznam,tpglt%oce_all%qml,kunit=nsavlu,kdbl=1 )
370  tznam = t_def( "","","OIHEFHEF","","T","SCALAR" )
371  CALL gltools_wrivai( tznam,tpglt%oce_all%qoc,kunit=nsavlu,kdbl=1 )
372  tznam = t_def( "","","OITMLTML","","T","SCALAR" )
373  CALL gltools_wrivai( tznam,tpglt%oce_all%tml,kunit=nsavlu,kdbl=1 )
374  tznam = t_def( "","","OISMLSML","","T","SCALAR" )
375  CALL gltools_wrivai( tznam,tpglt%oce_all%sml,kunit=nsavlu,kdbl=1 )
376  tznam = t_def( "","","OISSHSSH","","T","SCALAR" )
377  CALL gltools_wrivai( tznam,tpglt%oce_all%ssh,kunit=nsavlu,kdbl=1 )
378  tznam = t_def( "","","OIUMLUML","","U","VECTOR" )
379  CALL gltools_wrivai( tznam,tpglt%oce_all%uml,kunit=nsavlu,kdbl=1 )
380  tznam = t_def( "","","OIVMLVML","","V","VECTOR" )
381  CALL gltools_wrivai( tznam,tpglt%oce_all%vml,kunit=nsavlu,kdbl=1 )
382  tznam = t_def( "","","AILIPLIP","","T","SCALAR" )
383  CALL gltools_wrivai( tznam,tpglt%atm_all%lip,kunit=nsavlu,kdbl=1 )
384  tznam = t_def( "","","AISOPSOP","","T","SCALAR" )
385  CALL gltools_wrivai( tznam,tpglt%atm_all%sop,kunit=nsavlu,kdbl=1 )
386  tznam = t_def( "","","AIZTXZTX","","U","VECTOR" )
387  CALL gltools_wrivai( tznam,tpglt%atm_all%ztx,kunit=nsavlu,kdbl=1 )
388  tznam = t_def( "","","AIMTYMTY","","V","VECTOR" )
389  CALL gltools_wrivai( tznam,tpglt%atm_all%mty,kunit=nsavlu,kdbl=1 )
390 !
391  IF ( nnflxin/=0 ) THEN
392  DO jk=1,nnflxin
393  WRITE(ynum,'(I2.2)') jk
394  tznam = t_def( "","","AINSFI"//ynum,"","T","SCALAR" )
395  CALL gltools_wrivai( tznam,tpglt%atm_ice(jk,:,:)%nsf,kunit=nsavlu,kdbl=1 )
396  tznam = t_def( "","","AIDFLI"//ynum,"","T","SCALAR" )
397  CALL gltools_wrivai( tznam,tpglt%atm_ice(jk,:,:)%dfl,kunit=nsavlu,kdbl=1 )
398  tznam = t_def( "","","AISWAI"//ynum,"","T","SCALAR" )
399  CALL gltools_wrivai( tznam,tpglt%atm_ice(jk,:,:)%swa,kunit=nsavlu,kdbl=1 )
400  tznam = t_def( "","","AIEVAI"//ynum,"","T","SCALAR" )
401  CALL gltools_wrivai( tznam,tpglt%atm_ice(jk,:,:)%eva,kunit=nsavlu,kdbl=1 )
402  END DO
403 !
404  tznam = t_def( "","","AINSFWAT","","T","SCALAR" )
405  CALL gltools_wrivai( tznam,tpglt%atm_wat%nsf,kunit=nsavlu,kdbl=1 )
406  tznam = t_def( "","","AIDFLWAT","","T","SCALAR" )
407  CALL gltools_wrivai( tznam,tpglt%atm_wat%dfl,kunit=nsavlu,kdbl=1 )
408  tznam = t_def( "","","AISWAWAT","","T","SCALAR" )
409  CALL gltools_wrivai( tznam,tpglt%atm_wat%swa,kunit=nsavlu,kdbl=1 )
410  tznam = t_def( "","","AIEVAWAT","","T","SCALAR" )
411  CALL gltools_wrivai( tznam,tpglt%atm_wat%eva,kunit=nsavlu,kdbl=1 )
412 !
413  ELSE
414 !
415  tznam = t_def( "","","AINSFMIX","","T","SCALAR" )
416  CALL gltools_wrivai( tznam,tpglt%atm_mix(1,:,:)%nsf,kunit=nsavlu,kdbl=1 )
417  tznam = t_def( "","","AIDFLMIX","","T","SCALAR" )
418  CALL gltools_wrivai( tznam,tpglt%atm_mix(1,:,:)%dfl,kunit=nsavlu,kdbl=1 )
419  tznam = t_def( "","","AISWAMIX","","T","SCALAR" )
420  CALL gltools_wrivai( tznam,tpglt%atm_mix(1,:,:)%swa,kunit=nsavlu,kdbl=1 )
421  tznam = t_def( "","","AIEVAMIX","","T","SCALAR" )
422  CALL gltools_wrivai( tznam,tpglt%atm_mix(1,:,:)%eva,kunit=nsavlu,kdbl=1 )
423 !
424  ENDIF
425 !
426  IF ( ntd/=0 ) THEN
427  DO jk=1,ntd
428  WRITE(ynum,'(I2.2)') jk
429  tznam = t_def( "","","ASNASN"//ynum,"","T","SCALAR" )
430  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%asn,kunit=nsavlu,kdbl=1 )
431  tznam = t_def( "","","FSIFSI"//ynum,"","T","SCALAR" )
432  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%fsi,kunit=nsavlu,kdbl=1 )
433  tznam = t_def( "","","HSIHSI"//ynum,"","T","SCALAR" )
434  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%hsi,kunit=nsavlu,kdbl=1 )
435  tznam = t_def( "","","HSNHSN"//ynum,"","T","SCALAR" )
436  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%hsn,kunit=nsavlu,kdbl=1 )
437  tznam = t_def( "","","RSNRSN"//ynum,"","T","SCALAR" )
438  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%rsn,kunit=nsavlu,kdbl=1 )
439  tznam = t_def( "","","TSFTSF"//ynum,"","T","SCALAR" )
440  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%tsf,kunit=nsavlu,kdbl=1 )
441  tznam = t_def( "","","SSISSI"//ynum,"","T","SCALAR" )
442  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%ssi,kunit=nsavlu,kdbl=1 )
443  tznam = t_def( "","","AGEAGE"//ynum,"","T","SCALAR" )
444  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%age,kunit=nsavlu,kdbl=1 )
445  tznam = t_def( "","","VMPVMP"//ynum,"","T","SCALAR" )
446  CALL gltools_wrivai( tznam,tpglt%sit_d(jk,:,:)%vmp,kunit=nsavlu,kdbl=1 )
447  END DO
448  ENDIF
449 !
450  ENDIF
451 !
452  IF ( ydo ) CLOSE(nsavlu)
453 !
454 !
455 !
456 ! 4. Formats
457 ! ===========
458 !
459 1010 FORMAT( 1x,a7,e12.5,4x,e12.5,4x,e12.5 )
460 1020 FORMAT( "Category",i2.2,":" )
461 !
462 !
463 END SUBROUTINE gltools_chkinp
464 !
465 ! -------------------- END SUBROUTINE gltools_chkinp --------------------
466 ! -----------------------------------------------------------------------
character(80) function, dimension(knword) gltools_strsplit(hval, knword)
integer function gltools_nwords(hval)
subroutine gltools_chkinp(kdate, tpglt)