OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
read_box_cyl.F File Reference
#include "implicit_f.inc"
#include "com04_c.inc"
#include "param_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine read_box_cyl (ibox, iad, nbox, itabm1, x, rtrans, unitab, lsubmodel)

Function/Subroutine Documentation

◆ read_box_cyl()

subroutine read_box_cyl ( type (box_), dimension(nbbox) ibox,
integer, intent(inout) iad,
integer, intent(in) nbox,
integer, dimension(numnod), intent(in) itabm1,
intent(in) x,
intent(in) rtrans,
type (unit_type_), intent(in) unitab,
type(submodel_data), dimension(nsubmod), intent(in) lsubmodel )

Definition at line 40 of file read_box_cyl.F.

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 IF (uid > 0 .AND. 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 IF (n1 > 0 .and. 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 IF ((xp1 == zero .and. yp1 == zero .and. zp1 == zero) .and.
167 . (xp2 == zero .and. yp2 == zero .and. 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
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharkey
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:889
integer function usr2sys(iu, itabm1, mess, id)
Definition sysfus.F:160
subroutine subrotpoint(x, y, z, rtrans, sub_id, lsubmodel)
Definition subrot.F:180