46
47
48
55
56
57
58#include "implicit_f.inc"
59
60
61
62#include "scr17_c.inc"
63#include "com04_c.inc"
64#include "units_c.inc"
65#include "r2r_c.inc"
66
67
68
69 INTEGER (LNOPT1,*)
70
71 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
72 TYPE (SURF_) ,TARGET, DIMENSION(NSURF) :: IGRSURF
73 TYPE (SURF_) ,TARGET, DIMENSION(NSLIN) :: IGRSLIN
74 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
75
76
77
78 INTEGER WORK(70000)
79 INTEGER I,NI,NOINT,L,J,K,NISUB,ID,IDINT,IDGRN,IDSURF,IDSURF1,J10(10),IA,ITH,INDEX_NOM_OPT
80 INTEGER UID,SUB_ID,,ID2,ID3,INTSUB_TYP(NINTSUB),ISLIN1,ISLIN2,ISU1,ISU2,ISURF1,ISURF2,NFLAG,STAT
81 INTEGER, DIMENSION(:), ALLOCATABLE :: ID_INTER,FLAG_INTER
83 CHARACTER(LEN=NCHARTITLE) :: TITR
84 CHARACTER MESS*40
85 CHARACTER(LEN=NCHARLINE) :: KEY,COPT
86 CHARACTER(LEN=NCHARFIELD) :: KEY2
87 INTEGER, DIMENSION(:), POINTER :: INGR2USR
88 INTEGER :: II, NVAR, IDSMAX, NTHINTER,IVAR,NB,ID_TYPE19,OKSURF
89 LOGICAL IS_AVAILABLE
90
91
92
93 INTEGER NGR2USR
94
95
96
97 DATA mess/'INTERFACES '/
98
99 WRITE(iout,1000)
100
101 ni =0
102 index_nom_opt = 0
103 ALLOCATE (id_inter(hm_ninter),stat=stat)
104 id_inter(1:(hm_ninter)) = 0
105 ALLOCATE (flag_inter(hm_ninter),stat=stat)
106 flag_inter(1:(hm_ninter)) = 0
107
109
110 nb = 0
111
112 DO i =1,hm_ninter
113
114 nb = nb+1
115
116 IF (nsubdom>0) THEN
118 ENDIF
119
120
121
122
123
125 . option_id = noint,
126 . unit_id = uid,
127 . option_titr = titr,
128 . keyword2 = key)
129
130 IF(key(1:len_trim(key))/='SUB') THEN
131 ni=ni+1
132 index_nom_opt=index_nom_opt+1
133
134
135 id_type19=0
137
138 SELECT CASE(key(1:len_trim(key)))
139
140 CASE ('TYPE25')
141 flag_inter(ni) =25
142
143 CASE ('TYPE7','TYPE10','TYPE24')
144 flag_inter(ni) =0
145 IF (id_type19/=0) THEN
146
147 flag_inter(ni) =2
148 ENDIF
149 CASE ('TYPE11')
150 flag_inter(ni) =1
151 IF (id_type19/=0) THEN
152
153 flag_inter(ni) =2
154 ENDIF
155 CASE DEFAULT
156 flag_inter(ni) =-1
157 END SELECT
158
159 id_inter(ni) = noint
160 nom_opt(1,index_nom_opt)=noint
161
162 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,ni),ltitr)
163 ENDIF
164 ENDDO
165
166 nb = hm_ninter
167
168 nflag = ni
169
170
171
173 nisub=0
174 nb = 0
175
176 DO i =1,hm_ninter
177
178 nb = nb+1
179
180 IF (nsubdom>0) THEN
182 ENDIF
183
184
185
186
187
190 . unit_id = uid,
191 . option_titr = titr,
192 . submodel_index = sub_id,
193 . keyword2 = key)
194
195 IF(key(1:len_trim(key))=='SUB') THEN
196 nisub=nisub+1
197 nom_opt(1,ninter+nisub)=
id
198 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,
199 . ninter+nisub),ltitr)
200
201
202
203 CALL hm_get_intv(
'InterfaceId',idint,is_available,lsubmodel)
204 CALL hm_get_intv(
'mainentityids',id1,is_available,lsubmodel)
205 CALL hm_get_intv(
'secondaryentityids',id2,is_available,lsubmodel)
206 CALL hm_get_intv(
'Main_ID2',id3,is_available,lsubmodel)
207
208 nom_opt(2,ninter+nisub)=idint
209 nom_opt(3,ninter+nisub)=id1
210 nom_opt(4,ninter+nisub)=id2
211 nom_opt(6,ninter+nisub)=id3
212 END IF
213 END DO
214
215
216
217
218 CALL udouble(nom_opt,lnopt1,ninter+nintsub,mess,0,bid)
219
220
221
222 DO i=1,nintsub
223 idint=nom_opt(2,ninter+i)
224 id=nom_opt(1,ninter+i)
226 . nom_opt(lnopt1-ltitr+1,ninter+i),ltitr)
227 IF(idint /= 0) THEN
228 DO ni=1,nflag
229 IF(id_inter(ni) == idint)THEN
230 intsub_typ(i) = flag_inter(ni)
231 GO TO 320
232 END IF
233 END DO
235 . msgtype=msgerror,
236 . anmode=aninfo,
238 . c1=titr,
239 . i2=idint)
240 intsub_typ(i) = 2
241 320 CONTINUE
242
243 IF(flag_inter(ni)==-1)THEN
245 . msgtype=msgerror,
246 . anmode=aninfo,
248 . c1=titr)
249 END IF
250 ELSE
251 intsub_typ(i) = 100
252 ENDIF
253 END DO
254
255
256
257 DO i=1,nintsub
258
259 IF (intsub_typ(i)==25 )THEN
260
261
262
263 idsurf=nom_opt(3,ninter+i)
264 id=nom_opt(1,ninter+i)
265 CALL fretitl2(titr,nom_opt(lnopt1-ltitr+1,
266 . ninter+i),ltitr)
267 DO j=1,nsurf
268 IF(igrsurf(j)%ID==idsurf)THEN
269 nom_opt(3,ninter+i)=j
270 GO TO 400
271 END IF
272 END DO
274 . msgtype=msgerror,
275 . anmode=aninfo,
277 . c1=titr,
278 . i2=idsurf)
279 400 CONTINUE
280
281 idgrn=nom_opt(4,ninter+i)
282 IF(idgrn/=0)THEN
283 DO j=1,ngrnod
284 IF (igrnod(j)%ID==idgrn) THEN
285 nom_opt(4,ninter+i)=j
286 GO TO 410
287 END IF
288 END DO
290 . msgtype=msgerror,
291 . anmode=aninfo,
293 . c1=titr,
294 . i2=idgrn)
295 410 CONTINUE
296 END IF
297
298 idsurf=nom_opt(6,ninter+i)
299 IF(idsurf/=0)THEN
300 DO j=1,nsurf
301 IF(igrsurf(j)%ID==idsurf)THEN
302 nom_opt(6,ninter+i)=j
303 GO TO 420
304 END IF
305 END DO
307 . msgtype=msgerror,
308 . anmode=aninfo,
310 . c1=titr,
311 . i2=idsurf)
312 420 CONTINUE
313 END IF
314
315 idsurf1=nom_opt(3,ninter+i)
316 idsurf2=nom_opt(6,ninter+i)
317 idgrn=nom_opt(4,ninter+i)
318 IF(idsurf1/=0.AND.idsurf2==0.AND.idgrn==0) THEN
320 . msgtype=msgwarning,
321 . anmode=aninfo,
323 . c1=titr)
324 ENDIF
325 IF(idsurf2/=0.AND.idsurf1==0.AND.idgrn==0) THEN
327 . msgtype=msgwarning,
328 . anmode=aninfo,
330 . c1=titr)
331 ENDIF
332 IF(idgrn/=0.AND.idsurf1==0.AND.idsurf2==0) THEN
334 . msgtype=msgwarning,
335 . anmode=aninfo,
337 . c1=titr)
338 ENDIF
339 ELSEIF (intsub_typ(i)==0 )THEN
340
341
342
343 idsurf=nom_opt(3,ninter+i)
344 id=nom_opt(1,ninter+i)
345 CALL fretitl2(titr,nom_opt(lnopt1-ltitr+1,
346 . ninter+i),ltitr)
347 DO j=1,nsurf
348 IF(igrsurf(j)%ID==idsurf)THEN
349 nom_opt(3,ninter+i)=j
350 GO TO 300
351 END IF
352 END DO
354 . msgtype=msgerror,
355 . anmode=aninfo,
357 . c1=titr,
358 . i2=idsurf)
359 300 CONTINUE
360 idgrn=nom_opt(4,ninter+i)
361 DO j=1,ngrnod
362 IF (igrnod(j)%ID==idgrn) THEN
363 nom_opt(4,ninter+i)=j
364 GO TO 310
365 END IF
366 END DO
368 . msgtype=msgerror,
369 . anmode=aninfo,
371 . c1=titr,
372 . i2=idgrn)
373 310 CONTINUE
374
375 ELSEIF (intsub_typ(i)==1) THEN
376
377
378
379 isu1=nom_opt(3,ninter+i)
380 isu2=nom_opt(4,ninter+i)
381 id=nom_opt(1,ninter+i)
382 CALL fretitl2(titr,nom_opt(lnopt1-ltitr+1,
383 . ninter+i),ltitr)
384
385 ingr2usr => igrslin(1:nslin)%ID
386 islin1=
ngr2usr(isu1,ingr2usr,nslin)
387 islin2=
ngr2usr(isu2,ingr2usr,nslin)
388 nom_opt(3,ninter+i)=islin1
389 nom_opt(4,ninter+i)=islin2
390
391 IF (islin1==0) THEN
393 . msgtype=msgerror,
394 . anmode=aninfo,
396 . c1=titr,
397 . i2=isu1)
398 ENDIF
399
400 IF (islin2==0) THEN
402 . msgtype=msgerror,
403 . anmode=aninfo,
405 . c1=titr,
406 . i2=isu2)
407 ENDIF
408
409 ELSEIF (intsub_typ(i)==2) THEN
410
411
412
413 isu1=nom_opt(3,ninter+i)
414 isu2=nom_opt(4,ninter+i)
415 id=nom_opt(1,ninter+i)
416 CALL fretitl2(titr,nom_opt(lnopt1-ltitr+1,
417 . ninter+i),ltitr)
418
419
420 IF ((isu1==0).AND.(isu2/=0)) THEN
421 isu1 = isu2
422 ELSEIF ((isu1/=0).AND.(isu2==0)) THEN
423 isu2 = isu1
424 ENDIF
425
426 ingr2usr => igrsurf(1:nsurf)%ID
427 isurf1=
ngr2usr(isu1,ingr2usr,nsurf
428 isurf2=
ngr2usr(isu2,ingr2usr,nsurf)
429 nom_opt(3,ninter+i)=isurf1
430 nom_opt(4,ninter+i)=isurf2
431
432 IF (isurf1==0) THEN
434 . msgtype=msgerror,
435 . anmode=aninfo,
437 . c1=titr,
438 . i2=isu1)
439 ENDIF
440
441 IF (isurf2==0) THEN
443 . msgtype=msgerror,
444 . anmode=aninfo,
446 . c1=titr,
447 . i2=isu2)
448 ENDIF
449
450 ELSEIF (intsub_typ(i)==100 )THEN
451
452
453
454
455 idsurf=nom_opt(6,ninter+i)
456 id=nom_opt(1,ninter+i)
457 CALL fretitl2(titr,nom_opt(lnopt1-ltitr+1,
458 . ninter+i),ltitr)
459 oksurf = 0
460 DO j=1,nsurf
461 IF(igrsurf(j)%ID==idsurf)THEN
462 nom_opt(6,ninter+i)=j
463 oksurf = 1
464 END IF
465 END DO
466 IF(oksurf == 0 ) THEN
468 . msgtype=msgerror,
469 . anmode=aninfo,
471 . c1=titr,
472 . i2=idsurf)
473 ENDIF
474
475 idsurf=nom_opt(3,ninter+i)
476 IF(idsurf/=0)THEN
477 oksurf = 0
478 DO j=1,nsurf
479 IF(igrsurf(j)%ID==idsurf)THEN
480 nom_opt(3,ninter+i)=j
481 oksurf = 1
482 END IF
483 END DO
484 IF(oksurf == 0 ) THEN
486 . msgtype=msgerror,
487 . anmode=aninfo,
489 . c1=titr,
490 . i2=idsurf)
491 ENDIF
492
493 END IF
494
495 ENDIF
496
497 END DO
498
499
500
501
502
503
504
505
508 IF (nthinter > 0) THEN
509 DO ii=1,nthinter
511 CALL hm_get_intv('idsmax
',IDSMAX,IS_AVAILABLE,LSUBMODEL)
512 DO IVAR=1,IDSMAX
513 CALL HM_GET_INT_ARRAY_INDEX('ids',N,IVAR,IS_AVAILABLE,LSUBMODEL)
514 DO K=1,NINTSUB
515 IF(N==NOM_OPT(1,NINTER+K))THEN
516 NOM_OPT(5,NINTER+K)=1
517 EXIT
518 END IF
519 END DO !next K
520 ENDDO!NEXT IVAR
521 ENDDO !next II
522 ENDIF
523
524
525
526 DO I=1,NINTSUB
527 ID =NOM_OPT(1,NINTER+I)
528 IDINT =NOM_OPT(2,NINTER+I)
529 ITH =NOM_OPT(5,NINTER+I)
530 IF (INTSUB_TYP(I)==25) THEN
531 IDSURF1=IGRSURF(NOM_OPT(3,NINTER+I))%ID
532 IDGRN =NOM_OPT(4,NINTER+I)
533 IF(IDGRN/=0) IDGRN =IGRNOD(IDGRN)%ID
534 IDSURF2=NOM_OPT(6,NINTER+I)
535 IF(IDSURF2/=0)IDSURF2=IGRSURF(IDSURF2)%ID
536 WRITE(IOUT,1125) ID,IDINT,IDSURF1,IDSURF2,IDGRN,ITH
537 ELSEIF (INTSUB_TYP(I)==0) THEN
538 IDSURF=IGRSURF(NOM_OPT(3,NINTER+I))%ID
539 IDGRN =IGRNOD(NOM_OPT(4,NINTER+I))%ID
540 WRITE(IOUT,1100) ID,IDINT,IDSURF,IDGRN,ITH
541 ELSEIF (INTSUB_TYP(I)==1) THEN
542 ISU1 = IGRSLIN(NOM_OPT(3,NINTER+I))%ID
543 ISU2 = IGRSLIN(NOM_OPT(4,NINTER+I))%ID
544 WRITE(IOUT,1200) ID,IDINT,ISU1,ISU2,ITH
545 ELSEIF (INTSUB_TYP(I)==2) THEN
546 ISURF1 = IGRSURF(NOM_OPT(3,NINTER+I))%ID
547 ISURF2 = IGRSURF(NOM_OPT(4,NINTER+I))%ID
548 WRITE(IOUT,1300) ID,IDINT,ISU1,ISU2,ITH
549 ENDIF
550 END DO
551
552 DEALLOCATE(ID_INTER,FLAG_INTER)
553
554 1000 FORMAT( /1X,' sub-interfaces ' /
555 . 1X,' -------------- '// )
556 1100 FORMAT(//
557 . ' sub-
INTERFACE id. . . . . . . . . . . . .
',I10/,
558 . ' INTERFACE id. . . . . . . . . . . . . . .
',I10/,
559 . ' surface
id. . . . . . . . . . . . . . . .
',I10/,
560 . ' nodes group
id. . . . . . . . . . . . . .
',I10/,
561 . ' output to th(0:no,1:yes) . . . . . . . . ',I10/)
562 1125 FORMAT(//
563 . ' sub-
INTERFACE id. . . . . . . . . . . . .
',I10/,
564 . ' INTERFACE id. . . . . . . . . . . . . . .
',I10/,
565 . ' surface
id 1. . . . . . . . . . . . . . .
',I10/,
566 . ' surface
id 2. . . . . . . . . . . . . . .
',I10/,
567 . ' nodes group
id. . . . . . . . . . . . . .
',I10/,
568 . ' output to th(0:no,1:yes) . . . . . . . . ',I10/)
569 1200 FORMAT(//
570 . ' sub-
INTERFACE id. . . . . . . . . . . . .
',I10/,
571 . ' INTERFACE id. . . . . . . . . . . . . . .
',I10/,
572 . ' main line
id . . . . . . . . . . . . . .
',I10/,
573 . ' secondary line
id . . . . . . . . . . . .
',I10/,
574 . ' output to th(0:no,1:yes) . . . . . . . . ',I10/)
575 1300 FORMAT(//
576 . ' sub-
INTERFACE id. . . . . . . . . . . . .
',I10/,
577 . ' INTERFACE id. . . . . . . . . . . . . . .
',I10/,
578 . ' main surface
id. . . . . . . . . . . . . .
',I10/,
579 . ' secondary surface
id. . . . . . . . . . .
',I10/,
580 . ' output to th(0:no,1:yes) . . . . . . . . ',I10/)
581 RETURN
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharfield
integer, parameter ncharline
integer, dimension(:), allocatable tagint
integer function ngr2usr(iu, igr, ngr)
subroutine hm_sz_r2r(tag, val, lsubmodel)
int main(int argc, char *argv[])
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
subroutine udouble(list, ilist, nlist, mess, ir, rlist)