OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_sh3n.F File Reference
#include "implicit_f.inc"
#include "analyse_name.inc"
#include "com04_c.inc"
#include "units_c.inc"
#include "scr03_c.inc"
#include "scr17_c.inc"
#include "param_c.inc"
#include "remesh_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_sh3n (ixtg, itab, itabm1, ipart, iparttg, thk, pm, geo, icnod, igeo, ipm, unitab, angle, lsubmodel)

Function/Subroutine Documentation

◆ hm_read_sh3n()

subroutine hm_read_sh3n ( integer, dimension(nixtg,*), intent(out) ixtg,
integer, dimension(*), intent(in) itab,
integer, dimension(*), intent(in) itabm1,
integer, dimension(lipart1,*), intent(in) ipart,
integer, dimension(*), intent(out) iparttg,
dimension(*), intent(out) thk,
dimension(npropm,*), intent(in) pm,
dimension(npropg,*), intent(in) geo,
integer, dimension(*), intent(out) icnod,
integer, dimension(npropgi,numgeo), intent(in) igeo,
integer, dimension(npropmi,*), intent(in) ipm,
type (unit_type_), intent(in) unitab,
dimension(*), intent(out) angle,
type(submodel_data), dimension(*), intent(in) lsubmodel )

Definition at line 39 of file hm_read_sh3n.F.

