41
42
43
50
51
52
53#include "implicit_f.inc"
54
55
56
57 INTEGER IKAD(0:*),KIMPL
58 CHARACTER KEY0(*)*5
59
60
61
62#include "units_c.inc"
63#include "impl1_c.inc"
64#include "impl2_c.inc"
65#include "parit_c.inc"
66#include "com01_c.inc"
67#include "com06_c.inc"
68#include "buckcom.inc"
69#include "scr06_c.inc"
70
71
72
73 INTEGER NVAR
74
75
76
77 INTEGER I, NBC, K, IKEY,IM,J,NJ,KK
78 CHARACTER TITLE*72, KEY2*5, KEY3*5, KEY4*5
79 CHARACTER(LEN=NCHARLINE100)::
80
81 ikey=kimpl
82 impl_s=0
83 idyna=0
84 iline=0
85 isprb=0
86 isolv=0
87 insolv=0
88 idtc=0
89 im=0
90 ikg=1
91 kz_tol=zero
92 sk_int=zero
93 d_tol=zero
94 lprint=0
95 nprint=0
96 impdeb=0
97 solvnfo=0
98 prstifmat=0
99 prstifmat_tol=zero
100 prstifmat_nc=1
101 prstifmat_it=0
102 impmv=1
103 isigini=0
104 ilintf=0
105 iprec = 0
106 l_lim = 0
107 itol = 0
108 l_tol =zero
109 dt_imp = zero
110 dt_min = zero
111 dt_max = zero
112 imp_rby=0
113 imp_int=0
114 isprn = 1
115
116
117 intp_c = 1
118 l_bfgs = 0
119
120 irref = 1
121 iqstat = 0
122 ibuckl = 0
123 iscau = 0
124 imp_lr=0
125 ikproj=0
126 ismdisp = 0
127 IF(ikad(ikey)/=ikad(ikey+1))THEN
128 k=0
129 impl_s=1
130 ncinp=1
131 n_pat = 1
132 imp_chk = 0
133 imp_int7 = 0
134 ittoff = 0
135 scal_dtq = one
136 idy_damp=0
137 iautspc = 1
138 itrmax = 0
142 irefi = 0
143 iline_s = 0
144 nls_lim = 0
145 ls_tol = zero
146 ndiver = 0
147 ikt = 0
148 ndtfix = 0
149 ikpres = 1
150 n_tolu=zero
151 n_tolf=zero
152 n_tole=zero
153 ncy_max = 0
154 rf_min = zero
155 rf_max = zero
156 ipupd = 0
157 tol_div = zero
159 ipro_s0=0
160 iikgoff = 1
161 m_msg = 0
162 m_order =0
163 m_ocore =0
164 irig_m = 0
165 1160 READ(iusc1,rec=ikad(ikey)+k,fmt='(7X,A,1X,A,1X,A,25X,I10)',err=9990)key2,key3,key4,nbc
166 k=k+1
167
168
169
170 IF(key2(1:4)=='DYNA')THEN
171 IF (idyna==0) idyna=1
172 IF(key3(1:4)=='DAMP')THEN
173 idy_damp=1
174 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
175 READ(iusc2,*) dampa_imp,dampb_imp
176 ELSE IF(key3(1:3)=='FSI')THEN
177 WRITE(6,*) "ERROR: /IMPL/DYNA/FSI IS A DEPRECATED FEATURE"
178 GOTO 9990
179 ELSE
180 READ(key3,'(I2)')im
182 IF(idyna==1)THEN
183 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
184 READ(iusc2,*)hht_a
185 ELSEIF(idyna==2)THEN
186 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
187 READ(iusc2,*)newm_a,newm_b
188 ELSE
189 hht_a =-em20
190 ENDIF
191 ENDIF
192
193
194
195 ELSEIF(key2(1:4)=='LINE')THEN
196 iline=1
197 IF(key3(1:5)=='inter') THEN
198 READ(KEY4,'(i5)')ILINTF
199 ILINTF = MAX(2,ILINTF)
200 ELSEIF(KEY3(1:5)=='scauc') THEN
201 ISCAU = 1
202 ENDIF
203 ELSEIF(KEY2(1:5)=='monvo')THEN
204 IF(KEY3(1:3)=='off')IMPMV=0
205 ELSEIF(KEY2(1:5)=='sprin')THEN
206 IF(KEY3(1:4)=='nonl')THEN
207 ISPRN = 1
208 ELSEIF(KEY3(1:4)=='line')THEN
209 ISPRN = 0
210 ELSE
211 GOTO 9990
212 ENDIF
213 ELSEIF(KEY2(1:5)=='prepa')THEN
214 READ(KEY3,'(i2)')N_PAT
215 ELSEIF(KEY2(1:5)=='projv')THEN
216 READ(KEY3,'(i2)') M_VS
217 ELSEIF(KEY2(1:5)=='prosi')THEN
218 READ(KEY3,'(i2)') IPRO_S0
219
220
221
222 ELSEIF(KEY2(1:5)=='check')THEN
223 IMP_CHK = 1
224
225
226
227 ELSEIF(KEY2(1:5)=='qstat')THEN
228 IQSTAT = 1
229 IF(KEY3(1:5)=='dtsca')THEN
230 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
231 READ(IUSC2,*)SCAL_DTQ
232 ELSEIF(KEY3(1:5)=='mrigm')THEN
233 IRIG_M = 1
234 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
235 READ(IUSC2,*,ERR=520,END=520)E_REF(1),E_REF(2),E_REF(3)
236.AND..AND. IF (E_REF(1)>0E_REF(2)>0E_REF(3)>0) IRIG_M = 2
237 520 CONTINUE
238 ELSE
239 READ(KEY3,'(i2)')IM
240 IQSTAT=MAX(IQSTAT,IM)
241 ENDIF
242
243
244
245 ELSEIF(KEY2(1:4)=='sprb')THEN
246 ISPRB=1
247
248
249
250 ELSEIF(KEY2=='print')THEN
251 IF(KEY3(1:4)=='line')THEN
252 READ(KEY4,'(i5)')LPRINT
253 ELSEIF(KEY3(1:4)=='nonl')THEN
254 READ(key4,'(I5)')nprint
255 ELSEIF(key3(1:4)=='STIF')THEN
256 prstifmat = 1
257 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
258 READ(iusc2,*)prstifmat_tol,prstifmat_nc,prstifmat_it
259 ELSE
260 GOTO 9990
261 ENDIF
262
263
264
265 ELSEIF(key2(1:4)=='SOLV')THEN
266 READ(key3,'(I2)')isolv
267 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
268 READ(iusc2,*)iprec,l_lim,itol,l_tol
269 IF (isolv==3) imumpsd=l_lim
270
271
272
273 ELSEIF(key2(1:4)=='SBCS')THEN
274 IF(key3(1:5)=='MSGLV')THEN
276 ELSEIF(key3(1:5)=='ORDER')THEN
278
279 ELSEIF(key3(1:5)=='OUTCO')THEN
281 ELSE
282 GOTO 9990
283 ENDIF
284
285
286
287 ELSEIF(key2(1:5)=='MUMPS')THEN
288 IF(key3(1:5)=='MSGLV')THEN
289 READ(key4,'(I2)')m_msg
290 ELSEIF(key3(1:5)=='ORDER')THEN
291 IF(key4(1:5)=='METIS')THEN
292 m_order = 5
293 ELSEIF(key4(1:4)=='PORD')THEN
294 m_order = 4
295 END IF
296
297 ELSEIF(key3(1:5)=='OUTCO')THEN
298 m_ocore=1
299 ELSEIF(key3(1:5)=='AUTOC')THEN
300 m_ocore=-1
301 ELSE
302 GOTO 9990
303 ENDIF
304
305
306
307 ELSEIF(key2(1:4)=='NONL')THEN
308 IF(key3(1:5)=='KTANG')THEN
309 ikt = 1
310 ELSEIF(key3(1:5)=='KTFUL')THEN
311 ikt = 2
312 ELSEIF(key3(1:5)=='KTFU8')THEN
313 ikt = 3
314 ELSEIF(key3(1:5)=='KTCON')THEN
315 ikt = 4
316 ELSEIF(key3(1:5)=='PITER')THEN
317 READ(key4,'(I5)') ipupd
318 ELSEIF(key3(1:5)=='SMDIS')THEN
319 ismdisp = 1
320 ELSEIF(key3(1:5)=='SOLVI')THEN
321 solvnfo = 1
322 ELSE
323 READ(key3,'(i2)')INSOLV
324 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
325 READ(IUSC2,'(a)')TITLE
326 READ(TITLE,*)N_LIM,NITOL,N_TOL
327 IF (NITOL>10) THEN
328 SELECT CASE (NITOL)
329 CASE(12)
330 READ(TITLE,*)N_LIM,NITOL,N_TOLE,N_TOLF
331 CASE(13)
332 READ(TITLE,*)N_LIM,NITOL,N_TOLE,N_TOLU
333 CASE(23)
334 READ(TITLE,*)N_LIM,NITOL,N_TOLF,N_TOLU
335 CASE(123)
336 READ(TITLE,*)N_LIM,NITOL,N_TOLE,N_TOLF,N_TOLU
337 END SELECT
338 ENDIF !(NITOL>10)
339.AND. IF(NITOL==1IRREF==1) IRREF = 0
340 ENDIF
341 ELSEIF(KEY2(1:5)=='sinit')THEN
342 ISIGINI=1
343 ELSEIF(KEY2(1:5)=='lbfgs')THEN
344 READ(KEY3,'(i5)') L_BFGS
345
346
347
348 ELSEIF(KEY2=='dtini')THEN
349 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
350 READ(IUSC2,*)DT_IMP
351 ELSEIF(KEY2(1:2)=='dt')THEN
352 IF(KEY3(1:4)=='stop')THEN
353 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
354 READ(IUSC2,*)DT_MIN,DT_MAX
355
356
357
358 ELSEIF(KEY3(1:4)=='fixp')THEN
359 KK =K
360 DO I=1,NBC
361 READ(IUSC1,REC=IKAD(IKEY)+KK,FMT='(a)',ERR=9990)CARTE
362 CALL WRIUSC2(IKAD(IKEY)+KK,1,KEY0(IKEY))
363 NJ = NVAR(CARTE)
364 IF ((NDTFIX+NJ)>100) THEN
365 NJ = 100-NDTFIX
366 WRITE(ISTDO,*)
367 . ' ** warning ** : maximum 100 fix points permitted '
368 ENDIF
369 READ(IUSC2,*,ERR=9990,END=9990)(DTIMPF(NDTFIX+J),J=1,NJ)
370 KK=KK+1
371 NDTFIX = NDTFIX + NJ
372 ENDDO
373 CALL ORDER_DTF(NDTFIX,DTIMPF)
374 ELSE
375 READ(KEY3,'(i2)')IM
376.AND. IF (IDTC>0IM>0) GOTO 9990
377 IDTC=IM
378 IF(IM==1)THEN
379 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
380 READ(IUSC2,*)NL_DTP,SCAL_DTP,NL_DTN,SCAL_DTN
381 ELSEIF(IM==2)THEN
382 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
383 READ(IUSC2,*)NL_DTP,ALEN0,NL_DTN,SCAL_DTN,SCAL_DTP
384 ELSEIF(IM==3)THEN
385 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
386 READ(IUSC2,*)NL_DTP,ALEN0,NL_DTN,SCAL_DTN,SCAL_DTP,IAL_M,
387 . SCAL_RIKS
388 ELSE
389 GOTO 9990
390 ENDIF
391 ENDIF
392
393
394
395 ELSEIF(KEY2=='ncycl')THEN
396 IF(KEY3(1:4)=='stop')THEN
397 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
398 READ(IUSC2,*)NCY_MAX
399 ELSE
400 GOTO 9990
401 ENDIF
402
403
404
405 ELSEIF(KEY2(1:5)=='inter')THEN
406 IF(KEY3(1:5)=='ttoff')THEN
407 ITTOFF = 1
408 ELSEIF(KEY3(1:5)=='sint7')THEN
409 READ(KEY4,'(i2)')IMP_INT7
410
411 IMP_INT7= MIN(2,IMP_INT7)
412
413 ELSEIF(KEY3(1:5)=='knonl')THEN
414
415 READ(KEY4,'(i2)')IM
416 INTP_C = -IM -1
417
418 ELSEIF(KEY3(1:5)=='kcomp')THEN
419
420
421 ELSEIF(KEY3(1:4)=='kgon')THEN
422 IIKGOFF = 0
423 ELSE
424 GOTO 9990
425 ENDIF
426
427
428
429 ELSEIF(KEY2(1:4)=='rref')THEN
430 IRREF = 2
431 IF(KEY3(1:3)=='off') THEN
432 IRREF = 0
433 ELSEIF(KEY3(1:5)=='inter')THEN
434
435 READ(KEY4,'(i2)')IM
436 IREFI = IM
437 ELSEIF(KEY3(1:5)=='limit')THEN
438 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
439 READ(IUSC2,*)RF_MIN,RF_MAX
440 ENDIF
441
442
443
444 ELSEIF(KEY2(1:5)=='diver')THEN
445 IF(KEY3(1:3)=='tol')THEN
446 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
447 READ(IUSC2,*)TOL_DIV
448
449 ELSE
450 READ(KEY3,'(i2)')IM
451 NDIVER = IM
452 IF (NDIVER ==0) NDIVER=-1
453 END IF
454
455
456
457 ELSEIF(KEY2(1:5)=='gstif')THEN
458 IF(KEY3(1:3)=='off')IKG=0
459
460
461
462 ELSEIF(KEY2(1:5)=='pstif')THEN
463 IF(KEY3(1:3)=='off') IKPRES=0
464
465
466
467 ELSEIF(KEY2=='buckl')THEN
468 READ(KEY3,'(i2)')IBUCKL
469 IF (IBUCKL==0) THEN
470 WRITE(ISTDO,*) ' ** error ** : keyword /impl/buckl obsolete ',
471 . 'using /impl/buckl/1 or /impl/buckl/2'
472 GOTO 9990
473 ENDIF
474 IBUCKL = IBUCKL-1
475 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
476 READ(IUSC2,*) EMIN_B, EMAX_B, NBUCK, MSGL_B, MAXSET_B, SHIFT_B
477 IF (SHIFT_B==ZERO) SHIFT_B=EM02
478 SHFTBUCK = SHIFT_B
479 IF (MAXSET_B==0) MAXSET_B=8
480 BNITER=300
481 BINCV=4
482 BMAXNCV=16
483
484 BIPRI =MSGL_B
485 BISOLV=1
486
487 ELSEIF(KEY2(1:5)=='autos')THEN
488 IF(KEY3(1:3)=='off')THEN
489 IAUTSPC=0
490 ELSEIF(KEY3(1:3)=='all')THEN
491 IAUTSPC=2
492 ENDIF
493
494
495
496 ELSEIF(KEY2(1:5)=='lsear')THEN
497 IF(KEY3(1:3)=='off')THEN
498 ILINE_S = 100
499 ELSE
500 READ(KEY3,'(i2)')iline_s
501 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
502 READ(iusc2,*)nls_lim,ls_tol
503 ENDIF
504
505
506
507 ELSEIF(key2(1:5)=='shpof')THEN
508 IKPROJ=-1
509
510 ELSEIF(KEY2(1:5)=='shpon')THEN
511 IKPROJ=1
512
513
514
515 ELSEIF(KEY2(1:5)=='contr')THEN
516 IF(KEY3(1:2)=='dt')THEN
517 IF(KEY4(1:4)=='stop')THEN
518 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
519 READ(IUSC2,*)DT_MIN,DT_MAX
520 ELSE
521 READ(KEY4,'(i2)')IM
522 IDTC=IM
523 IF(IM==1)THEN
524 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
525 READ(IUSC2,*)NL_DTP,SCAL_DTP,NL_DTN,SCAL_DTN
526 ELSEIF(IM==2)THEN
527 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
528 READ(IUSC2,*)NL_DTP,ALEN0,NL_DTN,SCAL_DTN,SCAL_DTP
529 ENDIF
530 ENDIF
531 ELSEIF(KEY3(1:4)=='shel')THEN
532
533
534
535 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
536 READ(IUSC2,*)KZ_TOL
537 ELSEIF(KEY3(1:5)=='inter')THEN
538
539
540
541 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
542 READ(IUSC2,*)SK_INT
543 ENDIF
544
545
546
547 ELSEIF(KEY2(1:5)=='prtol')THEN
548 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
549 READ(IUSC2,*)D_TOL
550 ELSEIF(KEY2(1:4)=='nexp')THEN
551 READ(KEY3,'(i5)')NEXP
552 ELSEIF(KEY2=='debug')THEN
553 IMPDEB=1
554 CALL WRIUSC2(IKAD(IKEY)+K,1,KEY0(IKEY))
555 READ(IUSC2,*)NDEB0,NDEB1
556 IF(NDEB0/=0)NDEB0 = NDEB0 + 1
557 NDEB1=MAX(NDEB0,NDEB1+1)
558 ELSEIF(KEY2(1:3)=='del')THEN
559 IF(KEY3(1:5)=='rbody')THEN
560 IMP_RBY=1
561 ELSEIF(KEY3(1:5)=='inter')THEN
562 IMP_INT=1
563 ENDIF
564 ELSEIF(KEY2(1:5)=='itrby')THEN
565
566 READ(KEY3,'(i3)')ITRMAX
567 ELSEIF(KEY2(1:4)=='lrig')THEN
568 IMP_LR = 1
569 ELSE
570 GOTO 9990
571 ENDIF
572 K=K+NBC
573 IF(IKAD(IKEY)+K/=IKAD(IKEY+1))GO TO 1160
574 IF (IPARIT/=0) THEN
575 IPARIT=0
576 IKG=IKG+5
577 ENDIF
578 ENDIF
579
580 RETURN
581
582 9990 CONTINUE
583 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,
584 . C1=KEY0(IKEY))
585 CALL ARRET(0)
integer, parameter ncharline100
subroutine wriusc2(irec, nbc, key0)