41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
69 USE reader_old_mod , ONLY : line
70 USE user_id_mod , ONLY : id_limit
71
72
73
74
75
76
77#include "implicit_f.inc"
78
79
80
81#include "analyse_name.inc"
82
83
84
85#include "com04_c.inc"
86#include "units_c.inc"
87#include "scr03_c.inc"
88#include "scr17_c.inc"
89#include "param_c.inc"
90#include "remesh_c.inc"
91
92
93
94
95 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
96 INTEGER,INTENT(IN)::(*)
97 INTEGER,INTENT(IN)::ITABM1(*)
98 INTEGER,INTENT(IN)::IPART(LIPART1,*)
99 INTEGER,INTENT(IN)::IGEO(NPROPGI,NUMGEO)
100 INTEGER,INTENT(IN)::IPM(NPROPMI,*)
102 . INTENT(IN)::geo(npropg,*)
104 . INTENT(IN)::pm(npropm,*)
105 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
106
107 INTEGER,INTENT(OUT)::IXTG(NIXTG,*)
108 INTEGER,INTENT(OUT)::IPARTTG(*)
109 INTEGER,INTENT(OUT)::ICNOD(*)
110
111
112
114 . bid,fac_l
115 INTEGER I, J, I1, I2, ID,IDS,IPID,MT,N,MID,PID,UID,JC,STAT,IPARTTG_TMP
116 INTEGER INDEX_PART
117 CHARACTER*40 MESS
118 DATA mess /'2D TRIANGULAR ELEMENT DEFINITION '/
119 INTEGER ISH3N,KK,IFLAGUNIT
120 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_TRIA,UID_TRIA,TMP_IPARTTG
121 INTEGER, DIMENSION(:,:), ALLOCATABLE :: TMP_IXTG
122
123
124
125 INTEGER USR2SYS
126 INTEGER NINTRN
127
128
129
130
131
132 ALLOCATE (sub_tria(numeltg0),stat=stat)
133 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
134 . msgtype=msgerror,
135 . c1='SUB_TRIA')
136 ALLOCATE (uid_tria(numeltg0),stat=stat)
137 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
138 . msgtype=msgerror,
139 . c1='UID_TRIA')
140 ALLOCATE (tmp_ixtg(nixtg,numeltg0),stat=stat)
141 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
142 . msgtype=msgerror,
143 . c1='TMP_IXTG')
144 ALLOCATE (tmp_iparttg(numeltg0),stat=stat)
145 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
146 . msgtype=msgerror,
147 . c1='TMP_IPARTTG')
148 sub_tria(1:numeltg0) = 0
149 uid_tria(1:numeltg0) = 0
150 tmp_ixtg(1:nixtg,1:numeltg0) = 0
151 tmp_iparttg(1:numeltg0) = 0
152 index_part = 1
153 uid = -1
154 kk=3
155 i = 0
156
157
158
159 CALL cpp_tria_read(tmp_ixtg,nixtg,tmp_iparttg,sub_tria,uid_tria)
160
161
162
163 numeltg6 = 0
164 DO WHILE (kk <= 6)
165 DO n=1,numeltg0
166 iparttg_tmp = tmp_iparttg(n)
167
168 IF( ipart(4,index_part) /= iparttg_tmp)THEN
169 DO j=1,npart
170 IF(ipart(4,j)== iparttg_tmp )index_part = j
171 ENDDO
172 ENDIF
173 ish3n = igeo(18,ipart(2,index_part))
174 IF(kk == 6 .AND. ish3n==31) numeltg6 = numeltg6 + 1
175
176 IF((kk==3.AND.ish3n/=31).OR.(kk==6.AND.ish3n==31))THEN
177 i = i + 1
178 icnod(i)=kk
179 DO j=1,nixtg
180 ixtg(j,i) = tmp_ixtg(j,n)
181 ENDDO
182 iparttg(i) = tmp_iparttg(n)
183
184 IF(sub_tria(n) /= 0)THEN
185 IF(uid_tria(n) == 0 .AND. lsubmodel(sub_tria(n))%UID /= 0)
186 . uid_tria(n) = lsubmodel(sub_tria(n))%UID
187 ENDIF
188
189
190
191 IF(uid_tria(n) /= uid )THEN
192 uid = uid_tria(n)
193 iflagunit = 0
194 DO j=1,unitab%NUNITS
195 IF (unitab%UNIT_ID(j) == uid) THEN
196 fac_l = unitab%FAC_L(j)
197 iflagunit = 1
198 ENDIF
199 ENDDO
200 IF (uid/=0.AND.iflagunit==0) THEN
201 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,
202 . i1=uid,c1='/TRIA')
203 ENDIF
204 ENDIF
205
206
207
208 IF( ipart(4,index_part) /= iparttg(i) )THEN
209 DO j=1,npart
210 IF(ipart(4,j)== iparttg(i) ) index_part = j
211 ENDDO
212 ENDIF
213 IF( ipart(4,index_part) /= iparttg(i) ) THEN
215 . msgtype=msgerror,
216 . anmode=aninfo_blind_1,
217 . c1="TRIA",
218 . i1=iparttg(i),
219 . i2=iparttg(i),
220 . prmod=msg_cumu)
221 ENDIF
222 iparttg(i) = index_part
223
224 mt=ipart(1,index_part)
225 ipid=ipart(2,index_part)
226 ixtg(1,i)=mt
227 ixtg(5,i)=ipid
228 IF (ixtg(nixtg,i)>id_limit%GLOBAL)THEN
229 CALL ancmsg(msgid=509,anmode=aninfo,msgtype=msgerror,
230 . i1=ixtg(nixtg,i),c1=line,c2='/TRIA')
231 ELSEIF (nadmesh/=0.AND.ixtg(nixtg,i)>id_limit%ADMESH)THEN
232 CALL ancmsg(msgid=1069,anmode=aninfo,msgtype=msgerror,
233 . i1=ixtg(nixtg,i),c1=line,c2='/TRIA')
234 ENDIF
235
236 DO j=2,4
237 ixtg(j,i)=
usr2sys(ixtg(j,i),itabm1,mess,
id)
238 CALL anodset(ixtg(j,i), check_shell)
239 ENDDO
240 ENDIF
241 IF (i == numeltg0) kk = 7
242 ENDDO
243 IF (i < numeltg0) THEN
244 kk = 6
245 ELSE
246
247 kk = 7
248 ENDIF
249 ENDDO
250 IF(ALLOCATED(sub_tria)) DEALLOCATE(sub_tria)
251 IF(ALLOCATED(uid_tria)) DEALLOCATE(uid_tria)
252
253 IF(ALLOCATED(tmp_ixtg)) DEALLOCATE(tmp_ixtg)
254 IF(ALLOCATED(tmp_iparttg)) DEALLOCATE(tmp_iparttg)
255
256 i1=1
257 i2=min0(50,numeltg0)
258
259 IF(ipri>=5)THEN
260 90 WRITE (iout,'(//A/A//A/)')' 2D TRIANGULAR ELEMENTS ',
261 & ' ELEMENT INTERNAL MATER PRSET NODE1 NODE2 NODE3'
262 DO i=i1,i2
263 mid = ipm (1,ixtg(1,i))
264 pid = igeo(1,ixtg(5,i))
265 WRITE (iout,'(7(I10,1X))') ixtg(nixtg,i),i,mid,pid,
266 . (itab(ixtg(j,i)),j=2,4)
267 ENDDO
268 IF(i2==numeltg0)GOTO 200
269 i1=i1+50
270 i2=min0(i2+50,numeltg0)
271 GOTO 90
272 ENDIF
273
274 200 CONTINUE
275
277 . msgtype=msgerror,
278 . anmode=aninfo_blind_1,
279 . prmod=msg_print)
280
281
282
283 ids = 79
284 i = 0
285 j = 0
286
287 CALL vdouble(ixtg(nixtg,1),nixtg,numeltg0,mess,0,bid)
288
289 ids = 44
290
291
292 RETURN
void anodset(int *id, int *type)
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)
integer function usr2sys(iu, itabm1, mess, id)
subroutine vdouble(list, ilist, nlist, mess, ir, rlist)