home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / FORTRAN / SUPERT87.ZIP / MASKEF.FOR < prev    next >
Encoding:
Text File  |  1986-12-15  |  9.8 KB  |  134 lines

  1.  
  2.       SUBROUTINE MASKEF(X,Y,XQ,YQ,PHCRD)                                2417
  3.  
  4. c    include 'tcommon.for'
  5.     %include tcommon.for
  6.  
  7.       DIMENSION ATENF(5)                                                2437
  8.       DATA ATENF/100.,30.,25.,50.,500./                                 2438
  9. C     ...OBJECT AT XQ,YQ IS PHASING OBJECT AT X,Y.                      2439
  10. C     ...PHCRD WILL BE % REDUCTION DUE TO MASKING.                      2440
  11. C     ...INTERVENING OBJECTS AND THEIR RELATIVE MASKING EFFECTS:        2441
  12. C     ...  *   100                                                      2442
  13. C     ...  K,R  30                                                      2443
  14. C     ...  G    25                                                      2444
  15. C     ...  HOLE500                                                      2445
  16.       PHCRD=0.                                                          2446
  17.       LNDX=1                                                            2447
  18.       SUMAX=0.                                                          2448
  19.       SUMACT=0.                                                         2449
  20.       IF(NSTARS.EQ.0)GO TO 100                                          2450
  21.       DO 50 I=1,NSTARS                                                  2451
  22.       IF(STARS(I,1).EQ.0)GO TO 50                                       2452
  23.       CALL GETBRG(A1,XQ,STARS(I,1),YQ,STARS(I,2),VPX,VPY)               2453
  24.       CALL GETBRG(A2,STARS(I,1),X,STARS(I,2),Y,VPX,VPY)                 2454
  25.       D1=VPX*VPX+VPY*VPY                                                2455
  26.       D2=0.                                                             2456
  27.       IF(A1.NE.0.)D2=360.-A1                                            2457
  28.       A2=A2+D2                                                          2458
  29.       IF(A2.GE.360.)A2=A2-360.                                          2459
  30.       IF(A2.GE.45..AND.A2.LE.315.)GO TO 50                              2460
  31.       SUMAX=SUMAX+ATENF(LNDX)                                           2461
  32.       D2=SIND(A2)                                                       2462
  33.       D2=1.-D2*D2                                                       2463
  34.       D2=D2/2.+RAD(I)/(D1+D1)                                           2464
  35.       IF(D2.GT.1.)D2=1.                                                 2465
  36.       SUMACT=SUMACT+D2*ATENF(LNDX)                                      2466
  37. 50    CONTINUE                                                          2467
  38. 100   IF(KLNGNS.EQ.0)GO TO 200                                          2468
  39.       LNDX=2                                                            2469
  40.       DO 150 I=1,KLNGNS                                                 2470
  41.       IF(XKL(I,1).EQ.0)GO TO 150                                        2471
  42.       IF(XKL(I,1).EQ.X.AND.XKL(I,2).EQ.Y)GO TO 150                      2472
  43.       IF(XKL(I,1).EQ.XQ.AND.XKL(I,2).EQ.YQ)GO TO 150                    2473
  44.       CALL GETBRG(A1,XQ,XKL(I,1),YQ,XKL(I,2),VPX,VPY)                   2474
  45.       CALL GETBRG(A2,XKL(I,1),X,XKL(I,2),Y,VPX,VPY)                     2475
  46.       D1=VPX*VPX+VPY*VPY                                                2476
  47.       D2=0.                                                             2477
  48.       IF(A1.NE.0.)D2=360.-A1                                            2478
  49.       A2=A2+D2                                                          2479
  50.       IF(A2.GE.360.)A2=A2-360.                                          2480
  51.       IF(A2.GE.45..AND.A2.LE.315.)GO TO 150                             2481
  52.       SUMAX=SUMAX+ATENF(LNDX)                                           2482
  53.       D2=SIND(A2)                                                       2483
  54.       D2=1.-D2*D2                                                       2484
  55.       D2=D2/2.+RADKK/(D1+D1)                                            2485
  56.       IF(D2.GT.1.)D2=1.                                                 2486
  57.       SUMACT=SUMACT+D2*ATENF(LNDX)                                      2487
  58. 150   CONTINUE                                                          2488
  59. 200   IF(NROM.EQ.0)GO TO 300                                            2489
  60.       LNDX=2                                                            2490
  61.       DO 250 I=1,NROM                                                   2491
  62.       IF(XROM(I,1).EQ.0)GO TO 250                                       2492
  63.       IF(XROM(I,1).EQ.X.AND.XROM(I,2).EQ.Y)GO TO 250                    2493
  64.       CALL GETBRG(A1,XQ,XROM(I,1),YQ,XROM(I,2),VPX,VPY)                 2494
  65.       CALL GETBRG(A2,XROM(I,1),X,XROM(I,2),Y,VPX,VPY)                   2495
  66.       D1=VPX*VPX+VPY*VPY                                                2496
  67.       D2=0.                                                             2497
  68.       IF(A1.NE.0.)D2=360.-A1                                            2498
  69.       A2=A2+D2                                                          2499
  70.       IF(A2.GE.360.)A2=A2-360.                                          2500
  71.       IF(A2.GE.45..AND.A2.LE.315.)GO TO 250                             2501
  72.       SUMAX=SUMAX+ATENF(LNDX)                                           2502
  73.       D2=SIND(A2)                                                       2503
  74.       D2=1.-D2*D2                                                       2504
  75.       D2=D2/2.+RADKK/(D1+D1)                                            2505
  76.       IF(D2.GT.1.)D2=1.                                                 2506
  77.       SUMACT=SUMACT+D2*ATENF(LNDX)                                      2507
  78. 250   CONTINUE                                                          2508
  79. 300   IF(IGH.EQ.0)GO TO 400                                             2509
  80.       IF(GHOST(1).EQ.XQ.AND.GHOST(2).EQ.YQ)GO TO 400                    2510
  81.       LNDX=3                                                            2511
  82.       CALL GETBRG(A1,XQ,GHOST(1),YQ,GHOST(2),VPX,VPY)                   2512
  83.       CALL GETBRG(A2,GHOST(1),X,GHOST(2),Y,VPX,VPY)                     2513
  84.       D1=VPX*VPX+VPY*VPY                                                2514
  85.       D2=0.                                                             2515
  86.       IF(A1.NE.0.)D2=360.-A1                                            2516
  87.       A2=A2+D2                                                          2517
  88.       IF(A2.GE.360.)A2=A2-360.                                          2518
  89.       IF(A2.GE.45..AND.A2.LE.315.)GO TO 400                             2519
  90.       SUMAX=SUMAX+ATENF(LNDX)                                           2520
  91.       D2=SIND(A2)                                                       2521
  92.       D2=1.-D2*D2                                                       2522
  93.       D2=D2/2.+RADEG/(D1+D1)                                            2523
  94.       IF(D2.GT.1.)D2=1.                                                 2524
  95.       SUMACT=SUMACT+D2*ATENF(LNDX)                                      2525
  96. 400   IF (IBASE.EQ.0)GO TO 500                                          2526
  97.       LNDX=4                                                            2527
  98.       CALL GETBRG(A1,XQ,BASE(1),YQ,BASE(2),VPX,VPY)                     2528
  99.       CALL GETBRG(A2,BASE(1),X,BASE(2),Y,VPX,VPY)                       2529
  100.       D1=VPX*VPX+VPY*VPY                                                2530
  101.       D2=0.                                                             2531
  102.       IF(A1.NE.0.)D2=360.-A1                                            2532
  103.       A2=A2+D2                                                          2533
  104.       IF(A2.GE.360.)A2=A2-360.                                          2534
  105.       IF(A2.GE.45..AND.A2.LE.315.)GO TO 500                             2535
  106.       SUMAX=SUMAX+ATENF(LNDX)                                           2536
  107.       D2=SIND(A2)                                                       2537
  108.       D2=1.-D2*D2                                                       2538
  109.       D2=D2/2.+RADEB/(D1+D1)                                            2539
  110.       IF(D2.GT.1.)D2=1.                                                 2540
  111.       SUMACT=SUMACT+D2*ATENF(LNDX)                                      2541
  112. 500   IF(IHOLE.EQ.0)GO TO 999                                           2542
  113.       LNDX=5                                                            2543
  114.       XX=IHOLE                                                          2544
  115.       YY=JHOLE                                                          2545
  116.       CALL GETBRG(A1,XQ,XX,YQ,YY,VPX,VPY)                               2546
  117.       CALL GETBRG(A2,XX,X,YY,Y,VPX,VPY)                                 2547
  118.       D1=VPX*VPX+VPY*VPY                                                2548
  119.       D2=0.                                                             2549
  120.       IF(A1.NE.0.)D2=360.-A1                                            2550
  121.       A2=A2+D2                                                          2551
  122.       IF(A2.GE.360.)A2=A2-360.                                          2552
  123.       IF(A2.GE.45..AND.A2.LE.315.)GO TO 999                             2553
  124.       SUMAX=SUMAX+ATENF(LNDX)                                           2554
  125.       D2=SIND(A2)                                                       2555
  126.       D2=1.-D2*D2                                                       2556
  127.       D2=D2/2.+HOLRAD/(D1)                                              2557
  128.       IF(D2.GT.1.)D2=1.                                                 2558
  129.       SUMACT=SUMACT+D2*ATENF(LNDX)                                      2559
  130. 999   IF(SUMAX.EQ.0.)GO TO 1000                                         2560
  131.       PHCRD=SUMACT/SUMAX                                                2561
  132. 1000  RETURN                                                            2562
  133.       END                                                               2563
  134.