43
44
45
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "com04_c.inc"
60#include "param_c.inc"
61
62
63
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
72
73
74
75 INTEGER :: I,J,N1,UID,BOXID,SUB_ID,IUNIT,FLAGUNIT
76 my_real :: fac_l,xp1,yp1,zp1,diam
77 CHARACTER(LEN=NCHARKEY) :: KEY
78 CHARACTER(LEN=NCHARTITLE) :: TITR,MESS
79 LOGICAL :: IS_AVAILABLE
80 DATA mess/'MULTI-BOX DEFINITION '/
81
82
83
84 INTEGER USR2SYS
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
110
111
112 DO i = 1,nbox
113
115 . unit_id = uid,
116 . submodel_id = sub_id,
117 . option_titr = titr,
118 . keyword2 = key)
119
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
136
137
138 CALL hm_get_intv (
'sphere_center_node' ,n1 ,is_available, lsubmodel)
139 CALL hm_get_floatv(
'sphere_diameter' ,diam ,is_available, lsubmodel, unitab)
140
141 CALL hm_get_floatv(
'sphere_center_x' ,xp1 ,is_available, lsubmodel, unitab)
142 CALL hm_get_floatv(
'sphere_center_y' ,yp1 ,is_available, lsubmodel, unitab)
143 CALL hm_get_floatv(
'sphere_center_z' ,zp1 ,is_available, lsubmodel, unitab)
144
145
146 IF (n1 > 0) THEN
147
148 xp1 = x(1,
usr2sys(n1,itabm1,mess,boxid))
149 yp1 = x(2,
usr2sys(n1,itabm1,mess,boxid))
150 zp1 = x(3,
usr2sys(n1,itabm1,mess,boxid))
151 ELSE
152
153 IF (sub_id > 0)
CALL subrotpoint(xp1,yp1,zp1,rtrans,sub_id,lsubmodel)
154 ENDIF
155
156 IF (xp1 == zero .and. yp1 == zero .and. zp1 == zero) THEN
157 CALL ancmsg(msgid=752, msgtype=msgerror, anmode=aninfo,
158 . c1 = 'BOX',
159 . i1 = boxid,
160 . c2 = titr ,
161 . c3 = titr ,
162 . c4 = ' ' )
163 END IF
164
165
166 iad = iad + 1
167 ibox(iad)%TITLE = trim(titr)
168 ibox(iad)%ID = boxid
169 ibox(iad)%ISKBOX = 0
170 ibox(iad)%NBLEVELS= 0
171 ibox(iad)%LEVEL = 1
172 ibox(iad)%TYPE = 3
173 ibox(iad)%ACTIBOX = 0
174 ibox(iad)%NBOXBOX = 0
175 ibox(iad)%NOD1 = n1
176 ibox(iad)%NOD2 = 0
177 ibox(iad)%DIAM = diam
178 ibox(iad)%X1 = xp1
179 ibox(iad)%Y1 = yp1
180 ibox(iad)%Z1 = zp1
181 ibox(iad)%X2 = zero
182 ibox(iad)%Y2 = zero
183 ibox(iad)%Z2 = zero
184 ibox(iad)%SURFIAD = 0
185 ibox(iad)%NENTITY = 0
186 ibox(iad)%BOXIAD = 0
187
188 ENDDO
189
190
191 RETURN
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)
integer function usr2sys(iu, itabm1, mess, id)
subroutine subrotpoint(x, y, z, rtrans, sub_id, lsubmodel)