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 Search for double IDs
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_box(ibox, iad, nbox, lsubmodel)
subroutine read_box_cyl(ibox, iad, nbox, itabm1, x, rtrans, unitab, lsubmodel)
subroutine read_box_rect(ibox, iad, nbox, iskn, skew, itabm1, x, rtrans, unitab, lsubmodel)
subroutine read_box_spher(ibox, iad, nbox, itabm1, x, rtrans, unitab, lsubmodel)
subroutine udouble_igr(list, nlist, mess, ir, rlist)
Definition sysfus.F:1204