40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
68 USE reader_old_mod , ONLY : line
69 USE user_id_mod , ONLY : id_limit
70 use element_mod , only : nixtg
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)::ITAB(*)
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,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
127
128
129
130
131 ALLOCATE (sub_tria(numeltg0),stat=stat)
132 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
133 . msgtype=msgerror,
134 . c1='SUB_TRIA')
135 ALLOCATE (uid_tria(numeltg0),stat=stat)
136 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
137 . msgtype=msgerror,
138 . c1='UID_TRIA')
139 ALLOCATE (tmp_ixtg(nixtg,numeltg0),stat=stat)
140 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
141 . msgtype=msgerror,
142 . c1='TMP_IXTG')
143 ALLOCATE (tmp_iparttg(numeltg0),stat=stat)
144 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
145 . msgtype=msgerror,
146 . c1='tmp_iparttg')
147 SUB_TRIA(1:NUMELTG0) = 0
148 UID_TRIA(1:NUMELTG0) = 0
149 TMP_IXTG(1:NIXTG,1:NUMELTG0) = 0
150 TMP_IPARTTG(1:NUMELTG0) = 0
151 INDEX_PART = 1
152 UID = -1
153 KK=3
154 I = 0
155
156
157
158 CALL CPP_TRIA_READ(TMP_IXTG,NIXTG,TMP_IPARTTG,SUB_TRIA,UID_TRIA)
159
160
161
162 NUMELTG6 = 0
163 DO WHILE (KK <= 6)
164 DO N=1,NUMELTG0
165 IPARTTG_TMP = TMP_IPARTTG(N)
166
167 IF( IPART(4,INDEX_PART) /= IPARTTG_TMP)THEN
168 DO J=1,NPART
169 IF(IPART(4,J)== IPARTTG_TMP )INDEX_PART = J
170 ENDDO
171 ENDIF
172 ISH3N = IGEO(18,IPART(2,INDEX_PART))
173.AND. IF(KK == 6 ISH3N==31) NUMELTG6 = NUMELTG6 + 1
174
175.AND..OR..AND. IF((KK==3ISH3N/=31)(KK==6ISH3N==31))THEN
176 I = I + 1
177 ICNOD(I)=KK
178 DO J=1,NIXTG
179 IXTG(J,I) = TMP_IXTG(J,N)
180 ENDDO
181 IPARTTG(I) = TMP_IPARTTG(N)
182
183 IF(SUB_TRIA(N) /= 0)THEN
184.AND. IF(UID_TRIA(N) == 0 LSUBMODEL(SUB_TRIA(N))%UID /= 0)
185 . UID_TRIA(N) = LSUBMODEL(SUB_TRIA(N))%UID
186 ENDIF
187
188
189
190 IF(UID_TRIA(N) /= UID )THEN
191 UID = UID_TRIA(N)
192 IFLAGUNIT = 0
193 DO J=1,UNITAB%NUNITS
194 IF (UNITAB%UNIT_ID(J) == UID) THEN
195 FAC_L = UNITAB%FAC_L(J)
196 IFLAGUNIT = 1
197 ENDIF
198 ENDDO
199.AND. IF (UID/=0IFLAGUNIT==0) THEN
200 CALL ANCMSG(MSGID=643,ANMODE=ANINFO,MSGTYPE=MSGERROR,
201 . I1=UID,C1='/tria')
202 ENDIF
203 ENDIF
204
205
206
207 IF( IPART(4,INDEX_PART) /= IPARTTG(I) )THEN
208 DO J=1,NPART
209 IF(IPART(4,J)== IPARTTG(I) ) INDEX_PART = J
210 ENDDO
211 ENDIF
212 IF( IPART(4,INDEX_PART) /= IPARTTG(I) ) THEN
213 CALL ANCMSG(MSGID=402,
214 . MSGTYPE=MSGERROR,
215 . ANMODE=ANINFO_BLIND_1,
216 . C1="TRIA",
217 . I1=IPARTTG(I),
218 . I2=IPARTTG(I),
219 . PRMOD=MSG_CUMU)
220 ENDIF
221 IPARTTG(I) = INDEX_PART
222
223 MT=IPART(1,INDEX_PART)
224 IPID=IPART(2,INDEX_PART)
225 IXTG(1,I)=MT
226 IXTG(5,I)=IPID
227 IF (IXTG(NIXTG,I)>ID_LIMIT%GLOBAL)THEN
228 CALL ANCMSG(MSGID=509,ANMODE=ANINFO,MSGTYPE=MSGERROR,
229 . I1=IXTG(NIXTG,I),C1=LINE,C2='/tria')
230.AND. ELSEIF (NADMESH/=0IXTG(NIXTG,I)>ID_LIMIT%ADMESH)THEN
231 CALL ANCMSG(MSGID=1069,ANMODE=ANINFO,MSGTYPE=MSGERROR,
232 . I1=IXTG(NIXTG,I),C1=LINE,C2='/tria')
233 ENDIF
234
235 DO J=2,4
236 IXTG(J,I)=USR2SYS(IXTG(J,I),ITABM1,MESS,ID)
237 CALL ANODSET(IXTG(J,I), CHECK_SHELL)
238 ENDDO
239 ENDIF
240 IF (I == NUMELTG0) KK = 7
241 ENDDO
242 IF (I < NUMELTG0) THEN
243 KK = 6
244 ELSE
245
246 KK = 7
247 ENDIF
248 ENDDO
249 IF(ALLOCATED(SUB_TRIA)) DEALLOCATE(SUB_TRIA)
250 IF(ALLOCATED(UID_TRIA)) DEALLOCATE(UID_TRIA)
251
252 IF(ALLOCATED(TMP_IXTG)) DEALLOCATE(TMP_IXTG)
253 IF(ALLOCATED(TMP_IPARTTG)) DEALLOCATE(TMP_IPARTTG)
254
255 I1=1
256 I2=MIN0(50,NUMELTG0)
257
258 IF(IPRI>=5)THEN
259 90 WRITE (IOUT,'(//a/a//a/)')' 2d triangular elements ',
260 & ' element internal mater prset node1 node2 node3'
261 DO I=I1,I2
262 MID = IPM (1,IXTG(1,I))
263 PID = IGEO(1,IXTG(5,I))
264 WRITE (IOUT,'(7(i10,1x))') IXTG(NIXTG,I),I,MID,PID,
265 . (ITAB(IXTG(J,I)),J=2,4)
266 ENDDO
267 IF(I2==NUMELTG0)GOTO 200
268 I1=I1+50
269 I2=MIN0(I2+50,NUMELTG0)
270 GOTO 90
271 ENDIF
272
273 200 CONTINUE
274
275 CALL ANCMSG(MSGID=402,
276 . MSGTYPE=MSGERROR,
277 . ANMODE=ANINFO_BLIND_1,
278 . PRMOD=MSG_PRINT)
279
280
281
282 IDS = 79
283 I = 0
284 J = 0
285
286 CALL VDOUBLE(IXTG(NIXTG,1),NIXTG,NUMELTG0,MESS,0,BID)
287
288 IDS = 44
289
290
291 RETURN
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)