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
70 USE reader_old_mod , ONLY : line
71 USE user_id_mod , ONLY : id_limit
72 use element_mod , only : nixc
73
74
75
76
77
78
79
80
81#include "implicit_f.inc"
82
83
84
85#include "analyse_name.inc"
86
87
88
89#include "scr17_c.inc"
90#include "com04_c.inc"
91#include "units_c.inc"
92#include "scr03_c.inc"
93#include "param_c.inc"
94#include "titr_c.inc"
95#include "remesh_c.inc"
96
97
98
99
100 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
101 INTEGER,INTENT(IN)::ITAB(*)
102 INTEGER,INTENT(IN)::ITABM1(*)
103 INTEGER,INTENT(IN)::IPART(LIPART1,*)
104 INTEGER,INTENT(IN)::IGEO(NPROPGI,*)
105 INTEGER,INTENT(IN)::IPM(NPROPMI,*)
106 TYPE(),INTENT(IN)::LSUBMODEL(NSUBMOD)
107
108 INTEGER,INTENT(OUT)::IXC(NIXC,*)
109 INTEGER,INTENT(OUT)::IPARTC(*)
110 INTEGER,INTENT(OUT)::ITAG(*)
112 . INTENT(OUT)::angle(*)
114 . INTENT(OUT)::thk(*)
115
116
117
118 INTEGER I, J, I1, I2, ID,IDS,IPID,MT,MID,PID,UID,NDEGEN,STAT,
119 . IFLAGUNIT,ISHXFEM,
120 CHARACTER MESS*40, MESS2*40
122 . bid,fac_l
123 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_SHELL,UID_SHELL
124 real*8, DIMENSION(:), ALLOCATABLE :: hm_thk,hm_angle
125
126
127
128 INTEGER USR2SYS
129 DATA mess/'3D SHELL ELEMENTS DEFINITION '/
130 DATA mess2/'3D SHELL ELEMENTS SELECTION FOR TH PLOT '/
131
132
133
134
135
136 ALLOCATE (sub_shell(numelc0),stat=stat)
137 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
138 . msgtype=msgerror,
139 . c1='SUB_SHELL')
140 ALLOCATE (uid_shell(numelc0),stat=stat)
141 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
142 . msgtype=msgerror,
143 . c1='UID_SHELL')
144 ALLOCATE (hm_thk(numelc0),stat=stat)
145 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
146 . msgtype=msgerror,
147 . c1='HM_THK')
148 ALLOCATE (hm_angle(numelc0),stat=stat)
149 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
150 . msgtype=msgerror,
151 . c1='HM_ANGLE')
152 sub_shell(1:numelc0) = 0
153 uid_shell(1:numelc0) = 0
154 hm_thk(1:numelc0) = zero
155 hm_angle(1:numelc0) = zero
156 ndegen = 0
157 index_part = 1
158 uid = -1
159
160
161
162 CALL cpp_shell_read(ixc,nixc,ipartc,hm_angle,hm_thk,sub_shell,uid_shell)
163
164
165
166 DO i=1,numelc0
167
168
169
170 angle(i) = hm_angle(i) * pi / hundred80
171 thk(i) = hm_thk(i)
172
173
174
175 IF(sub_shell(i) /= 0)THEN
176 IF(uid_shell(i) == 0 .AND. lsubmodel(sub_shell(i))%UID /= 0)
177 . uid_shell(i) = lsubmodel(sub_shell(i))%UID
178 ENDIF
179
180
181
182 fac_l = one
183 IF(uid_shell(i) /= uid )THEN
184 uid = uid_shell(i)
185 iflagunit = 0
186 DO j=1,unitab%NUNITS
187 IF (unitab%UNIT_ID(j) == uid) THEN
188 fac_l = unitab%FAC_L(j)
189 iflagunit = 1
190 ENDIF
191 ENDDO
192 IF (uid/=0.AND.iflagunit==0) THEN
193 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,
194 . i1=uid,c1='/SHELL')
195 ENDIF
196 ENDIF
197 thk(i) = thk(i) * fac_l
198
199
200
201 IF( ipart(4,index_part) /= ipartc(i) )THEN
202 DO j=1,npart
203 IF(ipart(4,j)== ipartc(i) ) index_part = j
204 ENDDO
205 ENDIF
206 IF(ipart(4,index_part) /= ipartc(i)) THEN
208 . msgtype=msgerror,
209 . anmode=aninfo_blind_1,
210 . c1="SHELL",
211 . i1=ipartc(i),
212 . i2=ipartc(i),
213 . prmod=msg_cumu)
214 ENDIF
215 ipartc(i) = index_part
216
217 mt=ipart(1,index_part)
218 ipid=ipart(2,index_part)
219 ixc(1,i)=mt
220 ixc(6,i)=ipid
221 IF (ixc(nixc,i)>id_limit%GLOBAL)THEN
222 CALL ancmsg(msgid=509,anmode=aninfo,msgtype=msgerror,
223 . i1=ixc(nixc,i),c1=line,c2='/SHELL')
224 ELSEIF (nadmesh/=0.AND.ixc(nixc,i)>id_limit%ADMESH)THEN
225 CALL ancmsg(msgid=1069,anmode=aninfo,msgtype=msgerror,
226 . i1=ixc(nixc,i),c1=line,c2='/SHELL')
227 ENDIF
228 IF( ( ixc(4,i) == ixc(5,i)) .OR.
229 . ( ixc(5,i) == 0 )) THEN
230 ndegen = ndegen + 1
232 . msgtype=msgwarning,
233 . i1=ixc(nixc,i),
234 . anmode=aninfo_blind_2,
235 . prmod=msg_cumu)
236 ENDIF
237 IF(thk(i)>0) THEN
238 CALL apartset(index_part, check_thick_shell)
239 ENDIF
240
241 DO j=2,5
242 ixc(j,i)=
usr2sys(ixc(j,i),itabm1,mess,
id)
243 CALL anodset(ixc(j,i), check_shell)
244 ENDDO
245
246 ishxfem = igeo(19,ipid)
247
248 IF(ishxfem > 0) THEN
249 DO j=2,5
250 itag(ixc(j,i)) = 1
251 ENDDO
252 ENDIF
253 ENDDO
254
255
256 IF(ALLOCATED(sub_shell)) DEALLOCATE(sub_shell)
257 IF(ALLOCATED(uid_shell)) DEALLOCATE(uid_shell)
258 IF(ALLOCATED(hm_thk)) DEALLOCATE(hm_thk)
259 IF(ALLOCATED(hm_angle)) DEALLOCATE(hm_angle)
260
261 i1=1
262 i2=min0(50,numelc0)
263
264 IF(ipri>=5)THEN
265 90 WRITE (iout,'(//A/A//A,A/)')titre(110),titre(111),titre(102),titre(105)
266 DO i=i1,i2
267 mid = ipm(1,ixc(1,i))
268 pid = igeo(1,ixc(6,i))
269 WRITE (iout,fmt='(8(I10,1X),1PG20.13,1X,1PG20.13)') ixc(nixc,i),i,mid,pid,
270 . (itab(ixc(j,i)),j=2,5),angle(i),thk(i)
271 ENDDO
272 IF(i2==numelc0)GOTO 200
273 i1=i1+50
274 i2=min0(i2+50,numelc0)
275 GOTO 90
276 ENDIF
277
278 200 CONTINUE
279
281 . msgtype=msgerror,
282 . anmode=aninfo_blind_1,
283 . prmod=msg_print)
284
285
286
287 ids = 79
288 i = 0
289 j = 0
290 CALL vdouble(ixc(nixc,1),nixc,numelc0,mess,0,bid)
291 ids = 17
292
293 RETURN
294
void anodset(int *id, int *type)
void apartset(int *id, int *type)
integer, parameter nchartitle
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)