NASA-CR- 178099 

NASA Contractor Report 178099 19880014547 

MANUAL FOR OBSCURATION CODE WITH 

SPACE STATION APPLICATIONS , 

R. J. Marhefka and L. Takacs 

THE OHIO STATE UNIVERSITY 

ElectroScience Laboratory 

Col urnbus, Ohio 

Grant NSG- 1498 

May 1986 

-.1. - -- 

MOT TO BC TAKEN FHOM MIS noon 

UNGLEY RESEARCH CENTER 

LIBRARY, NASA 

l-!A?.!PTOtj, VIRGINIA 

information to other 

Foreign reley&&ay be made only with prior izwapgppropriate export licenses. This legend sh % I 

any reproduction of this information in whole 

Date for general release 31 9 1988 

National Aeronautics and 

Space Administration 

Langley Research Center 

Hampton, Virginia 23665 

Contents 

I Ueer'e Manual 

1 Introduction 1 

2 Method 4 

3 Principle of Operation 13 

3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 

3.2 Modeling the Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 

3.3 Running the Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 

3.4 Non-Interactive Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 

3.5 Interactive Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 

3.6 Keypad Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 

4 Non-Interactive Commands 22 

4.1 Command CC: Cone Frustum Geometry . . . . . . . . . . . . . . . . . . . 24 

4.2 Command CG: Cylinder Geometry . . . . . . . . . . . . . . . . . . . . . . 27 

4.3 Command CM: and CE: Comments. . . . . . . . . . . . . . . . . . . . . . 30 

4.4 Command EN: End Program . . . . . . . . . . . . . . . . . . . . . . . . . . 30 

4.5 Command GP: Ground Plane . . . . . . . . . . . . . . . . . . . . . . . . . 31 

4.6 Command NC: Next Set of Cylinders . . . . . . . . . . . . . . . . . . . . . 32 

4.7 Command NG: No Ground Plane . . . . . . . . . . . . . . . . . . . . . . . 32 

4.8 Command NP: Next Set of Plates . . . . . . . . . . . . . . . . . . . . . . . 32 

4.9 Command NS: Next Set of Sources . . . . . . . . . . . . . . . . . . . . . . 32 

4.10 Command NX: Next Problem . . . . . . . . . . . . . . . . . . . . . . . . . 32 

, 4.11 Command PG: Plate Geometry . . . . . . . . . . . . . . . . . . . . . . . . 33 

4.12 Command RT: Rotate-Ranslate Geometry . . . . . . . . . . . . . . . . . . 36 

4.13 Command SG: Source Geometry . . . . . . . . . . . . . . . . . . . . . . . . . 38 

4.14 Command UF: Scale Factor . . . . . . . . . . . . . . . . . . . . . . . . . . 42 

4.15 Command UN: Units of Geometry . . . . . . . . . . . . . . . . . . . . . . . 42 

4.16 Command US: Units of Source . . . . . . . . . . . . . . . . . . . . . . . . . 42 

4.17 Command VF: Far Zone Volumetric Pattern . . . . . . . . . . . . . . . . . 44 

4.18 Command XQ: Execute Code . . . . . . . . . . . . . . . . . . . . . . . . . 47 

5 Interactive Commands 48 

5.1 Overview . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . , . . . . 48 

5.2 Command Descriptions . . . . . . . . , . . . . . . . . . . . . . . . . . . . . 48 
5.2.1 EXIT ................................... 5.2.2 HELP ................................... 5.2.3 SHADOW ................................. 5.2.4 SPAWN .................................. 5.2.5 SET ANTENNALOCATION ................. 1..... 5.2.6 SET COORDINATES .......................... 5.2.7 SET FILL-CHARACTER ........................ 5.2.8 SET INPUTSET ............................ 5.2.9 SET KEYPAD-MODE .......................... 5.2.10 SET OUTPUT ............................... 5.2.11 SET PATTERN-CUT .......................... 5.2.12. SET SCALE-FACTOR ......................... 5.2.13 SET UNITS ................................ 5.2.14 SET WINDOW .............................. 5.2.15 SHOW ANTENNA-LOCATION .................... 5.2.16 SHOW COORDINATES ........................ 5.2.17 SHOW FILL-CHARACTER ....................... 5.2.18 SHOW INPUTSET ........................... 5.2.19 SHOW KEYPADMODE ........................ 5.2.20 SHOW OUTPUT ............................ 5.2.21 SHOW PATTERN-CUT ......................... 5.2.22 SHOW SCALE-FACTOR ........................ 5.2.23 SHOW UNITS .............................. 5.2.24 SHOW WINDOW ............................ 

6 Interpretation of the Output 

7 Examples 

7.1 Example 1: A Plate ............................... 7.2 Example 2: A Different Plate .......................... 7.3 Example 3: The First Plate Revisited ..................... 7.4 Example 4: A Non-Interactive Version of Example 1 ............. 7.5 Example 5: An Elliptic Cylinder ........................ 7.6 Example 6: Two Elliptic Cylinders ....................... 7.7 Example 7: A Space Station Model ...................... 7.8 Example 8: Another Look at the Space Station ............... 

References 

I1 Code Manual 

8 Introduction 

9 Code Organization 
10 Lietinga of the Code 126 

10.1 VAX/VMS Subroutines ............................. 126 

10.1.1 MAIN PROGRAM ............................ 126 

10.1.2 SUBROUTINE INIT ........................... 128 

10.1.3 SUBROUTINE INTRAC ......................... 130 

10.1.4 Interactive Service Routines ....................... 133 

10.2 Non-VAX/VMS Subroutines .......................... 146 

10.2.1 MAIN PROGRAM (non-interactive) .................. 146 

10.3 Subroutines common to both modes ...................... 148 

10.3.1 SUBROUTINE ABSCIN ........................ 148 

10.3.2 FUNCTION BABS ............................ 187 

10.3.3 BLOCK DATA .............................. 188 

10.3.4 FUNCTION BTAN2 ........................... 189 

10.3.5 SUBROUTINE CAPINT ........................ 190 

10.3.6 SUBROUTINECYLINT ........................ 192 

10.3.7 SUBROUTINE CYLROT ........................ 194 

10.3.8 SUBROUTINE DOCYLS ........................ 195 

10.3.9 SUBROUTINE DOCYL ......................... 196 

10.3.10SUBROUTINE DOPLAS ........................ 200 

10.3.11SUBROUTINE DOPLA ......................... 201 

10.3.12SUBROUTINE GEOM ......................... 203 

10.3.13SUBROUTINE INITGF ............... ; ......... 205 

10.3.14SUBROUTINE PLAINT ........................ 206 

10.3.15SUBROUTINE SCAN .......................... 208 

10.3.16FUNCTION SCANC/SPANC ...................... 210 

~O.~.~~SUBROUTI.NE WRTOUT ................ ; ..... 211 

10.3.181nclude file ................................ 213 

10.4 Non-FORTRAN VAX/VMS source files .................... 216 

10.4.1 CDU Source file ............................. 216 

10.4.2 Keypad initialization file ......................... 219 

11 VAX Implementation 221 

11.1 Assembling the Code ............................... 221 

11.2 Running the Code ................................. 222 

11.3 Modifying the code ................................. 223 

12 Non-VAX Implementation 

13 NCAR Plot Program 

iii 
List of Tables 

3.1 Table of non-interactive commands. ................... ; .. 16 

3.2 Table of interactive commands. ......................... 20 

3.3 VTlOO keypad for SHADOW interactive commands. ............. 21 
List of Figures 

Geometry showing the projection of the plate edge onto the far zone sphere. 5 

Geometry showing the projection of a cone frustum onto the far zone sphere. 7 

Intersection of observation direction vector with plate. ............ 8 

The geometry for deciding whether a ray does or does not hit the plate. .. 10 

Geometry illustrating the hit point on a cone frustum segment. ....... 11 

Definition of finite cylinder geometry composed of cone frustum segments 

with elliptic cross section. ............................. 26 

Definition of finite elliptic cylinder geometry. ................. 29 

Definition of flat plate geometry. ........................ 35 

Definition of rotate-translate coordinate system geometry. .......... 37 

Definition of source geometry for dipole antennas. .............. 40 

Definition of source geometry for aperture antennas. ............. 41 

Definition of volumetric pattern coordinate system. .............. 46 

Illustration of the Space Station ......................... 115 

Three-axis view of the Space Station as modeled by the input set. ..... 116 

NCAR plot showing the shadow map of the space stat:?n model. ...... 118 

Part I 

User's Manual 

Chapter 1 

Introduction 

When siting antennas on large structures, it is desirable to be able to quickly determine the 

clear line of sight transmission or reception paths for the antennas. If the structure under 

consideration is a space station, there will be many antennas to consider in an environment 

composed of a very large and complex array of living and working module, solar panels, 

and support structures. The antennas will potentially need to communicate with systems 

anywhere around the near zone of the structure and the complete far zone sphere. In short, 

a challenging problem. 

In order to aid the antenna design engineer in the prediction of the near and far zone 

antenna patterns, antenna to antenna coupling, and radiation hazard considerations, for 

high frequency antennas in a complex environment, a couple of user oriented computer 

codes have been developed: the NEC - Basic Scattering Code (NEC-BSC) [1,2] and the 

Aircraft Code (NEWAIR) [3]. Both codes are based on the Uniform Geometrical Theory 

of Diffraction (UTD) (41, which is a high frequency ray optical method with corrections at 

shadow boundaries. The UTD is ideal for construction of efficient computer codes, such as 

these, for modeling the scattering from large structures. The NEGBSC and NEWAIR are 

complementary codes, that is, the NEGBSC is used when the antennas are not mounted 

on a curved surface, and the NEWAIR is used when the antennas are mounted on a curved 

surface. Both codes use plates to model flat structures, the NEGBSC presently uses finite 

elliptic cylinders to model curved surfaces, and the NEWAIR presently uses ellipsoids. 

Although the two UTD codes are presently very useful for predicting the performance 

of antennas in a complex environment, such as a space station, there are a few important 

consideration that should be taken into account. First, the present versions of these codes 

were not specifically developed for a space station application. The NEGBSC was developed 

for ships and the NEWAIR for aircraft. Second and most importantly, even though they 

run fast for large size structures in terms of a wavelength, as compared with computer codes 

using other theories, such as method of moments; a probIem with as many structural pieces 

as a space station can take a very long time to calculate a volumetric pattern. This means 

that the problem of antenna siting in a large structural environment should be viewed as a 

multiple stepped procedure to optimize results for minimum time and cost. 

The design procedure for antenna siting can be viewed as a three step process, as far as 

the computer codes are concerned. First, it can generally be assumed that a good antenna 

location will provide a clear line of sight path between transmitter and receiver over the 

desired range of operation. This can best be accomplished using a obscuration code, which 
is the goal of this computer code and document. This code will provide a volumetric shadow 

map of the projected shadow of a structure onto the far zone sphere centered at the antenna 

location. It is very fast running on space station applications and can be run interactively 

providing nearly immediate answers depending on the overall useage of the computer. 

Second, a worst case code could be developed that will predict not only - the clear line 

of sight regions, but will also map out the maximum values of the various field terms, such 

as the reflected and diffracted lobes. These scattered fields can cause undesired lobes to 

show up in the region of interest. This type of code will not only provide an answer to 

the question of where the optimum location for an antenna system should be, but also 

how it should be oriented at that position and what the gain and side lobe levels would be 

optimum. It can be designed to run at a little additional time cost over the obscuration 

code. 

The final step would be to run a field prediction code such as the NEC-BSC and 

NEWAIR codes or their future versions optimized for the space station. This would be 

the confirmation phase of the design procedure to make sure that no surprises occur in the 

volumetric patterns. At this stage, it does not matter that the codes take a little longer to 

run, especially for the wealth of information that they produce. Of course, these results can 

be used to compare with measured results on scale models to validate the measurements 

and vice versa. 

This document is concerned with the obscuration code, referred to here as "SHADOWn. 

It has been specifically design with space station applications in mind. It directly solves 

for a shadow map by projecting the border of multiple sided flat plates and composite cone 

frustums of elliptic cross section onto the far zone sphere. It then fills between the borders 

based on a pixel resolution and window size specified by the user. The definition of the 

geometry is based on a subset of the command word input system used for the UTD codes. 

This means that as t:.e engineer proceeds through a design scenario progressing through the 

different levels of codes, there will be a minimum amount of conversion of input information. 

The obscuration code has proven to be so efficient, that it was felt that it could be of great 

benefit to the design engineer to be able to run it in an interactive mode. Unfortunately, 

interactive procedures are not generally transportable between different computer systems. 

Because of the wide availablity.of DEC VAX computers in the engineering environment, and 

because of the ease of developing an interactive system on a VAX, the interactive features 

have been developed using devise dependent software for the VAX. The non-interactive and 

interactive parts of the code have been kept separate, however, so that the code can be run 

non-interactively without much change. 

This document is divided into two parts. Part I is a user manual, that treats the code 

more or less as a black box device. It is about all that will be need for the average user to 

get started and obtain results. Chapter 2 describes the method that is used to obtain the 

shadow. The overall view of the operation of the code is given in Chapter 3. It describes 

the non-interactive and interactive commands in a qualitative way. A dictionary of all the 

non-interactive commands needed in the SHADOW code is given in Chapter 4. It gives 

the details for inputting each command. Chapter 5 provides the details for the interactive 

commands. The output features are interpreted in Chapter 6. Examples on how to use the 

code are given in Chapter 7. When first learning how to use the code, it is essential to be 

able to reproduce some of these examples to be sure that the code is functioning properly 
on your system. 

Part I1 of this document is a code manual. It goes into more specific information about 

the coding itself. It is of importance primarily for people implementing the code on a 

new system, for debugging errors, or for making changes in how the code operates. An 

overview of how the code is organized is given in Chapter 9. A listing of the code is given 

in Chapter 10. It is broken up into three parts for the non-interactive, FORTRAN 77 

subroutines and into the interactive VAX dependent subroutines. The implementation of 

the code on a VAX is given in Chapter 11 and a brief description of implementing the code 

on a non-VAX computer is given in Chapter 12. A listing of an NCAR plotting code for 

the shadow map is given in Chapter 13. 
Chapter 2 

Method 

The first gauge of the ability of two antenna systems to communicate with one another at 

high frequencies is to determine if there is a clear line of sight path between them. This 

can be conveniently represented by a map of the projected shadow on the far zone sphere 

caused by the structures around an antenna's environment. One method of producing a 

shadow map is to choose an observation point on the far zone sphere and then determine 

if anything obscures the path and then move on to the next point. This method ie slow, 

however, because there must be many repeated tests on the same blocking structures for 

the various observation point making up the shadow map. 

In order to have quick turn around for antennas mounted on large structures, it is 

desirable to use a method that will directly produce the shadow projected onto the far zone 

sphere. This can be accomplished in a two step process. First the outside boundary of each 

individual piece making up the structure can be transformed from the x, y, z coordinate 

system into a sequence of lines in the 8 and r$ pattern coordinate system. The area of the 

shadow map between the boundary lines for each piece may then be filled by looking at the 

center location between the lines and a shadow check on that piece of the structure can be 

performed. This reduces the test on each piece of structure from once every observation 

point to a few tests every pattern cut line. The calculation time, in general, is reduced 

by about two orders of magnitude. For example, instead of taking two hours, a map can 

conservatively be produced in about one minutes or better. These numbers dependent on 

the geometry, the window size of the map, and the resolution desired. 

There are two fundamental types of structural pieces presently available for modeling 

in this obscuration code, the multiple sided flat plate and the multiple rimmed composite 

cone frustum of elliptic cross section. More than one plate or cylinder can be specified to 

build up a complex structure. A plate can be defined by the location of its corners in a 

reference coordinate system. A cone frustum can be defined by the size of its major and 

minor radii for each rim making up the composite cylinder. 

The boundary of the structures are traced onto the far zone sphere by defining a vector 

from the source position, R,, to some position along its outer boundary, 4, such that 

In the case of the plate, the boundary is defined by some location along its edges, as illuatrated in Figure 2.1. This vector can then be transformed into the pattern cut coordinate 

system, since the pattern may be defined relative to a different set of axes. The vector can 

4 
Figure 2.1: Geometry showing the projection of the plate edge onto the far zone sphere. 
then be transformed onto the two dimensional far zone sphere by 

0 = arctan ($. R/i R) 

and 

4 = arctan (4. Rli:. R) 

The position of the vector along the edge is defined by starting at a corner and then 

incrementing the edge in steps of 6t along the edge. In order to provide the most efficient 

performance and the best image of the shadow on the map, it is necessary to define St as a 

function of the chosen resolution desired for the map, 6a, the distance, R, from the source 

to the edge point and the relative position of the projected shadow point with respect to n 

the polar caps, the Greenland effect. 

The resolution, 6a is chosen to be the minimum of the two specified incremental values 

of 8 and 6. The distance R is defined as R = )R8 - RI. Assuming that the resolution - 

increment is small and the distance is relatively large, the value of the edge increment is 

given by 

St = SaR sin 0. n 

The new edge point then becomes 

where t is the edge vector pointing from the first corner to the second corner making up 

the edge. 

The composite cone frustum can be done in the same way as the plate. In fact the end 

caps can be defined as plates with curved edges and the curved surfaces are added aa edges 

whose corners are the tangent points illustrated in Figure 2.2. 

Once a give plate or cylinder outer boundary is transformed onto the shadow map and 

stored in pixels of the desired resolution, the fill process can begin. The pixel array is 

considered one row at a time in a scanning operation from the one range of theta embodied 

in the pixel array to the other. The direction of the scan and the order in which rows are 

scanned is arbitrary. The fill process is the same for each scan line in the pixel array so 

that no logical interaction between lines takes place. The process is similar to the way in 

which a television paints pictures one row at a time on the screen. As the scan proceeds 

say from left to right, unlit pixels between object boundaries on the line which correspond 

to regions in the interior of the object are turned on creating an area fill. The deciaion to 

light a group of pixels on a given row is not made by testing each pixel individually for 

obscuration but by making a single test between the pixels which represent boundaries of 

the projected regions. In this way, only a single test is made to determine whether a whole 

group of pixels represent the interior or exterior of a region. This is one major key to the 

sizable reduction of processor time achieved. 

The shadow test for a plate is made by first projecting the vector chosen at the mid 

point of the scan line, i, onto the plane of the plate to find its intersection point, as shown 

in Firrure 2.3. that is 
END CAP EDGE /"'l 

Figure 2.2: Geometry showing the projection of a cone frustum onto the far zone sphere. 
Figure 2.3: Intersection of observation direction vector with plate. 
Now, using an idea based on Cauchy's formula from complex variables, that is, 

0, no pole in f(z) 

2% j, one pole in f(z) ' 

the intersection point can be tested to see whether or not it falls within the limits of the 

plate. This is illustrated in Figure 2.4. 

It is easy to show that 

Om = arctan -a) x (em+, - &I] -6 

(Cm - &) (Cm+1- $) I 

which leads to the test, if 

< T, no hit occurs 

m=l > n, a hit occurs ' 

The end caps of the cone frustum cylinders can be done in the same way, by projecting 

the hit point in the plane of the end cap. The hit point distance can be tested from the 

center of the disk to see if it falls within the finite limits of a disk to simplify things a little. 

The curved surface test is a different matter, but still quite easy to accomplish. A vector 

on the surface of the cone frustum can be represented as 

The geometry is illustrated in Figure 2.5. The point defined by R, should satisfy the 

equation for a cone, that is, 

(R cos 6 + x,)* (R sin q5 sin 8 + + - A;(RCOSB+Z,) = 0 

a j' b j' 

where 

1 Aj(Rcos6 + z*) = tanBj(Rcos6 + I. - T;)] . 

The distance R is unknown in this equation, since we know the direction to the observer, 0 

and 4, but not the distance to the hit point. We can solve for R, however, from the above 

equations using 

CXR~+~PR+~=O, 

where 

cos2 4 sin2 8 sin2 4 sin2 8 tan2 Oj cosZ 8 

CY = + - a? 63 a; P 

x, cos tj sin 8 y, sin q5 sin 6 P= + - tan 6, cos6Xj(a8), a; i$ 
2 

(0) RAY HITS PLATE 

m 

l NTERSECTION 

POINT 

. (b) RAY DOES NOT HIT PLATE 

Figure 2.4: The geometry for deciding whether a ray does or does not hit the plate. 
IN? 

Figure 2.5: Geometry illustrating the hit point on a cone frustum segment. 
and 

If the value of R is real, then the hit point is on the finite cone frustum and therefore the 

ray from the source to observer is shadowed. If the actual hit point is desired it should be 

noted that there are two values found from this equation, and that the righthit point can J 

7 

be found from the one representing the shortest distance. If the value of R is imaginary, 

however, this indicates that the hit point is off the real boundary of the cone frustum and . 

therefore the ray is not shadowed. If R is real, an additional test must be made to decide - - 

whether the hit point in between the finite length bounds of the frustum. 

The basic theory discussed here is rather straight forward. The implementation, of 

course, requires a lot of other considerations to be user friendly and as general purpose as r) 

possible. The next chapter will go into more detail about how the code interfaces with the 

operator. 
Chapter 3 

Principle of Operation 

3.1 Overview 

The Obscuration Code is intended to be an efficient means of determining the clear line 

of sight path for an antenna mounted in a complex environment. This code produces a 

shadow map of the geometry for a given source location. The configuration is defined using 

a command word system as discussed below. The geometry of the structure is defined by 

using plates and cylinders. It is thought that the obscuration code is just one step in a 

total evaluation scheme. The next step would be to either look at a Uworst case" map that 

projects the location of the maximum lobes on to a volumetric map or to calculate the fields 

using a code like the NEC-BSC. In any case, the real fields should be calculated as the final 

step whetb- an intermediate one is used or not. For this reason, the geometry definition 

is based on the NEC-BSC code method of inputting information. 

The obscuration code, however, is a very efficient means of providing a shadow map. 

It can be run in a matter of minutes or less for a given shadow map. It is, therefore, felt 

that it can be most efficiently run interactively, that is with the user sitting at a terminal 

changing antenna locations, looking at the resultant maps, deciding where to try the next 

antenna location until the desired optimum spot is found to achieve a given performance. 

For this reason the code has been developed in two pieces. One is a standard FORTRAN 

77 part that does the essential shadowing calculations. The second is an interactive part 

that allows the user to change the source locations and window size without leaving the 

code. Unfortunately, this second part of the code is by nature device dependent. This 

part has been written for the DEC VAX series of computers using version 4 of VMS. It 

uses system handlers for defining the commands discussed in the sections below for the 

interactive commands and the keypad mode. The keys on the keypad of VTlOO or VT200 *i series terminals can be used to represent the typed commands. This will simplify the use 

of the code by reducing the amount of typing necessary. 

This chapter tries to give a brief overview of the specifics needed to run the code by 

treating it as a black box. It is intended to just get the user comfortable with the overall 

philosophy of the obscuration code. 
3.2 Modeling the Structures 

The building blocks available for the obscuration code are composed of pieces that are an 

extension of version 2 of the NEC-BSC [I]. Structures can be modeled using multiple sided 

flat plates and multiple rimmed cone frustum cylinders. The plates can be used individually 

to model things like solar panels or together to form box like structures to model things like 

the mast, etc. The cone frustums are a new feature here, and can be handy for modeling 

living modules, etc. Examples of space station models are given in Chapter 7. 

Unlike the NEC-BSC, there are no real restrictions on how these structures are defined. 

Since the code just looks at each defined piece of the modeled structure individually, casts its 

shadow, then moves on to the next piece, it does not have to properly account for the wedge 

angles and other geometrical features needed in field calculations in the NEC-BSC. If one is 

setting up a model, however, it still might be useful to use the same modeling considerations 

as the NEC-BSC, such as defining the corners of a plate so the normals point in the region 

of space in which the source is located. It is assumed that the obscuration code phase of the 

design procedure will be followed by calculating the fields for the antenna on the structure 

using a code such as the NEGBSC. 

The number of plates and cylinders that can be used in the models is dictated only by 

the size of the dimensions implemented in the array for defining the geometry in the code. 

For convenience, these parameters are located in one file in the code so they only need to 

be changed in one spot. The details are given in Part 11. 

More information on how models are to be constructed are given in the section below 

on the non-interactive commands and in Chapter 4 where these commands are defined in 

more detail. 

3.3 Running the Code 

The first step of course is to get the code implemented on your system. The details of how to 

accomplish this are given in Part 11. In order to use the full interactive features of the code, 

it is necessary to use the code on a DEC VAX. Many of the interactive features use VAX 

dependent implementations from version 4 of the VMS operating system. The code has 

been divided into standard FORTRAN 77 files and VAX dependent files, however, so that 

the code can be used without the interactive features on other systems. A slightly different. 

main program needs to be used as provided in Part 11. In addition, the non FORTRAN 

77 INCLUDE statement has been used in the non interactive file. Many systems have this 

feature, so it was left in as a convenience. If the user system does not, it is easy to remove 

by hard wiring the lines in the appropriate file in place of the INCLUDE statement. Most 

of the information, here, will assume that the full features of the code will be able to be 

used. 

The first step in using the code is to create a file that contains the basic structure 

definitions using the non-interactive commands discussed in the next section. The command 

defining the source location and window size of the shadow map can also be defined in this 

input file or added and changed in the interactive session. Of course, if you are running 

non-interactively, then all the data must be input from the input file. 

Once the input file has been created or chosen from some stored files, the obscuration 
code can be executed. It will read the input file from logical unit #5. An interactive 

command allows the user to connect the chosen input file to this logical unit number. The 

code then proceeds to read the input information and produce an output that is sent to 

the terminal (logical unit #6) representing how the code has interpreted the input. In this 

process, it is converting all the input into a standard reference coordinate system and into 

a common set of units which is meters. If there is a typographical error or other error in 

the input set the code will indicate so and stop execution at that point. 

If the code completes the input, it will wait for the next instruction. For example, the 

output file name can be connect to the logical unit which is #7 for the line printer output 

and logical unit #10 for the plotter output. The antenna position can now be defined or 

modified and the desired window changed. The code can than be told to proceed to produce 

a shadow map. 

When the code has completed the shadow calculation, the user can change the source 

location, the window of the map, or input another structure and run the code again; or he 

can print the map out. The map is an array of pixels (doubly dimensioned character array) 

that are in general either a blank representing a clear path or a character representing a 

blocked path. The character ie normally a uniform character such as an "X*. There is an 

option to tag a particular plate with a character that you define, or the code will letter each 

plate and cylinder separately. This is useful to determine which plates get in the way or for 

debugging purposes. More details on this will be given in Chapter 6. 

3.4 Non-Interactive Commands 

The non-interactive commands needed in this code are a subset and a slight extension of 

those used in version 2 of the NEC-BSC [I]. The total list of the available non-interactive 

commands are given in Table 3.1. Only the commands of interest to the obscuration code 

are defined in this manual. The rest can be found in reference [I] or in later reports and 

manuals for newer versions of the codes. This section is intended to give the user a brief 

overview of the specific commands of interest with the details coming in the next Chapter. 

The input commands words are intended to make it convenient for the user to define 

the geometry of the structure without having to define information not needed or repeat 

information already defined. They are two'letter pairs. The rest of the characters on a 

command word line can be used for comments, since only the first two letters are interpreted. 

There is a place in the code to place default data that will be present without a call 

to the command. This is convenient when a specific resolution sized of the shadow map is 

desired as a default, for example. The default window can be initial theta angles of 0 to 

180 in steps of 2 degrees and initial phi angles of 0 to 360 in steps of 2 degrees by defining 

the proper variables in this default section. A call to the VF command will over ride this 

data if it is specified in the input set. 

The geometry information is by default sssumed to be in meters in a definition coordinate system that is initially the reference coordinate system. The units can be changed 

using the UN command to either inches or feet or back to meters again. Once the UN 

command is specified all information after that command is assumed to be in those units 

unless changed by another call to UN. There is also provision for using any conversion fac- 
i[ COMMAND DEFINITION LOCATION

BP back or bistatic scatter [1]

CC cone frustum geometry pg 24

CE last or only comment pg 30 or [1]

CG cylinder geometry pg 27 or [1] _"

CM comment card pg 30 or [1]

EN end execution pg 30 or [1]

FM swept frequencies [1] _

FR frequency [1]

GP infinite ground plane pg 31 or [1]

GR rangegate notdocumented _,

LP line printer output [1 i

NC next set of cylinders pg 32 or [1]

NG no ground plane pg 32 or [1] i

NP next set of plates pg 32 or [1]

NR next set of receivers [1] -_

NS next set of sources pg 32 or [1]

NX next problem pg 32 or [1]

PD far zone pattern cut [1] =q

PF far zone cut (non integer) not documented

PG plate geometry pg 33 or [1]

PN near zone pattern cut [1] ..

PP plotter output [1]

PR gain or coupling factors [1]

RA receiver array geometry [1]

RD far zone range [1]

RG receiver geometry [1]

RM NEC-MOM receiver input [1} -_

RT rotate-translate geometry pg 36 or [1]

SA source array geometry [1]

SG source geometry pg 38 or [1] -_

SM NEC-MOM source input [1]

TO test options [1]

UF model scale factor pg 42 or [1]

UN units of geometry pg 42 or [1]

US units of source size [1]

VD volumetric cut (integer) not documented "_

VF volumetric far zone cut pg 44

VN volumetric near zone cut not documented

VP volumetric plotter output not documented "_

XQ execute code pg 47 or [1] .

Table 3.1: Table of non-interactive commands. "_

16
tor desired. It is input using the UF command and is a scale factor multiplying times all 

the input dimensions in whatever unit have been defined. The code then takes the input 

information and changes it internally and stores it in meters, in order to have a uniform 

system in which to operate. The input dimensions and the internal dimensions are output 

in the feed back print out sent to a file so the user can see what happened. The dimensions 

of the source itself, that is length and width not its position, is handled with a default of 

wavelengths. This can be changed with the US. The length and width of the source is not 

important in this code so it can be ignored here. 

The reference coordinate system is really whatever is convenient for the user. The 

definition coordinate system is the same as this initial reference system or it can be changed 

using the rotate translate command RT. The RT command allows allows the user to relocate 

the origin and orientation of the definition coordinate system with respect to the reference 

coordinate system. The definition system stays as defined for all subsequent geometry input 

until it is changed. The RT command's definition is always referenced to the reference 

coordinate system NOT to itself, that is, one does not put in inverse locations and angles 

to undo the command, but resets it to the zero position of the origin and the z-axis and 

x-axis of the reference coordinate system. Note that all angles are assumed to be input in 

degrees. The coordinate axes are input in a uniform way through out the code by treating 

the new axes vectors as if they were radial vectors in the system being used. That is the 

z-axis is defined using a theta and phi angle relative to the reference coordinate system in 

the RT command and likewise the x-axis is treated as a radial vector. The y-axis is defined 

by a cross product between the x and z axes. The code checks that the x and z axes were 

defined orthogonal to one another. If not an error message will result and the code will 

stop. 

The geometry commands are the PC command for the plates, the GP command for the 

infinite ground plane, the CG command for an elliptic cylinder, and the CC command for 

the cone frustum cylinders. The plates are defined by inputting the number and location of 

their corners in the definition system. The ground plane is defined as a infinite plane lying 

in the x-y plane of the definition coordinate system. The elliptic cylinder definition is base 

on the location of its origin and the orientation of its z- and x-axes relative to the definition 

coordinate system. In addition, the radius along its'cylinder x-axis and the radius along its 

cylinder y-axis, along with the z-axis position and angular orientation of its end caps are 

needed. The cone frustum's definition is similar except that the number of rims making up 

the cylinder need to be specified and the orientation of the rims does not, since they can't 

be cut at an angle as in the elliptic cylinder case. For the plates and cylinders the code 

automatically adds up the number of calls to the commands and counts that as the number 

of plates or cylinders specified. Only one infinite ground plane can be defined. 

The location of the sources are specified by their location, type, orientation, and relative 

weights using the SG command. Only the location information is important to the obscuration code. Each source specified is automatically counted and remember as the number of 

sources. Unlike the plates and cylinders, the obscuration code only calculates one source at 

a time for a shadow map. In non-interactive mode, it does one source at a time producing 

a map for each. In interactive mode, it takes the first one as the default source and then 

each subsequent one needs to be interactively input. Receivers are not recognized by the 

shadow code, so if in reality you are studying a receiver, it must be input as a source not a 
receiver for shadowing purposes. 

In order to negate already defined commands for the geometry which is automatically 

increasing their number, a series of commands have been implemented. The platea can be 

reset to zero using the NP command. The ground plane with NG, the cylinders with NC, 

the sources with NS, and the entire run can be reset with the NX command.; 

The code is told to go and execute the interactive mode if it is available, or to go and 

execute the shadow calculations if the interactive mode has not been implemented using 

the XQ command. The EN command tells it to exit back to the operating system. 

The next section will discuss an overview of the interactive commands and examples of 

these commands are given in Chapter 7. 

3.5 Interactive Commands 

The interactive commands provided by the code under VMS are designed to allow easy 

specification of commonly changed parameters with a syntax which is well-known to users 

of VMS, the DCL command interpreter syntax. To acquaint the reader with the appearance 

of these commands, they are summarized below. Detailed descriptions of each command 

complete with examples can be found in the Chapter 5 on interactive commands. A list of 

the available interactive commands are given in Table 3.2. 

There are interactive commands to allow the user to control the operation of the code 

or to change or view the geometry. The SHADOW command produces the shadow map. 

The HELP command gives a descriptions of the commands. The EXIT command exits the 

user back to the operating system. The SPAWN command allows the use of DCL command 

while the user is still in the shadow code. 

The rest of the commands either allow the user to change the geometry, with the SHOW 

commands, or see the present status of the geometry, with the SET commands. Most of 

them have a non-interactive command to which they are at least somewhat associated. The 

SET UNITS command allows the units of the antenna location to be chosen, similar to 

the UN command. The SET SCALE-FACTOR command is like the UF command, which 

allows an arbitrary scale factor for the geometry to be chosen. The SET COORDINATES 

command allows the definition coordinate system to be change, like in the RT command. 

The SET ANTENNA command enables the user to interactively specify the antenna location in the definition coordinate system. It is related to the SG command. The SET 

PATTERN-CUT command allow the user to specify the orientation of the pattern coordinate system in the reference coordinate system. The SET WINDOW command enables 

the initial, final and incremental angles of the shadow map to be specified. These two 

commands are related to the VF command. 

The next four commands do not have non-interactive commands to which they are 

related. The SET INPUT command allows the user to specify what file containing the noninteractive commands is to be read. The SET OUTPUT command enables the specification 

of which output files are to be assigned and their names. The SET FILL-CHARACTER 

command allows the user to define the symbols that are used for the plate and cylinder 

shadows. The SET KEYPAD-MODE command enables the VTlOO keypad to be used 

for command definitions as is discussed in the next section, otherwise, the keypad can be 

used for numerical input. These four commands are discussed much more thoroughly in 
Chapter 6. 

3.6 Keypad Use 

The definable keypad functions are available for the interactive version of the code only. The 

keypad definitions are made possible through the use of an integrated VMS screen/terminal 

management package called SMG. It is a collection of runtime library routines which perform 

terminal 1/0 and intercept the special sequences transmitted by the keypad keys. When 

one of these keys are pressed, the text definition associated with the key is substituted onto 

the command line. All of this 1/0 is transparent to the user so that he need only worry 

about making the initial keypad definitions. For more information about SMG, the reader 

is referred to the VMS runtime library reference manual. 

The keypad definitions are initialized by a text file containing suitable "DEFINE/KEYn 

commands. The file is called SHADOW.KPD and must reside in the default directory of 

the user running the code. There is a template file provided with the code which may 

be customized by the user. The predefined definitions of the VTlOO keypad are ehown in 

Table 3.3. Note that the 'goldn enables the lower case action in the top row, that is, in 

most case the "SHOWn operation instead of the 'SETn operation. 
1 COMMAND I LOCATION 7) U 1 u 

n EXIT 1 Paee 49 fl 

- 1 SET ANTENNA-LOCATION I pane 56 1 

L 

I - n SET KEYPADNODE I Pane 63 H 

HELP 

SPAWN 

4 

SET COORDINATES 

SET FILL-CHARACTER 

SET INPUTSET 

I " I SET OUTPUT I Pane 64 H 

- v- -- 

Page 50 

Pane 54 

" 

Page 58 

Page 59 

Pane 62 

I - 

I Paee 68 1 

SET PATTERN-CUT 

SET SCALE-FACTOR 

- --u- - - 

Page 66 

Pane 67 

SET WINDOW 

SHADOW 

" 

Page 69 

Pane 52 q 

SHOW ANTENNA-LOCATION 

SHOW COORDINATES 

SHOW FILL-CHARACTER 

I - n SHOW OUTPUT I Paee 76 H 

- L 

Page 71 

Page 72 

Paee 73 

SHOW INPUTSET 

SHOW KEYPAD-MODE 

- v- - 

Page 74 

Pane 75 

I ., SHOW WINDOW ( Page 80 II 

SHOW PATTERN-CUT 

SHOW SCALE-FACTOR 

SHOW UNITS 

Table 3.2: Table of interactive commands. 

- u- ~ - 

Page 77 

Page 78 

Pane 79 
Table 3.3: VTlOO keypad for SHADOW interactive commands. 

PFI 

gold 

7 

show 

SET 

OUTPUT 

4 

show 

SET 

SCALE 

1 

show 

SET 

FILL 

0 

PF3 

nokeypad 

SET 

KEYPAD 

- 

show 

SET 

WINDOW 

I 

show 

SET 

PATTERN 

Enter 

RETURN 

SPAWN 

PF2 

HELP 

8 

show 

SET 

INPUT 

5 

show 

SET 

UNITS 

2 

/cylin 

FILL 

/PLATE 

EXIT 

PF3 

SHADOW 

9 

show 

SET 

ANTENNA 

6 

show 

SET 

COORD 

3 

show 

FILL 

/SEQUEN 
Chapter 4 

Non-Interactive Commands 

.The non interactive commands discussed in this chapter are a subset of the commands used 

for the NEC-BSC2. The shadow code will recognize the entire set of NEC-BSC2 commands 

plus a few new ones. The new commands and some of the old ones that are pertinent to 

this code will be described here. The following sections define in detail each command word 

and the variables associated with them. This chapter is organized in alphabetical order of 

the commands. It is intended to be used as a reference for the user. Chapter 7 will give 

specific examples using this input method. 

The method used to input data into the computer is presently based on a command 

word system. This is especially convenient when more than one problem is to be analyzed 

during a computer run. The code stores the previous input data such that one need only 

input that data which has to be changed from the previous execution. Also, there is a 

default list of data so for any given problem the amount of data that needs to be input has 

been shortened. The command word options presently available are listed in Table 3.1 on 

page 16. The colon after the command word is not necessary and is sometimes used just 

to illustrate the separation between the command word and the space where comments can 

be inserted. 

In this system, all linear dimensions may be specified in either meters, inches, or feet 

and all angular dimensions are in degrees. All the dimensions are eventually referred to a 

fixed cartesian coordinate system used as a common reference for the source and scattering 

structures. There is, however, a geometry definition coordinate system that may be defined 

using the RT command. This command enables the user to rotate and translate the coordinate system to be used to input any selected data set into the best coordinate system 

for that particular geometry. Once the RT command is used gll the input following the 

command will be.in that rotated and translated coordinate system until the RT command 

is called again. See below for more details. There is also a separate coordinate system that 

can be used to define a pattern coordinate system. This is discussed in more detail in terms 

of the VF command. 

It is felt that the maximum usefulness of the computer code can be achieved using it on 

an interactive computer system. As a consequence, all input data are defined in free format 

such that the operator need only put commas between the various inputs. This allows 

the user on an interactive terminal to avoid the problems associated with typing in the 

field length associated with a fixed format. This method also is useful on batch processing 

computers. Note that all read statements are made on unit #5, i.e., READ(5,*), where 
the "*" symbol refers to free format. Other machines, however, may have different symbols 

representing free format. 

In all the following discussions associated with logical variables a "T" will imply true, 

and an "F" will imply false. The complete words true and false need not be input since most 

compilers just consider the first character in determining the state of the logical variable. 
4.1 Command CC: 'Cone Frustum Geometry 

This command enables the user to define the geometry of the finite elliptic conical cylinder 

structures to be considered. The geometry is illustrated in Figure 4.1. One call to this 

command defines one cylinder. The number of cylinders in the structure are automatically 

counted by the number of calls to this command. , 

- 

READ: (XCL(N,MC),N=1,3) 

where 

XCL(N,MC) This is a doubly dimensioned real variable. It is used to specify the location of the origin of the MCth elliptic cylinder relative to the 

definition coordinate system. It is input on a single line with the real numbers being the x,y,z coordinates of the origin which correspond to N=1,2,3, 

respectively. 

READ: TCLZ, PCLZ,.TCLX, PCLX 

where 

TCLZ,PCLZ These are real variables. They are input in degrees as spherical 

angles that define the %,-axis of the cylinder coordinate system as if it was 

a radial vector in the definition coordinate system. 

TCLX,PCLX These are real variables. They are input in degrees as spherical 

angles that define the zc-axis of the cylinder coordinate system as if it was 

a radial vector in the definition coordinate system. 

Note that the .new zc-axis and 2,-axis must be defined orthogonal to each other. 

The new y,-axis is found from the cross product of the z,- and 2,-axes. 

READ: NEC(MC) 

where 

NEC(MC) This is a dimensioned integer variable which defines the number of 

edges the conical cylinder has. 

READ: AC(NC,MC), BC(NC,MC), ZC(NC,MC) 

where 
AC(NC,MC) This is a double dimensioned real variable which defines the 

radius of the NCth rim on the %,-axis of the MCth elliptic cylinder. 

BC(NC,MC) This is a double dimensioned real variable which defines the 

radius of the NCth rim on the ye-axis of the MCth elliptic cylinder. 

ZC(NC,MC) This is a double dimensioned real variable which defines the z 

position of the NCth rim along the %,-axis of the MCth elliptic cylinder. 

Note that the program will keep increasing the number of cylinders in the solution by the 

number of calls to this command unless the NC or NX commands are called to reinitialize 

the cylinder geometry. Also, the ellipticity of a conical structure should remain the same 

for the entire length of that structure. The most positive rim should be defined first until 

all NC rims are defined in descending order. 
Figure 4.1: Definition of finite cylinder geometry composed of cone frustum segments with 

elliptic cross section. 
4.2 Command CG: Cylinder Geometry 

This command enables the user to define the geometry of the finite elliptic cylinder struc- , 

tures to be considered. The geometry is illustrated in Figure 4.2. One call to this command 

defines one cylinder. The number of cylinders in the structure are automatically counted 

by the number of calls to this command. 

READ: (XCL(N,MC),N=1,3) 

where 

XCL(N,MC) This is a doubly dimensioned real variable. It is used to specify the location of the origin of the MCth elliptic cylinder relative to the 

definition coordinate system. It is input on a single line with the real numbers being the x,y,z coordinates of the origin which correspond to N=1,2,3, 

respectively. 

READ: TCLZ, PCLZ, TCLX, PCLX 

where 

TCLZ,PCLZ These are real variables. They are input in degrees as spherical 

angles that define the %,-axis of the cylinder coordinate system as if it was 

a radial vector in the definition coordinate system. 

TCLX,PCLX These are real variables. They are input in degrees as spherical 

angles that define the xc-axis of the cylinder coordinate system as if it was 

a radial vector in the definition coordinate system. 

Note that the new xc-axis and %,-axis must be defined orthogonal to each other. 

The new yc-axis is found from the cross product of the x,- and %,-axes. 

READ: AC(l,MC), BC(1,MC) 

where 

AC(1,MC) This is a doubIe dimensioned real variable which defines the radius 

of the MCth elliptic cylinder on the xc-axis of the cylinder. 

BC(1,MC) This is a double dimensioned real variable which defines the radius 

of the MCth elliptic cylinder on the ye-axis of the cylinder. 

READ: ZCN, THTN, ZCP,' THTP 
where 

ZCN This is a real variable that defines the position the center of the most 

negative end cap on the +axis of the cylinder. 

THTN This is a real variable. It is input'in degrees and defines .the angle the 

surface of the most negative end cap makes with the positive-zc-axis in the 

z,-z, plane. 

ZCP This is a real variable that defines the position of the center of the most 

positive end cap on the zc-axis of the cylinder. 

THTP This is a real variable. It is input in degrees and defines the angle the 

surface of the most positive end cap makes with the positive z,-axis in the 

z,-z, plane. 

Note that the program will keep increasing the number of cylinders in the solution by the 

number of calls to this command unless the NC or NX commands are called to reinitialize 

the cylinder .geometry. 
Figure 4.2: Definition of finite elliptic cylinder geometry. 
4.3 Command CM: and CE: Comments 

These commands enable the user to place comment cards in the input and output data in 

order to help identify the computer runs for present and future reference. 

READ: (IR(I), 1=1,36) 

where 

IR(1) This is a CHARACTER*^ dimensioned array used to store the command 

word and comments. Each card should have CM' or CE on them followed 

by an alphanumeric atring of characters. The CM command implies that 

there will be another comment card following it. The last comment card 

must have the CE command on it. If there is only one comment card the 

CE command must be used. 

Note that it is possible to place comments to the right of all the command words, if 

desired. 

4.4 Command EN: End Program 

This command enables the user to terminate the execution of the scattering code. 
4.5 Command GP: Ground Plane 

This command enables the user to specify an infinite ground plane in the zt-yt plane. 

READ: LSLAB(MPDX) 

where 

LSLAB(MPDX) This is a dimensioned integer variable. It is used to define 

the type of plate desired as follows: 

0 = Perfectly conducting metalic plate 

-3 = Dielectric half space 

Note that if LSLAB(MPDX)=O the code will skip around the READ statement for the dielectric information, therefore, the next line defining the 

dielectric properties should not be placed in the input data set. 

READ: ERSLAB(l,MPDX), TESLAB(l,MPDX), 

URSLAB (l,MPDX), TMSLAB(1,MPDX) 

where 

ERSLAB(1,MPDX) This is a doubly dimensioned variable. It is used to 

specify the relative dielectric constant of the half space. 

TESLAB(1,MPDX) This is a doubly dimensioned variable. It is used to specify the dielectric loss tangent if the number is positive or the conductivity 

if the number is negative of the half space. 

URSLAB(1,MPDX) This is a doubly dimensioned variable. It is used to 

specify the relative permeability constant of the half space. 

TMSLAB(1,MPDX) This is a doubly dimensioned variable. It is used to 

specify the permeability loss tangent of the half space. 
4.6 Command NC: Next Set of Cylinders 

This command enables the user to initialize the cylinder data. All of the cylinders are 

removed from the problem unless they are respecified following this command. 

- 

4.7 Command NG: No Ground Plane 

This command enables the user to initialize the infinite ground plane. The ground plane is 

removed from the problem unless it is respecified following this command. 

4.8 Command NP: Next Set of Plates 

This command enables the user to initialize the plate data. All of the plates are removed 

from the problem unless they are respecified following this command. 

4.9 Command NS: Next Set of Sources 

This command enables the user to initialize the source data. All of the sources are removed 

from the problem unless they are respecified following the command. 

4.10 Command NX: Next Problem 

This command enables the user to initialize the commands to their default conditions specified in the list at the beginning of the main program. 
4.11 Command PG: Plate Geometry 

This command enables the user to define the geometry of the flat plate structures to be 

considered. The geometry is illustrated in Figure 4.3. One call to this command defines 

one plate. The number of plates in the structure are automatically counted by the number 

of calls to this command. 

READ: MEP(MP), LSLAB(MP) 

where 

MEP(MP) This is a dimensioned integer variable. It is used to define the 

number of corners (or edges) on the MPth plate. 

LSLAB(MP) This is a dimensioned integer variable. It is used to define the 

type of plate desired as follows: 

1 = Transparent thin dielectric slab 

0 = Perfectly conducting metalic plate 

-2 = Dielectric covered plate 

Note that if LSLAB(MP)=O the code will skip to the read statements associated 

with the corners XX(N,ME,MP). Therefore, the information for the different slab 

layers should not be put in the data list for the perfectly conducting plate. 

READ: NSLAB(MP) 

where 

NSLAB(MP) This is a dimensioned integer variable. It is used to define the 

number of dielectric layers on the MPth plate. 

READ: DSLAB(NS,MP), ERSLAB(NS,MP), TESLAB(NS,MP), 

URSLAB(NS,MP), TMSLAB(NS,MP) 

where 

DSLAB(NS,MP) This is a doubly dimensioned variable. It is used to specify 

the thickness of the NSth layer. 

ERSLAB(NS,MP) This is a doubly dimensioned variable. It is used to specify 

the relative dielectric constant of the NSth layer. 

TESLAB(NS,MP) This is a doubly dimensioned variable, It is used to specify 

the dielectric loss tangent if the number is positive or the conductivity if 

the number is negative of the NSth layer. 
URSLAB(NS,MP) This is a doubly dimensioned variable. It is used to specify 

the relative permeability constant of the NSth layer. 

TMSLAB(NS,MP) This is a doubly dimensioned variable. It is used to specify the permeability loss tangent of the NSth layer. 

Note there will be NSLAB(MP) number of lines of the above data 

READ: (XX(N,ME,MP),N=l,J) 

where 

XX(N,ME,MP) This is a triply dimensioned real variable. It is used to specify 

the location of the MEth corner of the MPth plate. It is input on a eingle 

line with the real numbers being the x,y,z coordinates of the corner, in the 

specified coordinate system, which corresponds to N=1,2,3, respectively, in 

the array. For example, the array will contain the following for plate #1 

and corner #2 located at x=2., y=4., z=6.: 

XX(1,2,1)=2. 

XX(2,2,1)=4. 

XX(3,2,1)=6. 

This data is input as: 2.,4.,6. 

This read statement will be called MEP(MP) times so that all the cornera are defined. 

As an example, the input data for the flat plate structure given in Figure 4.3, is given by 

4 ,o :corners and type of plate 

I., I., 0. :corner #1 

-I., l., 0. :corner #2 

-I.,-I., 0. :corner #3 

I.,-I., 0. :corner #4. 

See elsewhere for further details on how to number the corners. Note that the program 

will keep increasing the number of plates in the solution by the number of calls to this 

command unless the NP or NX commands are called to reinitialize the plate geometry. 
Figure 4.3: Definition of flat plate geometry. 
4.12 Command RT: Rotate-Danslate. Geometry 

This command enables the user to translate and/or rotate the coordinate system used to 

define the input data in order to simplify the specification of the plate, cylinder, and source 

geometries. The geometry is illustrated in Figure 4.4. - 

READ: (TR(N),N=1,3) 

where 

TR(N) This is a dimensioned real variable. It is used to specify the origin of 

'the new coordinate system to be used to input the data for the source or 

the scattering structures. It is input on a single line with the real numbers 

being the x,y,z coordinates of the new origin which corresponds to N=1,2,3, 

respectively. 

READ: THZP, PHZP, THXP, PHXP 

where 

THZP,PHZP These are real variables. They are input in degrees as spherical 

angles that define the z-axis of the new coordinate system as if it was a 

radial vector in the reference coordinate system. 

THXP,PHXP These are real variables. They are input in degrees as spherical 

angles that define the x-axis of the new coordinate system as if it was a 

radial vector in the reference coordinate system. 

The new x-axis and z-axis must be defined orthogonal to each other. The new y-axis is 

found from the cross product of the x- and z-axis. All the subsequent inputs will be made 

relative to this new coordinate system, which is shown as xt, yt, xt, unless command RT ia 

called again and redefined. 
Figure 4.4: Definition of rotate-translate coordinate system geometry. 
3 

4.13 Command SG: Source Geometry 

This command enables the user to specify the location and type of source to used. The -. 

geometry is illustrated in Figure 4.5 and 4.6. One call to this command defines one source. 

The number of sources in the problem are automatically counted by the number of calls to . this command and the SA command. - T 

READ: (XSS(N,MS),N=1,3) 7 

where 

1 

XSS(N,MS) This is a doubly dimensioned real array which is used to define i 

the x,y,z location of the MSth e1ement.h the definition coordinate system. 

Again, a single line of data contains the x,y,z (N=1,2,3) locations. 

READ: THSZ, PHSZ, THSX, PHSX 

where 

THSZ,PHSZ These are real variables which are used to define the orientation 

of the MSth element in the definition coordinate system. They are input in. 

degrees as spherical angles that define a radial direction which is parallel to ct 

the MSth current flow for a dipole antenna or which is parallel to the length 

of an aperture antenna. m 

THSX,PHSX These are real variables which are used to define the orientation 

of the MSth element in the definition coordinate system. They are input 

in degrees as spherical angles that define a radial direction which is parallel 1.1 

to the MSth elements aperture width or which is parallel to a slot's width. 

For a dipole antenna, these angles can be made in a convenient direction. 

The x-axis and z-axis specified by these angles must be defined orthogonal to 1 

each other. The y-axis is found by the cross product of the x- and z-axes. 

READ: IMS(MS), HS(MS), HAWS(MS) 

where 

1 

IMS(MS) This is an integer array which is used to define the MSth element's - 

source type. The details of the different types of sources are given elsewhere. - 

The designations are defined as follows: . IMS(MS)<O for an electric element C) IMS(MS)>O for a magnetic element 
IIMS(MS)(=l for a uniform current distribution 

IIMS(MS)I=2 for a piece-wise sinusoidal distribution 

IIMS(MS) 1 =3 for a TEOl cosine current distribution 

HS(MS) This is a real array which is used to input the length of the MSth 

element. 

HAW S(MS) This is a real array which is used to input the width of the MSth 

element in the case of an aperture antenna. If HAWS(MS)=O, then it is 

assumed to be a dipole. 

Note that the units of the variable HS(MS) and HAWS(MS) can be specified by 

the US command. If wavelength is chosen as the units then all the sources must 

be specified in wavelengths. 

READ: WMS, WPS 

where 

WMS,WPS These are real variables used to define the excitation associated 

with the MSth element. The magnitude is given by WMS and the phase in 

degrees by WPS. 

Note that the program will keep increasing the number of sources in the solution by the 

number of calls to this command unless the NS or NX commands are called to reinitialize 

the source geometry. 
Figure 4.5: Definition of source geometry for dipole antennas. 
)zt 

THSX 

I \ 

I \ 

- "t 

xt 

Figure 4.6: Definition of source geometry for aperture antennas. 
4.14 Command UF: Scale Factor 

This command enables the user to scale the linear dimensions that follow the command by 

' the factor specified. 

- - 

READ: UNITF 

where 

UNITF This is a real variable that is used as a scale factor for all the linear 

dimensions that follow the command. 

4.15 Command UN: Units of Geometry 

This command enables the user to specify the units of all the linear dimensions to be input 

after the command is called. (The exceptions are the source length HS and width HAWS, 

and receiver length HR and width HAWR, see command US.) 

- 

READ: IUNIT 

where 

IUNIT This is an integer variable that indicates the units for the input data 

that follows, such that 

1= meters 

2= feet 

3= inches 

4.16 Command US: Units of Source 

This command enables the user to specify the units of the source length HS and width 

HAWS or receiver length HR and width HAWR to be input after the command is called. 

These variables are in the commands SG, SA, RG, and RA. 

READ: IUNST 

where 

IUNST This is an integer variable that indicates the units for the input data 

HS, HAWS, HR, HAWR that follows, such that if 
O= wavelengths 

1= meters 

2= feet 

3= inches 

Note that if the units are specified to be wavelengths for one source it must be wavelengths for all the sources specified. 
4.17 Command VF: Far Zone Volumetric Pattern 

This command enables the user to define the far zone volumetric pattern coordinate system, 

the pattern cut, and the angular range that is desired. The geometry is illustrated in 

Figure 4.7. 

- 

READ: THCZ, PHCZ, THCX, PHCX 

where 

THCZ,PHCZ These are real variables. They are input in degrees as spherical 

angles that define the 2,-axis of the pattern coordinate system as if it was 

a radial vector in the reference coordinate system. 

THCX,PHCX These are real variables. They are input in degrees as spherical 

. angles that define the xp-axis of the pattern coordinate system as if it was 

a radial vector in the reference coordinate system. 

Note that the new xp-axis and 2,-axis must be defined orthogonal to each other. 

The new y,-axis is found from the cross product of the x,,- and 2,-axes. 

READ: LCNPAT, TPPD, TPPV, NPV 

where 

LCNPAT This is a logical variable that defines the pattern cut desired, such 

that 

T= The theta angle is held fixed while the phi angle is varied. The theta 

angle will then be incremented and another cut will be calculated. 

F= The phi angle is held fixed while the theta angle is varied. The phi 

angle will then be incremented and another cut will be calculated. 

TPPD This is a real variable. It defines the starting angle of the ufixed" angle 

specified by LCNPAT. 

TPPV This is a real variable. It defines the incremental angle of the "fixedn 

angle specified by LCNPAT. 

NPV This is a integer variable. It defines the number of pattern points of the 

"fixed" angle specified by LCNPAT. 

READ: TPPS, TPPI, NPN 

where 

TPPS This is a real variable. It defines the starting angle of the "varying" 

angle specified by LCNPAT. 
TPPI This is a real variable. It defines the incremental angle of the "varyingn 

angle specified by LCNPAT. 

NPN This is a integer variable. It defines the anumber of pattern points of the 

'varyingn angle specified by LCNPAT. 
a. Definition of pattern coordinate system. 

/- PHP = $hp 

* P 

b. Conic pattern cut, LCNPAT=.TRUE.. TPPDzTHP. 

c. Constant Phi pattern cut, LCNPAT=.FALSE.. TPPD=PHP. 

Figure 4.7: Definition of volumetric pattern coordinate system. 

46 
4.18 Command XQ: Execute Code 

This command is used to execute the code so that the results may be computed. After 

execution the code returns for another possible command word. 
Chapter 5 

Interactive Commands 

5.1 Overview 

Facilities for interactive programs vary greatly from one operating system to the next with 

little or no standardization between systems. In spite of this, it was felt that the users of 

this code would benefit immensely from an interactive mode of operation. In order for the 

code to have interactive capability without an excessive amount of development time, the 

developers have used many features of the DEC VAXIVMS operating system. Since many 

engineers presently have access to the DEC VAX, it is felt that this will lead to reasonable 

transportability of the interactive mode for this code. 

This decision has several ramifications for users of the SHADOW code. It means that the 

commands described in this chapter do not exist on computers that don't run VAXIVMS 

Version 4.0 or greater. It also means that this code has been separated into two parts, one 

standard FORTRAN 77 and the other VMS dependent containing the interactive facility, 

with a slightly different main program for the non-interactive code. 

5.2 Command Descriptions 

This section describes the interactive SHADOW commands in detail complete with examples for each. The syntax of the interactive commands is that of the Digital Command 

Language or DCL and for obvious reasons familiarity with the syntax of DCL is assumed 

throughout this chapter. For details about the utilities used to perform this DCL style command parsing, readers are referred to the VMS documentation concerning the Command 

Definition Utility or CDU. 
EXIT 

Causes the program to exit. 

FORMAT EXIT 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions None. 

prompts None. 

command None. parameters 

DESCRIPTION All output files are closed, and control is returned to DCL. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

$ RUN SHADOW 

SHADOW> 

SHADOW> EXIT 

$ 

This example shows how to exit the program. 
HELP 

Displays information about SHADOW commands or help text from 

any other library you specify. - 

FORMAT HELP help-item 

Command Qualifiers Defaults 

/LIBRARY [=library-name] /LIB=SYS$DISK: [I SHADOW 

restrictions The indicated help files must exist. 

prompts None. 

command 

~arameters help-item - 

The help-item is a keyword which is the item you want help on. 

DESCRIPTION The SHADOW help command adheres to the conventions of VMS 

help libraries in form and content. 

COMMAND /LIBRARY [=library-name] 

QUALIFIERS /NOLIBRARY 

Controls whether an alternate help library will be used in the search 

for topics. This qualifier must appear immediately after the HELP 

command or it will be interpreted as part of the helpitem. If you 

specify /NOLIBRARY then no library will be searched. 

EXAMPLES 

SHADOW> HELP SET OUTPUT 

. (SET OUTPUT help message) 

Topic? EXIT 

. (EXIT help message) 

Topic? <RETURN> 

SHADOW> HELP/LIBR=HELPLIB LOGOUT 

(LOGOUT help meeeage from the system help library) 

50 
Topic? <RETURN> 

SHADOW> 

The above examples show how to get help about shadow topics and 

how to access other VMS help libraries with the HELP command 
SHADOW 

Initiates the obscuration calculation for the current antenna location 

and input geometry. - 

FORMAT SHADOW 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions None. Command may be abbreviated "Sn. 

prompts None. 

command . None. parameters 

DESCRIPTION The commands which alter parameters, such as SET WINDOW and 

SET ANTENNA do not initiate shadowing calculations automatically. This is to avoid redundant calculations when several parameters are changed at once. Once desired parameters are set, the 

SHADOW command performs the obscuration calculations and outputs the result. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SET ANTENNA 

Input antenna location in metero: 11,22,32 

Antenna in RCS (meters) : 11.00000 22.00000 32.00000 

Definit system (meters): 11.00000 22.00000 32.00000 

SHADOW> SHAD 

Working ... SHADOW> SET ANTENNA 

Input antenna location in meters: 10,20,30 

Antenna in RCS (meters): 10.00000 20.00000 30.00000 

Definit system (meters): 10.00000 20.00000 30.00000 

SHADOW> S 

Working ... SHADOW> 
The above commands all calculate the projected shadows for two 

different antenna locations on given input geometry. The results all 

go into the same output file, because no "SET OUTPUT" command 

was executed in between "SHADOWn commands. 
SPAWN 

Creates a subprocess for executing DCL commands without exiting 

the SHADOW program. This command is useful for executing DCL 

commands without reinitializing the context of a SHADOW program 

session. 

FORMAT SPAWN conmand-string 

Command Qualifiers Defaults 

None. None. 

restrictions A few restrictions are imposed by VMS. 

oThe RESOURCE-WAIT state must be enabled for the spawning 

process. 

oRequires TMPMBX or PRMMBX user privileges. 

oSPAWN does not manage terminal characteristics. 

Command may be abreviated "$ ", where the blank after the $ is 

necessary. 

prompts 

command 

parameters 

None. 

command-string 

Specifies a DCL command string to be executed in the context of 

the subprocess. SHADOW will wait until the subprocess completes 

executing. If command-string is blank, the subprocess will prompt 

for commands repeatedly. 

DESCRIPTION The details of the spawn command are exactly as documented in the 

DCL dictionary, volume 2 of the VAX/VMS documentation set. 

- - 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SPAWN SHOW USERS 

VAX/VMS Interactive Users 

ll-DEC-1985 08:34:18.72 

Total number of interactive users = 5 

Username Process Name PID Terminal 
CWP6148 CUP6148 00000891 VT1023: 

DF6148 DF6148 OOOOOAFA VT1086: 

EHEJOOO EHNOOO 00000QF8 VT1086: 

LT6199 LT6199 OOOOOAEE VT1081: 

WE6148 WE6148 00000973 VT1082: 

SHADOW> SPAWN 

8 SHO TIME 

11-DEC-1986 08:36:13 

8 LOG 

LT6199-1 job terminated at 11-DEC-1986 08:36:20.90 

SHADOW> 

TTAO : 

TTC4 : 

TTB7 : 

TTA7 : 

TTB2 : 

The above spawn command illustrate how DCL commands may be 

executed without exiting the SHADOW program. 
SET ANTENNA-LOCATION 

Determines the location of the source point, or the center of the 

far-zone sphere for subsequent shadowing calculations, - -- -- 

FORMAT 

- - - - -- 

SET ANTENNA 

Command Qualifiers Defaults 

None. None. 

restrictions 

prompts 

Its recommended that the antenna not be placed in the interior of a 

cylinder. Unusual results may occur if this is done. 

Input antenna location in meters: 

Input antenna location in feet : 

Input antenna location in inches: 

command 

parameters 

None. 

- - 

DESCRIPTION The antenna location consists of the (x,y,z) components of a vector 

in the current units and definition coordinate system, set by the SET 

UNITS and the SET COORDINATE commands, respectively. The 

command does NOT accept the antenna location on the command 

line, but prompts for it instead. The input syntax for the numbera 

is that of an unformatted FORTRAN read. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SET ANTENNA 

Input antenna location in meters: 10,20.30 

Antenna in RCS (meters): 10.00000 20.00000 30.00000 

Definit system (meters): 10.00000 20.00000 30.00000 

This example sets the antenna location to 10.,20.,30. (x,y,z) in the 

current units, which are meters. 
EXAMPLES 

SHADOW> SET UNIT FEET 

SHADOW> SET ANT 

Input antenna location in feet : 10,20,30 

Antenna in RCS (meters): 3.04800 6.09600 9.14400 

Def init system (feet ) : 10.00000 20.00000 30.00000 

SHADOW> 

This example shows how the antenna location is interpreted in the 

units of feet. 
SET COORDINATES 

Sets up a coordinate transformation to be applied to subsequent 

geometry. - - - -- 

FORMAT SET COORDINATES 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions The specified coordinate axes must be orthogonal to one another. 

prompts Please input a translation vector in feet: 

Please input THZP,PHZP,THXP,PHXP in degrees: 

command 

parameters 

None. 

DESCRIPTION The antenna location may be specified relative to an alternative coordinate system. This coordinate system is established via the SET 

COORDINATES command. It does not affect the pattern cut coordinate system. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SET COOR 

Please input a translation vector in feet : 100,200.300 

Please input THZP.PHZP.THXP,PHXP in degrees: 0, -64. 266.6, 46 

* The 'following rotations are used for ALL subsequent inputs: * 

* VRS(1,1)= -0.70711 VRS(1,2)= -0.70711 vRS(1.3)~ 0.00000 * 

* VRS(2,1)= 0.70711 VRS(2,2)= -0.70711 VRS(2,3)= 0.00000 * 

* VRS(3.1)= 0.00000 vRS(3.2)~ 0.00000 VRS(3,3)= 1.00000 * 

The above example shows how a default coordinate system may be 

established. The program echoes the established coordinate axes. 

These may be re-examined at any time with the SHOW COORDINATE command. 
1 u SET FILL-CHARACTER 

Allows selection'of the characters used to fill the output. Can be 

used to highlight particular elements of a geometry. 

FORMAT SET FILL [tag-character] 

Command Qualifiers Defaults 

'/SE~UENTIAL None. 

/PLATE= (num [ , char] ) None. 

/CYLINDER=(num l ,char] ) None. 

i 

restrictions None. 

I 

I prompts None. 

command 

parameters tag-character 

Is any single ASCII character. If a lowercase letter is desired, enclose 

the letter in double quotes, i.e. 'a". The default is "Xn. 

DESCRIPTION In order to better trace portions of a geometry through the shadowing process, the ability to tag a particular cylinder or plate has been 

added. The tag setting remains in effect until altered by a subsequent 

"SET FILLn command. The highlighted plate or cylinder appears in 

its entirety in the output regardless of its actual position in the hierarchy of obscuration. This allows the user to be absolutely certain 

of the shadowing caused by the particular highlighted geometry. 

There are three tagging modes available. One is sequential tagging. 

In this mode, the code attempts to assign a unique character in the 

output to each plate/cyIinder in the input. Plates are numbered 

beginning with "A" and increasing through the ASCII character sequence, and cylinders are treated the same way beginning with *ln. 

The second mode causes all parts of the geometry to be shaded with 

a single specified character such as "Xn. In this total obscuration 

mode, any one part of the input geometry is not easily identified - 

rather the the total obscuration is presented homogeneously. It is 

specified using SET FILL without qualifiers. The third mode is the 

same as the second mode, but with the added feature of one single 

plate (or cylinder) highlighted with a different character. In this 

mode the relation of one part of the geometry to the rest is clearly 
visible. This mode can be very helpful when isolating particular 

parts of a geometry that are shadowing the source. 

COMMAND /SEQUENTIAL 

QUALIFIERS - 

The /SEQUENTIAL qualifier selects the first mode of obscuration, 

sequential tagging of the input geometry. This qualifier may not be 

specified with a tag-character parameter nor with any of the other 

qualifiers. 

/PLATE=num 

/PLATE= (num ,char) 

The /PLATE qualifier selects the third mode of obscuration, homogenous tagging with highlighting of a particular plate. 

The num argument is the number of the plate to be tagged. It is a 

required argument. The char argument is the ASCII character to be 

used when tagging the plate. It is optional, and defaults to "Pn if 

unspecified. 

This qualifier may not be specified in combination with other qualifiers. It is mutually exclusive with the /CYLINDER qualifier. 

/CYLINDER=num 

/CYLINDER= (num , char) 

The /CYLINDER qualifier selects the third mode of obscuration, 

homogenous tagging with highlighting of a particular cylinder. It 

works exactly like the /PLATE qualifier. 

The num argument is the number of the cylinder to be tagged. It 

is a required argument. The char argument is the ASCII character 

to be used when tagging the cylinder. It is optional, and defaults to 

"C" if unspecified. 

This qualifier may not be specified in combination with other qualifiers. It is mutually exclusive with the /PLATE qualifier. 

EXAMPLES 

SHADOW> set fill 

No individual plates/cylinders are tagged 

All geometry marked by [XI 

SHADOW> set fill $ 

No individual plates/cylinders are tagged 

All geometry marked by [$I 

SHADOW> set fill * /plate=6 

Plate 6 is tagged with [PI 
All, other geometry tagged with I*] 

SHADOW> set fill * /plate=(7,%) 

Plate 7 is tagged with rL1 

All other geometry tagged with [*I 

SHADOW> set fill 9 /cyl=(2,$) 

Cylinder 2 tagged uith [$I 

All other geometry tagged uith 141 

SHADOW> set fill /plate=Q /cy1=4 

XCLI-W-CONFLICT , illegal combination of command elements 

SHADOW> set fill 9 /cyl=(2,$) /seq 

XCLI-W-MAXPARM, too many parameters - reenter command with fewer parameters 

SHADOW> set fill /seq ! q /cy1=(2,$) /seq 

All cylinders/plates sequentially tagged 

The above examples are obvious except possibly the last three. They 

show that the qualifiers are not allowed in combination, that the /SEQUENTIAL qualifier does not allow specification of a fill character, 

and that the DCL syntax ignores everything after an exclamation 

point. 
SET INPUT-SET 

Reads an input set from a named file 

- 

FORMAT SET INPUTSET filename 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions The named input file must exist. 

prompts input set: 

command filename parameters 

The name of the input set. It may be any valid VMS filename, 

including a logical name. The default filetype is .INP. 

0 

DESCRIPTION The set output command has the dual role of designating an input 

file and simultaneously causing that input set to be read and prepared for subsequent shadow commands. The current output files A 

are NOT affected by this command so that several outputs may be 

concatenated. Normally though, this command would be entered 

after a SET OUTPUT command. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SET OUT ANSS1 

Plotting file is: USERl:[RJM.NASlANSSl.PLT;l 

Printer file is: -NLAO:[IFOR007.DAT; 

Input echo file: USERl:[RJM.NASlAN6S1.LIS;l 

SHADOW> SET INPUT AN6S1 

The current input set is 

USER1 : [RJM. NAS] AN6S1. INP ; 1 

The SET OUTPUT command is used to set the output files - the 

printer output is discarded by default. The input set AN5Sl.INP is 

then read and processed by the SET INPUT command. 
SET KEYPAD-MODE 

Causes the keypad state to change to non-numeric. 

FORMAT SET [NO] KEYPAD 

I 

Command Qualifiers Defaults 

 one. None. I 

restrictions ~dne. 

I 

prompts 1 None. 

I 

command , 

parameters 

I None. 

! 

CRlPTlON ~hk keypad of most DEC terminals can be in one of two atates, numeiic mode or keypad mode. In numeric mode, the keypad buttons 

redesent the numbers and symbols printed on the keys. In keypad 

mode, the keys may be defined to provide functions, in much the 

samk way as they do in DCL. 

COMMAND 

QUALIFIERS 

SET KEYPAD enables the defined-key feature of SHADOW, and 

SET NOKEYPAD returns the keypad to numeric-entry mode. 

The keypad definitions are made in a session startup file called 

SHADOW.KPD; in the current default directory. 

None. 

I 

EXAMPLES 

I 

SHADOW SET KEYPAD 

The keyboard is in keypad mode. 

SHADOW> SET NOKEYPAD 

The keyboard is not in keypad mode. 
SET OUTPUT 

Determines the names of new output files and closes current output 

files. 

FORMAT SET OUTPUT filename 

Command Qualifiers 

/PLOTTABLE 

/PRINTABLE 

/ECHOING 

~ - -- . 

Defaults 

/PLOTTABLE 

/NOPRINTABLE 

/ECHOING 

restrictions The filename must be a valid VMS filename. v 

prompts filename: - 

command 

parameters filename 

The name(s) of the newly created output file(s). 

DESCRIPTION There are three different outputs from the shadow program. One 7 

is an echo of the input set from the input processor. Another is 

a line printer output of the shadow map. The third is an output 

suitable for input to a separate plotting program. The set output r( 

command opens these files for the code. The name of the file opened 

is specified as the filename parameter. The filetypes are set by the 

command automatically, so that only the filename need be specified. n 

COMMAND 

QUALIFIERS 

/PLOTTABLE 

/NOPLOTTABLE 

Causes a plottable output file to be produced. This is the default. 

Specifying /NOPLOT will override this default. 

/PRINTABLE 

/NOPRINTABLE 

Causes an output file to be produced which is suitable for printing 

on a standard line printer. /NOPRINT is the default. Specifying 

/PRINT will override this default. 

Causes the input echo to be saved in a file when a new input set is 
read. /ECHOING is the default. Specifying /NOECHO will override 

this default. 

EXAMPLES 

SHADOW> SET OUT ANSS1 

Plotting file is: USERI:[RJM.NASIAN6Sl.PLT;i 

Printer file is : ,N~AO : D FOR007. DAT ; 

Input echo file: USER~:[RJM.NAS]AN~SI.LIS;~ 

SHADOW> SET OUT ANSS'I /PRINT 

Plotting file is : US~I : [RJM . NASI AN6S1. PLT ; 2 

Printer file is : USER1 : [RJM . NASI AN6S1. PRT ; 1 

Input echo file : USERI : [RJM . NAS] AN6S1. LIS ; 2 

SHADOW> SET OUT AN~S~ /NOPLOT /NOECHO /PRINT 

Plotting file is: -N~AO: []FOROlO.DAT; 

Printer file is : USE(^ : [RJM. WAS] AN6Sl. PRT; 2 

Input echo file: ,NLAO:[]FOR006.DAT; 

SHADOW, SET OUT ANSSI/ 

Plotting file is: USERl:[RJM.NAS]ANSSl.PLT;3 

print& file is : -NLA~: [I FOR007 .DAT ; 

Input echo file : USER^ : [RJM.NASIAN6S1 .LIB; 3 

T d e above examples show the operation of the SET OUTPUT command. Note that the printer file is not produced by default, and the 

device NLAO: (the null device) is where the output is discarded; 
SET PATTERN-CUT 

Specifies the pattern cut coordinate system. 

FORMAT SET PATTERN-CUT - - - - 

Command Qualifiers 

None. 

-- - 

Defaults 

None. 

restrictions The specified coordinate axes must be orthogonal. rl 

prompts Please input THZP,PHZP,THXP,PHXP in degrees: 

command None. 

parameters rn 

DESCRIPTION The shadow map window is specified relative to the pattern-cut coordinate system. This system can be changed to facilitate easier 

specification of this window relative to the blocking object coordinate system. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SET PAT 

Please input THZP,PHZP,THXP,PHXP in degrees: 0, -64, 266.6, 46, 0, 136 

* The following rotations are used for ALL subsequent inputs: 

* VPC(1.1)= -0.70711 VPC(1,2)= -0.70711 VPC(1,3)= 0.00000 

* vPC(2.1)~ 0.70711 VPC(2,2)= -0.70711 VPC(2,3)= 0.00000 

* VPC(3,1)= 0.00000 VPC(3,2)= 0.00000 VPC(3,3)= 1.00000 

The pattern-cut coordinate system shown has been set up. 
SET SCALE-FACTOR 

Sets a new value for the uniform scale factor. 

FORMAT SET SCALE-FACTOR 

Command Qualifiers Defaults 

None. None. 1 

restrictions . ~hk male factor may not be specified on the command line. 

prompts I Please input a uniform scale factor: 

1 

command ! 

parameters Node. 

- -- - - - -- - - --- - 

DESCRIPTION In &der to allow for more flexibility in specifying input, an additional 

scale factor may be applied to numerical inputs. The default value 

of this command is 1. 

COMMAND 

QUALIFIERS 

I 

None. 

EXAMPLES 

SHADOW> SET SCALE 

Please input a uniform scale factor: 6.6 

The uniform scale factor is 6.60000000 

The uniform scale factor has been changed to 5.5. 
SET UNITS 

Sets the default units for the entry of numeric values. Allowable 

units are Meters, Feet, Inches. - 

FORMAT SET UNITS keyword 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions 

- 

None. 

prompts 

- ~~ 

inches, feet, or meters: 

command 

parameters Keyword may be one of the following: 

o METERS 

o FEET 

o INCHES 

DESCRIPTION When the antenna location is set, these are the units applied to the 

specified position. Internal calculations are always done in meters. 

COMMAND None. QUALIFIERS 

EXAMPLES 

SHADOW> SET UNI FEET 

This example sets the default units to feet. 
SET WINDOW 

Sets parameters for windowing of the output. 

--- 

FORMAT SET WINDOW 

I 

Command Qualifiers Defaults 

 one. None. 

restrictions 

prompts 

 he maximum span of theta must be less than 180 degrees. The 

mhximum span of phi must be less than 360 degrees. The maximum 

rebolution is a function of the specified range for both theta and phi. I None of these parameters is specified on the command line. 

I Please enter a new range for theta (lower,higher): 

Please enter a new THETA resolution in degrees/pixel: 

~lkasenter a new range for phi (lower,higher): 

~l/ase enter a new PHI resolution in degrees/pixel: 

command 1 None. parameters 

DESCRIPTION In order to be more flexible on the presentation of the output, a windowing feature was included so that portions of theta-phi space may 

be mapped onto a larger output surface. The set window command 

does this by prompting for the desired range of displayed theta and 

phi, and the desired levels of resolution. The default window displays 

thelentire range of theta and phi at a resolution of 2 degrees/pixel 

in both directions. 

COMMAND I 

None. QUALIFIERS 

EXAMPLES 

SHADOW> SET WINDOW 

The current range of theta in degrees is 0.0000000E+00 to 180.0000 

with a resolution of 2.000000 degreedpixel. 

The current range of phi in degrees is 0.0000000E+00 to 360.0000 

with a resolution of 2.000000 degreedpixel. 

Please enter a new range for theta (lower,higher): 30.40 

Please enter a new THETA resolution in degrees/pixel: .6 

Please enter a new range for phi (lower,higher): 46.90 
Please enter a new PHI resolution in degreedpixel: .6 

The current range of theta in degrees is 30.00000 to 40.00000 

with a resolution of 0.6000000 degreedpixel. 

The current range of phi in degrees is 46.00000 to 90.00000 

with a resolution of 0.6000000 degrees/pixel. - 

The set window command above first displays the current window 

settings (which also happen to be the default settings), then prompte 

for new values. The new values are then also shown. 
SHOW ANTENNA-LOCATION 

Display the current antenna position. 

FORMAT SHOW ANTENNA-LOCATION 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions None. 

I prompts None. 

command 

parameters 

DESCRIPTION ~h'e antenna location is displayed in both the current default units 

and the Reference Coordinate System. I 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SHO ANT 

Antenna in RCS (meters): 

Definit system (meters): 

This command displays the current antenna location in both the 

reference coordinate systems (RCS) and the current default units, 

which are also meters in this example. 
SHOW COORDINATES 

Displays the default transformation applied to antenna placement 

commands. - 

FORMAT SHOW COORDINATES 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions None. 

prompts None. 

command None. parameters 

' DESCRIPTION The antenna location is input in terms of an antenna coordinate 

system. This command displays the orientation of this system. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SHO COORD 

* VRS(1.1)= 1.00000 VRS(1,2)= 0.00000 VRS(1,3)= 0.00000 

* VRS(2,1)= 0.00000 VRS(2,2)= 1.00000 VRS(2.3)= 0.00000 

* vRS(3.1)~ 0.00000 VRs(3.2)~ 0.00000 VRS(3,3)= 1.00000 

In this example, the antenna coordinate system'is coincident with 

the reference coordinate system. - 
SHOW FILL-CHARACTER 

Displays the current output fill modes. 

FORMAT SHOW FILL 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions None. 

prompts N b , ne. 

command 

' parameters 

DESCRIPTION ~de output may be generated in one of three modes. For a detailed 

description of the possible modes, see the SET FILL command. 

COMMAND 

QUALIFIERS 

EXAMPLES 

SHADOW> SHOW FILL 

Plate 6 is tagged with [PI 

All other geometry tagged with I*] 

In the above example, the sixth plate of the input set is tagged with 

the kSCII character "Pn. The SET FILL command has many more 

examples'. ' 
SHOW INPUT-SET 

Displays the name of the file from which the current geometry was - 

defined. 

FORMAT SHOW INPUTSET 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions 

--- 

None. 

prompts None. . 

command 

parameters None. 

DESCRIPTION The input set is determined with the SET INPUT command. The 

SHOW INPUT command echoes this input set filename. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SHOW INPUT 

The current input set is 

USER1 : [RJM. NASI AN5S1. INP ; 1 
SHOW KEYPAD-MODE 

Displays the current state of the keyboard. 

FORMAT SHOW KEY PAD _MODE 

- - -- -- - - 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions Nbne. 

prompts None. 

command ~dne. parameters --- - - 

DESCRIPTION ~de keypad of most DEC terminals can be in one of two states, nu- 

.merit mode or keypad mode. In numeric mode, the keypad buttons 

represent the numbers and symbols printed on the keys. In keypad 

mode, the keys may be defined to provide functions, in much the 

same way as they do in DCL. The keypad definitions are established 

by a startup file called SHADOW.KPD in the current default directory. 

COMMAND 

QUALIFIERS None. 

SHADOW> SHOW KEYPAD 

The keyboard is not in keypad mode. 

The keypad was not in keypad mode in this example. 
SHOW OUTPUT 

Displays the names of the current output files. 

FORMAT SHOW OUTPUT - 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions None. 

prompts None. 

command None. 

parameters 

DESCRIPTION There are three possible output files produced by the shadow program. One is for plotting with a separate plotting program and has a 

filetype of .PLT. The second is a line-printer formatted output with 

a filetype of .PRT. The third is the input set listing echo, which may 

be redirected into a file. Its filetype is .LIS. 

- -- 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SET OUTPUT EXAMPLE3 /PRINT 

SHADOW> SHOW OUTPUT 

Plotting file is: USERl:[RJM.NAS]EXAMPLE3.PLT;l 

Printer file is: USER1 : [RJM. NASlEXAMPLE3. PRT; 1 

Input echo file: USERl:[RJM.NASIEXAMPLE3.LIS;l 

This example shows how a SET OUTPUT command creates the 

names shown for output files. See the SET OUTPUT command 

description for more details. 
SHOW PATTERN-CUT 

Displays the pattern-cut coordinate system transformation matrix. 

FORMAT SHOW PATTERN-CUT 

Command Qualifiers 

None, 

Defaults 

None. 

restrictions None. 

prompts None. 

I 

command None. parameters 

DESCRIPTION The shadow map window is specified relative to the pattern-cut co- 

'ordinate system, This system can be changed to facilitate easier 

specification of this window relative to the blocking object's coordinate system, that is, the reference coordinat system. For more 

information, see the SET PATTERN command on page 66. 

---- - - - - 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SHOW PATT 

I The following rotations are used for ALL subsequent inputs: * 

* VPC(1 ,I)= -0.70711 VPC(~,~)= -0.70711 VPC(1,3)= 0.00000 * 

* .VPc'(2,1)= 0.70711 VPc(2,2)= -0.70711 VPC(~,~)= 0.00000 ' * 

*. VPC(3,l)t 0.00000 Vpc(3,2)= 0.00000 VPC(3,3)= 1.00000 * 

The pattern-cut coordinate system shown has been set up. 
SHOW SCALE-FACTOR 

Displays the uniform scale factor currently in effect. 

FORMAT SHOW SCALE-FACTOR - 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions None. 

prompts None. 

.' command 

parameters 

None. 

DESCRIPTION The SET SCALE-FACTOR command can set a uniform scale factor 

on subsequent antenna inputs. It allows an extra scaling on the 

inputs. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SHOW SCALE 

The uniform scale factor is 1.00000000 

The above scale factor is the default. It has not been changed with 

SET SCALE. 
SHOW UNITS 

Displays the current units in effect. Valid units are meters, feet, and 

inches. 

FORMAT SHOW UNITS 

Command Qualifiers 

None. 

Defaults 

None. 

prompts 

---- 

None. 

command 

parameters Ndne. 

---- - - - --- - - - - - - - -- -- - 

DESCRIPTION There are three different units in which antenna locations may be 

specified. This command displays the units currently in effect. The 

SET UNITS command changes the default units. 

COMMAND 

QUALIFIERS 

-- - 

None. 

EXAMPLES 

SHADOW> SHOW UNITS 

The current units are feet 
SHOW WINDOW 

Displays the current window parameters. 

FORMAT SHOW WINDOW - 

Command Qualifiers 

None. 

Defaults 

None. 

restrictions None. 

prompts None. 

command 

parameters 

None. 

DESCRIPTION The output can be windowed onto a smaller range of theta or phi, 

with any desired resolution. The parameters for this windowing are 

established by the SET WINDOW command. 

COMMAND 

QUALIFIERS None. 

EXAMPLES 

SHADOW> SHOW WIND 

The current range of theta in degrees is 0.0000000E+00 to 180.0000 

with a resolution of 2.000000 degreedpixel. 

The current range of phi in degrees is 0.0000000E+00 to 360.0000 

with a resolution of 2.000000 degrees/pixel . 

In this case, the window is set to its default range with a resolution 

of two degreeslpixel. 
Chapter 6 

I 

Interpretation of the Output 

The final product of the obscuration code, SHADOW, is a map of the projected shadow 

of a defined object onto the far zone sphere with its center at the antenna location. The 

map is composed of pixels with the size and range specified by the user. The obscuration 

code provides complete control over the parameters needed to define the map and provides 

a line printer output or a plottable file that can be used by an external plotting code. This 

chapter outlines the details of defining, obtaining, and interpreting the shadow map. 

For this discussion, the far zone sphere can be viewed as being ironed out into a flat 

plane, that is, a Mercator's projection with the angle phi along the x axis and the angle 

theta along the y axis. Using the VF non-interactive command or the SET WINDOW 

interactive command, the user can choose starting angles, incremental step size which is 

the resolution of the map, and the total number of steps or pixels for both the theta and 

phi angles. This, of course, also dictates the stopping angles of the map which it computes. 

The default is for theta to vary from 0 to 180 degrees in steps of 2 degrees for a total of 

91 pixels, and for phi to vary from 0 to 360 in steps of 2 for a total of 181 pixels. The 

interactive command SET WINDOW allows these parameters to be changed at any time 

during a session. It asks for the starting and stopping angle and the resolution which is 

the step size and it computes the number of pixels for each angle. These angles are defined 

with respect to the pattern coordinate system, which is specified by the first set of angles 

in the VF command or by the SET PATTERN command. The default is for the pattern 

coordinate system to be the same as the reference coordinate system. 

As discussed in Chapter 2, the code computes the shadow by first projecting the objects 

border onto the far zone sphere and then filling in between the borders. A pixel is considered 

to be filled if the border at least passes through more than half the distance to the center 

of a pixel. It determines this by rounding the theta and phi angles defining the border to 

the nearest integer with respect to the resolution size of the pixel, which is the step size. 

This sometimes appears to produce a ragged border around the edges of the shadow if the 

border is very curved. Note that a straight edged plate projects a shadow that is curved 

in border. In addition, this is dependent on the coordinate system in which the shadow is 

viewed. Chapter 7 presents specific examples of these types of maps. 

The shadow is represented by an ASCII character being placed in an array corresponding 

to the integcrized theta and phi angles. A clear viewing point is left blank. The choice of 

the character that is placed in the pixel can be controlled by the user. The default is for 

an "Xn to be used as a fill character. Interactivly this can be changed using the SET FILL 
command. Noninteractivly, these are hard-wired into the source code. 

For debugging purposes or so that the user can get a feel for which plates and cylinders 

are shadowing which regions of space a highlighting feature has been provided. The SET 

FILL/SEQUENTIAL command tags each plate and cylinder with its own uniquie fill char- . 

acter. The first plate starts with "A" and each succeeding plate is incremented up by one 

ASCII character. The first cylinder starts with "1" and each succeeding cylinder is incremented up by one ASCII character. Note that if there are a lot of plates and/or cylinders, 

the fill characters will eventually get into some of the more seldom used ASCII characters. 

Also note that in this mode of filling, the code superimposes the latest calculated shadow 

for a plate or cylinder on top of the shadow map. This means that the character in a pixel 

for a finished map will represent the last object that the code calculated a ehadow for and 

not the object that is located closest to the observer. 

In order to get around the ambiguous behavior of highlighting the plates and cylinders 

by order of processing rather than by location, the user can instead use the standard fill 

character for all plates and cylinders and highlight one particular specified object. The 

command SET FILLIPLATE = (number,character) or SET FILLICYLINDER = (number,character) will highlight the chosen plate or cylinder against the regular fill character. 

The plate or cylinder options are mutually exclusive. It represents the shadow of the whole 

plate or cylinder that is tagged. A non interactive command has not been provided for 

these fill features. The user can change the fill characters and mode in the INIT subroutine. 

The output that the user sees can come in three forms. The first type of output comes 

from an echo of the command set that is read from the input file on logical unit #5. The 

output is sent to logical unit #6, which is normally assigned to a default file type of .LIS 

on a VAX in the interactive mode. An ASCII file of the shadow map is written to logical 

unit #7, which is normally assigned to a default file type of .PRT on a VAX. A binary file 

of the shadow map that can be used to transfer information to another code to plot the 

map is sent to logical unit #lo, which is normally assigned to a default file type of .PLT 

on a VAX. 

In the interactive mode, the input set can be opened using the SET OUTPUT command. The output files can be opened and closed using the SET OUTPUT /ECHOING, 

/PRINTABLE, /PLOTTABLE commands, respectively. In the non-interactive mode, they 

can be controlled by using system commands, such as ASSIGN on the VAX. In the interactive mode, the output files should generally be set first, so that the code will have the 

desired information as to where to sent the echo back information. In addition, once the 

code is run and it is desired to see the results, it is possible to print or plot the results using 

the SPAWN ("$") command. The files that are desired to be printed or plotted, however, 

must be closed first, that is, the SET OUTPUT command should be given again reassigning 

the files to another name, a null device, or the printing device. This will close the files and 

allow them to be accessed. Of course, it is important to remember to reopen them after the 

user is finished and wants to run more results. Presently, the echo, printable, and plottable 

map files will accumulate information until they are closed. 

Generally, the code will be used to produce plottable files of the shadow maps with the 

printable file being used for debug purposes. Plotted maps are small and nicer to look at. 

Unfortunately, graphical routines are presently system dependent. A plotting code for a 

NCAR [5], has been provided, however, in Chapter 13. This is one example of how the 
data of the shadow map can be plotted. Examples of both the printed and plotted maps 

are illustrated in the examples of Chapter 7. It should be noted that due to the limited 

amount of space across the width of a line printer, a printed map will be broken up into 

widths that will fit onto the width of the paper if it is too wide. The map will come out in 

aa many etrips as necessary to produce the whole map. Plotted maps should not have this 

problem since the individual pixels can be graphed very close together. 
Chapter 7 

Examples 

The following examples are used to illustrate the various features of the SHADOW computer code. Each example is designed to show how a set of non-interactive and interactive 

commands can be put together to solve a problem. The beginner can use the examples 

in this chapter to learn more about the code. In addition, these examples can be used to 

ensure that the code is operating correctly on your system. These examples were run on a 

DEC VAX 111780 computer using version 4 of the VMS operating system. 

The shadow maps shown here are presented mostly with the line printer output, since 

this is generally the most transportable. Plotted output would normally be preferred in a 

design situation. A few examples of this type of output are also given. 
7.1 Example 1: A Plate 

The first example is a four-cornered plate centered at the origin and situated in the X-Y 

plane. The antenna is located on the positive Z axis. It was generated with the following 

input files and commands. The commands were: 

$ RUN SHADOW 

SHADOW> SET OUT PLAEXl/NOPLOT/PRINT 

SHADOW> SET INP PLAEX 

SHADOW> SET UNI METERS 

SHADOW> SET WIND 

90, 180 

1.0 

0. , 360 

6. 

SHADOW, SET ANT 

BHADOW, 0,0,8 

SHADOW> SHADOW 

SHADOW> EXIT 

f 

The input set defining the plate was the following: 

CM: SIMPLE PLATE TEST SET 

CE: RCS INPUT SET 

UN : 

1 

PC: THE PLATE IS 400 SQUARE-METERS. 

4 ,O 

-10.0, +10.0, 0.0 

-10.0. -10.0, c.0 

+lO.O# -10.0, 0.0 

+10.0, +10.0# 0.0 

XQ : 

EN : 
The output this produced was the following: 

AIIIWWA (1~81 = ( o.oooo. o.oooo. 8.00oo ) 11 IQIIIS IKWI nr: mli: rur.ns.tuorun.Irrlc 
7.2 Example 2: A Different Plate 

This example is another four-cornered plate, but this time the antenna is located at the 

origin, and the plate is centered along the positive Y axis and is normal to it. 

The commands were: 

$ RUN SHADOW 

SHADOW> SET OUT PLAEX2/NOPLOT/PRINT 

SHADOW> SET INP PLAEX2 

8HADOW> SET UNI METERS 

SHADOW> SET WIND 

0, 180 

2.0 

O., 180 

6. 

SHADOW, SET ANT 

o,o,o 

SHADOW> SHADOW 

SHADOW> EXIT 

$ EXIT 

The input set defining the plate was the following: 

CM: SIMPLE PLATE TEST SET 

CE: RCS INPUT SET 

UN : 

1 

PC: THE PLATE IS 400 SQUARE-METERS. 

4 0 

-10.0, 8, +10.0 

-10.0, 8, -10.0 

+10.0, 8, -10.0 

+10.0, 8, +10.0 

XQ : 

EN : 
The output generated by the code was the following: 
7.3 Example 3: The First Plate Revisited 

The current example is deceptive. Both the input geometry and the source location are 

identical with the first plate example, but the obscuration output is identical to the second 

example! A closer of the input sets reveals the the .two examples are really the same 

geometry, but defined in different orientations with respect to the Reference Coordinate 

System. The third example takes advantage of this fact and uses the SET PATTERN-CUT 

command to reorient the coordinate system of the antenna. The result is that while the 

geometry is defined the same as the first example, the output resembles the second example. 

. The commands to generate the example were: 1 

$ RUN SHADOW 

SHADOW> SET OUT PLAEX3/NOPLOT/PRINT 

SHADOW> SET IHP PLAEX 

SHADOW, SET UNI METERS 

SHADOW> SET WIND 

0,180 

2.0 

o., 180 

6. 

SHADOW> SET ANT 

0,0,8 

SHADOW> SET PATT 

QO., +QO., 90.. 0. 

SHADOW> SHADOW 

SHADOW> EXIT 

$ EXIT 

The input set defining the plate was the same one used in example one. It is: 

CM: SIMPLE PLATE TEST SET 

CE: RCS IIIPUT SET 

UN : 

1 

PC: THE PLATE IS 400 SQUARE-METERS. 

4 0 

-10.0, +lO.O, 0.0 

-10.0, -10.0, 0.0 

+10.0, -10.0, 0.0 

+10.0, +10.0, 0.0 

xq : 

Ell : 
The output generated by the code was the following: 
7.4 Example 4: A Non-Interactive Version of Example 1 

This example illustrates an input set for non-interactive use of the code. The main program 

has been changed to the non-interactive version and non-interactive subroutines were not 

linked into the code. The input set is the same as Example 1, except that the source and 

window have been define using the SG and VF commands, respectively. Note that these 

commands can also be used in the interactive node also to hard wire the antenna location 

and window as a default case. The output is not shown here because it is identical to that 

of Example 1. I 

The input set defining the plate is the following: 

CM: SIMPLE PLATE TEST SET 

CE: RCS INPUT SET 

UN : 

1 

PG: THE PLATE IS 400 SQUARE-METERS. 

4 0 

-10.0, +10.0, 0.0 

-10.0, -10.0, 0.0 

+10.0, -10.0, 0.0 

+10.0, +10.0, 0.0 

SC: THE SOURCE LOCATION 

0. ,O. ,8. 

0.,0.,90.,0. 

-1,0.6,0. 

1. ,o. 

VF': WINDOW SIZE 

0.,0.,90.,0. 

T,O.,2.,91 

0. ,2. ,181 

xq : 

EN : 
7.5 Example 5: An Elliptic Cylinder 

This example is consists of one elliptic cylinder centered on the origin with its axis directed 

along the Y axis. Three different source locations are presented with this single example. 

The commands were: 

- 

$ RUN SHADOW 

SHADOW> SET OUT CYLEXl/tSOPLOT/PRINT 

SHADOW> SET INP CYLEXl 

SHADOW> SET UNI METERS 

SHADOW> SET WIlSD 

130,180 

0.65655566 

0. ,360 

6. 

! 

! An overhead view of the cylinder, which is centered on the origin, 

1 with radii of 1 and 1, with a a length of 1 meter. 

! 

SHADOW> SET ANT 

0,014 

SHADOW> SHADOW 

! 

! A broadside look at the cylinder. 

! 

SHADOW> SET WIlSD 

45,135 

1.0 

220. ,310 

1.25 

SHADOW> SET ANT 

0,4,0 

SHADOW> SHADOW 

I 

! Now a look at the same geometry along the axis of the cylinder. 

! 

SHADOW> SET ANT 

4,0,0 

SHADOW> SET WIND 

45,135 

1 .o 

130. ,220 

1.26 

SHADOW SHADOW 

SHADOW EXIT 

$ EXIT 

The input set defining the plate was the following: 

CM: SIMPLE AIRCRAFT 

CE: RCS INPUT SET 

UN : 
1 

CC: FIRGT CYLINDER 

0. ,o. ,o. 

90.,0.,0.,0. 

2 

1,l 1. 

l.,l., -1. 

xq : 

EN : 
The output generated by the code was the following: 


~xam~le 6: Two Elliptic Cylinders 

This example is consists of two elliptic cylinders equidistant from the origin with axes 

coincident and directed along the Y axis. Three different source locations are presented 

with this single example. 

The commands were: 

$ RUN SHADOW 

SHADOW> SET OUT CYLEXP/NOPLOT/PRINT 

SHADOW, SET INP CYLEX2 

SHADOW> SET UNI METERS 

SHADOW, SET WIND 

130,180 

0.55556656 

0. ,360 

5. 

t 

I An overhead view of the 2 cylinders with radii of 1 and 1. 

t with a length of 1 meter each. 

t 

SHADOW> SET FILL /CYL=l 

SHADOW> SET AtiT 

0,0,4 

SHADOW> BHADOW 

I 

SHADOW> SET WIND 

46,135 

1.0 

220. ,310 

1.26 

SHADOW> SET ANT 

0,4,0 

SHADOW> SHOW FILL 

SHADOW> SHADOW 

! 

SHADOW> SET AfIT 

4,0,0 

SHADOW> SET WIND 

45,136 

1.0 

130. ,220 

1.26 

SHADOW> SHOW FILL 

SHADOW> SHADOW 

SHADOW> EXIT 

$ EXIT 

The input set defining the plate was the following: 

CM: SIMPLE AIRCRAFT 

CE: RCS INPUT SET 

UN : 
1 

CC: FIRST CYLINDER 

0. ,-2. ,o. 

90.,0.,0.,0. 

2 

1,l 1. 

1.#1., -1. 

CC: SECOND CYLINDER 

0. ,+2. ,o. 

90.,0.,0.,0. 

2 

1.1, 1. 

l.,l., -1. 

xq : 

EN : 
The output generated by the code was the following: 

CCCCCCCC 

CCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCCCCCCCCCC 

cCCCCCCCCCCCCCCCCCCCcCCCCCCCCcCCCCCCC 

------ CCCCCCCCCCCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCC 

CCCCCCCC 

CCCCCCC 

CCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCcCCCCCcCCCccc 

CCCCCCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCCCCCCC~ 

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 

CCC~CCCCCCCCCCCCCCCC~CCCCC~CCCC 

CCCCCCCcCCCCCCCCCCCCCCCCcCCCCCC 

CCCCCCCCCCCCcCCCccCcCcCCCCcCCCCCC 

CCCCC~CCCCCCCCCCCCCCCCCC~CCCCCCCC 

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 

CCCCCCCCCCCCCC~CCCC~CCCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCcCCCCCCCCCCC 

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 

CCCCcCCCCcCcCCCcCCcCCcCCCCCCC 

CCCCCCCCCCCCCCCCcCCCCCcCCCCCc 

CCCCCCCCCCCCCCCCCCCCCCCCCCC 
7.7 Example 7: A Space Station Model 

This example uses a space station, shown in Figure 7.1, that has been provided by NASA, 

Langley. The computer model is illustrated in Figure 7.2. It is an demonstrates how to use 

the windowing and highlighting commands (SET FILL) to effectivly show obecuration. 

The commands were: - 

$ RUN SHADOW 

SHADOW> SET OUT AN6S1 /PRINT/MOECHO 

SHADOW> SET INP AN6SI 

SHADOW> SET UNI FEET 

SHADOW> SET WIND 

0,180 

2.0 . 20. ,290 

2.5 

! 

! Display ONLY plate 6. 

1 

SHADOW> SET FILL " /PLATE=6 

SHADOW, SET ANT 

25, 16. 256.5 

SHADOW> SHADOW 

! 

! Now make plate 6 stand out from the crowd 

! 

SHADOW> SET FILL I' ! " /PLATE=(6, $1 

SHADOW> SET ANT 

26, 15, 256.5 

SHADOVl> SHADOW 

$ EXIT 

The input set defining the plate was the following: 

CM: *********CASE AII6SI*+******** 

CM: ********OBSCURATIO!I********** 

CE : 

LP: 

F 

UN: UNITS 111 FEET 

2 

CM: UPPER BOOM 

CE : 

PC: BOTTOM 

4 0 

4.5 49.5 387. 

4.5 -49.5 387. 

-4.6 -49.5 387. 

-4.5 49.5 387. 

PC: +X SIDE 

4 0 

4.5 49.6 396. 
4.6 -49.6 396. 

4.6 -49.6 387. 

4.6 49.6 387. 

CM: UPPER KEEL 

CE : 

PC: -Y #1 

4 0 

4.6 -4.6 270. 

4.6 -4.6 387. 

-4.6 -4.6 387. 

-4.6 -4.6 270. 

PC: +Y #1 

4 0 

4.6 4.6 270. 

-4.6 4.6 270. 

-4.6 4.6 387. 

4.6 4.6 387. 

PC: +X RIDE 

4 0 

4.6 4.6 387. 

4.6 -4.6 387. 

4.6 -4.6 270. 

4.6 4.6 270. 

CM: LOWER KEEL & EXTENSION 

CE : 

PC: +X SIDE 

12 0 

4.6 22.6 0. 

4.6 22.6 99. 

4.6 4.6 99. 

4.6 4.6 261. 

4.6 -4.6 261. 

4.6 -4.6 99. 

4.6 -22.6 99. 

4.6 -22.6 0. 

4.6 -13.6 0. 

4.6 -13.6 64. 

4.6 13.6 64. 

4.6 13.6 0. 

PC: -Y #l 

4 0 

4.6 -22.6 0. 

4.6 -22.6 99. 

-4.6 -22.6 99. 

-4.6 -22.6 0. 

PC: -Y #2 

4 0 

4.6 -22.6 99. 

4.6 -4.6 99. 

-4.6 -4.6 99. 

-4.6 -22.6 99. 
PC: -Y #3 

4 0 

4.6 -4.6 99. 

4.6 -4.6 261. 

-4.6 -4.6 261. 

-4.6 -4.6 99. 

PC: +Y #1 

4 0 

4.6 22.6 0. 

-4.6 22.6 0. 

-4.6 22.6 99. 

4.6 22.6 99. 

PC: +Y #2 

4 0 

4.6 22.6 99. 

-4.6 22.6 99. 

-4.6 4.6 99. 

4.6 4.5 99. 

PC: +Y #3 

4 0 

4.6 4.5 99. 

-4.6 4.6 99. 

-4.6 4.6 261. 

4.6 4.6 261. 

CM: IIOII-ROTATING SECTION 

CM: OF SOLAR PANEL BOOM 

CE : 

PC: BOTTOM 

4 0 

4.6 49.5 261. 

4.6 -49.6 261. 

-4.6 -49.5 261. 

-4.6 49.5 261. 

PC: +X SIDE 

4 0 

4.6 49.6 270. 

4.6 -49.6 270. 

4.6 -49.6 261. 

4.6 49.6 261. 

CM: ROTATING SECTION OF 

CM: SOLAR PANEL BOO14 

CE : 

RT: -Y SIDE 

0. -64. 265.5 

0. 0. 90. 0. 

PC: TOP 

4 0 

4.6 4.6 4.6 

-4.6 4.5 4.6 

-4.5 -76.6 4.5 

4.5 -76.6 4.6 
PC: BOTTOM 

4 0 

4.6 4.6 -4.6 

4.6 -76.6 -4.6 

-4.6 -76.6 -4.6 

-4.6 4.6 -4.6 

PC: +X SIDE 

4 0 

4.6 4.6 4.6 

4.6 -76.6 4.5 

4.6 -76.6 -4.6 

4.6 4.6 -4.6 

PC: -X BIDE 

4 0 

-4.6 4.6 4.6 

-4.6 4.6 -4.6 

-4.6 -76.6 -4.6 

-4.6 -76.6 4.6 

CM: UPPER OUTBOARD SOLAR PANEL 

CE : 

RT: -Y OUTBOARD 

0. -132. 266.6 

0. 0. 90. -62. 

PC: -X 82x33 

4 0 

-1. 16.6 89. 

-1. 16.6 7. 

-1. -16.6 7. 

-1. -16.6 89. 

PC: UPPER 33 

4 0 

1. 16.6 89. 

-1. 16.6 89. 

-1. -16.6 89. 

1. -16.6 89. 

PC: LOWER 33 

4 0 

1. 16.6 .7. 

1. -16.6 7. 

-i. -16.6 7. 

-1. 16.6 7. 

PC: INSIDE 82 

4 0 

1. 16.6 89. 

1. 16.6 7. 

-1. 16.5 7. 

-1. 16.6 89. 

CM: IJJWER OUTBOARD SOLAR PANEL 

CE : 
-1. 16.6 -89. 

-1. -16.5 -89. 

-1. -16.6 -7. 

-1. 16.6 -7. 

PC: LOWER 33 

4 0 

1. 16.6 -89. 

1. -16.6 -89. 

-1. -16.5 -89. 

-1. 16.6 -89. 

PC: UPPER 33 

4 0 

1. 16.5 -7. 

-1. 16.5 -7. 

-1. -16.6 -7. 

1. -16.6 -7. 

PC: INSIDE 82 

4 0 

1. 16.6 -89. 

-1. 16.5 -89. 

-1. 16.5 -7. 

1. 16.5 -7. 

CM: UPPER IttBOARD SOLAR PANEL 

CE : 

RT: -Y INBOARD 

0. -78. 265.5 

0. 0. 90. -52. 

PC: -X 82x33 

4 0 

-1. 16.6 89. 

-1. 16.6 7. 

-1. -16.5 7. 

-1. -16.5 89. 

PC: UPPER 33 

4 0 

1. 16.5 89. 

-1. 16.6 89. 

-1. -16.6 89. 

1. -16.6 89. 

PC: LOWER 33 

4 0 

1. 16.6 7. 

1. -16.6 7. 

-1. -16.6 7. 

-1. 16.5 7. 

PC: 82 IHSIDE 

4 0 

1. 16.5 89. 

1. 16.6 7. 

-1. 16.5 7. 

-1. 16.6 89. 
PG: 82 OUTSIDE 

4 0 

1. -16.5 89. 

-1. -16.6 89. 

-1. -16.6 7. 

1. -16.6 7. 

CM: LOWER INBOARD SOLAR PANEL 

CE : 

PC: -X 82x33 

4 0 

-1. 16.6 -89. 

-1. -16.6 -89. 

-1. -16.6 -7. 

-1. 16.6 -7. 

PC: LOWER 33 

4 0 

1. 16.6 -89. 

1. -16.6 -89. 

-1. -16.6 -89. 

-1. 16.6 -89. 

PC: UPPER 33 

4 0 

1. 16.6 -7. 

-1. 16.6 -7. 

-1. -16.6 -7. 

1. -16.6 -7. 

PC: 82 INSIDE 

4 0 

1. 16.6 -89. 

-1. 16.6 -89. 

-1. 16.6 -7. 

1. 16.6 -7. 

PC: 82 OUTSIDE 

4 0 

1. -16.6 -89. 

1. -16.6 -7. 

-1. -16.6 -7. 

-1. -16.6 -89. 

CM: ROTATING SECTION OF 

CM: SOLAR PANEL BOOM . CE : 

RT: +Y SIDE 

0. 64. 265.6 

0. 0. 90. 0. 

PC: TOP 

4 0 

4.6 -4.5 4.6 

4.6 76.6 4.6 

-4.6 76.6 4.6 

-4.6 -4.6 4.6 

PC: BOTTOM 
4 0 

4.6 -4.6 -4.5 

-4.5 -4.5 -4.5 

-4.5 76.5 -4.6 

4.5 76.5 -4.6 

PC: +X SIDE 

4 0 

4.5 -4.6 4.5 

4.6 -4.6 -4.6 

4.6 76.6 -4.5 

4.5 76.5 4.6 

PC: -X SIDE 

4 0 

-4.5 -4.6 4.6 

-4.5 76.5 4.5 

-4.6 76.6 -4.6 

-4.5 -4.5 -4.5 

CM: UPPER OUTBOARD SOLAR PANEL 

CE : 

RT: +Y OUTBOARD 

0. 132. 265.6 

0. 0. 90. -62. 

PC: -X 82x33 

4 0 

-1. 16.5 89. 

-1. 16.5 7. 

-1. -16.6 7. 

-1. -16.6 89. 

PC: UPPER 33 

4 0 

1. 16.6 89. 

-1. 16.5 89. 

-1. -16.5 89. 

1. -16.6 89. 

PC: LOWER 33 

4 0 

1. 16.5 7. 

1. -16.5 7. 

-1. -16.6 7. 

-1. 16.5 7. 

PC: INSIDE 82 

4 0 

1. -16.5 89. 

-1. -16.6 89. 

-1. -16.6 7. 

1. -16.5 7. 

CM: LOWER OUTBOARD SOLAR PANEL 

CE : 

PC: -X 82x33 

4 0 

-1. 16.6 -89. 
-1. -16.5 -89. 

-1. -16.5 -7. 

-1. 16.5 -7. 

PC: LOWER 33 

4 0 

1. 16.5 -89. 

1. -16.6 -89. 

-1. -16.5 -89. 

-1. 16.5 -89. 

PC: UPPER 33 

4 0 

1. 16.6 -7. 

-1. 16.5 -7. 

-1. -16.5 -7. 

1. -16.5 -7. 

PC: INSIDE 82 

4 0 

I. -16.5 -89. 

1. -16.6 -7. I 

-1. -16.6 -7. 

-1. -16.6 -89. 

CM: UPPER INBOARD SOLAR PANEL 

CE : 

RT: +Y INBOARD 

0. 78. 265.6 

0. 0. 90. -62. 

PC: -X 82x33 

4 0 

-1. 16.5 89. 

-1. 16.5 7. 

-1. -16.5 7. 

-1. -16.5 89. 

PC: UPPER 33 

4 0 

1. 16.5 89. 

-1. 16.5 89. 

-1. -16.5 89. 

1. -16.5 89. 

PC: LOWER 33 

4 0 

1. 16.5 7. 

1. -16.5 7. 

-1. -16.6 7. 

-1. 16.6 7. 

PC: 82 OUTSIDE 

4 0 

1. 16.6 89. 

1. 16.5 7. 

-1. 16.5 7. 

-1. 16.5 89. 

PC: 82 INSIDE 
4 0 

1. -16.6 89. 

-1. -16.5 89. 

-1. -16.5 7. 

1. -16.6 7. 

CM: LOWER INBOARD SOLAR PANEL 

CE : 

PC: -X 82x33 

4 0 

-1. 16.6 -89. 

-1. -16.6 -89. 

-1. -16.6 -7. 

-1. 16.6 -7. 

PC: LOWER 33 

4 0 

1. 16.5 -89. 

1. -16.6 -89. 

-1. -16.6 -89. 

-1. 16.6 -89. 

PC: UPPER 33 

4 0 

1. 16.6 -7. 

-1. 16.6 -7. 

-1. -16.5 -7. 

1. -16.6 -7. 

PC: 82 OUTSIDE 

4 0 

1. 16.5 -89. 

-1. 16.6 -89. 

-1. 16.5 -7. 

1. 16.5 -7. 

PC: 82 INSIDE 

4 0 

1. -16.6 -89. 

1. -16.6 -7. 

-1. -16.5 -7. 

-1. -16.6 -89. 

PP : 

T 

T 8.186 4.87 

180. -180. -30. 

-40 40. 4. 

Xq: EXECUTE CODE 

EN: END CODE 

The output generated by the code was the following: 

AWIL1INA (ICS) - ( 7.6100. 4.6710. 78.1812 ) III METCIS INPUT SIT: USLII: [IJH.NA8.lUNlAN6S1.1IP;l 
PPP 

PPP 

PPP 

PPP 

PPP 

PPP . PPP 

PPP 

PPP 

PPP 

PPP 

PP 

PP 

PP 

PP 

PP 

PP 

PP 

PP 

PP 

PPP 

PP 

PPPP 

PPPP 

PPPP 

PPPP 

UnIIA (KC81 ( 7.8100. 4.6110. 18.1811 ) XI MXltUI IIPVT 8x1: USItl:IUW.NAB.MN1AU681.IIP;l 

TIETA (OtCUCS) 0.00 10.00 40.00 80.00 80.00 100.00 120.00 140.00 160.00 180.00 PI1 * 10 .OO 11.60 

16 .OO 

11.60 

50.00 

51.60 

56.00 

51.60 

40 -00 41.60 

46 .OO 

41.60 

60.00 

61.60 

66 .OO 

67.60 

40 .OO 

81.60 

86.00 

41.60 

10.00 

72.60 

16.00 

11 -60 80.00 

81.60 

116.00 

81 .SO 90.00 

91.60 

06.00 1111ll111l1I1l11 lll1ll11111111111 0T.IO 11111ll11lll111l 1lllll11111111ll11 100.00 II1IIIIIIIIllIl1IllIIlI1l111l11ll1III11IIIll1l11IIII 

101.60 1IIIIIIIIlII111IlllIlllIl11111lIlll11111IllItlIIIIII 

106.00 1IIIIIIIIIIIIlII1lll1l1l1l1111l1llll111IIIl111111IIII 

101 .SO 1111IIIlIIII1111111l1llll111llllIIIl1l11IIIIll1l11II1I 

110.00 1II1IIIIlIIt1111111llll1l1111IIIIllll1lIIIIIlI1111II1I 

111.60 !I11IIII!II11l111l!01!1III1~!1!lllI11!1IIlIlI1111lIII 

116.00 IIIIIIIIIlIIltII11IIIII111111IIIlIIIl1l1IIIII11l1111Il 

117.60 IlIIIIIIIlI111l1l11tl111l11lIlIlIIIIl111IIIIlIllI1l1II 

120.00 I I IlIlII!IlIlIlI1ll11lll1l1l111l1lIIll111111IIlIlIlllIlII 

121.60 I I IIII1lIlIIIllII11111l1l1ll111IIIIIllIIIIlIIIIIIlIl1l1II 

12s .oo Ill III1IlIII1IIlIlI1ll11lllll111II1IIIIllttlIIIIIIIIlII111 117.60 11 1 ll11llll1 "0.00 Illtl 11 1 I1 I I I I 151.60 Ill! Illlllllll 156.00 1111 lll111llltl 151.60 Ill! ll1l11lllll 140.00 IIII l1l11l1l11l 141.60 1111 !I1111llltI1 146.00 1111 llll1l11lII 141.60 Ill! 11l1lllll111 160.00 I I I l1lll1lll111 161.60 I I I l1ll1ll1ll11 166.00 I I I llll1l111lII 161.60 I I I l1ll1lll11ll1 

160.06 Ill1 1111ll11llllI . 161.60 1111 0: 

lllllll!lllIl 166.00 IIII l111IIIIIIIIl 1W1 1::: 

161.60 1111 11IllI1lllllI 110.00 1::: I I I IIIIIIIIIIIIII 111.60 1888 I I I Il1111l1lIlItl 116.00 1::: I I I t111lIIIIIlIIl 111.60 I I I 1::: 

1l1111IIl1Il1l 180.00 1888 

111 IllIIIII1IlII1 182.60 1::: I I I IIIIIIIIIIIIII 186.00 1::: 

Ill llIllllIlIl11I 181.60 I I I 1::: 

llIIlIIIII11lI 190.00 188 I I I IIIIIIIIIIIII 191.60 1:: 

1 I I I IIllIIIIIItIt 196.00 1:: 

Ill! IIIIIIIIIIIII 101.60 11 11 lIIIIlIIIl11I I I$# It: 

100.00 1111l1l111111ll1o1lllIlIIlIIlIIIIIIIIIlllllllllllllllllllllllllllllllllll?lllllll:: 

201. 60 11lllllIlIl1lIIII!tIIlII1IIlIIII1111l11111ll11l111111ItIItIIItttltttttllllltl1tl188 

106 .OO ttlllllIlltt1lltllttttttttttlllIIllltlllIlllfllllllllllllllllllllllllllllllllltll~~ 

207.60 11 I I I I I I I I I1 I I I I I I I I I1 1 I I I1 1 I I I I I I~8$8~~$8~#~~8#~t~8ttttttttt$t$ttt$t$tt8#t$tttt8t~ 210.00 I I I I I I I II I I 11 I I t I I I I I 1 I I I I I I I I I I I I ~tt~tatt:t~t:::ttttttta:tttttta:$t::::::~:::tt:: 211.60 I I I I I! II I I I I I IIIII III! II I I 11 I I I I I I ~:t~:t~~ataa:~:tt:::tt:tttttatt:ttt:t:::~::::::: 116.00 I I I I I I I I I I 1111 II I I III IIII II I I I I I I I ~a::~ttt:ttttaaa::tata:ttt~:t:ttt:t::tt:::::::::: ~IT.CO 11 I 11 11 11 11 11 1 I I 11 I I I I I 11 11 11 11 11 1 ~:~:::::::::::::~:t~:atat:ttt:~::tt::t:::::::::: 110.00 I I I I I I1 1 I1 I1 I I I I I I I I I I I I I I I I I I I l I I l:t:~~~atttt:t:::i~tt::$t:$$$:$:8:::::::::~::::: 112.60 1 I I I I I I I I I I1 11 1 t I 1 I! I1 I! I I I I I I I I 11~~8#~~#~~~8~~1$~~~~8~8~~t~$$L$$t~t$888$888~88#~ 

Figure 7.1: Illustration of the Space Station 

115 
TOP 

FRONT 

Figure 7.2: Three-axis view of the Space Station as modeled by the input eet. 

116 
7.8 Example 8: Another Look at the Space Station 

This example presents a full view of the space station in the previous, except that the 

output is generated with the NCAR graphics interface. The non-interactive input is the 

same. The standard fill character procedure is used and a complete window is displayed 

with two degree resolution in theta and phi. The NCAR plot has been obtained using the 

plotting code in Chapter, 13. The shadow map produced is shown in Figure 7.3 
SHRDBW TEST F0R CRSE RNSS1 -- - 

RNTENNR LDCATED AT-- 25.0, 15.0, 256.5 - 

ANTENNA ORIENTATI0N 0.09 0.09 90.0, 0.0 

SBLQR PRNELS RBTRTED 0.09 -52.0 

THERMRL RRDIATBRS R0TATED 0.0 

180.0 

PHI 

Figure 7.3: NCAR plot showing the shadow map of the space station model. 
References 

[I] R. J. Marhefka and W. D. Burnside, "Numerical Electromagnetic Code - Basic Scattering Code, NEC-BSC (Version 2), Part I: User's Manual," Technical Report 712242-14, 

December 1982, The Ohio State University ElectroScience Laboratory, Department of 

Electrical Engineering; prepared under Contract No. N00123-79-C-1469 for Naval Regional contracting Office. 

[2] R. J. Marhefka, "Numerical Electromagnetic Code - Basic Scattering Code, NEC-BSC 

(Version 2), Part 11: Code Manual," Technical Report 712242-15, December 1982, The 

Ohio State University ElectroScience Laboratory, Department of Electrical Engineering; 

prepared under Contract No. N00123-79-C-1469 for Naval Regional Contracting Office. 

[3] H. H. Chung and W. D. Burnside, "General 3D Airborne Antenna Radiation Pattern 

Code User's Manual," Technical Report 711679-10, July 1982, The Ohio State University Electroscience Laboratory, Department of Electrical Engineering; prepared under 

Contract No. F30602-79-C-0068 for Air Force Systems Command. 

[4] R. G. Kouyoumjian and P. H. Pathak, "A Uniform Geometrical Theory of Diffraction 

for an Edge in a Perfectly Conducting Surrsce," Proc. IEEE, Vol. 62, pp. 1448-1461, 

November 1974. 

[5] G. R. McArthur, editor, "The System Plot Package," NCAR Technical Note - 162+IA, 

January 1981, National Center for Atmospheric Research, Boulder, Colorado. 

Part I1 

Code Manual 

Chapter 8 

Introduction 

The obscuration code SHADOW, is designed to produce a projected shadow map onto the 

far zone radiation sphere of an antenna in a complex environment. The map is efficiently 

calculated by directly tracing the outer boundaries of the multisided flat platea and composite cone frustum cylinders onto theta - phi space and then filling between the boundaries 

along raster lines. The code has been developed to be interactively run on a DEC VAX computer. It can, also, be run non-iteractively on any other computer by simply substituting 

the small main program and leaving out the interactive subroutines. 

Part I of this manual is a user's guide which treats the code from the users standpoint 

without much particular details about the coding. Part 11, given here, is intended to give 

some details about the internal workings of the code. It gives more specific information 

about the coding itself. It is of importance primarily for people implementing the code 

on a new system, for debugging errors, or for making changes in how the code operates. 

An overview of how the code is organized is given in Chapter 9. A listing of the code is 

given in Chapter 10. It is broken up into three parts for the non-interactive, FORTRAN 

77 subroutines and into the interactive VAX dependent subroutines. The implementation 

of the code on a VAX is given in Chapter 11 and a brief description of implementing the 

code on a non-VAX computer is given in Chapter 12. A listing of an NCAR plotting code 

for the shadow map is given in Chapter 13. 
Chapter g 

Code Organization 

The obscuration code SHADOW is designed to produce a projected shadow map onto the 

far zone radiation sphere of an antenna in a complex environment. The map ia efficiently 

calculated by directly tracing the outer boundaries of the multisided fiat plates and composite cone frustum cylinders onto theta - phi space and then filling between the boundaries 

along raster lines. 

The code has been developed with efficiency and ease of use as primary considerations. 

Often with other similar codes the engineer is not part of a tight interactive design loop. 

In order to facilitate this capability, while maintaining necessary transportability, the code 

has been split into two versions so that it can be run in two different modes, interactively 

or non-interactively depending on the computer being used. In both versions the flow 

of program control is basically the same. The main program either accepts interactive 

commands from the terminal and acts on those commands, or reads a different set of noninteractive commands from the input file and processes those. In both cases, the main 

program loops on input commands and calls appropriate subroutines for tb.0 creation and 

output of the shadow map. 

The map creation is broken down into separate phases for each class of geometry being 

processed. Plates and elliptic cylinders are the two phases currently implemented. Each 

processing phase works by projecting each member of each class of geometry onto the 

far-zone sphere. The code implements the shadow map by mapping the far zone sphere 

in theta-phi space into a rectangular character array. The size of the array and hence 

the angular resolution of the resulting map is determined by the user at run time. After 

a member is projected, the far-zone grid (array) is processed in a raster-scan faahion to 

implement an area fill for the member. In this way every geometric entity is processed 

and included in the array. After all items of all classes have been processed, the output 

routines format and display/dump the resulting map. The main program then readies itself 

to execute yet another command or commands. 

The source code is also organized into two groups of files depending upon the desired 

mode of operation. The code is organized this way so that minimum source modification 

is necessary in order to run in either interactive (in the case of a VAX computer) or noninteractive modes. The chapter on Non-VAX implementation describes the conversion of 

the source to non-interactive mode in detail. 

Since the map computation and display routines are identical for both modes of operation, the transportability of generated results depends on the numerical behavior of the 
target machine an not on implementational differences between the interactive and noninteractive versions. 
Chapter 10 

Listings of the Code 

This chapter describes the operation of the routines and functions used by the program. 

Each listing is presented in alphabetical order and is preceded where appropriate by a short 

explanation of methods used. 

10.1 VAX/VMS Subroutines 

The following routines are for the interactive implementations of the code. They are used 

in conjunction with the routines in this chapter that are common to both versions. 

MAIN PROGRAM 

This is the main routine for the interactive versions of the program. It calls a one-time 

initalization routine and then executes commands until finished. There is another slightly 

different main program for the non-interactive code. 

PROGRAM SHADOW 

CII I*+ 

CIll This program was written at the ohio state univrrrity 

Clll rlectrorcirnce laboratory. any problem or comrntr 

CIII can br rrfrrrrd to: 

CIII 

CI I1 LASZLO A. TAKACS OR RONALD J. MARHEFKA 

CIII ELECTROSCIENCE LABORATORY 

CI 11 1320 KIIINEAR RD. 

CI11 COLUMBUS, OHIO 43212 

CIII PHONE: (614) 422-6762 OR 422-6848 

C111 

CI11 Thin program providrs a printrr output of the gremrtrical 

Clll shadow boundriws of a structure of platen and cylinders input 

CIII am valid input retm to the nnmmrical code. 

CIII 

Clll This program was written 16-JUN-1984. 

CIII Thr latrrt modification occurrrd 18-DEC-1986. 

CI I I-- 

CI 11 

C111 Beginning of the main routine. 
Cl l l Inltlmlixe any SKIDOW data rtip.octaror. 

CI I I 

CALL INIT 

CI I I 

CIII Call tho intrractlvo tednal intorfacr. Ibis rontino calls a11 

Clll othrr rubrootinor. 

CI I I 

CALL IHIRAC 

GI I1 

CIll Finished. 

Cllt 

END 
SUBROUTINE lNlT 

c---------------------------------------------------------------------- 

SUBRDUTINE IN11 

INCLWE 'SHACON.FOR' 

Cl l l 

Clll Thie rubroutine initializee the main routine. 

CIII It ir meant to be called once, at the mtart of the proKrrm. 

CIII 

C111111!111!11111111111111111111llllllllll1111111111l11111111lllllllllll 

Cl l l 1 

Clll NOTICE: I 

CIII Thir routine perform actionr which do not apply to the I 

Clll non-interactive mode of operation. In particular, the variabler I 

Cl11 which are intialired here may be reinitialized mlrewherm in both 1 

Clll interective and non-interectivo vereione. Alterin& theme I 

Clll parmeterr may or may not aehimvo thm rxpeetmd rerultr. 1 

C11 I I 

CllllltlllllllllllllIIIIIIIIIIIlIIIIIIIIllllllllllllllllllllllllllllllll 

Cl I 1 

C11 I Initialize variablee to their default valuoa. 

CI I I 

Clll The louer/higher theta end of the range. 

CI I I 

THETI = 0.0 * RPD 

THET~ = 180.0 FD 

CIII 

Clll The lowrrfhigher phi end of the range. 

C! I I 

PHI = 0.0 RPD 

pH2 = 360.0 * RPD 

C1 I I 

C! 1 I The derired thetafphi rorolution in unit8 of radianrfpixel. 

CIII 

RESTH = 2. RPD 

RESPH = 2. * RPD 

cats 

C((( Rotata tranalatm dafault data RT: 

caaa 

THZP = 0. 

PHZP = 0. 

THXP = 90. 

PHXP = 0. 

VRS( 3, 1 ) = 0. 

VRS( 3,l) = 0. 

VRS( 3, 3 ) = 1. 

caaa 

Cat8 Unitm default data UN: , UF: 
caaa 

IUNIT = 1 

UNITF =1.0 

UNITN = WHIT( IUNIT ) 

UNITS = mIrr r UHITF 

caaa 

C@#$ Pattern cut orientation data VF: 

caaa 

WC( 1, 1 1 = 1. 

WC( 1, 1) -0. 

WC( 1, 3 = 0. 

WC( 3, 1 ) = 0. 

VPC( 3, 1 ) = 0. 

WC( 3, 3 ) = 1. 

CI I I 

CIIl Open #om8 mtandard inpat/oatput filer for the VMS mnpport routinmr. 

Clll Units 6 and 6 are remarved for inpat met reading and echoing by the 

Clll input met procsrmor. NOTE: Thim im operating ryrtm dependent 

Clll mtuff. Thim 1. the natural place for it mince it is intialized 

CIII at thm start. 

CI I I 

OPEN( UNIT=l,FILE='STS$INPUT',fTPE='DLD' ) 

OPEN( WIT=2,FILE=*SYS$DUWUf',TTPE='~NOWH' ) 

CI I1 

CIII End of program intialization. 

Cltl 

BE'IURtI 

END 
SUBROUTINE INTRAC 

This is the interactive commands subroutine called by the main routine. -It fields commands typed by the user and executes the appropriate service routines. Also listed here are 

two I/O function subprograms which are indirectly invoked by INTRAC. They are called 

GETJNPUT and PUT-OUTPUT. 

I Urer-defined corn 

1 The 110 routine at thm b 

c----------------------------------------------------------------------- 

SUBROUTINE INTRAC 

1 

1 ** 

1 FACILITY: INEXACTIVE TERMINAL COMMAND INTERFACE 

t 

1 ABSTRACT: 

I 

I Thir procedure prompt8 a trrminal for input and purrr/dirpatcher 

I through CLI$ routinmr. 

t 

1 ENVIRONMENT: VAXIWS Vrrrion 4.x 

I 

I AUTHOR: Larzlo Takacr CREATION DIE: 20-AUC-1986 

1 

1 MODIFIED BY: 

1 

1 1-001 - Original, LIT 20-AUC-1986 

I-- 

IMPLICIT NONE 

IlICLUDE ' ($RMSDEF) ' 

INCLUDE ' ($SMCDEF) ' 

INCLUDE 'SHACOM.FOR' 

EXTERtfAL 

+ COMMAND-TABLES , + GET-INPUT 

I 

IlfTECER*4 

+ STS , + READ-STS. 

+ CLI$PRESENT, 

CLI$DISPATCH, 

+ CLI$DCL-PARSE, 

+ CLI$CET-VALUE, 

+ SMC$LOAD-KEY-DEFS, 

+ SblC$CREATE-KEY-TABLE, 

+ SMC1DELETE-VIRTUAL-KETBOArn, 

+ SMC$CREILTE-VIRTUAL-KEYBOARD 

1 

1 Make a key definiton table. 

I 

srs = SMC~CREATE-KEY-TABLE( KEY~L ) 

IF (.NOT. STS) CALL LIB¶SICNAL( %VAL(STS) ) 

! 

1 Load the drfinitionr from thm kry drfinition file. Ipora "file not f 

1 

STS = SMC$LOAD-KEY-DEFS( KEYTBL, 'SHADOW.KPD1 ) 

IF ((.NOT. STS) .AND. (STS .NE. RJlS$-FNF)) 

+ CALL LI~$SIG~;AL( XVAL(STS) 

I 

1 Cmt a handle on SYS1INPUT. 

I 

READ-STS = SMC$CREATE-VIRTUAL-KEYBOARD( KBDID ) 
0970 

0971 

0971 

0073 

0974 

0976 

0976 

0977 

0978 

0979 

0980 

0981 

0082 

0083 

'0984 

0986 

0986 

0987 

0988 

0989 

0990 

0991 

0902 

0993 

0094 

0996 

0996 

ODD7 

oooi 

0002 

0003 

0004 

0006 

0006 

0007 

0008 

0460 

0616 

0617 

0618 

0619 

0620 

0821 

0622 

0623 

0624 

0626 ' 

0626 : 

0627 

0628 

0629 

0630 

0631 

0632 

0633 

0634 

0636 

0636 

0001 

0002 

0003 

0004 

0006 

0006 

I 

I Tha main procarring loop. Kaap raading input nntil.tha orer typar EOF 

I 

DO WILE ( READ-ST6 .E. RMS$-EOF ) 

I 

I Read from input and parra tha command. 

I 

BEAD-ST8 = CLIIDCL-PARSE(, 

+ COWAND-TABLES, 

GET-INPUT, 

+ GELINPUT, 

'SHADOW ' 

I 

1 

I If the command parra war aucca~rful, axacuta tha cmnd-routina. 

I 

IF ( .NOT. (.NOT. READ-STS) CALL CLIIDIspATCH() 

I 

END DO 

1 

I Gat rid of tha virtual kryboard. 

I 

STS SMC$DELEIE-VIRTUAL-KEIBoARD( KBDID ) 

IF ( .NOT. STS ) CALL LIBISIGNAL( %VAL(STS) ) 

1 

I Raturn 

I 

RETURN 

END 

c----------------------------------------------------------------------- 

INTECER*4 FUNCTION GET-INPUT( COMMAND, PROMPT, LENGTH ) 

CI 1 I 

Clll Thir routina dorm a11 tha rrading for tha terminal intarface. 

CI I I It has the same calling format ar LIBIGET-INPUT axcapt that option. 

Clll parrmatarr my not ba omlttad. . CI 1 I 

INCLUDE ' (IRMSDEF) ' 

INCLUDE 'SHACOM.FOR' 

EXTERNAL 

+ GMC$-EOF 

CHARACTER* (*) 

I Tha linkar findr 

COMMAND, 

PROMPT 

INTEGER 

I Raad a (compoaad) lina and raturn the rtatur to CLI$ rtrff 

1 

GET-INPUT = SMC$READ-COMPOSED-LINE ( 

+ KBDID . 

KETTBL , COMMAND, 

PROMPT. 

RETURN 

END 

c----------------------------------------------------------------------- 

INTEGER*4 FUNCTION PUT-OUTPUT ( STRING ) 

CIII 

CIII Thin routine doer all tha writing for the terminal intarfaca. 

Clll It has tha rrma calling format an LIBIPUT-OUTPUT. 

CIII 
INCLUDE 'BHACOH.FORe 

CHARACTER* (*) 

+ GIRINC 

INTEGER*4 

I kmad a linm. 

I 

PUT-OUTPUT = LIB$PUT,OUTPUT ( SIRING ) 

I 

I Thmrm rhould bm no arrora hmra. Signal if thmrr are any. 

I 

IF (.NOT. PUT-OUTPUT) CALL LIB$SICNAL( XvalCPUT,OUTPUI) ) 

I 

I Rmturn. 

I 

RETURN 

END 
Interactive Service Routines 

The following routines are used ONLY in the interactive version of the code and are 

operating system debendent. They provide functions and service routines for the interactive 

commands. 

CI The ryrtun-dopendent stuff goea balow hare. 

CI 

CIIII11111l11ll111111l11l111ll11IIIIIl111IIIIlII111IIIIII1111111llIIl1II 

CI 

CItt 

CI 

CI FUNCTIONAL DESCRIPTION: 

CI 

CI There functionm are tha action roatiner invokmd by the VERB which 

CI follow8 from the on rach routine. 

CI 

CI CALLING SEQUENCE: 

CI 

CI rat-rtatur.wlc.de = soatin. ( ) 

C I 

CI FORMAL PARAMETERS: 

CI 

CI NONE 

C I 

CI IMPLICIT INPUIS: 

Cl 

CI NNCTION SPECIFIC 

CI 

CI IMPLICIT OUTPUTS: 

C I 

CI NNCTION SPECIFIC 

CI 

CI COMPLETION STATUS: 

CI 

C1 FUNCTION SPECIFIC 

C I 

CI SS$-NORMAL Succerm, or 

Cl Sac$-rtatur rome other status 

C1 

CI SIDE EFFECTS: 

CI 

CI VARIBLE 

El-- 

INTEGER NNCIION SERVICE-ROUTINES 

IWLICIT NONE 

PARAhETER SUCCESS = 1 

INCLUDE ' ($SSDEF)/NOLIST' I Inclado rymtun rtatur defintions 

IIlCLUDE ' SHACOM . FOR/LIST ' I Incladm SHADOW common block 

1 Clll 

1 Cl l l COMMON declerationr . . . 1 Clll 

1 COMMON /PIS/ 

1 + PI, 

1 + TPI, 

1 + DPR, 

1 + RPD 

1 CIII 
l

1045 1 C.*_ NAXIHLrDI__FJ;SIOFONRPLATES

1048 1 INTEGER _l

1047 1 PARAmeTER(NPX=75)

1048 1 C€€+ NAXINUMDIMENSIOFOR N PLATE'EDGES "_

1049 % INTEGER NEX

1050 1 PARANETEA(NEl-12)

1051 1 C¢€€ MAXI_4 DI_(ENSIONFOE CTLINDERS

1052"I INTEGER NCX

1053 1 PARI_ETER.(NCX-5) °

1064 1C+€€ NAXI_U_!DISTENSIONFOR CYLINDER_IMS

1066 1 INTEGER NNX

1056 1 PARAMETEIL (NNX=IO) m_

1057 1C+*+ _ZI_U_DI_T_SIONFORROWS(PHI)

1058 1 INTEGER MAXROW

1059 1 PARAmeTER(HAXKOW=361)

1060 I C++* _kXI_lN DIMENSIONFOR COLUMNS(TI_TA)

1061 1 INTEGER HAICOL m.q

1062 1 PARA_TER (HAICOL=181)

1083 1CII!

1084 1 CO_ON /CEOPLA/

1065 1 € IX (3,NEX,NPI),

1066 1 + V' (3,NEX,NPX),

106T 1 € VP (3,NEX,NPX),

1068 1 € VH (3,NPI),

1089 1 € I_ (NPX),

1070 1 + NPX

1071 1CIII

1072 I CO_J_OH/CED_EL/

1073 1 + AC (NNX,NCX),

1074 I € BC (HNX.NCX), _'_

107_ 1 4 ZC (NNX,NCX),

1078 1 + TCIL (NHX,NCX),

1077 1 + XCL (3,NCX),

1078 1 € VCL (3,3,NCI), "_

1079 1 + NEO (NCX),

1080 1 € MCX

1081 1C111

1082 1 CO_ON /EDMAG/ V_AG(NEX,NPX)

1083 1CII!

1084 1 CO_]O]T/SHADWIT/COLS, ROWS, ANTENN(3),CTROID(3),

1086 I 4 I_P,_,NEII"ME,NC,

1086 1 € THET1,THET2,PHI,PH2,RESTH,RESPH,ALPH, M

1087 1 * UNIT(3),TILS(3),VP.S(3,3).IUNIT,UHITF,UNITE,U}I :

1088 1 + THZP,PHZP,TEIP.PHIP,FILPNM,FILCNM

1089 1 COgNON/SHADWC/ INPFIL,OUTBUF(HAXCOL,MAXROW).

1090 1 4 FILCHC,FZLCIiP,FILCHA

1091 1 CIII _'

1092 1 CO_IO_ /PATCUT/ !/PC(3,3)

1093 1CII!

1094 1CII! The flret sat of d_claratlone ls the stuff In /SHADOW/ con=on bloc

1098 1Cll! _._

1098 1 I_TECER

1097 1 + NP, _E, NEXT_, MO.

1098 1 C! Plete_/md_s#/cyl| variables.

1099 1 + FILPNM. FILC_M,

1100 1CI Plate and cyl numbers for mpsclel fllltn_

1101 1 + COLS,

1102 1 C! The .lze of the array subsection dsterndn_d

1103 1 + RO_S %

1104 1CI by lntsrnal resolution requirements. "_

110_ 1 "=

1106 1 PEAL

1107 1 + CT_OIDo

1108 1CI A _eomstrtc canter of the object in qusmtton. M

134

• !
1100 1 AHTENN. 

1110 1 CI Thm antmnna location in Bmf Coord. Syrtm. 

1111 1 mr1. 

1112 1 Cl Thm lormr thmta and of thm range. 

1113 1 METO, 

1114 1 Cl Zhm higher thmta and of thm rangm. 

1116 1 PHI, 

ill6 1 CI Thm lormr phi and of the rangm. 

1117 1 PH2, 

1118 1 CI Thm highmr phi and of thm range. 

1110 1 BESTH, 

1iZO 1 CI Ihm dmrirmd thmta/phi rmrolution 

1121 1 REmH, 

1122 1 CI in unita of radianr/pixml. 

1123 1 ALPH 

1124 1 CI Maxirnam allowmd angular axcursion. 

1126 1 

1126 1 CHARACfER 

1127 1 OUTBUF* 1. 

1128 1 CI Thm output buffer which ir dimplayad. 

1129 1 IHPFIL*63, 

1130 1 CI Thm filmname of the input mat. 

1131 1 FILCHC, 

1131 1 CI rpmclal fill character for cylindmrr 

1133 1 FILCHP, 

1134 1 Cl rpmcirl till charactmr for mvmrything mlmm 

1136 1 FILCHR 

1138 1 CI rpmclal fill charactmr for plrtmr 

1137 1 DATA FILCHC, FILCAP, FILCHR / 'C', 'P', '1' / 

1138 1 Cl l l 

1130 1 CI I I From thm /PIS/ COMMON block.. . 1140 1 Clll 

1141 1 REAL PI, TPI, DPR, RPD 

1142 1 Cl11 

1143 1 CIIl From thm /CEOPLA/ CObNON block ... 1144 1 Cl l l 

1146 1 INTECER 

1146 1 ~~, 

1147 1 C1 lumbar of mdgmr par platm 

1148 1 MPX 

1140 1 CI Totml number of platmr 

1160 1 REAL 

1161 1 XI. 

1161 1 CI The array of plate cornmra 

1163 1 v, 

1164 1 CI Edgm unit vmctore 

1166 1 vp. 

1166 1 CI Edgm onit binormalr 

1167 1 + VN 

1168 i CI Unit normal for mach platm 

1169 1 Clll 

1180 1 Cl ll From thm ICEOMEL/ COMMON block.. . 1161 1 Clll 

1102 i INmCER 

1183 1 + NEC , 1164 1 CI Number of mmctionr per cylinder 

1166 1 MCX 

1166 1 CI Total nmbmr of cylindars 

1167 1 REAL 

1168 1 + Ac. 

1160 1 CI Elliptic parametar along x-axim 

1170 1 4 BC. 

1171 1 Cl Elliptic parametar along y-axle 

1171 1 + zc , 
,

m

1173 1 C! Cylinder endcape in uyl uoord eye

1174 I + TCE,

1176 1CI Angle endcap makes wlth positive z axle

1176 1 + XCL. ..,i

1177 1 CI Cyl cuurd sys orlgln _

1178 1 * VCL

1i79 1CI Definition of cyl coord sys

1180 1 C! i

1181 I INTEGER

1182 1 + IUNIT

1183 1 REAL

1184 1 + UNITF,

1185 .1 * UNITS,

1188 1 + UNITN.

1187 1 + UNIT,

1188 1 + _,

1180 1 + THZP,PHZP,THIP.PHIP, mq

1190 I + VRS.

1191 1 + _C,

1192 1 + WAG

1193 I DATA UNIT/1.,.3048,O.02541

1104 1 C!

1195 I CIII*

1198 1 C!!1 The following c_on block is for V/4S/S_05 software only.

1197 I Oil!

11.98 1 INTEGER KBDZD.KEYI3L

1199 1 CO_O!I ITERCO_I KBDID,KETTBL

1200 1 C!1T1201 EXTERNAL mq

1202 + PUT_OUTPUT,CET_INPUT. ! Ny own $SMG-ty_e 1/0 routtnu

1203 + CLI$_P1LF..SE!|T, I

1204 + CLII_NEGATED, I

1206 + CLI$_LOCP_, ! locally present .-.

1206 + CLI$_LOCl;EC, I locally negated

1207 * CLI$_DEFAULTED,

1208 + CLI$_ABSENT,

1209 + CLI$_IWALU

1210 "'q

1211 CHARACTER

1212 + P1.80, ! Conm_nd line varlable

1213 + P2.80. !

1214 + UNCIIAR*I, ! A character _w

1215 * LIBRARY*84, ! Name 6f the help library is defa

1216 + LABEL(3)*6 ! Unite label

1217 + /'meters', 'feet ', 'Inches'/,

1218 + FILE *80. I Temproary file variable m_

1219 + PRTFIL*GO. I Printable file

1220 + LISFIL*60, I Input echo listing

1221 * OUTFIL*50 ! "Plottable" output flle

1222 I

1223 DATA IUI;IT/1/ m

1224

1225 LOCICAL*4

1228 + VALID_INPUT, l A loop control variable

1227 . CLISP_ESENT. I CLI Interface to get tnfo about

1228 + CLI$CET~VALUE ! CLI Interface to get lnfo about

1229

1230 REAL*4

1231 + DOT,DZX,Xq(3)

1232 I!ITEGER*4

1233 + N.NI,N3.STS. l sordld variables...

1234 * KEYPAD, ! Keypad condition flag

1238 !

1236 ! General llbrary routines

136 "-
I 

+ LIB$SPAVN , I Executee a rubprocerr 

+ LBR$OUfPUT-HELP, 1 The librarian help rontlnr 

+ GHG$SET,KETPAD-MODE, I Screen managanent package 

I 

I mSET/SHOVm routinmr 

I 

+ SET-ANT, SELOUT, SELCOO, 

+ SET-PAT , SET-SCA , SELWIN, 

+ SET-KET, SELINP, SEXUNI-ME 

+ SET-UNI-INCHES, SET-UNI-FEET. 

+ SHOW-ANT, SHOW-OUT. mow,coo. 

+ SHOW-PAT , SHOW-SCA, SHOW-WIN, 

+ SHOW-KET, SHOW-INP, 

+ SHOW-UNI , 

I 

I varioun command routinrn 

1 

+ EXIT-COWAND, HELP-COWAND, DCL-COWAND , SHADOW-COH 

CllllllllllllllllllI1II1IIlIIIIIIIII1IIlllllllllllllllllllllllllllllllll 

C I 

CI Thir routine retr the current fill character. baing urmd for plater 

Cl or cylinders. 

CI 

ENTRY SET-FIL 

IF ( CLI$PRESENT( 'SEQUENTIAL' ) ) IHEN 

CI 

Cl Renrt thing8 to their default atate. 

CI 

FILPNM -1 

FILCNM = -1 

FILCHP = 'P' 

FILCHC = 'C' 

FILCHR = 'X' 

C 1 

CI To avoid rcrswing up the tent in SCAN, new a character that rill 

CI not be used by the fill procare, like char 7. 

C1 Set a plate up for tagging. 

C I 

ELSEIF ( CLI$PRESEIT( 'PLATE' ) ) IHEN 

c 'I 

CI Clear any cylinder tagging reridue. 

C I 

FILCNM = 0 

FILCHC + 'C' 

C I 

CI Get the marter fill character. 

CI 

CALL CLI$CET-VALUE( 'P2', FILCHX ) 

CI 

CI Get the qualifier numeral value. STS in being,Peed for the length of 

CI and the rtatur of the decode. 

CI 

IF '( CLI8CET,VALUE( 'PLATE', P2, STS ) ) TIEN 

DECODE (STS, 1 .P1, IOSTAT+SIS) FILPNM 

ELSE 

STS = -1 

END IF 

C 1 

CI Get the fill character for that plate. Urr a 'P' if none ir given. 

CI 

IF ( STS .HE. 0 ) TIEN 

SET-FIL = %LOC( CLI$,IWALU ) 
ELSE 

IF ( .NOT. CLIIOET-VALUE('PLATE*,FILCHP) TKEN 

FILCHP = 'P' 

ENDIF 

ENDIF 

C I 

C1 Set a cylinder up for tagging. 

CI 

ELSEIF ( CLIIPRESENT( 'CYLINDER' ) ) THEN 

C I 

Cl Clear any cylinder tagging raridue. 

C 1 

FILPNM = 0 

FILCHP = 'P' 

C I 

CI Cat the martar fill character. 

C I 

CALL CLIOCET-VALUE( 'P2', FILCHR ) 

C I 

C1 Oat the qualifier numeral value. 82s is being need for the len~th of 

CI and the rtatur of thm decode. 

CI 

IF ( CLISCET-VALUE( 'CYLINDER', P2, STS ) ) THEH 

DECODE (STS, 1 .P2, IOSTAT=SW) FILCNM 

ELSE 

STS = -1 

ENDIF 

CI 

CI Cat the fill character for that cylinder. Uae a 'C' if none is given 

C I 

IF ( STS .WE. 0 ) THEN 

SET-FIL = %LOC( CLII-IWALU ) 

ELSE 

IF ( .NOT. CLIICET-VALUE( 'CYLINDER', FILCHC ) ) TIEN 

FILCHC = 'C' 

ENDIF 

ENDIF 

C1 

C! Tho elre here in for a "SET FILL [XI* command. 

C I 

ELSE 

C1 

C1 Cat th* martar fill character. 

C1 

CALL cLISCET-VALUE( 'P2'. FlLCHR ) 

C1 

C1 End of caeee. 

CI 

EtfDIF 

CI!!l!I!llI1!IIIIII!!!!1!!11I!l!!I!!!!I!!11l1!IIIIIII!111l1I!!IIIIIIIIIl 

C I 

CI Thin routine dirplayn the current fill characters being used for plat 

CI or cylinders. 

C 1 

EllTRY SHOW-FIL 

C ! 

CI Annume euccens only whnn the SHOW comnd in being executed. 

C I 

SHOW-FIL = SUCCESS 

C1 
CI Ebmdne the plate aituation. 

C I 

3 IF(FILPNN.CT.0)MEN 

WRIIE(l,FMT='(" Plate '*.13." ir tagged with [".A.'*] *')') 

4 FILPNM, FILCHP 

WRIIE(l,FMT=*(" All othrr geometry tyged with [",A,'@]")') 

+ FILCHR 

ENDIF 

C I 

CI Examine the cylinder rituation. 

CI 

IF ( FILCNM .GI. 0 ) THEN 

WRIIE(l,FMT='(" Cylinder ",I3." tagged with [",A,"]")') 4 FILCNN, FILCWC 

WRIIE(l,FMT='(" A11 other gecmetry ta~ged with 1" ,A. "I "1') 

+ FILrn 

ENDIF 

C I 

Ct Check on a no-tag backgroung character rituation. 

CI 

IF ( (FILCNM .EQ. 0) .AND. (FILPNM .EQ. 0) ) THEN 

WRIIE(l,FMT='(" No individual plater/cyliderr are tagged")') 

VItIIE(l,FMT='(" All geometry marked by [".A,"]")') FILCHR 

ENDIF 

C 1 

CI Report the requential numbering came. 

C I 

IF ( ( FILCNM .LT. 0 ) .AND. ( FILPlfM .LT. 0 ) ) 

+ WRITE(l,FMT='(" A11 cylindere/platea requentially tagged")') ' 

CI 

RENRN 

ClI1111l1ll11111111IIIlIIIlII1I1I1111I1IlIlllI1IllIlII1IIIIIIIllIlIlIlII 

CI 

CI Thir routine #eta the antenna location. 

C I 

ENTRY GET-ANT 

WRITE (2,FMTe' (11, "Input antenna location in " .A8, " : " ,$) ') 

+ LABEL(IUN1T) 

READ (1. *) ANTENN(1) , ANTEN11(2), ANTElfN(3) 

C1 

CI Perform appropriate unitr converrion here. 

C I 

DO 3424 N=1,3 

3424 Xq(N)=ANTENN(N) 

SET-ANT SUCCESS 

CI 

C1 Thin routine diaplayr the current antenna porition. 

CI 

ENTRY SHOW-AtfT 

C I 

CI Transform the antenna back 

C1 

DO N11.3 

XQ(N) = ( (ANTEtlN(1)-TRS(1)) VRS(N,l) + 

+ (ANTEIN(2)-TRS(2)) * VRS(N,1) + 

+ (ANIENN(3)-TRS(3)) VR9(N,3) ) / UNITS 

END DO 

CI 
URITE(2,FMT='(" Antmnna in RCS (materm): ",3F12.6)') AHTE#N 

YRITE(Z,FMI='(*' Definit myrtmrn (",A,"): ",3F12.6)') 

+ LABEL(1UNIT) , Xq 

GHOW-ANT = SUCCESS 

RETURN 

CI Procmme a now input emt. Inquirm about thm full nmo. 

C I 

ENTRY SET-INP 

CALL CLI$GET,VALUE( 'P2', FILE ) 

OPEN ( UNIT=6, FILExFILE, DEFAULTFILE.' . INP' , STATUS='OLO') 

CALL ABSCIN 

SET-INP = SUCCESS 

CI 

CI Thie routinm displays thm currant input mat name. 

Cl 

ENTRY SHOW-INP 

INQUIRE ( UNIT.6, NAME=INPFIL ) 

TYPE *, 'Tha currant input sat is ', INPFIL 

SHOW-INP = SUCCESS 

RETURN 

CIIIII11IIII11111I1111111111111111111111111111111111l1111111111111111111 

CI 

Cl This routine togglas/roport keypad mod.. 

CI 

ENTRY SET-KEY 

IF ( .NOT. CLI$PRESEIIT( 'KEYPAD-MODE' ) ) THEN 

KEYPAD = 0 

ELSE 

KEYPAD = 1 

END IF 

SET-KEY = SMCSSET-KEYPAD-blODE( KBDID, KEYPAD ) 

C I 

C1 This routine displays the current keypad mod.. 

C ! 

ENTRY SHOW-KEY 

IF ( KEYPAD .EQ. 0 ) THEN 

WRITE(2.*) 'The keyboard is not in keypad mode.' 

ELSE 

WRITE(2.*) 'Thm keyboard ir in keypad mode. ' 

END IF 

RETURN 

C111l111111l1ll111111111111111111111111111111111!111l11111!1111IIIIIIIII 

C I 

CI Sot up a coordinate systom. 

C1 

EllTRY SET-COO 

ctts 

C$$$ TRS(ll)=LINEAR TRANSLATION OF COORDINATES FROM THE FIXED 

C$$$ COORDINATES WICH IS ORIGINALLY SET UP BY OPERATOR. 

cao 

TYPE 392I,LABEL(IUNIT) 

3921 FORMAT(' Pleaaa input a translation vector in ',A8,' : ') 

accept*, (TRS(N) ,N=I ,3) 

DO 3920 Ns1.3 

3920 TRS(~~)=TRS(N)*U~IITS 

etas 

C$$$ THZP,PHZP=ORIENTATION OF THE VRS(3,N) AXIS RELATIVE TO IHF, 

C$$$ FIXED COORDII!ATE SYSTEM. 

coa 
C$$$ THXP,PHXP=ORIENTATION OF IHE VRS(1,N) AXIS RELATIVE TO IHE 

C$($ FIXED COORDINATE SYSTEM. 

c::: 

123 continue 

typr*,'Pleare input TBZP,PIIZP,THXP,PHIF' in drgrrer:' 

mccmpt*, TBZP,PHZP,THXP,PHXP 

W(B,I)=SIN(THZP*RPD) *COS(PHZP*RPD) 

VRS(3,2)=SIN(THZP*RPD) *SIN(PHZP*RPD) 

VRS(3,3)=cOS(THZP*RPD) 

VRS(l,I)=SIN(THXP*RPD)*COS(PHXP*RPD) 

VRS(1 ,~)=sIN(~xP*RPD)*SIN(PHXP*RPD) 

VRS(1 ,~)=coS(THXP*RPD~ 

Cl l l INSURE VRS(1 ,N) IS PERPENDICULAR TO VRS(3,N) 

~zX=~~~(3,1)*~~~(1,1)*~~~(3,2)*W(1,2)+~~(3,3)*~(1,3) 

IF(ABS(DZX) .Of .O. 1) 'THEN 

TYPE*, 'Tho coordinater are NOT orthogonal - Borpecif y. ' 

&oto 123 

ELSE 

VRS(l.l)=VRS(l,l)-\IRS(3.l)*DZX 

VRS(l,l)=VRS(I,2)-VRS(3,2)*DZX 

VRS(1,3)=YRS(1,3)-W(3,3)*DZX 

DOT=~S(~,~)*VRS(~,~)+~S(~.~)*VRS(I,~)+VRS(~,~)*~(~.~) 

DOI=SqRT(DOT) 

VRS(l,l)=VRS(1,l)/DOT 

VRS(l,2)=VRS(l,2)/DOT 

VRS(l,3)=VRS(l,3)/DOT 

VRS(~,~)=VRS(~,~)*VRS(~,~)-VRS(~,~)*VRS(~,~~ 

~~~(a,a)=m(3,3)*~(l,l)-~~~(3,1)*~~~(1,3) 

~(~,~).vRs(~,~)*VRS(~,~)-VRS(~,~)*VRS(~,~) 

VRIE(6.3931) 

END IF 

Cl 

CI Dirplay thr coordinatmr 

CI 

ENTRY SHOW-COO 

CI 

3931 FORMAT(2H *,SX,'The following rotationr are urod for ALL', 

2' subrrquont inputr: ' ,T70,1H*) 

DO 3932 N1=1,3 

3932 WRITE(0.3933) (NI.NJ,VRS(NI,NJ) ,NJ=1.3) 

3933 FOWAT(2H *.1~,3(2~,'~~~(',11.',',1l,')=',F9.6).179,lH*) 

C1 

RETUBN 

CI rat up pattorn cat coordinata ryrtom 

Cl 

ENTRY SET-PAT 

THZP,PHZP=ORIENTATION OF THE VPC(3.N) AXIS RELATIVE TO ISE 

FIxm COORDINATE SYSTW. 

THXP ,PHXP=ORIENTATIOIf OF THE VPC(1 ,N) AXIS RELATIVE TO THE 

FIXED COORDINATE SYSTEM. 

continuo 

typa*,'Plaama input THZP,PHZP,THXP,PHXP in da&rmoe:' 

accept*, THZP,PHZP,THXP,PHXP 

VPC(~, I)=SIN(IHZP*RPD) *COS(PHZP*RPD) 

VPC(3.1) =SIN (TWZP*RPD) *SIN (PHZP*RPD) 

VPC(3 ,~)=cOS(THZP*RPD) 

VPC(1, I) =SItl(THXP*RPD) *COS(PHXP*BPD) 

VPC(1,2)=SItf(THXP*RPD)*SIN(PHXP*RPD) 
VPC(1,3)=COS(THXP*RPD) 

Cl I I INSURE VPC(1 ,N) IS PERPENDICULAR TO VPC(3,I) 

DZX=~C(~,~)*~C(I,I)*VPC(~.~)*VPC(I.~)*~C(~,~)*~C(I,~) 

IF(ABS(D7.X). 01.0.1) THEN 

TTPE*. 'Thr coordinater arr NOT orthogonai - Rrrprcify.' 

&oto 1134 

ELSE 

WC(l,l)=VPC(l,l)-VPC(3,1)*DZX 

VPC(1,2)=VPC(1,2)-VPC(3,2)*DZX 

WC(i,3)=VPC(1,3)-VPC(3,3)*DZX 

~0~=w~(1,l)*w~(l,l)*VPC(I,2)*~~(l,2)*VPC(l.3)*w~(l,3) 

DOT=SQRT(DOT) 

VPC(I,1)=VPC(I, I)/DOT 

VPC(1,2)=VPC(l,l)/DOT 

VPC(l,3)=VPC(1,3)/DOT 

~c(~,~)=~c(~,~)*VPC(~,~)-VPC(~,~)*VPC(~,~) 

WC(2,2)=VPC(3,3)*VPC(l,1)-VPC(3,l~*VPC(l,3) 

~C(~,~)=~C(~,'~)*VPC(~,~)-VPC(~.~)*VPC(~,~) 

WRITE(6,3931) 

END IF 

C 1 

CI re-dirplay the pattrrn cut ryrtm 

Ct 

ENTRY SHOW-PAT 

DO NIr1.3 

YRITE(6,4933) (NI,NJ,VPC(NI.NJ) ,HJ=1.3) 

' END DO 

4933 FORNAT(2H *,~x,~(~x,'VPC(',I~.',',I~,')=',FO.~),T~~,~H*) 

RETURN 

Ct11111111!1111t111l111111!111111111111111!1111111111111111111111111111l 

CI 

CI This routine rmts/displayr a rcale factor. 

CI 

ENTRY SET-SCA 

WRITE (2,*) ' Please input a uniform rcalm factor:' 

READ (I,*) UNITF 

UNITS = UNITN * UNITF 

C ! 

CI This antry displays the uniform rcale factor. 

C I 

ENTRY SHOW-SCA 

WRITE (2,FMT='(" The uniform rcale factor is " ,F10.8)') UNITF 

RETURN . 

C11IIII!!!II1IIIIIIIIlII1IIIIIIIIl!!~!!!!t11~!!1111l11111!II111!!1111III 

Ct 

Ct Thir routine sets thr unitr for the program. 

C I 

CI IUNIT = Indicator of anitr usrd for input data. 

CI 

C ! l=hETERS, 2=FF&ET. 3=INCHES 

Ct 

ENTRY SET-UNI-KETERS 

IUllIT = 1 

COT0 2 

ENTRY SET-UNI-FEET 

IUIIIT = 2 

GOT0 1 

ENTRY SET-URI-INCHES 

IU11IT = 3 

2 UHITll = UNIT( IUNIT ) 

UNITS = UNITN UNITF 

RErnN 
ClllllllllllllllllllIlIIIIII1IlIIIIII1111111111111111111llllllllllllllll 

CI 

CI This entry showr the current uaitr. 

Cl 

ENTRY SHOW-UNI 

WRITE (2,mT='(18 Ths currant unitr are " ,161') LABEL( IUNIT ) - 

BEW 

C1IIIIIIIIIII111111IlIllI1I1I1II1IIIlIlIllllllllllllllllllllllllllllllll 

CI 

Cl This routine arts the window. 

CI 

ENTRY SET-WIN ' 

VALID-INPUT = .FALSE. 

DO WILE ( .NOT. VALID-INPUT ) 

I 

TTPE*,'Tha current range of theta in degrees ir ', IiETl*dpr, 

+ ' to ',ZHET2*DPR 

TYPE*, 'with a resolution of ' ,BESIH*DPB, ' degrems/pixel. ' 

TYPE*.@The current range of phi in degrrer is ', phl*dpr, 

+ ' to ',PU*DPR 

TYPE*, 'with a rasolution of ' ,BESPH*DPR, ' drgrees/pixsl. ' 

I 

TYPE*,'Pleare enter a new range for theta (lower,higher):' 

ACCEPT*, THEI1,THF.TZ 

TKETI - THETI * RPD 

THE11 s THET1 * RPD 

I 

TYPE*.'Plearr enter a new THETA rrrolation in degreer/pixel:' 

ACCEPT*. RESTH 

RESm = RESTH * RPD 

I 

TYPE*,'Plearr enter a new range for phi (lowar,highar):' 

ACCEPT*, PHI ,PHI 

"91 = PHI * RPD 

pH1 = PHP * RPD 

I 

TYPE* , 'Plrare sntrr a nrw PHI rarolution in degrars/pixel: ' 

ACCEPT*, RESPH 

RESPH - RESPH * RPD 

1 

ROWS = INT( (pH2 - PHI) / RESPH + 0.6 ) + 1 

COLS = INT( (THE12 - IHETl) / RFSIH * 0.6 ) 1 

VALID-INPUT = (.NOT. (ROWS .DT.MAXROW) ) .OR. 

+ (.NOT. (COLS. cr .MAXCOL) ) 

IF ( .NOT. VALID-INPUT ) WRITE(l.*) 

+ ' Inrufficient dimenrionr for rpecified rerolution.' 

END DO 

Cl 

Cl Show the window parameterr 

CI 

ENTRY SHOW-WIN 

TYPE*,'The current range of theta in degrees ir ', THETl*dpr, 

+ ' to ',THET1*DPR 

TYPE*, 'with a rerolution of ' .RESTH*DPR. ' degreea/pixel. ' 

TYPE*,'The current range of phi in degrasr is ', phl*dpr, 

+ ' to ' .PHl*DPR 

TYPE*, 'with a rrrolation of ' ,RESPH*DPR, ' degrrer/pixel. ' 

RETURN 
C1 

CI Thie routine detemrinrr namee of output filee. Hrrr arm thm currrnt 

CI amrignmantm. 

C I 

CI Unit Heani.~g Default film n 

CI 1 intrrective input mym8input 

CI 2 interactive output mym8output 

CI 6 input procrsror input FILE. INP 

CI 6 input procrrror (echo) output FILE.LIS 

CI 7 printable output film FILE. PRT 

cI' 10 'plotm data output fils FILE.PLT 

C I 

ENTRY SELOUT 

CALL CLI$CELVALUE( 'P2', FILE ) 

C1 

CI Only if /NOPLOT ir mpocified, then dimcard all output nittrn to unit 

CI The user rhould alraye gat plottable output by drfault. 

CI 

IF ( .NOT. CLI$PRESENI('PLOTTABLE') ) THEN 

OPEN( UNIT=lO, FILE=',NL:', SIATUS='OLD', FORM='UNFORMATIED' ) 

ELSE 

OPEN( UNIT=10, FILE= ' .PLY'. DEFAULTFILE=FILE, STATUS='NEW' . 4 FORM= 'UNFORMAIIED' ) 

ENDIF 

C! 

CI If /PRINT im not mpecified, dircard a11 output written to onit 7. 

Cl The urer only rants to see thr line printer if he ark8 for it. 

C 1 

OPEN( UNIT=7, STAIUS='OLD'. FILE='-NL:' ) 

IF ( CLI$PRESEllT( 'PRINTABLE' ) ) THEN 

OPEN( UNITn7, DEFAULTFILE=FILE, STATUS='NEW1 , FILE.' .PRT' ) 

END IF 

C 1 

CI If /NOECHO is spacifird, the input echo in discarded. 

CI The user rhould get an rcho file by drfault, just like a .PLT filr. 

CI 

IF ( .NOT. CLI$PRESEIT( 'ECHOING' ) ) THEN 

OPEN( UNII=8, FILE='-NL: ' , STATUS='OLD' ) 

ELSE 

OPEIT( UliIT=8, FILE=' .LIS', DEFAULTFILE=FlLE, GIATUS='NEU' ) 

ENDIF 

Ct 

C! Now retreivs the full filenanos for futurs refrrrncr. 

CI 

INqUIRE ( UNIT = 10, NAME = OUTFIL ) 

INQUIRE ( UNIT = 7. NAME = PRTFIL ) 

INQUIRE ( UNIT = 6. NAME - LISFIL 

SET-OUT = SUCCESS 

C! 

C1 Thin routine dirplayr the currant output files. 

C I 

ENTRY SHOW-OUT 

TYPE *. 'Plotting filr la: '. OUTFIL 

TYPE *, 'Printer filr ir: ', PRTFIL 

TYPE *, 'Input echo file: ', LXSFIL 

SHOW-OUT = SUCCESS 

RETURN 

CIII1l!!!IIIII!IIIIlIIIIIlI!IIII!lII!~!!!1!III!Il!!lll1!l11~1l1!1!I!Ill! 

C I 

C! This routine stops the program. 

C I 

ENTRY EXIT-CObfilAllD 

CALL EXIT 
Clltllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll 

CI 

CI Thin routine aorvicee online help raqueete. 

CI 

ENTRY HELP-COWID 

LIBRARY = ' ' 

PI=" 

CALL CLI$GET,VALUE( 'Pi', PI ) 

CALL CLIICET-VALUE( 'HELPLIB', LIBRARY ) 

HELP-COMMAND = LBRIOUTPUI-HELP ( 

PUT-OUIPUT , , I Help output rout 

pi, I Help key doecrip 

+ LIBRARY, . I Holp library nam 

OET-INPUT 1 I The prompting in 

RETURN 

CIlllII1IIIIlIIIIIIllIIIl1II1I1IIII1IIIIIIlIlIIIIIIIIIIIIIllllllll1l1111 

C 1 

CI This routine calla the routinee which do the ahadowing. 

C I 

ENTRY SHADOW-COWAND 

TTPE*, 'Working ...' I Type an informational mo 

CALL INITGF I Initialize next plot 

CALL DOPLAS I Drew tho platen 

CALL DOCTLS I Draw the cylindere 

CALL WRTOUT I Vrito the output buffar 

SHADOW-COMMAND = SUCCESS I Return a nonaal 

RETURN 

CIIlI1I1ll1I111I1I1II1lIIIllIIIIIIIIIIIIIIIIlllllll!llllllllllllllllllll 

C I 

CI Thin routine exmcutea a DCL c-nd a8 a anbprocoaa. Add a test for 

CI better behavior with blank Pin. 

CI 

ENTRY DCL-COMMAND 

CALL CLI$GET,VALUE( 'Pi' , Pi ) 

IF ( PI .Eq. ' ' 1 THEN 

DCL-CObOlAHD = LIBISPAYNO 

ELSE 

DCL-COMMAND = LIBISPAWN( Pi ) 

ENDIF 

RE1 URN 

C I 

CI End of action rontiner. 

CI 

END 
10.2 Non-VAX/VMS Subroutines 

The following routines are for the non-interactive implementations of the code. They are 

used in conjunction with the routines in this chapter that are common to both versions. 

MAIN PROGRAM (non-interactive) 

This is the main routine to be used with the non-interactive code. 

CI I I 

C11 I 

CI I1 

CIII 

CIII 

C1 I I 

C! 1.1 

.CIII 

Cl!! 

CI I I 

CIII 

CI I I 

CI I! 

CIII 

CI I I 

CIII 

CI I1 

CI I! 

C! ! 1 

CI I I 

CI! I 

CI! I 

100 

CIII 

PROGRAM SHADOW 

THIS COMPUTE CODE WAS WRITTEN AT THE OHIO STATE UNIVERSITY 

ELECTROSCIEllCE LABORATORY. ANY PROBLDIS OR COMMENTS 

CAN BE REFERRED TO: 

RONALD J. MARHEFKA OR LASZLO A. TAKACS 

ELECTROSCIENCE LABORATORY 

1330 KINNEAR RD. 

COLUMBUS, OHIO 43212 

PONE: (614) 421-6762 OR 422-6848 

THIS COMPUTER CODE CALCULATES SHADOWING OF AN ANTENNA 

USING THE REC-BSC INPUTS NON-INTERACTIVELY. 

IT SHOULD BE USED I11 PLACE OF INTERACTIVE MAIN PROGRAM 

WE11 TE SHADOW CODE IS USED 011 NON VAX COMPUTERS. 

INCLUDE 'SHACOM.FOR' 

PARAMETER (NSX=30) 

COMPLEX WS 

LOGICAL LRET 

CObNOll/SORARY /WS(NSX) . XSS(3 .NSX) ,MSA(1, NSX) ,MSX ,MSP ,MSPP 

Initialize fill tags 

FILPNM and FILCllM < 0 is sequential tagging 

FILPlJM or FILCNM > 0 that object is tagged with 

FILCHP or FILCHC 

FILPNM or FILCNM = 0 everything tagged with FILCHR 

FILPCM=O 

FILCII1.1=0 

Initialize fill characters 

FILCHP='P1 

F1LCHC='Cs 

FILCHR='X1 

Initializs return flag 

LRET=.TRUE. 

Initialize and read command information. 

CALL ABSCIll 

CONTINUE 

Choose a source location from stored positions. 

DO 1200 MS=l.MSX 

DO 1000 N=1,3 

ANTEl1N (lI)=XSS(lI .MS) 

Initialize graphics information. 

CALL IlIITGF 

Calculate shadow of plates. 

CALL DOPLAS 

Calculate shadow of cylinders. 

CALL DOCYLS 

Wrltm out mapa to printer and plotter files. 

CALL WRTOUT 

C01/TIlIUE 
0917 Clll Road more emuand infomtion. 

c 0918 CALL ABSCRE 

' 0219 Clll Roturn to oxocuto naxt rhadow map. 

0110 IF~RET) ao TO ioo 

0221 81 OP 

.. - 0922 END 
10.3 Subroutines common to both modes 

The following routines are used by both the interactive and non-interactive implementations 

of the code. They are written in transportable FORTRAN-77. 

SUBROUTINE ABSCIN 

This is the input-set processor routine. 1t.reads commands from the input file which 

define the input geometry. 

0001 C---- 

0002 

0003 Ct I l 

0004 Cl l t 

0006 CI l l 

0006 Clll 

0007 Ct 11 

0008 CIlt 

0009 Cl l t 

0010 CIIt 

0011 CIIt 

0012 C111 

0013 Ct l l 

0014 Cllt 

0016 CIII 

0016 CIII 

0017 CIII 

0018 Clll 

0019 C111 

0020 Ctt! 

0021 C!! 1 

0022 C! I! 

0023 C1 1 ! 

0024 CI 11 

0026 C!! I 

0026 C! 11 

0027 CI I1 

0028 CI I1 

0029 CI t 1 

0030 Cl l l 

0031 Clll 

0031 Cl l l 

0033 CI I I 

0034 CI 1 ! 

0036 Clll 

0038 C111 

0037 C! ! I 

0038 CI 1 t 

0039 CI It 

0040 C! ! 1 

0041 CIII 

0042 CI ! I 

0043 CI!! 

0044 CII! 

0046 CIII 

0048 CI I t 

0047 C1 1 ! 

0048 CIII 

0049 CIIt 

0060 Cl I I 

.------------------------------------------------------------------- 

SUBROUTINE ABSCIN 

THE NEC - BASIC SCATTERING CODE (NEC-BSC) WAS VRITTEN 

AT THE OHIO STATE UNIVERSITY ELECTROSCIENCE LABORATORY. 

ANY PROBLEMS OR COMENTS CAN BE REFERRED TO: 

RONALD J. MARHEFKA 

ELECTROSCIENCE LABORATORY 

1310 KINNEAR RD. 

COLUI.BUS,OHIO 43211 

PHONE: (614) 422-6762 

THIS IS A PORTION OF THE MAIN PROGRAM OF THE NEC-BSC. 

IT READS IN THE INPUT AND PASSES THE GEOMETRY INFORMATION 

TO THE SHADOW CALCULATION PART OF THIS OBSCURATION CODE. 

IT READS LOCATIONS OF SOURCES A NUMBER OF FINITE 

PLATES AND/OR A SET OF FINITE 

ELLIPTIC CYLINDERS AND CONE FRUSTUM SECTIONS. 

IHE PLATES ARE DEFINED 

BY THEIR CORNER LOCATIONS. THEY CAN BE PERFECTLY 

CONDUCTING, bNLTI LAYERED DIELECTRIC SLABS, OR COATED 

METAL PLATES. AN INFINITE CROUND PLANE CAN ALSO BE 

ADDED. THE CYLINDERS ARE DEFINED BY THEIR ORIOIN, 

AXES DIRECTIOIIS, AND BY THE RADIUS ON THEIR MAJOR 

AllD MINOR AXES AllD THE ENDCAPS AND FRUSTUM RIMS ARE DEFINED BY 

THEIR POSITION 011 THE CYLINDER AXIS AND THE ANGLE 

OF THEIR SURFACES WITH THE CYLINDER AXIS IN THE 1-2 

CYLINDER PLANE. THE CYLINDERS MUST BE PERFECTLY 

COIIDUCTIIIG. AS DIMENSIONED, IT CAN HANDLE 76 PLATES 

WITH A MAXIMUM OF 11 CORNERS PER PLATE, WITH 6 LAYERS 

OF DIELECTRIC AND 6 CYLINDERS,.WITH 10 RIMS 

ALSO 30 TRANSMITTING 

ELDENTS AND 30 RECEIVING ELEMENTS CAN BE INPUT. 

NOTE THAT THE LIMITS OH THE NUMBER OF PLATES, 

CORNERS, LAYERS, CYLINDERS, SOURCES, AND RECEIVERS 

ARE ONLY DUE TO THE SIZE OF THE ARRAYS. 

THE LINEAR DIhEt1SIOtIS ARE INPUT IN METERS UNLESS 

SPECIFIED OTHERWISE. THE ANGULAR DIMENSIONS 

ARE IN DEGREES. 

NOTE THAT COMEIITS ARE INDICATED IN DIFFERENT FORMS: 

C!!! IMPLIES EXPLANATION OF PROGRAM SECTION 

C$$$ IMPLIES DESCRIPTION OF INPUT DATA 

C===, IhPLIES COhlMAND INPUT SECTION 

C--- IMPLIES BEGIIIIIIlIC OF SUBROUTINE 

C+++ IMPLIES SPECIFICATION OF MAXIMUM DIMENSIONS 

CXXX means liner were not needed for SHADOW program 

CFFF moans linem wart not implemented for current veraion 
CI I I 

CI 1 I 

Cl l l 

CI I I 

CI 1 I 

Cl l l 

CIII 

CIII 

CI I1 

CI I I 

CI I I 

CI 1 I 

CI I! 

CIII 

CI I I 

CI 11 

CIII 

CI I I 

Cl l l 

Cltl 

C! I I 

CI I I 

CIII 

CIII 

CI! I 

CI I I 

c*** 

c*** 

c*** 

NEC-BSC VERSION 2.6-1 ( UPDATED 8/16/86 ) 

MAJOR VERSION CHANGES ARE DENOTED BY THE FIRST DIGIT 

MINOR CHANGES IN CAPABILITY ARE DENOTED BY THE DECIMAL 

POINTS AND MINOR CHANCES THAT DO NOT NEED ADDED 

DOCUMENTATION ARE SHOW AFTER TKE DASH. 

NOTE ON VERSION 2.2 

1) THE PLATE - CYLINDER TERMS ARE NOT PRESENTLY INCLUDED. 

2) THE CTLINDER - CTLINDER INtERACTIOlf TERMS WORK ONLY 

FOR PARALLEL CYLINDERS WITH RIE PATTERN CUT 

PERPEIIDICULAR TO THE CYLINDER AXES. 

NOTE ON VERSION 2.3 

RANGE CITING HAS BEEN ADDED IN THE NEAR ZONE 

NOTE ON VERSION 2.4 

VOLUMETRIC PATTERN CAPABILITY HAS BEEN ADDm 

NOTE ON VERSION 2.6 

PARAMETER STAIEbENTS FOR DIMENSIONS ADDED 

LRRLY INDICES CUiNGED FOR MORE EFFSCSENCT 

UO~ OF VERSION 2.8 

CONE FRUSTUM INPUT ADDED 

SPECIFICATION OF MAXIMUM DIMENSION SIZES 

MAXIMUM DIMENSION FOR OBSERVATION POINTS 

PARAMETER (NOX=1801) 

MAXIMUM DIhENSION FOR PLATE DIELECTRIC LAYERS 

PARAMETER (NLX.6) 

MAXIMVM DIMENSIOII FOR SOURCES 

PARAMETER (NSX=30) 

MAXIMUhl DIMENSIOk FOR RECEIVERS 

PARAMETER (NRXx30) 

INCLUDE 'SHACOM.FORg 

COMPLEX CJ,CPI4,WS,WR 

COMPLEX CIll ,C122,Zll,Z22 

CHARACTER*f IT(40), IR(36) ,LABEL(3) *6 

CHARACTER RUNDAT*9,RUllTIM*8 

DIMEllSION IMS(NSX) ,HS(NSX) ,HAWS(NSX) ,VXSS(3,3 ,NSX) 

DIMENSION IMR(NRX) ,HR(NRX) ,HAWR(NRX) ,VIRR(3,3,NRX) 

DIkIENSION XRR(3,NRX) .VXRP(~,~,NRX) 

DIMENSION XPC(3) ,VRT(3,3) ,TR(3) 

DIMENSION JMI(4) ,DR(3) ,DT(~) ,DP(3) ,FtDR(3) 

DIMENSION XQR(3) ,XQ(3) 

LOGICAL LK3(0,8) ,LFQG ,WARN ,LSCAT,LPPTEC 

LOGICAL LSOR,LOUT,LSRFC,LSURF,LSHD,LCYL,LPLA 

LOGICAL LIHD.LDEBUG,LTEST,LSLOPE,LCORNR,LDC 

LOGICAL LWRITE,LPLT,LCRIID,LSMP,LR).IP,LPRAD,LRANC,LCNPAT 

LOGICAL LIlEAR,LRCVR,LRECT,LVOLP,LVPLT,LFARN 

COMMON/SORDAT/IM.H, HAW, FACTOR 

COW~~N/SORARY/US(NSX), XSS(3,llSX) .MSA(2 .NSX) ,MSX ,MSP ,MSPP 

COhihION/TEST/LDEBUG, LTEST, LWARN 

COMMON/SORINF/XS(3) .VXS(3.3) 

cOMMON/IMAIUF/XI(~,NPX .NPx) .UXI(3,3,NPX) 

COMMO~~/RECINF/WR(NRX). IMRP,HRPP,HAW,VXR(~,S) ,MR 

COHMON/RECARY/XRP(~,NRX) ,MRA(~.NRX) ,DRP(3) ,DTP(~) .DPP(~) 

COMNO~~/LIMIT/SML ,SMLR ,6MLT,BIG 

COhNON/DIR/RD(3) ,D(3) ,LNEAR,LRCVR 

COMMONIWAVEIYK .WL 
0280 COH_IONICo_PICJ,CPIA

o281 CO_ONIFNANGIFNP(N_.Npx)

0282 CO_ON/LPLCT/LPLA,LCTL

0283 CO_OH/GROUND/LGKND,HPXK

0284 COHMO_|/OUTPFZ/TPPD,PRAD,RANO,LCNPAT,LPRAD,LKANg

0286 CO_ONIOUTPNZ/KXS,KXI.TTS,TYI,PZS,PZI,LRECT

0286 COH_ION/OUTPNV/IVPN.IV,LVOLP

0287 CO_tON/TKANDT/LSLAB(NPX),NSLAB(NPX),DSLAD(NLX,NpI) " mq

0288 2,ERSLAB(NLX,NPX),TESLAB(NLX,Npx),URSLAB(NLX.NpI) _

0289 3, THSLAB(NLX. NPX)

0290 DATA LABEL/'J_TE3S', 'FEET ', °INCHES°/ m

0291 DATA IT/'TO','PD','PG','SG','LP','PP'.'Gp','XQ','RT' 'CG,

0292 2,'SH','RD','CH','CE','BP','UF','RH','UN','FR,,,NX,

0293 3,'EN','NP'.'NC','NC','NS','PR','US','pN','RG,,,NR,

0294 4,'SA','FM','RA'.'CR','VD','VN'.'VP','pF'.'VF','CC,/

0295 C_I! NAX.DIHENSIONOFSOURCES,ILECEIVERS,CTLINDERS,RIMS,PLATES,EDGES,

0296 Cllf LAYERS, ANDOBSERVATIONPOINTS.

0297 HSDX=NSX

0298 }.rJ_X=NRX

0299 MCDX=NCX

0300 NCDX=NNX am

0301 _DX=NPX

0302 HEDX=NEX

0303 HLDX=NLX

0304 MODX=NOX

wmq

0305 Gill NOTE: IN SUB. RFPTCL THE VARIABLESIVD,PHOR,PHORP,ANDVILO ' .

0306 0111 14USTBE DImeNSIONED 2*_DX*I

0307 Gill

0308 Gill SET TIRE FLAGSTO ZERO

0309 IATIM=O _q

0310 IBTI_t=O

0311 ICTIH=O

0312 GO TO 2701

0313 2700 CO_;TINUE ,,,,,q

0314 WRITE(6,3008)

0315 1VRITE(6,3006)

0316 2701 CONTINUE "

0317 C!!_ INITIALIZE DATA TO DEFAULTVALUES. am

0318 0551 TEST OUTPUTDEFAULTDATATO: 0319 LDEBUG=.FALSE.

0320 LTEST=.FALSE.

0321 LOUT=.FALSE,

0322 LWAR_=.TRUE. m_

0323 LSLOPE=,TRUE,

0324 LCORNR=.TRUE.

0325 LSOR=.FALSE.

0328 JHX(1)=I am

0327 JH/(2)=6

0328 JHX(3)=5

0329 JHX(4)=4

0330 DO 2705 J=1,0

0331 DO 2705 K=1,4 i

0332 LKJ(K,J)=.FALSE.

0333 IF(J.LE.JHX(KL))KJ(K,J)=.TRUE.

0334 2705 CO!ITINUE

0335 LKJ(3,4)=.FALSE. am

0336 LKJ(3,5)=.FALSE. i

0337 CI$$ FAR ZONE RANGE DEFAULT DATAKD:

0338 LRANG=.FALSE. %

0339 RANG=I. m_

0340 0151 RANGEGATEDATAGR:

0341 R/'.tIN:SP]LT .-:

0342 I_AX=BIC

0343 CU$ POWERRADIATEDDEFAULTDATAPR:

150 "
LPRAD=.FALSE. 

PRAD=O. 

IPnAD=l 

C$(( PATTERN DEFAULT DATA PD:, PN:, PF:. VD:, VF:, k VN: 

LVOLP=.QUE. 

LFARN=.TRUE. 

LNEAR=.FALSE. 

WLECT=.FALSE. 

- 

LCNPAT=.TRUE. 

TPPD=O . nvv=a. 

TPPS=O . TPPI=a. 

mcz=o. 

PHCZ=O. 

THCX=90. 

PHCX=O . VPC(l,l)=l. 

VPC(l,2)=0. 

VPC(l,3)=0. 

vpc(a,i)=o. 

wc(a,a)=i. 

VPC(1,3)=0. 

VPC(i,S)=O. 

VPC(2,3)=0. 

VPC(3,3)=1. 

XPC(l)=O. 

XPC(l)=O. 

XPC(3)=0. 

RXS=I. 

RXI=O. 

TYS=O. 

TYI=2. 

PZS=O. 

PZI=a. 

IVPN=3 

NPN=181 

NPV=Oi 

C)($ BACK OR BISTATIC NEAR ZONE SCATTERING DEFAULT DATA BP: 

LSCAT=.FALSE. 

C((8 FREqUEICY DEFAULT DATA FR: k PM: 

FRQC=.l997926 

LFQC=.FALSE. 

FpCS=.2997926 

FQCI=O. 

NFQC=I 1 

CO$ PLATE DEFAULT DATA PC: I LPLA=.FALSE. 

MPX=O 

bW(1)=4 

LSLAB(I)=O 

XX(1,1,1)=1. 

XX(2,1,1)=1. 

XX(3,1,1)=0. 

xx(i,a,~)=-1. 

xx(a,a,l)=i. 

XX(3,2,1)=0. 

XX(1,3,1)=-1. 

XX(3,3,1)=-1. 

XX(3,3,1)=0. 

XX(l,4,1)=1. 

XX(2.4,1)=-1. 

XX(3.4.1)=0. 

C($$ OROUND PLANE DEFAULT DATA CP: 
LCRND=.FALSE. 

MPXR=MPX 

C($$ SOURCE DEFAULT DATA 60: ,SA: ,k 6M: 

LSMP=.FALSE. 

MSX=O 

HSAT=O 

HSA(l,l)=O 

HSA(l,i)=O 

Xss(1.1)=0. 

XSS(2,1)=0. 

XSS(3,1)=0. 

IMS(i)=-1 

HS(l1r0.6 

HAWS(l)=O. 

THSZ=O . PHSZ=O. 

THSX=PO. 

PHSX=O . VXSS(i.i,l)=i. ' 

vXSS(1,2.1)=0. 

VXSS(1.3.1)=0. 

VXSS(2,1.1)=0. 

VXSS(2,2,1)=1. 

VXSS(2,3,1)=0. 

vxss(a,i,i)=o. 

VXSS(3,2,1)=0. 

VXSS(3,3,l)=l. 

WS(l)=(l. ,O.) 

C$t$ RECEIVER DEFAULT DATA RC: ,RA: ,k RM: 

LRCVR=.FALSE. 

LIUIP=. FALSE. 

MRX=O 

MRAT=O 

).[RA(l.I)=O 

MRA(l,i)=O 

XRR(l,l)=O. 

XRR(2,1)=0. 

XRR(3.1)=0. 

IMR(l)=-I 

HR(1)=0.6 

HAWR(I)=O. 

THRZ=O. 

PHRZ=O. 

THRX=90. 

PHRX=O. 

VXRR(I,l,I)~I. 

VXRR(I,2.1)=0. 

VXRR(1,3.1)=0. 

VXRR(2,1,1)=0. 

VXRR(2,2,l)=l. 

VXRR(2,3.1)=0. 

VXRR(3,1,1)=0. 

VXRR(3,9.1)=0. 

VXRR(3,3,1)=1. 

wR(l)=(O. ,O,) 

C$$$ LINE PRIllTER DEFAULT DATA LP: 

LNRITE=.FALSE. 

C$$$ PLOTTER DEFAULT DATA PP: k VP: 

LVPLT=.FALSE. 

LPLT=.FALSE. 

LPPREC=.FALSE. 

PPXL.0. 

PPYL=3. 

PPXB=O . 
PPXE=360. 

PPXS=30. 

PPYB=-40. 

PPYE=O. 

PPYS=lO. 

C$$$ ROTATE TRANSLATE DEFAULT DATA BT: 

ZHZP=O. 

PHZP=O . w=90. 

PHXP=O . TR(l)=O. 

ma) =o . TR(3)=O. 

VRT(l,l)=l. 

VRT(l,l)=O. 

VRT(1,3)=0. 

VRT(2,1)=0. 

vRT(2,2)=1. 

VRT(2,3)=0. 

VRT(3,1)=0. 

var(s,a)=o. 

VRT(3,3)=1. 

C$$$ CYLINDER DEFAULT DATA CO: & CC: 

MDC=O 

LCYL=.FALSE. 

NCX=O 

mc(i)=a 

AC(l,l)=l. 

BC(1,1)=1. 

AC(2,1)=1. 

BC(2,1)=1. 

ZC(2,1)=-3. 

TcR(a, i)=i.670796 

ZC(1,1)=3. 

TCR(i,I)=1.670796 

VCL(l,l,l)=l. 

vcL(1,a,l)=o. 

VCL(1.3.1)=0. 

VCL(2,1,1)=0. 

vcL(a.a,~)=i. 

VCL(2,3,1)=0. 

VCL(3,1,1)=0. 

VCL(3,2,1)=0. 

VCL(3,3,1)=1. 

XCL(l.I)=O. 

XCL(2,l)=O. 

XCL(3.1)=0. 

CIS$ unIrs DEFAULT DATA UN: ,UF: L US: 

IUNIT=l 

mrrra=utrIr(rulrrr) 

UNITF=l. 

UNIIS=UNITN*UNITF 

IU!IST=O 

IUlISP=IUllST 

CO TO 2Q99 

ENTRY ABSCRE 

3000 CONTINUE 

WRITE(6,3006) 

3006 FORMAT(IX, IH* ,761, lH*) 

WRITE(6,3006) 

WFlITE(6,3006) 

3006 FORMAT(IX,26(3H***)) 

Clll READ IN VARIOUS COWAND OPTIONS. 

2999 READ(6,3001,END=3004) (IR(I).I=l.36) 
3001 FORMAT(38A2) 

vRITE(8,3002) 

3002 FORMAT(1H ,//////,lX,26(3H***)) 

WRITE(8,3008) 

YRITE(6,3003) (IRCI), 1=1,38) 

3003 FORMAT(lX, lH* ,2X ,36A2,2X, IH*) 

CIII 

Clll CHECK AGAINST STORED OPTIONS 

CIII 

C$$$ CM: COb!bIEIST CARD 

IF(IR(1) .EQ.IT(l3)) CO TO 3090 

C$$$ CE: LAST COhII.ENT CARD 

IF(IR(1) .EQ.IT(II)) CO TO 3000 

URITE(8.3008) 

YRITE(6,3008) 

CS$$ TO: TEST DATA CENERATION OPTION. 

IF(IR(1) .EQ.IT(l)) CO TO 3100 

C$$$ PD: FAR ZONE PATTERN INTEGER ANGLES 

IF(IR(l).EQ.IT(2)) GO TO 3200 

C$$$ RD: FAR ZONE RAtICE INPUT 

IF(IR(l).EQ.IT(l2)) CO TO 3260 

cast PC: PLATE GEOMETRY INPUT 

IF(IR(1) .EQ. IT(3)) CO TO 3300 

C$$$ SC: SOURCE GEOMETRY INPUT 

IF(IR(1) .EQ. IT(4)) GO 10 3400. 

C$$$ SM: SOURCE NEC OR AMP INPUT 

IF(IR(l).EQ.IT(lI)) GO TO 3460 

cat$ LP: LINE PRINTER LISTINC OF RESULTS 

IF(IR(1) .EQ. IT(6)) CO TO 3600 

caaa PP: PEN PLOT OF RESULTS 

IF(IR(1) .EQ. IT(8)) CO TO 3600 

cat$ CP: INCLUDE INFINITE GROUND PLANE 

IF(IR(1) .EQ.IT(7)) CO TO 3700 

C$$$ XQ: EXECUTE PROGRAM 

IF(IR(l).EQ.IT(8)) CO TO 3800 

C$$$ RT: TRANSLATE AND/OR ROTATE COORDINATES 

IF(IR(l).EQ.IT(9)) CO TO 3900 

C$$$ CC: CYLINDER GEOMETRY INPUT 

IF(IR(1) .EQ. IT(l0)) CO TO 4000 

C$$$ CC: CONE CEOkETRY INPUT 

IF(IR(l).EQ.IT(40)) GO TO 4000 

caaa BP: BACK OR BISTATIC NEAR ZONE SCATTERINO 

IF(IR(1) .Eq. IT(16)) 00 TO 6240 

Cat$ UF: SCALE FACTOR FOR INPUT 

IF(IR(1) .EQ.IT(l8)) CO TO 4120 

caaa UN: UlrrTs OF INPUT 

IF(IR(I).EQ.IT(18)) CO TO 4100 

C$$$ FR: FREQUENCY 

IF(IR(l).EQ.IT(lQ)) 00 TO 4200 

C$$$ NX: NEXT PROBLEM 

IF(IR(1) .EQ.IT(lO)) CO TO 1700 

C$$$ Ell: END PROCRAM 

IF(IR(1) .EQ.IT(Zl)) GO TO 097 

C$$$ NP: NEXT SET OF PLATES 

IF(IR(1) .EQ. IT(22)) CO TO 3360 

caaa NC: NEXT SET OF CYLINDERS 

IF(IR(1) .EQ. IT(23)) CO TO 4060 

CS$$ NC: NO GROUND PLANE 

IF(IR(1) .EQ. IT(24)) CO TO 3760 

C$$$ HS: NEXT SET OF SOURCES 

IF(IR(1) .EQ. IT(25)) CO TO 3490 

C$$$ PR: POWER RADIATED INPUT 

IF(IR(l).EQ.IT(28)) CO TO 3440 

CS$$ US: UNITS OF KS AND HAWS IN SC: , SA: , RC: ,& RA: 
IF(IR(1) .Eq. IT(27)) GO TO 4110 

C$88 PN: NEAR ZONE PATTERN DESIRED 

IF(IR(1) .Eq. IT(28)) GO TO 3260 

Ca8$ RC: RECEIVER GEOMETRY IWUT 

IF(IR(1) .EQ.IT(29)) GO TO 4400 

C8$$ RM: RECEIVER NEC OR AMP INPUT 

IF(IR(l).Eq.IT(l7)) GO TO 4460 

C$$$ NR: NEXT SET OF RECEIVERS 

IF(IR(1) .Eq. IT(3O)) GO TO 3496 

Cat) SA: SOURCE ARRAY GEOMETRY INPUT 

IF(IR(1) .Eq. IT(31)) GO TO 3810 

C$$$ FFI: MULTIPLE FREQUENCY INPUT 

IF(IR(1) .Eq. IT(32)) GO TO 4260 

CaO RA: RECEIVER ARRAY GEOMETRY INPUT 

IF(IR(1) .Eq.11(33)) GO TO 4810 

Cat$ OR: RANOE OATE INPUT 

IF(IR(1) .Eq. IT(34)) GO TO 6280 

C$88 VD: FAR ZONE VOLUMETRIC PATTERN INTEGER ANGLES 

IF(IR(1) .Eq . IT(36)) GO TO 9210 

C8$8 VN: NEAR ZONE VOLUMETRIC PATtERN 

IF(IR(1) .Eq.IT(36)) GO TO 3270 

CaO VP: VOLUMETRIC DUMP OF RESULTS FOR PLOTTING 

IF(IR(1) .Eq. IT(37)) GO TO 3660 

C$$$ PF: FAR ZONE NON INTEGER ANOLES 

IF(IR(1) .Eq. IT(38)) GO TO 3220 

CaSS VF: FAR ZONE VOLUNETRIC PATTERN NON INTECER ANOLES 

IF(IR(l).Eq.IT(39)) GO TO 3230 

CS$$ 

YRITE(6.3021) 

3021 FORNAT(' *** PROCRAM ABORTSlll COMMAND INPUT IS NOT PART', 

2' OF STORED COk%tAND LIST ***I) 

3004 STOP c====.. 

3090 CONTINUE 

C=== CM: CE: COMMANDS ====== 

cat: 

C$O IR(I)=CM: OR CE: FOLLOW BY AN ALPHANUhERIC STRING OF 

C$$$ CHARACTERS. TEE I%!: COMMAND IMPLIES THAT THERE WILL BE 

C$$$ ANOTHER COMENI CARD FOLLOWINC IT. THE LAST COWIT CARD 

C$$( MUST HAVE THE CE: COWAND ON IT. IF TKERE IS ONLY ONE 

C8#$ COh(EIIT CARD THE CE: COMMAND SHOULD BE USED. 

cao 

READ(6,3001) (IR(1) ,I=1.36) 

URITE(6,3003) (IR(1) ,1=1.38) 

IF(IR(1) .Eq.IT(l4)) GO TO 3000 

IF(IR(1) .Eq.IT(lJ)) GO 10 3090 

URITE(6.3091) 

3091 FOPJ-!AT(' *** PROGRAM ABORTS! I I CE: COM!AND MUST BE', 

2' USEDTOFJIDCOMMENTS. ***I) 

STOP c=.==== 

3100 COtlTINUE 

C=== TO: COMMAND ====== 

cot 

Cat$ LDEBUG=DEBUG DATA OUTPUT ON LINE PRIlITER(TRUE OR FALSE) 

C¶tS 

C¶¶¶ LTEST=TEST DATA TO INSURE PROGRAM OPERATION(TRUE OR FALSE) 

C$$¶ 

Cat$ LOUT=OUTPUT MAIN PROGRAM DATA ON LINE PRINTER(TRUE OR FALSE) 

eta: 

C$O LWARN=WARltINC DATA OUTPUT 08 LINE PRI!lTER(TRUE OR FALSE) 

caat 

READ(6, *) LDEBUC ,LTEST .LOUT, LWARH 

MITE(6,3101) LDEBUC .LTEST.LOUT ,LWARN 
3101 FORHAT(2H *,6X.'LDEBUG= ',L3,6X,'LEST= ',L3,6X,'LOUT=',L3 

2.6X, 'LVAR!I=' .L3,T7Q, iH*) 

URITE(6,3006) 

C$t$ 

C$$$ LSLOPE=SLOPE DIFFRACTED FIELD DESIRED (1 OR F) 

C$t$ 

C$$S LCORNR=CORNER DIFFRACTED FIELD DESIRED (1 OR F) 

C$$t 

C$$$ LSOR=AHTEH!IA SHADOW ALO!IE(TRUE OR FALSE) 

C$$$ 

READ(6, *) LSLOPE. LCORNR, LSOR 

WFiITE(8,3101) LSLOPE,LCOR!IR,LSOR 

3102 FORMAT(2H *,6X,'LSLOPE= ',L3,6X,'LCORNR= ',L3,6X,'LSOR= ',L3, 

2179, lH*) 

kXITE(6,3006) 

IF(LS0R) hTlITE(6.3402) 

3402 FORMAT(2H * ,6X, 'SOURCE SHADOW ALONE IS COMPUTED1 l I' ,170. lH*) 

IF(LS0R) WaITE(6,3008) 

cttt 

C$$$ K=1, J=OPTIOlI TO RU!I DIRECT RAY TERM: 

C$$$ l=DIRECT FIELD 

C$$S NOTE. NORMALLY LXJ(l,l)=.TRUE. THIS COMPUTES THE INCIDENT FIUD. 

CS$$ 

C$$$ I(=2,J=OPTION TO RUN VARIOUS RAT TEILW FOR PLAIFS: 

C$$$ l=SINCLE REFLECTED FIELD 

C$$S 2=DOUBLE REFLECTED FIELD 

C$$$ 3=SIflGLE DIFFRACTED FIELD 

C$$$ 4-REFLECTEDIDIFFRACTED FIELD 

C$$$ 6=DIFFRACTED/REFLECTED FIELD 

C$$$ 6=DOUBLE DIFFRACTIOII INDEATIFICATIOA 

C$$$ IIOTE: NORMALLY LXJ(2,l TO B)=.TRUE. THIS COMPUTES ALL FIELD 

C$$$ VALUES INCLUDING IDENTIFINC DOUBLE DIFFRACTION PROBLEM AREAS 

C$$$ FOR A CONVEX OR CONCAVE PLATE STRUCTURE. 

cats 

C$SS K=3,J=OPTION TO RUI VARIOUS RAT TEIWS FOR CYLINDER: 

C$$$ l=REFLECTED.TRA!ISITIO!l ,AID CREEPING WAVE FIELDS 

C$$$ 2=SIlIGLE REFLECTED FIELDS FROM ENDCAPS 

C$$$ 3=SI!IGLE u~FFACTED FIELDS FROLl ENDCAP RIMS 

C$$$ 4=REFLECTED-SCATTERED FIELDS FROM TWO PARALLEL CYLINDERS 

C$$$ 6=DIFFRACTED-SCATTERED FIELDS FROM TWO PARALLEL CYLINDERS 

C$S$ NOTE NORPIALLY LKJ(3,I TO 6)=.TRVE. THIS COMPUTES ALL FIELD 

C$$$ VALUES FOR A FINITE ELLIPTIC CYLINDER. 

C$S$ 

C$S$ K=4,J=OPTION TO RUN VARIOVS RAY TERMS FOR 

C$$$ PLATE-CYLINDER INTERACTIO1lS: 

C$$$ l=FIELDS REFLECTED FROM THE PLATES THEN REFLECTED OR 

C$$$ DIFFRACTED FROM THE CYLINDER 

C$$$ 2=FIELDS REFLECTED OR DIFFRACTED FROM THE CYLINDER THEN 

C$$$ REFLECTED FROM THE PLATES 

C$$$ 3=FIELDS REFLECTED FROM THE CYLINDER THElI DIFFRACTED 

C$$$ FROPI THE PLATES 

C$S$ 4=FIELDS DIFFRACTED FROM THE PLATES THEN REFLECTED 

C)$$ FRO\! THE CYLINDER 

C$$$ IIOTE: NOWALLY LKJ(4.1 TO 4)=.TRUE. THIS COMPUTES ALL FIUD 

C$$$ VALUES THAT IRTERACT BETWEEll THE PLATES AND CYLINDERS. 

Ct$$ 

DO 3104 K=1,4 

JK= JhlX (K) 

READ(6, *) (LKJ(K, J) . J=1, JK) 

3104 kRITE(8,3103) K, (LKJ(K. J) , J=1, JK) 

3103 FORMAT(2H *,T79,lH*,T8,'LKJ(',Il,',J)= ',6L2) 

GO TO 3000 c====== 

4100 CO!lTI!lUE 
Cm== W: COMMAND ==IS== 

ca: 

Ctlt IUNIT-INDICATOR OF UNITS USED FOR INPUT DATA. 

C$ $a l=METERS 

csaa FEET 

CW 3=INCHES 

ctaa 

READ(6.*) IUNIT 

ulrITlr=mlIT(IuwIT) 

UllITS=UllITN*UNITF 

WRITE(6,4101) LABEL(1UNIT) 

4101 FORMAT(2H *.6X.'ALL THE LINEAR DIMENSIONS BELOW ARE' 

2,' ASSUbED TO BE IN ',Ab,T79,1H*) 

00 TO 3000 

cl=lllr 

4120 CONTINUE 

C=== UF: COkBIAND ====== 

ca: 

CS$) UNITF = SCALE FACTOR FOR GEOMETRY 

c0: 

READ(6,*) UNITF 

UNITS=UNITN*UNITF 

WRITE(6,4111) UNITF 

4121 FORMAT(1H *,CX,'ALL THE LINEAR DIMENSIONS BELOW ARE SCALED 61' 

2,' A FACTOR OF ',F12.6.T79,lH*) 

GO TO 3000 

CPEX=== 

4110 CONTINUE 

C=- US: CObBlAllD XILXI= 

caaa 

C$$$ IWlST=IllDICATOR OF UNITS USED FOR HS AND HAWS IN THE 

C$S$ SC: COhIMAHD. 

caa: O=WAVELEIICTHS 

caa: 1-METERS 

ca: FEET 

c(($ 3rINCHES 

eta: 

caaa NOTE: IF ONE SOURCE IS SPECIFIED IN WAVELENGTHS, THEY ALL 

cat$ MUST BE IN WAVELENGTHS. 

READ(6. *) IUNST 

IF(MSX.EQ.0) 00 TO 4112 

IF(IUIlST.EQ .O. AND. IUIISP .Eq ,O) CO TO 4112 

IF(IUIIST.NE.O.Al1D. 1UlISP.NE.O) 00 TO 4112 

WRITE(6,4111) 

4111 FORMAT(' *** PROCRAM ABORTS I11 SOURCE UNITS. ALL UNITS NOT' 

2, ' SPECIFIED IN WAVELENGTHSI l l ***') 

STOP 

4112 CONTINUE 

IF(IUNST.EQ.0) GO TO 4114 

WRITE(6,4113) LABEL(1UNST) 

4113 FOUlAT(2H *,6X,'THE SOURCE LENGTH HS AND WIDTH HAYS ARE' 

3,' ASSU1.W TO BE IN '.A6,T79,1H*) 

CO TO 4116 

4114 WRITE(6,4116) 

4116 FORMAT(2H *,6X,'THE SOURCE LENGTH HS AND WIDTH HAWS ARE' 

2, ' ASSUMED TO BE IN WAVELENGTHS' ,nQ, IH*) 

4116 IUNSP=IUlIST 

GO TO 3000 c===..= 

4200 COllTINUE 

C=== FR: COhWIAIID ==11-= 

caaa 

C$$l FRQG=FREQUEIICY 111 GICAKERTZ. 

ctaa 
LfQG=.FALSE. 

NFQG=l 

READ(6,*) FRQO 

WL=.2907926/FRqC 

WRITE(6.4201) FRqC 

4201 FOF.MAT(2iH * ,6X, 'FREQUENCY= ' ,F7.3, ' GIGAHERTZ' ,179, IH*) 

WRITE(6,3006) 

k'RITE(6,4202) WL 

4202 FORMAT(2H ,6X, 'WAVELENGTH= ' ,F10.6, ' METERS' ,179, IH*) 

GO TO 3000 

C.= 

4260 CONTINUE 

C=== FM: CObMAND ====9= 

C$$$ 

C$$$ NFQC=NIR.!BER OF FREQUEllCIES DESIRED 

C$SS 

C$$$ FQCS=STARTING FREQUENCY IN GIGAHERTZ 

CS$$ 

C$$S FqCI=INCREI.!E:lTAL FREQUEICT CHANCE IN GIGAHERTZ 

CS$$ 

C$$$ NOTE: THE SOURCE LENGTH AND WIDTH MUST NOT BE GPECIFIED 

C$$$ IN WAVELENGTHS. ALSO ONLY ONE PATTERN LOCATION 

C$$$ CAN BE SPECIFIED. 

C$$$ 

LFQC=.TaLE. 

READ (6, *) NFqC. FQCS, FqO I 

WRITE(6,4261) NFQC 

4261 FORlrlAT(2H * ,6X. 13, ' FREqUEllCIES ARE SPECIFIED' ,179. IH*) 

IF(1lFQG. GT.MODX) WRITE(6.3288) llFqG 

IF(IlFQG. CT .MODX) STOP 

WTlITE!0,3006) 

YIRITE(6,4262) FQGS,FQCI 

4262 FORMAT(2H * -61. 'STARTING FREQ.= ' ,F10.6, ' IN STEPS OF ' ,F10.6 

2,' CHZ.',T79,1H*) 

Clll CALCULATE MID-FREQUEIICY 

FRQC=FQCS+O.6*FQCI*(NFQO-1) 

WL=.2997925/FRQC 

CO TO 3000 

c====*= 

3230 CONTINUE 

C=== VF: COIMA!lD =I==== 

C4$$ 

C$$$ FAR ZONE VGLUhETRIC PATTERN NOlI INTECER ANGLES 

C$$$ 

LVOLP=.TRUE. 

LFARN=.TRUE. 

GO TO 3211 

Cr===== 

3210 COIlTINUE 

C=== M: COFPlAllD =====a 

C$$$ 

C$$$ FAR ZONE VOLUFETRIC PATTERN INTEGER ANGLES 

C$$$ 

LVOLP=.TRUE. 

LFARlI= . FALSE. 

GO TO 3211 c====== 

3220 COIITIIUE 

C=== PF: CO)bIAND =:==== 

C$$$ 

C$$$ FAR ZONE PATTERlI NON INTECER ANCLES 

C$t$ 

LVOLP=.FALSE. 

LFARII= . TRVE. 
GO TO 3211 

C~llllt 

3200 COHTINUE 

C=-= PD: COWND 1-11-1 

cttt 

C$t$ FAR ZONE PATTERN INTEGER ANGLES 

ctta 

Cat$ THCZ,PHCZ=ORIENTAIION OF THE 2 AXIS RELATIVE TO TEE 

C$$$ FIXED COORDINATE STSTEM. 

cat8 

C$(( IHCX.PHCX=ORIENTATION OF THE X AXIS FELATIVE TO THE 

C$#$ FIXED COORDINATE SYSTEM 

cttt 

LVOLP=.FALSE. 

3211 LNEAR=.PALSE. 

READ(6, *) THCZ,PHCZ,THCX ,PHCX 

WC(3,1)=SIN(THCZ*RPD) *COS(PHCZ*RPD) 

VPC(3,2)=SIN (THCZ*RPD) *SIN (PHCZ*RPD) 

VPC(3,3)=COS(THCZ*RPD) 

WC(1, I)=SIN (THCX*RPD) *COS(PHCX*RPD) 

VPC(l,2)=SIN(THCX*RPD) *SIN(PHCX*RPD) 

WC(1 ,3)=COS(THCX*RPD) 

Cf f I IHsoRE WC(1 ,N) IS PERPENDICULAR TO VPI(3,N) 

DZX=WC(~,~)*WC(~,~)*WC(~,~)*WC(~,~)*WC(~.S)*WC(~,S) 

IF(ABS(D2X) .OT.0.1) WRIW(6.3201) 

3201 FORMAT(' *** PROGRAM ABORTS IN PATTERN CUT SECTION.' 

2, ' THE COORDINATES ARE NOT ORTHOGONAL1 I I ***'I 

IF(ABS(DZX) .cr .o. i) STOP 

WC(I,l)=WC(l,I)-WC(3,l)*DZX 

VPC(1,2)=WC(l,2)-WC(3,2)*DZX 

WC(1,3)=VPC(I ,3)-WC(3,3)*DZX 

DOT=WC(~,~)*WC(~.~)+WC(~.~)*WC(~,~)*WC(~.~)*WC(~,~) 

DQT=SQRT (Dor) 

WC(I.~)=WC(I. I)/Dor 

VPC(1,2)=VPC(1,2)/DOT 

WC(l,3)=VPC(l,3)/DOT 

WC(~,I)=WC(~,~)*WC(I,~)-WC(~,~)*VPC(~,~) 

WC(2,2)=WC(3,3)*WC(I.I)-VPC(3,1)*WC(1,3) 

WC(~.~)=WC(~.~)*WC(I.~)-WC(~,~)*WC(~,~) 

YRITE(6,3202) 

3202 FOAMAT (2H * ,6X, 'THE PATTERN AXES ARE AS FOLLOWS: ' ,770, IH*) 

DO 3204 N1=1,3 

YRITE(6,3006) 

3204 bRITE(6,3206) (NI,NJ,VPC(NI,NJ) .NJ=i ,3) 

3206 FOUlAT(2H *,Ix,~(~x,'vPc(',~~,'.',I~,')=',F~.~),T~~,~H*) 

DO 3203 N=1,3 

3203 XPC(N)=O. 

Cttt 

cttt Lcllprr=Is PATTERN CONIC CUT(T OR F)? 

Ct$$ T=THETA CUT(CON1C CUT) 

C$$) F=PHI CUT(PH1 CONSTAIIT) 

caii 

ctta TPPD=PATTERN ANGLE THAT IS CONSTANT 

C($$ IF LCWPAT=T: TPPD=THF' CONSTANT 

C$t$ IF LCIIPAT=F: TPPD=PHP COllSTAlT 

ctta 

IF(LV0LP) GO TO 3212 

IPPV=O . IIPV=l 

READ (6, *) LCNPAT. TPPD 

bRITE(6.3006) 

IF(. NOT. LCIIPAT) WRITE(6.3206) TPPD 

3206 PORMAT(2H *,6X,'THETA IS BEING VARIED WITH PHI= '.F10.6 

2,17Q,iH*) 
IF (LCtIPAT) WRITE(6,3207) TF'PD 

3207 FOU!AT(ZH *,6X,'PHI IS BEING VARIED WITH THETA- ',Fl0.6 

1.179,1H*) 

 WRITE(^ ,3008) 

CO TO 3216 

c:: S 

C$#$ rPPD=START OF VOLUMETRIC PATTER1 ANGLE 

C$$$ TPPV-INCREMENT FOR VOLUMETRIC PATTERN ANCLE 

Ctt$ NPV=NUMBER OF VOLUFETRIC PATTERN ANGLES 

c::a 

3212 REhD(6,*) LCNPAT,TPPD,IPPV,NPV 

MRITE(8,3006) 

IF(LCNPAT) WRITE(8,3213) 

3213 FOXMAT(2H *,6X,'FOR THETA AIICLE:',I79,1H*) 

IF( .NOT.LCNPAT) WRITE(6.3214) 

3214 FOMUT(2H *,6X,'FOR PHI ANCLE:',T79,1H*) 

WRITE(6,3216) TPPD,TPPV,NPV 

3216 FOUIAT(2H * ,6X. 'START= ' ,F10.6, ' STEP= 'F10.6, ' NUNBER= ' ,I4 

2,179, iH*) 

WRITE(8,300B) 

IF(LCNPAT) WlITE(6.3214) 

IF(. NOT. LCNPAT) WRITE(6,3213) 

3216 CONTINUE 

IFCLFARN) CO TO 3217 

CO$ 

C$$$ IB,IE.IS=BECIN.EHD,STEP 

C$$$ 

REhD(6,*) IB,IE.IS 

rr(ra .LT .o) IB=O 

IF(IE.CT.360) IE.360 

IF(IS.LE.0) IS=l 

TPPS=IB 

TPPI=IS 

NPN=(IE-IB)/IS*I 

WRITE(8,3208) IB, IE, IS 

3208 FORMAT(2H *,6X.'THE RANGE OF PATTERN ANCLE INDICES FOR MIS' 

2.' RUll ARE: ',13,2(','.13),T7D.iH*) 

CO TO 3218 

3217 CONTINUE 

C$$$ 

C$$$ TPPS=START OF PATTERN 

C$$$ TPPI=PATTERII INCREMENT 

C$$$ NPll=lIUMBER OF PATTERN POINTS 

caaa 

READ(6,*) TPPS,TPPI.NPN 

WRITE(8.3216) TPPS.TPP1.NPW 

3218 CONTINUE 

RXS=I . RXI=O. 

TYS=TPPD 

TY I=TPPV 

PZS= TPPS 

PZI=TPPI 

IVPIl=3 

IF(LCIIPAT) GO TO 3209 

TYS=TPPS 

TYI=TPPI 

PZS=TPPD 

PZI=TPPV 

IVPlI=-3 

3209 CONTINUE 

GO TO 3000 

c====== 

3260 COliTIllUE 
C=== RD: COWND =I==-= 

cat1 

C($( RANCSrFAR FIELD RANGE DISTANCE 

cats 

Cl(( NOTE IF RANCS IS GREATER THAN OR EQUAL TO 1.UO 

C$($ THAN LRANG WILL BE SET FALSE 

call 

LRINC=. TRUE. 

BEAD(6, *) RANCS 

IF(RANCS. CT. 9. 9E29) GO TO 3262 

RANG=UNITS*RAIICS 

WRITE(6,3261) RAIIGS,LABEL(IUNIT) ,RANG 

3261 FORMAT(2H *,6X.'IlE FAR FIELD RANGE SPECIFIED IS ',E12.6, 

2' IN ',A6,T79,lH*,/2H *,6X,'IlE RANGE SPECIFIED IN METERS' 

3.' IS ',E12.6,T79,1H*) 

OO TO 3000 

3262 CONTINUE 

LRANO-.FALSE. 

RANG-1. 

WFLITE(6,3253) 

3263 FORMAT(1H * .6X, 'NO FAR FIELD RANGE SPECIFIED. ' ,T79.1H*) 

00 TO 3000 

CI.~... 

3270 CONTINUE 

C=== VN: CONAND r====r 

caat 

Ca(( NEAR ZONE VOLUMETRIC PATTERII 

catt 

LVOLP=.TRUE. 

GO TO 3271 c=.==== 

3260 CONTINUE 

C=== PN: CO!-B!AND ==I.=== 

cat1 

C$(( XPC(H)=XYZ LOCATION OF THE NEAR ZONE PATTERN ORICIN 

ctaa 

LVOLP=.FALSE. 

3271 L!IEAR= . TRUE. 

READ(6,*) (XPC(N),N=1,3) 

URITE(6,3264) LABEL(IUIIT), (XPCCN) .N.i,3) 

3264 FORMAT(2H *,lX, 'PATTERN ORIGIN IN ' ,A6, ' : XPC(1)-' .F8.3 

2,' XPC(2)=',F8.3,' XPC(S)=',F8.3,T79.iH*) 

VRITE(6,3006) 

DO 3263 Nm1.3 

3263 xPc(N)=UNITS*XPC(N) 

IF(IUNIT.NE. 1) YRITE(6,3264) LABELCI), (IPC(N) ,N=1,3) 

IF(IUIII1. HE, 1) YRITE(6,3006) 

VRITE(6,3000) 

ctta 

C$l$ THCZ,PHCZ=ORIENTATION OF THE Z-AXIS OF THE PATTERN AXES 

C($( RELATIVE TO THE FIXED COORDINATE SYSTEM 

cat1 

Call THCX,PHCX=ORIENTATION OF THE X-AXIS OF THE PATTERN AXES 

C$$( RELATIVE TO THE FIXED COORDINATE SYSTEM 

cat1 

READ(6,*) THCZ,PHCZ,THCX,PHCX 

vPC(3,l)=SIIJ(THCZ*RPD)*COS(PHCZ*RPD) 

VF'C(3,2)=SIN(IHCZ*RPD)*SIN(PHCZ*RPD) 

vPC(3,3)=COS(THCZ*RPD) 

VPC(I,l)=SIN (THCX*RPD) *COS(PHCX*RPD) 

VPC(1 ,l)=SIlI (THCX*RPD) *SII1 (PHCX*RPD) 

VPC(l,3)=COS(THCX*RPD) 

Cl I 1 INSURE VPC(1,N) IS PERPENDICULAR TO VPC(3.N) 

DZX=VPC(~,~)*WC(~,~)+VPC(~,~)*~C(~,~)+~PC(~,~)*WC(~.~) 
IF(ABS(DZX) .OT.O. 1) YRIIE(6.3201) 

IF(ABS(DZX).CT.O.l) STOP 

VPC(1.1)=VPC(I,I)-VPC(3,l)*DZX 

WC(l,2)=VPC(l.l)-WC(3,2)*DZX 

VPC(1 ,3)=VPC(l,3)-WC(3,3)*DZX 

DDT=VPC(l.l)*'PC(l,l)+VPC(1,2)*WC(l,2)+WC(l,3)*YPC(1,3) 

DOT=SqRT (DOT) 

VPC(l,l)=VPC(l,l)lDOT 

VPC(1,2)=VPC(I,2)/DOT 

WC(l,3)=VPC(1,3)/DOT 

VPC(2,l)=VPC(3,2)*VPC(1,3)-VPC(3,3)*VPC(1,2) 

VPC(2,2)=VPC(3,3)*VPC(I,I)-VPC(3,l)*VPC(1,3) 

wc(2.3)=VPC(3,1)*~C(1,1)-\IPC(3,2)*VPC(1,1) 

!lXITE(6.3202) 

DO 3261 NIs1.3 

!5tITE(6.3006) 

3264 HRITE(O.3205) (NI.NJ,VPC(NI,NJ) ,tfJ=1.3) 

uRITE(8.3006) 

YRITE(8,3008) 

c::: 

C$$$ LRECT=F, SPHERICAL PATTERII CUT 

C$($ LRECT=T. LINEAR PATTERN CUT 

CtS$ 

C$$$ P.XS.IYS,PZS=STARIINC LOCATION OF PATTERN 

C$$$ LECT=F : RADIAL,THETA ,PHI 

c::: LRECT=T: X,Y,Z 

COS 

C$$$ RXI.TYI,PZI=SIZE OF INCREMENTAL STEPS 

C$$$ LRECT=F: RADIAL.THETA,PHI 

Ct$$ LRECT=T: X.Y.Z 

c::: 

READ (6, ) LRECT 

READ(6, *) RXS,TYS,PZS 

READ(6.t) RXI.TYI.PZ1 

IF(LRECT) WILITE(6,3261) RXS,TYG,PZS,LABEL(IUNIT) 

3281 FOmIAT(2H *,2X.'STARTItIC XYZ=',F10.6,2(',',F10.6),1XXA8 

2.T79,1H*) 

IF(LRECT) HRITE(6,3262) RXI, IYI ,PZI, LABEL(IUN1T) 

3262 FORMAT(2H *.2X,'SIEP XYZ='.F10.6,1(' ,',F10.6),1X,A8.T79,1H*) 

IF(. NOT. LRECT) WRITE(6.3267) RXS, TYS,PZS.LABEL(IUNIT) 

3267 FORMAT(2H *.lX,'STARTIIO R,THETA,PHI='.Fl0.6 

9.2('.',F10.6).1X.A6,' AND DEC.',T79,1H*) 

IF(. tIOT.LRECT) WRITE(6,3288) RXI ,TYI ,PZI ,LABEL(IUNIT) 

3268 FORMAT(1H *,ZX,'STEP R,THEIA,PHI=',FlO.6,2(',',F10.6) ,lX,A6 

2,' AND DEC.'.T7Q,IH*) 

YRITE(8,3006) 

RXS=UNIIS*RXS 

RXI=UNITS*RXI 

IF(.NOT.LRECT) CO TO 3286 

TYS=UNITS*TYS 

PZS=UNITS*PZS 

TYI=UtIITS*TYI 

PZI=UIIITS*PZI 

3266 COllTIllUE 

IF(LRECT.AtID. IUIIIT. IIE. 1) WRITE(6,3261) RXS,TYS,PZS,LABEL(l) 

IF(LRECT.AID.IUIIIT.HE.1) WRITE(6,3262) RXI,IYI,PZI,LABEL(l) 

IF(. 110T.LRECT. AND. 1UIIIT.NE. 1) WRITE(6,3267) RXS,TYS,PZS,LABEL(I) 

IF(.NOT.LPECT.AIID. 1UIIIT.IIE. 1) h'RITE(6,3268) RXI,TYI,PZI,LABEL(l) 

IF(.NOT.LRECT.AIID. IUIIIT. IIE. 1) VRITE(6,3006) 

IF(LV0LP) CO TO 3272 

CSI t 

C$$$ IIPII=tIUFBER OF PATTERli POINTS 

Clll 

ZEiD (6. +) IiPii 
lIRITE(6,3289) NPN 

3269 FORMAT(2H * ,6X. 'AUMBER OF PATTER11 POINTS= ' , 14,179, lH*) 

IVPN=3 

IF(ABS(PZ1) .IT. SHLR) IVPNa-3 

IF(LRECT) IVPNrO 

00 TO 3276 

ca:: 

ca:a IWH-i FOR R-THETA OR X-Y VARYING 

cat: NPV=NI~MBER OF R OR x AND NPN=NWER OF THETA OR Y 

cat a 

C$$$ IVPN.2 FOR R-PHI OR X-Z VARYING 

caaa NPV=NUNBER OF R OR x AND NPN=NUMBER OF PHI OR z 

c:aa 

C:$$ IVPII=3 FOR THETA-PHI OR Y-Z VARYING 

C$($ NPV=NUMBER OF TIETA OR Y AND NPNxNUMBER OF PHI OR Z 

c: aa 

caaa IF IVPN IS LESS THAN zmo THE omm IS REC($$ I.E. IVPN=-1 FOR THETA-R OR T-X VARYINC 

cat: 

3272 READ(6, *) IVPN, IIPV,NPN 

IF(IVPN.Eq. 1) URITE(6.3273) NPV.NPN 

IF(IVPN.EQ.-1) YRITE(6,3273) NPI,NPV 

3273 FORMIT(2H *,6X,'UUMBER OF POINTS FOR R OR X= ',I4 

2,' AND THETA OR Y= ',I41 

IF(IVPN.Eq.2) VRITE(6,3274) NPV,NPB 

IF(IVPN.Eq. -2) WRITE(6,3274) NPN,NPV 

3274 FOWlAT(2H ,6X, 'NUMBER OF POINTS FOR R OR X= ' ,I4 

2. ' AND PHI OR Z= ' ,141 

IF(1VPN .Eq .3) YRITE(6,3276) NPV,NPN 

IF(IVPN.E~ .-3) WRITE(B,~~~~) NPN.NPV 

3276 FORMAT(2H *,6X,'NUMBER OF POINTS FOR THETA OR Y- ',I4 

2, ' Al1D PHI OR 2- ' .I&) 

3376 COIITINUE 

IF(NPN.GT.MODX) URITE(6,3266) NPN 

3266 FORMAT(' ***** NUMBER OF POINTS= ',I3,' PROGRAM ABORTS' 

2,'PATfERI STORAGE DIMENSION IS EXCEEDED *****') 

IFCNPN .CT .MODX) STOP 

CO TO 3000 

CIEIII. 

6240 CONTINUE 

C=== BP: CObWAND =====I 

caat 

C$t$ BACK OR BISTATIC NEAR ZONE SCATTERING 

csai 

Ctt$ THE SC:. RG:, AND PN: COMIANDS MUST BE SPECIFIED 

C$$$ TO USE THIS OPTION. 

LSCAT=.IRUE. 

GO TO 3000 

CI=E=I= 

6260 CONTINUE 

C=zn CR: COMMAND =====s 

cat$ 

caaa RANGE GATE INPUT 

c:ta 

C#($ MIIlI=THE MItI1FNI.t DISTANCE FROM TRANSMITTER TO RECEIVER 

cat: RMAX=THE MAXIMVM DISTANCE FROM TRANS~IITTER TO RECEIVER 

cat6 

C$$l THE PI: COKJIAND MUST BE USED 

cto 

READ(6,*) RMIN,RMAX 

WRITE(6.6261) RMIll .RhtAX,LABEL(IUlTIT) 

6161 FORMAT(2H *,2X,'RMIN= ',FlO.6,'RMAX= ',F10.6,' IN ',A6,T79,1H*) 

RMIII=UNITS*Rt.IIlI 

RMAX=UIJITS*RMAX 
WRITE(0,6261) RMIN,RMAX,LABEL(I) 

CO TO 3000 

C=.c=.= 

3300 COllTINUE 

Cmpa PC: CObL!.!AflD PIIESZ 

cttt 

C$$$ PLATE CEObETRY INPUT 

ct st 

LPLA- . TnW 

bPX=bPX*l 

IF(bPX .CI .KPDX) 1CRITE(6.001) WX 

901 FORMIT(' ***** I1UE.IBER OF PLATES= '.I3,' PROORAM ABORTS', 

2' SINCE MAX. PLATE DIMENSION IS EXCEEDED. *****') 

IF(CDX .CI.MPDX) STOP 

KtITE(6.3301) MPX 

3301 FORIIfAT(2H *,6X.'THIS IS PLATE NO. ',13,' IN THIS ', 

2'SIFNLATION. ' ,T7D,lH*) 

MP=bPX 

FRITE(6.3006) 

X'RITE(6.3CC6) 

WRITE(6,3009) 

CSSS 

C$($ KZP(MP)=NUhQE9 OF CORNERS ON THE W-IH PLATE. 

ctts 

C$$$ LSLAB= 1 IMPLIES TRAllSPARENT THIN DIELECTRIC SLAB 

c)$$ = 0 ImLIES bETAL PLATE, AND 

c$$$ =-2 IFPLIES DIELECTRIC COVERED PLATE 011 BOTH SIDES 

Ct$$ =-4 IMPLIES DIELECTRIC COVERED PLATE ON SIDE OF NORMAL 

C$tf 

C$tt NOTE: IF DIELECTRIC COVERED. ONE MUST READ DIELECTRIC DATA. 

c:tt 

cttt 

READ(6, *) hIEP(MP). LSLABOP) 

IF(LSLAB(FP) .Eq .0) WRITE(6,3392) 

3392 FORMAT(2H * ,6X, 'bETAL PLATE USED IN THIS SIMULATION' ,T7Q,lH*) 

IF(LSLAB(hP) .Eq. 1) ERITE(6,3393) 

3393 FORMAT(2H *,6X,'TRANSPAREllT THIN DIELECTRIC LAYER USED IN THIS', 

2'SIblIJLATIOIl' ,170, lH*) 

IF(LSLAB(FP) .Eq. -2) HiITE(6,3395) 

3393 FORIIIAT(2H *.GX,'DIELECTRIC COVERED PLATE USED Ill THIS'. 

2' SlblIJLATIOII' .T79.1H*) 

V.XITE(6.3008) 

lF(LSLAB(bP).EQ.O) GO TO 3313 

cats 

cttt ISLAB(~)=NUMBER OF DIELECTRIC LAYERS ON THE MP PLA~ 

CtSt 

READ(6. *) IISLAB(bP) 

NSS-NSLAB (bP) 

IF(1ISS. GI .MLDX) STOP 

WRITE(0.3391) 

3391 FORhfAT(2H +,13X,'THICKliESS',lX,'DIELECTRIC',3X,'LOSS',4X, 

2'PERI.IITIVIIY' .3X.'LOSS' ,T79,1H* ,/, 

32H *,GX.'LAYER1'.2X,'IN bETERS',3X,'COIlSTANT',3X.'TAWCENT', 

4?X, 'COI1STAIIT' ,3X, 'TANGEIIT' ,TfQ.lH* ,/, 

62H *,6X,'------',2X,'---------*,2XX X----------m,2X,*-------a 

62~;-----------*,2~,~-------~ ,T7Q,iH*) 

c311 

Cf $1 DSLABCIlS .htP)=THICXIIESS OF I1S LAYER 

CtSt 

Cf$$ ERSLAB(llS,bP)=RELATIVE DIELECTRIC CONSTANT OF THE IIS LAYER 

cats 

C$$$ TESLAB(llS.bCP)=DIELECTRIC LOSS TANGENT OF THE NS LAYER 

cats 

C$$$ mSLAB(lIS,hP)=ELATIVE PLUEABILITY CONSTANT OF NS LAYER 
cat: 

C($$ ~LAB(NS,MF')=PERKEABILITT LOSS TANGENT OF IHE IS LAYER 

ctat 

DO 3311 NS*l,NSS 

READ (6, *) DSLAB (NS, MP) .EXSLAB (NS ,MI') , IFSLAB (NS, MF') . 1URSLAB (NS , MF') , TMSLAB (NS .MP) 

DSLAB(NS ,MP) =DSLAB(NS ,MP) *UNITS 

3311 VRITE(6,3399) NS,DSLAB(IS,MP) ,ERSLAB(NS ,MP) ,~LAB(NS.MF'), 

lURSLAB(NS ,MP) , TNSLAB(NS ,MP) 

3399 FORMAT(1H *,OX, 13,4X,F9. 4,1X,F10.4,9X,F7.4 ,lX,Fli -4 ,lX, 

1F7.4,179, iH*) 

YRITE(6,3006) 

VRITE(6,3006) 

YRITE(6,3006) 

3313 MEX=MEP(MP) 

IF(MEX.CT.MU?X) kRITE(6,903) MP,MEX 

903 FORMAT(' ***** PLATE 1',13.' HAS ',13,' EDGES.', 

1' PROGRAM ABORTS SINCE MAX. EDGE DIMENSION IS EXCEEDED.' 

3,' *****') 

IF(MEX.GT.MEDX) STOP 

DO 6 ME=l,MEX 

Cttt 

cat: XX(N,KE,KP)=X,T,Z COMPONENTS OF CORNER :HE OF Pun 1w. 

Ca($ N=I(X) ,N=l(Y) ,N=3(Z) . INPUT CORNER DATA AS FOLLOWS: 

caaa 1. -1. ,o. 

cat: -1. ,1..0. 

caa* -I.,-1.,0. 

ctaa 1. ,-I. ,o. 

Cat$ MIS IS THE INPUT FOR A 1 METER SPUARE PLATE. 

C($) NOTE MAT IF TKERE IS MORE THAN ONE PLATE, THEN ME CORNER 

Cat) DATA FOR EACH PLATE WOULD FOLLOW SEqUEIITIALLT. 

ctat 

READ(6,*) (XX(N,ME,MP),N=1,3) 

6 CONTINUE 

WRITE(6,3301) LABEL(IUN1T) 

3302 FORMAT(2H *,2X,'PLATE#'.lX,'CORIIER#'.3X,'INPUT LOCATION IN ', 

lA6,4X, 'ACTUAL LOCATION I11 METERS' ,779, IH*) 

URITE(6.3303) 

3303 FORMAT(2H *.lX.'------',lX.'-------I 

2,1(2~,2(*-------------# ,T7QB1H*) 

DO 3304 ME=I,MEX 

MRIIE(6,3006) 

DO 3310 Nz1.3 

3310 Xq(tl)=XX(Il,ME,kP) 

DO 3311 N=1,3 

3311 XX(N,~,~P)=UMITS*(X~(~)*\~RT(~,N)+X~(~)*VBT(~,N) 

l+XQ(3)*VRI(3,N))+TR(N) 

WRITE(6,3306) MP,KE, (XQ(N) ,N=1,3), (XX(N,ME,KP) IN=l,3) 

3306 FORMAT(2H *,4~,13,6~.11,1~,2~2X,F8.3.1(','.F8.3)),T79,1H*) 

3304 CONTINUE 

GO TO 3000 c=..ars 

3360 COITINUE 

C=== NP: COFB!AIID ====== 

cat* 

C$$$ INITIALIZE PLATE DATA. 

Ct8t 

LPLA=.FALSE. 

wx=o 

WRITE(6,3361) 

3361 FORMAT(~H * ,6X, ' THE PLATE DATA IS INITIALIZED. ' ,179, iH*/ 

1,2H * ,6X, ' NO PLATES ARE PRESENTLY IN THE PROBLEM. ' .I79,1H*) 

GO TO 3000 

c.1=1=5 
3400 CONTINUE 

C=== SC: CO.VUliD ====== 

CSSt 

C$$$ MSX=NVMSER OF ANTERNA ELEMFJITS. 

C1t8 

LSMP=.FALSE. 

KSX-MSX* 1 

MSXAT=MSAT+MSX 

IF(MSXAT.GT.KSDX) WXITE(0,904) MSXAT 

901 FORMAT(' ***** XLWER OF SOURCES= ',I3.' PROGRAM', 

2' ABORTS SINCE MAX. SOURCE DIMENSION IS EXCEEDED. *****') 

IF(b1SXAT . GT .EISDX) 5TOP 

WRITE(6.3401) M3X 

3401 FOPJlAT(2H * ,6X, 'THIS IS SOURCE NO. ' ,I3, ' IN THIS', 

2' COhPUTATION. ' ,T7P, lH*) 

WRITE(0.3003) 

bRITE(O,JOO6) 

cat0 

CjO$ XSS(N,f~:S)=XYZ LOCATION OF MS-TM ANTENNA ELEMENT. 

c: 0: 

CS$$ IMS(MS)=TYPE OF LINEAP. ANTENliA 

C$$$ .LT.O ELECTRIC LINEAR ELUENT 

cat: .GT.O: MAGNETIC LINEAR EL~NT 

C$$$ ABS(IMS)=I : UIIIFOW CURREIIT DISTRIBUTION 

c$$$ =2: STA!:DA?.D DIPOLE CURRENT DISTRIBUTION 

C$$$ =3: CAVITY DACKED SLOT CURRENT DISTRIBUTION (TEOl) 

csta 

C$$$ HAYS(blS)=APEXTUF WIDTH IN WAVELENGTHS (NOTE: IF 

C$$$ HAIS(MS) IS LESS THAN .l LAbQDA, SOURCE IS 

C$)$ CONSIDERED TO DE DIPOLE SOLRCE 

C$$$ MS(bIS)=LENGTH OF LINEAR ELUENT IN WAVELENGTHS 

CS$$ 

C$S$ THSZ.PBSZ=ORIEIITATION ANGLES USED TO DEFINE LINEAR 

C$$$ ELDIEIIT AXIS. 

CStO 

C$$$ THSX.PHSX=ORIEllTATIOlI ANGLES USED TO DEFINE APERTURE 

C$$$ PLANE OR DIPOLE X-AXIS. 

CSSt 

C$$$ MS,WS=blACIIITUDE AID PHASE OF EXCITATION OF 

C$)$ MS-TH ELU.E:lT. 

CCSS 

NS=PISX 

KSA(l,b:S)=O 

USA (2. FiS) =O 

READ(6.t) (XSS(N.MS) ,1:=1,3) 

READ(6.*) THSZ.PHSZ.THSX.PHSX 

READ(6, *) IMS (MS) ,ES()IS) ,HAIS (MS) 

READ(6,*) WlS.WS 

IF(IPlS(bIS) .LT.O) h'RITE(6,34ll) It.lS(NS) 

3411 FOUlAT(2H *,6X.'THIS IS All ELECTRIC SOURCE OF TYPE '.13,T79,lH*) 

IF(IMS(MS) .CE.O) V,XITE(O,3412) IMS(MS) 

3412 FOMIAT(2H * ,6X, 'THIS IS A MAGNETIC SOURCE OF TYPE ' ,I3,T79. lH*) 

WRITE(6,3003) 

IF(IUl1ST.EQ.O) GO TO 3114 

ulisTs=ulrrT (IUNST) 

ki'RITE(0,3113) HS(KS) ,HAWS(NS) ,LABEL(IUlIST) 

3413 FOR.lAT(2H * .6X, 'S0UF.CE LE:iCTH=' ,F10.6, ' AID WIDTH=' 

2,F10.6.1X.AO.T7D.iH*) 

HS(h!S)=WJSTS*UliITF*HS(bIS) 

HAWS (MS) =UlISTS*UllITF*HAWS(MS) 

IF(IU1IST.NE. 1) YRITE(6.3000) 

IF(1UIiST. liE. 1) KRITE(~ ,3413) HS(hIS) ,HAWS(MS) ,LABEL(l) 

GO TO 3410 

3414 IBRITE(6.3416) HS(MS) ,HAIS(MS) 
3416 FORHAT(2H *,6X, 'BOURCE ENCTH*:' .Fl0.6. ' AND VIDTH-' 

2,F10.6, ' YAVUEIIOTH8' ,179, lH*) 

3416 YRITE(6,3006) 

YS(M6)=YNS*CEXP(CJ*YPS*RPD) 

YRITE(B.3417) WMS,YPS 

3417 FORHAT(1H *,LX,'THE BOURCE WIGHT HAS WQNIfUDE=' 

1,F10.6,' AND PHASE=',F10.6,T79,1H*) 

YRITE(B.3006) 

YRITE(6,3006) 

YRITE(8,3421) LABEL(1UNIT) 

3421 FORMAT(2H * ,TO, 'SOURCE#' ,117, 'INPUT LOCATION IN ' ,116,146, 

2'ACTUAL LOCATION IN HETERS',T79,1H*) 

YRITE(6,3421) 

3422 FOMlAT(2H *,16,7('-'),T16,27('-').T46,17('-'), 

2179, lH*) 

YRITE(6,3006) 

DO 3414 N=1,3 

3414 XQ (N)=XSS(N ,US) 

DO 3426 N=1,3 

3416 XSS(N,MS)=UNIIS*(XQ(I)'*VRT(I,N)*IQ(~)*VBT(~,N) 

2*XQ(3) *VRT(3,N))*TR(N) 

YRITE(6,3416) MS, (Xq(N) .N=1,3), (XSS(N,MS) ,N=1,3) 

3436 FORMAT(2H *,fa, 13.~16,~8.3.2('. ' .F8.3) ,144 ,YE .3.2(', ' ,F8.3) 

!J,TTQ,IH*) 

TqR-THBZ*RPD 

PQR-PHSZ*RPD 

Xq(1)-SIN(TqIl) *coS(PQR) 

xp(a)=sr~(rq~) *SIN(P~R) 

xp(s)=cos(rqR) 

DO 3431 311.3 

3431 VXSS(~.~~,MS)=XQ(~)*VBI(~.N)*XQ(~)*VRT(~,N)*XQ(~)*VRT(~,N) 

TQR=THSX*RPD 

PQR=PHSX*RPD 

XQ (l)=SIN (TQR) *COS(PqR) 

xq(2)=sIa(TqR)*sIl~(PqR) 

X9 (3) =COS(TQR) 

DO 3531 N-1.3 

3432 VX~~(~.N,CIS)=XQ(~)*WT(~.N)*XQ(~)*VRT(~,N)*XQ(~)*VRT(~,N) 

DZX-VXSS(1,i ,MS) *VXSS(3,1 ,US) *VXSS(I .2 ,US) *VXSS(3,2, MS) 

2+VXSS(1,3,MS)*VXSS(3,3,MS) 

IF(ABS(DZX1 .OT.O. 1) IIRITE(6,3438) 

3438 FORMAT(' *** PROGRAM ABORTS IN SOURCE SECTION IN MAT THE', 

2' COORDINATES ARE NOT ORTHOGONAL Ill ***I) 

IF(ABS(DZX) .GI. 0. I) STOP 

VXSS(1,i .MS) =VXSS(l ,I ,MS) -VXSS(3,1 ,NS) *DZX 

VXSS(1 .~,Ms)-VXSS(~,~,MS)-VXSS(3,2,W)*DZX 

VXSS(~.~,MS)=VXSS(~,~,MS)-VXSS(~,~.MS)*DZX 

DOT=VX~S(I,~,MS~~VXSS~I,~,W~+VXSS~I,~,~~*VXSS(~,~,~) 

a+vxss(i,3,~~)*~~6~(1,3.~~) 

DOT=SQRT(DOT) 

VXSS(l,l,MS)mVX6S(l,1,MS)/DOT 

VXSS(l,2,MS)=VXSS(1,2,MS)/DOT 

VXSS(1,3,MS)=VXSS(l,3,MS)/DOT 

VXSS(~,~,M~)=VXSS(~,~,MS)*VXSS(~,~,MS)-VXSS(~,~,MS)*VX~S(~,~,US) 

VX~~(~,~,MS)=VX~S(~,~,MS)*VXSS(I,~,MS)-VXSS(~,~,MS)*VXSS(~,~,MS) 

VXSS(~,~.MS)=VXSS(~,~,MS)*VXSS(I,~.MS)-VXSS(~.~,W)*VXSS(I.~,MS) 

WRITE(8,3006) 

WRITE(6,3008) 

YRITE(6.3437) 

3437 FORMAT(2H *.6X.'THE FOLLOWING SOURCE ALIGNKEN1 IS USED:' 

2,T79,lH*) 

DO 3433 111=1,3 

YRITE(8,3008) 

3433 YRITE(6,3434) (NI,NJ,Ms,VXSS(II,NJ,MS) ,NJnl,3) 
1432 3434 FOUlAT(2H *.lX.3(9X,'VXSS(',Il.',',Il,',',I2.')=',F~.6) 

1433 l,T79,1H*) 

1434 CO TO 3000 

1436 C==PI== 

1436 3810 CONTIHLE 

1437 C=== SA: COK4IND ------ 1438 C$$$ 

1439 C$$$ MSX=!IUFBE? OF ANTEIItlA AR¶AY GROUPINGS. 

1440 C$$$ 

1441 C$$$ MSAX=IlMER OF ELUEIITS PER CROUPIIIC. 

1442 C$$$ 

1443 LSMP=.FALSE. 

1444 MSX=MSX+l 

1446 P.EAD(6,*) WAX 

144e F!SAT=PISAT+~.ISAX 

1447 MSXAT=MSAT+MSX 

1448 IF(t.!SXAT. CT.b!SDX) K!ITE(e,EO4) MSXAT 

1449 IF(MSXAT.CT.b!SDX) STOP 

1460 WRITE(O,3806) b!SX,FlSAX 

1461 3806 FOUIAT(2H *,6X.'THIS IS SOURCE NO. ',13,' IN THIS', 

1462 1' CO!-PUTATION. ' ,T79,1H*/2H *,6X, 'THERE ARE ' , 1463 313, ' SOURCES ATLAYED TOCETI-Ell. ' ,179, lH*) 

1464 KR1 TE(6.3000) 

1466 MITE(6.3006) 

1466 C8$$ 

1467 C$$$ XSS(II,HA)=XYZ LOCATIOII OF MA-TH ANTENNA ELEMENT. 

1468 C$$$ 

1468 C$$$ XSS(lI.b!S)=XYZ LOCATIOII OF MS-TH KEICHTED CENTER OF TIE 

1460 cttl ARRAY GROUPIIIC. 

1461 C$$$ 

1462 C$$$ THE ARRAY ELUEIITS ARE ASSUMED TO HAVE THE SAKE LENGTH, 

1463 C$$$ VJIDTH. AND ORIEIITATION. ALSO, THEY ARE ASSUMED TO BE 

1464 C$$$ EITHER ALL MOUNTED AND OR ALL OFF A PLATE. 

1466 C$$$ IMS(bIS)=TYPE OF LINEAR ANTEIIIIA 

1466 C$$$ .LT.O: ELECTRIC LINEAR ELDENT 

1467 C$$$ . CT . 0 : MACIIETIC LINEAR ELDEIIT 

1468 C$$$ ABS(IblS)=l: UllIFORbl CURRENT DISTRIBUTIOlI 

1468 C$$$ =2: STAllDdRD DIPOLE CVilREIlT DISTRIBUTION 

1470 C$$$ =3: CAVITY BACKED SLOT CUilREIlT DISTRIBUTION (TEOi) 

1471 C$$$ 

1472 cast HAVS(~!S)=APE~TURE WIDTH IN WAVELENCTHG (NOTE: IF 

1473 C$$$ HA?!S(F!S) IS LESS THAI1 .1 LAbBDA. SOURCE IS 

1474 C$$$ COllSIDERED TO BE DIPOLE SOURCE 

1476 C$$$ HS(MS)=LEllCTH OF L1I:EAR ELE'EIIT 111 WAVELEIICTHS 

1476 C$$$ 

1477 C$$$ THSZ,PHSZ=ORIENTATIO!I ANGLES USED TO DEFINE LINEAR 

1478 C$$$ ELDEIIT AXIS. 

1479 CS$$ 

1480 C$$$ THSX.PHSX=ORIEIITATIOII AIICLES USED TO DEFINE APERTURE 

1481 C$$$ PLAIIE OX DIPOLE X-AXIS. 

1482 C$$$ 

1483 C$$$ MS,WPS=MACNITUDE AllD PHASE OF EXCITATION OF 

1484 C$S$ MA-TH ELPEIIT. 

1486 C$$$ 

1486 FlS=FISX 

1487 blAI=MSDX-blSAT+ 1 

1488 MAF=MAI+MSAX-1 

1489 MSA(1 ,F:S)=blAI 

1480 MSA (2, b!S) =NAF 

1481 DO 3811 MA=MAI,MAF 

1482 3841 READ(6.4) (XSS(II,MA),!I=l,3) 

1493 READ (6, *) THSZ , PHSZ . TIISX .PHSX 

1494 READ(6, *) IblS(b1S) .HS(blS) .HAY!S(MS) 

1496 IF[IF!S(b!S). LT .O) L'RITE(6,3311) IMS(MS) 
Ir(IMS(MS) .OE.O) WRITE(6,3412) IMS(MS) 

WRIIE(6,3006) 

IF(IUNST.Eq.0) GO TO 3814 

UNSTS=UNIT(IUNST) 

YRITE(8.3413) HS(M8) ,HAVS(MS) .LABEL(IUNST) 

IIS(MS)=UNSTS*VNITF*HS(MS) 

arws(~s) =UI~STS*UNITF*HAWS(HS) 

IF(IUI1ST.NE. I) WRITE(6,3006) 

IF(IUIST.NE. I) WRITE(6,3413) HS(MS) ,HAWS(MS) ,LABEL(l) 

00 TO 3816 

3814 WRIE(6,3416) HS(MS) ,HAVS(MS) 

3816 wnIma,sooa) 

WS(MS)P(~.,O.) 

WMsA=O. 

XSAX.0. 

XSAY-0. 

XSAZ=O . DO 3853 MA=MAI,MAF 

llEAD(6,*) WS.WS 

WRITE(6,3817) MA,WMS,WPS 

3817 FOBNAT(lH *,6X,'SOURCE ',I3,' HAS MAONITUDE=' 

2.F10.6,' AND PHASE~',Fi0.6.t79.18*) 

WS(MA) =WHS*CEXP(CJ*YPS*RPD) 

wMSA=~1sA+~ls 

XSAX=XSAX+k'MS*XSS(l ,MA) 

XSAY=XSAY+W!S*XSS(2,MA) 

3843 XSAZ=XSAZ+WMS*XSS(3,MA) 

XSS(1 .M3) =XSAX/WISA 

XSS(2 ,MS)=XSAT/WMSA 

XSS(3 .MS)=XSAZ/M.ISA 

VRITE(8,3006) 

WRITE(8,3008) 

URITE(6,3421) LABEL(IUN1T) 

WRITE(6,3222) 

WRIIE(6,3006) 

DO 3824 N=1,3 

3824 XQ(N)=XSS(Ii,MS) 

DO 3826 N=1,3 

3816 XSS(~I,MS)=U~SITS*(X~(~)*VRT(~.N)*X~(~)*VRT(~,N) 

l+Xq(3)*VRT(3,N))+TR(II) 

WRITE(6,3428) MS, (XQ(N) ,N=1,3), (XSS(N,MS) ,N=1,3) 

DO 3829 MA=MAI,MAF 

DO 3821 N=1,3 

3817 XQ(N)=XSS(N,MA) 

DO 3828 N=1,3 

3828 XSS(I,MA)=UliITS*(XQ(l)*VRT(I,N)+Xq(l)*VRT(2,N) 

l+XQ(3)*VRT(3,N))+TR(N) 

3829 WRITE(6.3416) MA, (Xq(N) ,N=1,3). (XSS(N,MA) ,N=1,3) 

TQR=THSZ*RPD 

PQR=PHSZ*RPD 

xq(i)=sIlI(rqR) *cos(~q~) 

xq(l)=sItJ(rqR) *SIN(P~R) 

Xq(3)=COS(TqR) 

DO 3831 N=1,3 

3831 VXSS(3,N,MS)=Xq(l)*VRT(I ,N)+XP(l)*\IRT(2,N)+XQ(3)*VRT(3,N) 

TQR=THSX*RPD 

PqR=PHSX*RPD 

xp(i)=srlg (raR)*cos(PaR) 

XQ(Z)=SIN(TQR)*SIll (PQR) 

Xq(3)=COS(TqR) 

DO 3831 11=1,3 

3832 VXSS(~ ,II,MS)=X~(~)*VRT(I ,N)+Xq(l)*VRT(2,N)*X9(3)*VRT(3,N) 

DZX=VXSS(i.i,MS)*VXSS(3,1,MS)*vXSS(i,n,MS)*VXSS(3,1,MS) 

l+VXSS(1,3,MS)*VXSS(3,3,MS) 
IF(A3S(DZX) .CT.O. 1) \;?LITE(0,3436) 

IF(ABS(DZX) .Ci.O. 1) GTO? 

VXSS(l,l,b!S)=VXSS(l ,l,VS)-VXSS(3,l,KS)*DZX 

VXSS(~,~.\!S)QVXSS(~,~,MS~-VXSS(~,~,F!S)*DZX 

VXSS(l,3,MS)=VXSS(l,3,MS)-VXSS(3,3,MS)*DZX 

DOT=VXSS(l, l,MS)*VXSS(I,l,MS)+VXSS(I,l,MS)*VXSS(1,2,NS) 

2+vxss(l,3,~s)*vxss(l,3,b!s) 

DOT=SQRT(DOT) 

VXSS(l,l.MS)=VXSS(l,l,~tS)/DOT 

VXSS(l,2,MS)=VXSS(1,2,MS)/DOT 

VXSS(l,3,I!S)=VXSS(1,3,MS)/DOT 

VXSS(2,l ,MS)=VXSS(3,2.MS)*VXSS(1,3.MS)-VXGS(3,3,MS)*VXSS(1,2,M6) 

VXSS(2,2,MS)-VXSS(3.3,MS)*VXSG(li1,MS)-VXGS(3,l,MS)*VX8S(1,3,MS) 

VXsS(2,3,MS)=VXSS(3,1 ,NS)*VXSS(l,2,MS)-VXSS(3,2,MS)*VXSS(l,l,FS) 

mITE(O.JOOB) 

VRITE(B,3006) 

YRITE(6,3437) 

DO 3833 111=1,3 

WRITE(6,3006) 

3833 YILITE(6,3434) (tII.t~J,MS.VXSS(NI.tiJ.VS.'S).NJ=l,3) 

GO TO 3000 

C====== 

3440 CONTIKUE 

Cs== PR: COX4AIID E===== 

CSSS 

C($$ IPRAD= 1 =IIOPJIALIZATIOH FOR FAR ZONE AS FOLLOWS 

COS 

C$$$ PRAD=TOTIL POhZn RADIATED IN WATTS. 

C$SS 

C$$$ PRAD CAN ALSO DE SPECIFIED AS THE POX'ER INPUT IN WATTS. 

cut 

C$$$ NOTE IF PRAD IS LESS THAN OR EQUAL TO 1.E-30 

C$$$ TIlAlI LPRAD WILL BE SET FALSE 

cosa 

LPRAD=.TRUE. 

READ (6, *) IPRAD 

IF(IPRAD.CT.4) STOP 

GO TO (3434.3446,3448.3447),IPRAD 

3444 READ(6,*) PRAD 

IF(PRAD.LT.l.1E-30) CO TO 3442 

k!ITE(6,3441) PRAD 

3441 FORhIAT(2H *,6X;TOTAL POh'ER RADIATED IN WATTS- '.El2.8 

2.179, IH*) 

GO TO 3900 

3442 COIITIIIUE 

LPRAD=.FALSE. 

PRAD=O . L%ITE(0.3443) 

3443 FOPJtAT(2H *,6X.'N0 PO'IV. RADIATED IS SPECIFfED',T79,1H*) 

GO TO 3000 

3446 CONTINUE 

C$SS 

C$$$ IPRAD = 2 =hlUTUAL IhPEDAlIDCE CALCULATIOII Z12 = 211 

csas 

C$$$ CIl1 = SOURCE TERMINAL CLIP..PEIIT (REAL AND IMAGINARY) 

C$$$ C122 = RECEIVER TEP.E.1INAL CURPXIIT (REAL AND Ib!ACIlIltRY) 

C$$f 

READ(6.t) CIll,C122 

WRITE(0.3446) CIli.CI22 

4446 FORMAT(2H * .6X, ' SOURCE TEPJ.IIIIAL CURREHT= ' , ZEl2.6,T7D,lH*/ 

2,2H * ,6X. 'RECEIVER TEPJIIIIAL CUT,RElIT= ' ,2E12.6,179, lH*) 

GO TO 3000 

3348 CONTItJLE 

csss 
Cat$ IPRAD = 3 =COUPLING VIA THE REACTION THEORY 

C$a$ THIS GIVES A MODIFID FRII'S TRANSMISSION TYPE RESULT 

caaa 

C8$$ PRAD = POWFA RADIATED BT THE SOURCE 

C8$$ PBADR = POWER RADIATED BT THE RECEIVER AS IF IT VERE A SOURCE 

caaa 

READ(6. *) PRAD,PRADR 

YRITE(6.4447) PRAD,PRADR 

4447 FORHAT(1H ,EX, ' SOURCE POWER RADIATED* ' .Ell.6,T7Q,lH*/ 

1,lH * ,6X, 'RECEIVER POWER RADIATED= ' ,E11.6,T79, lH*) 

a0 TO 3000 

3447 CONTINUE 

caoa 

C$$$ IPRAD= 4 =COUPLING BY THE LINVILLE METHOD 

caaa 

Caaa CIll = SOURCE TERMINAL CURRENT (REAL AND INACINART) 

C$$$ C122 = RECEIVER TERMINAL CURRENT (REAL AND IMAOINART) 

cat: 

Cat$ 211 = SOURCE TERMINAL IMPEDANCE (REAL AND IMAGINARY) 

C$$$ 213 = RECEIVER TERMINAL IMPEDANCE (REAL AND IMAOINART) 

caaa 

READ(6.*) CI11,CIll 

WRITE(6,4446) CIll ,CIll 

READ(6,*) 211.211 

YRITE(6,4446) Zl1,ZZl 

4446 FORMAT(2H *,6X,' SOURCE TERMINAL IMPEDANCE. '.1E11.6,T79,1H*/ 

1,lH * ,6X, 'RECEIVER TERMINAL IMPEDANCE= ' ,2Ell. 6.170, IH*) 

GO TO 3000 clrle.l 

4400 CONTINUE 

C==* RG: COMMAND 11a.11~ 

caaa 

Cat$ MRX=NUMBER OF ANTENNA ELEMENTS. 

caaa 

LRCVR=.TRUE. 

LRMP=.FALSE. 

MRX=MRX*l 

MRXAT=MRAT+MilX 

IF(bRXAT.CI.MRDX) WRITE(6,4404) MilXAT 

4404 FORMAT(' ***** NUFBER OF RECEIVERS= ',I3,' PROGRAM', 

1' ABORTS SINCE MAX. RECEIVER DIhElISION IS EXCEEDED. *****I) 

IF(MXAT.GT.MRDX) STOP 

YRITE(6,4401) hRX 

4401 FORMAT(2H *.EX, 'THIS IS RECEIVER 110. ' ,I3, * IN THIS', 

2' COMPUTATION. ' ,179, lH*) 

WRITE(6.3006) 

YRIIE(6,3006) 

ctaa 

C$$$ XRR(lI,Mil)=XYZ LOCATION OF Mil-TH ANTENNA ELEMENT. 

ctat 

C$$$ IMil(bR)=TYPE OF LINEAR ANTENNA 

C$$$ .LT.O: ELECTRIC LINEAR ELEMENT 

Ca$$ .CT.O: MACllETIC LINEAR ELPENT 

C$$$ ABS(IhR)=l: UNIFORM CURRENT DISTRIBUTION 

C$$$ =2: STANDARD DIPOLE CURREIlT DISTRIBUTION 

c$$$ 93: CAVITY BACKED SLOT CURRENT DISTRIBUTION (TE01) 

caaa 

Ca$$ HAYR(MR)=APERTURE WIDTH IN WAVELENOTHS (NOTE: IF 

Cat8 HAWR(I.R) IS LESS THAtl .l LAblBDA. RECEIVER IS 

caaa COIISIDERED TO BE DIPOLE RECEIVER 

C8$$ WR(kR)=LEXCTH OF LINEAR ELEMENT IN WAVELENOTHS 

caaa 

C$$$ TWRZ,PHRZ=ORIE11TATIOll ANGLES USED TO DEFINE LINEAR 

Cat$ ELPENT AXIS. 
cat: 

C((( THRX,P~X=ORIEHTATI011 AAGLES USED TO DEFINE APERTURE 

Cat$ PLANE OR DIPOLE X-AXIS. 

cat: 

C:$$ YI.lR.WR=MAGNIIUDE AND PHASE OF EXCITATION OF 

Cat$ KR-TH ELDENT. 

ctat 

KR=t.mx 

MRA(l,KR)=O 

MRA (2, ER) =O 

READ(6,*) (XRR(N,MR) ,N=1,3) 

PSAD(6, *) THRZ,PIIRZ. THRX ,PHRX 

READ(6, *) ItQ(bR) ,HR(bR) ,HAUR(bR) 

READ(6,*) MR,WR 

IF(IMR(~IM .LT.O) YRITE(B,~~~~) Im(bm) 

4411 FORMAT(2H *.6X,'THIS IS AN ELECTRIC RECEIVER OF ITPE ',I3 

2,179.lH*) 

IF(I~R(MR) .CE. 0) WITE(6,4413) II.IX(bR) 

4412 FOWUT(2H *,6X,'THIS IS A HAUNETIC RECEIVER OF TTPE ',I3 

2,T79,1H*) 

VRITE(6.3038) 

IF(IUNST.Eq.0) GO TO 4414 

u1rs~s-rn11~ (IUNST) 

WRITE(6,4413) HR(bR) ,HAWTt(bR) , LABEL(IU1IST) 

4413 FORMAT(2H * ,6X, 'RECEIm LENGTH=' ,F10.6. ' AND WIDTH*' 

2,Fl0.6.lX,A0,T7D,lH*) 

HR(bm)=UIISTS*UIIITF*~(~) 

HAWR(blR) =UIISTS*U!IITF*HAkR(FCO 

IF(IUIIST.HE. 1) WRITE(6,3006) 

IF(IUNST.NE.1) WRITE(6,4413) HR(MX) ,HAWR(MR) ,LABEL(l) 

GO TO 4416 

4414 WlITE(6,4416) HR(bR) ,HAWR(MR) 

4416 FORMAT(2H * .6X, 'RECEIVER LENGTH=' ,F10.6. ' AND WIDTH=' 

2,F10.6.' WAVELENGTHS',T7Q,lH*) 

4416 WRITE(6,3006) 

m(bm)=#Fm*CEXP(CJ*WR*RPD) 

WRITE(6.4417) M.!R.WPR 

4417 FOMlAT(2H *,6X,'THE RECEIVER WEIGHT HAS MAGNITUDE=' 

2.F10.6,' AHD PHASE=',Fl0.6.T79,lH*) 

WRITE(6,3006) 

WRITE(0,3000) 

WRITE(6,4421) LABEL(IUW1T) 

4421 FORhIAI(2H *.T6,'RECEIVER#',TI7,'INPUT LOCATION IN '.A6,T48, 

2'ACTUAL LOCATION IN bETERS',T79,lH*) 

WRITE(6,4412) 

4422 FORbIAT(2H *,T6,7('-') ,T18,27('-') ,T46,27('-'1, 

2179, lH*) 

WRITE(6.3006) 

DO 4424 N=1,3 

4424 Xq(N)=XRR(H.M;1) 

DO 4426 11=1,3 

4426 XRR(~~,~(R)=UIIITS*(X~(~)*YRT(I,II)+X~(~)*VRT(~,N) 

~+XQ(~)*VRT(~,II))+TR(N) 

WRITE(6.4426) I.R.(x~(II),H=~.~),(XRR(I.~R),N=~,~) 

4426 FORMAT(2H * ,~8, 13,~ 16,~~. 3,2(', ' ,FS.~) ,144 ,~8.3,2(', ' ,F8.3) 

2,779, lH*) 

TqR=THRZ*RPD 

PqR=PHRZ*RPD 

Xq (l)=SIll(TqR) *COS(PqR) 

XQ(2)=SIN(TqR) *SIN(PQR) 

xq(3)=cos(~qa) 

DO 4431 11=1.3 

4431 vxRR(3.1 ,bfR)=~q(l)*~.~(l ,N)+XP(~)*VRT(Z,N)+XQ(~)*VP.T(~.N) 

TqR=THRX*RPD 
PQR=PHRX*RPD 

Xp(i)=SIN(TpR)*COS(PqR) 

Xq(l)=SIN(TqR)*sIN(PqR) 

xq(3)=cos(rq~) 

DO 4431 N11.3 

4431 VXRR(I,N,~)=XQ(~)*VRT(~,N)+XQ(~)*VRT(~,~)+I~(~)*VRT(~,~) ' 

DZX=VXRR(I,~,~)*VXRR(~,~,MR)+VIBR(~.~.~)*V~(~.~,HB) 

1+VXRR(1,3,MR)*VXRR(3,3,MR) 

IF(ABS(DZX) .GI .O. 1) VRITE(8,4436) 

4438 FORMAT(' *** PROGRAM ABORTS IN RECEIVER SECTION IN MAT TIE', 

2' COORDINATES ARE NOT ORTHOGONAL I I I ***'I 

IF(ABS(DZX) .GT.O. 1) STOP 

VIRR(I.I,~)=VXRR(~,~,~~-VXBR(~.~.MR)*DZX 

VXRR(1,1,MR)=VXRR(1,1,~)-VIRR(3,1,MR)*DZX 

VXRR(~.~.~).VXRR(~,~,~)-VIRR(~,~,~)~DZX 

DOT=VX~(~,~.~)*VXRR(~,~,HR)+VXRR(~,~,~)*VIRR(~,~,~) 

2+VXRR(1,3,m)*VXRR(l.3,hR) 

DOT=SPRT(DOT) 

VXRR(l,l,NR)=VXRR(I,i,MR)/DOT 

VXRR(l,2,MR)=VXRR(1,2,MR)/DOT 

VIRR(~,~,~)=VXRR(I,~,MR)/DOI 

VXRR(~,~,~).VIBR~~,~,~)~VXRR(I,~,~~-VXRR~~.~,~~*VXBR~~,~,~~ 

~~RR(~.~.MR~=~~~~,~,MR~*~IBR(I.I,~~-VX~~~.I,HB~*VI~(~,S.~) 

VXRR(~,~,~R~=VX~~~,~,~~~VXRR(I.~,MR~-VXRR(~,~,MR~*VXRR(I,I,~) 

YRIIE(6,3008) 

WRITE(8,3006) 

URITE(8,4437) 

4437 FORMAT(1H *,6X,'THE FOLLOWING RECEIVER ALIONMENT IS USED:' 

2,T7Q,lH*) 

DO 4433 N1=1,3 

YRITE(6,3008) 

4433 WRITE(6,4434) (NI,NJ,kR,VXRR(NI.NJ,MR) ,NJr1,3) 

4434 FORMAT(~H *,1X,3(3X,'VXRR(',11,',',11,',',11,')=',F9.6) 

2,179, IH*) 

CO TO 3000 

C.IS. 

4810 CONTINUE 

C=== RA: COhMAND ====== 

C$$$ 

C$$$ MRX=IIUMBER OF ANTENNA ARRAY GROUPINGS. 

Cttt 

C$$$ MRAX=NUMSER OF ELUEIITS PER GROUPING. 

csts 

LRCVR=.TRUE. 

LMIP=. FALSE. 

~X=MXX+I 

READ(6 ,*) bmAX 

HilAT =FIRAT*FRAX 

MRXAT=MIAT+MRX 

IF(MRXAT.GT.MRDX) WRITE(6.4404) FRXAT 

IF(FIRXAT.CT.t.!RDX) STOP 

WRITE(6,4806) MI11 ,FRAX 

4806 FOMAT(2H *,6X, 'THIS IS RECEIVEP. NO. ' ,13, ' IN THIS', 

2' cO~~PUIATIOII.',I~~,~H*/~H *,6X,'THERE ARE ', 

313. ' RECEIVERS ARRAYED TOGETHER. ' ,179, lH*) 

YRITE(8,3008) 

WRITE(8.3006) 

C$$$ 

C$$$ XRR(1I ,MA)=XYZ LOCATION OF MA-IH ANTENNA ELUENT. 

C$$$ 

C$$$ XRR(t;,bR)=XYZ LOCATIOU OF I.R-TH EICHTED CENTER OF THE 

C$$$ ARRAY GROUPING. 

C$$$ 

C$$$ THE ARRAY ELFhEllTS ARE ASSUbED TO HAVE THE SAME LENGTH, 
C$$( WIDTH, AND ORIEHTATION. ALSO, THEY ARE ASSVMED TO BE 

C$$$ EITHER ALL MOUNTED AND OR ALL OFF A PLATE. 

C$$$ INR(MX)=TYPE OF LINEAR ANTENNA 

C$$$ . LT . 0 : ELECTRIC LINEAR ELWlIT 

C$$$ .GT.O: MAGNETIC LINEAR ELWIIT 

C$$$ ABS(IMR)=l: UIIIFOUI CI,?IREllT DISTRIBUTION 

C$$$ =1: STANDARD DIPOLE CURREIT DISTRIBUTION 

'38 $ =3: CAVITY BACKED SLOT CURRENT DISTRIBUIIOI (1EOl) 

Ct$¶ 

C$$$ HAWl(bR)=APERTURE WIDTH IN WAVELENGTHS (NOTE: IF 

C$¶$ HAWR(bR) IS LESS THAI1 .l LAbQlDA, RECEIVER IS 

C$$¶ CONSIDERED TO BE DIPOLE RECEIVER 

C$$¶ HR(bm)=LENGTH OF LINEAR ELEMENT IN YAVUENGTHS 

C$$t 

C$$$ THRZ,PHRZ=ORIENTATIOl1 ANGLES USED TO DEFINE LINEAR 

C$$$ ELEMENT AXIS. 

ct*: 

C$$$ THRX,PHRX=OBIENThTIOII ANGLES USED TO DEFINE APERTVRE 

C$$$ PLAliE OR DIPOLE X-AXIS. 

C¶$$ 

C$$$ KMR,WPR=MICNITUDE AND PHASE OF EXCITATIOll OF 

C$$$ MA-TH ELEMENT. 

Ct$$ 

Kl=FRX 

MAI~blRDX-bRAT+l 

MAF=FIAI+bRAX-1 

MRA (1 ,KR) =FlAI 

bRA(2,M)=MAF 

DO 4841 NA=MAI,MAF 

4841 READ(6.*) (XRR(N.MA) .N=1,3) 

READ (6, *) THRZ , PHRZ , THRX , PHRX 

READ(6, *) IFRCbR) .HR(MR) ,HAWl(bR) 

IF(Ibm(bm) .LT.O) m1~~(6,4411) ~bm(m) 

IF(IMX(MX) .CE.O) WRITE(6,4412) IMR(MR) 

WRITE(6.3006) 

IF(IUUST.Eq.0) GO TO 4814 

UNSTS=UNIT(IUNST) 

WRITE(6.4413) HR(bR) ,HAICR(MIlIR) ,LABEL(IUNST) 

m(bR)=UISTS*U!1ITF*HR(bR) 

HAWR (FIR) =UNSTS*UNITF*HAWR(MR) 

IF(IUIlST.NE.1) k'RITE(6,3006) 

IF(IUfIST.NE. 1) URITE(6,4413) HR(b!R) ,HAWIL(KR) ,LABEL(l) 

GO TO 4818 

4814 YAITE(B,OOI~) ,HAWR(~) 

4818 YRITE(6,3006) 

wR(ML)=(l.,O.) 

UkrnA=O 

XRAX=O . XRAY=O . XRAZ=O . DO 4843 MA=MAI,MAF 

READ(6,*) WbR,WR 

VRITE(6.4817) bIA.WF!R,WR 

4817 FOUIAT(1H *.6X, 'RECEIVER ' ,13, ' HAS MAGNITUDE=' 

2,F10.6.' AND PHASE='.Fl0.6.T79,1H*) 

~(MA)=\~~.IR*CEXP(CJ*WR*WD) 

b?.RA=MIRA+rnR 

XRAX=XRAX+'b!R*XRR(l ,NA) 

XRAY=XRAY+h%IR*XRR(2,MA) 

4843 XRAZ=XRAZ+!$R*XRR(3.MA) 

XRR(1 ,bR)=XRAX/ORA 

XRR(2 ,MR)=XRAY /XMA 

XRR(3,FR)=XRAZ/YMRA 

WRITE(6, 3008) 
YBITE(6,3006) 

YRIIE(6,4411) LABEL(1UNIT) 

varr~(a.~n) 

WRITE(6,3008) 

DO 4824 N-1.3 

4824 XQ(N)=XRR(N,W) 

DO 4816 N=1,3 

4826 XRR(N,MR)=UNITS*(XQ(~)*VRT(~,N)+XQ(~)*VRT(~,N) 

~+XQ(~)*YRT(~,N))*TR(N) 

WRITE(6,4426) HX,(Xq(N).tl=1,3),(XRR(N,MR).N=1,3) 

DO 4829 MA=MAI,MAF 

DO 4827 N=1,3 

4827 XQ(N)=XBR(N .MA) 

DO 4828 N=1,3 

4828 XRR(N,MA)=UNITS*(XQ(~)*VBT(~.N)*XQ(~)*VRT(~,N) 

~*x~(~)*VRT(~,N))*IR(N) 

4829 YRITE(6,4428) MA, (XQ(N) ,N=1,3), (XRR(N,MA) ,N=1,3) 

TqR=THRZ*RPD 

PQR=PHRZ*RPD 

XQ(l)=SIN(TQ%) *COS(PUR) 

XQ(~)=SIN(TQR)*~IN(PQR) 

XQ(3)=COS(TQR) 

DO 4831 N=1,3 

4831 VXRR(~,~,~)=XQ(~)*M~T(~,~)+XQ(~)*VRT(~,N)*XU(~)*VRT(~,N) 

TQR=THRX*RPD 

PqR=PHP.X*RPD 

xQ(~)=sI!~(TQR)*coS(P~R) 

XQ (2) =SIN (TQR) *SIN (PQR) 

XQ(~)=CO~(T~R) 

DO 4832 1=1,3 

4832 VXRR(I ,N,MR)+XQ(1)*YRT(I ,N)+xQ(~)*VRT(~,N)*XP(~)*~T(~,N) 

DZX=VXRR(I,~,MX)*VXRR(~,~,MR)*VXRR(I.~,MR)*VXRR(~.~,MR) 

~+vxRR(I,s,~~)*vxRR(~,~,~) 

IF(ABS(DZX) .CT.O. 1) kTlITE(6,4436) 

IF(ABS(D2X) .GT .O. 1) STOP 

VXRR(I,l,hR)=VXRR(l, 1.MR)-VXRR(3,l ,~R)*DZX 

VXRR(~ ,2,MR)=VXW.(I ,2,MR)-VXRR(3,l ,hR)*DZX 

VXRR(I,~,~~)=VXRR(I,~,).~)-VXRR(~,~,MR)*DZX 

DOT=VXRR(~,~,~R)*VXRR(~,~.MR)*VXRR(~,~,MR)*VXRR(~,~,HR) 

~+vxRR(~,~.MR)*VXRR(I,~.MR) 

DOTnSqRT (DOT) 

VXRR(l,l,MR)=VXRR(~,~,HR)/DOT 

VXRR(I,~.~R)=VXRR(I.~,~~)/DOT 

vxRR(1,3,m)=VXRR(1,3,MR)/DOT 

VXRR(~,I,MR)=VXRR(~.~.~R)*VXRR(~,~,MR)-VXRR(~,~.MR)*V~~(~~~.~) 

VXRR(~.~,~)=VXRR(~,~,~)*VXRR(~,~,MR)-VXRR(~,~,~)*VX~(~~~~~) 

VXRR(~,~,~~=VXRR(~,~,~)*VXRR(~,~,MR)-VIRR(~.~,HR)*VXRR(~,~,~) 

WRITE(6,3006) 

WRITE(6,3006) 

!#RITE(6.4437) 

DO 4833 NI=l,3 

WR1TE(6, 3006) 

4833 YRITE(6,443J) (11 ,NJ.MR,VXRR(NI,NJ,MR) ,MJ=1,3) 

00 TO 3000 

C=====. 

3460 CONTINUE 

C=== SU: COhB!AND ES===1 

csss 

C$$$ PRAD=TOTAL POWE9 RADIATED IN WATTS 

C$t$ 

LPRAD= . TRUE. 

READ (6, * ) PRAD 

WRITE(8,3441) PRAD 

YRITE(6.3006) 
C$$$ 

C$$$ WX=NUMEER OF ANTENNA SEGMENTS 

ctt: 

LSMP= . TRUE. 

READ(6,*) MSX 

IFCMSX . GT .MSDX) WRITE(8,3477) MSX 

3477 FORMAT(' ***** NIJNBER OF SECblEIITS= ', 13, 

1' PROGRAM ABORTS SINCE MAX. SOURCE DIMENSION' 

3,' IS EXCEEDED. *****') 

IF(MSX .CT.MSDX) STOP 

YRITE(0.3461) MSX 

3461 FORMAI(2H *,6X,'THERE ARE ',13,' SEGMENTS IN THIS', 

2' COMPUTATION. ' ,T79,1H+) 

KRITE(0,3006) 

KRITE(6,3006) 

csss 

C$$$ XS(MS,N)=XYZ LOCATION OF MS-TH ANTENNA SEGMENT 

Ct$t 

CS$$ IblS(MS)=-l=ELECTRIC LINEAR ELEMENT WITH A UNIFORM DISTRIBUTION 

cot$ 

C$$) HS(F!S)=LEIICTH OF LINEAR ELENENT 

Ct$$ 

Ct$$ MSZ ,PIISZ=ORIEllTAIION ANGLES USED TO DEFINE 

C$SS LINEAR ELEMENT AXIS. 

cttt 

C$$$ WJ!S.WPS=REAL AND IMAGINARY CURRENT WEIGHT. 

ctts 

WRITE(0,3468) LABEL(IUII1I) 

3468 FORJIAT(2H *.T7,'FIS',T13.'HS:',A0,T23,'HS:METERS', 

2T41,'IIIPUT: IHS,PHS'.T60,'ACTUAL: IHS.PHS',T7Q.lH*) 

WRITE(0,3169) 

3469 FORMAT(2H *,T6,3('-') ,T12,20('-') ,140,10('-') ,169, 

217('-'1 .T?Q.lH*) 

WRITE(8,3006) 

DO 3163 MS=I,MSX 

READ(6,*) (XSS(N.MS).N=l,3),HS(MS),THSZZPHSZ 

MSA(l,MS)=O 

NSA(2 ,MS)=O 

IMS(blS) =-1 

HA?!S(CIS)=O. 

HSq=HS (MS) 

HS (NS) =UIIITS*HSq 

Tq=QO.-THSZ 

Pq=PHSZ 

Xq (l)=SIN(TQ*RPD) *COS(PQ*RPD) 

XQ(2)=SIN(Tq*WD) *SIN(Pq*RPD) 

Xq(3)=COS(Tq*RPD) 

DO 3181 lf=1,3 

3481 XqR(tI)=Xq(l)*VRT(I,N)+Xq(2)*VRT(2,N)+XQ(3)*VRT(3,N) 

THSZ=DPR*BTAN2(SQRT(XqR(l) *XqR(l) +XqR(2) *XqR(2)) ,XqR(3)) 

PHSZ=DPR*BTAU2(XQR(2) , XqR(1) ) 

#RITE(6,3161) MS,HSQ,HS(FIS),Tq,Pq,THSZ,PHSZ 

3404 FORMAT(2H *,T6,13,3X,2(2X.F8.4),6X,2(2X,F8.3,','.F8.3) 

2.T79.1H*) 

DO 3481 N=1,3 

3484 VXSS(3,H,MS)=XqR(H) 
YRITE(6,3006) 

XRIIE(6,3006) 

URITE(6,3464) 

9464 FORNAT(2H ,131, 'SECENT COORDINATES' ,179. '*') 

ZIRITE(6.3006) 

YRITE(6,3006) 

ZIRITE(6,3466) LABEL(1UIIT) 

3466 FORMAT(2H * ,17. 'h!slS' ,114. 'INPUT LOCATION IN ' ,A6, 

1143, 'ACTUAL LOCATION IN METERS' ,T7Q, I*') 

WRITE(6,3467) 

9467 FORMAT(1H *,II,S('-'),Tl9,16('-'),T4lIl7('-') ,T79,'*') 

YRIIE(6 ,S006) 

DO 3473 MS=l,HSX 

DO 3474 N=1,3 

3474 XQ(N)=XSS(N,MS) 

DO 3476 N=1,3 

9476 XSS(lI,MS)=U%IIS*(XQ(l)*VRT(l .N)*XqCl)*VRT(l,N) 

l*Xq(3)*VRT(3,N))*TR(N) 

VRITE(6,3470) MS, (XQ(N) .N=l.S). (XSS(N,MS) .N-1,3) 

9476 FORNAI(2H ,T6,13,113,F8.3.1('. ' .F8 .9) ,T41,F8 .9. 

ll(',',F8.3),17D,lH*) 

3473 COllTItIUE 

YRIIE(6,3006) 

YRITE(6,3008) 

YaITE(6,3486) 

3486 FORMAI(2H * ,133, 'CURRENT WEICHTS' .'I7D.lH* ,IZH * ,T7, 'NS' ,T18, 

l'REAL'.T3l,'IMAO.',T46,'~O.'.T67.'PHASE',T7Q,lH*) 

WRITE(6,3486) 

9486 FORMAT(2H *,T6,3('-') ,T17,6('-1),T30,7('-') ,T46,6('-'), 

lT66,7('-') ,TlQ,lH*) 

DO 3466 NS=l,NSX 

READ(6. *) WS. WPS 

ws (b!s) =OlPLX (ms, WS) 

WN=BABS(Cbl?LX(WS ,WS) ) 

WF'P=DPR*BTAI2(WS ,W!S) 

MITE(6,3486) KS,W!S,WPS,WMM,WPP 

3466 FOMlAT(2H * ,T6. I3.6X ,Ell .4,lX ,Ell. 4,4X,E11.4,1X,F8.3,T7Q, lH*) 

3466 CONTIliUE 

WRITE(6,3006) 

GO TO 3000 

C==..t= 

4460 CONTINUE 

C-- RM: CObNAND -====I 

cttt 

C$$$ PRADR=TOTAL POWER RADIATED IN WATTS 

Cttt 

READ (6, *) PBADR 

rn1~~(8,3441) PRADR 

bXITE(6,3006) 

cstt 

Ct$$ MRX=NUFIBER OF ANTENNA SEGMENTS 

C$t$ 

LRCVR=.TRUE. 

LRMP=.IRUE. 

READ(6.*) M2X 

IF(kIXX. GT.hU)X) 'VRITE(6.4477) MRX 

4477 FORlrlAT(' ***** NWlEER OF SEGbEIIIS= ' ,I3, 

2' PROGRAM ABORTS SINCE MAX. RECEI\IER DIbWSION' 

3.' IS EXCEEDED. *****'I 

IF(bRX .CT .bCIDX) STOP 

MITE(6.3461) MRX 

WRITE(6,3008) 

YRITE(6,3008) 

Cttt 
2072 C$$$ XRR(N,'FR)=XYZ LOCATION OF Kl-TH ANTENNA SEGMENT 

2073 C$$$ 

2074 C$$$ IEt(b!X)=-l=ELECTRIC LINEAR ELEMENT WITH A UNIFORM DISTRIBUTION 

2076 C$$$ 

2070 C$$$ HR(MX)=LEIlGTH OF LINEAR ELEMENT 

2077 CO$$ 

2078 C$$$ THRZ.PHRZ=ORIEIITATION ANGLES USED TO DEFINE 

2079 C$$$ LINEAR ELDENT AXIS. 

2080 C$$$ 

1081 C$$$ M,WR=REAL AND IHACINARY CURRENT WEIGHT. 

1082 C$$$ 

2063 'kXITE(6,4468) LABEL(IU1IIT) 

2084 4468 FORMAI(2H *.T7,'~',Tl3,'HR:'.A0,T23,'HR:ME~S'. 

2086 2~41. ' II~PUT: nn,Pml ,100, 'ACTUAL: THR,PHR' ,T?Q,IH*) 

2086 YmITE(0,3469) 

2087 4469 FORMAT(2H *.16,3('-') ,112,20('-') ,T40,16('-'),T69, 

2088 217('-'1 ,T79,1H*) 

2089 YRITE(6.3008) 

2090 DO 4463 MX=I,MXX 

1091 READ(6,*) (XRR(W,~R),N=~,~),HR(MR),~Z,PHRZ 

2092 bRA(l.b!R)=O 

2093 MRA(~ ,bla)=o 

a094 I~R(~R)=-I 

2096 HAWR(KX)=O. 

2096 Inq=m(brt) 

2097 HR(bIR)=UNITS*HRQ 

2098 Tq=QO. -THRZ 

2099 Pq=PHRZ 

2100 XQ(l)=SIN(TQ*RPD)*COS(Pq*RPD) 

2101 Xq(2)=SIN (Tq*RPD)*SI11(Pq*RPD) 

2102 Xq (3)=COS(TQ*RPD) 

2103 DO 4481 11=1.3 

2104 4481 ~qR(t1)=Xq(l)*VRT(l ,Il)+XQ(2)*VRI(2,N)+Xq(3)*VRT(3,N) 

2106 THRZ=DPR*BTA~~~(SQRT(XQR(~)*X~R(~)*X~R(~)*X~R(~)) ,XQR(3)) 

2108 PHRZ=DPR*BTAIIZ(XQR(Z) .XQR(l)) 

2107 WRITE(6.3484) bR.HRq ,HR(bR) ,TP,Pq,THRZ,PHRZ 

2108 DO 4484 N-1.3 

2109 4484 VXRR(~.~I,~R)=X~R(I~) 

2110 VXRR(I, 1 ,EGI)=COS(THRZ*RPD) *COS(PHRZ*RPD) 

2111 VXRR(1 .~.~R)=cOS(THRZ*RPD)*SI~~(PHRZ*RPD) 

2112 VXRR(1,3 .b!R)=-SIII(THRZ*RPD) 

2113 VXRR(2.l ,MR)=-SIIl(PHRZ*RPD) 

2114 vxm(Z,a, rR) =cos (PHRZ*RPD) 

2116 VXRR(~.~.MX)=O. 

2110 4403 COIITIHUE 

2117 WRITE(0.3008) 

2118 YRITE(6,3008) 

2119 WRITE(0,3008) 

2120 WRITE(0,3464) 

2121 3 WRITE(6,3006) 

2122 WRITE(6,3006) 

2123 WRITE(6.4466) LABEL(IUII1T) 

2124 4460 PORhIAT(2H *.I?, 'bR' ,114, 'INPUT LOCATION IN ' ,A6, 

2126 2743, 'ACTUAL LOCATION III METERS' ,179. '*I) 

2126 WtITE(6,3467) 

2127 b'RITE(8,3008) 

2128 DO 4473 b!3=1.MRX 

2129 DO 4474 N=1.3 

2130 4474 XQ(II)=XRR(N ,MR) 

2131 DO 4476 11=1,3 

2132 4476 XRR(II.~IR)=UIIITS*(X~(I)*VRT(I .II)*xQ(~)*VRT(~,N) 

2133 Z*XQ(3)*VRT(3,N))*TR(N) 

2134 URITE(6.3476) bR. (XQ(II) .11=1,3). (XRR(N,bR) ,N=1.3) 

2136 4473 COIlTINUE 
WRITE(6,3006) 

YRITE(6,3006) 

mIrE(e ,3486) 

MRITE(6,3486) 

DO 4466 IJIR=l,MRX 

READ(6.*) M,WR 

WR(h!R) =CMPLX (LIMR,WPR) 

YIMM=BABS (CMPLX (I6MR, WR)) 

YPP=DPR*BTA12 (UPR .WKR) 

YRITE(6,3466) MR,YMR,WF'R,WW.YPP 

4466 COIITIIIUE 

YRITE(6,3008) 

GO TO 3000 

C=.=r== 

3490 CONTINUE 

C=- NS: COhMND -ED=== 

C140 

C$$: INITIALIZE SOURCE DATA. 

c::: 

LGMP=.FALSE. 

MSX.0 

MSATnO 

YRITE(6,3491) 

3491 FORMAT(1H *.6X, ' ME SOURCE DATA IS INITIALIZED. ' ,no, iH*/ 

1,1H *.6X,' NO SOURCES ARE PRESENTLY IN THE PROBLEM. ' 

3,T79,18*) 

GO TO 3000 

CLI.I. 

3496 CONTINUE 

C== NR: CONVAND =15=== 

ct:. 

Cl$S INITIALIZE RECEIVER DATA 

cots 

LRCVR=.FALSE. 

LWfP=. FALSE. 

mx=o 

WRITE(0.3498) 

3496 FOR).lAT(aH *,6X,' THE RECEIVER DATA I8 INITIALIZED. ' 

1 .TTQ. IH* /lH * ,6X, ' IO RECEIVEAS ARE PRESENTLT IN THE' 

3.' PROBLEM. '.T7Q,lH*) 

GO TO 3000 

CI=II=I 

3600 COBTINUE 

C==e LP: COhNAIID e1=11= 

Cl$S 

Cl$$ LWRITE=TRUE IF LINE PRINTER OUTPUT OF DATA IS DESIRED 

ct: 

READ(6,*) Lb'RITE 

IF(.NOT.Lh'RITE) WRITE(6,6606) 

6606 FOalAT(2H *,6X,'NO LINE PRINTER OUTPUT',T70,IH*) 

If(.NOT.LkllITE) GO TO 3000 

\bRITE(6,3601) 

3601 FORMAT(2H *,6X,' DATA WILL BE OUTPUT ON LINE PRINTER Ill', 

lT7O. iH* ) 

CO TO 3000 c.====. 

3660 COIITINUE 

C-== W: COWAND ===r== 

C$$$ 

CS$$ VOLUMETRIC DUNP FOR PLOTS 

C$lS 

READ(6, *) LWLT 

IF(.NOT.LVPLT) WRITE(6,6600) 

IF(.IIOT.LVPLT) CO TO 3000 
CO TO 3861 

CIIllli~ 

3800 CONTINUE 

C=- PP: COKldAtlD I=---= 

C$¶* 

C$$t LPLT=TRUE IF PEN PLOTTER OUTPUT I6 DESIRED 

C$$$ 

READ(6, *) LPLT 

IF(. IIOT. LPLT) bfXSTE(0,6008) 

6606 FOPAIT(2H *,6X,'l!O PElI PLOT DESIRED1,T79,1H*) 

IF(.NOT.LPLT) GO TO 3000 

C$$$ 

C$$$ IF LPLT=TRUE READ Ill DIEIISIONS 

ctsa 

C$$$ LPPPZC = TRUE IELIES PECIAIIGULAR PLOT 

C$$$ PPXL = LEliCTH OF X-AXIS (ANGLE AXIS) 

C$$$ PPYL = LENGTH OF Y-AXIS (DB AXIS) 

C$$$ 

C$$$ LPPREC = FALSE IIPLIES POLAR PLOT 

C$$$ PPXL = AlICULAR POSITION OF X-AXIS 

C$$S PPYL = RADIUS OF CRID 

a$$ 

3861 REID(6. *) LPPP.EC,PPXL.P?YL 

caot 

C$$$ PPXB = BEGIN!IINC VALUE OF X-AXIS 

C$$$ PPXE = END VALUE OF X-AXIS 

C$$$ PPXS = STEP SIZE OF X-AXIS CRID MARKS 

C$O 

PLEAD (6. *) PPXB , PPXE. PPXS 

C$$$ 

C$$$ PPYB = BECIIIIIIIIC VALUE OF Y-AXIS 

CS$$ PPYE = EllD VALUE OF Y-AXIS 

C$$$ PPYS = STEP SIZE OF Y-AXIS GRID MARKS 

C$$t 

READ6 ,*) PPYB,PPYE.PPYS 

WRITE(0.3802) 

3602 FORMAT(2H *,6X,'DATA WILL BE OUTPUT FOR A PLOT Ill' 

2.T79.iH*) 

URITE(6,3006) 

WRITE(6.3603) LPPREC,PPXL.PPYL 

3603 FORMAT(2H *.6X.' LPPREC= '.L2,6X,'PPXL= '.F10.6.6X. 

2'PPYL= '.FlO.S,T79,1H*) 

WRIIE(8.38OQ) PPXB .PPXE.PPXS 

3804 FOIV.lIT(2H *.6X.' PPXB= ',F10.6,6X,'PPXE= '.F10.6,6X, 

2'PPXS= '.F10.6,T79,lH*) 

WXITE(6.3806) PPYB .PPYE.PPYS 

3606 FOIV.!AT(2H ,6X, ' PPYB= ' ,FlO.6,6X, 'PPYE= ' .F10.6,61, 

2'PPYS- ' ,FlO.6.T79,lH*) 

IF(LPLT) CO TO 3000 

WRITE(6,3006) 

IVTYP-TYPE OF RESULTS OUTPUT 

IVTYP=l ELECTRIC FIELD OUTPUT 

IVTYP=2 MACUETIC FIELD OUTPUT 

IVTYP=3 BOTH ELECTRIC AND NAGlIETIC FIELDS OUTPUT 

COUPLIIIG IS OUTPUT IF RECEIVER IS DEFIliED FOR ANY IVTYP 

IVPOL=POLARIZATIOI OF RESULTS OUTPUT 

IVPOL=1.2,3 THEN R, THETA,PHI OR X .Y , Z RESPECTIVELY IS OUTPUT 

IVPOL-I THE!{ R-THETA OR X-Y ARE OUTPUT 

IVPOL=6 THEIS 8-PHI OR X-Z Am OUTPUT 

IVPOL=6 THEII THETA-PHI OR Y-Z ARE OUTPUT 

IVPOL=7 THE!! R, THETA AND PHI OR X, Y LND Z ARE OUTPUT 

COUPLIliC HAS KO POLARIZATION 
csss 

READ(6, *) IVTTP, IVPOL 

YRISE(6,3666) IVTYP, IVPOL 

3666 FOBNAT(1H *.6X, ' IVTYP= '11,' IVPOLs ' ,12,17Q,lH*) 

GO TO 3000 

C91ll9l 

3700 CONTINUE 

C==n GP: CONMAID ====I= 

cso 

C$SS INFINITE CROUND PLANE EFFECT INCLUDED. 

ca:s 

LORND=.TRUE. 

DO 3701 N11.3 

XX(N.1,MPDX)=l.E6*(VRT(l,N)*VRT(l,N))+IR(N) 

XX(H,2,MPDX)=l .E6*(-VRT(I,N)+VRT(l,N))*TR(N) 

XX(N,3,MPDX)=l.E6*(-VRT(l,N)-VRT(l,N))*TR(N) 

3701 XX(N,4,WDX)=I.ES*(VRT(1,N)-VRT(l,N))+TR(N) 

csas 

CSSt LSLAB= 0 IMPLIES METAL PLATE, AND 

c8$$ -3 IMPLIES DIELECTRIC HALF SPACE 

cots 

C$$$ NOTE: IF DIELECTRIC COVERED, ONE MUST READ DIELECTRIC DATA. 

cs:s 

READ(6. *) LSLAB(WD1) 

IF(LSLAB (HPDX) . Eq . 0) YRITE(6,3706) 

3706 FORMAT (2H * ,6X, 'PERFECTLY CONDUCTING' ,779, lH*) 

IF(LSLAB (hIPDX) . NE. 0) YRITE(6,3707) 

3707 FOWIAT(2H ,6X, 'SEMI-INFINITELY THICK DIELECTRIC' ,T7Q,IH*) 

WRITE(0,3701) 

3701 FOIIMAT(1H * ,6X, 'INFINITE CROUND PLANE INSERTED IN', 

1' STRUCTURE 1 1 1 ' ,179, lH*) 

wnIn(e ,3006) 

VRITE(6.3703) (TR(N) .N=i ,3) 

3703 FOWIAT(2H *,6X,'THE ORIGIll IS AT '.Fll.6,',',FIl.6 

1. ' , ',Fll.6. ' METERS',T79,lH*) 

WRIIE(6,3006) 

\mITE(6,3704) (VRT(3.N) .N=l,3) 

3704 FORMAT(2H *.6X,'THE NORMAL IS ',Fll.6,',',Fll.6.',' 

l,F11.6.T79,1H*) 

IF(LSLAB(bIPDX) .Eq. 0) GO TO 3000 

NSLAB(l)=t 

DSLAB(l,MPDX)=O. 

LSLAB(bIPDX)=-3 

csss 

C$$$ ERSLAB(l.bIPDX)=RELArrVE DIELECTRIC CONSTANT 

CSSS 

C$$$ TESLAB(1 ,WDX)=DIELECTRIC LOSS TANGENT 

C$t$ 

C$$S UXSLAB(1 .WDX)=RELAIIVE PERMEABILITY COlISTAllT 

CUS 

cut MSLAB(I,I.IPDX)=PERMEABILITY LOSS TANGENT 

css: 

READ(6, *) ERSLAB(1 ,bIPDX) , TESLAB(1 ,MPDX) 

l,URSLAB(I,MPDX) ,TMSLAB(l,MPDX) 

WRITE(0,3000) 

bXITE(6,3708) 

3708 FORMAT(2H *.6X, 'DIELECTRIC' ,3X, 'LOSS' ,4X, 

2'PERMITIVITY' ,3X, 'LOSS' ,T79,1H*,/, 

31H * ,OX, 'CONGTAIIT' ,3X, ' TANCEIII ' . 44X,'CONSTANT',3X,'TA!1CEt1T',T79,lH*./. 

62H t,6X,*----------',lX,'--------* 

e2~,*-----------1,2~;-------1 ,T79,1H*) 

YRITE(6,3709) ERSLAB(1 ,HPDX), TESLAB(1 ,MPDX) 

l,URSLAB(l ,MPDX), TMSLAB(1 ,hlPDX) 
3709 FORMAT(2H *,6X,Fl0.4,2X,F7.4,2X,Fll.4,2X, 

2F7.4,179,1H*) 

GO TO 3000 

CSE.=== 

3760 CONTINUE 

C=== NG: CObNABD ===----- cast 

C$$$ INITIALIZE GROUlID PLANE DATA. 

cast 

LCRllD= . FALSE. 

BRITE(6,3761) 

3761 FOPAlAT(2H .EX, ' GROUND PLANE DATA IS IIIITIALIZED. ' ,T7D,lH*/ 

2,lH *,GI,' 10 CROUllD PLANE IS PRESENTLY IN THE PROBLEM. ' 

3,T79.1H*) 

CO TO 3000 

CI=PIE= 

3900 CONTINUE 

C=== P.1: COkC4AlID -11111 

cast 

C$$$ TR(N)=LINEAR TRANSLATION OF COORDINATES FROM THE FIXED 

C$$$ COORDINATES WHICH IS OaICINALLY SET UP BY OPERATOR. 

C$S$ 

READ(6,*) (TRCN) ,N=1,3) 

~ITE(8,3901) LABEL(IUNIT),(TR(N),N=l,3) 

3901 FORI.IAT(2H *,EX, 'TRAtISLATIOlI IN ' ,A6, ' : TB(l)=' ,F8.3, 

2' TR(2)='.F8.3,' TR(3)='.F8.3,T79.1H*) 

DO 3920 N=1,3 

3920 TR(Il)=TR(N)*UBITS 

FlITE(6.3008) 

IF(IUlIIT.1IE. 1) kRITE(6.3901) LABELCI), (TR(N) ,N=1,3) 

IF(IUIIIT.fIE.1) MITE(6,3006) 

kRITE(6.3008) 

csss 

C$$$ THZP.PHZP=ORIE!ITATIOIl OF THE VRT(3.N) AXIS WATIYE TO THE 

C$$$ FIXED COORDINATE SYSTEM. 

C$SS 

C$$S THXP.PHXP=OBIEIlTAIIOII OF THE VRT(1,N) AXIS RELATIVE TO THE 

C$$$ FIXED COORDItlATE SYSTEM. 

CSSS 

READ (6, *) THZP ,PHZP, THXP,PHXP 

VRT(3,1)=SIN(IHZP*RPD) *COS(PBZP*RPD) 

VRT(3,2)=SIlI(THZP*RPD)*SIN(PHZP*RPD) 

VRT(3,3)=COS(THZP*RPD) 

VRI(l.l)=SIll(THXP*RPD) *COS(PHXP*RPD) 

VRT(1,2)=SIlI(THXP*RPD) *SIN(PHXP*RPD) 

VRT(l,3)=COS(THXP*RPD) 

CI ! ! INSWE VRT(1. ti) IS PERPENDICULAR TO VRT(3, N) 

DZX=VRT(~,~)*~T(~,~)+V~~T(~.~)*VRT(~.~)+VRT(~,~)*VRT(~,~) 

IF(ABS(DZX1 .CT.O. 1) WFiITE(6,3903) 

3903 FORMAT(' *** PaOGRAM ABORTS IN ROTATE SECTION IN THAT THE', 

2' COORDINATES ARE NOT ORTHOCONALIII ***I) 

IF(ABS(DZX) . CT. 0.1) STOP 

VRT(l,l)=VRT(l.l)-VRT(3,1)*DZX 

VRT(l,2)=VRT(l,2)-mT(3,2)*DZX 

VRT(1,3)=VRT(1,3)-VRT(3,3)*DZX 

DOT=VRT(l, l)*VRT(l. l)+L%T(1,2)*~T(1,2)+VRT(l,3)*VRT(1,3) 

DOT=SqRT(DOT) 

VRT(l.1)=VRT(l,l)/DOT 

v~r(i,2)=v~r(i,2t/oor 

VRT(1,3)=VRT(1,3)/DOT 

VRT(2.1)=~T(3,2)*VRT(l.3)-VRT(3,3)*VRT(1.2) 

VRT(2.2)=VRT(3.3)*VRT(l.I)-VRT(3.1)*VRT(1,3) 

VRT(~,~)=VRT(~,I)*VRT(~,~)-VRT(~,~)*VRT(~,~) 

YYRITE(6.3931) 
3931 FORMAT(1H *,6X,'THE FOLLOWING ROTATIONS ARE UW FOR ALL', 

1' SUBSEQUENT INPUTS: ' ,179. lH*) 

DO 3931 NI=1,3 

WLITE(6,3006) 

3D32 YAIE(6,3933) (NI,NJ,VRT(NI,NJ) ,NJ=l,3) 

3933 FORNAT(1H *,11,3(1~,'~~~(',11,',',11.')=',~9.6) ,T79,1H*) 

GO I0 3000 

CII.... 

4000 CONTINUE 

C=== CC: AND CC: COMMAND ===PIE 

C$$$ 

C$$$ CYLINDER GEOETRY INPUT 

c$at 

LCTL=.TRUE. 

UCX=MCX+l 

MC=MCX 

IF(UCX .OT.MCDX) WIlITE(6,6311) MCX 

6311 FORMAT(' ***a* NUMBER OF CYLINDERS= ',13.'PROCRAU', 

1' ABORTS SINCE MAX. CYLINDER DIMUISION I8 EXCEEDED. *****'I 

IF(MCX. GT .NCDX) STOP 

cttt 

C$$$ XCL(N,MC)=XTZ LOCATION OF TIE, ORIGIN OF THE MC-IH CTLINDX 

C$$$ 

READ(B.*) (ICL(N,MC) .N=1.3) . DO 6301 N=1,3 

6301 XU(N)=XCL(N,MC) 

DO 0302 N=1,3 

6301 XCL(N,MC)=UIIIIS~(X~(~)~VRI(~,N)+IQ(~)*VRT(~.N) 

l+XQ(3)*VRP(3,N))+TR(N) 

WRITE(6.6308) LABEL(IUII1) 

8308 FORMAT(2H *,TS.'CYLINDERI',Tl7,'INPUT LOCATION IN ',A6 

1,146,'ACTUAL LOCATION IN METERS'.T79,lH*) 

vRITE(6,3411) 

vRITE(6.3006) 

vRITE(6,3420) MC, (Xq(N) ,N=1,3), (XCL(N,UC) ,~=1,3) 

WBITE(6,3006) 

WRITE(6.3006) 

C$$$ 

C$$$ ICLZ,PCLZ=ORIENTATIOH OF THE CYLINDER AXIS 

C$$$ 

C$$$ TCLX,PCLX=ORIENTATION OF THE CTLINDER'S X-AXIS 

C$$$ 

READ(6, *) TCLZ ,PCLZ. ICLX ,PCLX 

X~(~)=SIII(ICLZ*RPD)*COS~PCL~*RPD) 

Xp(2)=SIN (TCLZ*RPD) *SIN(PCLZ*RPD) 

IQ(3)=COS(TCLZ*RPD) 

DO 6303 N=1,3 

6303 VCL(~.~,MC)-IQ(~)*~T(~,N)*XQ(~)*VRT(~.N)+IQ(~)*YR~(~.N) 

~~(~)=~IN(TCLX*RPD)~COS(PCLX*RPD) 

XQ(l)=SItl(TCLX*WD) *SItl (PCLX*RPD) 

XQ(J)=COS(TCLX*RPD) 

DO 0304 N=1,3 

6304 VCL(1, ~I,MC)=XQ(~)*~T(~,N)+XQ(~)*VRT(~,N)+XQ(~)*VRT(~.N) 

DZX=VCL(I. 1 ,MC)*VCL(J, l,Mc)+v~L(l ,~,MC)*VCL(~,!I,UC) 

1+VCL(l,3,~!C)*VCL(3.3,MC) 

IF(ABS(DZX) .CT.O. 1) W.ITE(6,6305) 

6306 FOPJtAI(' *** PROCRAbl ABORTS THE COORDINATES ARE NOT', 

1' ORTHOGONAL! I I ***I) 

IF(ABS(DZX). GT .O. 1) STOP 

VCL(1,l,MC)=VCL(l,l,MC)-VCL(3,iIMC)*DZX 

vCL(~,~,UC)=VCL(~,~,MC)-VCL(3,12MC)*DZX 

vCL(I,~,MC)=VCL(I,~,MC)-VCL(~,~,NC)*DZX 

DOT=VCL(~ .~.Mc)*~cL~~,~,Mc~+vcL(~,~,Mc~*vcL~~,~,Nc~ 

l+VCL(l,3.MC)*VCL(1,3,1.IC) 
1466 DOT=S~RT(DOT) 

9467 VCL(l,I,FIC)=VCL(l,I,MC)/DOT 

1468 VCL(~,~,MC)=VCL(~,~,MC)/DOT 

1469 VCL(l,3,b;C)=VCL(l,3,MC)/DOT 

1460 VCL(2,1,MC)=VCL(3,2,HC)*VCL(l,3,MC)-VCL(3,3,MC)*VCL(l,l,MC) 

2461 VCL(l,l.MC)=VCL(3,3,~)*VCL(l,l,MC)-VCL(3,1,MC)*VCL(1,3,MC) 

2462 VCL(2,3,blC)=VCL(3,iib!C)*VCL(l,l,MC)-VCL(3,l,MC)*VCL(1,l,~C) 

1463 WRITE(6,6309) 

2464 6309 FOWAT(2H *,6X,'TIIE FOLLOWING CYLINDER ALIGNMENT I8 USED:' 

2466 l.T79.1H*) 

1486 DO 8303 NI=1.3 

1467 !6UTE(6,3006) 

1468 6306 WRITE(6.8307) (I~I.NJ,VCL(~II,NJ.MC).~~J=~,~) 

9460 6307 FOUIAT(1H *.lX.3(2X.'VCL('.Il,',',Ili')-',FQ.6),TfQ,lH*) 

2470 C$$O 

1471 C$$$ AC=RADIUS OF ELLIPSE 01 X CYLINDER AXIS 

2471 C$$$ BC=RADIUS OF ELLIPSE ON Y CYLINDER AXIS 

2473 C$$$ 

1474 C$$$ ZCN,THTtI=MOST NEGATIVE EHDCAP'S Z COWONENT 

2476 C$$$ AND ANGLE OF SURFACE WITH THE CYLINDER AXIS 

1476 c$$$ ZCP.THTP=MOST POSITIVE EPDCAP'S Z CObPONEtlT 

2477 C$$$ AND ANGLE OF SURFACE WITH THE CYLINDER AXIS 

1478 C$$$ 

1479 IF(IR(I).E~.IT(~o)) GO TO 6400 

1480 NEC(MC) =2 

1481 FtEAD(6,*) AC(1,GC) ,BC(l,MC) 

2401 READ(S.*) ZCN.THTN,ZCP.IHTP 

1483 AAO=AC(l.MC) 

1484 BBO=BC(l,MC) 

1486 AC(1 ,MC)=AC(l ,MC)*UllITS 

1486 BC(l,HC)=BC(l.MC)*UIIITS 

1487 AC(P,WC)=AC(l.MC) 

1488 BC(Z.HC)=BC(l ,MC) 

1489 zcca .nc)=zct~+usr~s 

1490 TCR(1 ,MC)=THTtl*P.PD 

1491 ZC(1 .MC)=ZCP*UNITS 

1492 TCR(l,MC)=THTP*RPD 

14D3 KtITE(6.3006) 

1494 WXITE(6, 3006) 

1496 WFtlTE(6,6310) LABEL(IUIIIT),AAO 

1496 6310 FORMAT(2H *.6X.'X AXIS DIbENSIOlI IN ', 

1497 2AB.'=',F8.3,T79.lH*) 

2498 ~'RITE(6.3006) 

1499 IF(IUIl1T .NE. 1) WRITE(6,6310) LABEL(1) .AC(l.MC) 

IF(IUNIT.NE.1) #ilITE(6,3006) 

WRITE(6.3006) 

WRITE(6,6320) LABEL(IUBIT).BBO 

6320 FOUIAT(2H *,6X,'Y AXIS DIbENSION IN ', 

2A6.'='.F8.3,T79.1H*) 

WRITE(6.3006) 

IF(IUIT1T.I:E.l) WtITE(6,6320) LABEL(l),BC(l,MC) 

IF(IUIIIT.1IE. 1) IYRITE((i,3006) 

~ITE(~ ,3006) 

WRITE(6,6330) LABEL(IURIT),ZCtl 

6330 FORMAT(2H *.6X.'MOST NEGATIVE END CAP Z COMPONENT IN ', 

2A6,'='.F8.3.T79,1II*) 

WRITE(6.3006) 

IF(IUllIT.tIE.1) HtITE(6,6330) LABEL(l).ZC(2,MC) 

IF(1UIIIT. HE. 1) WRITE(6,3006) 

wrra(e,esJo) THTlr 

6340 FOMIAT(2H *.6X.'AIlGLE OF AEC. END CAP SURFACE WITH NEG.', 

1' CYL. AXIS ','=',F8.3,T70,1H*) 

WRITE(6,3006) 

WRITE(6.3006) 
YRITE(6.6360) LABEL(IUN1T) ,ZCP 

6360 FORUAT (2H *,6X, 'HOST POSITIVE END CAP Z COMPONENT IN ', 

lA6,'='.F8.3,T79,1H*) 

YRITE(B, 3006) 

IF(IUNIT.NE.1) YRITE(0.6360) LABEL(l),ZC(l.MC) 

IF(IUNIT.NE. I) WRITE(6,3008) 

mIm(a,aseo) THIP 

6360 FORMAT(2H *,6X,'AlICLE OF POS. END CAP SURFACE WITH POS.', 

1' CYL. AXIS ','=',F8.3,179,1H*) 

CO TO 3000 

6400 CONTINUE 

READ(6, *) NEC(MC) 

IF(NEC(MC) . CT. UCDX) STOP 

NECX=NEC (MC) 

DO 6410 NC=i,HECX 

READ(6,*) AC(NC,MC),BC(NC,MC),ZC(NC,NC) 

AAO=AC(NC,HC) 

EBO=BC(NC,MC) 

ZCN=ZC(NC ,NC) 

AC(NC,MC)=AC(NC,MC)*WITS 

BC(NC,MC)=BC(NC,MC)*UNITS 

ZC(NC,NC)=ZC(aC,MC)*UNITS 

TCR(NC,HC)=O. 6*PI 

WilITE(6.3306) WC,NC.AAO,EBO,ZCN,AC(NC,MC),BC(NC,HC),ZC(NC,MC) 

6410 CONTINUE 

CO TO 3000 

CIPLSI. 

4060 CONTINUE 

C=-8 1C: COMMAllD 1.=11= 

Ctll 

CO$ INITIALIZE CYLINDER DATA. 

cia$ 

LCTL=.FALSE. 

hICX=O 

WRITE(6,4061) 

4061 FORMAT(2H * ,6X, ' CYLINDER DATA IS INITIALIZED. ' ,T7Q,iH*/ 

1.2H *,6X,' 110 CYLINDER IS PRESENTLY IN THE PROEM. ' 

3,179.1H*) 

CO TO 3000 

c==*=== 

997 ConTInm 

Can= Ell: COb%!AND 155==1 

cto 

Cl$$ END PROGRAM 

cata 

bXITE(6.3006) 

KiITE(0,3006) 

WRITE(6,3006) 

STOP 

C==*=== 

3800 CONTINUE 

C==s XQ: COMMAND PIT==== 

eta$ 

C$$$ EXECUTE PROGRAM 

call 

VRITE(6,3008) 

WRITE(0.3008) 

CI I1 

Cl l l 1. II1ITIALIZATION SECTION 

CIII 

YL=.2997926/FRQC 

YK=TPI/IL 

WRITE($, 3006) 

MPXR=NPX 
CIII GROUND PLAKE IS ANOTHZR PLATE IN SOLUTION. 

IF(LCRND) MPXR=k!PX+ 1 

IF(FPXR.CT.M?DX) WRITE(6,COl) MTXR 

IF(FPXR. CT . FPDX) STOP 

IF(.NOT.LGRND) CO TO 3801 

LPLA=.TRUE. 

NF9(MPXR) =4 

DO 3802 1=1,4 

DO 3802 N=1,3 

3802 XX(N, I ,MPXR)=XX(N, I ,MPDX) 

LSLAB (MPXR) =LSLAB (MPDX) 

DSLAB(1 ,MPXB)-DSLAB (1 ,MPDX) 

ERSLAB(1, Fl?XR)mEPSLAB (1 ,WDX) 

SESLAB(1 ,MPXR)=TESLAB(l .MPDX) 

URSLAB(1, FPXR) =URSLAB (1 .I.PDX) 

TMSLAB(1 ,MPXR) =TKSLAB (1, WDX) 

3801 COllTIllUE 

IF(MPXR.EQ.0) LPLA=.FALSE. 

IF(LPLA) CALL CEOM 

Clll MAKE PATTWN INFOWATIOIl MATCH WITH SHADOW CODE 

IF(IVPN.GT.0) THEN 

NVFT=NPV 

NVFP=NPlI 

ELSE 

NVFT=IPI 

NVFP=llPV 

EliDIF 

COLS=llVFT 

THEIl=TYS*RPD 

RESTH=TYI*RPD 

THET2=THETI+ (COLS-1) *RESTH 

ROIS=IVFP 

PHl=PZS*RPD 

RESPH=PZI*RPD 

PH2=PHI+(ROWS-l)*RESPH 

Clll MAKE SOLIRCE INFORMATIOll FOX THE FIRST ONE MATCH WITH 

CIII SHADOW CODE 

DO 3806 N=1.3 

3806 AtITEIII(I)=XSS(N. 1) 

RETURN 

END 
FUNCTION BABS 

This is function BABS. It is used to obtain complex absolute values without runtime 

numerical errors. 

- 

FUNCTION BABSCZ) 

CI I1 

Clll THIS ROUTINE IS USED TO GIVE COMPLEX ABSOLUTE VALVES. IT IS 

CIII USED RATHER THAN STANDARD ROUTINES TO AVOID EXECUTION 

CIll ERRORS. 

CI I I 

COMPLEX Z 

COWONILIMIT/SML, SMLR,SMLT ,BIG 

X=ABS(REAL(Z)) 

Y=ABS(AIMAG(Z)) 

IF(X.LT.GI.LT.AND.Y.LT.SML1) GO TO 10 

BABS=CABS(Z) 

RETURN 

10 BABS=SMLT 

RETURll 

EID 
BLOCK DATA 

0001 

0002 

0003 

0004 

0006 

oooe 

0007 

0008 

0009 

0010 

0011 

0012 

0013 

0014 

This is contant block data. 

c----------------------------------------------------------------------- 

BLOCK DATA 

Cl! I 

CI I I LOAD com!o!rLy USED DATA ItrTo cow011 AREA. 

CI I I 

COMPLEX CJ.CPI4 

CObtMON/PIS/PI, TPI ,DPR,RPD 

COkbIOtl/COMP/CJ,CPI4 

COMMOII/LINIT/SML,SMLR,SMLT,BIC 

DATA PI,TPI.DPR,RPD/3.14169266,6.28318631,67.39677PS, 

20.0174632926/ 

DATA CJ,CPI4/(0.. 1 .) , (.70710678,-.70710678)/ 

DATA SML,SMLR,SMLT.BIG/I.E-3,1.E-6,1.E-IO.I.E30/ 

END 
FUNCTION BTAN2 

This function is identical to the intrinsic fortran ATAN2 function, exsept it avoids 

runtime numerical errors. 

c----------------------------------------------------------------------- 

FUNCTION BTANl (T. X) 

CIII 

CIII THIS ROUTINE IS USED TO COMPUTE THE ARCTANCENT. IT I6 

Clll SIMILAR TO ATAlll EXCEPT IT AVOIDS THE RUN TIME ERRORS. 

CI I I 

COWlONIPlS/Pl ,TPI ,DPR,RPD 

CO~lON/LIMIT/Sk~,SMLR,SMLT,BIG 

IF(ABS(X).CT.SMLT) GO TO 60 

IF(ABS(Y) .CT.SMLT) GO TO 10 

BTANl=O. 

RETURN 

10 BTAN2=0.6*PI 

IF(1. LT.0. ) BTANl=-BTAN2 

RETURN 

60 BTAN2=ATANZ(Y,X) 

IIETURN 

EllD 
SUBROUTINE CAPINT 

This routine is used to determine if a ray strikes an elliptic cylinder endcap. - 

CII! 

CIII 

CII! 

.------------------------------------------------------------------- 

SUBROUTIIIE CAPIlT (XIS ,D ,DHIT .MD,LHIT ,MH) 

DOES RAY HIT ENDCAP? 

INCLUDE 'SHACOH.FOR1 

DII.E!ISIOII XIS(3) ,D(3) ,XT(3) ,XISC(3) ,DC(3) 

LOGICAL LIIIT.LDZBUC ,LIEST .L#ARN 

CObU40lI/TEST/LDEBUC, LTEST, LWARll 

COF'NOII/LIMIT/SML .SHLR,SMLT.BIC 

COI.MOIl/WAVE/WX, WL 

LHIT=.FALSE. 

DHIT=O . 

STEP THROUCH CYLINDERS 

DO 40 MCC=l,MCX 

IF(FM.LT.0 .AND. IABS(MH).NE.UCC) GO TO 40 

IF(MH.CT.0 .AND. bM.EQ.MCC) CO TO 40 

CALL CYLROT(D.DC,l,NCC) 

CALL CYLROT(XIS,XISC,2,bfCC) 

STEP THRU ENDCAPS 

lIECX=tlEC (NCC) 

DO 40 MII=l. IECX 

IF(MD. LT. 0 .AID. IABS(I.!D) . IIE.Mll) CO TO 40 

IF(bD.CT.0 .AND. ).!D.Eq.MN) CO TO 40 

A=AC(MN .MCC) 

B=BC(M!I , MCC) 

CNC=COS(TCR(MII .MCC)) 

smc=sr1l(rc~(~?~, ~fcc)) 

All=-XlSC(1) *ClIC* (XISC(3)-ZC(M,MCC))*SNC 

Dll=-CIIC*DC(l) +SNC*DC(3) 

DOES RAY HIT EllDCAP PLANE? 

IF(AN*DN.CE.O.) CO TO 40 

COhPUTE POINT XT, MFERE RAY HITS ElIDCAP PLANE 

DO 10 N=1.3 

XT(Il)=XISC(Il)-All*DC(N)/Dll 

RHOT=XT(l)*XT(1)*XT(2)*XT(2) 

2*(XT(3)-ZC(bl1l ,MCC))*(XT(3)-ZC(MN.MCC)) 

RHOT=SqRT(RHOT) 

AE*A/sI:c 

IS HIT POINT ON EIIDCAP? 

IF(RHOT.CT.AE .AND. RHOI.CT.9) GO TO 40 

IF(RHOT.LT.AE .AND. RHOT.LT.9) CO TO 20 

VE=BTAN2(A*XT(2) .B*XT(l)) 

cvE=cos (VE) 

SVE=SIN (VE) 

RHO=SQRT(AE*AE*CVE*CE+B*B*S\IE*S\IE) 

IF(RHOT.CT.RH0) CO TO 40 

COllTIllUE 

CALCULATE DHT, THE DISTAllCE FROM SOURCE TO HIT POINT 

DHT=O. 

DO 30 1=1,3 

DHT=DHT+(XT(N)-XISC(N))*(XT(tt)-XISC(N)) 

DHT=SQRT(DHT)+SULRWL 

IF(LH1T .AND. (DHT.CT.DHIT)) CO TO 40 

LHIT=.TRUE. 

DHIT=DHT 

IF(KD.LE.0) GO TO 40 
CALL CTLROI(XIB, XI, -2 ,NCC) 

40 CONTINUE 

IF(LTE3T) 'THEN 

lfR1IE(0,000) 

900 FOILMAT( / , ' TESTING CAPINI SUBROUTINE') 

VRIIE(6.*) XIS 

IRIIE(O.*) D 

WRITE(6,*) DHII.MD,LHIT,MH 

ENDIF 

RENRN 

END 
SUBROUTINE CY LINT 

This routine is used to determine if n ray strikes an elliptic cylinder. 

CIII 

CI I I 

CI I I 

,------------------------------------------------------------ 

SUBROUTINE CYLINT(XS,D,DHIT,LHIT,LBDF,MH) 

DOES RAY HIT CYLINDER? 

INCLUDE 'SHACOM. FOR' 

DICENSIOti D(3) ,XS(3) ,VTD(2) ,BTD(4) ,CTC(2) .DC(3) ,XSC(3) 

LOGICAL LHII,LBDF,LPLA.LCYL,LDEBUC,LTEST.LHT,LWARN 

COh(MO!l/LPLCY ILPLA , LCYL 

COF$ION/TEST/LDEBUC,LTEST.LWARN 

CObfiIOII/LINIT/SI.IL,SMLR,SMLT ,BIG 

corfiioa/wrvE/m, KL 

LHIT=.FALSE. 

DHIT=O . IF(. tiOT.LCYL) GO TO 100 

STEP IHRU CYLINDETS 

DO 60 MCC=l,MCX 

IF(MH.LI.0 .AIID. IABS(E.!H).NE.MCC) GO TO 60 

IF(MH.CT.0 .AND. MH.Eq.MCC) GO TO 60 

CALL CYLROT(XS,XSC.~,MCC) 

CALL CYLROI (D .DC. 1 ,KC) 

DOES RAY HIT CYLINDER SURFACE SECTION? 

PHSR=BTAll2(DC(2) .DC(1) ) 

CPS=COS(PHSR) 

SPS=SIIl (PHSR) 

RHOS=SqRI(XSC(l) *XSC(l)+XSC(2)*XSC(2)) 

STEP THRU CYLINDER SECTIONS 

NECX=NEC(MCC)-1 

DO 40 NC=l,NECX 

NCP=llC+ 1 

A=AC(nC, MCC) 

B=BC(NC .bICC) 

PARIbETER FOR ELLIPTIC CYLIllSER 

CTC(1)-COS(TCR(!lC,MCC))/SIN(TCR(NC,MCC)) 

CTC(Z)=COs(TCR(HCP,MCC))/SIn(TCR(llCP,MCC)) 

PARAFETERS FOR CONE FRUSTUFIS SECTION 

ZZC=ZC(NCP,MCC)-ZC(NC,MCC) 

IF(ABS(ZZC).LT.SML*WL) GO TO 40 

TllJ=(AC(llCP,MCC)-AC(NC,MCC))/ZZC 

FL=TNJ* (xsc(3)-zc(ac.~cc))/r.1. 

RADII AT SOURCE LOCATION 

AL=A*FL 

BL=B*FL 

IS SOURCE IliSIDE OF INFINITE CYLINDER? 

IF(RHOS.CT.AL .AND. RHOS.QT.BL) GO TO 6 

IF(RHOS.LT.AL .AND. RHOS.LT.BL) GO TO 30 

VE=BTAN2(AL*XSC(2) ,BL*XSC(l)) 

CvE=COS(vE) 

SVE=SIlI(VE) 

RHOE=S~RT(AL*AL*C~'E*CVE+BL*BL*SVE*S~) 

IF(RHOS.CT.RHOE) GO TO 6 

COllTIllUE 

IS SOURCE INSIDE OF FIllITE CYLIllDER SECTION? 

IF(XSC(~).CT.(ZC(~IC,MCC)+XSC(I)*CTC(I))) GO TO 40 

IF(XSC(3).LT.(ZC(llCP,MCC)+XSC(l)*CTC(2)) GO TO 40 

LHIT=.TRUE. 

GO TO 100 
6 CONTINUE 

Clll FIND COEFFICIENT OF EQUATION TO DETERMINE HIT POINT 

AA=A*A 

BB=B*B 

Clll PARTS FOR ALL ELLIPTIC CROSS SECTION TWES 

CA=DC(i) *DC(l)/AA+DC(l) *DC(l)/BB 

CB=XSC(l)*DC(l)/AA*XSC(l)*DC(l)/BB 

cc=xsc(i) *x~c(~)/AA.x~c(~) *xsc(a)/~~ 

CIII PARTS FOR CONE FRUSTUM SECTIONS 

CA=CA-TNJ*TNJ*DC(3)*DC(3)/AA 

CB=CB-TNJ*FL*DC(3)/A 

CC=CC-FL*FL 

Clll IS QUADRATIC SOLVABLE IN REAL SPACE? 

Clll IF NOT, NO HIT POINT ON CYLINDER SURFACE SECTION 

CT=CB*CB-CA*CC 

IF(CT.LE.0.) CO TO 40 

CIll DETERNINE TWO POSSIBLE HIT DISTANCES 

SCT=SQRT (CT) 

NIP=(-CB+SCT) /CA 

RHM= (-CB-SCT) /CA 

Clll NEAREST POSITIVE ONE IS TRUE HIT POINT 

IF[RHP .LT .O. .AND.RHM.LT.O.) THEN 

GO TO 40 

ELSE 

IF(RHP.LT .O. . OR.RHM.LT.0. ) THEN 

RH=AMAX1 (RHP .FUN) 

ELSE 

RH=AMIlII (RHP,RHM) 

ENDIF 

EtIDIF 

XPM=RH*DC(l)*XSC(l) 

ZPM=RH*DC(3) 'XSC(3) 

C111 IS HIT POINT ON FINITE CYLINDER SECTION? 

IF(ZPbl.GT.ZC(NC,ncC)+XPM*CTC(l) .OR. 

lZPM.LT.ZC(NCP,MCC)*XPM*CTC(2)) CO TO 40 

Clll DISTANCE FROM SOWCE TO HIT 

DHT=RH+SMLR*WL 

Clll CHECK FOR NEAREST HIT POINT FOR DIFFERENT SECTIONS 

IF(LHI1 .AND. (DHT.CT.DHIT)) GO TO 40 

LHIT=. TRUE. 

DHIT=DHT 

40 CONTINUE 

Clll CHECK TO SEE IF RAY HITS ENDCAPS 

CALL CAPIllT(XS .D.DHT ,O.LHT , -MCC) 

IF(.NOT.LHT) 00 TO 60 

IF(LH1T .AND. (DHT.CT.DHIT)) 00 TO 60 

LHIT= . TRUE. 

DHITsDHT 

60 CONTINUE 

100 IF(L1EST) THEN 

WRITE(8,QOO) 

900 FOXI.IAT(/.' TESTING CYLINT SUBROUTINE') 

WRITE(6,*) XS 

rnITE(6,*) D 

YmITE(6,*) DHIT.LHIT,LBDF.I.M 

ENDIF 

RETURN 

END 
SUBROUTINE CYLROT 

This routine performs vector transformations between the various cylinder coordinate 

systems and the reference coordinate system. 

c----------------------------------------------------------------------- 

SUBROUTINE CYLROT(XREF,XCYL,A,MCL) 

C$$$ 

C$$$ ROTATES AND OR TRANSLATES VECTORS IN OR OUT OF THE 

C$$$ CYLINDER COORDINATE SYSTEMS 

C$$S 

INCLUDE 'SHACOM.FOR' 

DIMEltSION XREF(3) .XCYL(3) 

IF(N.LT.0) 00 TO 100 

XC=O . DO 60 111.3 

XCYL(I)=O. 

DO 60 Ja1.3 

IF(N.EQ.2) XC=XCL(J,MCL) 

XCYL(I)=%CYL(I) +VCL(I , J ,MCL)* (XREF(J)-XC) 

60 CONTINUE 

RETURN 

100 DO 200 I=1.3 

XREF(I)=O. 

DO 160 J=1,3 

160 XREF(I)=XREF(I)+VCL(J, I,MCL)*XCYL(J) 

IF(tI.EQ.-2) XREF(I)=%REF(I)+XCL(I,MCL) 

200 CONTINUE 

RETURN 

END 
SUBROUTINE DOCYLS 

This procedure determines which mode of mapping has been selected by the user and 

calls the appropriate cylinder processing routines. 

c----------------------------------------------------------------------- 

SUBROUTIIIE DOCTLS 

INCLUDE 'SHACOM.FOR' 

CI I1 

Clll This aubroutinm proc*mmoa a11 tha cylindmra ona at a timm. 

Clll Do any mpmcial cylindmra hat. 

CIII 

IF ( FILCNM .01. 0 ) THEN 

DO 1 MC=1, MCX 

IF ( MC .NE. FILCNM ) CALL DOCYL( NC, FILCHR ) 

1 CONTINUE 

CALL DOCYL( FILCNM, FILCHC ) 

CI I I 

Clll Pill with a diffmrant charactor for each cylindmr. 

CI 1 I 

ELSEIF ( FILCNM .LT. 0 ) TKEI 

DO 2 MC=I, MCX 

CALL DOCYL( NC, CHAR( MC*ICHAR( '0' ) ) ) 

1 CONTINUE 

CI I I 

CIII Fill with the main background fill charactmr. 

CI I! 

ELSE 

DO 3 MC=i, MCX 

CALL DOCYL( MC, FILCHR ) 

3 CONTIllUE 

ENDIF 

RETURN 

END 
SUBROUTINE DOCYL 

This routine projects the shadow boundry of a single cylinder onto the far-zone sphere 

and fills the area of the cylinder with the FILL argument. - 

c----------------------------------------------------------------------- 

SUBROUTINE DOCTL( IC, FILL ) 

INCLUDE 'SHACOM.FOR1 

CI I1 

Clll Thir rubroutino procasrar a ringla cylindmr. 

C11I 

CHARACTER FILL 

INTEGER 

+ J, K, IC 

CI Loop control variables. 

+ INT, 

C! Truncate to integer. 

i THETAI, PHI1 

REAL 

t THETAR, PHIR, 

CI Theta & phi in radians. 

i T, 

C1 Ths parametric loop paramater. 

+ MAGbLE, 

CI Length of a psuado-side 

+ XPY, 

C1 Scratch variable. 

+ DOT, LSTDOT, 

C1 Dot product variables 

+ BTAN2. SQRT, ABS, 

C! Miscellaneous fnnctionr 

+ XYZ( 3 1, 

CI tsnporary vector 

l XPQ(3). 

CI Source to edge in ref coord~ 

l XPC( 3 ). 

Ct Source to mdgm in pat coordm i RIM( 3 1, 

CI Point along cap in cyl coords 

+ RIMI( 3 ) , 

C1 Usa for dotnin points 

+ BIM2( 3 1, ANCYL( 3 1. 

C1 Antenna location in cylinder coords 

i DOTMIlI( 2, 10 ) 

CI The two angles where dot is minimum 

LOGICAL 

i FNDONE 

C! Found one of the zero dots 

C! 

CI!I Loop through sndcapr, and incrementally on edges. 

C1!1 Transform the antenna to cyl coorde (include a tranrlation). 

CI I I 

CALL CYLROT( AIITENN. ANCYL, *2, IC ) 

CI! 1 

C!!I Do the endcaps one at a time. 

CIII 

DO 200 J=1. NECCIC) 

CI !I 

CII! Loop around the endcap and ramember where the dot products are zaro 

C11I between the vector looking at the point and the radial vector on 
Clll the endcap to the point. The cryptic parumterm on the loop ray: 

Clll .Loop iron zero to 2*PI in one-degree rtrpr.' 

CI I1 

DO 300 TrO.0, TPI+(TPI/380.0), (TPIf38O.O) 

CI I I 

Clll Calculate tha dot product and rmanber the two mallert oner. 

CI 1 I 

RIM( 1 ) = COS(T) AC(J.1C) 

RIM( 2 ) = SIN(T) * BC(J,IC) 

RIM( 3 ) = ZC(J, IC) 

DOT = RIM(1) * ( RIM(1) - ANCYL(1) ) 

+ + RIM(2) * ( RIM(2) - ANCYL(1) ) 

CI I I 

CI Il If (the last dot product) * (thir dot product) < 0, then that ir 

CIll where our dot rign goer through zero. 

CIII 

IF ( T .EQ. 0.0 ) THEN 

LSTDOT = DOT 

FNDONE = .FALSE. 

ENDIF 

IF ( SION(l.O,DOT) * SICII(1.0,LSTDOT) .LT. 0.0 ) THEN 

IF( .HOT. FIIDONE ) THEN 

DOTMIN( 1, J ) T 

FNDOltE = .TRUE. 

ELSE 

DOWIN( 2, J ) = T 

EWDIF 

ENDIF 

LSTDOT = DOT 

C! I1 

CIII Calculate theta k phi as vs go around the rim. 

Clll Irmaforn the rim point i n t o r e f . coord,rystrm. 

Clll Find vector iron source to rim. 

Cl I1 

CALL CYLROT( XYZ, RIM, -1, IC ) 

CI I I 

CI I1 Convert iron the reference coordinate ayrtrm to the plttern 

Clll coordinate ayatcn. 

CI I I 

XPQ(1) = XYZ(1) - ABTEYN(1) 

XPq(1) = XYZ(2) - ANTElIB(1) 

XPQ(3) = XYZ(3) - ANTENll(3) 

XPY = S~RT( XPC(I)+XPC(I) + xPc(a)+xPc(a) ) 

CllI 

Clll Calculate angler ropreaenting border of rim and do branch teat 

Clll on the phi angle. 

CI I1 

THETAR = DTAN2( XPY, XPC(3) ) 

PHIR = BTAIIl( XPC(2). XPC(1) ) 

IF ( PHIR .LT. PHI-O.S*RESPH ) PIfIR = fPI PHIR 

CIII 

ClII Define pixel location. 

CIII 

THETA1 = INT( (THETAR - THETI) / RESTH 0.6 1 + 1 

PHI1 = INT( (PHIR - PHI) / RESPH + 0.6 ) 1 

C1 I1 

Clll Put the character into the output buffer at tha proper poaition. 

Clll Teat if indicer fall within rpecified window. 

CI I I 
IF ( (TXETAI .GE. 1) .AND. (THETA1 .LE. COLS) ) THEN 

IF ( (PHII .CE. 1) .AND. (PHII .LE. ROWS) ) THEN 

OUTBUF( THETAI. PHII ) = CHAR(7) 

ENDIF 

ENDIF 

CI I I 

Clll Reduplicate a wrappad-around character. 

CI I I 

IF( (PHII .EQ. 1) .AI:D. ABS(PH9-PHI-TPI) .LE. RESPH) THEN 

OUTDUF( THETAI, ROYS ) = CHAR(7) 

ENDIF 

300 CONTIIUE 

200 CONTINUE 

C111 

CI11 Before rastarizing, connect the *dotninrn. 

CIll A rneakey trick is pulled hare. Inrtoad of tranrfodng every 

CIll incrmant of the dotnin pointr, only the two end points are 

CII! transformed, then theta k phi are calculated fcr each incrcaent. 

CI!! This is valid bacause the line which connectr the two pointr on 

CIII the rins of the cylinderr are rtraigt lines in both RCS and cyl 

CIII coord systems. Note that this gizmo asrumwe that you ar. never 

CI 11 inside of a cylinder, or your dotcins(K,) probably ~et crossad 

CIII rerulting in an inside-oat or bowtie-rhaped cylinder. 

CI I I 

DO 400 K=l. 2 

DO 600 J-1, NEC(1C)-1 

RIB!( 1 ) = COS( DOThtIN(K,J) ) * AC(J,IC) 

RIM( 2 ) = SIN( DOTMIN(K,J) ) * BC(J,IC) 

RIM( 3 ) = ZC(J,IC) 

CALL CYLROT( RIMI, RIM, -1, IC ) 

RIM( 1 ) = COS( DDTM1!4(K,J+I) ) AC(J+l,IC) 

RIM( 2 ) = SIN( DOTMI!I(K,J+l) ) * BC(J+l.IC) 

RIM( 3 ) = ZC(J+I, IC) 

CALL CYLROT( RIM2, RIM, -2, IC ) 

CI 11 

C!11 This MACPE is analogour to the ona in DOPLA except it 

C111 works with psudeo-sides, no the narce in ronswhat aisl.ading. 

C1 I I 

MACbE = SQRT( 

+ ( RIM2(1) - RIWl(1) )**2 + 

+ ( RI).12(2) - RIMl(2) )**2 

+ ( RIB!2(3) - RIMl(3) )**2 

T = 0.0 

60 IF ( T .GI. 1.0 ) COT0 BOO 

CI!! 

CII! 

Clll Thaea functions conpute the theta/phi associated with a ~ivrn point 

C! I I along a cylinder peusdo-edge as a function of T (See DOPLA.) 

CIII The variables XYZ and RIM ara re-urad for multiple purporer here. 

CII! 

CII! Find vector froa source to rim. 

CIII Convert from the reference coordinate systcn to thr pattern 

Clll coordinate system 

C! ! I 

XPQ(l) = ( RIMZ(1)-RIHl(1) )*T RIMl(1)-ANTEIIII(1) 

XPQ(2) = ( RIB12(2)-RIMl(2) )*I + RIMl(2)-ANTENII(2) 

XPQ(3) = ( RIC!2(3)-RIMl(3) )*I 4 RIMl(3)-AHTElIN(3) 

XPC(1) = XPQ(l)*VPC(I,l) + XPQ(2)*VPC(l,Z) XPQ(3)*VPC(l.3) 

XPC(2) = XPQ(l)*VPC(2,1) + XPQ(2)*WC(2.2) + XPQ(3)*VPC(2,3) 

XPC(3) = XPQ(l)*VPC(3,1) * XPQ(2)*VPC(3,2) XPQ(3)*VPC(3,3) 

XPY = SQRT(XPC(l)*XPC(l) XPC(2)*XPC(2)) 

C! 1 ! 

C!!t Define the angles representing the projection of the curved rider 
Clll and do a branch cut tort on phi. 

CI I I 

THETAR = BTAN2( XPY, IPC(3) ) 

PHIR - BTAN2( XPC(2). IPC(1) ) 

IF ( PAIR .LT. PHI-0.6*BESPH ) PHIR = TPI PHIR 

CI11 

CIII Define pixel location and pat character in appropriate .pot. 

CI I1 

THETA1 = INT( (THETAR - ZHETl) / RESTH + 0.6 ) + 1 

PHII = INT( (PHIR - PHI) I RESPH + 0.6 ) + 1 

CIII 

Clll Check if angler fall vithin rindov. 

CIII 

IF ( (THETAI .GE. 1) .AND. (THETAI .LE. COLS) ) TEN 

IF ( (PHII .GE. 1) .AND. (PHII .LE. BOWS) ) MEN 

OUTBUF( THETAI, PHII ) = CHAR(7) 

&NDIF 

ENDIF 

Cl I I 

Clll Reduplicate a vrapprd-around character. 

CI I I 

IF( (PHII .EQ. 1) .AND. ABS(PH2-PHI-TPI) .LE. BESPH) THEN 

OUTBUF( RIETAI, BOYS ) = CHAR(7) 

ENDIF 

T = I + MIN( 0.99, (XPY*ALPHIMACFlE + 1.E-7) ) 

GOT0 60 

600 CONTINUE 

600 CONTINUE 

400 CONTINUE 

CI 11 

CII! How do an krsa fill on the object jurt outlined. 

Clll Tell SCAN that this ir a CYLINDER by ueing a '1". 

CI I I 

DO 700 PHII = 1. ROWS 

CALL SCAN( IC, OUTBUF(l,PHII), PHII, FILL, 2 ) 

700 COUTINUE 

RETURN 

END 
SUBROUTINE DOPLAS 

This routine determines which mapping options the user has selected .and calls the 

appropriate plate processing routines. - 

0001 c----------------------------------------------------------------------- 

0001 SVBROUIINE DOPLAS 

0003 IlICLVDE 'SHACOM. FOB' 

0169 CIII 

0170 Clll Thir mubroutinm processms each plate on* at a tine. Ibe 

0171 Clll highlighting logic is contained here. 

0171 Cl l l 

0173 Clll Do thm platam on* at a tine, then do the plat. that was rnpposrd to 

0174 ClII br highlighted last. 

0176 Cl ! ! 

0176 IF ( FILPNN .CT. 0 ) THEN 

0177 DO 1 biP = 1, KPX 

0178 IF ( K? .NE. FILPIIM ) CALL DOPLA( MP, FILCHR ) 

0179 1 CONTIliUE 

0180 CALL DOPLA( FILPNM, FILCHP ) 

0181 Clll 

0182 Clll Fill with a different character for each plats. 

0183 CIII 

0184 ELSEIF ( F1LPI:M .LT. 0 ) THEN 

0186 DO 1 CP = 1, bPX 

0188 CALL DOPLA( hP, CHAR( hP+ICHAR( '0' ) ) ) 

0187 1 COtITIliUE 

0188 C1Il 

0189 Clll Fill everything with the =in background charactrr. 

0190 Clll 

0191 ELSE 

0191 DO 3 k[P = 1, MPX 

0193 CALL DOPLA( MP, FILCIUt ) 

0194 3 COllT IllUE 

0196 EllDIF 

0198 

0107 RETURII 

0198 EllD 
SUBROUTINE DOPLA 

This routine computes the shadow map for a single cylinder by projecting its boundries 

onto the far-zone sphere and then filling in its area in the map array. - 

c----------------------------------------------------------------------- 

SUBROUTINE DOPLA( IP, FILL ) 

INCLUDE 'SHACON.FOR' 

CHARACTER FILL 

INTEGER 

IP, INT, 

CI Truncata to the naarart intagar. 

+ THETAI, PHI1 

CI Local indiciar into char array. 

REAL 

t T, 

CI Parametric incrumant parmetar 

+ THETAR, PHIR. 

ClThata k phi in radiana. 

MACME, 

CI Length of aide ME. 

+ XPY, 

CI taaporary variabla 

XPQ(31, 

CI Source to adga in rof coordr 

XPC(3). 

CI Source to edge in pat coordr 

+ BTANl, SqRT, ABS 

C1 Miacellansoua functions. 

C11I 

Clll Loop through incrmantaly along adgas. 

CI 11 

DO 200 ME=l, t.lEP( IP ) 

NEXTME = MOD( ME, MZP(IP) ) + 1 

MACNE = WAC( KE. IP ) 

1 = 0.0 

60 IF ( T .GI. 1.0 COT0 100 

CIII 

CIll Thera functions computa the theta/phi aaaociatmd with a givan 

Clll point along an adga batworn two cornera ME and NEXTblE an a 

CIII function of 1. T varimm from 0 to 1 and ia adjurtad to kaap 

Clll within a rafa and afficiant axcurmion at all tinar. 

CIII 

Clll Convert from the rofarmnca coordinate ayrtrm to thm pattern 

Clll coordinatm ayrtcrn 

CI I! 

~PQ~~~=~~~~~.NEXT~E.IP~-XX~I.KE.IP~~~T+XX~I.ME.IP~-AITENN~I~ 

XPQ(2)=(XX(2,NEXTMEI 1P)-XX(2,11lEI IP))*T*XX(2.MEI 1P)-ANTENN(2) 

XPQ(3)=(XX(3,NEXTklE,IP)-XX(3.).lE. IP))*T+XX(3,ME, 1P)-ANTENN(3) 
XPY = SqRT( XPC(l)*XPC(l) + XPC(2)*XPC(2) ) 

CI I I 

CIII Define the angles representing the projection of the curved rider 

C111 and do a branch cut test on phi. 

Cl l I 

TETAR = BThlI2( XPY, XPC(3) ) 

PHIR = BTANZ( XPC(2), XPC(1) ) 

IF ( PHIR .LT. PHI-0.6*RESPH ) PHIR = iPI + PHIR 

CI 1 I 

CIII Defina pixel location and put the a character in the appropriate 

Cl l l spot. 

CI ! I 

THETAI = IIT( (THETAR - THETI) / RESTH + 0.6 ) + 1 

PHII = INT( (PHIR - PCI) / FiESPH + 0.6 ) + 1 

CIII 

Clll Check if anglee fall within window. 

CI I1 

IF ( (THETAI .CE. 1) .AND. (THETAI .LE. COLS) ) TEEN 

IF ( (PHII .CE. 1) .AND. (PHII .I.€. ROWS) ) THEN 

OUTBUF( THETAI, PHII ) CHAR(7) 

ENDIF 

WDIF 

CIll 

Clll Reduplicate a wrapped-around character. 

CII! 

IF( (PHII .Eq. 1) .AND. ABS(PH2-PHI-TPI) .LE. RESPH) THEN 

OUTBUF( THETAI. ROWS ) = CIIAR(7) 

EHDIF 

CI!t 

Clll Put an upper bound on the increment for the case when the line 

CIII regmant is very short or the distance to the repent ie great. 

Clll In the degenerate cane (on the 2-exis) prevent a potential infinitm 

C!!! loop by putting a lower bound on delta-t (is by always adding at 

CII! least a very am11 number to 1.) 

CI!! 

T = T + MIN( 0 .Q?, (XPY+ALPII/MAGMF. + 1 .E-7) ) 

COT0 60 

100 COlITI1IUE 

200 COllTIllUE 

C! ! ! 

C!!! Now do an area fill on the object just outlined. 

C!tl Tell 6CAN that this ia a plate by nring a "1". 

CI I I 

DO 300 PHII - 1, ROWS 

CALL SCAN( IP, OUTBUF(l,PBII), PHII. FILL, 1 

300 COllTINUE 

RETURlI 

EIID 
SUBROUTINE GEOM 

This routine computes necessary geometrical information needed by othgr routines. It 

is called before the main command loop. 

CI I I 

CI 1 I 

CI I I 

CIII 

CIII 

667 

CIII 

CI I I 

CI I I 

CIII 

.------------------------------------------------------------------- 

SUBROUTINE CEOM 

THIS ROUTINE CObPUTES ALL THE GEOMETRY ASSOCIATED 

WITH FIXED PLATE STRUCIURE,SUCH AS EDCE UNIT VECTORS. 

PLATE NORMALS,WADOWED PLATES,ETC. 

INCLUDE 'SHACOU.FOR' 

DIMENSION IIIIT(tIEX) ,XII(3) ,XIN(3) ,VI(3) ,XC(3) ,XS1(3) ,XSII(3) 

DIMENSION XOB(~) ,XDC(3) ,VTCP(2) ,BICP(4) ,vTCN(P) .BTCN(4) .DS(3) 

DIMENSION W0(3), WN(3) ,vvB(~) ,WH(3) ,xBT(~) ,PVIRN1(3) 

LOCICAL LSURF.LNPL,LTRNl 

LOGICAL LSHD,LSTD,LSTS.LCTD,LHCT.LHIT 

LOGICAL LCRND,LIIID,LDEBUC,LTEST.LYABlI 

CO~ON/TEST/LDEBUC,LTEST,LWARN 

COb~lOW/LIMIT/SML,S1.(LR,SMLT,BIC 

CObPIOlI/WAVE/WX, WL 

COMMON/LSkIDP/LSTS, LSTD(NEX) 

COMMOll/CROUllD/LGR~lD, NPXR 

IF(LDEDUG) WRITE(6.667) 

FORNAT (1, ' DEDUCCINC CEOM SUBROUTINE' ) 

DETDMIIIAIOII OF V,VN,AND VP UNIT VECTORS FOR EDGE-FIXED 

COOXDItlATE STSTPI 

STEP THRU PLATES 

DO 100 W=l,NPXR 

mx=w (FP) 

STEP THRU ED$= 

DO 16 ME=l,bEX 

Mt.E=ME+ 1 

IF(bbE.CT.FEX) MME=I 

w.0. 

CALCULATE EDGE UNIT VECTOR V AND EDGE LENGTH WAC 

DO 10 N=1,3 

V(lI,FE,bP)=XX(II,~E,NP)-XX(N,ME,NP) 

W=VM+V(N,ME,FP)*V(I,FE,NP) 

WAC (ME,MP) =S~RT(VM) 

DO 11 N=1,3 

V(N ,KE,W)=V(N ,ME,MT)/WAC(KF.,KP) 

CONTINUE 

IF(.NOT.LDEBUC) GO TO 991 

DO 992 ME=l.KX 

WRITE(6.*) (V(N,ME,MP) ,A=1.3) 

CONTINUE 

CONTItIUE 

CALCULATE PLATE UNIT NORMAL VI 

VN(l,lrP)=O. 

VN(2,FP)=O. 

VN(3,MP)=O. 

DO 22 CE=l.bEX 

W=E(E+ I 

IF(kN.CT.MEX) MV.1 

V~~(~,~)-VII(~,W)+V(~,~.E,~P)*V(~,F~,~IP)-V(~.MV,NP)*V(~,ME.NP) 

VII(~,~)-V~~(~,W)+V(~,~(E,~P)*V(~,MV,~PIP)-V(~.MV.~)*V(~,ME.~~) 

VN(~,NP)=V~I(~,NP)+V(I.E.NP)*V(~.MV.~)-V(I.~.~~)*V(~.~.~) 

COllTINUE 

VNM=O . 
DO 10 N=1,3 

20 VNM=VNM+VII(N .MP) *VN(N ,w) 

VNU=SqXT(VNM) 

DO 11 N=1,3 

11 VN(N,W)=VN(fi,FP)/Vllbl 

IF(LDGOUC) WXITE(8.*) (VN(N,bP).N=1,3) 

CI11 INSURE THAT ALL PLATES AR% FLAT. OTHERWISE ABORT1 

CIII TAKE DOT PRODUCT OF PLATE NORMAL AND EACH EDCE UNIT VECTOR 

DD 110 hE=l ,EX 

DOT=VI(I ,MP)*V(l,blE,MP)+VN(l ,MP) *V(~.ME,W)+VN(~,W)*V(~,).(E,W) 

ADOT=ABS(DOT) 

IF(ADOT.LT.O.~~) 00 TO 120 

m=t.!z+ 1 

IF(t.MEE.CT.MEX) kEE=l 

k'RITE(B.121) MP,MEE,ADOT 

111 FORI.IAT(' PLATE I ',12, ' I6 NOT FLAT1 CORNER I '.Il,' HAS ', 

3'Pi\OEiLDl.'/' WARP= ',F7.3,' PROGRAM ABORT6 IF THE WARP' 

3' I6 GREATER THAN 0.03 +*****'I 

IF(ADOT.OT.O.03) 6TOP 

120 COIITINUE 

Clll CALCULATE UNIT BINORMAL VP WHICH IS IN PLATE PLANE 

CI I1 AND PERPEllDICULAR TO PLATE EDCE 

C111 TAKE CROSS PRODUCT OF PLATE NORMAL AND EDCE VECTOR 

DO 30 bE=l.MZX 

W(I,hE,hP)=V11(2,MP)*V(3,~,b3)-VB(3,~P)*V(l,NE,MP) 

~(~.~~,FP)=V~~(~.~P)*V(~.ME,MP)-V~I(~,W)*V(~,ME,W) 

30 W(~,~(E,CP)=V~I(~,~P)*V(~,FE.~P)-VN(~,W)*V(~,ME,W) 

IF(.lIOT.LDEBUC) GO TO 983 

DO 894 I.E=l.bEX 

994 WRITE(B.*) (VP(H ,ME,b!P) ,N=1,3) 

993 CONTIIIUE 

100 COHTIlIUE 

RETURll 

END 
SUBROUTINE INITGF 

This routine is used to initialize graphics each time an output is desired. Here, it zeroes 

out the previous array information and recalculates parameters based on the user-specified 

desired resolution. 

0001 c----------------------------------------------------------------------- 

0002 SUBROUTINE INITCF 

0003 INCLUDE 'SHACOM.FOR' 

0169 Clll 

0170 Clll Thir oubroutina initializar rona graphics rtuff. 

0171 CII! Its function ie to initializa thing* from on* plot to tho next, 

0172 Clll but within the context of a ringla rarrion. 

0173 Cl l l 

0174 IHTECER 

0176 + I, J. IN1 

0176 CIll 

0177 Clll Clear tha charactor buffar. 

0178 Clll 

0179 DO 10 J=l, UAXROY 

0180 DO 10 Inl. MAXCOL 

0181 10 OUTBUF( I, J ) = ' ' 

0182 Cll l 

0183 C!II Tha number of rows k colms needed for internal raprarantation is 

0184 Cl l l calculatad fros the usar-ealected (or dafaulted) angular rangar of 

0186 CI 1 I intrrart coxbinsd with the dasired resolution in radslpixrl 

0180 C1 I1 

0187 ROWS = INT( (pH2 - PHI) / RESPH 0.6 ) 1 

0188 COLS = INT( (THE12 - THETI) / RESTH 0.6 ) 1 

Ol8Q Cl l l 

0190 Clll Calculata son;* paranatarr nemdad by the dynamic T incrcnent 

0191 CIII algorithms. The caximun allowabls angular axcurmion is the 

0192 CIll smaller of the nunber of radianr in a ringla pixel of either that. 

0193 CIII orphi. 

0194 CIII 

0196 ALPH = MIN( RESTH. RESPH ) 

0106 Clll 

0197 RETURN 

0198 END 
SUBROUTINE PLAINT 

This routines determines if a given ray strikes a plate. 

F 

c----------------------------------------------------------------------- 

SUBROUTINE PLAIIIT(XIS,D.DHIT,hM,LHIT) 

CI 1 I 

Cl!l DOES RLY HIT PLATE.IF WI=0 ALL PLATES ARE CECKED. 

C1 I! IF FM=-FP TIlEll ONLY W CHECKED AND SOURCE POSIIIOII 

C!!! MOVED TO HIT POSITION IF RAY HITS FP. 

Cl l l IF btH=:P. TEN ALL PLATES OTER TMIII K7 ARE CHECKED. 

C! 1 I 

INCLUDE 'SHACOY.FOB' 

DIbEIE1ISIOII XIS(3) .D(3) .XT(3) .PVTX!l(3) 

LOGICAL LHIT,LPLA.LCYL.LSTS,LSTD,LTRN 

LOGICAL LCRND,LDEBUG,LTEST,L\?ARlI 

COh2.\OH/TEST/LDZBUC, LTEST, LVARlI 

CObC4Oll/LIMIT/SPIL ,SMLR. SMLT ,BIG 

COb'JIOHILPLCYILPLA.LGYL 

CObMON/HITPLI/bIPH 

CObPlO11/CROUtlD/LCRlID ,FPXR 

LHIT=.FALSE. 

DHIT=O. 

IF( .NOT. LPLA) RETURli 

Clll STEP THRU PLATES 

DO 60 PPP=l.EPXR 

MP=CPP 

IF(blP.Eq.bM) GO TO 60 

IF(MH.LT.0) hP=IABS(blH) 

CI! 1 IF TOTAL SHLDOY!IIC ALCORITEN IS BEIllG USED, IlAS PLATE MP 

Clll SHADO%ED EVERY RAY TESTED? 

c%%%%% IF(LSTS.AND. .11OT.LSID(bP)) CO TO 60 

MEX=W (FP) 

AN=O. 

DO 6 Nx1.3 

6 AII=Al1+(XIS(II)-XX(II.l.E(P))*VN(N,CP) 

DII=D(I)*VI~(~,~.IP)+D(~)*V~I(~,FP)+D(~)*VN(~,W) 

CIll DOES RAY PASS THRU PLATE PLANE? 

IF(AIl*DN.GE.O.) GO TO 60 

DO 10 11=1.3 

C! I1 CALCULATE POINT MEP.E RAY IIITERSECTS PLATE PLANE 

10 XT(l1)-XIS(N)-AN*D(N)/DN 

IF(CP.Eq .MPXR. AND. LGRBD) GO TO 11 

DBT=O. 

CII! IS HIT POINT ON PLATE? 

DO 30 ME=l,MEX 

hBE=t.E+ 1 

IF(F%E.CT.hEX) WE=l 

RD=O. 

DO 20 11=1,3 

20 RD=RD+(XX(II,bE,~P)-XT(II))*(XX(tI.b~E.bP)-XT(l1)) 

CP=VII(~,~P)*((XX(~,~E,FP)-XT(~))*(XX(~,CU.E,E.P)-XT(~)) 

~-(xx(~.~E,FP)-xT(~))*(XX(~.~OE.W)-XT(~))) 

CP=CP+VII(~,~P)+((XX(~,FE,E.P)-XT(~))*(XX(I,FBE,~+P)-XT(I)) 

~-(XX(~,CIE,I~IP)-XT(I))*(XX(~,FI~~E,FP)-XT(~))) 

CP=CP+VH(3,CIP)*((XX(l .bE.FiP)-XT(I))*(XX(2.E.'JE,t~P)-XT(2)) 

~-(XX(~.~E.~LP)-XT(~))*(XX(I,~~~-I\LE,~P~-XT(~))) 

DBI=BTAN2(CP,RD) 

DBT=DBT+DBI 

30 COWTIlIUE 
IF(ABS(DBT) .LT.PI) Go TO 60 

CI I1 CALCULATE DISTANCE TO HIT (DHIT=SIIORTEST DHI) 

11 DHT=O. 

DO 40 N=i ,3 

40 DHT=DHT* (XT(N)-XIS(N))*(XI(N)-XIS(N)) 

DHT=SqRT(DHT) *SMLR 

IF(LHIT.AIID.(DHT.GT.DHIT)) CO TO 60 

LHIT=.TRUE. 

DHIT=DHT 

MPH=KP 

IF(MH.CE.0) CO TO 60 

DO 46 N=1,3 

CIII MOVE HIT POSIT10!1 AN INCBE!G!iT TOWARDS SIDE OF PLATE 

Clll WHICH SOURCE LIES ON 

46 XIS(N)-XT(N)-SION(SMLR,AN)*VN(N,HP) 

ao TO ei 

60 CONTINUE 

IF(MH.LT.0) CO TO 61 

CIII IF TOTAL SHADOWING ROUTINE IS BEING USED, INDICATE 

Clll THAT PLATE NP DOES NOT SHADOW SOURE 

c%%%%X IF(LSTS) LSTD(W)=. FALSE. 

60 CONTINUE 

61 IF(.NoT.LIEST) 00 TO 61 

YRITE(6,63) 

63 FORMAT (1, ' TESTING PLAINT SUBROUTINE') 

WRITE(B.*) XIS 

WRITE(B.*) D 

YRITE(B,*) DHIT.MH,LHIT 

62 BETURN 

END 
SUBROUTINE SCAN 

This subroutine rasterizes a line in the character buffer according to its sh3ding requirements. It calls routines to determine if ;l given point is shadowed or not and uses this 

information to shadow the given geometry. The fill character is used to fill the line in. 

c----------------------------------------------------------------------- 

SUBBOUTIllE SCAII ( OBJ, LINE. PHII, FILL, TTPE ) 

CI I I 

Clll This oubroutine *rast~riz@s' alina in the charactor buffer 

Clll according to its ah ad in^ rcquirmentr. 

Clll Tho fill charactrr is urrd to fill the 

CIII llno in. Tha line is declare3 larger character rtring in this 

Clll rubroutina than in the calling routinr. Thir can bs "hardwiredm 

CIII if it causes problur1 c?l other ~.lchints. 

CI I1 

INCLUDE 'SHBCOM, FOP.' 

CHARACTER*600 LINE 

CEIRACTL?*l FILL 

INTEGER FIR, OBJ 

INTEGER LSTFTR 

INTEGER SCANC 

INTEGER SPAliC 

INTEGER PHI1 

INTEGER TYPE 

REAL DHIT 

REAL D(3) 

REAL DP(3) 

REAL XIS(3) 

REAL TIIETA , PHI 

LOGICAL EOL 

LOCICAL LHIT, LHITl 

CObU.!ON /SCllCF!!lI PTR, EOL 

C! I ! 

C!II Initialize local variablaa. 

CI I I 

PTR = 1 

LSTPTR = 1 

EOL = PTR .GI. COLS 

CI I I 

Clll Until the and of the line ie acannod do ... CIII 

100 IF (.HOT. EOL) TEN 

C! !I 

CIll Locate the first occnrance of CIIAR 7, 8, or EOL. 

CI I! 

FIR = SCAIIC( LINE ) 

CI! 1 

C!!! If plaint sayo it'a a niss, update the lest-pointer, span, scan, 

C!!! fill. Otherwise, fill in tho characters between the pointers. 

Clll Define the "source point" AS the location of the antanna. 

C!!! and sss if our plate shado-3 the direction of the midpoint of the 

C!! 1 mcan. 

CI I I 

THETA = (0. 6*FLOAT(PTi!+LSIPTR)-1.0) *RESTH+THETl 

PHI = (PI1II-1) *RESPB+PHl 

DPW = SIII(THETA)*COS(PHI) 

DP(2) = SIN(THETA)*SII(PAI) 

DP(3) = COS(THETA) 

D(1) = DP(l)*VFC(I.l) + I??(Z)*VPC(2.1) + DP(3)*WC(3,1) 
D(2) - DP(i)*WC(1,2) DP(2)*VPC(2,2) DP(3)*VPC(3,2) 

D(3) DP(I)*VPC(l ,S) DP(l)*VPC(2,3) DP(3) *VPC(3,3) 

CIII 

Clll Thir muat ba dona durn to tha bahavior of plaint modifying XIS. 

C1 I1 

XIS(1) = ANrnN(1) 

XIS(2) = ANIENN(2) 

IIS(3) ANlENN(3) 

Cl l l 

C111 Now do a caaa dapanding on what typa of objact wa test for 

Clll ahadowing. 

CI I1 

C111 1 = platm 

CIII 2 = alliptic cylindar 

CI I I 

a010 (1.2) TYPE 

C1 I I 

CIII Tha objrct la a plat.. 

Cl l I 

1 CALL PLAINT( XIS, D, DHIT, -OBJ, LHIT 

COTO ODD 

Clll 

CIII Tha objrct la a cylindar. Tart andcapa and cylindar bodiar. 

CI I I 

2 CALL CAPINT( XIS, D, DHIT, 0. LHITI, -0BJ ) 

IF (.NOT. LHITI) CALL CTLINT(XIS.D,DHIT, LHIT, .FALSE., -0BJ) 

LHIT = LHIT .OR. LHITI 

COTO DDD 

CI I I 

Clll Taka tha appropriata action in tha buffar. 

Cl l l 

ODD IF ( .NOT. LHIT ) THEN 

LSTPTR = PIR 

PTR = SPANC( LINE 

DO 300 LSTPTR LSTPTR, PTR-1, 1 

LINE( LSTP1R:LSTPTR ) = FILL 

300 CONTINUE 

LSTPTR = PTR 

ELSE 

PTR SPAtIC( LINE ) 

DO 400 LSTPTR = LSTPTR, PTR-1, 1 

LINE( LSTPTR:LSTPTR ) = FILL 

400 CONTINUE 

LSTPTR PTR 

ENDIF 

CIII 

CI1I End UNTIL 

CIII 

COTO 100 

END IF 

CIII 

RETURN 

END 
FUNCTION SCANC/SPANC 

These functions are used to scan through the character buffer (map array) and locate/skip certain characters. They return the positions of these characters a9 their result. 

c----------------------------------------------------------------------- 

CIII 

Clll The following functionn epan/ecan ctaractora. That is, they 

Clll return the position of next character in LINE which dote or dova 

CI11 not mtch the epscficisd charcctor. Thay also 

Clll taminats the ecan/apan at tho end of thv line. 

CI I I 

INTEGER FUNCTIOlf SCAlIC( LINE ) 

INCLUDE 'SHACOF.!. FOB' 

CHARACTER*(*) LIME 

INTEGER PTR 

LOGICAL EOL 

CObO4OIf /SClfCMlI/ PTR. EOL 

CIII 

CIII Until a charactor mtching WARAC in found, advance the pointer. 

CI! I 

SCANC = PTR 

200 IF (.NOT. (EOL .OR. 

+ ( LINE(SCANC:SCANC) .EQ. CWAR(~) ) )) THEN 

ScAnc = SCANC + i 

EOL = SCAIIC .GI. COLS 

COTO 200 

EIIDIF 

CI I I 

C1 ! ! End UliITL 

CIII 

RETURN 

EllD 

CI I I 

c----------------------------------------------------------------------- 

C! ! I 

IllTECER FU:ICTIO!l SPANCC LINE ) 

INCLUDE 'SSACOM.FD8' 

CAARACTER* (*) LINE 

INTEGER PTR 

LOGICAL EOL 

COb~lOIl lSCNCMNI PTR, EOL 

CI 11 

CIII Until a character llOT wtching ASCII 7 in found, advanco the 

CIII pointar. 

C! I I 

SPANC = PTR 

100 IF (.NOT. (EOL .OR. 

+ ( LINE(SPA1IC:SPAlfC) .NE. CIIAR(7) ) 1) THEN 

SPAllC = SPANC + 1 

EOL = SPAllC .CT. CDLS 

COTO 200 

EIIDIF 

CIII 

Clll End UNITL 

C! I! 

RETL'RII 

END 
SUBROUTINE WRTOUT 

This subroutine produces formatted and binary output of the shadow rncp. 

c----------------------------------------------------------------------- 

SVBROUTIlIE VRIOUT 

INCLUDE 'SHACOM. FOR' 

INTEGER I, J, COLI, COLF 

CIII 

Clll Thin robroutine writrr thr formatted output buffer to tho output 

Clll file. Start the output on a new page, and calculate a header 

Clll based on the speciflrd pixel rerolution. 

CI I I 

Cl l l Unit 7 ir the main (ASCII) output file. 

CI I I 

Clll Initilize tho width of the map to be printed. 

CI I I 

COLI = 1 

COLF = 91 

IF(C0LF .GI. COLS) COLF = COLS 

CI I I 

CIII Print map. 

CI I1 

20 WRITE( 7. 100 ) ( ANTEtlN(I), Ill, 3, 1 ), INPFIL 

WRITE( 7, 200 ) ( (P!STH*(I-1) THETl)*DPR , 1- COLI, COLF, 10) 

WRITE( 7, 260 ) ( I*', I= COLI, COLF, 10) 

DO 60 J - 1, ROWS 

60 WRITE( 7, 300 ) ( BESPH*(J-1) PHI )*DPR, 

+ ( OUTBUF(1, J) . I= COLI, COLF 1 

CIII 

CIII If tho map door not fit on thr lino printer width, 

CIII then eplit it onto mnothor rat of pager. 

CI I1 

IF(C0LF .LT. COLS) THEN 

COLI = COLF 

COLF = COLF 90 

IF(C0LF .GI. COLS) COLF = COLS 

GO TO 20 

ENDIF 

CI I I 

CIII Have internal paramotera available in dogroeo. 

CIII 

THETiD = THETI *DPR 

THETZD = THE12 *DPR 

RESTHD = RF.STH *DPR 

PHID = PHI *DPR 

PH2D = pH2 *DPR 

RESPHD = RESPH *DPR 

CI I1 

CIII Unit 10 is a ~eneric sort of binary output which can bo plotted 

CIII anywhorr. Place a little header info at thr front of the file. 

CIII 

WRITE( 10 ) COLS, THETID, THEI2D, RESTHD 

WRITE( 10 ) ROWS, PHID. PHQD, RESPHD 

CI It 

CIII Damp only that part of the buffer which pertaine to thir plot. 

CIII 

DO 10 J = 1. BOWS 

DO 10 1 = 1, COLS 

10 WRITE (10) OUTBUFC I, J 

CI I1 
0113 Clll Output stuff in ccrylato. 

0214 Cl l l 

0116 RETIIall 

OlPI CI I I 

0117 Clll Fomt 8tatensnt.m. 

0128 CIll 

0110 100 FORMAT( 'l', 81, 'ANTENNA (RCS) = ', '(I, z(F8.4, I,'), 

0130 + F8.4, ' ) IN ETEPS', 61, 'INPUT SET: ', A42, / ) 

0231 100 FORFIAT( 100, 'THETA (DECREES)' .I, OX, ll( 4X, F0.1) ) 

0131 260 FORMAT( OX, 'PHI', 4X, A, 10( OX, A) ) 

0133 300 FORMAT( 0X, F7.3, 31, 101A ) 

0134 END 
Include 

This is 

include 

file 

a listing of the common blocks and parameter statements contained in the single 

file for SHADOW. Note that the include file appears - - in the compiler listing for the 

interactive service routines. - 

CI 11 

CIII COHHON declmrationm ... CIII 

COHHON /PIS/ 

PI, 

n1, 

DPR 

RPD 

CI I I 

C*** WXIWJU DIMENSION FOR PLATES 

INTEGER NPX 

PARAMETER (NPX=76) 

C*** HIIXIhnJM DIMENSION FOR PLATE EDGES 

INTEGER NEX 

PARAMETER (NEX=12) 

C*** MAXIMVN DIbWSION FOB CYLINDERS 

INTEGER NCX 

PARAMETER (tICX=6) 

C*** MAXIhlUU DIMENSIOII FOR CYLIHDER RIMS 

INTEGER INX 

PARAMETER (NIX=iO) 

C*** MAXIMUM DIMEllSIOll FOB ROWS (PHI) 

INTEGER MAXROW 

PARAMETER (MAXROW=361) 

C*** MAXIMIN DIMENSION FOR COLUMNS (THETA) 

INTEGER MAXCOL 

PARAMETER (MAXCOL=181) 

CI I I 

COMMON /GEOPLA/ 

XX (J,NEX.NPX), 

V (3,NEX,NPX), 

VP (3 ,NEX,NPX), 

VN (3, NPX) , W (NPX), 

wx 

CIII 

COMMON /CEOMEL/ 

AC (NNX ,NCX) , BC (NBX , NCX) , ZC (NNX , NCX) , ICR (NNX ,NCX), 

XCL (3,NCX), 

VCL (3,3,KCX). 

EC (NCX). 

MCX 

CI I I 

COMtON /EDMAG/ WAC(NEX ,NPX) 

CIII 

COMMOll /SHADIN/ COLS, ROWS, ANTENN(3) ,cTRoID(~), 

MP.ME,NEXThlE,MC, 

THE1 1, THET2, PHI, PH2, RESTH, RESPH, ALPH. 

+ UNIT(3) .IRS(3) .v~S(3,3) .IUNIT.UNITF.UNIfS,~ 

~ZP,PHZP,THXP,PHXP,FILPNM,FILCNM 

COMMON /SHADKC/ I~IPFIL.OUTBUF(MAXCOL.MAXROW). 

FILCHC,FILCHP,FILCHR 

Cl l l 

COWON /PATCUT/ VPc(3,3) 

Cl I1 
CIll The first eet of declarations ir the rtuff in /IIHADOW/ conon bloc 

CIII 

INTEGER 

+ M?, ME, NEXTME. MC, 

CI Platet/edgeP/cyl# variabler. 

+ FILPIiM, FILCIM. 

CI Plate and cyl number8 for rpecial filling 

+ COLS. 

C1 The aize of the array rubsection determined 

+ ROWS 

CI by internal rerolntion requirenants. 

REAL 

+ CTROID. 

CI A geometric center of the object in question. 

+ ANTENN, 

CI The antenna location in Ref Coord. Systm. 

+ THE1 1 , 

CI The lower thcta end of the range. 

+ T HET2, 

CI The higher theta end of the range. 

+ PHI. 

CI The lower phi end of the rang*. 

+ PHZ , 

CI The higher phi end of the rango. 

+ RES TH , 

CI The derired thetafphi remolution 

+ RESPH . CI in units of radians/pixel. 

+ ALPH 

CI Maximum allowed angular excursion. 

CHARACTER 

+ OUTBUF*I , 

CI The output buffer which la dinplayad. 

+ INPFIL*63. 

CI The filename of the input set. 

+ FILCHC. 

CI special fill character for cylinders 

+ FILCHP, 

CI rpecial fill character for everything else 

+ FILCHR 

CI apecial fill character for plates 

DATA FILCHC, FILCHP, FILCHR / 'C', 'P'. '1' / 

CIII 

Cl l l From the /PIS/ COb%IOll block.. . CI I1 

REAL PI, TPI. DPR. RPD 

CI I1 

Cl l I From the /CEOPLA/ COblFION block.. . 

CI11 

IllTEGER 

t4E.P. 

CI Number of edgee per plate 

+ t.PX 

CI Total number of plates 

REAL 

.+ xx . CI The array of plate corners 

+ v. 

CI Edge unit vectors 

+ VP . CI Edge unit binonaals 

+ VN 
CI Unit normal for each plrta 

CI I I 

CI I I From thr /GEOKEL/ COWON block. . . CIII 

INIEQER 

NEC . CI Ndrr of ractionr pmr cylinder 

MCX 

CI Total nnmbrr of cylindrrr 

REAL 

AC, 

CI Elliptic paramatar along x-uir 

BC. 

CI Elliptic parlmrter along y-uir 

zc, 

C1 Cylindmr rndcapr in cyl coord ryr 

TcR, 

CI Angle mndcrp War vith poritivr z uir 

XCL , 

CI Cyl coord ryr origin 

VCL 

CI Drfinition of cyl coord ryr 

CI 

INTEGER 

IUNIT 

REAL 

UIIITF, 

UNITS, 

UNITl1. 

UNIT, 

+ Ills, 

IHZP.PHZP,IHXP.PHXP, 

m, 

WC, 

WAC 

DATA UllIT/l. , .3048.0.0264/ 

C1 

CI 1 I* 

Clll Tho following common block ir for WS/SMQ$ roftvarr only. 

CI 11 

INTECER KBDID. KETTBL 

COI.(MOIl /TEXCOU/ KBDID, KETTBL 

CI 11- 
10.4 Non-FORTRAN VAX/VMS source files 

This section contains listings of the source files used by the interactive code which are not 

written in fortran. They are used by the interactive interface and are needed only by the 

VMS utilities. - L -_.- -.-. L^nP-.Y&--^P 

CDU Source file 

This file is the source input for the Command Language Definiton Utility (CDU) which 

defines the available interactive commands. 

I ** 

I 

I Film: SHACMD.CLD Edit: AAAlOO1 

1 

MODULE CObMAND-TABLES 

IDENI ISHACFD 01-0011 

I 

I FACILITY: Shadow 

I 

1 ABSTRACT: 

I 

I This is the connand language definiton source for the SHADOW 

1 program. It defines the interactiva commnd interface undar 

I tha VAX1VMS operating symtca. 

I 

I AUTHOR: Laszlo Takacs 

I 

I CREATED: 1-NOV-1986 

I 

I MODIFIED BY: 

I 1-000 - Original. AAA 1-NOV-1986 

I 1-001 - Laszlo Takacs 20-DEC-1986 

I Added support for the SET FILL comnd and rearranged 

I tha SET PLATE and SET CYLINDER commnds. 

I - 

I 

I Show ayntax 

I 

Define ayntax show-fil-syntax routine show-ti1 

Dafine syntax show-out-syntax routina ehow-out 

Daf ina 

Def ins 

Daf ine 

Daf ina 

Daf ina 

Daf ins 

Daf ins 

Daf in. 

I 

syntax 

syntax 

syntax 

syntax 

syntax 

syntax 

syntax 

syntax 

show-inp-syntax 

show-uni-syntax 

ahow-ant-syntax 

ahow-coo-eyntax 

ohow-pat-syntax 

show-sca-syntax 

show-win-syntax 

show-key-syntax 

routina show-inp 

rontina rhow-uni 

routina show-ant 

routina show-coo 

routine ahow-pat 

routina show-sca 

routine show-win 

routine show-key 

I Set syntax 

1 

Define syntax set-ant-syntax routine set-ant 

Define syntax set-coo-syntax routine set-coo 

Dsfine syntax set-pat-~yntax routina set-pat 

Dsfine syntax set-sca-ayntax routine set-sca 

Dafina syntax sot-win-syntax routine set-win 

Dafine syntax set-key-syntax routine net-key 

Define syntax set-out-syntau. routine set-out 

parametor pl value( required ) 

parameter pZ value( type=Sfile, required ), 

prompt="filenane" 

qualifier plottable, default 
qualifimr printablm, batch 

qualifimr echoing, dmfanlt 

Dmfinm myntu sat-inp-ryntax rontinm rrt-inp 

pumatar pi valum( rmquirmd 

paramatar p2 nlnm( typm=(film, rmqnirmd 1. 

prompt=minpnt ratn 

Dmfinm ryntu rat-fil-ryntu' rontinm rat-fil 

puammtmr pi wlnm(rmquirmd) 

puunatmr p2 wlnm(dafaolt=*Xn),prompt-*charactmrn 

qnalif imr platm valnm(rmquirmd, list), nonnmgatablm 

qualifimr cylindmr valum(rmqnirmd,lirt), nonnmgatablm 

qualifimr rmqumntial nonnegatablm, ryntmx=rmqumntial 

dirallow any2 ( platm, cylinder, rmqnrntial 

Dmfina ryntax rrqnmntial routinm rat-fil 

gararmtar pi valnm(rmquirmd) 

I noqnalifimrr 

IDmfinm ryntu rat-pla-ryntw rontinm rat-pla 

I puam.tsr pi valus( rsquird ) 

I puammtmr pZ valnm( rmquirmd ), prompt=*platm numbarm 

I pumatar pS valnm( dmfanlt=mPn ) , pr~t=mcharactmrm 

I qualifimr all mynta~mrt-placyl-all 

1Dmfinm syntax rat-cyl-syntax routinm mat-cyl 

I paramatar pi value( rmquirmd ) 

1 parammtmr p2 valnm( rmqnirrd ), prmpt=*cyl numbarm 

I parammtmr p3 valum( dmfanlt=*Cm ), pr~~pt=~charactmr" 

1 qualifimr all myntax=mmt-placyl-all 

Dmfinm ryntu rat-placyl-all 

paramrtmr pi 

parematar p2 valum( dmfault-mX* ) 

Dmfinm myntax mat-nni-eyntax 

parmatar pi valum( rmqnirmd ) 

parmatar p2, valnm( rmqnirmd, typs=nnitm-typmr 1, 

prompt=*inchor, fmmt, or matarm* 

Drfinm myntu rat-uni-mmtmrr-ryntax routinm mmt~uni~mmtmrr 

Dmfinm ryntax mat-uni-inchar-mynt rontinm mat-uni-inchmm 

Define ryntu rat-uni-feat-ryntax routinm rat-uni-frat 

I 

I Typm dmfinitonr. 

I 

Dofinm typm anitr-types 

koyword inchmr, myntax = sat-uni-inchas-ryntax 

kayword metrrr, ryntax = met-uni-metmrr-ryntw 

koyword feat, syntax = mat-uni-faat-ryntax 

Dmfinm typm rat-typam 

kmyword fill-charactmr, myntw = mmt,fil-ryntax 

I kmyword platm, myntax = mat-pla-myntax 

I kmyword cylindrr, ryntu = mat-cyl-myntax 

kmyword output-dovicb, syntax = rat-out-myntu 

kmyword input-rat, ryntu = mmt,inp,myntu 

kryuord units. syntax = rat-nni-ryntu 

kmyword mntmnna-location, ryntu = mat-ant-myntu 

kmyword coordinatmr, syntax = rat-coo-syntax 

kmyvord pattern-cut, ryntu = mat-pat-myntu 

kmyword mcalm,factor, myntu mat-rca-eyntax 

kmyvord window, ryntax = rat-win-ayntax 
keyvord keypad-node, syntax = set-key-ryntax, negatable 

Define ty-ps show-ty-prr 

kayword fill-character, ryntax = show-fil-eyntax 

I kryword plate, syntax = show-f 11-syntax 

I keyword cylinder, ryntax = rhow-fil-syntax 

keyword output-davice, eyntax = show-out-syntax 

keyword input-set, syntax = ahow-inp-syntax 

keyword units. syntax = ahow-uni-syntax 

keyword antenna-location, syntax = show-ant-ryntax 

keyword coordinatws, ryntax = show-coo-eyntax 

keyvord pattern-cut , ryntax = show-pat-syntax 

kayword scale-factor, ryntax = show-sca-ayntax 

keyword window, ryntax ahow-win-syntax 

keyword keypad-node, syntax = show-key-syntax 

1 

1 Verb definitons. 

1 

Dafine verb set 

paranoter pl, value( required, typs=n*t-typea 1, 

prompt = "Set what* 

Defina verb rhow 

parametrr pl, value( required, typ*=show-types ) , 

prompt = "Show whatm 

Define verb help routine help-comnd 

parameter pi, value( type=$reat-of-line ) 

qualifier library, label = holplib, default, 

value( default=gsystdiek:[)shadowm ) 

Define verb mpawn synonym dcl 

rynonym 8 routine dcl-cocnand 

parameter pi, value( type=$rest-of-line ) 

Define verb exit routine exit-comnd 

Defina verb shadow synonym e routine ahado!v-ccmmand 

! 

I End of file SHACPID.CLD. 

1 

I -- 
Keypad initialization file 

This file defines the initial keypad assignments for the interactive program at run time. It 

may be modified to allow customizing of the keypad interface. - 

I 

I 6HADOW.KPD - 

I 

I Thia film rtarte up tha keypad definitionr for tha SHADOW 

I progrua. Thin fa a urar-definabla film and my be altered. 

I 

1 Lamzlo Trkaca. 20-DEC-1986 

1 - 

I + 

I 

I Sat up tha OOLD koy. 

I 

Daf/kay/norcho PF1 "* /if=dafault /rat=gold 

Def/kay/noacho PFl *" /if=gold /rat=drfault 

I 

1 Ualp k Shadow. 

1 

Def/kay/tam/echo PF2 "Help* 

D*f/kay/tarm/acho PF3 "Shadow* 

I 

I Sat up the toggle keypad-mod. key. 

I 

Daf /kay/tarm/acho PF4 "Set keypad" /if =def ault 

Daf/kay/tarm/acho PF4 *Sat Nokeypad* /if=gold 

I 

1 Dafinm miacallanaoua keya. 

I 

Daf/kry/acho/if=dafault KP7 "Sat output " 

Daf /kry/echo/if=drfault KPB "Sat input 

Daf/kmy/echo/if=default KPO "Set antenna* /trrminatm 

Def/kay/echo/if=dafault MINUS "Sat window* /terminat* 

Drf/key/acho/if=dafault KP4 "Set mcale-factor*/termina 

Daf/key/echo/if=dafault KP6 "Set unitr* /tarminate 

Daf/key/echo/if=dsfault KPB "Set coordinatr*/tarminata 

Daf/kmy/acho/if=dafault CObMA "Set pattern" /tarminata 

Daf /key/echo/if=default KPi "Sot fill " 

Daf /kay/acho/if=default KP2 "Set fill /plata=(i ,X) . Daf/key/acho/if=default KP3 "Set fill /Saquential*ltar 

Daf /key/acho/if =default KPO "Spawn" 

1 

Daf /kry/echo/if=gold KP7 .Show outputm /tarminata 

Daf /key/echo/if=gold KPB "Show input" /terminat@ 

Daf /key/echo/if=gold KF'Q "Show antenna" /tarminata 

Daf/key/acho/if=gold MINUS .Show window" /tanninat@ 

Def /kay/acho/if=gold KP4 "Show acalm-factor*/termin 

Def/kay/echo/if=gold KP6 "Show units" /tarminate 

Daf /kry/acho/if=gold KPB "Show coordinata*/tarminata 

Daf/kry/acho/if=gold COMMA "Show pattarn" /tarminate 

Daf /kay/acho/if=gold KPI "Show f illn /terminat* 

Daf/key/echo/if=gold KP2 "Set fill /cylinder=(l ,X) " 

Daf/kay/acho/if-gold KP3 "Show fill* /tarminate 

Daf /kay/acho/if =gold KPO "Spawn 

I 

1 Entar kay im ram. as return. Period ia EXIT. 
1 

Dei/kay/tarm/echo PERSOD "Exit* 

Daf/kay/tsrm/echo ENTER *" 

1 

t End of SHADOW.KPD 

1 - 
Chapter 11 

VAX Implementation 

This chapter describes the VAX/VMS implemetation of the shadow program. The program 

has been split into two parts which are not used together. When the computer environment 

is the VAX/VMS operating system, then the more flexible interactive mode described in 

this chapter should be used. Assuming that the required files have been properly restored 

from the distribution medium, there are procedures provided to accomplish assembly of the 

code with minimum user effort. 

11.1 Assembling the Code 

On a VAXIVMS computer system, the following files are required to build and use the 

code. Both the interactive and non-interactive versions of the code can be run in any of the 

standard VMS ways, that is interactively, in a batch queue mode, or in a DCL eubprocess. 

The actual building of the program takes place by invoking the procedure SHABLD.COM. 

The resulting executable file SHADOW.EXE can then be ~dn with the RUN command. 

SHABLD.COM A DCL command procedure to compile and link the files. This is the 

main assembly command file. 

SHACMD.CLD A VMS Command Language Definition file used define the interactive 

commands available. 

SHACOM.FOR The one include file for the code common blocks. The other include 

statements that appear in the code reference system libraries. 

SHADNI.FOR This contains the alternate code that is to be used when a non-interactive 

code is desired. 

SHADNW.FOR This contains code that is very much dependent on the facilities of VMS 

and has been seperated as such. It is an essential part of the interactive program. 

SHADOW.FOR This is the main body of the code and is common to both interactive 

and non-interactive versions. It is standard FORTRAN-77. 

SHADOW.HLB This is the VMS-format help library containing descriptions and examples of interactive commands. 
SHADOW.KPD This is an initalization file used by the interactive program to equivalence certain functions to keys of the user's choice. 

SHAPLT.COM This is a DCL command procedure invoking the NCAR graphics plotting 

software. 

- 

SHAPLT.FOR This is the FORTRAN program which reads the output produced by the 

code and calls appropriate NCAR routines to make a plot. 

LABEL.DAT This file is read by the SHAPLT program in order to label the NCAR plots. 

11.2 Running the Code 

In order to run the code on VMS, the executable file created by the SHABLD procedure is 

necessary. The program is then run with the dcl RUN command. 

A typical interactive session with the program might consist of the follovring elements 

in their approximate order of execution. 

OUTPUT FILES Establish a set of output files with the SET OUTPUT command. The 

output files are of three types. Using the qualifiers of the SET OUTPUT command, 

any desired combination of output files may be generated. 

PROCESS AN INPUT Issue a SET INPUT command which reads the geometry from 

the specified file. In order for the program to process input sets, this command must 

be issued prior to any mapping commands. This command is usually executed once 

per session. 

DEFINE A WINDOW Using the SET WINDOW cnmmand, establish the angular range 

of interest. When the program begins, the size of the window is set to the full angular extent of the far-zone sphere. By specifying a smaller angular range, the user 

examines portions of the geometry in greater detail. 

DEFINE A SOURCE With the SET ANTENNA command, establish the location of 

the source. This command is one of the more frequently entered commands. It 

applies units and coordinate transformations that apply from the aet units and set 

coordinates command. 

HIGHLIGHT ITEMS With the SET FILL command, the user may optionally cause 

parts of the geometry to be marked. This very usefull command may be executed at 

any time before a SHADOW command. 

GENERATE A MAP Cause the generation of a shadow map by issuing a SHADOW 

command. The shadow command is used after the user has set all desired parameters 

including the window and the antenna location. Without executing this command, 

the code does not calculate any shadowing. 

REPEAT ANY OF THE ABOVE Perform one or more of the above actions repeatedly to obtain several maps. Most of the commands above may be executed in any 

order provided that the SHADOW command is executed last. 
EXIT Terminate the shadow session with an EXIT command. An acceptable alternate 

mode of exit is eof, or control-Z. 

In order to make life easier by reducing the number of keystrokes required to enter interactive commands, a facility is provided with which the user may associate whole command 

strings with a single key. When the shadow program begins executing, it-loads a set of 

predefined key definitions from a file. The user may edit this file to customize the keypad 

definitons to his/het liking. Since the file is loaded automaticly, the only restriction on its 

use is that it must exist in the current process default directory and must be accessible at 

run time. The details about these interface routines and what they do may be found in the 

VAXIVMS Runtime Library Reference Manual. 

11.3 Modifying the code 

Modifications to the source code by the user can be performed, but of course the outcome cannot be predicted beforehand. One predictable user modification is changing the 

program's PARAMETER statements in the include file SHACOM.FOR. This would be 

necessary (and sufficient) to allow the program to deal with a greater number of plates or 

to construct a shadow map with greater resolution than the current maximum. 
Chapter 12 

. Non-VAX Implementation 

This chapter discusses how to implement the code on a different computer than a VAX. The 

obscuration code, SHADOW, has been separated into two main parts. The FORTRAN 77 

part, is not VAX dependent and is contained in a file called SHADOW.FOR. Most of the 

rest of the files are VAX dependent and are used mostly for interactive features. Although, it 

is possible that other types of machines will have similar routines that will allow interactive 

manipulation, it is not possible here to suggest how this may be accomplished. It is acsumed 

that the easiest way to use SHADOW on a non-VAX would be to run it in a non-interactive 

mode. 

The main program in the default version of the file SHADOW.FOR is designed to be 

used with the non-FORTRAN 77 interactive version. A file called SHADNI.FOR contains 

a main program designed to be used in a non-interactive mode. It is listed in section 10.2. 

The main programs can be easily exchanged. 

Note that the only other part of the code is this part that is non-FORTRAN 77 is the 

INCLUDE statement. This has been retained because many computer systems support 

this statement. It is used to include the lines of code in the named file in the spot that 

it is called as if the lines had been in that spot. It provides a powerful means of putting 

commonly defined parameters used throughout the code in one place. In this caae, it is used 

to include the file SHACOM.FOR which contains COMMON blocks and PARAMETER 

statements that define the dimensions of arrays that store the geometry. If it is desired to 

increase the number of plates, edges per plate, cylinders, or rims per cylinder, etc; they 

can be changed in one spot. Please see the listing for this file elsewhere in this manual. 

The INCLUDE statement can be easily removed by hardwiring the contents ~f the file 

SHACOM.FOR into the text at the main program and the subroutines ABSCIN, CAPINT, 

CYLINT, CYLROT, DOCYLS, DOCYL, DOPLAS, DOPLA, GEOM, INITGF, PLAINT, 

SCAN, SCANC, SPANC, and WRTOUT. 

The code can now be compiled, linked, and run. The user communicates with the code 

through the non-interactive commands. This allows almost the same capability. The only 

information that does not have a command to change its behavior is the fill options and the 

input and output file names. The fill options can be accessed through the main program. 

The listing below has comment lines referring to the place that the fill operations may be 

changed. 

The input and output files can be named using assignments to the logical unit numbers 

for the given operation. The input file is read on logical unit #5. The echo file is written 
on logical unit #6. The printable shadow map is written on logical unit #7. The plottable 

ahadow map ia written on logical unit #lo. On a VAX the ASSIGN VMS command would 

be used. 

Note that the user can specify more than one source. The non-interactive operation will 

run a shadow map for each source individually. The receiver will not be counted. If the 

user wants to look at the shadow map for a receiver, they should be treated in this code as 

if they are a transmitter (source). 
Chapter 13 

NCAR Plot Program 

The shadow map can be plotted using graphical means. The SHADOW code will write a 

unf6rmatted file that can be used for interfacing to apecial purpose plotting prigrams. It 

writes this file on logical unit #lo. In the interactive mode the file name is specified by 

using the SET OUTPUT commands /PLOTTABLE option. In the non-interactive mode 

the file name is specified using an assign statemmt. 

There are many ways to plot the resulting shadow map. Presently, there is little standardization between system for plotting. This may change with the advent of GKS, but 

for now, it can not be assumed that different organizations have compatible plotting capabilities. This chapter suggests one possible means to plot the output. It uses the National 

Center for Atmospherics Research (NCAR) graphics package (51. It has been tried on The 

Ohio State University ElectroScience Laboratory's computer system and NASA Langley 

Research Center's computer system, both VAX 11/780s, with almost the same results. It 

is still not possible, however, to assume that it will run everywhere the same way. 

The program is listed for the convenience of possible users, knowing that some conversion 

may be necessary. The code is written in basic NCAR subroutine calls. Consult your local 

system information on how to link to your systems NCAR graphics subroutines. In addition, 

it is not written completely in standard FORTRAN 77. There are a few VAX extensions 

used, such as some of the options in the OPEN subroutine and some comment lines use the 

non-standard exclamation point. These changes will be minor. 

Note that the plot of the shadow map will have grid lines. There is another option given 

for a map without grid lines. This can be used by commenting out the call to subroutine 

GRIDL, and uncommenting the call to subroutine PERIML. 

The file name containing the maps to be plotted are placed in the first line of a file named 

LABEL.DAT. The LABEL.DAT file also contains the header information to be place at the 

top of the plot for future identification and reference. The code will loop through the 

specified shadow map file until all the shadow map contained in the file are plotted. A 

sample version of a LABEL.DAT file is given after the code listing. It shows a shadow map 

being read off of file FOR010.DAT which contains two shadow maps. 
Listing of code to plot shadow map using NCAR: 

PBOORIH PLTOGP 

DIMENSION XDUM(2). YDVN(2), NC(6) 

INTEGER COL8, BOYS 

CHARACIER*8O LABELS(6). XLAB, YLAB. INF 

CHARACTER*(*) XFORFU. TFORFU 

BYTE BTTE 

C 

C Thmsm urn charactmr paramrtmrs for thm plotting output. 

C 

PARAMETER ( XFOWA = '(F6.1)' 

PARAMETER ( YFOWA = '(F6.1)' 1 

C 

DATA XUB 1' PHI 'I 

DATA TLAB I' THETA 'I 

DATA NC / 6*72 / 

C 

C Rrad a hosdrr from FOROOS. Opon the filo roadonly 80 that other nrrrm 

C can road it without nomding writ0 mccrrr to thm film. 

C 

OPEN ( UNIT=6. TYPE='OLD1. EEADONLY ) 

READ ( 6. FMT='(A)' INF 

C 

C Rmad thr hoadrr info frw thm data film. Opon it anfomttrd. 

C 

OPEN(UNIT=lO,FILE=INF,TYPE='OLD' ,?ORN='UNFORFUTIED' ,READONLY) 

ISCX = -2 

ISCY = -2 

XMII = PHlD 

XMAX - PH2D 

TMIl = -XHETPD 

YMAX = -1HETlD 

NDX = 4 

NIX = 2 

NDY = 4 

NTY = 2 

C 

C Raad tho labrl info for thir plot. 

C 

READ ( 6, * ) LABELS(1) 

BEAD ( 6, * ) SX, ST, 62, SPRX, SPRY, TRX 

BEAD ( 6, * ) ZTHET, ZPHI, XISET, PHI 

C 

C Porrmt tho labmlr for thm plot (via internal writm rtatrmrnta.) 

C 

WRITE (LABELS(l), 1100) SX, SY. 62 

WRITE (LABELS(?)), 1200) ZTHET, ZPHI, XTEI, XPHI 

WRITE (LABELS(Q), 1300) SPRX, SPRY 

VRITE (LABELS(61, 1400) TRX 

C 

C CALL INFOPLT(2. XDVM. TDUbl, XMIN, XMAX, YMIN, YMAX , ISCX , C NDX,NTX, ISCY ,NDY ,NTY ,XLAB,6,YLAB ,7, 

C B,LABELS,NC,O,-1,I) 

C 

C Dofinr a mpping window from data to plot 

C 

CALL SET ( 

+ 0.12, 

+ 0.84, 

+ 0.12. 
0.84. 

XHIN, 

XMAX , 

THIN. 

YhIAX. 

+ 1 ) 1 Do a linear-linear plot 

C 

C A call to labnod night help the output look nicer. 

C 

CALL LABMOD ( 

+ %REF( XFORMA ) , + %REF( YFORMA ) , + LEN( XFORMA 1, 

+ LEI1 ( YFORMA ) , + 1. 

+ 1, 

+ 0, 

+ 0, 

+ 0 

C 

C Put labels on plot 

C 

XMID=O. 6*(XMIN+XHAX) 

TMID=O .6* (YMIN+TFfAX) 

XDEL- (XMAX-XMIN) 136. 

YDEL=(Yt4AX-mIN) /36. 

XL=XMIN+0.6*XDEL 

DO 100 IL=l.6 

TL=YMAX+(6-IL)*YDEL 

loo CALL PYRIT(XL,YL,%REF(LABELS(IL)) ,NC(IL) ,1,0,-1) 

C 

C Define the perimeter of the plot wit a grid. 

C 

CALL CRIDL ( 

+ NDX , 

+ ITX, 

4 NDY, 

+ NTY ) 

C 

C Theta and Phi Axis Labelr 

C 

YBOT=YMIN-2.6*YDEL 

CALL PmIT(XMID.TBOT,%REF(XLAB) ,6,1 ,O.O) 

XSID=XMIII-6 .O*XDEL 

CALL PWRIT(XS1D ,YMID, XREFCYLAB) .7,1,90,0) 

1 C 

IC Ure thin call if you don't want grid lines. 

IC Define the perimeter of the plot. 

!C 

I CALL PERIML ( 

I + NDX. 

1 + NIX, 

! + NDY. 

I + NTY ) 

C 

XIllC = 1.8 

YI2:C = 0.D 

ISYW = 1 

C 

C Loop on rows then on columns. 

C 

DO 10 J = 1, ROYS 

x = RESPIID*(J-I)+PHID 

I Number of MAJOR 

1 Number of MINOR 

I Number of MAJOR 

I Number of MINOR 

1 Nmber of MAJOR 

I Number of MINOR 

I Number of MAJOR 

I Number of MIIIOR 
DO a0 s = i, COLS 

READ ( 10, JXD=Q99 ) BYTE 

IF ( BITE .HE. 32 ) THEII 

Y -(RESTXD*(I-l)*THEriD) 

C 

C CALL PLTSYH( X, 1, XIHC, YINC, ISTH ) 

C 

C Plot the rynbol on thr pa&*. 

C 

CALL PYRIT( 

END IF 

20 CONTINUE 

10 CONTINUE 

C 

C "FramaU the NCAR output 

C 

909 CALL mAME 

0010 13 

1, I X coordinatm 

y , I T coordinata 

BYTE, I Tha character to plot 

1. I Yrita one character 

0, I Ura tha dafault aiza 

0, I Urm tha default oriantat 

0 ) I Ura tha dafault cantarin 

I. 

C Clorr the input fila and atop. 

C 

9999 CLOSE ( UI!IT=10 

CLOSE ( UNIT=6 ) 

STOP 'NCAR/Shadow plot cornplatad. ' 

C 

C Formstr go down harm. 

C 

1100 FORMAT (' ANTENllA LOCATED AT ',2(F7.1,','),F7.1) 

1200 FORMAT (' ANTENNA ORIENTATION: ' .3(F7.1, ' . ') .F7.1) 

1300 FORMAT ( ' SOLAR PANELS ROTATED ' , F7.1, ' , ' , F7.1) 

1400 FORMAT (' THEMIAL RADIATORS ROTATED ' ,F7.1) 

END 
Listing of sample LABEL.DAT file: 

FORO1O.DAT; 

' SHADOW TEST1 FOR CASE AN6S1' 

26. 16. 166.6 0. -62. 0. 

0. 0. 90. 0. 

' SHADOW TEST1 FOR CASE AN6SI' 

16. 16. 266.6 0. -69. 0. 

0. 0. 90. 0. 
Standard Bibliographic Page 

4. Title and Subtitle 5. Report Date 

MANUAL FOR OBSCURATION CODE WITH SPACE STATION 

APPLICATIONS 6. Performing Organiaation Code 

7. Author(s) 8. Performing Organization Report No. 

R. J. Marhefka and L. Takacs 716199-7 

1. Report No. 3. Recipient's Catalog No. 

NASA CR- 178099 

2. Government Acceeaion No. 

I 

15. Supplementary Notes 

- 

9. Performing Organiaation Name and Address 

The Ohio State University ElectroScience Laboratory 

Department of Electrical Engineering 

1320 Kinnear Road 

Comus. Ohio 43212 

12. Sponsoring Agency Name and Address 

National Aeronautics and Space Administration 

Washington, DC 20546 

/ Langley Technical Monitor: E. M. Bracalente I 

10. Work Unit No. 

11. Contract or Grant No. 

NSG-1498 

13. Type of Report and Period Cwaed 

Contractor Report 

14. Spomoring Agency Code 

482-54-23-15 

The Obscuration Code, referred to as SHADOW, is a user-oriented computer code to 

determine the cast shadow of an antenna in a complex environment onto the far 

zone sphere. The surrounding structure can be composed of multiple composite 

cone frustrums and multiple sided flat plates. These structural pieces are 

ideal for modeling space station configurations. The means of describing the 

geometry input is compatible with the NEC - Basic Scattering Code. In addition, 

an interactive mode of operation has been provided for DEC VAX computers. 

The first part of this document is a User's Manual designed to give a description 

of the method used to obtain the shadow map, to provide an overall view of the 

operation of the computer code, to instruct a user in how to model structures, 

and to give examples of inputs and outputs. The second part is a Code Manual 

that details how to set up the interactive and non-interactive modes of the code 

and provides a listing and brief description of each of the subroutines. 

17. Key Words (Suggested by Authors(8)) 

Obscuration computer code 

Shadow map 

Plate models 

Cone frustrum models 

Space Station applications 

18. Distribution Statement 

Subject Category 32 

I 

19. Security Classif.(of this report) 

Unclassified 

Available: NASA's Industrial. Applications Centers 

20. Security Classif.(of this page) 

Unclassified 

21. No. of Pages 

237 

22. Price