SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
modi_gltools_readnam.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_readnam ======================
41 ! =======================================================================
42 !
43 ! Goal:
44 ! -----
45 ! Reads model parameters from a "namelist" and compute other parameters
46 ! from those read.
47 !
48 ! Created : 2004/01 (D. Salas y Melia)
49 ! Modified: 2015/07 (S. Senesi & D. Salas y Melia) Insertion in Surfex
50 !
51 ! -------------------- BEGIN MODULE modi_gltools_readnam ------------------
52 !
53 !THXS_SFX!MODULE modi_gltools_readnam
54 !THXS_SFX!INTERFACE
55 !THXS_SFX!!
56 !THXS_SFX!SUBROUTINE gltools_readnam(hmandatory,kluout)
57 !THXS_SFX!LOGICAL, INTENT(IN),OPTIONAL :: &
58 !THXS_SFX! hmandatory ! Is a gltpar file mandatory ?
59 !THXS_SFX!INTEGER, INTENT(IN),OPTIONAL :: &
60 !THXS_SFX! kluout ! imposed output logical unit ?
61 !THXS_SFX!END SUBROUTINE gltools_readnam
62 !THXS_SFX!!
63 !THXS_SFX!END INTERFACE
64 !THXS_SFX!END MODULE modi_gltools_readnam
65 !
66 ! ------------------- END MODULE modi_gltools_readnam ---------------------
67 !
68 !
69 ! -----------------------------------------------------------------------
70 ! ------------------------- SUBROUTINE gltools_readnam --------------------------
71 !
72 SUBROUTINE gltools_readnam(hmandatory,kluout)
73 !
76 USE modi_gltools_nextval
77 USE modi_gltools_nwords
78 USE modi_gltools_strsplit
79 !
80 IMPLICIT NONE
81 !
82 LOGICAL, INTENT(IN),OPTIONAL :: &
83  hmandatory ! Is a gltpar file mandatory ?
84 INTEGER, INTENT(IN),OPTIONAL :: &
85  kluout ! imposed output logical unit ?
86 
87  CHARACTER(1) :: &
88  ytag
89  CHARACTER(6), PARAMETER :: &
90  ypinpfile='gltpar'
91  CHARACTER(80) :: &
92  ypar,yval,yinsfld
93  CHARACTER(80), DIMENSION(:), ALLOCATABLE :: &
94  ylistfld
95  CHARACTER(1000) :: &
96  yfldin
97 INTEGER :: &
98  iparlu,iok,infld,jl,icount, ierr
99 LOGICAL :: &
100  gmandatory,gread
101 INTEGER, DIMENSION(:), ALLOCATABLE :: &
102  ilistfound
103 REAL :: zjl
104 !
105 !
106 !
107 ! 1. Initializations
108 ! ===================
109 !
110 ! Init default values
111 !
112 dttave= 365. ! days
113 gread=.true.
114 !
115 !
116 ! .. Try to open the parameter file
117 !
118 iparlu = 1
119 !
120 IF (present(hmandatory)) THEN
121  gmandatory = hmandatory
122 ELSE
123  gmandatory = .true.
124 ENDIF
125 !
126 OPEN( unit=iparlu, file=trim(adjustl(ypinpfile)), status='OLD', &
127  form='FORMATTED' , err= 230, iostat=ierr)
128 230 CONTINUE
129 IF (ierr /= 0 ) THEN ! File not found , or any other issue
130  IF ( gmandatory ) THEN
131  WRITE(*,*) "*** GELATO/readnam : issue opening gltpar "
132  WRITE(*,*) 'We stop.'
133  stop
134  ELSE
135  gread=.false.
136  ENDIF
137 ENDIF
138 !
139 IF (gread) THEN
140 !
141 ! WRITE(*,*) "*** GELATO/readnam : gltpar found"
142 ! Code below is purposely not indented , for easy comparison with previous version
143 !
144 ! .. Introductory message
145 !
146  IF (lp1) WRITE(*,*) ' ----------------------------------------'
147  IF (lp1) WRITE(*,*) ' glt_gelato : READING NAMELIST ' // trim(adjustl(ypinpfile))
148  IF (lp1) WRITE(*,*) ' ----------------------------------------'
149 !
150 ! .. The list of all parameters available from glt_gelato
151 ! (for definitions of these parameters, see dmod_param)
152 !
153  yfldin= &
154  'nmkinit nrstout nrstgl4 nthermo ndynami &
155 & nadvect ntimers ndyncor ncdlssh niceage &
156 & nicesal nmponds nsnwrad nleviti nsalflx &
157 & nextqoc nicesub cnflxin'
158  yfldin=trim(yfldin) // ' ' // &
159  'cfsidmp chsidmp &
160 & xfsidmpeft xhsidmpeft'
161  yfldin=trim(yfldin) // ' ' // &
162  'cdiafmt cdialev navedia ninsdia ndiamax &
163 & cinsfld nsavinp nsavout nupdbud nprinto nprlast'
164  yfldin=trim(yfldin) // ' ' // &
165  'nidate niter dtt'
166  yfldin=trim(yfldin) // ' ' // &
167  'nt thick'
168  yfldin=trim(yfldin) // ' ' // &
169  'nilay nslay xh0 xh1 xh2 xh3 xh4'
170  yfldin=trim(yfldin) // ' ' // &
171  'ntstp ndte'
172  yfldin=trim(yfldin) // ' ' // &
173  'xfsimax xicethcr xhsimin'
174  yfldin=trim(yfldin) // ' ' // &
175  'alblc xlmelt xswhdfr albyngi albimlt albsmlt albsdry'
176  yfldin=trim(yfldin) // ' ' // &
177  'ngrdlu nsavlu nrstlu n0vilu n0valu n2vilu n2valu nxvilu nxvalu &
178 & nibglu nspalu noutlu ntimlu'
179  yfldin=trim(yfldin) // ' ' // &
180  'ciopath'
181 !
182 ! .. Initialize control arrays
183 !
184  infld=gltools_nwords( yfldin )
185  ALLOCATE( ylistfld(infld) )
186  ALLOCATE( ilistfound(infld) )
187  ylistfld = gltools_strsplit(yfldin,infld)
188  ilistfound = 0
189 !
190 !
191 !
192 ! 2. Read all model parameter
193 ! ============================
194 !
195  iok=0
196  icount=0
197 !
198  DO WHILE ( iok==0 )
199  CALL gltools_nextval( iparlu,ylistfld,ilistfound,iok,ypar,yval )
200 !
201 !
202 ! 2.1. Options to run glt_gelato
203 ! --------------------------
204 !
205  SELECT CASE ( trim(adjustl(ypar)) )
206 !
207  CASE('nmkinit') ; READ( yval,* ) nmkinit
208  CASE('nrstout') ; READ( yval,* ) nrstout
209  CASE('nrstgl4') ; READ( yval,* ) nrstgl4
210  CASE('nthermo') ; READ( yval,* ) nthermo
211  CASE('ndynami') ; READ( yval,* ) ndynami
212  CASE('nadvect') ; READ( yval,* ) nadvect
213  CASE('ntimers') ; READ( yval,* ) ntimers
214  CASE('ndyncor') ; READ( yval,* ) ndyncor
215  CASE('ncdlssh') ; READ( yval,* ) ncdlssh
216  CASE('niceage') ; READ( yval,* ) niceage
217  CASE('nicesal') ; READ( yval,* ) nicesal
218  CASE('nmponds') ; READ( yval,* ) nmponds
219  CASE('nsnwrad') ; READ( yval,* ) nsnwrad
220  CASE('nleviti') ; READ( yval,* ) nleviti
221  CASE('nsalflx') ; READ( yval,* ) nsalflx
222  CASE('nextqoc') ; READ( yval,* ) nextqoc
223  CASE('nicesub') ; READ( yval,* ) nicesub
224  CASE('cnflxin') ; READ( yval,* ) cnflxin
225 !
226 !
227 ! 2.2. Damping and restoring
228 ! ---------------------------
229 !
230  CASE('cfsidmp') ; READ( yval,*) cfsidmp
231  CASE('xfsidmpeft') ; READ( yval,*) xfsidmpeft
232  CASE('chsidmp') ; READ( yval,*) chsidmp
233  CASE('xhsidmpeft') ; READ( yval,*) xhsidmpeft
234 !
235 !
236 ! 2.3. Diagnostics glt_output
237 ! ------------------------
238 !
239  CASE('cdiafmt') ; READ( yval,* ) cdiafmt
240  CASE('cdialev') ; READ( yval,* ) cdialev
241  CASE('dttave') ; READ( yval,* ) dttave
242  CASE('navedia') ; READ( yval,* ) navedia
243  CASE('ninsdia') ; READ( yval,* ) ninsdia
244  CASE('ndiamax') ; READ( yval,* ) ndiamax
245  ! Caller program (e.g. Surfex) may have already allocate cinsfld
246  ! differently when settings Gelato hard defaults
247  IF (ALLOCATED(cinsfld)) DEALLOCATE(cinsfld)
248  ALLOCATE( cinsfld(ndiamax) )
249  cinsfld(:) = ''
250  CASE('cinsfld') ; READ( yval,* ) yinsfld
251  IF ( ALLOCATED(cinsfld) ) THEN
252  icount = icount + 1
253  cinsfld(icount) = yinsfld
254  ELSE
255  goto 200
256  ENDIF
257  CASE('nsavinp') ; READ( yval,* ) nsavinp
258  CASE('nsavout') ; READ( yval,* ) nsavout
259  CASE('nupdbud') ; READ( yval,* ) nupdbud
260  CASE('nprinto') ; READ( yval,* ) nprinto
261  CASE('nprlast') ; READ( yval,* ) nprlast
262 !
263 !
264 ! 2.4. Run date position and time step
265 ! ------------------------------------
266 !
267  CASE('nidate') ; READ( yval,* ) nidate
268  CASE('niter') ; READ( yval,* ) niter
269  CASE('dtt') ; READ( yval,* ) dtt
270 !
271 !
272 ! 2.5. Number of ice categories
273 ! -----------------------------
274 !
275  CASE('nt') ;
276  READ( yval,* ) nt ;
277  ! Caller program (e.g. Surfex) may have already allocate thick
278  ! differently when settings Gelato hard defaults
279  IF (ALLOCATED(thick)) DEALLOCATE(thick)
280  ALLOCATE( thick(nt+1) )
281  CASE('thick')
282  IF ( ALLOCATED(thick) ) THEN
283  READ( yval,*,end=100 ) thick
284  ELSE
285  goto 100
286  ENDIF
287 !
288 !
289 ! 2.6. Number of layers in the ice-snow slab
290 ! ------------------------------------------
291 !
292  CASE('nilay') ; READ( yval,* ) nilay
293  CASE('nslay') ; READ( yval,* ) nslay
294  CASE('xh0') ; READ( yval,* ) xh0
295  CASE('xh1') ; READ( yval,* ) xh1
296  CASE('xh2') ; READ( yval,* ) xh2
297  CASE('xh3') ; READ( yval,* ) xh3
298  CASE('xh4') ; READ( yval,* ) xh4
299 !
300 !
301 ! 2.7. Elastic Viscous-Plastic sea ice rheology parameters
302 ! ---------------------------------------------------------
303 !
304  CASE('ntstp') ; READ( yval,* ) ntstp
305  CASE('ndte') ; READ( yval,* ) ndte
306 !
307 !
308 ! 2.8. Limit Values for sea ice
309 ! ------------------------------
310 !
311  CASE('xfsimax') ; READ( yval,* ) xfsimax
312  CASE('xicethcr') ; READ( yval,* ) xicethcr
313  CASE('xhsimin') ; READ( yval,* ) xhsimin
314 !
315 !
316 ! 2.9. Parameterizations
317 ! -----------------------
318 !
319  CASE('alblc') ; READ( yval,* ) alblc
320  CASE('xlmelt') ; READ( yval,* ) xlmelt
321  CASE('xswhdfr') ; READ( yval,* ) xswhdfr
322  CASE('albyngi') ; READ( yval,* ) albyngi
323  CASE('albimlt') ; READ( yval,* ) albimlt
324  CASE('albsmlt') ; READ( yval,* ) albsmlt
325  CASE('albsdry') ; READ( yval,* ) albsdry
326 !
327 !
328 ! 2.10. Logical units
329 ! --------------------
330 !
331  CASE('ngrdlu') ; READ( yval,* ) ngrdlu
332  CASE('nsavlu') ; READ( yval,* ) nsavlu
333  CASE('nrstlu') ; READ( yval,* ) nrstlu
334  CASE('n0vilu') ; READ( yval,* ) n0vilu
335  CASE('n0valu') ; READ( yval,* ) n0valu
336  CASE('n2vilu') ; READ( yval,* ) n2vilu
337  CASE('n2valu') ; READ( yval,* ) n2valu
338  CASE('nxvilu') ; READ( yval,* ) nxvilu
339  CASE('nxvalu') ; READ( yval,* ) nxvalu
340  CASE('nibglu') ; READ( yval,* ) nibglu
341  CASE('nspalu') ; READ( yval,* ) nspalu
342  CASE('noutlu') ; READ( yval,* ) noutlu ; IF (present(kluout)) noutlu=kluout
343  CASE('ntimlu') ; READ( yval,* ) ntimlu
344 !
345 !
346 ! 2.11. Path to keep Gelato I/O fields
347 ! -------------------------------------
348 !
349  CASE('ciopath') ; READ( yval,* ) ciopath
350 !
351 !
352 ! 2.12. End of case select
353 ! -------------------------
354 !
355  CASE default
356  IF (lwg) WRITE(*,110) trim(ypar)
357 !
358  END SELECT
359  END DO
360 !
361 !
362 ! 2.13. Close the parameter file
363 ! -------------------------------
364 !
365  CLOSE(1)
366  DEALLOCATE( ilistfound )
367  DEALLOCATE( ylistfld )
368 !
369 ENDIF
370 !
371 !
372 ! 3. Parameters computed from previous set
373 ! ========================================
374 !
375 ! 3.1. Dimensions of exchanged variables
376 ! ---------------------------------------
377 !
378 SELECT CASE ( trim(cnflxin) )
379 !
380  CASE('mixed') ; nnflxin = 0
381  if (lp1) WRITE(*,*) 'We are using single physics (one input flux)'
382  CASE('double') ; nnflxin = 1
383  IF (lp1) WRITE(*,*) 'We are using double physics (two input fluxes)'
384  CASE('multi') ; nnflxin = nt
385  IF (lp1) WRITE(*,*) 'We are using multiple physics (one flux per ice cat + water)'
386  CASE default
387  IF (lp1) WRITE(*,*) 'We stop. Invalid parameter cnflxin = ' // trim(cnflxin) ; stop
388 !
389 END SELECT
390 !
391 !
392 ! 3.2. Number of layers in an ice/snow slab
393 ! -----------------------------------------
394 !
395 ! - nl : number of grid points in the ice+snow slab along the
396 ! vertical
397 !
398 nl = nilay + nslay
399 !
400 ! .. thickness of the different levels at t and w points (from top to bottom)
401 !
402 ! Caller program (e.g. Surfex) may have already allocate some
403 ! arrays differently when settings Gelato hard defaults
404 IF (ALLOCATED(sf3t)) DEALLOCATE(sf3t)
405 ALLOCATE( sf3t(nilay) )
406 IF (ALLOCATED(e3w)) DEALLOCATE(e3w)
407 ALLOCATE( e3w(nilay) )
408 !
409 ! .. thickness of the different levels at t points (from bottom to top)
410 !
411 IF (ALLOCATED(sf3tinv)) DEALLOCATE(sf3tinv)
412 ALLOCATE( sf3tinv(nilay) )
413 !
414 ! .. depth of the different inter-levels (from top to bottom)
415 !
416 IF (ALLOCATED(depth)) DEALLOCATE(depth)
417 ALLOCATE( depth(nilay+1) )
418 !
419 ! .. height of the different inter-levels (from bottom to top)
420 !
421 IF (ALLOCATED(height)) DEALLOCATE(height)
422 ALLOCATE( height(nilay+1) )
423 !
424 ! .. compute vertical scale factors at t points (sf3t) and w points (e3w)
425 !
426 DO jl=1,nilay
427  zjl=float(jl)
428 ! depth(jl)=-xh0+zjl*xh1+xh2*xh3*log( cosh((zjl-xh4)/xh3) )
429  sf3t(jl)=xh1+xh2*tanh( (zjl+0.5-xh4)/xh3 )
430  e3w(jl)=xh1+xh2*tanh( (zjl-xh4)/xh3 )
431 END DO
432 !
433 ! Ensure perfect normalization of sf3t (e3w is not necessarily normalized)
434 sf3t(:)=sf3t(:)/sum(sf3t)
435 !
436 ! Vertical scale factor at t points, but from bottom to top
437 DO jl=1,nilay
438  sf3tinv(jl) = sf3t(nilay+1-jl)
439 END DO
440 !
441 ! Level boundaries height from inferior water/ice interface
442 height(1)=0.
443 DO jl=2,nilay+1
444  height(jl) = height(jl-1) + sf3tinv(jl-1)
445 END DO
446 !
447 ! Ensure perfect normalization of height
448 height(:)=height(:)/height(nilay+1)
449 !
450 ! Depth of level boundaries from top air/ice interface or snow/ice interface
451 !zjl=FLOAT(nilay+1)
452 !depth(nilay+1)=-xh0+zjl*xh1+xh2*xh3*log( cosh((zjl-xh4)/xh3) )
453 depth(:) = 1.-height(:)
454 !
455 !
456 ! 3.3. Get diagnostics options
457 ! ----------------------------
458 !
459 SELECT CASE ( trim(cdiafmt) )
460 !
461  CASE('GELATO','VMAR5')
462  ndiap1=0 ; ndiap2=0 ; ndiap3=0 ; ndiapx=0
463  DO jl=1,len( trim(cdialev) )
464  ytag=cdialev(jl:jl)
465  SELECT CASE ( ytag )
466  CASE('1') ; ndiap1=1
467  CASE('2') ; ndiap2=1
468  CASE('3') ; ndiap3=1
469  CASE('x') ; ndiapx=1
470  CASE default
471  IF (lwg) THEN
472  WRITE(*,*) ' '
473  WRITE(*,*) ' glt_gelato FATAL ERROR'
474  WRITE(*,*) ' **********************'
475  WRITE(*,*) ' Diagnostic code = '//ytag//' in cdialev ignored.'
476  WRITE(*,*) ' (illegal with glt_output format = '//trim(cdiafmt)//')'
477  WRITE(*,*) ' We stop.'
478  ENDIF
479  stop
480  END SELECT
481  END DO
482  CASE('XIOS')
483  ndiap1=1 ; ndiap2=1 ; ndiap3=1 ; ndiapx=1
484  IF (lwg) THEN
485  WRITE(*,*) ' '
486  WRITE(*,*) ' Using XIOS for diagnostics output'
487  WRITE(*,*) ' '
488  ENDIF
489  CASE default
490  IF (lwg) THEN
491  WRITE(*,*) ' '
492  WRITE(*,*) ' glt_gelato FATAL ERROR'
493  WRITE(*,*) ' **********************'
494  WRITE(*,*) ' cdiafmt was set to '//cdiafmt//' in gltpar.'
495  WRITE(*,*) ' Only GELATO and VMAR5 are legal. We stop.'
496  ENDIF
497  stop
498 END SELECT
499 !
500 !
501 ! 3.4. Parameters for sea ice incremental remapping
502 ! --------------------------------------------------
503 !
504 ! .. Number of categories
505 !
506 ncat = nt
507 !
508 ! .. Number of ice layers
509 !
510 nilyr = nilay
511 !
512 ! .. Number of categories by number of ice layers
513 !
514 ntilay = ncat*nilyr
515 !
516 ! .. Number of advected tracers
517 !
518 na = nt*( niceage+nicesal+nmponds )
519 !
520 !
521 ! 3.5. Parameters for constraint
522 ! -------------------------------
523 !
524 ntd=0 ! Will disable sit_d array allocation and use of constraint data
525 IF ( trim(cfsidmp)=='DAMP' .OR. trim(cfsidmp)=='PRESCRIBE' ) THEN
526  ntd=1 ! Will enable sit_d array allocation and trigger constraint
527 ELSE IF ( trim(cfsidmp)/='NONE' ) THEN
528  WRITE(*,*) "cfsidmp must be 'DAMP' or 'PRESCRIBE'"
529  WRITE(*,*) " - You specified cfsidmp=" // trim(cfsidmp)
530  stop
531 ENDIF
532 !
533 IF ( trim(chsidmp)=='DAMP_ADD' .OR. trim(chsidmp)=='DAMP_FAC' .OR. &
534  trim(chsidmp)=='PRESCRIBE' ) THEN
535  ntd=1
536 ELSE IF ( trim(chsidmp)/='NONE' ) THEN
537  WRITE(*,*) "chsidmp must be 'DAMP_ADD', 'DAMP_FAC'' or 'PRESCRIBE'"
538  WRITE(*,*) " - You specified chsidmp=" // trim(chsidmp)
539  stop
540 ENDIF
541 RETURN
542 !
543 !
544 !
545 ! 4. Error messages
546 ! ==================
547 !
548 IF (lp1) WRITE(*,*) ' ---------------------------------------------------'
549 IF (lp1) WRITE(*,*) ' gelato : READING OF gltpar INPUT FILE COMPLETED '
550 IF (lp1) WRITE(*,*) ' ---------------------------------------------------'
551 !
552 100 CONTINUE
553 !
554 IF (lwg) THEN
555  WRITE(*,*) "*** GELATO/readnam : &
556 & dimension of 'thick' not consistent with nt, &
557 & or you declared 'thick' before 'nt' in gltpar"
558  WRITE(*,*) 'We stop.'
559 ENDIF
560 stop
561 !
562 200 CONTINUE
563 !
564 IF (lwg) THEN
565  WRITE(*,*) "*** GELATO/readnam : &
566 & dimension of 'cinsfld' not consistent with nt, &
567 & or you declared 'cinsfld' before 'ndiamax' in gltpar"
568  WRITE(*,*) 'We stop.'
569 ENDIF
570 stop
571 !
572 110 FORMAT("* GELATO/readnam : parameter '",a,"' ignored.")
573 !
574 END SUBROUTINE gltools_readnam
575 !
576 ! ---------------------- END SUBROUTINE gltools_readnam -------------------------
577 ! -----------------------------------------------------------------------
subroutine gltools_readnam(hmandatory, kluout)
character(80) function, dimension(knword) gltools_strsplit(hval, knword)
integer function gltools_nwords(hval)
subroutine gltools_nextval(klun, hlistfld, klistfound, kok, hpar, hval, hcomment)