OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_preload.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_preload ../starter/source/loads/general/preload/hm_read_preload.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
30!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.f
31!|| hm_option_read_key ../starter/source/devtools/hm_reader/hm_option_read_key.F
32!|| hm_option_start ../starter/source/devtools/hm_reader/hm_option_start.F
33!|| sectarea ../starter/source/loads/bolt/sectarea.F
34!||--- uses -----------------------------------------------------
35!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
36!|| message_mod ../starter/share/message_module/message_mod.F
37!|| submodel_mod ../starter/share/modules1/submodel_mod.F
38!||====================================================================
39 SUBROUTINE hm_read_preload(IXS ,IXS10,IPRELOAD ,PRELOAD ,IFLAG_BPRELOAD,
40 . NSTRF ,SENSORS ,UNITAB ,X ,
41 . ISOLNOD ,ITAB ,LSUBMODEL)
42C-----------------------------------------------
43C M o d u l e s
44C-----------------------------------------------
45 USE unitab_mod
46 USE message_mod
47 USE sensor_mod
49 USE submodel_mod
51C-----------------------------------------------
52C I m p l i c i t T y p e s
53C-----------------------------------------------
54#include "implicit_f.inc"
55C-----------------------------------------------
56C C o m m o n B l o c k s
57C-----------------------------------------------
58#include "units_c.inc"
59#include "com04_c.inc"
60#include "boltpr_c.inc"
61C-----------------------------------------------
62C D u m m y A r g u m e n t s
63C-----------------------------------------------
64 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
65 INTEGER IXS(NIXS,*), IXS10(6,*), IPRELOAD(3,*), IFLAG_BPRELOAD(*)
66 INTEGER NSTRF(*),ITAB(*),ISOLNOD(*)
67 my_real preload(6,*),x(3,*)
68 TYPE (SENSORS_) ,INTENT(IN) :: SENSORS
69 TYPE(submodel_data) LSUBMODEL(*)
70
71C-----------------------------------------------
72C L o c a l V a r i a b l e s
73C-----------------------------------------------
74 INTEGER ISEC, K, I1, I2, I, ISENS,NPR0,NN,ID,J,UID,IFLAGUNIT,JS,SENSNUM
75 INTEGER IUGRP(NPRELOAD),IDSENSOR(NPRELOAD)
76 INTEGER K0,K1,K2,K3,IS,IE,II,NS,NI,ITYPE,IN1,IN2,IN3
77 my_real lval(npreload),ts(npreload),te(npreload),nx(npreload),ny(npreload),nz(npreload)
78 my_real tdeb,tfin, loadval,x1,y1,z1,x2,y2,z2,x3,y3,z3,n3,area(npreload)
79 CHARACTER MESS*40
80 CHARACTER(LEN=NCHARTITLE) :: TITR
81 CHARACTER(LEN=NCHARLINE) ::KEY
82C-----------------------------------------------
83 LOGICAL IS_AVAILABLE
84C-----------------------------------------------
85C E x t e r n a l F u n c t i o n s
86C-----------------------------------------------
87 DATA mess/'BOLT PRELOADING DEFINITION '/
88C=======================================================================
89 is_available = .false.
90C-----------------------------------------------
91 CALL hm_option_start('/PRELOAD')
92C-----------------------------------------------
93 npr0=npreload
94 k=0
95 area(1:npreload)=zero
96
97 DO i=1,npr0
98 ! Read title, ID and Unit ID
99 titr = ''
100 CALL hm_option_read_key(lsubmodel,
101 . option_id = id,
102 . unit_id = uid,
103 . option_titr = titr,
104 . keyword2 = key)
105C
106 iugrp(i) = 0
107 IF (key(1:len_trim(key))=='AXIAL') cycle
108 ! Checking unit ID
109 iflagunit = 0
110C
111 DO j=1,unitab%NUNITS
112 IF (unitab%UNIT_ID(j) == uid) THEN
113 iflagunit = 1
114 EXIT
115 ENDIF
116 ENDDO
117 IF (uid/=0.AND.iflagunit==0) THEN
118 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
119 . i2=uid,i1=id,c1='BOLT PRELOAD',
120 . c2='BOLT PRELOAD',
121 . c3=titr)
122 ENDIF
123
124
125 !read card line
126 CALL hm_get_intv('sect_ID' ,isec ,is_available,lsubmodel)
127 CALL hm_get_intv('sens_ID' ,isens ,is_available,lsubmodel)
128 CALL hm_get_intv('Itype' ,itype ,is_available,lsubmodel)
129
130 CALL hm_get_floatv('Preload',loadval,is_available, lsubmodel, unitab)
131 CALL hm_get_floatv('Tstart' ,tdeb ,is_available, lsubmodel, unitab)
132 CALL hm_get_floatv('tstop' ,TFIN ,IS_AVAILABLE, LSUBMODEL, UNITAB)
133
134
135 IF (ITYPE == 0) ITYPE = 1 ! Default to effort preloading
136
137
138 IF(LOADVAL <= ZERO) THEN
139 CALL ANCMSG(MSGID=1255,MSGTYPE=MSGWARNING,
140 . ANMODE=ANINFO_BLIND_1,
141 . C1='bolt preload',
142 . I1=ID,
143 . C2=TITR)
144 LOADVAL = ZERO
145 ENDIF
146
147 IF (TFIN == ZERO) TFIN=EP30
148c
149 SENSNUM = 0
150 IF (ISENS > 0) THEN
151 DO JS=1,SENSORS%NSENSOR
152 IF (ISENS == SENSORS%SENSOR_TAB(JS)%SENS_ID) THEN
153 SENSNUM = JS ! not used - not stored
154 EXIT
155 ENDIF
156 ENDDO
157 IF (SENSNUM == 0) THEN
158 ISENS = 0
159 CALL ANCMSG(MSGID=1252,ANMODE=ANINFO,MSGTYPE=MSGERROR,
160 . C1='bolt preload',
161 . C2='bolt preload',
162 . I2=ISENS,I1=ID,C3=TITR)
163 END IF
164 ENDIF !(ISENS > 0)
165c
166 NN = 0
167 IF (ISEC > 0) THEN !ISEC=sect_ID input is mandatory
168 K0=31
169 DO IS=1,NSECT
170 IF (ISEC==NSTRF(K0+23)) THEN
171 IUGRP(I) = ISEC
172 LVAL(I) = LOADVAL
173 IDSENSOR(I) = ISENS
174 TS(I) = TDEB
175 TE(I) = TFIN
176 NN = NSTRF(K0+6)
177 NS = NSTRF(K0+7)
178 NI = NSTRF(K0+14)
179 K1 = K0+30
180 K2 = K1+NI
181 K3 = K2+NN
182 IN1 = NSTRF(K0+3)
183 IN2 = NSTRF(K0+4)
184 IN3 = NSTRF(K0+5)
185 X1=X(1,IN2)-X(1,IN1)
186 Y1=X(2,IN2)-X(2,IN1)
187 Z1=X(3,IN2)-X(3,IN1)
188 X2=X(1,IN3)-X(1,IN1)
189 Y2=X(2,IN3)-X(2,IN1)
190 Z2=X(3,IN3)-X(3,IN1)
191 X3=Y1*Z2-Z1*Y2
192 Y3=Z1*X2-Z2*X1
193 Z3=X1*Y2-X2*Y1
194 N3=X3*X3+Y3*Y3+Z3*Z3
195c
196 IF(N3 < EM20) THEN
197 CALL ANCMSG(MSGID=1244,ANMODE=ANINFO,MSGTYPE=MSGERROR,
198 . C1='bolt preload',
199 . C2='bolt preload',
200 . I2=ISEC,I1=ID,C3=TITR)
201 ELSE
202 N3 = SQRT(N3)
203 X3 = X3/N3
204 Y3 = Y3/N3
205 Z3 = Z3/N3
206 NX(I) = X3
207 NY(I) = Y3
208 NZ(I) = Z3
209 ENDIF
210 IF(NS == 0) THEN
211 CALL ANCMSG(MSGID=1251,ANMODE=ANINFO,MSGTYPE=MSGERROR,
212 . C1='bolt preload',
213 . C2='bolt preload',
214 . I2=ISEC,I1=ID,C3=TITR)
215 ELSE
216 ! Calcul de l'aire de la section
217 CALL sectarea(ixs,ixs10,x,nstrf(k3),ns,isolnod,area(i),itab) !
218 IF (itype == 1) THEN
219 IF (area(i) > 1.e-30) loadval = loadval/area(i)
220 ENDIF
221 DO ie=1,ns
222 k=k+1
223 ii=(k3-1)+2*ie-1
224 ipreload(1,k) = nstrf(ii) ! Num. interne avant tri
225 ipreload(2,k) = isens ! Sensor
226 ipreload(3,k) = ixs(11,nstrf(ii)) ! User Id.
227 !IFLAG_BPRELOAD(NSTRF(II)) = 1 ! Flag sur element precontraint
228 iflag_bpreload(nstrf(ii)) = i ! Flag sur element precontraint
229
230
231 preload(1,k) = tdeb ! Temps debut de pretension
232 preload(2,k) = tfin ! Temps fin de pretension
233 preload(3,k) = loadval ! Contrainte de pretension
234 preload(4,k) = x3 ! Direction de pretension
235 preload(5,k) = y3
236 preload(6,k) = z3
237 ENDDO
238 ENDIF !IF(NS == 0)
239 GOTO 100
240 ENDIF !IF (ISEC==NSTRF(K0+23))
241 k0=nstrf(k0+24)
242 ENDDO
243 ENDIF
244 CALL ancmsg(msgid=1243,anmode=aninfo,msgtype=msgerror,
245 . c1='BOLT PRELOAD',
246 . c2='BOLT PRELOAD',
247 . i2=isec,i1=id,c3=titr)
248100 CONTINUE
249
250 ENDDO
251 i1=1
252 i2=min0(50,npreload)
253c-----------------------------output------------------------------------------
254 90 WRITE (iout,2000)
255 DO i=i1,i2
256 IF (iugrp(i)==0) cycle
257 WRITE (iout,'(I10,1X,I10,1X,1PE10.3,1X,I10,6(1X,1PE10.3))') i,
258 . iugrp(i), area(i), idsensor(i), nx(i), ny(i), nz(i), lval(i), ts(i), te(i)
259 ENDDO
260 IF(i2==npreload)GOTO 200
261 i1=i1+50
262 i2=min0(i2+50,npreload)
263 GOTO 90
264
265c-------------------------
266 200 RETURN
267c-------------------------
268 2000 FORMAT(//
269 .' BOLT PRELOADINGS '/
270 .' ---------------- '/
271 .' ID SECTION AREA SENSOR NX NY
272 . NZ PRELOAD START-T END-T')
273C-----------
274 RETURN
275 END
#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)
subroutine hm_read_preload(ixs, ixs10, ipreload, preload, iflag_bpreload, nstrf, sensors, unitab, x, isolnod, itab, lsubmodel)
subroutine area(d1, x, x2, y, y2, eint, stif0)
integer, parameter nchartitle
integer, parameter ncharline
subroutine sectarea(ixs, ixs10, x, ibuf, nele, isolnod, area, itab)
Definition sectarea.F:31
subroutine section(nnod, n1, n2, n3, nstrf, x, v, vr, fsav, fopta, secfcum, ms, in, ifram, xsec)
Definition section.F:34
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
program starter
Definition starter.F:39