OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_cluster.F File Reference
#include "implicit_f.inc"
#include "units_c.inc"
#include "com04_c.inc"
#include "param_c.inc"
#include "scr17_c.inc"
#include "sphcom.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_cluster (clusters, unitab, iskn, igrbric, igrspring, ixs, ixr, nom_opt, lsubmodel)

Function/Subroutine Documentation

◆ hm_read_cluster()

subroutine hm_read_cluster ( type (cluster_), dimension(ncluster) clusters,
type (unit_type_), intent(in) unitab,
integer, dimension(liskn,*) iskn,
type (group_), dimension(ngrbric) igrbric,
type (group_), dimension(ngrspri) igrspring,
integer, dimension(nixs,numels) ixs,
integer, dimension(nixr,numelr) ixr,
integer, dimension(lnopt1,*) nom_opt,
type(submodel_data), dimension(nsubmod), intent(in) lsubmodel )

Definition at line 42 of file hm_read_cluster.F.

44C-----------------------------------------------
45C M o d u l e s
46C-----------------------------------------------
47 USE unitab_mod
48 USE message_mod
49 USE cluster_mod
50 USE groupdef_mod
54 USE reader_old_mod , ONLY : line, kline, key0, kcur
55 use element_mod , only : nixs,nixr
56C-----------------------------------------------
57C I m p l i c i t T y p e s
58C-----------------------------------------------
59#include "implicit_f.inc"
60C-----------------------------------------------
61C C o m m o n B l o c k s
62C-----------------------------------------------
63#include "units_c.inc"
64#include "com04_c.inc"
65#include "param_c.inc"
66#include "scr17_c.inc"
67#include "sphcom.inc"
68C-----------------------------------------------
69C D u m m y A r g u m e n t s
70C-----------------------------------------------
71 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
72 INTEGER ISKN(LISKN,*),IXS(NIXS,NUMELS),IXR(NIXR,NUMELR),NOM_OPT(LNOPT1,*)
73 TYPE (cluster_) ,DIMENSION(NCLUSTER) :: clusters
74 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(NSUBMOD)
75C-----------------------------------------------
76 TYPE (GROUP_) , DIMENSION(NGRBRIC) :: IGRBRIC
77 TYPE (GROUP_) , DIMENSION(NGRSPRI) :: IGRSPRING
78C-----------------------------------------------
79C L o c a l V a r i a b l e s
80C-----------------------------------------------
81 INTEGER I, J, K, II, JJ, KK, CLID, UID, IG, IGR, ISK, IFAIL, IEL, NEL, NNOD, IFLAGUNIT, NNOD0, NELMAX
82 INTEGER NOD1(2000),NOD2(2000),SUB_INDEX,ISK_L
83 my_real bid(1),ax(4),nx(4),fmax(2),mmax(2)
84 CHARACTER(LEN=NCHARTITLE)::TITR
85 CHARACTER(LEN=NCHARFIELD) :: KEY
86 parameter(nelmax = 500)
87 LOGICAL :: IS_AVAILABLE,FOUND
88C=======================================================================
89 is_available = .false.
90
91C--------------------------------------------------
92C START BROWSING MODEL CLUSTER
93C--------------------------------------------------
94c
95 CALL hm_option_start('/CLUSTER')
96c
97C--------------------------------------------------
98C EXTRACT DATAS
99C--------------------------------------------------
100 DO i=1,ncluster
101 titr = ''
102 CALL hm_option_read_key(lsubmodel,
103 . option_id = clid,
104 . unit_id = uid,
105 . submodel_index = sub_index,
106 . keyword2 = key,
107 . option_titr = titr)
108c
109 nom_opt(1,i)=clid
110 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,i),ltitr)
111c
112 iflagunit = 0
113 IF (uid > 0) THEN
114 DO j=1,unitab%NUNITS
115 IF (unitab%UNIT_ID(j) == uid) THEN
116 iflagunit = 1
117 EXIT
118 ENDIF
119 ENDDO
120 ENDIF
121 IF (uid / = 0 .and. iflagunit == 0) THEN
122 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,i1=clid,i2=uid,c1='CLUSTER',c2='CLUSTER',c3=titr)
123 ENDIF
124c----------------------------
125Card1
126 CALL hm_get_intv ('group_ID' ,igr ,is_available, lsubmodel)
127 CALL hm_get_intv ('skew_ID' ,isk ,is_available, lsubmodel)
128 CALL hm_get_intv ('ifail' ,ifail ,is_available, lsubmodel)
129
130Card2 Failure normal traction force
131
132 CALL hm_get_floatv('fn_fail1' ,fmax(1) ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv('scalefactor_a1',ax(1) ,is_available, lsubmodel, unitab)
134 CALL hm_get_floatv('scalefactor_b1',NX(1) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
135
136Card3 Failure tangent shear force
137
138 CALL HM_GET_FLOATV('fs_fail' ,FMAX(2) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
139 CALL HM_GET_FLOATV('scalefactor_a2',AX(2) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
140 CALL HM_GET_FLOATV('scalefactor_b2',NX(2) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
141
142Card4 Failure torsion moment
143
144 CALL HM_GET_FLOATV('mt_fail' ,MMAX(1) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
145 CALL HM_GET_FLOATV('scalefactor_a3',AX(3) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
146 CALL HM_GET_FLOATV('scalefactor_b3',NX(3) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
147
148Card5 Failure bending moment
149
150 CALL HM_GET_FLOATV('mb_fail' ,MMAX(2) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
151 CALL HM_GET_FLOATV('scalefactor_a4',AX(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
152 CALL HM_GET_FLOATV('scalefactor_b4',NX(4) ,IS_AVAILABLE, LSUBMODEL, UNITAB)
153
154c----------------------------
155 ISK_L = ISK
156 IF (ISK > 0) THEN
157 FOUND = .FALSE.
158 DO J=0,NUMSKW+MIN(1,NSPCOND)*NUMSPH+NSUBMOD
159 IF (ISK == ISKN(4,J+1)) THEN
160 ISK = J+1
161 FOUND = .TRUE.
162 EXIT
163 ENDIF
164 ENDDO
165.NOT. IF (FOUND) THEN
166 CALL ANCMSG(MSGID=137,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='cluster',C2='cluster',I2=ISK,I1=CLID,C3=TITR)
167 ENDIF
168 ENDIF
169 NOD1 = 0
170 NOD2 = 0
171 NNOD = 0
172 NEL = 0
173c----------------------------
174c BRICK CLUSTER
175c----------------------------
176 KK = NGRNOD+1
177 IF (KEY(1:5) == 'brick') THEN
178 DO IG = 1,NGRBRIC
179 II = IG
180.and. IF (IGR == IGRBRIC(IG)%ID IGRBRIC(IG)%GRTYPE == 1) THEN
181 NEL = IGRBRIC(IG)%NENTITY
182 IF (NEL > NELMAX) THEN
183 CALL ANCMSG(MSGID=1055, ANMODE=ANINFO, MSGTYPE=MSGERROR, I1=CLID, I2=NEL)
184 EXIT
185 ENDIF
186 CLUSTERS(I)%ID = CLID
187 CLUSTERS(I)%IGR = II
188 CLUSTERS(I)%TYPE = 1
189 CLUSTERS(I)%SKEW = ISK
190 CLUSTERS(I)%NEL = NEL
191 CLUSTERS(I)%IFAIL= IFAIL
192 CLUSTERS(I)%OFF = 1
193 CLUSTERS(I)%FAIL = ONE
194c
195 ALLOCATE (CLUSTERS(I)%NG(NEL) )
196 ALLOCATE (CLUSTERS(I)%ELEM(NEL) )
197 DO IEL = 1,NEL
198 JJ = IGRBRIC(IG)%ENTITY(IEL)
199 CLUSTERS(I)%ELEM(IEL) = JJ ! Sys number
200c CLUSTERS(I)%ELEM(IEL-IAD+1) = IXS(11,JJ) ! Elem ID
201 DO K=2,5
202 NNOD = NNOD+1
203 NOD1(NNOD) = IXS(K ,JJ)
204 NOD2(NNOD) = IXS(K+4,JJ)
205 ENDDO
206 ENDDO
207c
208 NNOD0=NNOD
209 CALL ITRIMHPSORT(NOD1,NNOD)
210 NNOD = NNOD0
211 CALL ITRIMHPSORT(NOD2,NNOD)
212 CLUSTERS(I)%NNOD = NNOD
213c
214 ALLOCATE (CLUSTERS(I)%NOD1(NNOD))
215 ALLOCATE (CLUSTERS(I)%NOD2(NNOD))
216 DO K=1,NNOD
217 CLUSTERS(I)%NOD1(K) = NOD1(K)
218 CLUSTERS(I)%NOD2(K) = NOD2(K)
219 END DO
220c
221 WRITE(IOUT,1001) CLID
222c
223 EXIT ! group found => exit loop
224 ENDIF
225 ENDDO ! IG = 1,NGRBRIC
226c
227 ELSEIF (KEY(1:6) == 'spring') THEN
228c----------------------------
229c SPRING CLUSTER
230c----------------------------
231 KK = NGRNOD+NGRBRIC+NGRQUAD+NGRSHEL+NGRTRUS+NGRBEAM + 1
232 DO IG = 1,NGRSPRI
233 II = KK+IG-1
234.and. IF (IGR == IGRSPRING(IG)%ID IGRSPRING(IG)%GRTYPE == 6) THEN
235 NEL = IGRSPRING(IG)%NENTITY
236 IF (NEL > NELMAX) THEN
237 CALL ANCMSG(MSGID=1055,
238 . ANMODE=ANINFO,
239 . MSGTYPE=MSGERROR,
240 . I1=CLID,
241 . I2=NEL)
242 EXIT
243 ENDIF
244 CLUSTERS(I)%ID = CLID
245 CLUSTERS(I)%IGR = II
246 CLUSTERS(I)%TYPE = 2
247 CLUSTERS(I)%SKEW = ISK
248 CLUSTERS(I)%NEL = NEL
249 CLUSTERS(I)%IFAIL= IFAIL
250 CLUSTERS(I)%OFF = 1
251 CLUSTERS(I)%FAIL = ONE
252c
253 ALLOCATE (CLUSTERS(I)%NG(NEL) )
254 ALLOCATE (CLUSTERS(I)%ELEM(NEL) )
255 DO IEL = 1,NEL
256 JJ = IGRSPRING(IG)%ENTITY(IEL)
257 CLUSTERS(I)%ELEM(IEL) = JJ !IXR(6,JJ) ! Elem ID
258 NNOD = NNOD+1
259 NOD1(NNOD) = IXR(2,JJ)
260 NOD2(NNOD) = IXR(3,JJ)
261 ENDDO
262c
263 NNOD0=NNOD
264 CALL ITRIMHPSORT(NOD1,NNOD)
265 NNOD = NNOD0
266 CALL ITRIMHPSORT(NOD2,NNOD)
267 CLUSTERS(I)%NNOD = NNOD
268c
269 ALLOCATE (CLUSTERS(I)%NOD1(NNOD) )
270 ALLOCATE (CLUSTERS(I)%NOD2(NNOD) )
271 DO K=1,NNOD
272 CLUSTERS(I)%NOD1(K) = NOD1(K)
273 CLUSTERS(I)%NOD2(K) = NOD2(K)
274 END DO
275c
276 WRITE(IOUT,1002) CLID
277c
278 EXIT ! group found => exit loop
279 ENDIF
280 ENDDO ! IG = 1,NGRSPRI
281 ENDIF
282c--------------------------
283 IF (NEL == 0) THEN
284 CALL ANCMSG(MSGID=1054,
285 . ANMODE=ANINFO,
286 . MSGTYPE=MSGERROR,
287 . I1=CLID,
288 . I2=IGR)
289 CYCLE
290 ENDIF
291c--------------------------
292 IF (IFAIL > 0) THEN
293 IF (FMAX(1) == ZERO) FMAX(1) = INFINITY
294 IF (FMAX(2) == ZERO) FMAX(2) = INFINITY
295 IF (MMAX(1) == ZERO) MMAX(1) = INFINITY
296 IF (MMAX(2) == ZERO) MMAX(2) = INFINITY
297 ALLOCATE (CLUSTERS(I)%FMAX(2) )
298 ALLOCATE (CLUSTERS(I)%MMAX(2) )
299 CLUSTERS(I)%FMAX(1) = FMAX(1)
300 CLUSTERS(I)%FMAX(2) = FMAX(2)
301 CLUSTERS(I)%MMAX(1) = MMAX(1)
302 CLUSTERS(I)%MMAX(2) = MMAX(2)
303 ELSE
304 ALLOCATE (CLUSTERS(I)%FMAX(0) )
305 ALLOCATE (CLUSTERS(I)%MMAX(0) )
306 ENDIF
307 IF (IFAIL == 3) THEN
308 ALLOCATE (CLUSTERS(I)%AX(4) )
309 ALLOCATE (CLUSTERS(I)%NX(4) )
310 IF (AX(1) == ZERO) AX(1) = ONE
311 IF (AX(2) == ZERO) AX(2) = ONE
312 IF (AX(3) == ZERO) AX(3) = ONE
313 IF (AX(4) == ZERO) AX(4) = ONE
314 IF (NX(1) == ZERO) NX(1) = ONE
315 IF (NX(2) == ZERO) NX(2) = ONE
316 IF (NX(3) == ZERO) NX(3) = ONE
317 IF (NX(4) == ZERO) NX(4) = ONE
318 CLUSTERS(I)%AX(1) = AX(1)
319 CLUSTERS(I)%AX(2) = AX(2)
320 CLUSTERS(I)%AX(3) = AX(3)
321 CLUSTERS(I)%AX(4) = AX(4)
322 CLUSTERS(I)%NX(1) = NX(1)
323 CLUSTERS(I)%NX(2) = NX(2)
324 CLUSTERS(I)%NX(3) = NX(3)
325 CLUSTERS(I)%NX(4) = NX(4)
326 ELSE
327 ALLOCATE (CLUSTERS(I)%AX(0) )
328 ALLOCATE (CLUSTERS(I)%NX(0) )
329 ENDIF
330c-----
331 WRITE(IOUT,2000) IGR, ISK_L, NEL, NNOD*2, IFAIL
332 IF (IFAIL > 0) WRITE(IOUT,2001) FMAX(1),FMAX(2),MMAX(1),MMAX(2)
333 IF (IFAIL == 3) WRITE(IOUT,2002) AX(1),AX(2),AX(3),AX(4),
334 . NX(1),NX(2),NX(3),NX(4)
335
336 WRITE(IOUT,9000)
337c-----
338 ENDDO ! I=1,NCLUSTER
339C-------------------------------------
340 1001 FORMAT(/
341 & 5X,'spotweld cluster of brick elements, id=',I10)
342 1002 FORMAT(/
343 & 5X,'spotweld cluster of spring elements, id=',I10)
344 2000 FORMAT(
345 & 10X,'element group id. . . . . . . . . . . . .=',I10/,
346 & 10X,'skew id . . . . . . . . . . . . . . . . .=',I10/,
347 & 10X,'number of elements. . . . . . . . . . . .=',I10/,
348 & 10X,'number of nodes . . . . . . . . . . . . .=',I10/,
349 & 10X,'failure flag . . . . . . . . . . . . . .=',I10)
350 2001 FORMAT(
351 & 10X,'max normal force. . . . . . . . . . . . .=',1PG20.13/,
352 & 10X,'max tangent force . . . . . . . . . . . .=',1PG20.13/,
353 & 10X,'max torsion moment. . . . . . . . . . . .=',1PG20.13/,
354 & 10X,'max bending moment. . . . . . . . . . . .=',1PG20.13)
355 2002 FORMAT(
356 & 10X,'failure coefficient a1. . . . . . . . . .=',1PG20.13/,
357 & 10X,'failure coefficient a2. . . . . . . . . .=',1PG20.13/,
358 & 10X,'failure coefficient a3. . . . . . . . . .=',1PG20.13/,
359 & 10X,'failure coefficient a4. . . . . . . . . .=',1PG20.13/,
360 & 10X,'failure exponent n1 . . . . . . . . . . .=',1PG20.13/,
361 & 10X,'failure exponent n2 . . . . . . . . . . .=',1PG20.13/,
362 & 10X,'failure exponent n3 . . . . . . . . . . .=',1PG20.13/,
363 & 10X,'failure exponent n4 . . . . . . . . . . .=',1PG20.13)
364 9000 FORMAT(10X/)
365C-----------
366 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
#define max(a, b)
Definition macros.h:21
initmumps id
integer, parameter nchartitle
integer, parameter ncharfield
integer nsubmod
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)
Definition message.F:895
subroutine fretitl(titr, iasc, l)
Definition freform.F:615