OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
read_box_cyl.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!|| read_box_cyl ../starter/source/model/box/read_box_cyl.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_box ../starter/source/model/box/hm_read_box.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!|| subrotpoint ../starter/source/model/submodel/subrot.F
34!|| usr2sys ../starter/source/system/sysfus.F
35!||--- uses -----------------------------------------------------
36!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
37!|| message_mod ../starter/share/message_module/message_mod.F
38!|| submodel_mod ../starter/share/modules1/submodel_mod.F
39!||====================================================================
40 SUBROUTINE read_box_cyl(
41 . IBOX ,IAD ,NBOX ,ITABM1 ,X ,
42 . RTRANS ,UNITAB ,LSUBMODEL)
43C-----------------------------------------------
44C M o d u l e s
45C-----------------------------------------------
46 USE unitab_mod
47 USE submodel_mod
48 USE message_mod
52C-----------------------------------------------
53C I m p l i c i t T y p e s
54C-----------------------------------------------
55#include "implicit_f.inc"
56C-----------------------------------------------
57C C o m m o n B l o c k s
58C-----------------------------------------------
59#include "com04_c.inc"
60#include "param_c.inc"
61C-----------------------------------------------
62C D u m m y A r g u m e n t s
63C-----------------------------------------------
64 INTEGER ,INTENT(IN) :: NBOX
65 INTEGER ,INTENT(INOUT) :: IAD
66 INTEGER ,DIMENSION(NUMNOD), INTENT(IN) :: ITABM1
67 my_real,DIMENSION(3,NUMNOD), INTENT(IN) :: x
68 my_real,DIMENSION(NTRANSF,NRTRANS), INTENT(IN) :: rtrans
69 TYPE (UNIT_TYPE_), INTENT(IN) :: UNITAB
70 TYPE(submodel_data), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
71 TYPE (BOX_), DIMENSION(NBBOX) :: IBOX
72C-----------------------------------------------
73C L o c a l V a r i a b l e s
74C-----------------------------------------------
75 INTEGER I,J,N1,N2,UID,BOXID,SUB_ID,IUNIT,FLAGUNIT
76 my_real :: FAC_L,XP1,YP1,ZP1,XP2,YP2,ZP2,DIAM
77 CHARACTER(LEN=NCHARKEY) :: KEY
78 CHARACTER(LEN=NCHARTITLE) :: TITR,MESS
79 LOGICAL :: IS_AVAILABLE
80C-----------------------------------------------
81C E x t e r n a l F u n c t i o n s
82C-----------------------------------------------
83 INTEGER USR2SYS
84 DATA MESS/'MULTI-BOX DEFINITION '/
85C-----------------------------------------------
86C IBOX(I)%ID : BOX IDENTIFIER
87C IBOX(I)%TITLE : BOX title
88C IBOX(I)%NBOXBOX : NUMBER OF SUB BOXES (BOXES OF BOXES)
89C IBOX(I)%ISKBOX : BOX SKEW_ID (RECTA + CYLIN)
90C IBOX(I)%NOD1 : FIRST NODE for box limit definition - N1 -
91C IBOX(I)%NOD2 : SECOND NODE for box limit definition - N2 -
92C IBOX(I)%TYPE : BOX SHAPE (1='RECTA',2='CYLIN' ,3='SPHER')
93C IBOX(I)%NBLEVELS : TEMPORARY LEVEL NB OF BOXES
94C IBOX(I)%LEVEL : FLAG "SUBLEVEL DONE" FOR BOX OF BOXES
95C IBOX(I)%ACTIBOX : FLAG FOR ACTIVATED BOX FOR (GRNOD,GRSHEL,LINE,SURF...)
96C IBOX(I)%NENTITY : NUMBER OF BOX ENTITIES (NODES,ELEMS,LINES,SURF)
97C WITHIN ACTIVATED BOX
98C IBOX(I)%SURFIAD : temporary address for solid external surface (in box)
99C IBOX(I)%BOXIAD : temporary address
100C IBOX(I)%DIAM : BOX diameter (CYLIN + SPHER)
101C IBOX(I)%X1 : coord.X for N1
102C IBOX(I)%Y1 : coord.Y for N1
103C IBOX(I)%Z1 : coord.Z for N1
104C IBOX(I)%X2 : coord.X for N2
105C IBOX(I)%Y2 : coord.Y for N2
106C IBOX(I)%Z2 : coord.Z for N2
107C=======================================================================
108c
109 CALL hm_option_start('/box/cyl')
110c
111c--------------------------------------------------
112 DO I = 1,NBOX
113c
114 CALL HM_OPTION_READ_KEY(LSUBMODEL, OPTION_ID = BOXID,
115 . UNIT_ID = UID,
116 . SUBMODEL_ID = SUB_ID,
117 . OPTION_TITR = TITR,
118 . KEYWORD2 = KEY)
119c-----------------------
120 IF (UID > 0) THEN
121 FLAGUNIT = 0
122 DO IUNIT=1,UNITAB%NUNITS
123 IF (UNITAB%UNIT_ID(IUNIT) == UID) THEN
124 FLAGUNIT = 1
125 EXIT
126 ENDIF
127 ENDDO
128.AND. IF (UID > 0 FLAGUNIT == 0) THEN
129 CALL ANCMSG(MSGID=659,ANMODE=ANINFO,MSGTYPE=MSGERROR,
130 . I2= UID ,I1=BOXID,
131 . C1='box' ,
132 . C2='box' ,
133 . C3='titr')
134 ENDIF
135 ENDIF
136c-----------------------
137c
138 CALL HM_GET_INTV ('cylinder_base_node' ,N1 ,IS_AVAILABLE, LSUBMODEL)
139 CALL HM_GET_INTV ('cylinder_direction_node' ,N2 ,IS_AVAILABLE, LSUBMODEL)
140 CALL HM_GET_FLOATV('cylinder_diameter' ,DIAM ,IS_AVAILABLE, LSUBMODEL, UNITAB)
141c
142 CALL HM_GET_FLOATV('cylinder_base_x' ,XP1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
143 CALL HM_GET_FLOATV('cylinder_base_y' ,YP1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
144 CALL HM_GET_FLOATV('cylinder_base_z' ,ZP1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
145c
146 CALL HM_GET_FLOATV('cylinder_direction_x' ,XP2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
147 CALL HM_GET_FLOATV('cylinder_direction_y' ,YP2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
148 CALL HM_GET_FLOATV('cylinder_direction_z' ,ZP2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
149c
150c-----------------------
151
152.and. IF (N1 > 0 N2 > 0) THEN
153 !using coordinates from user node identifiers
154 XP1 = X(1,USR2SYS(N1,ITABM1,MESS,BOXID))
155 YP1 = X(2,USR2SYS(N1,ITABM1,MESS,BOXID))
156 ZP1 = X(3,USR2SYS(N1,ITABM1,MESS,BOXID))
157 XP2 = X(1,USR2SYS(N2,ITABM1,MESS,BOXID))
158 YP2 = X(2,USR2SYS(N2,ITABM1,MESS,BOXID))
159 ZP2 = X(3,USR2SYS(N2,ITABM1,MESS,BOXID))
160 ELSE
161 !Submodel rotation
162 IF (SUB_ID > 0) CALL SUBROTPOINT(XP1,YP1,ZP1,RTRANS,SUB_ID,LSUBMODEL)
163 IF (SUB_ID > 0) CALL SUBROTPOINT(XP2,YP2,ZP2,RTRANS,SUB_ID,LSUBMODEL)
164 ENDIF
165
166.and..and..and. IF ((XP1 == ZERO YP1 == ZERO ZP1 == ZERO)
167.and..and. . (XP2 == ZERO YP2 == ZERO ZP2 == ZERO)) THEN
168 CALL ANCMSG(MSGID=752, MSGTYPE=MSGERROR, ANMODE=ANINFO,
169 . C1 = 'box',
170 . I1 = BOXID,
171 . C2 = TITR ,
172 . C3 = TITR ,
173 . C4 = ' ' )
174 END IF
175c-----------------------
176c
177 IAD = IAD + 1
178 IBOX(IAD)%TITLE = TRIM(TITR)
179 IBOX(IAD)%ID = BOXID
180 IBOX(IAD)%ISKBOX = 0
181 IBOX(IAD)%NBLEVELS= 0
182 IBOX(IAD)%LEVEL = 1
183 IBOX(IAD)%TYPE = 2
184 IBOX(IAD)%ACTIBOX = 0
185 IBOX(IAD)%NBOXBOX = 0
186 IBOX(IAD)%NOD1 = N1
187 IBOX(IAD)%NOD2 = N2
188 IBOX(IAD)%DIAM = DIAM
189 IBOX(IAD)%X1 = XP1
190 IBOX(IAD)%Y1 = YP1
191 IBOX(IAD)%Z1 = ZP1
192 IBOX(IAD)%X2 = XP2
193 IBOX(IAD)%Y2 = YP2
194 IBOX(IAD)%Z2 = ZP2
195 IBOX(IAD)%SURFIAD = 0
196 IBOX(IAD)%NENTITY = 0
197 IBOX(IAD)%BOXIAD = 0
198c
199 ENDDO
200
201c-----------
202 RETURN
203 END
#define my_real
Definition cppsort.cpp:32
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharkey
subroutine read_box_cyl(ibox, iad, nbox, itabm1, x, rtrans, unitab, lsubmodel)