42C-----------------------------------------------
43C ROUTINE DESCRIPTION :
44C ===================
45C READ /SH3N ELEMENTS USING HM_READER
46C-----------------------------------------------
47C DUMMY ARGUMENTS DESCRIPTION:
48C ===================
49C
50C NAME DESCRIPTION
51C
52C IXTG /SH3N ARRAY : CONNECTIVITY, ID, MID PID
53C ITAB USER ID OF NODES
54C ITABM1 REVERSE TAB ITAB
55C IPART PART ARRAY
56C IPARTTG INTERNAL PART ID OF A GIVEN SH3N (INTERNAL ID)
57C THK THICKNESS OF A GIVEN SH3N (INTERNAL ID)
58C PM MATERIAL ARRAY
59C GEO PROP ARRAY (REAL)
60C ICNOD FLAG FOR SH3N WITH ISH3N = 31
61C IGEO PROP ARRAY (INTEGER)
62C IPM MATERIAL ARRAY (INTEGER)
63C UNITAB UNIT ARRAY
64C ANGLE ANGLE OF A GIVEN SH3N (INTERNAL ID)
65C LSUBMODEL SUBMODEL STRUCTURE
66C-----------------------------------------------
67C M o d u l e s
68C-----------------------------------------------
69 USE unitab_mod
70 USE message_mod
72 USE reader_old_mod , ONLY : line
73 USE user_id_mod , ONLY : id_limit
74C--------------------------------------------------------
75C LECTURE DES ELEMENTS COQUES TRIANGULAIRE
76C--------------------------------------------------------
77C-----------------------------------------------
78C I m p l i c i t T y p e s
79C-----------------------------------------------
80#include "implicit_f.inc"
81C-----------------------------------------------
82C A n a l y s e M o d u l e
83C-----------------------------------------------
84#include "analyse_name.inc"
85C-----------------------------------------------
86C C o m m o n B l o c k s
87C-----------------------------------------------
88#include "com04_c.inc"
89#include "units_c.inc"
90#include "scr03_c.inc"
91#include "scr17_c.inc"
92#include "param_c.inc"
93#include "remesh_c.inc"
94C-----------------------------------------------
95C D u m m y A r g u m e n t s
96C-----------------------------------------------
97C INPUT ARGUMENTS
98 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
99 INTEGER,INTENT(IN)::ITAB(*)
100 INTEGER,INTENT(IN)::ITABM1(*)
101 INTEGER,INTENT(IN)::IPART(LIPART1,*)
102 INTEGER,INTENT(IN)::IGEO(NPROPGI,NUMGEO)
103 INTEGER,INTENT(IN)::IPM(NPROPMI,*)
104 my_real,INTENT(IN)::geo(npropg,*)
105 my_real,INTENT(IN)::pm(npropm,*)
106 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
107C OUTPUT ARGUMENTS
108 INTEGER,INTENT(OUT)::IXTG(NIXTG,*)
109 INTEGER,INTENT(OUT)::IPARTTG(*)
110 INTEGER,INTENT(OUT)::ICNOD(*)
111 my_real,INTENT(OUT)::angle(*)
112 my_real,INTENT(OUT)::thk(*)
113C-----------------------------------------------
114C L o c a l V a r i a b l e s
115C-----------------------------------------------
116 my_real bid,fac_l
117 INTEGER I, J, I1, I2, ID,IDS,IPID,MT,N,MID,PID,UID,JC,STAT,IPARTTG_TMP
118 INTEGER INDEX_PART
119 CHARACTER*40 MESS
120 DATA mess /'3D TRIANGULAR SHELL ELEMENT DEFINITION '/
121 INTEGER ISH3N,KK,IFLAGUNIT
122 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_SH3N,UID_SH3N,TMP_IPARTTG
123 INTEGER, DIMENSION(:,:), ALLOCATABLE :: TMP_IXTG
124 real*8, DIMENSION(:), ALLOCATABLE :: hm_thk,hm_angle
125C-----------------------------------------------
126C FUNCTION
127C-----------------------------------------------
128 INTEGER USR2SYS
129 INTEGER NINTRN
130C--------------------------------------------------
131C ALLOCS & INITS
132c use NUMELTG0 IN PLACE OF NUMELTG ( NBADMESH routine is modifying NUMELTG )
133C--------------------------------------------------
134 ALLOCATE (sub_sh3n(numeltg0),stat=stat)
135 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1='SUB_SH3N')
136 ALLOCATE (uid_sh3n(numeltg0),stat=stat)
137 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1='UID_SH3N')
138 ALLOCATE (hm_thk(numeltg0),stat=stat)
139 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1='HM_THK')
140 ALLOCATE (hm_angle(numeltg0),stat=stat)
141 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1='HM_ANGLE')
142 ALLOCATE (tmp_ixtg(nixtg,numeltg0),stat=stat)
143 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1='TMP_IXTG')
144 ALLOCATE (tmp_iparttg(numeltg0),stat=stat)
145 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1='TMP_IPARTTG')
146 sub_sh3n(1:numeltg0) = 0
147 uid_sh3n(1:numeltg0) = 0
148 tmp_ixtg(1:nixtg,1:numeltg0) = 0
149 tmp_iparttg(1:numeltg0) = 0
150 hm_thk(1:numeltg0) = zero
151 hm_angle(1:numeltg0) = zero
152 index_part = 1
153 uid = -1
154 kk=3
155 i = 0
156C--------------------------------------------------
157C READING SH3NS INPUTS IN HM STRUCTURE
158C--------------------------------------------------
159 CALL cpp_sh3n_read(tmp_ixtg,nixtg,tmp_iparttg,hm_angle,hm_thk,sub_sh3n,uid_sh3n)
160C--------------------------------------------------
161C FILL OTHER STRUCTURES + CHECKS
162C--------------------------------------------------
163 numeltg6 = 0
164 DO WHILE (kk <= 6)
165 DO n=1,numeltg0
166 iparttg_tmp = tmp_iparttg(n)
167
168 IF( ipart(4,index_part) /= iparttg_tmp)THEN
169 DO j=1,npart
170 IF(ipart(4,j)== iparttg_tmp )index_part = j
171 ENDDO
172 ENDIF
173 ish3n = igeo(18,ipart(2,index_part))
174 IF(kk == 6 .AND. ish3n==31) numeltg6 = numeltg6 + 1
175
176 IF((kk==3.AND.ish3n/=31).OR.(kk==6.AND.ish3n==31))THEN
177 i = i + 1
178 icnod(i)=kk
179 DO j=1,nixtg
180 ixtg(j,i) = tmp_ixtg(j,n)
181 ENDDO
182 iparttg(i) = tmp_iparttg(n)
183C--------------------------------------------------
184C FOR _SP _DP PURPOSE
185C--------------------------------------------------
186 angle(i) = hm_angle(n) * pi / hundred80
187 thk(i) = hm_thk(n)
188C--------------------------------------------------
189C SUBMODEL OFFSET
190C--------------------------------------------------
191 IF(sub_sh3n(n) /= 0)THEN
192 IF(uid_sh3n(n) == 0 .AND. lsubmodel(sub_sh3n(n))%UID /= 0) uid_sh3n(n) = lsubmodel(sub_sh3n(n))%UID
193 ENDIF
194C--------------------------------------------------
195C UNITS
196C--------------------------------------------------
197 IF(uid_sh3n(n) /= uid )THEN
198 uid = uid_sh3n(n)
199 iflagunit = 0
200 DO j=1,unitab%NUNITS
201 IF (unitab%UNIT_ID(j) == uid) THEN
202 fac_l = unitab%FAC_L(j)
203 iflagunit = 1
204 ENDIF
205 ENDDO
206 IF (uid/=0.AND.iflagunit==0) THEN
207 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,i1=uid,c1='/SH3N')
208 ENDIF
209 ENDIF
210 thk(i) = thk(i) * fac_l
211C--------------------------------------------------
212C INTERNAL PART ID
213C--------------------------------------------------
214 IF( ipart(4,index_part) /= iparttg(i) )THEN
215 DO j=1,npart
216 IF(ipart(4,j)== iparttg(i) ) index_part = j
217 ENDDO
218 ENDIF
219 IF( ipart(4,index_part) /= iparttg(i) ) THEN
220 CALL ancmsg(msgid=402,msgtype=msgerror,anmode=aninfo_blind_1,c1="SH3N",i1=iparttg(i),i2=iparttg(i),prmod=msg_cumu)
221 ENDIF
222 iparttg(i) = index_part
223C--------------------------------------------------
224 mt=ipart(1,index_part)
225 ipid=ipart(2,index_part)
226 ixtg(1,i)=mt
227 ixtg(5,i)=ipid
228 IF (ixtg(nixtg,i)>id_limit%GLOBAL)THEN
229 CALL ancmsg(msgid=509,anmode=aninfo,msgtype=msgerror,i1=ixtg(nixtg,i),c1=line,c2='/SH3N')
230 ELSEIF (nadmesh/=0.AND.ixtg(nixtg,i)>id_limit%ADMESH)THEN
231 CALL ancmsg(msgid=1069,anmode=aninfo,msgtype=msgerror,i1=ixtg(nixtg,i),c1=line,c2='/SH3N')
232 ENDIF
233 IF(thk(i)>0) THEN
234 CALL apartset(index_part, check_thick_shell)
235 ENDIF
236
237 DO j=2,4
238 ixtg(j,i)=usr2sys(ixtg(j,i),itabm1,mess,id)
239 CALL anodset(ixtg(j,i), check_shell)
240 ENDDO
241 ENDIF
242 IF (i == numeltg0) kk = 7
243 ENDDO
244 IF (i < numeltg0) THEN
245 kk = 6
246 ELSE
247c exit from DOWHILE (kk <=6)
248 kk = 7
249 ENDIF
250 ENDDO
251 IF(ALLOCATED(sub_sh3n)) DEALLOCATE(sub_sh3n)
252 IF(ALLOCATED(uid_sh3n)) DEALLOCATE(uid_sh3n)
253 IF(ALLOCATED(hm_thk)) DEALLOCATE(hm_thk)
254 IF(ALLOCATED(hm_angle)) DEALLOCATE(hm_angle)
255
256 IF(ALLOCATED(tmp_ixtg)) DEALLOCATE(tmp_ixtg)
257 IF(ALLOCATED(tmp_iparttg)) DEALLOCATE(tmp_iparttg)
258C
259 i1=1
260 i2=min0(50,numeltg0)
261C
262 IF(ipri>=5)THEN
263 90 WRITE (iout,'(//A/A//A/)')' TRIANGULAR SHELL ELEMENTS ',' ELEMENT INTERNAL MATER PRSET NODE1 NODE2 NODE3'
264 DO i=i1,i2
265 mid = ipm(1,ixtg(1,i))
266 pid = igeo(1,ixtg(5,i))
267 WRITE (iout,'(7(I10,1X),1PG20.13,1PG20.13)') ixtg(nixtg,i),i,mid,pid,
268 . (itab(ixtg(j,i)),j=2,4),angle(i),thk(i)
269 ENDDO
270 IF(i2==numeltg0)GOTO 200
271 i1=i1+50
272 i2=min0(i2+50,numeltg0)
273 GOTO 90
274 ENDIF
275C
276 200 CONTINUE
277C-----------
278 CALL ancmsg(msgid=402,msgtype=msgerror,anmode=aninfo_blind_1,prmod=msg_print)
279C-------------------------------------
280C Recherche des ID doubles
281C-------------------------------------
282 ids = 79
283 i = 0
284 j = 0
285 CALL vdouble(ixtg(nixtg,1),nixtg,numeltg0,mess,0,bid)
286 ids = 44
287C
288 RETURN
void anodset(int *id, int *type)
void apartset(int *id, int *type)
#define my_real
Definition cppsort.cpp:32
initmumps id
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
integer function usr2sys(iu, itabm1, mess, id)
Definition sysfus.F:160
subroutine vdouble(list, ilist, nlist, mess, ir, rlist)
Definition sysfus.F:884