76 USE modi_gltools_nextval
77 USE modi_gltools_nwords
78 USE modi_gltools_strsplit
82 LOGICAL,
INTENT(IN),
OPTIONAL :: &
84 INTEGER,
INTENT(IN),
OPTIONAL :: &
89 CHARACTER(6),
PARAMETER :: &
93 CHARACTER(80),
DIMENSION(:),
ALLOCATABLE :: &
98 iparlu,iok,infld,jl,icount, ierr
101 INTEGER,
DIMENSION(:),
ALLOCATABLE :: &
120 IF (present(hmandatory))
THEN
121 gmandatory = hmandatory
126 OPEN( unit=iparlu, file=trim(adjustl(ypinpfile)), status=
'OLD', &
127 form=
'FORMATTED' , err= 230, iostat=ierr)
130 IF ( gmandatory )
THEN
131 WRITE(*,*)
"*** GELATO/readnam : issue opening gltpar "
132 WRITE(*,*)
'We stop.'
146 IF (lp1)
WRITE(*,*)
' ----------------------------------------'
147 IF (lp1)
WRITE(*,*)
' glt_gelato : READING NAMELIST ' // trim(adjustl(ypinpfile))
148 IF (lp1)
WRITE(*,*)
' ----------------------------------------'
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) //
' ' // &
160 & xfsidmpeft xhsidmpeft'
161 yfldin=trim(yfldin) //
' ' // &
162 'cdiafmt cdialev navedia ninsdia ndiamax &
163 & cinsfld nsavinp nsavout nupdbud nprinto nprlast'
164 yfldin=trim(yfldin) //
' ' // &
166 yfldin=trim(yfldin) //
' ' // &
168 yfldin=trim(yfldin) //
' ' // &
169 'nilay nslay xh0 xh1 xh2 xh3 xh4'
170 yfldin=trim(yfldin) //
' ' // &
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) //
' ' // &
185 ALLOCATE( ylistfld(infld) )
186 ALLOCATE( ilistfound(infld) )
205 SELECT CASE ( trim(adjustl(ypar)) )
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
230 CASE(
'cfsidmp') ;
READ( yval,*) cfsidmp
231 CASE(
'xfsidmpeft') ;
READ( yval,*) xfsidmpeft
232 CASE(
'chsidmp') ;
READ( yval,*) chsidmp
233 CASE(
'xhsidmpeft') ;
READ( yval,*) xhsidmpeft
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
247 IF (
ALLOCATED(cinsfld))
DEALLOCATE(cinsfld)
248 ALLOCATE( cinsfld(ndiamax) )
250 CASE(
'cinsfld') ;
READ( yval,* ) yinsfld
251 IF (
ALLOCATED(cinsfld) )
THEN
253 cinsfld(icount) = yinsfld
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
267 CASE(
'nidate') ;
READ( yval,* ) nidate
268 CASE(
'niter') ;
READ( yval,* ) niter
269 CASE(
'dtt') ;
READ( yval,* ) dtt
279 IF (
ALLOCATED(thick))
DEALLOCATE(thick)
280 ALLOCATE( thick(nt+1) )
282 IF (
ALLOCATED(thick) )
THEN
283 READ( yval,*,end=100 ) thick
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
304 CASE(
'ntstp') ;
READ( yval,* ) ntstp
305 CASE(
'ndte') ;
READ( yval,* ) ndte
311 CASE(
'xfsimax') ;
READ( yval,* ) xfsimax
312 CASE(
'xicethcr') ;
READ( yval,* ) xicethcr
313 CASE(
'xhsimin') ;
READ( yval,* ) xhsimin
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
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
349 CASE(
'ciopath') ;
READ( yval,* ) ciopath
356 IF (lwg)
WRITE(*,110) trim(ypar)
366 DEALLOCATE( ilistfound )
367 DEALLOCATE( ylistfld )
378 SELECT CASE ( trim(cnflxin) )
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)'
387 IF (lp1)
WRITE(*,*)
'We stop. Invalid parameter cnflxin = ' // trim(cnflxin) ; stop
404 IF (
ALLOCATED(sf3t))
DEALLOCATE(sf3t)
405 ALLOCATE( sf3t(nilay) )
406 IF (
ALLOCATED(e3w))
DEALLOCATE(e3w)
407 ALLOCATE( e3w(nilay) )
411 IF (
ALLOCATED(sf3tinv))
DEALLOCATE(sf3tinv)
412 ALLOCATE( sf3tinv(nilay) )
416 IF (
ALLOCATED(depth))
DEALLOCATE(depth)
417 ALLOCATE( depth(nilay+1) )
421 IF (
ALLOCATED(height))
DEALLOCATE(height)
422 ALLOCATE( height(nilay+1) )
429 sf3t(jl)=xh1+xh2*tanh( (zjl+0.5-xh4)/xh3 )
430 e3w(jl)=xh1+xh2*tanh( (zjl-xh4)/xh3 )
434 sf3t(:)=sf3t(:)/sum(sf3t)
438 sf3tinv(jl) = sf3t(nilay+1-jl)
444 height(jl) = height(jl-1) + sf3tinv(jl-1)
448 height(:)=height(:)/height(nilay+1)
453 depth(:) = 1.-height(:)
459 SELECT CASE ( trim(cdiafmt) )
461 CASE(
'GELATO',
'VMAR5')
462 ndiap1=0 ; ndiap2=0 ; ndiap3=0 ; ndiapx=0
463 DO jl=1,len( trim(cdialev) )
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.'
483 ndiap1=1 ; ndiap2=1 ; ndiap3=1 ; ndiapx=1
486 WRITE(*,*)
' Using XIOS for diagnostics output'
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.'
518 na = nt*( niceage+nicesal+nmponds )
525 IF ( trim(cfsidmp)==
'DAMP' .OR. trim(cfsidmp)==
'PRESCRIBE' )
THEN
527 ELSE IF ( trim(cfsidmp)/=
'NONE' )
THEN
528 WRITE(*,*)
"cfsidmp must be 'DAMP' or 'PRESCRIBE'"
529 WRITE(*,*)
" - You specified cfsidmp=" // trim(cfsidmp)
533 IF ( trim(chsidmp)==
'DAMP_ADD' .OR. trim(chsidmp)==
'DAMP_FAC' .OR. &
534 trim(chsidmp)==
'PRESCRIBE' )
THEN
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)
548 IF (lp1)
WRITE(*,*)
' ---------------------------------------------------'
549 IF (lp1)
WRITE(*,*)
' gelato : READING OF gltpar INPUT FILE COMPLETED '
550 IF (lp1)
WRITE(*,*)
' ---------------------------------------------------'
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.'
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.'
572 110
FORMAT(
"* GELATO/readnam : parameter '",a,
"' ignored.")