46
47
48
49
52 USE intbuf_fric_mod
58
59
60
61#include "implicit_f.inc"
62
63
64
65#include "com04_c.inc"
66#include "units_c.inc"
67#include "param_c.inc"
68#include "scr17_c.inc"
69
70
71
72 TYPE (UNIT_TYPE_),INTENT(IN) ::
73 INTEGER IFLAG ,NPFRICORTH
74 INTEGER IPART(LIPART1,*) ,PFRICORTH(*),IREPFORTH(*),TAGPRT_FRIC(*),
75 . ISKN(LISKN,*)
76
78 . phiforth(*) ,vforth(3,*) ,skew(lskew,*) ,rtrans(ntransf,*)
79
80
81 TYPE(INTBUF_FRIC_STRUCT_) INTBUF_FRIC_TAB(*)
82
83 TYPE (GROUP_) , DIMENSION(NGRPART) :: IGRPART
84 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
85
86
87
88 INTEGER NIF ,NIN ,ISK ,IERRR ,IREP ,NOINTFORTH ,IDSK ,
89 . FLAGP ,FLAGGRP ,GRPART ,IDPART ,N ,KK ,IDTGRS ,IPL ,J ,IP ,
90 . IPG ,SUB_ID ,NINPUT ,NL
92 CHARACTER(LEN=NCHARTITLE) :: TITR
93 LOGICAL IS_AVAILABLE
94
95
96
97
98 is_available = .false.
99
100
101
102
103
104 IF(iflag==1) WRITE(iout,1000)
105
106 npfricorth = 0
107
108
109
110
112
113
114
115 DO nin=1,nfric_orient
116
117
118
119
121 . option_id = nointforth,
122 . submodel_id
123 . option_titr = titr)
124
125
126
127
128
129 IF(iflag==1) THEN
130 WRITE(iout,1500) nointforth, trim(titr)
131 ENDIF
132
133
134
135 CALL hm_get_intv(
'n_orient',ninput,is_available,lsubmodel)
136
138
139
140
145
146
147
152
153 IF (sub_id /= 0)
154 .
CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
155
156
157
158
159 flagp = 0
160 flaggrp = 0
161 IF(idpart/=0)THEN
162 DO n=1,npart
163 IF(idpart == ipart(4,n))THEN
164 flagp = 1
165 ip = n
166 EXIT
167 ENDIF
168 ENDDO
169
170 IF(flagp == 0)THEN
172 . msgtype=msgerror,
173 . anmode=aninfo_blind_1,
174 . i1=nointforth,
175 . c1=titr,
176 . i2=idpart)
177
178 ENDIF
179 ENDIF
180
181
182
183 IF(grpart/=0)THEN
184 flaggrp = 0
185 kk=ngrnod+
186 + ngrbric+ngrquad+ngrshel+ngrsh3n+ngrtrus+ngrbeam+ngrspri
187 DO n=1,ngrpart
188 IF (igrpart(n)%ID == grpart) THEN
189 idtgrs=n
190 flaggrp = 1
191 EXIT
192 END IF
193 END DO
194 IF(flaggrp == 0) THEN
196 . msgtype=msgerror,
197 . anmode=aninfo_blind_1,
198 . i1=nointforth,
199 . c1=titr,
200 . i2=grpart)
201 ENDIF
202 ENDIF
203
204
205
206
207
208
209 an=sqrt(vx*vx+vy*vy+vz*vz)
210 IF(an < em10)THEN
211 vx=one
212 vy=zero
213 vz=zero
214 ELSE
215 vx=vx/an
216 vy=vy/an
217 vz=vz/an
218 ENDIF
219
220 isk = 0
221 IF (idsk/=0) THEN
222 ierrr = 0
224 IF(idsk == iskn(4,j+1)) THEN
225 isk=j+1
226 ierrr = 1
227 EXIT
228 ENDIF
229 END DO
230 IF(ierrr == 0 ) THEN
232 . msgtype=msgerror,
233 . anmode=aninfo,
234 . c1='FRICTION ORIENTATION PART',
235 . i1=nointforth,
236 . c2='FRICTION ORIENTATION PART',
237 . c3=titr,
238 . i2=idsk)
239 ENDIF
240 ENDIF
241
242
243
244
245
246 IF(flagp > 0) THEN
247 ipg = tagprt_fric(ip)
248 IF(ipg > 0) THEN
249 DO nif =1,ninterfric
251 . ipg,intbuf_fric_tab(nif)%S_TABPARTS_FRIC,
252 . intbuf_fric_tab(nif)%TABPARTS_FRIC,ipl )
253 IF(ipl >0) THEN
254 npfricorth = npfricorth + 1
255 IF(iflag ==1 ) THEN
256 pfricorth(ip) = npfricorth
257 phiforth(npfricorth) = phi
258 irepforth(npfricorth) = irep
259 IF(isk == 0) THEN
260 vforth(1,npfricorth) = vx
261 vforth(2,npfricorth) = vy
262 vforth(3,npfricorth) = vz
263 ELSE
264 vforth(1,npfricorth) = skew(1,isk)
265 vforth(2,npfricorth) = skew(2,isk)
266 vforth(3,npfricorth) = skew(3,isk)
267 ENDIF
268 ENDIF
269 ENDIF
270 ENDDO
271 ENDIF
272
273 IF(iflag==1) THEN
274 WRITE(iout,1501) idpart
275 IF(isk==0) THEN
276 WRITE(iout,1503) irep,vx,vy,vz
277 ELSE
278 WRITE(iout,1504) irep,idsk
279 ENDIF
280 ENDIF
281 ENDIF
282
283 IF(flaggrp > 0) THEN
284 DO j=1,igrpart(idtgrs)%NENTITY
285 ip=igrpart(idtgrs)%ENTITY(j)
286 ipg = tagprt_fric(ip)
287 IF(ipg > 0) THEN
288 DO nif =1,ninterfric
290 . ipg,intbuf_fric_tab(nif)%S_TABPARTS_FRIC,
291 . intbuf_fric_tab(nif)%TABPARTS_FRIC,ipl )
292 IF(ipl > 0) THEN
293 npfricorth = npfricorth + 1
294 IF(iflag ==1 ) THEN
295 pfricorth(ip) = npfricorth
296 phiforth(npfricorth) = phi
297 irepforth(npfricorth) = irep
298 IF(isk == 0) THEN
299 vforth(1,npfricorth) = vx
300 vforth(2,npfricorth) = vy
301 vforth(3,npfricorth) = vz
302 ELSE
303 vforth(1,npfricorth) = skew(1,isk)
304 vforth(2,npfricorth) = skew(2,isk)
305 vforth(3,npfricorth) = skew(3,isk)
306 ENDIF
307 ENDIF
308 ENDIF
309 ENDDO
310 ENDIF
311 ENDDO
312 IF(iflag==1) THEN
313 WRITE(iout,1502) grpart
314 IF(isk==0) THEN
315 WRITE(iout,1503) irep,vx,vy,vz
316 ELSE
317 WRITE(iout,1504) irep,idsk
318 ENDIF
319 ENDIF
320 ENDIF
321
322
323 ENDDO
324 ENDDO
325
326
327 RETURN
328
329 1000 FORMAT( /1x,' FRICTION ORIENTATIONS ' /
330 . 1x,' -------------- '// )
331
332 1500 FORMAT(/1x,' FRICTION ORIENTATIONS CARD NUMBER :',i10,1x,a/
333 . 1x,' ------------------------------- '/)
334 1501 FORMAT(/
335 . ' PART . . . . . . . . . . . . . . . . . . ',i10)
336 1502 FORMAT(/
337 . ' GR_PART . . . . . . . . . . . . . . . . .',i10)
338 1503 FORMAT(
339 . ' LOCAL ORTOTHROPY SYSTEM FLAG. . . . . . =',i10/,
340 . ' X COMPONENT OF DIR 1 OF ORTHOTROPY. . . =',1pg20.13/,
341 . ' Y COMPONENT OF DIR 1 OF ORTHOTROPY. . . =',1pg20.13/,
342 . ' Z COMPONENT OF DIR 1 OF ORTHOTROPY. . . =',1pg20.13/)
343 1504 FORMAT(
344 . ' LOCAL ORTOTHROPY SYSTEM FLAG. . . . . . =',i10/,
345 . ' SKEW OF THE FIRST ORTHOTROPY DIRECTION. =',i10/)
346
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
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)
subroutine friction_parts_search(ip, npartsfric, partsfric, ipl)
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)
character *2 function nl()
subroutine subrotvect(x, y, z, rtrans, sub_id, lsubmodel)