41
42
43
44
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "param_c.inc"
57#include "com04_c.inc"
58#include "scr17_c.inc"
59#include "remesh_c.inc"
60
61
62
63 INTEGER IPART(LIPART1,*), IPARTC(*), IPARTTG(*),
64 . IXC(NIXC,*), IXTG(NIXTG,*),
65 . SH4TREE(KSH4TREE,*), SH3TREE(KSH3TREE,*),
66 . SH4TRIM(*), (*)
67 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
68
69
70
71 INTEGER ID,ID1,ID2,ID3,ID4,II,I1,I2,I3,I4,NLIST,N,LEVEL,NN,
72 . ITRIM,I
73 INTEGER IERROR, NINTLST2,ERRORADJ
74INTEGER, DIMENSION(:),ALLOCATABLE :: LIST,INDEXL
75 INTEGER IX1(MAX(NUMELC,NUMELTG)),
76 . (MAX(NUMELC,NUMELTG)),
77 . INDEX(2*MAX(NUMELC,NUMELTG))
78 CHARACTER MESS*40
79 CHARACTER(LEN=NCHARTITLE) :: TITR
80 CHARACTER(LEN=NCHARKEY) :: KEY,KEY2
81 LOGICAL IS_AVAILABLE
82
83 DATA mess /'ADAPTIVE MESHING STATE DEFINITION '/
84
85 nlist =0
86
87
88
89
90
92
93 DO n =1,nadmeshstat
94 titr = ''
95
97 . option_titr = titr,
98 . keyword2 = key,
99 . keyword3 = key2)
100
101 IF(key2(1:len_trim(key2))=='SHELL')THEN
102
103
104 is_available = .false.
105
106
107
108 CALL hm_get_intv(
'NSHELL',nshell,is_available,lsubmodel)
109 nlist = nlist + nshell
110
111 ENDIF
112
113 ENDDO
114
115 ALLOCATE(list(5*nlist),stat=ierror)
116 IF(ierror/=0)
CALL ancmsg(msgid=268,anmode=aninfo,
117 . msgtype=msgerror,
118 . c1='LIST')
119 ALLOCATE(indexl(10*nlist),stat=ierror)
120 IF(ierror/=0)
CALL ancmsg(msgid=268,anmode=aninfo,
121 . msgtype=msgerror,
122 . c1='INDEXL')
123
124 nlist=0
125
126
127
128
129
131
132 DO n =1,nadmeshstat
133 titr = ''
134
136 . option_titr = titr,
137 . keyword2 = key,
138 . keyword3 = key2)
139
140 IF(key2(1:len_trim(key2))=='SHELL')THEN
141
142
143 is_available = .false.
144
145
146
147 CALL hm_get_intv(
'NSHELL',nshell,is_available,lsubmodel)
148
149 DO i=1,nshell
150
156
157 nlist=nlist+1
159 nlist=nlist+1
160 list(nlist)=id1
161 nlist=nlist+1
162 list(nlist)=id2
163 nlist=nlist+1
164 list
165 nlist=nlist+1
166 list(nlist)=id4
167
168 ENDDO
169 ENDIF
170 ENDDO
171
172 nn=
nintlst2(list,nlist,indexl,ixc,nixc,numelc,
173 . mess,ix1,ix2,index,0)
174
175 nlist=0
176
177
178
179
180
181
183
184 DO n =1,nadmeshstat
185 titr = ''
186
188 . option_titr = titr,
189 . keyword2 = key,
190 . keyword3 = key2)
191
192 IF(key2(1:len_trim(key2))=='SHELL')THEN
193
194
195 is_available = .false.
196
197
198
199 CALL hm_get_intv(
'NSHELL',nshell,is_available,lsubmodel)
200
201 DO i=1,nshell
202
203
211
212 nlist=nlist+1
213 ii=list(nlist)
214 nlist=nlist+1
215 i1=list(nlist)
216 nlist=nlist+1
217 i2=list(nlist)
218 nlist=nlist+1
219 i3=list(nlist)
220 nlist=nlist+1
221 i4=list(nlist)
222 IF(i1+i2+i3+i4 /=0 .AND.
223 . (i2-i1/=1 .OR. i3-i1 /= 2 .OR. i4-i1 /= 3))THEN
225 . msgtype=msgerror,
226 . anmode=aninfo,
227 . i1=id1,
228 . i2=id2,
229 . i3=id3,
230 . i4=id4,
232 END IF
233
234 IF(i1+i2+i3+i4 /=0) THEN
235 erroradj =0
236 IF(ixc(2,ii) /= ixc(2,i1).OR.ixc(3,ii) /= ixc(3,i2)
237 . .OR.ixc(4,ii) /= ixc(4,i3).OR.ixc(5,ii) /= ixc(5,i4)) THEN
238 erroradj =1
239 ELSEIF(ixc(4,i1) /= ixc(5,i2).OR.ixc(5,i2) /= ixc(2,i3)
240 . .OR.ixc(2,i3) /= ixc(3,i4).OR.ixc(4,i1) /= ixc(3,i4)) THEN
241 erroradj =1
242 ELSEIF(ixc(3,i1) /= ixc(2,i2).OR.ixc(4,i2) /= ixc(3,i3)
243 . .OR.ixc(5,i3) /= ixc(4,i4).OR.ixc(5,i1) /= ixc(2,i4)) THEN
244 erroradj =1
245 ENDIF
246 ENDIF
247 IF(erroradj ==1.AND.abs(level)<levelmax) THEN
249 . msgtype=msgerror,
250 . anmode=aninfo,
251 . i1=id1,
252 . i2=id2,
253 . i3=id3,
254 . i4=id4,
256 END IF
257
258 IF(level<-levelmax-1.OR.level>levelmax)THEN
260 . msgtype=msgerror,
261 . anmode=aninfo,
263 END IF
264 sh4tree(2,ii)=i1
265 sh4tree(3,ii)=level
266 IF(i1/=0)THEN
267 sh4tree(1,i1)=ii
268 sh4tree(1,i2)=ii
269 sh4tree(1,i3)=ii
270 sh4tree(1,i4)=ii
271 END IF
272 sh4trim(ii)=itrim
273
274 ENDDO
275 ENDIF
276 ENDDO
277
278 DEALLOCATE(list)
279 DEALLOCATE(indexl)
280
281
282
283
284 nlist=0
285
286
287
288
289
291
292 DO n =1,nadmeshstat
293 titr = ''
294
296 . option_titr = titr,
297 . keyword2 = key,
298 . keyword3 = key2)
299
300 IF(key2(1:len_trim(key2))=='SH3N')THEN
301
302
303 is_available = .false.
304
305
306
307 CALL hm_get_intv(
'NSH3N',nsh3n,is_available,lsubmodel)
308 nlist = nlist + nsh3n
309
310
311 ENDIF
312
313 ENDDO
314
315
316 ALLOCATE(list(5*nlist),stat=ierror)
317 IF(ierror/=0)
CALL ancmsg(msgid=268,anmode=aninfo,
318 . msgtype=msgerror,
319 . c1='LIST')
320 ALLOCATE(indexl(10*nlist),stat=ierror)
321 IF(ierror/=0)
CALL ancmsg(msgid=268,anmode=aninfo,
322 . msgtype=msgerror,
323 . c1='INDEXL')
324
325
326
327 nlist=0
328
329
330
331
332
334
335 DO n =1,nadmeshstat
336 titr = ''
337
339 . option_titr = titr,
340 . keyword2 = key,
341 . keyword3 = key2)
342
343 IF(key2(1:len_trim(key2))=='SH3N')THEN
344
345 is_available = .false.
346
347
348
349 CALL hm_get_intv(
'NSH3N',nsh3n,is_available,lsubmodel)
350
351 DO i=1,nsh3n
352
358
359 nlist=nlist+1
361 nlist=nlist+1
362 list(nlist)=id1
363 nlist=nlist+1
364 list(nlist)=id2
365 nlist=nlist+1
366 list(nlist)=id3
367 nlist=nlist+1
368 list(nlist)=id4
369 ENDDO
370
371
372 ENDIF
373
374 ENDDO
375
376 nn=
nintlst2(list,nlist,indexl,ixtg,nixtg,numeltg,
377 . mess,ix1,ix2,index,0)
378
379 nlist=0
380
381
382
383
385
386 DO n =1,nadmeshstat
387 titr = ''
388
389
390
392 . option_titr = titr,
393 . keyword2 = key,
394 . keyword3 = key2)
395
396 IF(key2(1:len_trim(key2))=='SH3N')THEN
397
398
399 is_available = .false.
400
401
402
403 CALL hm_get_intv(
'NSH3N',nsh3n,is_available,lsubmodel)
404
405 DO i=1,nsh3n
406
414
415
416
417 ii=list(nlist)
418 nlist=nlist+1
419 i1=list(nlist)
420 nlist=nlist+1
421 i2=list(nlist)
422 nlist=nlist+1
423 i3=list(nlist)
424 nlist=nlist+1
425 i4=list(nlist)
426
427 IF(i1+i2+i3+i4 /=0 .AND.
428 . (i2-i1/=1 .OR. i3-i1 /= 2 .OR. i4-i1 /= 3))THEN
430 . msgtype=msgerror,
431 . anmode=aninfo,
432 . i1=id1,
433 . i2=id2,
434 . i3=id3,
435 . i4=id4,
437 END IF
438
439 IF(i1+i2+i3+i4 /=0) THEN
440 erroradj =0
441 IF(ixtg(2,ii) /= ixtg(2,i1).OR.ixtg(3,ii) /= ixtg(3,i2)
442 . .OR.ixtg(4,ii) /= ixtg(4,i3)) THEN
443 erroradj =1
444 ELSEIF(ixtg(3,i1) /= ixtg(2,i2).OR.ixtg(4,i2) /= ixtg(3,i3)
445 . .OR.ixtg(2,i3) /= ixtg(3,i4)) THEN
446 erroradj =1
447 ELSEIF(ixtg(4,i1) /= ixtg(2,i3).OR.ixtg(4,i1) /= ixtg(3,i4)
448 . .OR.ixtg(4,i2) /= ixtg(2,i4).OR.ixtg(4,i4) /= ixtg(2,i2).OR.
449 . ixtg(4,i4) /= ixtg(3,i1)) THEN
450 erroradj =1
451 ENDIF
452 ENDIF
453 IF(erroradj ==1.AND.abs(level)<levelmax) THEN
455 . msgtype=msgerror,
456 . anmode=aninfo,
457 . i1=id1,
458 . i2=id2,
459 . i3=id3,
460 . i4=id4,
462 END IF
463
464 IF(level<-levelmax-1.OR.level>levelmax)THEN
466 . msgtype=msgerror,
467 . anmode=aninfo,
469 END IF
470 sh3tree(2,ii)=i1
471 sh3tree(3,ii)=level
472 IF(i1/=0)THEN
473 sh3tree(1,i1)=ii
474 sh3tree(1,i2)=ii
475 sh3tree(1,i3)=ii
476 sh3tree(1,i4)=ii
477 END IF
478 sh3trim(ii)=itrim
479 ENDDO
480
481 ENDIF
482
483 ENDDO
484
485 DEALLOCATE(list)
486 DEALLOCATE(indexl)
487
488 RETURN
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharkey
integer function nintlst2(list, nlist, indexl, ix, nix, numel, mess, ix1, ix2, index, kk)
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)