]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
d43b40e2 | 5 | * Revision 1.1.1.1 1999/05/18 15:55:03 fca |
6 | * AliRoot sources | |
7 | * | |
fe4da5cc | 8 | * Revision 1.2 1996/02/27 10:02:05 ravndal |
9 | * Drawing of PCON's optimized for 'HIDE ON' | |
10 | * | |
11 | * Revision 1.1.1.1 1995/10/24 10:20:20 cernlib | |
12 | * Geant | |
13 | * | |
14 | * | |
15 | #include "geant321/pilot.h" | |
16 | *CMZ : 3.21/04 13/12/94 17.13.38 by S.Giani | |
17 | *-- Author : | |
18 | * | |
19 | SUBROUTINE GDCGOB(ITASK,ISHAPE,PAR,NOBJ,NWWS,IVOLNA, | |
20 | +LSTEP) | |
21 | C. | |
22 | C. ****************************************************************** | |
23 | C. * * | |
24 | C. * Make the CG-Object with shape ISHAPE of parameters PAR * | |
25 | C. * with the same logic as GDRAWS. 1992 * | |
26 | C. * * | |
27 | C. * Input Parameters : * | |
28 | C. * * | |
29 | C. * ITASK: Number for indicating the task to be performed * | |
30 | C. * * | |
31 | C. * * | |
32 | C. * = 0 Counting task * | |
33 | C. * = 1 Slicing + Counting * | |
34 | C. * = 2 Clipping + Counting * | |
35 | C. * = 3 Insert into the H.S. + Convert to Wire * | |
36 | C. * = 4 Slicing + Insert into the H.S. + Convert * | |
37 | C. * to Wire * | |
38 | C. * = 5 Clipping + Insert into the H.S. + Convert * | |
39 | C. * to Wire * | |
40 | C. * * | |
41 | C. * SHAPE SHAPE SHAPE * | |
42 | C. * NUMBER TYPE PARAMETERS * | |
43 | C. * -------------------------------------------------------------- * | |
44 | C. * * | |
45 | C. * 1 BOX DX,DY,DZ * | |
46 | C. * 2 TRD1 DX1,DX2,DY,DZ * | |
47 | C. * 3 TRD2 DX1,DX2,DY1,DY2,DZ * | |
48 | C. * 4 TRAP DZ,TX,TY,H1,BL1,TL1,TTH1,H2,BL2,TL2,TTH2 * | |
49 | C. * * | |
50 | C. * 5 TUBE RMIN,RMAX,DZ * | |
51 | C. * 6 TUBS RMIN,RMAX,DZ,PHIMIN,PHIMAX * | |
52 | C. * 7 CONE DZ,RMIN1,RMAX1,RMIN2,RMAX2 * | |
53 | C. * 8 CONS DZ,RMIN1,RMAX1,RMIN2,RMAX2,PHIMIN,PHIMAX * | |
54 | C. * * | |
55 | C. * 9 SPHE RMIN,RMAX,THEMIN,THEMAX,PHIMIN,PHIMAX * | |
56 | C. * * | |
57 | C. * 10 PARA DX,DY,DZ,TXY,TXZ,TYZ * | |
58 | C. * 11 PGON PHIMIN,DPHI,NDIV,NZ,Z(1),RMIN(1),RMAX(1),...* | |
59 | C. * 12 PCON PHIMIN,DPHI,NZ,Z(1),RMIN(1),RMAX(1),Z(2),...* | |
60 | C. * * | |
61 | C. * NOBJ = Counter of cg objects * | |
62 | C. * NWWS = Size of Wire structure * | |
63 | C. * IVOLNA = Name of volume * | |
64 | C. * LSTEP = Number of CG objects forming each volume * | |
65 | C. * * | |
66 | C. * ==>Called by : GDRAW * | |
67 | C. * Author : P.Zanarini, J.Salt, S.Giani ********* * | |
68 | C. * * | |
69 | C. ****************************************************************** | |
70 | C. | |
71 | #include "geant321/gcbank.inc" | |
72 | #include "geant321/gcunit.inc" | |
73 | #include "geant321/gcvolu.inc" | |
74 | #include "geant321/gcgobj.inc" | |
75 | #include "geant321/gcmutr.inc" | |
76 | #include "geant321/gcdraw.inc" | |
77 | #include "geant321/gchiln.inc" | |
78 | #include "geant321/gcspee.inc" | |
79 | #include "geant321/gconsp.inc" | |
80 | SAVE NWPROD | |
81 | COMMON /QUEST/IQUEST(100) | |
d43b40e2 | 82 | DIMENSION PAR(100),P(3,8) |
fe4da5cc | 83 | *SG |
84 | DIMENSION RRMIN(3),RRMAX(3) | |
85 | DIMENSION SLI1(4),SLI2(4),SPI1(4),SPI2(4) | |
86 | *SG | |
87 | DIMENSION XZ(2,4),ZR(18),RMIR(18),RMAR(18),AMIRMA(18),AMARMA(18) | |
88 | DIMENSION T(4,3) | |
89 | C. ------------------------------------------------------------------ | |
90 | C. | |
91 | **SG | |
92 | CALL UCTOH('PERS',IPERS,4,4) | |
93 | T(4,1)=0. | |
94 | T(4,2)=0. | |
95 | T(4,3)=0. | |
96 | LINSTY=IBITS(LINATT,10,3) | |
97 | IF(LINSTY.EQ.7)THEN | |
98 | APPROS=30. | |
99 | ELSE | |
100 | APPROS=15. | |
101 | ENDIF | |
102 | IF(ISUBLI.LT.IOLDSU)THEN | |
103 | PORGX=0 | |
104 | PORGY=0 | |
105 | PORGZ=0 | |
106 | DO 10 J=1,15 | |
107 | POX(J)=0 | |
108 | POY(J)=0 | |
109 | POZ(J)=0 | |
110 | 10 CONTINUE | |
111 | ENDIF | |
112 | IOLDSU=ISUBLI | |
113 | * | |
114 | * LHC flag 'ON' (default) | |
115 | * | |
116 | * CALL UCTOH('ON ',LHIF,4,4) | |
117 | * IF(LEP.EQ.LHIF)THEN | |
118 | * VITE=1 | |
119 | * ELSE | |
120 | * VITE=0 | |
121 | * ENDIF | |
122 | * | |
123 | * Flag for GDCGHI resetted for each CG object | |
124 | ISG=0 | |
125 | ICGP=0 | |
126 | LINFIL=IBITS(LINATT,13,3) | |
127 | **SG | |
128 | IVCLOS=0 | |
129 | IVFUN=1 | |
130 | IWORK=ITASK | |
131 | CALL UCTOH('ON ',IFLH,4,4) | |
132 | *JS | |
133 | IF (ISHAPE.EQ.1) THEN | |
134 | C | |
135 | C BOX | |
136 | C | |
137 | DX1=PAR(1) | |
138 | DY1=PAR(2) | |
139 | DX2=DX1 | |
140 | DY2=DY1 | |
141 | DZ=PAR(3) | |
142 | GO TO 20 | |
143 | C | |
144 | ELSEIF (ISHAPE.EQ.2) THEN | |
145 | C | |
146 | C TRD1 | |
147 | C | |
148 | DX1=PAR(1) | |
149 | DX2=PAR(2) | |
150 | DY1=PAR(3) | |
151 | DY2=DY1 | |
152 | DZ=PAR(4) | |
153 | GO TO 20 | |
154 | C | |
155 | ELSEIF (ISHAPE.EQ.3) THEN | |
156 | C | |
157 | C TRD2 | |
158 | C | |
159 | DX1=PAR(1) | |
160 | DX2=PAR(2) | |
161 | DY1=PAR(3) | |
162 | DY2=PAR(4) | |
163 | DZ=PAR(5) | |
164 | GO TO 20 | |
165 | C | |
166 | ELSEIF (ISHAPE.EQ.4) THEN | |
167 | C | |
168 | C TRAP | |
169 | C | |
170 | DZ=PAR(1) | |
171 | TX=PAR(2) | |
172 | TY=PAR(3) | |
173 | H1=PAR(4) | |
174 | BL1=PAR(5) | |
175 | TL1=PAR(6) | |
176 | TTH1=PAR(7) | |
177 | H2=PAR(8) | |
178 | BL2=PAR(9) | |
179 | TL2=PAR(10) | |
180 | TTH2=PAR(11) | |
181 | GO TO 30 | |
182 | C | |
183 | ELSEIF (ISHAPE.EQ.5) THEN | |
184 | C | |
185 | C TUBE | |
186 | C | |
187 | AFINV=1./COS(PI/APPROS) | |
188 | FINV=ABS(AFINV) | |
189 | RMIN1=PAR(1)*FINV | |
190 | RMAX1=PAR(2)*FINV | |
191 | RMIN2=RMIN1 | |
192 | RMAX2=RMAX1 | |
193 | Z2=PAR(3) | |
194 | * Z1=-Z2 | |
195 | PHIMIN=0. | |
196 | PHIMAX=360. | |
197 | IF((LINFIL.EQ.2.OR.LINFIL.EQ.3) | |
198 | + .AND.RMIN1.NE.0)PHIMIN=5. | |
199 | *SG | |
200 | ANG1=PHIMIN | |
201 | ANG2=PHIMAX | |
202 | AANG=ABS(ANG2-ANG1) | |
203 | AZLAT=AANG*APPROS | |
204 | ZLAT=AZLAT/360 | |
205 | NANG=ZLAT | |
206 | IF(NANG.EQ.0)NANG=1 | |
207 | AZ=ZLAT-NANG | |
208 | IF(AZ.GT..5)NANG=NANG+1 | |
209 | *SG | |
210 | GO TO 70 | |
211 | C | |
212 | ELSEIF (ISHAPE.EQ.6.OR.ISHAPE.EQ.29) THEN | |
213 | C | |
214 | C TUBS | |
215 | C | |
216 | AFINV=1./COS(PI/APPROS) | |
217 | FINV=ABS(AFINV) | |
218 | RMIN1=PAR(1)*FINV | |
219 | RMAX1=PAR(2)*FINV | |
220 | RMIN2=RMIN1 | |
221 | RMAX2=RMAX1 | |
222 | AZ2=PAR(3) | |
223 | Z2=ABS(AZ2) | |
224 | * Z1=-Z2 | |
225 | PHIMIN=PAR(4) | |
226 | PHIMAX=PAR(5) | |
227 | **SG | |
228 | ANG1=PHIMIN | |
229 | ANG2=PHIMAX | |
230 | AANG=ABS(ANG2-ANG1) | |
231 | AZLAT=AANG*APPROS | |
232 | ZLAT=AZLAT/360 | |
233 | NANG=ZLAT | |
234 | IF(NANG.EQ.0)NANG=1 | |
235 | AZ=ZLAT-NANG | |
236 | IF(AZ.GT..5)NANG=NANG+1 | |
237 | IF(ISHAPE.EQ.29)NANG=APPROS | |
238 | **SG | |
239 | GO TO 70 | |
240 | C | |
241 | ELSEIF (ISHAPE.EQ.7) THEN | |
242 | C | |
243 | C CONE | |
244 | C | |
245 | AFINV=1./COS(PI/APPROS) | |
246 | FINV=ABS(AFINV) | |
247 | RMIN1=PAR(2)*FINV | |
248 | RMAX1=PAR(3)*FINV | |
249 | RMIN2=PAR(4)*FINV | |
250 | RMAX2=PAR(5)*FINV | |
251 | Z2=PAR(1) | |
252 | * Z1=-Z2 | |
253 | PHIMIN=0. | |
254 | PHIMAX=360. | |
255 | IF((LINFIL.EQ.2.OR.LINFIL.EQ.3).AND.RMIN2.NE.0)PHIMIN=5. | |
256 | *SG | |
257 | ANG1=PHIMIN | |
258 | ANG2=PHIMAX | |
259 | AANG=ABS(ANG2-ANG1) | |
260 | AZLAT=AANG*APPROS | |
261 | ZLAT=AZLAT/360 | |
262 | NANG=ZLAT | |
263 | IF(NANG.EQ.0)NANG=1 | |
264 | AZ=ZLAT-NANG | |
265 | IF(AZ.GT..5)NANG=NANG+1 | |
266 | *SG | |
267 | GO TO 70 | |
268 | C | |
269 | ELSEIF (ISHAPE.EQ.8) THEN | |
270 | C | |
271 | C CONS | |
272 | C | |
273 | AFINV=1./COS(PI/APPROS) | |
274 | FINV=ABS(AFINV) | |
275 | RMIN1=PAR(2)*FINV | |
276 | RMAX1=PAR(3)*FINV | |
277 | RMIN2=PAR(4)*FINV | |
278 | RMAX2=PAR(5)*FINV | |
279 | Z2=PAR(1) | |
280 | * Z1=-Z2 | |
281 | PHIMIN=PAR(6) | |
282 | PHIMAX=PAR(7) | |
283 | **SG | |
284 | ANG1=PHIMIN | |
285 | ANG2=PHIMAX+.1 | |
286 | AANG=ABS(ANG2-ANG1) | |
287 | AZLAT=AANG*APPROS | |
288 | ZLAT=AZLAT/360 | |
289 | NANG=ZLAT | |
290 | IF(NANG.EQ.0)NANG=1 | |
291 | AZ=ZLAT-NANG | |
292 | IF(AZ.GT..5)NANG=NANG+1 | |
293 | **SG | |
294 | GO TO 70 | |
295 | C | |
296 | ELSEIF (ISHAPE.EQ.9) THEN | |
297 | C | |
298 | C SPHE | |
299 | C | |
300 | * RMIN=PAR(1) | |
301 | RMAX=PAR(2) | |
302 | GO TO 120 | |
303 | C | |
304 | ELSEIF (ISHAPE.EQ.10) THEN | |
305 | C | |
306 | C PARA | |
307 | C | |
308 | DX=PAR(1) | |
309 | DY=PAR(2) | |
310 | DZ=PAR(3) | |
311 | TXY=PAR(4) | |
312 | TXZ=PAR(5) | |
313 | TYZ=PAR(6) | |
314 | C | |
315 | TX=TXZ | |
316 | TY=TYZ | |
317 | H1=DY | |
318 | BL1=DX | |
319 | TL1=DX | |
320 | TTH1=TXY | |
321 | H2=DY | |
322 | BL2=DX | |
323 | TL2=DX | |
324 | TTH2=TXY | |
325 | GO TO 30 | |
326 | C | |
327 | ELSEIF (ISHAPE.EQ.11) THEN | |
328 | C | |
329 | C PGON | |
330 | C | |
331 | PHIMIN=PAR(1) | |
332 | IF((LINFIL.EQ.2.OR.LINFIL.EQ.3).AND.PAR(2).GT.359.)PAR(2)=359. | |
333 | PHIMAX=PHIMIN+PAR(2) | |
334 | NDIVAN=PAR(3) | |
335 | NZ=PAR(4) | |
336 | C | |
337 | C Z(1)=PAR(5) - RMIN(1)=PAR(6) - RMAX(1)=PAR(7) - Z(2)=PAR(8 | |
338 | C | |
339 | GO TO 150 | |
340 | C | |
341 | ELSEIF (ISHAPE.EQ.12) THEN | |
342 | C | |
343 | C PCON | |
344 | C | |
345 | PHIMIN=PAR(1) | |
346 | IF((LINFIL.EQ.2.OR.LINFIL.EQ.3).AND.PAR(2).GT.359.)PAR(2)=359. | |
347 | PHIMAX=PHIMIN+PAR(2) | |
348 | NZ=PAR(3) | |
349 | C | |
350 | C Z(1)=PAR(4) - RMIN(1)=PAR(5) - RMAX(1)=PAR(6) - Z(2)=PAR(7 | |
351 | C | |
352 | GO TO 230 | |
353 | ELSE | |
354 | GO TO 999 | |
355 | ENDIF | |
356 | C | |
357 | * GO TO 150 | |
358 | C | |
359 | 20 CONTINUE | |
360 | C | |
361 | C Rectilinear shapes: BOX,TRD1,TRD2 | |
362 | C | |
363 | X1=0. | |
364 | Y1=0. | |
365 | X2=0. | |
366 | Y2=0. | |
367 | IF(DZ.LT.0.001)DZ=0.001 | |
368 | Z1=-DZ | |
369 | Z2=DZ | |
370 | C | |
371 | C Calculate the 8 vertex for rectilinear shapes | |
372 | C | |
373 | IF(DX1.EQ.0.)DX1=0.0001 | |
374 | IF(DY1.EQ.0.)DY1=0.0001 | |
375 | IF(DX2.EQ.0.)DX2=0.0001 | |
376 | IF(DY2.EQ.0.)DY2=0.0001 | |
377 | P(1,1)=X1+DX1 | |
378 | P(2,1)=Y1+DY1 | |
379 | P(3,1)=Z1 | |
380 | P(1,2)=X1-DX1 | |
381 | P(2,2)=Y1+DY1 | |
382 | P(3,2)=Z1 | |
383 | P(1,3)=X1-DX1 | |
384 | P(2,3)=Y1-DY1 | |
385 | P(3,3)=Z1 | |
386 | P(1,4)=X1+DX1 | |
387 | P(2,4)=Y1-DY1 | |
388 | P(3,4)=Z1 | |
389 | P(1,5)=X2+DX2 | |
390 | P(2,5)=Y2+DY2 | |
391 | P(3,5)=Z2 | |
392 | P(1,6)=X2-DX2 | |
393 | P(2,6)=Y2+DY2 | |
394 | P(3,6)=Z2 | |
395 | P(1,7)=X2-DX2 | |
396 | P(2,7)=Y2-DY2 | |
397 | P(3,7)=Z2 | |
398 | P(1,8)=X2+DX2 | |
399 | P(2,8)=Y2-DY2 | |
400 | P(3,8)=Z2 | |
401 | * | |
402 | GOTO 40 | |
403 | C | |
404 | 30 CONTINUE | |
405 | C | |
406 | C TRAP,PARA | |
407 | C | |
408 | C Calculate the 8 vertex | |
409 | C | |
410 | P(1,1)=-DZ*TX+TTH1*H1+TL1 | |
411 | P(2,1)=+H1-DZ*TY | |
412 | P(3,1)=-DZ | |
413 | P(1,2)=-DZ*TX+TTH1*H1-TL1 | |
414 | P(2,2)=+H1-DZ*TY | |
415 | P(3,2)=-DZ | |
416 | P(1,3)=-DZ*TX-TTH1*H1-BL1 | |
417 | P(2,3)=-H1-DZ*TY | |
418 | P(3,3)=-DZ | |
419 | P(1,4)=-DZ*TX-TTH1*H1+BL1 | |
420 | P(2,4)=-H1-DZ*TY | |
421 | P(3,4)=-DZ | |
422 | P(1,5)=+DZ*TX+TTH2*H2+TL2 | |
423 | P(2,5)=+H2+DZ*TY | |
424 | P(3,5)=+DZ | |
425 | P(1,6)=+DZ*TX+TTH2*H2-TL2 | |
426 | P(2,6)=+H2+DZ*TY | |
427 | P(3,6)=+DZ | |
428 | P(1,7)=+DZ*TX-TTH2*H2-BL2 | |
429 | P(2,7)=-H2+DZ*TY | |
430 | P(3,7)=+DZ | |
431 | P(1,8)=+DZ*TX-TTH2*H2+BL2 | |
432 | P(2,8)=-H2+DZ*TY | |
433 | P(3,8)=+DZ | |
434 | C | |
435 | 40 CONTINUE | |
436 | C | |
437 | C BOX,TRD1,TRD2,TRAP,PARA --->> call CGBOX | |
438 | C | |
439 | IVCLOS=1 | |
440 | *SG | |
441 | * Size evaluation | |
442 | * | |
443 | IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN | |
444 | * NWB = n. words for each box | |
445 | NCGVOL=NCGVOL+NWB | |
446 | GOTO 999 | |
447 | ENDIF | |
448 | ICPOIN=JCGOBJ+1 | |
449 | * Creating object | |
450 | *SG | |
451 | RMIN1=0 | |
452 | RMIN2=0 | |
453 | RMAX1=0 | |
454 | RMAX2=0 | |
455 | CALL CGBOX(P,4,4,300,Q(ICPOIN)) | |
456 | DO 50 J=1,3 | |
457 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
458 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
459 | T(J,3)=GRMAT(3*J,NLEVEL) | |
460 | 50 CONTINUE | |
461 | CALL CGRIFL(T,Q(ICPOIN)) | |
462 | CGERR=Q(ICPOIN) | |
463 | IF(CGERR.LE.0)THEN | |
464 | CALL GDCGER(CGERR) | |
465 | IF(KCGST.EQ.-2) GOTO 999 | |
466 | IF(KCGST.EQ.-3) THEN | |
467 | KCGST=0 | |
468 | WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL) | |
469 | CALL GMAIL(0,0) | |
470 | GOTO 999 | |
471 | ENDIF | |
472 | ENDIF | |
473 | CALL CGCEV(1,Q(ICPOIN)) | |
474 | DO 60 J=1,3 | |
475 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
476 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
477 | T(J,3)=GRMAT(3*J,NLEVEL) | |
478 | 60 CONTINUE | |
479 | CALL CGAFFI(T,Q(ICPOIN)) | |
480 | XV=GTRAN(1,NLEVEL) | |
481 | YV=GTRAN(2,NLEVEL) | |
482 | ZV=GTRAN(3,NLEVEL) | |
483 | CALL CGSHIF(XV,YV,ZV,Q(ICPOIN)) | |
484 | ***SG | |
485 | * Shifting object | |
486 | IF(KSHIFT.GT.0)THEN | |
487 | CALL GDSHIF(IVOLNA,ICPOIN) | |
488 | ENDIF | |
489 | * | |
490 | IF(GBOOM.NE.0)THEN | |
491 | CALL GDBOMB(ICPOIN,ISHAPE) | |
492 | IF(ITSTCU.EQ.0)GOTO 999 | |
493 | ENDIF | |
494 | * | |
495 | * | |
496 | * | |
497 | * Hidden Volume Removal: | |
498 | * Computing volumes visibility and skipping | |
499 | * the unvisible ones; a great increase in speed | |
500 | * and a great reduction in n. of words used can be | |
501 | * obtained in this way. | |
502 | * | |
503 | CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX) | |
504 | IF(ISUBLI.EQ.1)THEN | |
505 | AA1=RRMIN(1)-S1 | |
506 | AA2=RRMIN(2)-S2 | |
507 | AA3=RRMIN(3)-S3 | |
508 | BB1=RRMAX(1)-SS1 | |
509 | BB2=RRMAX(2)-SS2 | |
510 | BB3=RRMAX(3)-SS3 | |
511 | IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND. BB1.LT. | |
512 | + 0.001.AND.BB2.LT.0.001.AND.BB3.LT.0.001)THEN | |
513 | IF(ISCOP.NE.1)THEN | |
514 | IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN | |
515 | ITSTCU=0 | |
516 | NCGVOL=NCGVOL-NWB | |
517 | GOTO 999 | |
518 | ENDIF | |
519 | ENDIF | |
520 | ENDIF | |
521 | ENDIF | |
522 | IF(IPORLI.EQ.1)THEN | |
523 | S1=RRMIN(1) | |
524 | S2=RRMIN(2) | |
525 | S3=RRMIN(3) | |
526 | SS1=RRMAX(1) | |
527 | SS2=RRMAX(2) | |
528 | SS3=RRMAX(3) | |
529 | SRAGMX=0 | |
530 | SRAGMN=0 | |
531 | RAINT1=0 | |
532 | RAINT2=0 | |
533 | ENDIF | |
534 | * Create clipping objects | |
535 | IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE) | |
536 | * Perspective view | |
537 | IF (IPRJ.EQ.IPERS) THEN | |
538 | CALL CGPERS(Q(ICPOIN)) | |
539 | ENDIF | |
540 | * Inserting volumes in Hide + Wire Structures | |
541 | CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE) | |
542 | GOTO 999 | |
543 | ***SG | |
544 | C | |
545 | 70 CONTINUE | |
546 | C | |
547 | C TUBE,CONE,TUBS,CONS -----> call CGZREV | |
548 | C | |
549 | * | |
550 | * Checking Shape Parameters | |
551 | * | |
552 | IF(RMIN1.GT.RMAX1) THEN | |
553 | WRITE(CHMAIL,10100)ISHAPE,NAMES(NLEVEL) | |
554 | CALL GMAIL(0,0) | |
555 | ENDIF | |
556 | IF(RMIN2.GT.RMAX2) THEN | |
557 | WRITE(CHMAIL,10200)ISHAPE,NAMES(NLEVEL) | |
558 | CALL GMAIL(0,0) | |
559 | ENDIF | |
560 | IF(PHIMIN.GT.PHIMAX)THEN | |
561 | WRITE(CHMAIL,10300)ISHAPE,NAMES(NLEVEL) | |
562 | CALL GMAIL(0,0) | |
563 | ENDIF | |
564 | * | |
565 | * | |
566 | * Checking if all Inner Radii are 0. ==> 'Closed' Volume | |
567 | * | |
568 | IF(RMIN1.LE.0.00001.AND.RMIN2.LE.0.00001)IVCLOS=1 | |
569 | *SG | |
570 | * Size evaluation | |
571 | IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN | |
572 | * NWPROD = n. words for each body of revolution | |
573 | NWPROD=NWREV*(NANG+1) | |
574 | NCGVOL=NCGVOL+NWPROD | |
575 | GOTO 999 | |
576 | ENDIF | |
577 | * Creating object | |
578 | ICPOIN=JCGOBJ+1 | |
579 | *SG | |
580 | IF(ISHAPE.EQ.29)THEN | |
581 | SAL=PAR(8) | |
582 | IF(PAR(11).GT.SAL)SAL=PAR(11) | |
583 | PAR3=MAX(PAR(3),0.) | |
584 | Z2=PAR3+1.001*RMAX1*SQRT((1-SAL*SAL)/(SAL*SAL)) | |
585 | ENDIF | |
586 | XZ(1,1)=RMIN1 | |
587 | XZ(2,1)=-Z2 | |
588 | XZ(1,2)=RMAX1 | |
589 | XZ(2,2)=-Z2 | |
590 | XZ(1,3)=RMAX2 | |
591 | XZ(2,3)=Z2 | |
592 | XZ(1,4)=RMIN2 | |
593 | XZ(2,4)=Z2 | |
594 | CALL CGZREV(XZ,ANG1,ANG2,NANG,4000,Q(ICPOIN)) | |
595 | DO 80 J=1,3 | |
596 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
597 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
598 | T(J,3)=GRMAT(3*J,NLEVEL) | |
599 | 80 CONTINUE | |
600 | CALL CGRIFL(T,Q(ICPOIN)) | |
601 | CGERR=Q(ICPOIN) | |
602 | IF(CGERR.LE.0)THEN | |
603 | CALL GDCGER(CGERR) | |
604 | IF(KCGST.EQ.-2) GOTO 999 | |
605 | IF(KCGST.EQ.-3) THEN | |
606 | KCGST=0 | |
607 | WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL) | |
608 | CALL GMAIL(0,0) | |
609 | GOTO 999 | |
610 | ENDIF | |
611 | ENDIF | |
612 | CALL CGCEV(1,Q(ICPOIN)) | |
613 | IF(ISHAPE.EQ.29)THEN | |
614 | SLI1(1)=-PAR(6) | |
615 | SLI1(2)=-PAR(7) | |
616 | SLI1(3)=-PAR(8) | |
617 | SLI1(4)=-PAR(3)*PAR(8) | |
618 | SLI2(1)=-PAR(9) | |
619 | SLI2(2)=-PAR(10) | |
620 | SLI2(3)=-PAR(11) | |
621 | SLI2(4)=+PAR(3)*PAR(11) | |
622 | ISL1=JCGOBJ+4000 | |
623 | CALL CGSLIC(Q(ICPOIN),SLI1,4000,Q(ISL1)) | |
624 | ISL2=JCGOBJ+8000 | |
625 | CALL CGSLIC(Q(ISL1),SLI2,4000,Q(ISL2)) | |
626 | ICPOIN=ISL2 | |
627 | CALL CGCEV(1,Q(ICPOIN)) | |
628 | ENDIF | |
629 | DO 90 J=1,3 | |
630 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
631 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
632 | T(J,3)=GRMAT(3*J,NLEVEL) | |
633 | 90 CONTINUE | |
634 | CALL CGAFFI(T,Q(ICPOIN)) | |
635 | XV=GTRAN(1,NLEVEL) | |
636 | YV=GTRAN(2,NLEVEL) | |
637 | ZV=GTRAN(3,NLEVEL) | |
638 | CALL CGSHIF(XV,YV,ZV,Q(ICPOIN)) | |
639 | ***SG | |
640 | * Shifting object | |
641 | IF(KSHIFT.GT.0)THEN | |
642 | CALL GDSHIF(IVOLNA,ICPOIN) | |
643 | ENDIF | |
644 | * | |
645 | IF(GBOOM.NE.0)THEN | |
646 | CALL GDBOMB(ICPOIN,ISHAPE) | |
647 | IF(ITSTCU.EQ.0)GOTO 999 | |
648 | ENDIF | |
649 | * | |
650 | * | |
651 | * Hidden Volume Removal: | |
652 | * Computing closed volumes visibility and skipping | |
653 | * the unvisible ones; a great increase in speed | |
654 | * and a great reduction in n. of words used are obtained | |
655 | * in this way. | |
656 | * | |
657 | CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX) | |
658 | IF(ISUBLI.EQ.1)THEN | |
659 | AA1=RRMIN(1)-S1 | |
660 | AA2=RRMIN(2)-S2 | |
661 | AA3=RRMIN(3)-S3 | |
662 | BB1=RRMAX(1)-SS1 | |
663 | BB2=RRMAX(2)-SS2 | |
664 | BB3=RRMAX(3)-SS3 | |
665 | IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND. BB1.LT. | |
666 | + -0.001.AND.BB2.LT.-0.001.AND.BB3.LT.-0.001)THEN | |
667 | IF(ISHAPE.EQ.7.OR.ISHAPE.EQ.8)THEN | |
668 | IF((RMAX2.LT.SRAGMX.AND.RMAX1.LT.SRAGMN).OR. (SRAGMX.EQ. | |
669 | + 0))THEN | |
670 | IF((RMIN2.GT.RAINT2.AND.RMIN1.GT.RAINT1).OR. (RAINT2. | |
671 | + EQ.0))THEN | |
672 | IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN | |
673 | ITSTCU=0 | |
674 | NCGVOL=NCGVOL-NWPROD | |
675 | GOTO 999 | |
676 | ENDIF | |
677 | ENDIF | |
678 | ENDIF | |
679 | ELSEIF(SRAGMX.NE.0.)THEN | |
680 | DO 100 ITER=1,IPORNT | |
681 | IF(RMAX1.EQ.PORMAR(ITER))GOTO 110 | |
682 | IF(RMIN1.EQ.PORMIR(ITER))THEN | |
683 | IF(PORMIR(ITER).NE.0.)GOTO 110 | |
684 | ENDIF | |
685 | 100 CONTINUE | |
686 | ENDIF | |
687 | IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN | |
688 | ITSTCU=0 | |
689 | NCGVOL=NCGVOL-NWPROD | |
690 | GOTO 999 | |
691 | ENDIF | |
692 | ENDIF | |
693 | ENDIF | |
694 | IF(IPORLI.EQ.1)THEN | |
695 | S1=RRMIN(1) | |
696 | S2=RRMIN(2) | |
697 | S3=RRMIN(3) | |
698 | SS1=RRMAX(1) | |
699 | SS2=RRMAX(2) | |
700 | SS3=RRMAX(3) | |
701 | SRAGMX=RMAX2 | |
702 | SRAGMN=RMAX1 | |
703 | RAINT1=RMIN1 | |
704 | RAINT2=RMIN2 | |
705 | IPORNT=1 | |
706 | PORMAR(1)=RMAX2 | |
707 | PORMIR(1)=RMIN1 | |
708 | ENDIF | |
709 | 110 CONTINUE | |
710 | * Create clipping objects | |
711 | IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE) | |
712 | * Perspective view | |
713 | IF (IPRJ.EQ.IPERS) THEN | |
714 | CALL CGPERS(Q(ICPOIN)) | |
715 | ENDIF | |
716 | * Inserting objects in Hide + Wire structures | |
717 | CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE) | |
718 | GOTO 999 | |
719 | ***SG | |
720 | C | |
721 | 120 CONTINUE | |
722 | C | |
723 | C SPHE -----> call CGSPHE | |
724 | C | |
725 | IVCLOS=1 | |
726 | *SG | |
727 | * Size evaluation | |
728 | IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN | |
729 | * NWS = n. words for each sphere | |
730 | NCGVOL=NCGVOL+NWS | |
731 | GOTO 999 | |
732 | ENDIF | |
733 | * | |
734 | R=RMAX | |
735 | RMAX2=R | |
736 | RMAX1=0 | |
737 | RMIN1=0 | |
738 | RMIN2=0 | |
739 | NLAT=11 | |
740 | NLON=11 | |
741 | NWOR=4000 | |
742 | IF(IWORK.EQ.3.AND.(PAR(3).EQ.0.AND.(PAR(4).EQ.0.OR. | |
743 | +PAR(4).EQ.180)))THEN | |
744 | NLAT=29 | |
745 | NLON=29 | |
746 | NWOR=30000 | |
747 | ENDIF | |
748 | ICPOIN=JCGOBJ+1 | |
749 | * Creating object | |
750 | CALL CGSPHE(R,NLAT,NLON,NWOR,Q(ICPOIN)) | |
751 | DO 130 J=1,3 | |
752 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
753 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
754 | T(J,3)=GRMAT(3*J,NLEVEL) | |
755 | 130 CONTINUE | |
756 | CALL CGRIFL(T,Q(ICPOIN)) | |
757 | *SG | |
758 | CGERR=Q(ICPOIN) | |
759 | IF(CGERR.LE.0)THEN | |
760 | CALL GDCGER(CGERR) | |
761 | IF(KCGST.EQ.-2) GOTO 999 | |
762 | IF(KCGST.EQ.-3) THEN | |
763 | KCGST=0 | |
764 | WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL) | |
765 | CALL GMAIL(0,0) | |
766 | GOTO 999 | |
767 | ENDIF | |
768 | ENDIF | |
769 | CALL CGCEV(1,Q(ICPOIN)) | |
770 | IF(PAR(3).NE.0.OR.(PAR(4).NE.0.AND.PAR(4).NE.180))THEN | |
771 | ISHAPE=99 | |
772 | SPI1(1)=-COS((90-PAR(3))*DEGRAD) | |
773 | SPI1(2)=0 | |
774 | SPI1(3)=-COS(PAR(3)*DEGRAD) | |
775 | SPI1(4)=0 | |
776 | SPI2(1)=-COS((90-PAR(4))*DEGRAD) | |
777 | SPI2(2)=0 | |
778 | SPI2(3)=-COS(PAR(4)*DEGRAD) | |
779 | SPI2(4)=0 | |
780 | ISP1=JCGOBJ+4000 | |
781 | CALL CGSLIC(Q(ICPOIN),SPI1,4000,Q(ISP1)) | |
782 | ISP2=JCGOBJ+8000 | |
783 | CALL CGSLIC(Q(ISP1),SPI2,4000,Q(ISP2)) | |
784 | ICPOIN=ISP2 | |
785 | CALL CGCEV(1,Q(ICPOIN)) | |
786 | ENDIF | |
787 | DO 140 J=1,3 | |
788 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
789 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
790 | T(J,3)=GRMAT(3*J,NLEVEL) | |
791 | 140 CONTINUE | |
792 | CALL CGAFFI(T,Q(ICPOIN)) | |
793 | XV=GTRAN(1,NLEVEL) | |
794 | YV=GTRAN(2,NLEVEL) | |
795 | ZV=GTRAN(3,NLEVEL) | |
796 | CALL CGSHIF(XV,YV,ZV,Q(ICPOIN)) | |
797 | ***SG | |
798 | * Shifting object | |
799 | IF(KSHIFT.GT.0)THEN | |
800 | CALL GDSHIF(IVOLNA,ICPOIN) | |
801 | ENDIF | |
802 | * | |
803 | IF(GBOOM.NE.0)THEN | |
804 | CALL GDBOMB(ICPOIN,ISHAPE) | |
805 | IF(ITSTCU.EQ.0)GOTO 999 | |
806 | ENDIF | |
807 | * | |
808 | * | |
809 | * Hidden Volume Removal: | |
810 | * Computing closed volumes visibility and skipping | |
811 | * the unvisible ones; a great increase in speed | |
812 | * and a great reduction in n. of words used are obtained | |
813 | * in this way. | |
814 | * | |
815 | CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX) | |
816 | IF(ISUBLI.EQ.1)THEN | |
817 | AA1=RRMIN(1)-S1 | |
818 | AA2=RRMIN(2)-S2 | |
819 | AA3=RRMIN(3)-S3 | |
820 | BB1=RRMAX(1)-SS1 | |
821 | BB2=RRMAX(2)-SS2 | |
822 | BB3=RRMAX(3)-SS3 | |
823 | IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND. BB1.LT. | |
824 | + -0.001.AND.BB2.LT.-0.001.AND.BB3.LT.-0.001)THEN | |
825 | IF(ISHAPE.NE.99)THEN | |
826 | IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN | |
827 | ITSTCU=0 | |
828 | NCGVOL=NCGVOL-NWS | |
829 | GOTO 999 | |
830 | ENDIF | |
831 | ENDIF | |
832 | ENDIF | |
833 | ENDIF | |
834 | IF(IPORLI.EQ.1)THEN | |
835 | S1=RRMIN(1) | |
836 | S2=RRMIN(2) | |
837 | S3=RRMIN(3) | |
838 | SS1=RRMAX(1) | |
839 | SS2=RRMAX(2) | |
840 | SS3=RRMAX(3) | |
841 | SRAGMX=R | |
842 | SRAGMN=0. | |
843 | RAINT1=0. | |
844 | RAINT2=0. | |
845 | IPORNT=1 | |
846 | PORMAR(1)=R | |
847 | PORMIR(1)=0. | |
848 | ENDIF | |
849 | * Create clipping objects | |
850 | IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE) | |
851 | * Perspective view | |
852 | IF (IPRJ.EQ.IPERS) THEN | |
853 | CALL CGPERS(Q(ICPOIN)) | |
854 | ENDIF | |
855 | * Inserting objects in Hide + Wire structures | |
856 | CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE) | |
857 | GOTO 999 | |
858 | ***SG | |
859 | * | |
860 | 150 CONTINUE | |
861 | C | |
862 | C PGON ----> call CGZREV | |
863 | C | |
864 | NTVOL=NZ-1 | |
865 | ANG1=PHIMIN | |
866 | ANG2=PHIMAX | |
867 | **SG | |
868 | AANG=ABS(ANG2-ANG1) | |
869 | AZLAT=AANG*APPROS | |
870 | ZLAT=AZLAT/360 | |
871 | NANG=ZLAT | |
872 | IF(NANG.EQ.0)NANG=1 | |
873 | AZ=ZLAT-NANG | |
874 | IF(AZ.GT..5)NANG=NANG+1 | |
875 | IF(NDIVAN.LT.NANG)THEN | |
876 | NANG=NDIVAN | |
877 | * WRITE(CHMAIL,10400)NANG,NAMES(NLEVEL) | |
878 | * CALL GMAIL(0,0) | |
879 | ENDIF | |
880 | AATMAX=NANG*360./AANG | |
881 | LATMAX=AATMAX | |
882 | ALA=AATMAX-LATMAX | |
883 | IF(ALA.GT..5)LATMAX=LATMAX+1 | |
884 | **SG | |
885 | AFINV=1./COS(PI/LATMAX) | |
886 | FINV=ABS(AFINV) | |
887 | JSURZ=1 | |
888 | ZR(1)=PAR(5) | |
889 | RMIR(1)=PAR(6)*FINV | |
890 | RMAR(1)=PAR(7)*FINV | |
891 | *SG | |
892 | RMAR(1)=RMAR(1)+.001 | |
893 | *SG | |
894 | DO 160 I=1,NTVOL | |
895 | * ZA=PAR(5+3*(I-1)) | |
896 | ZB=PAR(5+3*I) | |
897 | **SG | |
898 | ZB=ZB+.001 | |
899 | ********* DIFZ=ABS(ZB-ZA) | |
900 | ********* IF(DIFZ.LT.0.001)GOTO 220 | |
901 | **SG | |
902 | JSURZ=JSURZ+1 | |
903 | ZR(JSURZ)=ZB | |
904 | RMIR(JSURZ)=PAR(6+3*I)*FINV | |
905 | RMAR(JSURZ)=PAR(7+3*I)*FINV | |
906 | **SG | |
907 | RMAR(JSURZ)=RMAR(JSURZ)+.001 | |
908 | * | |
909 | 160 CONTINUE | |
910 | * | |
911 | * Checking if all Inner Radii are 0. ==> 'Closed' Volume | |
912 | * | |
913 | * NRAD=NTVOL+1 | |
914 | * DO 230 I=1,NRAD | |
915 | * IF(RMIR(I).GT.0.00001)GOTO 240 | |
916 | * 230 CONTINUE | |
917 | * IVCLOS=1 | |
918 | * 240 CONTINUE | |
919 | * | |
920 | * Size evaluation | |
921 | IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN | |
922 | NCGVOL=NCGVOL+NWREV*(NANG+1)*NTVOL | |
923 | GOTO 999 | |
924 | ENDIF | |
925 | IF(IPORLI.EQ.1)THEN | |
926 | SRAGMN=10000. | |
927 | RAINT1=10000. | |
928 | ENDIF | |
929 | * | |
930 | DO 220 IVOL=1,NTVOL | |
931 | ISG=ISG+1 | |
932 | IVCLOS=1 | |
933 | IF((RMIR(IVOL).GT.0.00001).OR.(RMIR(IVOL+1).GT. | |
934 | + 0.00001))IVCLOS=0 | |
935 | XZ(1,1)=RMIR(IVOL) | |
936 | XZ(2,1)=ZR(IVOL) | |
937 | XZ(1,2)=RMAR(IVOL) | |
938 | XZ(2,2)=ZR(IVOL) | |
939 | XZ(1,3)=RMAR(IVOL+1) | |
940 | XZ(2,3)=ZR(IVOL+1) | |
941 | XZ(1,4)=RMIR(IVOL+1) | |
942 | XZ(2,4)=ZR(IVOL+1) | |
943 | ZR(IVOL+1)=ZR(IVOL+1)+.001 | |
944 | ICPOIN=JCGOBJ+1 | |
945 | * Creating object | |
946 | **SG | |
947 | CALL CGZREV(XZ,ANG1,ANG2,NANG,4000,Q(ICPOIN)) | |
948 | DO 170 J=1,3 | |
949 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
950 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
951 | T(J,3)=GRMAT(3*J,NLEVEL) | |
952 | 170 CONTINUE | |
953 | CALL CGRIFL(T,Q(ICPOIN)) | |
954 | CGERR=Q(ICPOIN) | |
955 | IF(CGERR.LE.0)THEN | |
956 | CALL GDCGER(CGERR) | |
957 | IF(KCGST.EQ.-2) GOTO 999 | |
958 | IF(KCGST.EQ.-3) THEN | |
959 | KCGST=0 | |
960 | WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL) | |
961 | CALL GMAIL(0,0) | |
962 | WRITE(CHMAIL,10400)(PAR(I),I=1,4) | |
963 | CALL GMAIL(0,0) | |
964 | DO 180 J=1,NZ | |
965 | ZPR=PAR(5+(J-1)*3) | |
966 | RMIPR=PAR(6+(J-1)*3) | |
967 | RMAPR=PAR(7+(J-1)*3) | |
968 | WRITE(CHMAIL,10600)J,ZPR,RMIPR,RMAPR | |
969 | CALL GMAIL(0,0) | |
970 | 180 CONTINUE | |
971 | GOTO 999 | |
972 | ENDIF | |
973 | ENDIF | |
974 | CALL CGCEV(1,Q(ICPOIN)) | |
975 | DO 190 J=1,3 | |
976 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
977 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
978 | T(J,3)=GRMAT(3*J,NLEVEL) | |
979 | 190 CONTINUE | |
980 | CALL CGAFFI(T,Q(ICPOIN)) | |
981 | XV=GTRAN(1,NLEVEL) | |
982 | YV=GTRAN(2,NLEVEL) | |
983 | ZV=GTRAN(3,NLEVEL) | |
984 | CALL CGSHIF(XV,YV,ZV,Q(ICPOIN)) | |
985 | ***SG | |
986 | * Shifting object | |
987 | IF(KSHIFT.GT.0)THEN | |
988 | CALL GDSHIF(IVOLNA,ICPOIN) | |
989 | ENDIF | |
990 | * | |
991 | IF(GBOOM.NE.0)THEN | |
992 | CALL GDBOMB(ICPOIN,ISHAPE) | |
993 | IF(ITSTCU.EQ.0)GOTO 220 | |
994 | ENDIF | |
995 | * | |
996 | * | |
997 | * Hidden Volume Removal: | |
998 | * Computing closed volumes visibility and skipping | |
999 | * the unvisible ones; a great increase in speed | |
1000 | * and a great reduction in n. of words used are obtained | |
1001 | * in this way. | |
1002 | * | |
1003 | CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX) | |
1004 | IF(ISUBLI.EQ.1)THEN | |
1005 | AA1=RRMIN(1)-S1 | |
1006 | AA2=RRMIN(2)-S2 | |
1007 | AA3=RRMIN(3)-S3 | |
1008 | BB1=RRMAX(1)-SS1 | |
1009 | BB2=RRMAX(2)-SS2 | |
1010 | BB3=RRMAX(3)-SS3 | |
1011 | IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND. | |
1012 | + BB1.LT.-0.001.AND.BB2.LT.-0.001.AND.BB3.LT.-0.001)THEN | |
1013 | AMARMA(IVOL) =MIN(RMAR(IVOL),RMAR(IVOL+1)) | |
1014 | AMARMA(IVOL+1)=MAX(RMAR(IVOL),RMAR(IVOL+1)) | |
1015 | AMIRMA(IVOL) =MIN(RMIR(IVOL),RMIR(IVOL+1)) | |
1016 | AMIRMA(IVOL+1)=MAX(RMIR(IVOL),RMIR(IVOL+1)) | |
1017 | RMAX1=AMARMA(IVOL) | |
1018 | RMAX2=AMARMA(IVOL+1) | |
1019 | RMIN1=AMIRMA(IVOL) | |
1020 | RMIN2=AMIRMA(IVOL+1) | |
1021 | IF(SRAGMX.NE.0.)THEN | |
1022 | DO 200 ITER=1,IPORNT | |
1023 | IF(RMAX1.EQ.PORMAR(ITER).OR.RMAX2.EQ.PORMAR(ITER)) | |
1024 | + GOTO 210 | |
1025 | IF(RMIN1.EQ.PORMIR(ITER).OR.RMIN2.EQ.PORMIR(ITER)) | |
1026 | + THEN | |
1027 | IF(PORMIR(ITER).NE.0.)GOTO 210 | |
1028 | ENDIF | |
1029 | 200 CONTINUE | |
1030 | ENDIF | |
1031 | IF(ISCOP.EQ.1)THEN | |
1032 | IF((AMARMA(IVOL+1).GE.SRAGMX.OR.AMARMA(IVOL) .GT.SRAG | |
1033 | + MN))GOTO 210 | |
1034 | IF((AMIRMA(IVOL+1).LE.RAINT2.OR.AMIRMA(IVOL) | |
1035 | + .LE.RAINT1).AND.(RAINT2.NE.0))GOTO 210 | |
1036 | ENDIF | |
1037 | IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN | |
1038 | ITSTCU=0 | |
1039 | NCGVOL=NCGVOL-NWPROD | |
1040 | GOTO 220 | |
1041 | ENDIF | |
1042 | ENDIF | |
1043 | ENDIF | |
1044 | IF(IPORLI.EQ.1)THEN | |
1045 | IF(RRMIN(1).LT.S1)S1=RRMIN(1) | |
1046 | IF(RRMIN(2).LT.S2)S2=RRMIN(2) | |
1047 | IF(RRMIN(3).LT.S3)S3=RRMIN(3) | |
1048 | IF(RRMAX(1).GT.SS1)SS1=RRMAX(1) | |
1049 | IF(RRMAX(2).GT.SS2)SS2=RRMAX(2) | |
1050 | IF(RRMAX(3).GT.SS3)SS3=RRMAX(3) | |
1051 | IF(RMAR(IVOL).GT.SRAGMX)SRAGMX=RMAR(IVOL) | |
1052 | IF(RMAR(IVOL).LT.SRAGMN)SRAGMN=RMAR(IVOL) | |
1053 | IF(RMAR(IVOL+1).GT.SRAGMX)SRAGMX=RMAR(IVOL+1) | |
1054 | IF(RMAR(IVOL+1).LT.SRAGMN)SRAGMN=RMAR(IVOL+1) | |
1055 | IF(RMIR(IVOL).GT.RAINT2)RAINT2=RMIR(IVOL) | |
1056 | IF(RMIR(IVOL).LT.RAINT1)RAINT1=RMIR(IVOL) | |
1057 | IF(RMIR(IVOL+1).GT.RAINT2)RAINT2=RMIR(IVOL+1) | |
1058 | IF(RMIR(IVOL+1).LT.RAINT1)RAINT1=RMIR(IVOL+1) | |
1059 | PORMAR(IVOL)=RMAR(IVOL) | |
1060 | PORMIR(IVOL)=RMIR(IVOL) | |
1061 | IPORNT =NTVOL | |
1062 | ENDIF | |
1063 | 210 CONTINUE | |
1064 | * Create clipping objects | |
1065 | IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE) | |
1066 | * Perspective view | |
1067 | IF (IPRJ.EQ.IPERS) THEN | |
1068 | CALL CGPERS(Q(ICPOIN)) | |
1069 | ENDIF | |
1070 | * Inserting objects in Hide + Wire structures | |
1071 | CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE) | |
1072 | ***SG | |
1073 | 220 CONTINUE | |
1074 | GOTO 999 | |
1075 | * | |
1076 | 230 CONTINUE | |
1077 | C | |
1078 | C PCON ----> call CGZREV | |
1079 | C | |
1080 | NTVOL=NZ-1 | |
1081 | ANG1=PHIMIN | |
1082 | ANG2=PHIMAX | |
1083 | **SG | |
1084 | AANG=ABS(ANG2-ANG1) | |
1085 | AZLAT=AANG*APPROS | |
1086 | ZLAT=AZLAT/360 | |
1087 | NANG=ZLAT | |
1088 | IF(NANG.EQ.0)NANG=1 | |
1089 | AZ=ZLAT-NANG | |
1090 | IF(AZ.GT..5)NANG=NANG+1 | |
1091 | **SG | |
1092 | AFINV=1./COS(PI/APPROS) | |
1093 | FINV=ABS(AFINV) | |
1094 | JSURZ=1 | |
1095 | ZR(1)=PAR(4) | |
1096 | RMIR(1)=PAR(5)*FINV | |
1097 | RMAR(1)=PAR(6)*FINV | |
1098 | *SG | |
1099 | RMAR(1)=RMAR(1)+.1 | |
1100 | *SG | |
1101 | DO 240 I=1,NTVOL | |
1102 | * ZA=PAR(4+3*(I-1)) | |
1103 | ZB=PAR(4+3*I) | |
1104 | **SG | |
1105 | ZB=ZB+.001 | |
1106 | ******** DIFZ=ABS(ZB-ZA) | |
1107 | ******** IF(DIFZ.LT.0.001)GOTO 290 | |
1108 | **SG | |
1109 | JSURZ=JSURZ+1 | |
1110 | ZR(JSURZ)=ZB | |
1111 | RMIR(JSURZ)=PAR(5+3*I)*FINV | |
1112 | RMAR(JSURZ)=PAR(6+3*I)*FINV | |
1113 | **SG | |
1114 | RMAR(JSURZ)=RMAR(JSURZ)+.1 | |
1115 | * | |
1116 | 240 CONTINUE | |
1117 | * | |
1118 | * Checking if all Inner Radii are 0. ==> 'Closed' Volume | |
1119 | * | |
1120 | * NRAD=NTVOL+1 | |
1121 | * DO 300 I=1,NRAD | |
1122 | * IF(RMIR(I).GT.0.00001)GOTO 310 | |
1123 | * 300 CONTINUE | |
1124 | * IVCLOS=1 | |
1125 | * 310 CONTINUE | |
1126 | * | |
1127 | * | |
1128 | * Size evaluation | |
1129 | IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN | |
1130 | NCGVOL=NCGVOL+NWREV*(NANG+1)*NTVOL | |
1131 | GOTO 999 | |
1132 | ENDIF | |
1133 | IF(IPORLI.EQ.1)THEN | |
1134 | SRAGMN=10000. | |
1135 | RAINT1=10000. | |
1136 | ENDIF | |
1137 | * | |
1138 | DO 300 IVOL=1,NTVOL | |
1139 | ISG=ISG+1 | |
1140 | IVCLOS=1 | |
1141 | IF((RMIR(IVOL).GT.0.00001).OR.(RMIR(IVOL+1).GT. | |
1142 | + 0.00001))IVCLOS=0 | |
1143 | XZ(1,1)=RMIR(IVOL) | |
1144 | XZ(2,1)=ZR(IVOL) | |
1145 | XZ(1,2)=RMAR(IVOL) | |
1146 | XZ(2,2)=ZR(IVOL) | |
1147 | XZ(1,3)=RMAR(IVOL+1) | |
1148 | XZ(2,3)=ZR(IVOL+1) | |
1149 | XZ(1,4)=RMIR(IVOL+1) | |
1150 | XZ(2,4)=ZR(IVOL+1) | |
1151 | ZR(IVOL+1)=ZR(IVOL+1)+.1 | |
1152 | ICPOIN=JCGOBJ+1 | |
1153 | * Creating object | |
1154 | **SG | |
1155 | CALL CGZREV(XZ,ANG1,ANG2,NANG,4000,Q(ICPOIN)) | |
1156 | DO 250 J=1,3 | |
1157 | T(J,1)=GRMAT(3*J-2,NLEVEL) | |
1158 | T(J,2)=GRMAT(3*J-1,NLEVEL) | |
1159 | T(J,3)=GRMAT(3*J,NLEVEL) | |
1160 | 250 CONTINUE | |
1161 | CALL CGRIFL(T,Q(ICPOIN)) | |
1162 | CALL CGCEV(-1,Q(ICPOIN)) | |
1163 | CGERR=Q(ICPOIN) | |
1164 | IF(CGERR.LE.0)THEN | |
1165 | CALL GDCGER(CGERR) | |
1166 | IF(KCGST.EQ.-2) GOTO 999 | |
1167 | IF(KCGST.EQ.-3) THEN | |
1168 | KCGST=0 | |
1169 | WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL) | |
1170 | CALL GMAIL(0,0) | |
1171 | WRITE(CHMAIL,10500)(PAR(I),I=1,3) | |
1172 | CALL GMAIL(0,0) | |
1173 | DO 260 J=1,NZ | |
1174 | ZPR=PAR(4+(J-1)*3) | |
1175 | RMIPR=PAR(5+(J-1)*3) | |
1176 | RMAPR=PAR(6+(J-1)*3) | |
1177 | WRITE(CHMAIL,10600)J,ZPR,RMIPR,RMAPR | |
1178 | CALL GMAIL(0,0) | |
1179 | 260 CONTINUE | |
1180 | GOTO 999 | |
1181 | ENDIF | |
1182 | ENDIF | |
1183 | CALL CGCEV(1,Q(ICPOIN)) | |
1184 | DO 270 J=1,3 | |
1185 | T(1,J)=GRMAT(3*J-2,NLEVEL) | |
1186 | T(2,J)=GRMAT(3*J-1,NLEVEL) | |
1187 | T(3,J)=GRMAT(3*J,NLEVEL) | |
1188 | T(4,J)=0. | |
1189 | 270 CONTINUE | |
1190 | CALL CGAFFI(T,Q(ICPOIN)) | |
1191 | XV=GTRAN(1,NLEVEL) | |
1192 | YV=GTRAN(2,NLEVEL) | |
1193 | ZV=GTRAN(3,NLEVEL) | |
1194 | CALL CGSHIF(XV,YV,ZV,Q(ICPOIN)) | |
1195 | * | |
1196 | ***SG | |
1197 | * Shifting object | |
1198 | IF(KSHIFT.GT.0)THEN | |
1199 | CALL GDSHIF(IVOLNA,ICPOIN) | |
1200 | ENDIF | |
1201 | * | |
1202 | IF(GBOOM.NE.0)THEN | |
1203 | CALL GDBOMB(ICPOIN,ISHAPE) | |
1204 | IF(ITSTCU.EQ.0)GOTO 300 | |
1205 | ENDIF | |
1206 | * | |
1207 | * | |
1208 | * Hidden Volume Removal: | |
1209 | * Computing closed volumes visibility and skipping | |
1210 | * the unvisible ones; a great increase in speed | |
1211 | * and a great reduction in n. of words used are obtained | |
1212 | * in this way. | |
1213 | * | |
1214 | CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX) | |
1215 | IF(ISUBLI.EQ.1)THEN | |
1216 | AA1=RRMIN(1)-S1 | |
1217 | AA2=RRMIN(2)-S2 | |
1218 | AA3=RRMIN(3)-S3 | |
1219 | BB1=RRMAX(1)-SS1 | |
1220 | BB2=RRMAX(2)-SS2 | |
1221 | BB3=RRMAX(3)-SS3 | |
1222 | IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND. | |
1223 | + BB1.LT.-0.001.AND.BB2.LT.-0.001.AND.BB3.LT.-0.001)THEN | |
1224 | AMARMA(IVOL) =MIN(RMAR(IVOL),RMAR(IVOL+1)) | |
1225 | AMARMA(IVOL+1)=MAX(RMAR(IVOL),RMAR(IVOL+1)) | |
1226 | AMIRMA(IVOL) =MIN(RMIR(IVOL),RMIR(IVOL+1)) | |
1227 | AMIRMA(IVOL+1)=MAX(RMIR(IVOL),RMIR(IVOL+1)) | |
1228 | RMAX1=AMARMA(IVOL) | |
1229 | RMAX2=AMARMA(IVOL+1) | |
1230 | RMIN1=AMIRMA(IVOL) | |
1231 | RMIN2=AMIRMA(IVOL+1) | |
1232 | IF(SRAGMX.NE.0.)THEN | |
1233 | DO 280 ITER=1,IPORNT | |
1234 | IF(RMAX1.EQ.PORMAR(ITER).OR.RMAX2.EQ.PORMAR(ITER)) | |
1235 | + GOTO 290 | |
1236 | IF(RMIN1.EQ.PORMIR(ITER).OR.RMIN2.EQ.PORMIR(ITER)) | |
1237 | + THEN | |
1238 | IF(PORMIR(ITER).NE.0)GOTO 290 | |
1239 | ENDIF | |
1240 | 280 CONTINUE | |
1241 | ENDIF | |
1242 | IF(ISCOP.EQ.1)THEN | |
1243 | IF((AMARMA(IVOL+1).GE.SRAGMX.OR.AMARMA(IVOL) .GE.SRAG | |
1244 | + MN))GOTO 290 | |
1245 | IF((AMIRMA(IVOL+1).LE.RAINT2.AND.AMIRMA(IVOL) | |
1246 | + .LE.RAINT1).AND.(RAINT2.NE.0))GOTO 290 | |
1247 | ENDIF | |
1248 | IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN | |
1249 | NCGVOL=NCGVOL-NWPROD | |
1250 | ITSTCU=0 | |
1251 | GOTO 300 | |
1252 | ENDIF | |
1253 | ENDIF | |
1254 | ENDIF | |
1255 | IF(IPORLI.EQ.1)THEN | |
1256 | IF(RRMIN(1).LT.S1)S1=RRMIN(1) | |
1257 | IF(RRMIN(2).LT.S2)S2=RRMIN(2) | |
1258 | IF(RRMIN(3).LT.S3)S3=RRMIN(3) | |
1259 | IF(RRMAX(1).GT.SS1)SS1=RRMAX(1) | |
1260 | IF(RRMAX(2).GT.SS2)SS2=RRMAX(2) | |
1261 | IF(RRMAX(3).GT.SS3)SS3=RRMAX(3) | |
1262 | IF(RMAR(IVOL).GT.SRAGMX)SRAGMX=RMAR(IVOL) | |
1263 | IF(RMAR(IVOL).LT.SRAGMN)SRAGMN=RMAR(IVOL) | |
1264 | IF(RMAR(IVOL+1).GT.SRAGMX)SRAGMX=RMAR(IVOL+1) | |
1265 | IF(RMAR(IVOL+1).LT.SRAGMN)SRAGMN=RMAR(IVOL+1) | |
1266 | IF(RMIR(IVOL).GT.RAINT2)RAINT2=RMIR(IVOL) | |
1267 | IF(RMIR(IVOL).LT.RAINT1)RAINT1=RMIR(IVOL) | |
1268 | IF(RMIR(IVOL+1).GT.RAINT2)RAINT2=RMIR(IVOL+1) | |
1269 | IF(RMIR(IVOL+1).LT.RAINT1)RAINT1=RMIR(IVOL+1) | |
1270 | PORMAR(IVOL)=RMAR(IVOL) | |
1271 | PORMIR(IVOL)=RMIR(IVOL) | |
1272 | IPORNT =NTVOL | |
1273 | ENDIF | |
1274 | 290 CONTINUE | |
1275 | * Create clipping objects | |
1276 | IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE) | |
1277 | * Perspective view | |
1278 | IF (IPRJ.EQ.IPERS) THEN | |
1279 | CALL CGPERS(Q(ICPOIN)) | |
1280 | ENDIF | |
1281 | * Inserting object in Hide + Wire structures | |
1282 | CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE) | |
1283 | 300 CONTINUE | |
1284 | GOTO 999 | |
1285 | * | |
1286 | ***SG | |
1287 | * | |
1288 | 10000 FORMAT(' Check Parameters of Shape ',I3,' in volume ',A4) | |
1289 | 10100 FORMAT(' Warning >>> RMIN1 greater than RMAX1 for shape ' | |
1290 | + ,I3,' in volume ',A4) | |
1291 | 10200 FORMAT(' Warning >>> RMIN2 greater than RMAX2 for shape ' | |
1292 | + ,I3,' in volume ',A4) | |
1293 | 10300 FORMAT(' Warning >>> PHIMIN greater than PHIMAX for shape' | |
1294 | + ,I3,' in volume ',A4) | |
1295 | *10400 FORMAT(' PGON with NPDV = ',I5,' in volume ',A4,' NPDV very | |
1296 | * + large . It must be < 30 . Volume will not be drawn. ') | |
1297 | 10400 FORMAT(' PHI1 = ',F8.3,' DPHI = ',F8.3,' NPDV = ',F8.1 | |
1298 | + ,' NZ = ',F8.1) | |
1299 | 10500 FORMAT(' PHI1 = ',F8.3,' DPHI = ',F8.3,' NZ = ',F8.1) | |
1300 | 10600 FORMAT(' J = ',I5,' Z = ',F8.3,' RMIN = ',F8.3 | |
1301 | + ,' RMAX = ',F8.3) | |
1302 | *10800 FORMAT(' Please, increase size of Zebra store by ',I10, | |
1303 | * + ' words') | |
1304 | * | |
1305 | ***SG | |
1306 | 999 END |