OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_preread_properties.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_preread_properties ../starter/source/properties/hm_preread_properties.F
25!||--- called by ------------------------------------------------------
26!|| contrl ../starter/source/starter/contrl.F
27!||--- calls -----------------------------------------------------
28!|| hm_get_int_array_2indexes ../starter/source/devtools/hm_reader/hm_get_int_array_2indexes.F
29!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.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!||--- uses -----------------------------------------------------
34!|| defaults_mod ../starter/source/modules/defaults_mod.F90
35!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
36!|| stack_var_mod ../starter/share/modules1/stack_var_mod.F
37!|| submodel_mod ../starter/share/modules1/submodel_mod.F
38!||====================================================================
39 SUBROUTINE hm_preread_properties(IGEO,NSPHSOL,NPLY,NSUB,NISUB,LSUBMODEL,DEFAULTS)
40C============================================================================
41C-----------------------------------------------
42C A n a l y s e M o d u l e
43C-----------------------------------------------
45 USE submodel_mod
47 USE defaults_mod
49C-----------------------------------------------
50C I m p l i c i t T y p e s
51C-----------------------------------------------
52#include "implicit_f.inc"
53C-----------------------------------------------
54C C o m m o n B l o c k s
55C-----------------------------------------------
56#include "com04_c.inc"
57#include "param_c.inc"
58#include "scr03_c.inc"
59C-----------------------------------------------
60C D u m m y A r g u m e n t s
61C-----------------------------------------------
62 INTEGER IGEO(NPROPGI,*),NSPHSOL
63 TYPE(submodel_data) LSUBMODEL(*)
64 INTEGER ,DIMENSION (NUMGEO + NUMSTACK) :: NPLY,NSUB,NISUB
65 TYPE(DEFAULTS_), INTENT(IN) :: DEFAULTS
66C-----------------------------------------------
67C L o c a l V a r i a b l e s
68C-----------------------------------------------
69 INTEGER I, IG, IGTYP, ISMSTR, NIP, J, IR1X, IR1Y, IR1Z, IREP,
70 . IR2X, IR2Y, IR2Z, ISHEAR, IRX, IROT, IMODE, IP, ISTRAIN,I8PT,
71 . ISK,ITU,IRB,IHON,IHBE,IPLAST,ITHK,IBID,IHBEOUTP,K,N,LAMINATE,
72 . IGFLU, IDS, NSHELL, NSHSUP, NSHINF, FLGBADI, NBADI,UID,
73 . NSST_D, NSST_DS, NPSH, ICPRE, ICSTR ,NPTS,ISEN,ISORTH,
74 . NSPHDIR, ID_SENS,D1,D2,D3,N1,N2,N3,INTRULE,NN,NS,NIS, NUMS,
75 . NLAM,NINTS,IFRAM,CPT,INUM,ID,IS,LAMINAT
76 DATA nshell /0/, nshsup /0/, nshinf /0/
78 . fn, ft, dx, angl,pun,htest,hclos,cvis,rbid,vx,vy,vz,
79 . knot1,knot2,knot3,r5(5),dn
80 CHARACTER(LEN=NCHARTITLE) :: IDTITL
81 CHARACTER(LEN=NCHARLINE) :: KEY, SOLVERKEYWORD
82 CHARACTER(LEN=NCHARFIELD) :: STRING
83 CHARACTER :: CHROT*7,MESS*40
84 INTEGER ISH3N,ITET4,IPLAS,NPT,ISROT,NP,LAMIN,NSUB_STACK,NISUB_STACK,NPLY_STACK,NPLY_SUB,ITET4_D
85 LOGICAL IS_AVAILABLE
86
87!! TYPE(STACK_INFO_ ) , DIMENSION(:), POINTER :: STACK_INFO
88C=======================================================================
89
90 ALLOCATE(numgeostack(numgeo + numstack))
91 numgeostack(:) = 0 ! global variable - STACK_VAR_MOD
92 nprop_stack = 0 ! global variable - STACK_VAR_MOD
93C
94 nsub(:) = 0
95 nisub(:) = 0
96 nply(:) = 0
97 itet4_d= defaults%SOLID%ITETRA4
98C--------------------------------------------------
99 is_available = .false.
100C--------------------------------------------------
101C START BROWSING MODEL PARTS
102C--------------------------------------------------
103 CALL hm_option_start('PROPERTY')
104C--------------------------------------------------
105C BROWSING MODEL PROPERTIES 1->HM_NUMGEO
106C--------------------------------------------------
107 numeltg6 = 0
108 i = 0
109 DO cpt=1,hm_numgeo
110 i = i + 1
111 key = ''
112 solverkeyword = ''
113 idtitl = ''
114C--------------------------------------------------
115C EXTRACT DATAS OF /PART/... LINE
116C--------------------------------------------------
117 CALL hm_option_read_key(lsubmodel,
118 . option_id = ig,
119 . keyword2 = key)
120C--------------------------------------------------
121 SELECT CASE(key(1:len_trim(key)))
122 CASE ('TYPE0','VOID')
123C--------------------------------------------------
124C HM READING PROPERTY TYPE0 (VOID)
125C--------------------------------------------------
126 CASE ('TYPE1','TYPE01','SHELL','TYPE9','TYPE09','SH_ORTH','TYPE11','SH_SANDW',
127 . 'SH_FABR','TYPE16')
128C--------------------------------------------------
129C HM READING PROPERTY TYPE1 (SHELL)
130C--------------------------------------------------
131 CALL hm_get_intv('Ishell',ihbe,is_available,lsubmodel)
132 CALL hm_get_intv('ISMSTR',ismstr,is_available,lsubmodel)
133 CALL hm_get_intv('ISH3',ish3n,is_available,lsubmodel)
134 CALL hm_get_intv('CVIS',cvis,is_available,lsubmodel)
135 IF(ish3n==31.AND.numeltg>0) numeltg6 = 1
136
137 CASE ('TYPE17','STACK')
138C--------------------------------------------------
139C HM READING PROPERTY TYPE17 (SHELL)
140C--------------------------------------------------
141 igtyp=17
144C
145 CALL hm_get_intv('laminateconfig' ,lamin, is_available, lsubmodel)
146c
147 nsub_stack = 0
148 nisub_stack = 0
149 nply_stack = 0
150 IF (lamin > 0) THEN
151 CALL hm_get_intv('sublaminateidlistmax' ,nsub_stack, is_available, lsubmodel)
152 CALL hm_get_intv('interfacepairsize' ,nisub_stack, is_available, lsubmodel)
153
154 DO is = 1,nsub_stack
155 CALL hm_get_int_array_index('plyidlistmax',nply_sub,is,is_available,lsubmodel)
156 nply_stack = nply_stack + nply_sub
157 END DO
158c
159 ELSE ! property defined by a list of plies
160 CALL hm_get_intv('plyidlistmax' ,nply_stack ,is_available ,lsubmodel)
161 END IF
162 nply(nprop_stack) = nply_stack
163 nsub(nprop_stack) = nsub_stack
164 nisub(nprop_stack)= nisub_stack
165C--------------------------------------------------
166C HM READING PROPERTY TYPE14,6 (SOLID)
167C--------------------------------------------------
168 CASE ('TYPE6','SOL_ORTH')
169 CALL hm_get_intv('Itetra4',itet4,is_available,lsubmodel)
170 IF(itet4 == 0) itet4 = itet4_d
171 IF(itet4 == 1)iisrot = 1
172 CALL hm_get_intv('Ndir',nsphdir,is_available,lsubmodel)
173 igeo(1,i) =ig
174 igeo(37,i)=nsphdir
175 IF(nsphdir/=0)nsphsol=1
176C--------------------------------------------------
177C HM READING PROPERTY TYPE51 (SHELL)
178C--------------------------------------------------
179 CASE ('TYPE51')
182c
183 CALL hm_get_intv('laminateconfig' ,laminate, is_available, lsubmodel)
184 IF (laminate > 0) THEN
185 CALL hm_get_intv('sublaminateidlistmax' ,nlam, is_available, lsubmodel)
186 CALL hm_get_intv('interfacepairsize' ,nints, is_available, lsubmodel)
187 nsub(nprop_stack) = nlam
188 nisub(nprop_stack) = nints
189 DO is = 1,nlam
190 CALL hm_get_int_array_2indexes('plyidlistmax',np,is,1,is_available,lsubmodel)
191 nply(nprop_stack) = nply(nprop_stack) + np
192 END DO
193 ELSE
194 CALL hm_get_intv('plyidlistmax' ,np, is_available, lsubmodel)
195 nply(nprop_stack) = nply(nprop_stack) + np
196 END IF
197C-------------------------------------------------
198C HM READING PROPERTY TYPE14 (SOLID)
199C--------------------------------------------------
200 CASE ('TYPE14','SOLID')
201 CALL hm_get_intv('I_rot',itet4,is_available,lsubmodel)
202 IF(itet4 == 0) itet4 = itet4_d
203 IF(itet4 == 1)iisrot = 1
204 CALL hm_get_intv('Ndir',nsphdir,is_available,lsubmodel)
205 igeo(1,i) =ig
206 igeo(37,i)=nsphdir
207 IF(nsphdir/=0)nsphsol=1
208C--------------------------------------------------
209 CASE ('PCOMPP')
210 igtyp=52
211C--------------------------------------------------
212 CASE ('TYPE29','TYPE30','TYPE31',
213 . 'USER1' ,'USER2' ,'USER3')
214 iisrot = 1
215C--------------------------------------------------
216 END SELECT
217 ENDDO
218c-----------------------------------------------------------------------
219c stack object prelecture
220c-----------------------------------------------------------------------
221C
222 IF(numstack > 0) THEN
223 CALL hm_option_start('/STACK')
224 DO 700 i=1,numstack
225 CALL hm_option_read_key(lsubmodel,option_id = ig,keyword2 = key)
227 numgeostack(numgeo + i) = nprop_stack
228 CALL hm_get_intv('laminateconfig' ,laminate, is_available, lsubmodel)
229 CALL hm_get_intv('laminateconfig' ,lamin , is_available, lsubmodel)
230
231 IF (laminate > 0) THEN
232 CALL hm_get_intv('sublaminateidlistmax' ,nlam, is_available, lsubmodel)
233 CALL hm_get_intv('interfacepairsize' ,nints, is_available, lsubmodel)
234 nsub(nprop_stack) = nlam
235 nisub(nprop_stack) = nints
236 DO is = 1,nlam
237 CALL hm_get_int_array_2indexes('plyidlistmax',np,is,1,is_available,lsubmodel)
238 nply(nprop_stack) = nply(nprop_stack) + np
239 END DO
240 ELSE
241 CALL hm_get_intv('plyidlistmax' ,np, is_available, lsubmodel)
242 nply(nprop_stack) = nply(nprop_stack) + np
243 END IF
244C
245 700 CONTINUE
246 ENDIF
247
248c-----------
249C
250C Table allocation for type17,51 and 52
251C
252 IF(nprop_stack > 0) THEN
253 ALLOCATE(stack_info(nprop_stack))
254 DO nums=1,nprop_stack
255 nn = nply(nums)
256 ns = nsub(nums)
257 nis = nisub(nums)
258 NULLIFY(stack_info(nums)%PID,stack_info(nums)%MID,
259 . stack_info(nums)%MID_IP,
260 . stack_info(nums)%SUB,stack_info(nums)%ISUB,
261 . stack_info(nums)%THK,stack_info(nums)%ANG,
262 . stack_info(nums)%POS,stack_info(nums)%DIR,
263 . stack_info(nums)%THKLY,stack_info(nums)%WEIGHT)
264
265 IF(nn > 0 ) THEN
266 ALLOCATE(stack_info(nums)%PID(nn),stack_info(nums)%MID(nn),
267 . stack_info(nums)%MID_IP(nn),
268 . stack_info(nums)%THK(nn),stack_info(nums)%ANG(nn),
269 . stack_info(nums)%POS(nn),stack_info(nums)%DIR(nn),
270 . stack_info(nums)%THKLY(nn),stack_info(nums)%WEIGHT(nn))
271 stack_info(nums)%PID(1:nn)= 0
272 stack_info(nums)%MID(1:nn)= 0
273 stack_info(nums)%MID_IP(1:nn)= 0
274 stack_info(nums)%THK(1:nn)= zero
275 stack_info(nums)%ANG(1:nn)= zero
276 stack_info(nums)%POS(1:nn)= zero
277 stack_info(nums)%THKLY(1:nn)= one
278 stack_info(nums)%WEIGHT(1:nn)= one
279 ENDIF
280 IF(ns > 0)THEN
281 ALLOCATE(stack_info(nums)%SUB(2*ns))
282 stack_info(nums)%SUB(1:2*ns)= 0
283 ENDIF
284 IF(nis > 0)THEN
285 ALLOCATE(stack_info(nums)%ISUB(3*nis))
286 stack_info(nums)%ISUB(1:3*nis)= 0
287 ENDIF
288 ENDDO
289 ELSE
290 ALLOCATE(stack_info(0))
291 ENDIF ! NPROP_STACK
292 RETURN
293 END
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_int_array_2indexes(name, ival, index1, index2, is_available, lsubmodel)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
subroutine hm_preread_properties(igeo, nsphsol, nply, nsub, nisub, lsubmodel, defaults)
integer, parameter nchartitle
integer, parameter ncharkey
integer, parameter ncharfield
integer, parameter ncharline
integer, dimension(:), allocatable numgeostack
integer nprop_stack
type(stack_info_), dimension(:), pointer stack_info
program starter
Definition starter.F:39