43
44
45
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "param_c.inc"
60#include "com04_c.inc"
61#include "sphcom.inc"
62#include "tabsiz_c.inc"
63
64
65
66 INTEGER, INTENT(IN) :: NBOX
67 INTEGER, INTENT(INOUT) :: IAD
68 INTEGER, DIMENSION(LISKN,SISKWN/LISKN), INTENT(IN) :: ISKN
69 INTEGER, DIMENSION(NUMNOD) , INTENT(IN) :: ITABM1
70 my_real,
DIMENSION(3,NUMNOD),
INTENT(IN) :: x
71 my_real,
DIMENSION(LSKEW,SSKEW/LSKEW),
INTENT(IN) :: skew
72 my_real,
DIMENSION(NTRANSF,NRTRANS),
INTENT(IN) :: rtrans
73 TYPE (UNIT_TYPE_), INTENT(IN) :: UNITAB
74 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
75 TYPE (BOX_), DIMENSION(NBBOX) :: IBOX
76
77
78
79 INTEGER :: I,J,N1,N2,UID,BOXID,SUB_ID,SKEW_ID,ISK,IUNIT,FLAGUNIT,
80 . SUB_INDEX
81 my_real :: fac_l,xp1,yp1,zp1,xp2,yp2,zp2
82 CHARACTER(LEN=NCHARKEY) :: KEY
83 CHARACTER(LEN=NCHARTITLE) :: TITR,MESS
84 LOGICAL :: IS_AVAILABLE
85
86
87
88 INTEGER USR2SYS
89 DATA mess/'MULTI-BOX DEFINITION '/
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
115
116
117 DO i = 1,nbox
118
120 . unit_id = uid,
121 . submodel_id = sub_id,
122 . submodel_index = sub_index,
123 . option_titr = titr,
124 . keyword2 = key)
125
126
127
128 IF (uid > 0) THEN
129 flagunit = 0
130 DO iunit=1,unitab%NUNITS
131 IF (unitab%UNIT_ID(iunit) == uid) THEN
132 flagunit = 1
133 EXIT
134 ENDIF
135 ENDDO
136 IF (uid > 0 .AND. flagunit == 0) THEN
137 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
138 . i2= uid ,i1=boxid,
139 . c1='BOX' ,
140 . c2='BOX' ,
141 . c3='TITR')
142 ENDIF
143 ENDIF
144
145
146
147
148 CALL hm_get_intv (
'box_corner_node1' ,n1 ,is_available, lsubmodel)
149 CALL hm_get_intv (
'box_corner_node2' ,n2 ,is_available, lsubmodel)
150 CALL hm_get_intv (
'box_system' ,skew_id ,is_available, lsubmodel)
151
152 CALL hm_get_floatv(
'box_corner1_x' ,xp1 ,is_available, lsubmodel, unitab)
153 CALL hm_get_floatv(
'box_corner1_y' ,yp1 ,is_available, lsubmodel, unitab)
154 CALL hm_get_floatv(
'box_corner1_z' ,zp1 ,is_available, lsubmodel, unitab)
155
156 CALL hm_get_floatv(
'box_corner2_x' ,xp2 ,is_available, lsubmodel, unitab)
157 CALL hm_get_floatv(
'box_corner2_y' ,yp2 ,is_available, lsubmodel, unitab)
158 CALL hm_get_floatv(
'box_corner2_z' ,zp2 ,is_available, lsubmodel, unitab)
159
160
161
162 IF (skew_id == 0 .and. sub_id > 0) skew_id = lsubmodel(sub_index)%SKEW
163 isk = 0
164 IF (skew_id > 0) THEN
166 IF (iskn(4,j+1) == skew_id) THEN
167 isk = j
168 EXIT
169 END IF
170 END DO
171 IF (isk == 0) THEN
172 CALL ancmsg(msgid=748, msgtype=msgerror,
173 . anmode=aninfo_blind_1,
174 . c1='BOX' ,
175 . i1=boxid ,
176 . c2=titr ,
177 . c3=titr ,
178 . c4=' ' ,
179 . i2=skew_id)
180 END IF
181 END IF
182
183
184 IF (n1 > 0 .and. n2 > 0) THEN
185
186 xp1 = x(1,
usr2sys(n1,itabm1,mess,boxid))
187 yp1 = x(2,
usr2sys(n1,itabm1,mess,boxid))
188 zp1 = x(3,
usr2sys(n1,itabm1,mess,boxid))
189 xp2 = x(1,
usr2sys(n2,itabm1,mess,boxid))
190 yp2 = x(2,
usr2sys(n2,itabm1,mess,boxid))
191 zp2 = x(3,
usr2sys(n2,itabm1,mess,boxid))
192 ELSE
193
194 IF (sub_id > 0)
CALL subrotpoint(xp1,yp1,zp1,rtrans,sub_id,lsubmodel)
195 IF (sub_id > 0)
CALL subrotpoint(xp2,yp2,zp2,rtrans,sub_id,lsubmodel)
196 ENDIF
197
198 IF ((xp1 == zero .and. yp1 == zero .and. zp1 == zero) .and.
199 . (xp2 == zero .and. yp2 == zero .and. zp2 == zero)) THEN
200 CALL ancmsg(msgid=752, msgtype=msgerror,
201 . anmode=aninfo,
202 . c1 = 'BOX',
203 . i1 = boxid,
204 . c2 = titr ,
205 . c3 = titr ,
206 . c4 = ' ' )
207 END IF
208
209
210 iad = iad + 1
211 ibox(iad)%TITLE = trim(titr)
212 ibox(iad)%ID = boxid
213 ibox(iad)%ISKBOX = isk
214 ibox(iad)%NBLEVELS= 0
215 ibox(iad)%LEVEL = 1
216 ibox(iad)%TYPE = 1
217 ibox(iad)%ACTIBOX = 0
218 ibox(iad)%NBOXBOX = 0
219 ibox(iad)%NOD1 = n1
220 ibox(iad)%NOD2 = n2
221 ibox(iad)%DIAM = zero
222 ibox(iad)%X1 = xp1
223 ibox(iad)%Y1 = yp1
224 ibox(iad)%Z1 = zp1
225 ibox(iad)%X2 = xp2
226 ibox(iad)%Y2 = yp2
227 ibox(iad)%Z2 = zp2
228 ibox(iad)%SURFIAD = 0
229 ibox(iad)%NENTITY = 0
230 ibox(iad)%BOXIAD = 0
231
232 ENDDO
233
234
235 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)