OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_xelem.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| hm_read_xelem ../starter/source/elements/reader/hm_read_xelem.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| anodset ../starter/source/output/analyse/analyse_node.c
30!|| nodgrnr5 ../starter/source/starter/freform.F
31!|| udouble ../starter/source/system/sysfus.f
32!||--- uses -----------------------------------------------------
33!|| message_mod ../starter/share/message_module/message_mod.f
34!|| submodel_mod ../starter/share/modules1/submodel_mod.F
35!||====================================================================
36 SUBROUTINE hm_read_xelem(IGRNOD ,ITAB ,ITABM1,IPART,IPARTX,
37 . IPM,IGEO ,KXX ,IXX, LSUBMODEL)
38C-----------------------------------------------
39C ROUTINE DESCRIPTION :
40C ===================
41C READ /XELEM ELEMENTS USING HM_READER
42C-----------------------------------------------
43C DUMMY ARGUMENTS DESCRIPTION:
44C ===================
45C
46C NAME DESCRIPTION
47C
48C IGRNOD NODE GROUP ARRAY
49C ITAB USER ID OF NODES
50C ITABM1 REVERSE TAB ITAB
51C IPART PART ARRAY
52C IPARTX INTERNAL PART ID OF A GIVEN XELEM ELEMENT
53C IPM MAT ARRAY (INTEGER)
54C IGEO PROP ARRAY (INTEGER)
55C KXX XELEM CONNECTIVITY NODES
56C IXX XELEM ARRAY (INTEGER)
57C LSUBMODEL SUBMODEL STRUCTURE
58C-----------------------------------------------
59C M o d u l e s
60C-----------------------------------------------
61 USE message_mod
62 USE submodel_mod
63 USE groupdef_mod
64C----------------------------------------------------------
65C XELEM ELEMENT READ
66C----------------------------------------------------------
67C-----------------------------------------------
68C I m p l i c i t T y p e s
69C-----------------------------------------------
70#include "implicit_f.inc"
71C-----------------------------------------------
72C A n a l y s e M o d u l e
73C-----------------------------------------------
74#include "analyse_name.inc"
75C-----------------------------------------------
76C C o m m o n B l o c k s
77C-----------------------------------------------
78#include "scr17_c.inc"
79#include "scr23_c.inc"
80#include "com04_c.inc"
81#include "units_c.inc"
82#include "param_c.inc"
83C-----------------------------------------------
84C D u m m y A r g u m e n t s
85C-----------------------------------------------
86C INPUT ARGUMENTS
87 TYPE(GROUP_),INTENT(IN)::IGRNOD(NGRNOD)
88 INTEGER,INTENT(IN)::ITAB(*)
89 INTEGER,INTENT(IN)::ITABM1(*)
90 INTEGER,INTENT(IN)::IPART(LIPART1,*)
91 INTEGER,INTENT(IN)::IGEO(NPROPGI,*)
92 INTEGER,INTENT(IN)::IPM(NPROPMI,*)
93 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
94C OUTPUT ARGUMENTS
95 INTEGER,INTENT(OUT)::KXX(NIXX,*)
96 INTEGER,INTENT(OUT)::IXX(*)
97 INTEGER,INTENT(OUT)::IPARTX(*)
98C-----------------------------------------------
99C L o c a l V a r i a b l e s
100C-----------------------------------------------
101 INTEGER I, I1, I2,PID,N,ID,IDS,J,STAT,MID,IAD,NNOD,IGS
102 INTEGER INDEX_PART
103 INTEGER TABIDS(NUMELX)
104 CHARACTER MESS*40
105 my_real
106 . BID
107 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_XELEM,IDEX,IDGU
108C-----------------------------------------------
109C E x t e r n a l F u n c t i o n s
110C-----------------------------------------------
111 INTEGER NODGRNR5
112 DATA MESS /'MULTI-PURPOSE ELEMENTS DEFINITION '/
113C=======================================================================
114C--------------------------------------------------
115C ALLOCS & INITS
116C--------------------------------------------------
117 ALLOCATE (SUB_XELEM(NUMELX),STAT=stat)
118 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,
119 . MSGTYPE=MSGERROR,
120 . C1='SUB_XELEM')
121 SUB_XELEM(1:NUMELX) = 0
122 ALLOCATE (IDEX(NUMELX),STAT=stat)
123 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,
124 . MSGTYPE=MSGERROR,
125 . C1='IDEX')
126 IDEX(1:NUMELX) = 0
127 ALLOCATE (IDGU(NUMELX),STAT=stat)
128 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,
129 . MSGTYPE=MSGERROR,
130 . C1='IDGU')
131 IDGU(1:NUMELX) = 0
132 INDEX_PART = 1
133C--------------------------------------------------
134C READING SPRING INPUTS IN HM STRUCTURE
135C--------------------------------------------------
136 CALL CPP_XELEM_READ(IDEX,IDGU,IPARTX,SUB_XELEM)
137
138 IAD =1
139 DO N=1,NUMELX
140
141C--------------------------------------------------
142C INTERNAL PART ID
143C--------------------------------------------------
144 IF( IPART(4,INDEX_PART) /= IPARTX(N) )THEN
145 DO J=1,NPART
146 IF(IPART(4,J)== IPARTX(N) ) INDEX_PART = J
147 ENDDO
148 ENDIF
149 IF(IPART(4,INDEX_PART) /= IPARTX(N)) THEN
150 CALL ANCMSG(MSGID=402,
151 . MSGTYPE=MSGERROR,
152 . ANMODE=ANINFO_BLIND_1,
153 . C1='XELEM',
154 . I1=IPARTX(N),
155 . I2=IPARTX(N),
156 . PRMOD=MSG_CUMU)
157 ENDIF
158 IPARTX(N) = INDEX_PART
159
160
161 KXX(1,N) =IPART(1,INDEX_PART)
162 KXX(2,N) =IPART(2,INDEX_PART)
163 KXX(4,N) =IAD
164C
165 KXX(5,N)=IDEX(N)
166C
167 NNOD = NODGRNR5(IDGU(N) ,IGS ,IXX(IAD),IGRNOD ,
168 . ITABM1 ,MESS )
169C check non sorted nodes group type.
170.AND. IF (IGS/=0IGRNOD(IGS)%SORTED/=1) THEN
171 CALL ANCMSG(MSGID=411,
172 . MSGTYPE=MSGERROR,
173 . ANMODE=ANINFO_BLIND_1,
174 . I1=KXX(5,N),
175 . I2=IGRNOD(IGS)%ID)
176 ENDIF
177 IF (NNOD < 1) THEN
178 CALL ANCMSG(MSGID=412,
179 . MSGTYPE=MSGERROR,
180 . ANMODE=ANINFO_BLIND_1,
181 . I1=KXX(5,N),
182 . I2=NNOD)
183 ENDIF
184C
185 CALL ANODSET(IXX(IAD), CHECK_2N)
186 CALL ANODSET(IXX(IAD+NNOD-1), CHECK_2N)
187 DO 10 I=2,NNOD-2
188 CALL ANODSET(IXX(IAD+I), CHECK_USED)
189 10 CONTINUE
190 KXX(3,N)=NNOD
191 IF (NNOD>MAXNX) MAXNX=NNOD
192 ISUMNX =ISUMNX+NNOD
193C
194 IAD =IAD+NNOD
195 ENDDO
196C-----------
197 CALL ANCMSG(MSGID=402,
198 . MSGTYPE=MSGERROR,
199 . ANMODE=ANINFO_BLIND_1,
200 . PRMOD=MSG_PRINT)
201C-------------------------------------
202C Recherche des ID doubles
203C-------------------------------------
204 DO I=1,NUMELX
205 TABIDS(I)= KXX(NIXX,I)
206 ENDDO
207 CALL UDOUBLE(TABIDS,1,NUMELX,MESS,0,BID)
208C-------------------------------------
209C Print
210C-------------------------------------
211 I1=1
212 I2=MIN0(50,NUMELX)
213C
214 90 WRITE (IOUT,300)
215 DO 100 I=I1,I2
216 MID=IPM(1,KXX(1,I))
217 PID=IGEO(1,KXX(2,I))
218 WRITE (IOUT,'(4(I10,1X))') I,KXX(NIXX,I),MID,PID
219 WRITE (IOUT,'(10(I10,1X))')
220 . (ITAB(IXX(IAD)),IAD=KXX(4,I),KXX(4,I)+KXX(3,I)-1)
221 WRITE (IOUT,'(A)') 'END OF ELEMENT TRACEBACK'
222c call flush(IOUT)
223 100 CONTINUE
224 IF(I2==NUMELX)GOTO 200
225 I1=I1+50
226 I2=MIN0(I2+50,NUMELX)
227 GOTO 90
228C
229 200 CONTINUE
230C
231 300 FORMAT(/' MULTI-PURPOSE ELEMENTS'/
232 + ' ----------------------'/
233 + ' LOC-EL GLO-EL MATER GEOM'/
234 + ' NODES LIST')
235 RETURN
236 END
subroutine hm_read_xelem(igrnod, itab, itabm1, ipart, ipartx, ipm, igeo, kxx, ixx, lsubmodel)
subroutine udouble(list, ilist, nlist, mess, ir, rlist)
Definition sysfus.F:589
program starter
Definition starter.F:39