OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_submodel.F File Reference
#include "implicit_f.inc"
#include "scr17_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_submodel (lsubmodel)

Function/Subroutine Documentation

◆ hm_read_submodel()

subroutine hm_read_submodel ( type(submodel_data), dimension(*), intent(out) lsubmodel)

Definition at line 37 of file hm_read_submodel.F.

38C-----------------------------------------------
39C ROUTINE DESCRIPTION :
40C ===================
41C READ //SUBMODELs USING HM_READER
42C BUILD //SUBMODEL DATA STRUCTURE
43C-----------------------------------------------
44C DUMMY ARGUMENTS DESCRIPTION:
45C ===================
46C
47C NAME DESCRIPTION
48C
49C LSUBMODEL SUBMODEL STRUCTURE
50C-----------------------------------------------
51C M o d u l e s
52C-----------------------------------------------
53 USE message_mod
54 USE submodel_mod
56 USE user_id_mod , ONLY : id_limit
57C-----------------------------------------------
58C I m p l i c i t T y p e s
59C-----------------------------------------------
60#include "implicit_f.inc"
61C-----------------------------------------------
62C C o m m o n B l o c k s
63C-----------------------------------------------
64#include "scr17_c.inc"
65C-----------------------------------------------
66C D u m m y A r g u m e n t s
67C-----------------------------------------------
68C OUTPUT ARGUMENTS
69 TYPE(SUBMODEL_DATA),INTENT(OUT)::LSUBMODEL(*)
70C-----------------------------------------------
71C L o c a l V a r i a b l e s
72C-----------------------------------------------
73 INTEGER I,CUR_SUBMOD,ISUB_HIERARCHY,ISUBSKEW,STAT
74 INTEGER, DIMENSION(:), ALLOCATABLE :: NOSUBMOD,IFATHER,LEVEL,UID_SUB
75 INTEGER, DIMENSION(:,:), ALLOCATABLE :: OFFSETS
76 INTEGER NB_BEGIN,SCHAR,SUB_INDEX,NBUNIT_SUB
77 LOGICAL :: IS_AVAILABLE
78C-----------------------------------------------
79C E x t e r n a l F u n c t i o n s
80C-----------------------------------------------
81C--------------------------------------------------------
82 IF(nsubmod > 0)THEN
83 ALLOCATE (nosubmod(nsubmod),stat=stat)
84 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
85 . msgtype=msgerror,
86 . c1='NOSUBMOD')
87 ALLOCATE (ifather(nsubmod),stat=stat)
88 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
89 . msgtype=msgerror,
90 . c1='IFATHER')
91 ALLOCATE (level(nsubmod),stat=stat)
92 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
93 . msgtype=msgerror,
94 . c1='LEVEL')
95 ALLOCATE (offsets(7,nsubmod),stat=stat)
96 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
97 . msgtype=msgerror,
98 . c1='OFFSETS')
99 ALLOCATE (uid_sub(nsubmod),stat=stat)
100 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
101 . msgtype=msgerror,
102 . c1='UID_SUB')
103 nosubmod = 0
104 ifather = 0
105 level = 1
106 lsubmodel(1:nsubmod)%NOSUBMOD=0
107 lsubmodel(1:nsubmod)%NBTRANS=0
108 lsubmodel(1:nsubmod)%LEVEL=0
109 lsubmodel(1:nsubmod)%IFATHER=0
110 lsubmodel(1:nsubmod)%UID=0
111 uid_sub(1:nsubmod)=0
112 offsets(1:7,1:nsubmod)=0
113 ELSE
114 ALLOCATE (nosubmod(0),stat=stat)
115 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
116 . msgtype=msgerror,
117 . c1='NOSUBMOD')
118 ALLOCATE (ifather(0),stat=stat)
119 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
120 . msgtype=msgerror,
121 . c1='IFATHER')
122 ALLOCATE (level(0),stat=stat)
123 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
124 . msgtype=msgerror,
125 . c1='LEVEL')
126 ALLOCATE (offsets(0,0),stat=stat)
127 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
128 . msgtype=msgerror,
129 . c1='OFFSETS')
130 ALLOCATE (uid_sub(0),stat=stat)
131 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
132 . msgtype=msgerror,
133 . c1='UID_SUB')
134 ENDIF
135C
136 IF(nsubmod > 0) CALL cpp_submodel_build(ifather,nosubmod,level,offsets,uid_sub)
137C
138 DO i=1,nsubmod
139 lsubmodel(i)%IFATHER = ifather(i)
140 lsubmodel(i)%NOSUBMOD = nosubmod(i)
141 lsubmodel(i)%LEVEL = level(i)
142 lsubmodel(i)%UID = uid_sub(i)
143 lsubmodel(i)%OFF_DEF = offsets(1,i)
144 lsubmodel(i)%OFF_NOD = offsets(2,i)
145 lsubmodel(i)%OFF_EL = offsets(3,i)
146 lsubmodel(i)%OFF_PART = offsets(4,i)
147 lsubmodel(i)%OFF_MAT = offsets(5,i)
148 lsubmodel(i)%OFF_PROP = offsets(6,i)
149 lsubmodel(i)%OFF_SUBMOD = offsets(7,i)
150 ENDDO
151c
152 isubskew = 1000000000
153 DO i=1,nsubmod
154 isubskew = isubskew + 1
155 IF (lsubmodel(i)%SKEW == 0) lsubmodel(i)%SKEW = isubskew
156 ENDDO
157 IF (nsubmod /= 0) THEN
158 DO i=1,nsubmod
159 cur_submod = i
160 DO WHILE (lsubmodel(cur_submod)%IFATHER /= 0)
161 cur_submod = lsubmodel(cur_submod)%IFATHER
162 lsubmodel(i)%LEVEL = lsubmodel(i)%LEVEL + 1
163 ENDDO
164 ENDDO
165 ENDIF
166C
167 nbunit_sub = 0
168 IF(nsubmod > 0)THEN
169 CALL hm_option_count('/BEGIN',nb_begin)
170 schar = 20
171 IF (nb_begin /= 0) THEN
172 CALL hm_option_start('/BEGIN')
173 DO i=1,nb_begin
174 CALL hm_option_read_key(lsubmodel,
175 . submodel_index = sub_index)
176 IF (sub_index /= 0) THEN
177 nbunit_sub = nbunit_sub + 1
178 lsubmodel(sub_index)%UID = id_limit%UNIT + nbunit_sub
179 ENDIF
180 ENDDO
181c
182
183 ENDIF
184 ENDIF
185C
186c print *,'INTERNAL_ID,USER_ID,FATHER,OFF_DEF,UID'
187c DO I=1,NSUBMOD
188c print *,I,LSUBMODEL(I)%NOSUBMOD,LSUBMODEL(I)%IFATHER,LSUBMODEL(I)%OFF_DEF,
189c . LSUBMODEL(I)%UID
190c ENDDO
191c
192 IF (ALLOCATED(nosubmod)) DEALLOCATE(nosubmod)
193 IF (ALLOCATED(ifather)) DEALLOCATE(ifather)
194 IF (ALLOCATED(level)) DEALLOCATE(level)
195 IF (ALLOCATED(offsets)) DEALLOCATE(offsets)
196C-----------
197 RETURN
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_option_start(entity_type)
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:889