OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_box.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_box ../starter/source/model/box/hm_read_box.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!|| hm_option_count ../starter/source/devtools/hm_reader/hm_option_count.F
29!|| nboxlst ../starter/source/model/box/nboxlist.F
30!|| read_box_box ../starter/source/model/box/read_box_box.F
31!|| read_box_cyl ../starter/source/model/box/read_box_cyl.f
32!|| read_box_rect ../starter/source/model/box/read_box_rect.F
33!|| read_box_spher ../starter/source/model/box/read_box_spher.F
34!|| udouble_igr ../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 hm_read_box(IBOX ,UNITAB ,ITABM1 ,ISKN ,SKEW ,
41 . X ,RTRANS ,LSUBMODEL)
42C-----------------------------------------------
43C M o d u l e s
44C-----------------------------------------------
45 USE my_alloc_mod
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 ,DIMENSION(LISKN,*) ,INTENT(IN) :: ISKN
65 INTEGER ,DIMENSION(NUMNOD) ,INTENT(IN) :: ITABM1
66 my_real ,DIMENSION(3,NUMNOD) ,INTENT(IN) :: x
67 my_real ,DIMENSION(LSKEW,*) ,INTENT(IN) :: skew
68 my_real ,DIMENSION(NTRANSF,*) ,INTENT(IN) :: rtrans
69 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
70 TYPE(submodel_data),DIMENSION(*) ,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,II,J,UID,LEN,BOXID,IUNIT,FLAGUNIT,
76 . iad,nbox,nbox_rect,nbox_cyl,nbox_spher,nbox_box,nlist
77 my_real :: bid
78 INTEGER :: IWORK(70000)
79 INTEGER INDEX(NBBOX*3),IX1(NBBOX),IX2(NBBOX)
80 INTEGER, DIMENSION(:) ,ALLOCATABLE :: BUFTMP,IBOXTMP
81 CHARACTER(LEN=NCHARKEY) :: KEY,KEY2
82 CHARACTER(nchartitle) :: TITR,MESS
83 LOGICAL :: IS_AVAILABLE
84c
85 DATA mess/'BOX DEFINITION '/
86C-----------------------------------------------
87C E x t e r n a l F u n c t i o n s
88C-----------------------------------------------
89 INTEGER LISTCNT,NBOXLST
90C-----------------------------------------------
91C IBOX(I)%ID : BOX IDENTIFIER
92C IBOX(I)%TITLE : BOX title
93C IBOX(I)%NBOXBOX : NUMBER OF SUB BOXES (BOXES OF BOXES)
94C IBOX(I)%ISKBOX : BOX SKEW_ID (/BOX/RECTA)
95C IBOX(I)%NOD1 : FIRST NODE for box limit definition - N1
96C IBOX(I)%NOD2 : SECOND NODE for box limit definition - N2
97C IBOX(I)%TYPE : BOX TYPE (0='BOX',1='RECTA',2='CYLIN' ,3='SPHER')
98C IBOX(I)%NBLEVELS : TEMPORARY LEVEL NB OF BOXES
99C IBOX(I)%LEVEL : FLAG "SUBLEVEL DONE" FOR BOX OF BOXES
100C IBOX(I)%ACTIBOX : FLAG FOR ACTIVATED BOX FOR (GRNOD,GRSHEL,LINE,SURF...)
101C IBOX(I)%NENTITY : NUMBER OF BOX ENTITIES (NODES,ELEMS,LINES,SURF)
102C WITHIN ACTIVATED BOX
103C IBOX(I)%SURFIAD :temporary address for solid external surface (in box)
104C IBOX(I)%BOXIAD : temporary address
105C IBOX(I)%DIAM : BOX diameter (CYLIN + SPHER)
106C IBOX(I)%X1 : coord.X for N1
107C IBOX(I)%Y1 : coord.Y for N1
108C IBOX(I)%Z1 : coord.Z for N1
109C IBOX(I)%X2 : coord.X for N2
110C IBOX(I)%Y2 : coord.Y for N2
111C IBOX(I)%Z2 : coord.Z for N2
112C IBOX(I)%IBOXBOX(NBOXBOX) : LIST OF BOXES (in /box/box)
113C IBOX(I)%ENTITY(NENTITY) : LIST OF ENTITIES (NODES,ELEMS,LINES,SURF)
114C=======================================================================
115c
116 CALL hm_option_count('/box/recta' ,NBOX_RECT )
117 CALL HM_OPTION_COUNT('/box/cylin' ,NBOX_CYL )
118 CALL HM_OPTION_COUNT('/box/spher' ,NBOX_SPHER )
119 CALL HM_OPTION_COUNT('/box/box' ,NBOX_BOX )
120c
121 NBOX = NBOX_RECT + NBOX_CYL + NBOX_SPHER + NBOX_BOX
122c-----------------------------------------------
123 IAD = 0
124 LEN = 5*NBBOX
125 CALL MY_ALLOC(BUFTMP ,LEN)
126c--------------------------------------------------
127c
128 CALL READ_BOX_SPHER(
129 . IBOX ,IAD ,NBOX_SPHER,ITABM1 ,X ,
130 . RTRANS ,UNITAB ,LSUBMODEL )
131c
132 CALL READ_BOX_CYL(
133 . IBOX ,IAD ,NBOX_CYL ,ITABM1 ,X ,
134 . RTRANS ,UNITAB ,LSUBMODEL )
135c
136 CALL READ_BOX_RECT(
137 . IBOX ,IAD ,NBOX_RECT ,ISKN ,SKEW ,
138 . ITABM1 ,X ,RTRANS ,UNITAB ,LSUBMODEL)
139c
140 CALL READ_BOX_BOX(IBOX ,IAD ,NBOX_BOX ,LSUBMODEL)
141c
142c--------------------------------------------------
143c Recherche des ID doubles
144c
145 CALL MY_ALLOC (IBOXTMP ,NBOX )
146 IBOXTMP(1:NBOX) = IBOX(1:NBOX)%ID
147 CALL UDOUBLE_IGR(IBOXTMP,NBOX,MESS,0,ZERO)
148c
149c--------------------------------------------------
150c check /box/box
151c--------------------------------------------------
152 IF (NBOX_BOX > 0) THEN
153 II = 0
154 DO I = 1,NBBOX
155 IF (IBOX(I)%TYPE == 0) THEN
156 NLIST = IBOX(I)%NBOXBOX
157 BOXID = IBOX(I)%ID
158 TITR = IBOX(I)%TITLE
159 IF (NLIST > 0) THEN
160 NLIST = NBOXLST(IBOX(I)%IBOXBOX,NLIST ,IBOXTMP ,NBBOX,
161 . BUFTMP ,BUFTMP(1+NBBOX),BUFTMP(1+2*NBBOX),
162 . II,BOXID,TITR)
163 II = 1
164 IBOX(I)%NBOXBOX = NLIST
165 ELSE
166 IBOX(IAD)%NBOXBOX = 0
167 ENDIF
168 ENDIF
169 ENDDO
170 ENDIF
171C-----------------------------
172 IF (ALLOCATED(IBOXTMP)) DEALLOCATE (IBOXTMP)
173 IF (ALLOCATED(BUFTMP) ) DEALLOCATE (BUFTMP )
174c-----------
175 RETURN
176 END
#define my_real
Definition cppsort.cpp:32
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_read_box(ibox, unitab, itabm1, iskn, skew, x, rtrans, lsubmodel)
Definition hm_read_box.F:42
integer, parameter ncharkey
subroutine read_box_cyl(ibox, iad, nbox, itabm1, x, rtrans, unitab, lsubmodel)
subroutine udouble_igr(list, nlist, mess, ir, rlist)
Definition sysfus.F:1220
program starter
Definition starter.F:39