OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_convert_2d_elements_seatbelt.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_convert_2d_elements_seatbelt ../starter/source/devtools/hm_reader/hm_convert_2d_elements_seatbelt.F
25!||--- called by ------------------------------------------------------
26!|| starter0 ../starter/source/starter/starter0.F
27!||--- calls -----------------------------------------------------
28!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
29!|| hm_option_count ../starter/source/devtools/hm_reader/hm_option_count.F
30!|| hm_option_next ../starter/source/devtools/hm_reader/hm_option_next.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!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
35!|| message_mod ../starter/share/message_module/message_mod.F
36!|| submodel_mod ../starter/share/modules1/submodel_mod.F
37!||====================================================================
38 SUBROUTINE hm_convert_2d_elements_seatbelt(IDMAX_PART,IDMAX_PROP,IDMAX_MAT,IDMAX_ELEM,IDMAX_TH,
39 . SEATBELT_CONVERTED_ELEMENTS,NB_SEATBELT_SHELLS,LSUBMODEL)
40C-----------------------------------------------
41C ROUTINE DESCRIPTION :
42C ===================
43C ROUTINE TO CONVERT /SHELL & /MAT/LAW119 -> /SPRING /PART /PROP/TYPE23 & /MAT/LAW114
44C-----------------------------------------------
45C DUMMY ARGUMENTS DESCRIPTION:
46C ===================
47C
48C NAME DESCRIPTION
49C
50C IDMAX_PART MAX ID PARTS
51C IDMAX_PROP MAX ID PROPS
52C IDMAX_MAT MAX ID MATS
53C IDMAX_ELEM MAX ID ELEMS
54C IDMAX_TH MAX ID TH
55C SEATBELT_CONVERTED_ELEMENTS CORRESPONDANCE SHELL SPRING FOR SEATBLETS
56C NB_SEATBELT_SHELLS NUMBER OF SEATELT SHELL
57C LSUBMODEL SUBMODEL STRUCTURE
58C============================================================================
59C M o d u l e s
60C-----------------------------------------------
61 USE message_mod
62 USE submodel_mod
65C-----------------------------------------------
66C I m p l i c i t T y p e s
67C-----------------------------------------------
68#include "implicit_f.inc"
69C-----------------------------------------------
70C D u m m y A r g u m e n t s
71C-----------------------------------------------
72C INPUT ARGUMENTS
73 INTEGER,INTENT(IN)::IDMAX_PART,IDMAX_PROP,IDMAX_MAT,IDMAX_ELEM,IDMAX_TH,
74 . nb_seatbelt_shells
75 INTEGER,INTENT(INOUT)::SEATBELT_CONVERTED_ELEMENTS(3,NB_SEATBELT_SHELLS)
76 TYPE(submodel_data),INTENT(IN)::LSUBMODEL(NSUBMOD)
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
80 INTEGER :: I,J,ID,SUBMODEL_INDEX,OFFSET,NB_PART,NB_MAT,NB_MAT_119,MAT_ID,ELEM_INDEX,NB_THSHELL,PART_ID
81 INTEGER, DIMENSION(:), ALLOCATABLE :: PART_SUB,PART_MAT119,MAT119_IDS
82 CHARACTER(LEN=NCHARLINE) :: KEY
83 LOGICAL :: IS_AVAILABLE
84C-----------------------------------------------
85 nb_mat_119 = 0
86C-----------------------------------------------
87C Check existence of Mat laws 119 in the model
88C-----------------------------------------------
89 CALL hm_option_count('/MAT',nb_mat)
90c
91 CALL hm_option_start('/MAT')
92 DO i=1,nb_mat
93 key = ''
94 CALL HM_OPTION_READ_KEY(LSUBMODEL,
95 . KEYWORD2 = KEY)
96 IF(KEY(1:6) == 'law119.OR.' KEY(1:11) == 'sh_seatbelt') THEN
97 NB_MAT_119 = NB_MAT_119 + 1
98 ENDIF
99 ENDDO
100C-----------------------------------------------
101C Search Parts with Mat 119
102C-----------------------------------------------
103 IF (NB_MAT_119 /= 0) THEN
104 ALLOCATE(MAT119_IDS(NB_MAT_119))
105 MAT119_IDS(1:NB_MAT_119) = 0
106 J = 0
107 CALL HM_OPTION_START('/mat')
108 DO I=1,NB_MAT
109 KEY = ''
110 CALL HM_OPTION_READ_KEY(LSUBMODEL,
111 . OPTION_ID = ID,
112 . KEYWORD2 = KEY,
113 . SUBMODEL_INDEX = SUBMODEL_INDEX)
114 IF(KEY(1:6) == 'law119.OR.' KEY(1:11) == 'sh_seatbelt') THEN
115 J = J + 1
116 MAT119_IDS(J) = ID
117 ENDIF
118 ENDDO
119C-----------------------------------------------
120 CALL HM_OPTION_COUNT('/part',NB_PART)
121 ALLOCATE(PART_SUB(NB_PART))
122 ALLOCATE(PART_MAT119(NB_PART))
123 PART_MAT119(1:NB_PART) = 0
124c
125 CALL HM_OPTION_START('/part')
126 DO I=1,NB_PART
127 CALL HM_OPTION_READ_KEY(LSUBMODEL,
128 . OPTION_ID = ID,
129 . SUBMODEL_INDEX = SUBMODEL_INDEX)
130 CALL HM_GET_INTV('materialid',MAT_ID,IS_AVAILABLE,LSUBMODEL)
131 DO J=1,NB_MAT_119
132 IF(MAT_ID == MAT119_IDS(J)) PART_MAT119(I) = ID
133 ENDDO
134 ENDDO
135C-----------------------------------------------
136C Translate /SHELL -> /SPRING /PART /PROP/TYPE23 & /MAT/LAW114
137C-----------------------------------------------
138c
139 ELEM_INDEX = 0
140 DO I=1,NB_PART
141 IF(PART_MAT119(I) /= 0) THEN
142 OFFSET = 0
143 PART_ID = PART_MAT119(I)
144 CALL CPP_CONVERT_2D_ELEMENTS_SEATBELT(PART_ID,IDMAX_PART,IDMAX_PROP,IDMAX_MAT,
145 . IDMAX_ELEM,OFFSET,SEATBELT_CONVERTED_ELEMENTS,ELEM_INDEX)
146 ENDIF
147 ENDDO
148c
149 IF (ALLOCATED(PART_SUB)) DEALLOCATE(PART_SUB)
150 IF (ALLOCATED(PART_MAT119)) DEALLOCATE(PART_MAT119)
151 IF (ALLOCATED(MAT119_IDS)) DEALLOCATE(MAT119_IDS)
152C-----------------------------------------------
153C Translate /TH containing /SHELLs THAT ARE TRANSLATED TO /SPRINGs
154C-----------------------------------------------
155c
156 CALL HM_OPTION_COUNT('/th/shel',NB_THSHELL)
157 CALL HM_OPTION_START('/th/shel')
158 DO I=1,NB_THSHELL
159 CALL HM_OPTION_NEXT()
160 CALL CPP_GET_SUBMODEL_INDEX(SUBMODEL_INDEX)
161 OFFSET = 0
162 CALL CPP_CONVERT_TH_2D_ELEMENT_SEATBELT(IDMAX_TH,OFFSET,SEATBELT_CONVERTED_ELEMENTS,NB_SEATBELT_SHELLS)
163 ENDDO
164c
165C--------------------------------------------------
166 ENDIF
167 RETURN
168C
169 END
170
subroutine hm_convert_2d_elements_seatbelt(idmax_part, idmax_prop, idmax_mat, idmax_elem, idmax_th, seatbelt_converted_elements, nb_seatbelt_shells, lsubmodel)
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_option_start(entity_type)
integer, parameter ncharline