OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_truss.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_truss ../starter/source/elements/reader/hm_read_truss.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!|| usr2sys ../starter/source/system/sysfus.F
31!|| vdouble ../starter/source/system/sysfus.F
32!||--- uses -----------------------------------------------------
33!|| message_mod ../starter/share/message_module/message_mod.F
34!|| reader_old_mod ../starter/share/modules1/reader_old_mod.F90
35!|| submodel_mod ../starter/share/modules1/submodel_mod.F
36!||====================================================================
37 SUBROUTINE hm_read_truss(IXT ,ITAB,ITABM1,IPART,IPARTT,
38 . IPM ,IGEO ,LSUBMODEL)
39C-----------------------------------------------
40C ROUTINE DESCRIPTION :
41C ===================
42C READ /TRUSS ELEMENTS USING HM_READER
43C-----------------------------------------------
44C DUMMY ARGUMENTS DESCRIPTION:
45C ===================
46C
47C NAME DESCRIPTION
48C
49C IXT TRUSS ELEM ARRAY : CONNECTIVITY, ID, PID
50C ITAB USER ID OF NODES
51C ITABM1 REVERSE TAB ITAB
52C IPART PART ARRAY
53C IPARTT INTERNAL PART ID OF A GIVEN TRUSS ELEMENT
54C IPM MATERIAL ARRAY (INTEGER)
55C IGEO PROP ARRAY (INTEGER)
56C LSUBMODEL SUBMODEL STRUCTURE
57C-----------------------------------------------
58C M o d u l e s
59C-----------------------------------------------
60 USE message_mod
62 USE reader_old_mod , ONLY : line
63 USE user_id_mod , ONLY : id_limit
64 use element_mod , only : nixt
65C---------------------------------------------------------
66C I m p l i c i t T y p e s
67C-----------------------------------------------
68#include "implicit_f.inc"
69C-----------------------------------------------
70C A n a l y s e M o d u l e
71C-----------------------------------------------
72#include "analyse_name.inc"
73C-----------------------------------------------
74C C o m m o n B l o c k s
75C-----------------------------------------------
76#include "scr17_c.inc"
77#include "com04_c.inc"
78#include "param_c.inc"
79#include "units_c.inc"
80C-----------------------------------------------
81C D u m m y A r g u m e n t s
82C-----------------------------------------------
83C INPUT ARGUMENTS
84 INTEGER,INTENT(IN)::ITAB(*)
85 INTEGER,INTENT(IN)::ITABM1(*)
86 INTEGER,INTENT(IN)::IPART(LIPART1,*)
87 INTEGER,INTENT(IN)::IGEO(NPROPGI,*)
88 INTEGER,INTENT(IN)::IPM(NPROPMI,*)
89 TYPE(submodel_data),INTENT(IN)::LSUBMODEL(NSUBMOD)
90C OUTPUT ARGUMENTS
91 INTEGER,INTENT(OUT)::IXT(NIXT,*)
92 INTEGER,INTENT(OUT)::IPARTT(*)
93C-----------------------------------------------
94C L o c a l V a r i a b l e s
95C-----------------------------------------------
96 INTEGER I, I1, I2, MID, PID,MT,IPID,IDS,J,N,STAT
97 INTEGER INDEX_PART
98 CHARACTER MESS*40, MESS2*40
100 . bid
101 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_TRUSS
102C-----------------------------------------------
103C E x t e r n a l F u n c t i o n s
104C-----------------------------------------------
105 INTEGER USR2SYS
106C
107 DATA mess/'3D TRUSS ELEMENTS DEFINITION '/
108 DATA mess2/'3D TRUSS ELEMENTS SELECTION FOR TH PLOT '/
109C=======================================================================
110C--------------------------------------------------
111C ALLOCS & INITS
112C--------------------------------------------------
113 ALLOCATE (sub_truss(numelt),stat=stat)
114 IF (stat /= 0) CALL ancmsg(msgid=268,anmode=aninfo,
115 . msgtype=msgerror,
116 . c1='SUB_TRUSS')
117 sub_truss(1:numelt) = 0
118 index_part = 1
119C--------------------------------------------------
120C READING TRUSS INPUTS IN HM STRUCTURE
121C--------------------------------------------------
122 CALL cpp_truss_read(ixt,nixt,ipartt,sub_truss)
123C--------------------------------------------------
124C FILL OTHER STRUCTURES + CHECKS
125C--------------------------------------------------
126 i=0
127 DO n=1,numelt
128 i = i + 1
129C--------------------------------------------------
130C INTERNAL PART ID
131C--------------------------------------------------
132 IF( ipart(4,index_part) /= ipartt(i) )THEN
133 DO j=1,npart
134 IF(ipart(4,j)== ipartt(i) ) index_part = j
135 ENDDO
136 ENDIF
137 IF( ipart(4,index_part) /= ipartt(i) ) THEN
138 CALL ancmsg(msgid=402,
139 . msgtype=msgerror,
140 . anmode=aninfo_blind_1,
141 . c1="TRUSS",
142 . i1=ipartt(i),
143 . i2=ipartt(i),
144 . prmod=msg_cumu)
145 ENDIF
146 ipartt(i) = index_part
147C--------------------------------------------------
148 mt=ipart(1,index_part)
149 ipid=ipart(2,index_part)
150 ixt(1,i)=mt
151 ixt(4,i)=ipid
152
153 IF (ixt(5,i)>id_limit%GLOBAL) THEN
154 CALL ancmsg(msgid=509,anmode=aninfo,msgtype=msgerror,
155 . i1=ixt(5,i),c1=line,c2='/TRUSS')
156 ENDIF
157
158 DO j=2,3
159 ixt(j,i)=usr2sys(ixt(j,i),itabm1,mess,ixt(5,i))
160 CALL anodset(ixt(j,i), check_truss)
161 ENDDO
162 ENDDO
163 IF(ALLOCATED(sub_truss)) DEALLOCATE(sub_truss)
164C-----------
165 CALL ancmsg(msgid=402,
166 . msgtype=msgerror,
167 . anmode=aninfo_blind_1,
168 . prmod=msg_print)
169C
170 i1=1
171 i2=min0(50,numelt)
172C-------------------------------------
173C Search for double IDs
174C-------------------------------------
175 ids = 79
176 i = 0
177 j = 0
178c CALL ANCNTS(IDS,I)
179 CALL vdouble(ixt(nixt,1),nixt,numelt,mess,0,bid)
180c CALL ANCNTG(IDS,I,J)
181 ids = 21
182c CALL ANCHECK(IDS)
183C
184 90 WRITE (iout,300)
185 DO i=i1,i2
186 mid=ipm(1,ixt(1,i))
187 pid=igeo(1,ixt(4,i))
188 WRITE (iout,'(6(I10,1X))') i,ixt(5,i),mid,pid,
189 . itab(ixt(2,i)),itab(ixt(3,i))
190 ENDDO
191 IF(i2==numelt)GOTO 200
192 i1=i1+50
193 i2=min0(i2+50,numelt)
194 GOTO 90
195C
196 200 CONTINUE
197 RETURN
198C----
199 300 FORMAT(/' TRUSS ELEMENTS' /
200 + ' --------------' /
201 + ' LOC-EL GLO-EL MATER GEOM NODE1 NODE2')
202 RETURN
203 END
void anodset(int *id, int *type)
#define my_real
Definition cppsort.cpp:32
subroutine hm_read_truss(ixt, itab, itabm1, ipart, ipartt, ipm, igeo, lsubmodel)
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 vdouble(list, ilist, nlist, mess, ir, rlist)
Definition sysfus.F:868