NASA Contractor Report 177986 

NASA-CR-177986 

19860006742 

FINDS: A Fault Inferring Nonlinear Detection System --

Programmer's Manual 

Version 3.0 

Roy E. Lancraft 

BBN Laboratories Inc. 

10 Moulton Street 

Cambridge, Massachusets 02238 

Contract NAS 1-16579 

December 1985 

NI\S/\ 

National Aeronautics and 

Space Administration 

Langley Research Center 

Hampton, Virginia 23665 

111111111111111111111111111111111111111111111 

NF01012 
1 

2 

2.1 

2.2 

3 

j.l 

'L2 

3.3 

3.3.1 

3.3.2 

j.3.3 

'3.3.4 

3.3.'5 

.:L3.6 

3.3.7 

3.3.8 

3.::'.9 

3.3.10 

L3.11 

4 

4.1 

4.2 

4.2.1 

4.2.2 

4.2.3 

4.2.4 

4.2.5 

4.2.6 

4.2.7 

4.2.H 

4.:2.9 

4.2.10 

4.2.11 

4.2.12 

4.2.13 

4.2.14 

4.2.15 

4.2.16 

TABLE OF CONTENTS 

(I)NTENTS 

INTRODUCTION .•.•....•..•• 

SOFTWARE OVERVIEW ANO INSTALLATION DETAILS 

Software Overview • . . . . 

In~tallation Notes .••.. 

M)DULE DESCRIPTIONS • . . . . . Some Notational Conventions 

Brief Summary Of Contents By Source File 

Detailed Descriptions Of FINDS Routines 

· 1 

4 

· 4 

5 

• i:\ 

Documentation For File: FMAIN.FOR ..•. 

• Ij 

11 

11:1 

18 

28 

85 

85 

86 

Documentation For File: FSFDI.FOR 

Documentation For File: FGAC.FOR ••. 

Documentat i on For Fil e: FWINO. FOR 

Documentatlon For File: FSENS.FOR 

Documentation For Fll~: FIO.FOR 

Documentation For File: FUTSUB.FOP 

Documentation For Fi Ie: F\/MSUB.FOR 

Documentation For File: PLOTD.FOP 

Documentatl0n For File: PPINTD.FOR . 

Documentation For File: DOC.PAT 

• • • • tl6 

INTERNAL DATA STPUCTURES .... Data Structure Conventions . . 

Detai led Deser; ptions Of FINDS Common B lods . 

Description Of CMPSTF 

Description Of DeiOEI 

Description Of DETINF 

92 

· 106 

119 

iLl) 

121 

• 123 

J23 

134 

134 

• 134 

135 

Description Of DETSIG • 136 

Description Of DETMBI 

Description Ot DElVBI 

Description Of EKBFO 

Description Uf FCOM1 

Description Of FCCt-12 

Description Of FILNAM 

••••• 136 

• 137 

• 138 . . . • 138 

• • • • • 139 

Description Of FILTIC •.•..•••. 

Description Of FILTRl 

Description Of FLTCTL .•••. 

Description Of FTITL1 

Description Of GBLEND 

Description Of HEALCM • . • . 

1 

• • • • 139 

• . 140 

• • 140 

. • • 141 

• • 142 

• • • 143 

• 143 

.# 

;1/f6-/~Z/Z 
4.2.17 

4.2.18 

4.2.19 

4.2.20 

4.2.21 

4.2.22 

4.2.23 

4.2.24 

4.2.25 

4.d.26 

4.2.27 

4.2.28 

4.2.29 

4.2.30 

4.2"31 

'5 

APPENDI>t A 

APPENDIX B 

Description Of HFCOM 144 

Description Of INITVL . • . .. . .. • . • • . 145 

Description Of INOU . . • . . . • • • . Description Of MAINl 

Description Of MAIN2 •• .. 

· • 145 

• . 146 

• • • 147 

Description Of M"/LTDT • • • . • 147 

Description Of SENSCM 

Description Of SIM:CM 

Description Of ~PRM 

Description Of STITL 

Description Of SYSUl 

.. .. .. • .. .. . . .... .. 147 

• • .. • .. .. 148 

Description Of SYSXl 

Description Of SY$XBO . . • . • . D~scription Ijf SYSYW1 •. ••. 

Description Of YOBSRV 

REFERENCES . . • . 

• • • • • 148 

· 149 

• • . 149 

· ] 50 

• . 151 

• 151 

152 

154 

StMv1ARY OF SPECIFIC HARDWARE AND SOFTWARE REQUIREf'.'ENTS 

GENERATING THE FINDS PROGRAMMERS MA~JAL 

;; 
FIG. 

FIG. 

FIG. 

1. 

., 

.!. • 

3. 

FIG. 4. 

FIG. 5. 

FIG. 6. 

FIG. 7. 

FIG. 

FIG. 

FIG. 

FIG. 

13. 

9. 

10. 

11. 

FIG. 12. 

FIG. U. 

U ST ot FIGURES 

D~finition of Flow Diagram Symbols .•••.•••..•.•.... 10 

Functional Flow Diagram for Program FINDS •••••••.•• 20 

Flow Diagram tor Program FINDS .•••....•.•••.•.••••. 21 

Flow Diagram tor Subroutine NAV .................... 29 

Flow Diagram for Subroutine EKFN1 39 

Flow Diagram for Subroutine BIASF ...••••.•••••••••• 42 

Flow Diagram for Subroutine BLEND •••.•••.•••••••••• 45 

Flow Diagram for Subroutine DETECT 

Flow Diagram for Subroutine RECONF 

Flow Diagram for Subroutine HEALR 

Example of POlnter Array Indexing 

53 

66 

79 

133 

Example of Collapsed Array Indexing ....•......•.... 133 

Mechanics of Automatic mamla I I~~neratlon ..•••...... B-3 

iii 
TABLE 1. 

TABLE 2. 

fABLE 3. 

TABLE 4. 

TABLE 5. 

TABLE 6. 

TABLE I. 

LI ST of TABLES 

No-Fail Filter Absolute State Indexing 

Convent ions ••••••••.•.••.•.•.•••••.••.•••••••..•.•. 126 

No-Fail Filter Absolute Measurement 

Indexing Conventions •••••.•.•••••.••.•••.••.•••.••. 127 

No-Fail Filter Absolute Input Indexing 

Convent; ons ••.•..•.••.•....••.•.•..••••••••.•..•... 128 

No-Fail Filter Process Noise Indexing Conventions .. 129 

Absolute Sensor Indexing (onventions •..•.•••....••• 130 

Replicated Sensor Indexing Conventions ..•.•..••.•.. 131 

Rep I icated Measurement Index.; n9 Conventions ........ 132 

iv 
LIST of ABBREVIATIONS 

Ale Aircraft 

ATOPS L\d\fanl~~d Tr'ansport Operating Systems 

Azm MLS azimuth 

B-frame body frame 

BFF Bias-Free Filter 

DrvE Distance Measuring Equipment 

E-frame earth fixed rotating frame (Earth-frame', 

EKF Extended Kalman Filter 

El MLS elevation 

FDI Failure Detection and Isolation 

FDIR Failure Detection Isolation and Reconfiguration 

FINDS Fault Interring Nonlinear Detection System (computer programl 

FTN Fault rolerant Navigator 

FTS Fault Tolerant System 

G&C Guidance and Control 

G-frame geographic frame located at the runway 

v 
I-frame earth centered nonrotating frame (Inertial-frame) 

lAS Indicated Airspeed 

[C's Initial Conditions 

IMU Inertial Measurement Unit 

L-frame vehicle carried (N.E.D) frame (Local Level frame) 

LRT Likelihood Ratio Test 

ML Maximum Likelihood 

MLS Micro~ave Landing System 

MTBF Mean rime Bet lI'4ee n Failures 

NFF No-Fail Fi lter 

P ,Q,R body rate 9yros 

RA Radar Altimeter 

Rng MLS range 

RSDIMJ Dual Fail-Operational Redundant Strapdown Inertial Measurement 

Unit 

TSRV Transport Systems Research Vehicle 

vi 
FINDS Proqrammer's Manual - INTRODUCTION 

1 INTRODUCTION 

This report provides detailed soft~are documentation of the digital 

computer program FINDS (Fault Inferrlng Nonlinear Detection System) 

version 3.0. FINDS is a highly modular and extensible computer 

program deslgned to monitor and detect sensor fai111res~ whi Ie at the 

same time providing reliable state estlmates. In this version of the 

program the FINDS methodology is used to detect, isolate and 

compensate for failures in Simulated avionics sensors used by the 

Advanced Transport Operating Systems (ATOPS) rransport Systems 

Research Vehicle (rSRV) in a Microwave Landinq System (MLS'I 

enviornment. It is 1 ntended that thi s report serve as a programmers 

guide to aid in the maintenance, modification~ and revision of the 

soft~are. 

Througho'.lt thi 5 manua I we have assumed that the reader has read and is 

familiar ~ith the contents of the follo~ing reports: 

1. FINDS: A Fault Inferring Nonlinear Detection System - User's 

Guide, NASA CR-172199, September 1983. 

2. A Fault Tolerant System for an Integrated Avionics Sensor 

Configuration, NASA CR-3834, 1984. 

3. An Aircraft Sensor Fault rolerant System, NASA CR-165876~ 

April 1982. 

The primary goal of thi'5 manual is to provide in depth documentation 

of the current version of the FINDS soft~are. To accomplish this 

goal, detailed descriptions are provided for the program's modules 

Ifunctlons, and subroutines) and their internal data structures 

jcommon block'5l developed by BBN. In addition, the contents and 

purpose of each disk file ~111 be examined along with the steps 

required to rebuild the library and executable tiles used by FINDS. 

Detai led information about the program's external data structure'5 

finput and output T'ilesi, as ~ll as information ~bout the program's 

overall structure and intended usage ~from ~ users point of vie~1 can 

be found in [11, and theretore ~ill not be covered in this report. It 

should be clearly noted that NOT ALL functlOn'5 and lnternal data 

strl.lctur,.,.'5 used by FINDS ~i 11 be descri bed in thi'5 report instead 

only those ~hlCh pertain to the simuldtion independent portion ot the pro~ram ~ill be considered. rhis approach ~as taken because the 

sim~lation environment in ~hich FINDS operates ~as originally 

1 
FINDS Programmer's Manual 

INTRODUCTION 

developed and supplied by NASA-LRC, and therefore it was felt the 

emphasis of this document should only be on the newly developed 

software. 

A secondary goal of this work is to provide a convienent mechanism for 

documentation information contained herein to be maintained and 

improved upon. Some of the problems associated with writing a 

programmers or users guide for a developmental computer program, such 

as FINDS, 1s that it a) is never quite comprehensive enough, and bl is 

obsolete soon after it is printed. This is true in part because 

developmental programs are never quite stable (i.e. they are 

constantly being modified as new provisions are added, or as "bugs" 

are found), and in part because incremental (i.e., as modules are 

written) documentation is seen by many to be both time consuming and 

fragmented - therefore it is not always done. This c·learly confounds 

the development process itself, S1nce only a few people know the 

"inner workings" of the program. In an effort to help alleviate some 

of these inherent problems~ we have written this programmer's manual 

in such a way that it can be re-created semi-automatically from 

specially commented source code and text files. The goal was to make 

it easy to incorporate changes which occurred since the last time a 

manual was created. To accomplish this, special command files and 

programs were created to generate files which could be processed by 

the Digital Standard Runoff text formatting program. In addition, all 

the figures and tables used in the manual were generated on an Apple 

Lisa personal computer (using LisaDraw software) - 50 they too can be 

easily modified and re-generated to account for changes to the code. 

The organization of this report ;5 as follows: Chapter 2 consists ot 

a comorehens;ve overview of the FINDS software, along with 

installation instructions. Chapter 3 provides detailed descriptions 

of the FINDS program modules, as well as an overview of some 

notational conventions used in the report. The internal data 

structures and a summary of the indexing schemes employed can be found 

in Chapter 4. Appendix A gives a list of specific hardware and 

software requirements (including a list of all supplied software). 

Appendix B contains the "rules" for formatting 'Source files and a 

description of how this manual can be automatically re-generated. As 

a further aid, a cross-reference list of all file names, common block 

names, module names, and other key words documented in this report can 

be found at the end of the report. 

2 
FINDS Programmer's Manual 

INTRODUCTION 

The following suggested reading of the manual is encouraged: 

General information and installation: 

1~2,Appendix A 

Complete reading: 

1,2,3.1,4.1, remainder of Chapter 3, and 4, Appendix A, and Appendix 

B. 

3 
FINDS Programmer's Manual 

SOFTWARE OVERVIEW AND INSTALLATION DETAfLS 

2 SOFTWARE OVERVIEW AND INSTALLArION DETAILS 

This chapter describes how the software is organized from the vantage 

point of the VAX 11/780 operating system. A user's perspective on the 

functional organization and other aspects of the FINDS software and 

its' utility programs are provided in (11. The chapter is organized 

in the following fashion: Section 2.1 gives an overview of the 

delivered software by reviewing the contents and intended purpose of 

each file supplied. (Note: For quick reference, Appendix A also 

prov1des a brief summary of these files.) Section 2.2 describes the 

steps nessesary to install (or rebuild) each of the programs. 

Automatic re-generation of the programmers guide is covered separately 

in Appendix B. 

2.1 Software Overview 

rhis section describes the contents and intended scope of each of the 

disk files WhlCh comprise FINDS and its associated utility programs. 

A complete list of all the delivered software, as well as the specific 

hardware requirements, are described in Appendix A. Detailed 

descriptions of the individual modules contained in each file can be 

found in the next chapter. 

ft is convenient to assume that the operational software is stored in 

a main directory which will be called the FINDS directory. The 

organization of this directory is straightforward. rhere are four 

executable programs in the directory - each requiring FOR, OlB, C(~, 

and/or OPT files for their creatlon. The four executable files are 

detailed below: 

DOC.EXE 

FINDS .EXE 

PLOTD.EXE 

PRINTD.EXE 

A program to extract specially formatted and embedded 

documentation from Fortran (or Ratfor) source 

files (see Appendix B for a description of its use). 

FINDS version 3.0 simulation program documented in 

this manual and in (11. 

Program to plot the time history output, generated by 

FINDS, on a Tektronix 4010/4014 or compatible terminal 

(see (11). 

Program to print the time history output, generated by 

FINDS, in tabular form on either the users terminal or 

a disk tile (see (1]). 

4 
FINDS Proqrammer's Manual 

SOFTWARE OVERVIEW AND INSTALLATION DETAILS 

The FINDS directory contains a single library file: 

FINDSLIB.OLB- Uti litylibrary built using the FINDS sources (FORTRAN 

files). 

Several command and linker option files can be found in the FINDS 

directory. Command files (extension = COM) are used to automate the 

building and maintainence of FINDS. As ... ill be seen in the next section~ a by-product of using command files is that it simplifies 

transporting the soft ... are to other VAX or users sub-directories. Li~ker options fnes are used at -link time to specify ho ... to bui ld an 

ex,ecutable image. The command and linker ootions files are summarized 

below: 

FINDSC.COM Properly compiles all the FORTRAN source tiles .-.hich 

are used by FINDS. 

FINDSL.COrvl Proper'ly links together the object and library files 

to produce FINDS.EXE. 

FINDSLlB.COM - Compiles the source files and builds the library file 

FINDSLIB.OLB GETDOC.Cl~ Automatically gets the latest documentation 

from all FINDS routines (see Appendi,x B for 

more information). 

FINDSPG.C(1v1 - Automatically bui Ids a new FINDS programmers 

guide (see Appendix B). 

PLOTO.OPT Linker options tile for PLOTD 

PRINTD.OPT - Linker options file for PRINTD 

FOREI6N.C(1v1 - Establishes useful logical and symbolic names 

2.2 Installation Notes 

fhe following steps are required to in1tially install the FINDS 

soft ... are: 

1. (oPY a 11 tiles trom magnet1c tape onto a suitab Ie VAX di sk 

dirjOoctory US1ng the VAX/VMS Backup utility. Let's assume 

this directory 1S named "finds" tor the subsequent 

discussions. 

5 
FINDS Programmer's Manual 

SOFTW4RE OVERVIEW AN) INSTALLATION DETAILS 

2. Edit the file "foreign.com" and correct the directory names 

referenced 50 that they point to directory (finds]. 

3. Type 

$ @foreign.com 

to install the logical names and symbols. rhese will be will 

be used subsequently. (This step can be made part of the 

user's login.com file if these symbols are used frequently.) 

4. Compile all FORTRAN sources: 

$ @findsc 

$ compile plotd 

$ compile printd 

5. Create the FINOSlibrary file findslib.olb: 

$ @findslib 

6. Create the executable files: 

$ @finds 

$ link plotd/opt 

$ link printd/opt 

7. Generate all the required input data files required for 

running FINDS using the text editor. (See (1] for detailed 

directions on how to create these files.' 

8. Run FINDS by typing: 

$ finds 

9. Run the graphical analysis tool PLOTO by typing: 

$ plotd 

10. Run the tabular examination tool PRINTO by typing: 

$ printd 

Once the software has been installed, incremental changes can be made 

as follows: 

1. Jllbdi fy a Fortran source file. Be sure to update the embedded 

documentation. 

6 
FINDS Programmer's Manual 

SOFTWARE OVERVIEW AND INSTALLATION DETAILS 

2. Con~lle It. (e.g. $ compile filename) 

3. Update the library file (this step is required for files 

futsub.tor, fvmsub.ror, and fiosub.for.) 

$ update filename 

4. Re-build FINDS 

$ @finds 

For instructions on how to generate and maintain the programmers guide 

see Appendix B. 

7 
FINDS Pr09rammer's Manual 

MODULE DESCRIPTIONS 

3 M)DULE DESCRIPTIONS 

The t'ollowing sub'3ections contain detailed descriptions of FINDS 

routines, organized according to source files (refer to Chapter 2 for 

a list of supplied fi les). The first '3ubsection reviews some of the 

notational shorthand used in the descriptions. rhe second subsection 

contalns a brief description of the contents of each file, containing 

a statement of the name of the source file, a description of the 

nature of its contents, and then a list and short synopsis of each 

subroutine it contains. The remaining subsections contain more 

detailed descriptions of each subroutine many of which have 

companion flowcharts. Each such description contains a statement of 

the subroutine function, a sample call, and a description of the 

required arguments in the form: 

name type in,out, or inout units description 

These are followed by a list of all other routines called, all 

routines which reference it, and all common blocks used by the 

routine. Full descriptions of most of the common blocks can be found 

in Chapter 4. 

3.1 Some Notational Conventions 

In order to condense the textual descriptions 

adopted various '3horthand notations. This 

conventions. 

and flowcharts we've 

section ltemizes these 

In c;pecifying the argument descnptions we've assumed the following: 

Variable type can be: 

integer 

real 

double 

logical 

char 

char"'n 

byte 

Um ts can be: 

lnteger"'4 

real*4 

rea 1*8 

10gical*4 

character*(x) 

character"'n 

10gica'I*1 

a standard engineering unit or 

• unitless - no units (i.e. a cardinal or pointer 

8 
mixed 

temp 

string 

index) 

FINDS Programmer's Manual 

MODULE DESCRIPTIONS 

various units (usually used for 

vectors, matrices, and scratch areas) 

temporary, i.e. units vary 

ASCII characters 

Arrays (matrices and vectors) are usually specified by upper case 

names. Both upper and lOHer case are often used to aid in 

interpreting the mnemonic used. The folloHing shorthand notation is 

used Hhen discussing arrays or equations involving arrays: 

A( i, j) 

V( ; ) 

A[i 1c 

A[i1r 

A[ i : j 1c -

A[i:jlr -

A*B 

a*b 

the i,j'th element of the matrix A 

the i'th element of the linear array V 

the i'th column of the array A 

the i 'th rOH of the array A 

the submatrix comprised of the i'th through 

j'th columns of the array A 

the submatrix comprised of the i'th through 

j'th rOHS of the array A 

matrix multiplication of A and B 

scalar multiplication of a and b (Note:loHer 

case usually implies a scalar variable) 

The floHcharts contained in this manual are not meant to be comolete 

descrlpt.lons of the routines. Instead, they are intended to enhance 

the reader's understanding of the softHare's structure and to 

highlight the softHare techniques employed. As such, they should be 

used in conjunction Hith the Hritten documentation and commented 

source code itself. For example, one particular floHchart may ShOH, 

by detailed enumeration, hOH the internal data structures are used, 

Hhereas in an other case a top-level functional floHchart Hill be 

presented to highlight an important theme. 

Most of the symbolic notation used in the floHCharts are described in 

Figure 1. Notation inside subroutine boxes may contain the folloHing: 

the box can contain the subroutine name, 

the subroutine name and its arguments, or 

the subroutine name and a key argument. 

As a gfOoneral rule, alHays refer to the Hritten documentation for the 

correct calling sequence to use. Array indexing conventions are 

described in Chapter 4. 

9 
1he begiming of a process (Sltlroutine) 

An 110 box 

performs the indicated 

1f1)Ut cn1Ior outpJt operations 

6 

An or IpaQe carector 

An instruction box 

performs operatioos 

called for in the box 

(EXIT) 

1he End of a process (Sltlrout1ne) 

or, 

Decision boxes 

exits are labeled crId one route is 

taken depeI ~irg on the result of 

the conpJtat1on ind1cated in the 

box 

An offpage comector 

&.tJrout1ne bOX 

perfOrms operatiMs via the 

StiJrout1ne raned in the box 

Figure 1. Oef1n1Um of Flow Dtagrcm Synmls 

10 
3.2 Brief Summary Of Contents By Source File 

name: FMAIN.FOR 

FINDS Programmer's Manual 

MODULE DESCRIPTIONS 

cont: fhis file contains the main simulation program which 

orchestrates the execution of FINDS. 

subr: FINDS: (program unit) fop level simulation program 

INITAL: initializes several basic simulation quantities 

SET: initializes constants (such as conversion 

factors) used in FINDS 

name: FSFDI.FOR 

cont: rhis fi Ie contains all the "core" routines necessary to 

imp·lement the FINDS fault tolerant navigator and FDIR 

software. As such, these routines roughly represent 

the simulation independent portion of the program. 

subr: NAV - fault tolerant navigator - orchestrates the operation 

of FINDS FTN and FO[R functions 

INrTG - general initialization for FINDS 

[NIfF - perform initialization specific to the no-fail filter 

STARTF- start-up procedure for the no-fail fi Iter, i.e. 

choose initial conditions 

SUMIN - forms the input vector to the no-fail filter 

SUMOUT- forms the measurement vector for the no-fail filter 

GYROCR- compute compensation for the rate gyros due to 

the earth's rotation 

GTOI - compute inertial quantities from ground based, 

estimates 

CKUNST- check the no-fail filter estimates for divergence 

KALMN - executive routine to implement an extended Kalman 

filter using a bias filter decomposition EKFNl - bias-free portion of the extended Kalman filter 

BIASF - bias portion of the extended Kalman filter 

BLEND - blend the bias and bias-free states and covariances 

together to form the total no-fail filter estimates 

BLGAIN- compute the blender gain SETISN- update a count of the current number of sensors 

used by the no-fail filter 

CHKRAD- check for switch over to radar altimeter, and 

11 
FINDS Programmer's Manual 

Summary of contents by source file 

UPDA - UPDAB -

UPDB - UPDQ 

UPDH - UPDPH - DETECTLKF -

LRT -

DEC IDERECONFCLPSIONOISR -

RESCMPFILCOLCLPSBEADSTBPRCOV -

MINSETreconfigure the no-fail filter at switch over time 

update the discrete state transition matrix 

update the discrete state transition matrix to include 

the coupling due to the biases 

update the discrete input matrix 

update the discrete process noise covariance matrix 

update the non-linear measurement function 

update the partial of h[x(k)l w.r.t. x(k) 

implements a bank of detectors and likelihood ratio 

computers 

first order linear Kalman filter - used to estimate a 

hypothesized failure'S level 

computes a log-likelihood ratio 

performs failure decision functions 

reconfigures the FTS after failures and/or healings 

collapse (expand) the no-fail filter to reflect 

failure (healing) of a sensor 

reset elements in the no-tail fil ter process and 

measurement covariance matrices to reflect the 

loss (addition) of a sensor 

compute the expanded residuals sequence from the 

(collapsed) innovations sequence produced by the 

no-fail filter 

estimate colored MLS noise states (used to compensate 

the innovations sequence to account for its colored 

statistics) 

collapse (expand) the bias estimator to reflect the 

removal (addition) of a bias 

adjust (manage) pointer vectors used in the bias 

estimator 

reset the no-fail filter state estimation error 

covariance after FDI of a failure 

check to be sure filter will remain stable after 

a candidate sensor is removed 

HEALR - monitor fai led sensors and test t'or healing 

AVECMP- compute the sum of the difference between two like 

sensors over the healing window 

LRTHLR- compute a LRT for the healing of a sensor at the 

end of the healer windows 

CONVRF- returns the conversion factor required to convert 

from program to user (printout) units tor a particular 

no-fail filter state or sensor 

AVBIAS- computes the average measurement bias as seen by 

the no-fail filter 

12 
FINDS Programmer's Manual 

Summary of contents by source tile 

name: FGA.C • FOR 

cont: fhis file contains routines used to simulate the aircraft 

and the guidance and control logic used in the aircraft. 

These routines were originally part of program FILCOMP. 

subr: ACEQIN- integrate the alrcraft equations of motion ahead 

name: 

cont: 

subr: 

one simultion step 

AUTLD - auto-land control laws 

AUTTHR- compute throttle commands 

BANKTR- RNAV guidance and control outputs i.e. commands 

to guide the aircraft before AUTLD takes over 

CNTRLS- generate the control siqnals using either true 

(i.e. simulated) or estimated quantities 

ESTPNP- compute estimates of waypoint quantities and store 

them in EWP 

RUDDER- dynamics for the rudder servo and yaw rate damper 

SERVO - elevator and aileron servo dynamics 

STABCN- stabilizer trim control logic 

THRUSD- engine thrust dynamics (accurate above 10 degrees 

throttle setting) 

WAYPNT- compute all data for waypoint segment planning 

FWIND.FOR 

Contains routines used to simulatp. the wind and gust 

environments to which the aircraft wi 11 be subjected. 

BREEZE- computes shear winds. calls WINDGT to qenerate gusts 

and sums the wind components to form the total winds 

GROUNE- computes the effects ot ground proximity - called 

ground effects - as incremental terms added to pitch~ 

1 ift, and drag 

WINDGT- generates gust components which are added to u,v,w 

and P,O,R terms in the aircraft simulation 

13 
FINDS Proqrammer's Manual 

Summary of contents bv source flle 

name: 

cont: 

subr: 

name: 

cont: 

subr: 

FSENS.FOR 

rhlS flle contains all the routlnes used to simulate the 

n')rma I operat10n and the "tailed" behavior ot sensors and 

sensor sub-systems in FINDS. All sensors contained ln 

thlS file can be simulated with up to triple redundancy - except for the RSDIMJ. The reader can find detai led 

descriptions on how each sensor is simulated and how to modif~ the parameters of these modules in section 3.3 of [1]. 

RADALS- radar altimeter sensor module 

AIRSPS- indicated airspeed sensor module B~GS - fl1ght quality body mounted rate gyro sensors (P,O,RI 

BM..AS - flight Quality body mounted l1near acceleromete~' 

sensors (Ax,Ay,Az) 

ATITGS- platform INS attitude outputs tphi.theta,psil 

.;ETrvLS- microwave landinq system sensor r azimuth.elevation. 

rangel 

RSIMJS- redundant strapdown 1MJ sensor rRSDIMJ). This routine 

is an executive routine for the RSDIMJ. 

IRATGl- initialization for the RSDIMJ rate gyro module 

ILN,LI(1- initialization for the RSDIMJ linear accelerometer 

module 

CLNAVl- initialization for the RSDIMJ navigator module 

UNACl- RSDIMJ linear accelerometer module 

LLNAV1- RSDIMJ naviqatlon module 

RATEGl- RSOIMU rate gyro module 

FIO.FOR 

This tile contains routines used to save simulation data 

in speclal formats on disk files, along with routines to 

help perform this function. 

SAV1T - saves FINDS time history data in the (binarY) PLT 

file in a sequential. run-time user selectable fashion 

PRNTIC- print the run's initial conditions - in special 

table form - on any ASCII disk file 

FSCHED- determine, for a part1cular sensor. the t1me. type. 

and level of failure if simulated 

CHkFL - check if a sensor is scheduled to fail in the run. 

and return the time and type ot the scheduled failure 

FLEVEL- determlne the failure level of a scheduled failure 

OUTDAT- print out a one line message followed by a formatted 

14 
name: 

cont: 

subr: 

FINDS Programmer's Manual 

Summary of contents by source file 

printout of a scaled vector (scaled by a supplied 

conversion factor) 

fLOUT - print an "event" in a special coded torm (described in 

section 4.2 of [1]) in the time line (.TLN) file 

FUTSUB.FOR 

This file contains a collection of "utility" routines 

which are generally specific to the FINDS program 

ABSLIMACCVELROTATVROT~TRUNGK3-

RU~YSETLM - VECM - VECS -

VECSUMMATV3 -

MATTV3-

MATMJLMOVlJv1 -

DGATIOSlM"ERASUMERMAXMINabsolute limit - i.e. two-sided limit about zero 

compute G-frame velocity and acceleration terms 

rotate inertial pos. and vel. vector to the E-frame 

computes various frame transformation matrices 

performs Runge-Kutta integration 

computes A/C position and velocity vectors 

relative to G-frame 

sets a scalar into all elements of a vector 

multiplies two vectors - element by element 

multiplies two vectors - element by element and 

increments the first 

adds to vectors 

multiplys a 3 by 3 matrix times a vector 

multiplys the transpose of a [3 x 3] matrix 

times a vector 

multiplies a matrix times a vector 

equates two arrays 

prints out a double precision matrix 

computes the conditional average sum of an array 

comoutes the conditional average sum of an array locates the maXlmum and minimum elements 

in an array 

MAXMINS-same as MAXMIN - except single preclsion version 

MXMN2 - same as MAXMIN - except elements are conditioned 

on a non-zero element in a second array 

VECHGl- collapse or expand a vector 

MATCG2- collapse or expand a matrix 

IMTCG2- adds or deletes rows (columns) of matrices 

PNTINV- pointer vector inverse 

LIMVAL- vector limiter for symmetric limits about zero 

LIMVL2- limiter for ant;-symetric two-sided limits 

NOISEG- generates samples from a normal distribution 

15 
FINDS Programmer's Manual 

Summary of contents by source file 

name: 

cont: 

subr: 

with zero mean and unity variance 

BARN1 - genertes samples from either a gaussian or a 

uniform distribution 

GAUSS - gaussian random number generator UNIFR~ uniform random number generator 

NAMFIL- forms a file name with a fixed name and various 

extensions 

F~SUB.FOR 

This file contains routines which perform operations on 

vectors and matrices. Unless explicitly stated, all 

routines operate on double preslsion quantities. 

BUBBLE- perform bubble sort on an array of integers 

DOT - compute dot (or inner) product between two column 

vectors 

DOT2 - computes dot product of two row vectors 

DOT3 - computes dot product between a row and a column 

vector 

VADD increments a given vector by a second vector 

VADD1 - increments a given row vector by a second row 

vector 

VSCALE- sets one vector equal to another times a scale 

factor 

SEONCE- initializes an integer array as [1,2, ••• Nl 

INSRTN- maintains a pointer vector (integer) with 

unique entries 

VECNULS-initializes a column vector to zero (single 

precision) 

VECNUL- initializes a column vector to zero (Double 

precision) 

SWAP - Swaps a row, column, or diagonal between two matrices ~T1 - multiplies a vector by a matrix Y=AX ~T2 - computes the vector matrix product sum Y=Z+AX 

GMINV computes the inverse or generalized Penrose 

inverse of a matrix 

MMUL - computes the matrix product Z=XY (with sparseness 

test on X) 

MMUL2 - computes the matrix product Z=XY (with 

sparseness test on Y) 

MATl - computes the matrix product Z=XY 

16 
FINDS Programmer's Manual 

Summary of contents by source file 

MAfiA - o:mmutelj tilt' Illdtrh: oroljUft Z=~;¥ IZ can el]wjl it 

MAT2 - computes the matrix product Z=XY ' (tor Z 

MAT3 -

MAT3A - MAT4 - MAT5 -

symmetric) 

computes the matrix product 

computes the matrix product 

computes the matrix product 

computes the matrix product 

sparseness test on Y) 

Z=XYX' 

l=X'YX 

Z=X'Y 

l=XY' (with 

MAT6 - computes the matrix product Z=XY' (with 

MADDl -

MADDI - EQUATEMATNULMSCALEfRANSlsparseness test on Y, and l symmetric) 

adds two matrices 

adds a scaled matrix plus a scaled identity matrix 

equates one matrix to another 

initializes a matrix to zero 

scales a matrix by a scalar constant 

computes the transpose of a matrix 

17 
FINDS Programmer's Manual 

Summary of contents by source file 

3.3 Detailed Descriptions Of FINDS Routines 

3.3.1 Documentation For File: FMAIN.FORname: FINDS - (Main Program) 

Detection System" 

func: Th1s program unit is responsible for coordinating the run-time 

operation of the program. fhe overall purpose and use of the 

program - from a users point of view - ;s documented in detail 

in (11. To show the overall scope and flow of the program a 

functional flow diagram 1S shown in Figure 2. fhree stages of 

the program are eV1dent in this figure: * an initialization stage - designed to initialize all 

variables and routines and to establish all disk file 

interactions 

* a basic simulation loop - whose purpose is to continually 

compute the current control signal over the next simulation interval~ integrate the A/C equations of motion. simulate 

the Ale and sensor subsystems, and exercise the FINDS FOI 

and estimation algorithms until a stopping criteria has 

been satisfied. 

* a termination stage - once the simulation loop has 

satisfied its stopping criterion, the program is gracefully 

terminated. 

Figure 3 provides a much more detailed and annotated flow 

diagram which clearly shows how program FINDS operates. 

ref: ACCVEL. ACEOIN, AIRSPS, ALTYP, ATITGS, AUTLD, AUTLDI, AUTTHR, 

BANKTR, BMlAS, BMRGS, BREEZE, CNTRLS. CTEXT, GETMLS, GROUNE. 

INITAL, ISPEC, MATMUL, NAMFIL, NAV, OPN2, PAGEFD, PRNTIC, 

RADALS. ROTATV. ROTMAT, RSIMUS. RUDDER. RUNGK3, RUNWAY, SAVIT, 

SERVO. SET. STABCN, THRUSD, TLOUT, w[HDR1 

Also from the VMS libraries: ASIN~ CLOSE, DATAN2, DCOS, DSIN, LIB$FLT_UNDER, 

LIB$INIT_TIMER. LIB$STAT_TIMER. OPEN. SECNOS 

comm: ALPCOM. ANGLES. ANGS. ARSTAT. ATMO, AZELRN, COEFGE, CONTRL. 

CPU, CRTE. DROP, EARTH. EGUIDE. EKF1. FCOMI. FC0M2, FILNAM. 

FLTCTL, FTITL1. GEARLD. GSLOPE. GUIDE. HICOM, ICLALO. lEST, 

IMlS, INOU, ruvw, LAND, LAOUT, LOGIC4, MeONCO. MLSALL, MlXYZ, 

18 
FINDS Programmer's Manual 

Documentation For File: FMAIN.FOR 

NAVINF, NWPLT1, PHILLV. PLOT§~ PORT~ PORN~ P§IR~ O~AND~ 

RGUIDE, RIOUT, RSTATE, RUNGEK, SETCOM, SIGTAU, SIMCOM, 

SNSIDT, SNSRDT, SPCFOR, START, SYNC, TRANS, TURN, TURNOF, 

UPDAT, VARLAT, VARLON, VORTAC, WIND. WINDCO, WP, XOVOZO 

19 
no 

Fl~re 2. FLIlCUooaI FIO\tJ Dlagrcm for Progrcm FINJS 

20 
START 

accept a randorl I'IUftber seed, 

JRfII), frOli the flY and force 

1 t to be and odd I'IUftber 

initialize glideslope 

paraneters 

Figure 3. Flow Diagnm for Prognm FlJ'.DS 

21 
Ale ini:::rs 1 .............. )tL-J.. __ --r ___ .L.J 

initialize ! 

winds i············#· CCRpUtation ~ L-J.. __ ~ ___ .L.J 

trift ~ 

initialization I··········lt. for SUlbilizer ~ L-J.. __ ~ ___ ..L.I 

t ......... . 

Detemine initial 

pos , velocity 

in inertial , Nrth 

franes 

Establish in! tial 

Rotate accelerations 

to L-fr8111 met 

conpute Ale pos 

in C-fr8111 

initialize alto 

land control 

logic I .L-J.. __ ---,,..-__ ....1...J 

initialize bank ~ 

turn and course ~ ........... ' 

waypoint 1000c 1. l..L. ___ ....-__ -W 

~--~~--~ 

~···············tu: top of najor 1 

siftulation f' ". ", loop ., .. 

.. ;to. 

INITIALIZA TICN 

.~ + :~lm~!ilillll!l!Im!illll~!Im!1I8I!883m 

Conpute CU 

signalS using 

fault toler .. t 

navigator quantities 

~ ....... ~ 

~ 

. ;. ""' .. J auto-Ievel . /' ~ control /'~. i laws 

I 

stabilizer 

trin control 

logic 

.......... ~ 

.. ':): 

..... * 

throttle 

control 

law 

Figure 3. Flow otagrcm for Progrcm FJto.I)S (cont1rued) 

22 
thrust. ~ 

dyMnics ; ...... W---r--_ ...... 

rudder servo 6 I 

Y. rate darIper t····* 

dyMId.cs ~ 

elevator (; :; 

aileron 1 .... e. 

servo dyMId.cs; . 

no 

yes 

~ .............. i. ground effect L...L. __ -.-___ ..... i conput.ation 

(;::~: ......... ~ 

in the out file 

record varia,les 

in the Pl T file 

Figure 3. Flow Dlagnm for Prognm FINJS (contlrlJed) 

23 
~ E. 1··········~r-r----L---r"'1 ....... :1 _.uN cO'III0llents '\ 

integrllte Ale 

equations 

of Mtion 

increnent tine 

. 

I···········~· ~ 

f············~· 

Establish various 

true quanti ties 

by equating to 

the Ale state 

rot4lte velocities I ... ", .... :". 

and accelerations C L....I-__ ---r-__ ....l..J 

to loc:al I", .. level tr_ 1 "' .. ':1{.,. L-L... ___ ---'-' 

update the l 

nn.ay post tion t···········~l , L....I-__ ~ __ ....l..J 

Establish true 

~ qumtities 

Conpute true 

body specific force 

Figure 3. Flow D1agrcm for ProgICm FINJS (cootlrued) 

24 
body now'Ited ¥ . ~ .......... ~. 

rate gyroes ~ 

~=tecI ~ .......... ~ accelerOMters ~ 

platfom 

mu 

radar altifteter I·········<l>' 

~ 

~=t········r.~ r. '""'"-----,----"'-, ....... ,. " .. , ..... ! siftUl.ate the RSOmU? 

siftulateAlC 

sensor systeM 

continue at 

top of 

sinulat.ion loop 

.*" .. r 

~ 

-e~ ......... ~ RSOmU U-____ ~-------'-' ~ ~. 

"FIJI)$-

i fault tolermt + ... ,: navigator ~ 

J._~=====:r-_-J..J I FOI logic , 

Figure 3. Flow Diagram for Prognm FJN)S (cmtinJed) 

25 
~---.----'-' 

"'···f close PI.. T file 

STOP 

Ft~ 3. FlOW Dlagrcm fOr p~ FINJS (concll.Kbl) 

26 
name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

ca 11 : 

args: 

refs: 

refby: 

comm: 

INITAL 

FINDS Proqrammer's Manual 

Documentation For-File: AMAIN.FOR 

fo initialize several program variables - mostly related 

to the guidance and control algorithms. Originally, (in 

program FILCOMP) INITAL Nas intended to initialize case 

independent quantities - hONever, since FINDS doesn't alloN 

multiple cases in the same physical run, no such distinction 

is made in FINDS. 

Ca 11 INITAL 

None 

None 

FINDS 

COEFGE. CONTRL. LOGIC4. SYNC, WINO 

SET 

To initialize various constants (such as conversion factors) 

and program flags used by FINDS. Originally, (in program 

FILCOMP) SET Nas intended to intialize case dependent 

quantities - hONever. since FINDS doesn't alloN multiple 

cases in the same physical run, no such distinction is made 

in FINDS. 

Call SET 

None 

None 

FINDS 

ALPCOM. ANGLES, ATMO, CONTRL. EARTH, FCOM1, FCOMe, GEARLD, 

HICOM, lEST, MCONCO, NAVINF, NWPLTl, PHILLY, PLOTS, SETCOM. 

SYNC. VARLAT, VARLON, WIND, WINDCO 

27 
FINDS Programmer's Manual 

Documentation For File: FMAIN.FOR 

3.3.2 Documentation For File: FSFDI.FORname: NAV (fault tolerant navigator) 

func: rhis subroutine ;s an executive program which implements a 

fault tolerant navigator using the FINDS approach. It is 

responsible for initialization_ synchronization, and 

execution of all the modules comprising the FTN and FDIR 

logic. Figure 4 shows a detailed flow diagram indicating 

its operation. 

ca 11: Can NAV lIabort) 

args: {abort - integer out flag indicating whether to 

continue or abort the run. If Iabort=O continue the 

run; otherwise abort. 

refs: CHKRAD, CKUNST. DECIDE. DETECT, F1LCOL. GT01, HEALR, INITG. 

KALMN. LIB$INIT_TIMER, LIB$STAT_TIMER, PRNTIC. RECONF, RESCMP 

SUMIN. SUMOUT, TLOUT, WAYPNT 

refby: FINDS 

comm: CMPSTF, CNTROL, CPU, DCIDEI, OETINF, EARTH, EKBFO, EKFl, 

FCOMl, FILTRT, FLTCTL, GBLENO, IMLS, INOU, MAINl, MAIN2, 

PHILLY. PLOTS, SIMCOM, SYSUl, SYSXBO, SYSYBO, SYSXWl, SYSXl, 

28 
execute full FTS 

.* ....... ; force single entry L...L __ ~ __ ~w ( 

I 

~ ~ 

I :l (. 

~ \; 

i ......... ) initialize FTS except i L...L __ --... ___ LJ ~ for IFF IC's ~ 

~-------~ ~ 

exi, t routine prior 

to nLS tum on 

.:i~ .... .) synchronize nLS turn-on .. i and enter this loop only once 

~,} .... ~; initialize 

; IFF IC's: 

initialization 

perforMd 

during progr8f'l 

ini tialization 

st.age only 

~ record filter ·~i~······1 turn-on in 

ini tialization 

perforned 

only at 

L...L.---r----J....i ~ tine of lUI file 

,,;;, ...... :1 print out 

~----===::::::::r-----'-I . ~ filter IC's 

i exit routine if .::~: ....... : IUl starts inside 

i nlS coverage 

.:.:< .; execute FTS 

~: without FUIR fln:tion 

Fig.Jre lL Flow Diagram for Stmootine NAV 

29 

nlS 

turn-on 
~ .... J check for r.m L...&... __ --.-__ -w I alt1neter tum-on 

~ ........ ! reconfiguration to acauJt 

L-L----r--__ ...J....J I for healed sensors 

>-no~.[!» .~ ....... I prob18l'l1 ... exit routine 

~······l fom if1IUtS to IFF L...&... __ -. __ ~~ l 

. ~ IFF' ·······1 propagate est.iJNltes L...L.. __ ...,-__ ~ 

i , ········l conpute expSMIed residuals 

L...L..---r--~ j 

·······1 nil colored 

noise filters 

~ ....... ! nI'I bank of failure detectors L...L.. __ .,-__ ~' l and LR CORpUtations 

~ ........ ~ MIce failure decisions 

~---r--~~ " 

········1 roo sensor healer looic 

...... ...! reconfigure FTS to 

L-L-----r------JL....J. i reflect failures 

>--------""")D ..... -:««<<<<<.:~-':<.:(.;«<~-:<<<<<<<<<<<<<<<<<<<<-wx<<«o:<<<<<W. .. -.: 

problens1 ... exit routine 

Figure 4. Flow Dlagnm fOr SltJroutine NAV (contlnJed) 

30 
EXIT 

~,.,:,,\ full FTS logic (continued) :. 

........ -_......-_----Ju 

.nol, ....... ~ forn ftNSUrenents ... : ~ to NFF 

.. ·····l ~ IFF > 

:s COftPUte est.iMted :~ "':j inertial quantities :. and required 

~ control signals 

i check state 

·+··1 estinates for '-'-_----,,....-__ .....L...J 1 filter divergence 

printout the filter 

gains every 

I~ -ticksFi~ 4. Flow Diagrcm for SlJlroutlne NAV (~luded) 

31 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

name: INITG 

func: Performs initialization for the FTS soft~are. In particular. 

the no-fail filter, failure detection isolation and 

reconfiguration modules are intialized here. In addition, 

program flags and data structures are intialized ~ich 

determine the structure of the FTS. These flags are 

modifed via namelist FILTIN. ~hich is read in this routine. 

call: Call INITG (Ipart) 

args: Ipart - integer in flag to indicate ~hich part of the 

intialization is to be performed. If Ipart=1 all 

initialization except for determining the initial 

conditions of the NFF is performed. Other~;se the 

NFF IC's are chosen 

refs: ALTYP~ BUBBLE. CONVRF, EQUATE, GTOI, IMSCLE, INITF, MTH$DLOG 

SEOUNCE, STARTF, SUMIN, SUMOUT. UPDA, UPDB 

refby: NAV 

comm: AGMP. ARMP. ARSTAT. ASMP. CMPSTF, CNEST, CNTROL. COLFIL. 

RIOUT ~ 

name: 

func: 

DCIDEI, DETINF, DETSIG, DETXBI, DETYBI, EARTH, EKBFO, EKF1, 

FCOM1. FILTIC, FILTRT, FLTCTL, FTITL1, GBLENO. GRMP, HEALCM, 

HFCOM, IMLS, INITVL, INOU, LAMP. LOGCI4. MAIN1, MAIN2, MCONCO, 

MLSALL. MLSMP. MULTDT. NWPLT1. PLOTS, PSIR, RALMP, RGMP, 

SENSCM, SETCOM, SIGTAU, SIMCOM, SYNC, SYSU1. SYSX1, SYSXBO. 

SYSYBO, SYS~l, VARLON, WINO. XOYOZO, YOBSRV, 

INITF 

To initialize the EKF's measurement and process noise 

covariance 

matrices, RF1 and QF1 respectively, and the measurement 

normalization scaling vector Yscale. The quantities are set 

as follo~s: 

a) process noises: 

* if using the "standard" 

QF1(i) = sig(;)**2 

* or if using the RSDlMU 

OF1(i) = sig(17)**2 

OF1(i) = sig(18)**2 

QF1(i) = sig(i)**2 

b) measurement noises: 

sensor set (i.e. 

for 1=1,..8 

(i.e. irsdf=O); 

for ; =1, ••• 3 

for i =4, ••• 6 

for i=7,8 

RF1(i) = sig(i+8)**2/n for i=1, .•• 8 

32 

irsdf!=O) 
call: 

args: 

refs: 

refby: 

comm: 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

where n=Ireplf fi+nu1) i.e .• the number of replications of 

a particular sensor type currently in use by the EKF. 

c) scaling vector: 

* if IYSC=O then Yscale(i)=1.0 for i=1, ••• 8 

(i.e. scaling is disabled) 

* otherwise 

Yscale(i) = 1.0/SQRT[RF1(i)1 for 1=1, ••• 8 

Call INITF 

None 

None 

INITG 

DETXBI. FILTRT. FLTCTL. SIGTAU. SYSU1. SYSYW[. YOBSRV 

name: STARTF 

func: To initialize the no-fail filter's state estimates and 

initial error covariance. This is accomplished as follows: 

choose the initial estimation error from a random 

distrlbution, s.t. 

1) XICerr(i) = SDXic(i)*s for i=1.NX 

where 5 is a sample from a normal distribution with 

mean=O and variance=1. and SDXic is a vector of expected 

standard deviations 

2) set XF1(i) = Xt-XICerr(;) for 1=1.NX 

where Xt represents the "true" or simulated value of 

XFll 1 ) 

3) initialize the bias-free filter covariance. PF1. and 

the total no-fail filter (bias & bias-free) filter 

covariance, PXF1. to be diagonal matrices with diagonal 

elements: 

PFl ( i , i) = PXFl ( i , i) = SDPi c ( i ) **2 

where SDPic is a vector of standard deviations for the 

initial filter covariance 

Note: SDXic and SDPic are in user units. therefore this 

routine also performs conversion to program units 

call: Call STARTF 

args: 

refs: 

refby: 

comm: 

None 

NOISEG 

INITG 

ANGLES. AZELRN. CMPSTF. EKF1. FILTIC. MAIN1, MCONCO, PSIR, 

ORAND. SYSX1, UPDAT, VARLON. WIND 

33 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

name: SUMIN 

func: To provide a proper set of inputs to the no-fail filter. 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

The input vector presented to the no-fail filter is formed 

by SUMIN as follo~s: 

1) each group of like replicated input sensors is broken do~n into 3 classes; available & used by the filter~ 

available, but in standby; and failed. SUMIN further 

restricts only a single replication to be active. ~ith 

all others placed either in standby or detected as failed. 

2) rate gyro measurements are compensated for earth and 

platform rates 

3) the input vector, UFl, is formed such that trapezoidal 

integration ~il1 be performed by the no-fail filter 

(i.e. U(k) = O.5*[u(k)+u(k-l)]) 

4) the gravity vector is computed and added to the end of 

UFI such that UFI is composed of: 

UFI = [Ax,Ay,Az,P,Q,R,Gx,Gy,Gz]' ~here (Gx,Gy,Gz) is the gravity vector expressed in the 

G-frame 

5) if any input biases are being estimated. their current 

estimates are subtracted from the NFF input measurements, 

UFI 

Call SUMIN 

None 

GYROCR, SUMMER, VMPRT 

INITG. NAV, RECONF 

EKBFO, FILTRT, FLTCTL, GRVTYC, LAOUT, MAINl, MCONCO, RGOUT. 

RIOUT, SYNC, SYSUl, SYSXBO 

SUMOUT 

SUMOUT forms a set of average measurements, YFl; to be used 

by the no-fail filter. It functions as fol1o~s: 

1) each group of like replicated sensors is classified into t~ sets~ available and to be used by the filter; and 

unavailable, failed, or selected out 

2) each element of YFI is averaged as: 

YFl(*) = (1/nr)*[m(I)+m(2)+ •• m(nr)] ~here nr is the number of available, replicated 

measurement sensors. and m is an arbitrary measurement 

3) psi measurements are compensated for any run~ay ya~ by: 

34 
call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

YF1(7) = YF1(7) - PSIRU 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

where PSIRU is the runway yaw to north expressed in 

radians 

4\ if IYSCL.NE.O then each measurement is normalized bv the 

expected variance of that signal. s.t. 

YFl(i) = YF1(i)*Yscale(i) 

where Xscale is set in subroutine INITF 

Call SUMJUT 

None 

SlJlt1VER 

INITG. NAV 

AGOUT. ASOUT. DETKBI, FILTRT. FLTCTL. MLOUT. PSIR. RAOUT. 

RIOUT. SYSYW1, YOBSRV 

GYROCR 

GYROCR computes the correction terms required to compensate 

the rate gyros for earth and platform rates. GYROCR functions 

as follows: 

1) to ensure that gyro measurements are compensated only 

once per simulation "tick", a local copy of the last 

time (TimesL) is saved. If Times (= TimesL then 

WCQMP(i) = 0.0 for i=1 •••• 3 

2) otherwi se : 

WCOMP = Trb' Trl Wl 

where Trb' is the transformation from the runway to the 

body frame of reference and Trl is the transformation 

from the local level to runway frame. Wl is the frame 

rates expressed in the local level frame 

Note: most of the variables used in this subroutine are 

computated in GTOI. 

Call GYROCR (wcomp) 

wcomp - double out vector of compensation terms to be 

subtracted from the rate 9yro measurements (see 

description above.) 

refs: MATTV3 

refbv: SUMIN 

comm: ARSTAT. EARTH. PSIR, SIMCOM. TRBER 

35 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

GTOI 

GTOI forms estimates for inertial position. velocity, and 

acceleration. and runHay acceleration. It also computes 

the A/C's current longitude and latitude along Hith their 

rates of change. In addition, Tic, the last column of T1c, 

coriolis and centripetal correction terms for compensating 

the platform gravity force, and several control variables 

required by the G&C logic are also all computed. 

Call GTOI 

None 

ASUMER, MATV3, MTH$DATAN2. MTH$DCOS. MTH$DSIN, MTH$DSQRT 

INITG. NAV 

ARSTAT, EARTH, EGUIDE. EKFl, FILTRT. GRVTYC. IMLS, MAINl, 

MCONCO, PSIR, RGOUT, SYSU1, TRBER. 

CKUNST 

CKUNST checks the no-fail filter estimates for divergence 

and sets an abort flag (Iabort) if a divergence criteria is 

exceeded. The primary benefit of this routine ;s to reduce 

computation time (and associated costs) by ending a divergent 

run early. The folloHing divergence criteria is used. ~here 

divergence is declared if: 

1) the altitude estimate is beloH the runHay i.e. XFl(3)(O.O 

2) the absolute sum of the position errors are greater than 

a position error bound. POSBND. i.e. 

sum{lpositCi)-XF1(i)IJ)POSBND for i=1, •• 3 

3) the absolute sum of the velocity errors exceeds a velocity 

bound, VELBND. i.e. 

sum{IVELOCCi)-XFl(3+i)IJ)VELBND for i=1 ••.• 3 

4) or the absolute sum of the attitude errors are greater 

than an angular bound. ANGBND. i.e. 

sum(la(i)-XF1C6+i)IJ)ANGBND for i=1 •••• 3 

Hhere a = [Phi. theta. Psi-Psiru] 

If the divergence criteria is met. the stopping time for the 

run. Tstop. is set to the current simulation time. an abort 

flag is set. and messages are sent to the connected terminal 

and the time line file. 

Call CKUNST (Iabort) 

Iabort - integer inout run abort flag, Hhere: 

Iabort=-l 

36 
refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

indicates run should be aborted, and otherwise run should 

proceed. 

ALTYP. TLOUT 

NAV 

ANGLES. EKFl, FILTIC, PSIR. SETCOM. SIMCOM. UPDAT 

KALMN 

KALMN serves as the executive routine to implement an extended 

Kalman filter. where the plant equations are: 

X(k+l) = A x(k) + B[X(k)]u(k) + E[X(k)]w(k) 

and the measurement equation is: 

y(k) = h[X(k)] + u(k) 

The filter is realized as a lower order bias-free filter 

followed by a bias filter and a blender to form the bias 

corrected state estimates. The reader is referred to [3] and 

[4] for a more detailed description of the approach. KALMN is 

meant to be called in two passes. once to perform all the 

filter propagations, and then again to update the estimates 

and covariance with the measurements. The following user 

supplied routines are required to define the non-linear terms: 

UPDA defines A 

UPDAB defines ABFl 

UPDB defines B[X(k)] 

UPDO defines O[X(k)] 

UPDH defines h[x(k)] 

UPDPH defines HPI 

Call KALMN (Iup) 

Iup - integer in update/propagate flag, where Iup=l 

enables updating, and Iup=2 enables propagation 

BIASF. BLEND. EKFNI 

NAV. RECONF 

SYSXBO 

37 
FINDS Programmer's Manual 

Documentation For File: FSFDI~FOR 

name: EKFNI 

func: EKFNI represents the bias-free filter portion of the no-fail 

filter. It is implemented as an extended Kalman filter. 

Covariance propagation of the stabilized normal equations 

is performed. The state estimates. XFI are NOT computed in 

this subroutine, rather they are formed in subroutine BLEND. 

To accomodate reconfiguration due to the failure or a healing 

of a sensor. the state and covariance at time k/k is stored 

temporari1v in RBFO. Figure S details this module. The 

reader is also referred to·[3] and [4] for a detailed 

description of the no-fail filter's implementation. 

call: Call EKFI (Iup) 

args: Iup - integer in update/propagate flag 

refs: EOUATE, GMINV. MADDI. MADDI, MATIA, MAT2, MAT3. MATS, MMUL. 

MMUL2. MSCALE. UPDAB. UPDB. UPDPH. UPDO 

refby: KALMN 

comm: EKFI. FILTRT, FLTCTL. MAIN2. SYSUI. SYSXl. SYSXBO, 

SYSYBO. SYSYWI. TSTORE 

38 
update the 1. 

bias-free i·········:'>'>-

. J propagate the 

,;w" * bias-free filter 

~. IT> 

~~r i ~----~----~~ 

"....... ~ COfIPUte the partial of h with ··'~·:i respect to the state(lCFl).1P1 ~----~----~~ ~ 

don't scale the ~ 

neaurenent noise f 

covariance :, r------~------...., 

IlO 

R--DIAG{l.OIIREPlF(i+nUl)} 

i=1 •••• MY 

; COfIPUte the 

i effective neasurenent 

i llOise seen by !;:=== ____ =====r--------l l the bias-free filter 

assune 

covariance 

propogtion 

. ! assune infornation 

>-__ IlO _______ .·:1:;...::··_···,···; forn of bias filter 

fOllt of 

bias fi1 tel ~i 

PFl=[I-cAIMK-1P1]-Pfl-[I-cAIMK-HP1], 

+CADIK"R"CADIK ' 

-:-:;$ ..••.•.....•.. 

r, store 4 partial 

:j conputation in 

:;: RBFO to be used 

by the bias filter 

update the estination 

error covariance natrix 

Fl~e 5. Flow Dlagrcm for SlJlrrutine EKFNl 

39 
............ 1 :~= the 

. filter 

.............. ) :r~~~)~::~~k~k) L...-____ -----..l I reconf1pation is perfol1led 

! .............. ! update the descrete input 

L...J.. ___ --....L...J '. ! wei~ting Mtrix. 8Fl 

PFl=ABFlepfl-I8=lO 

• EFl ~l '"EFl ° 

(EXIT) 

l 

............. ...! update the descrete process l noise covari.c:e Mt.rlx. EF1 ! 

i update the descrete state trMSition 

•.............. ~ IMItrix - including the coupling effects 

; of input bias estilMltion. 18=1 ! 

$. 

l .» ............ ..i conpute the propagated bias-free 

. i estiMtion error covari.c:e ! 

Fl~ S. Row Dlagnm for ~ EKFNl (CUlClUdBd) 

40 
name: BIASF 

FINDS Proqrammer's Manual 

Documentation For"File: FSFDI.FOR 

func: BIASF implements the bias filter portion of the no-fail 

filter. The operation of this routine is sho~n in Figure 6. 

The reader is referred to [3] and [4] for detailed 

descriptions of the no-fail filter implementation. A soft~are s~itch exists in this routine ~hich can be set at 

compile time or at run time via the Fortran debugger. The s~itch is IGNC: if IGNC=l use an anti-svmetric equation for 

PBFO. other~ise use a (more complicated) symetric equation. 

call: Call BIASF (Iup) 

args: Iup - integer in update/propagate flag 

refs: ALTYP. BLGAIN, DGATIO. EQUATE. GMINV, MADDl. MADDI, MATl, 

MATlA. MAT3. MAT3A, MAT4, MMJL. VMPRT 

refby: KALMN 

comm: CMPSTF. EKBFO, EKFl. FILTRT. FLTCTL. GBLEND. INOU. MAINl. 

MAIN2, SYSUl. SYSX1. SYSXBO. SYSYBO. SVSVW1. TSTORE. VOBSRV 

41 
perfoIll bias filter ~ ::';. .......... :::-:-. 

neasurenent update ii ., 

B = [-BFlubIO] Note: BFlub is not a ~ 

variable- rather it .! W 

represents the natrlx ~., -- . 

D = [011] 

CBF~l-[ABFl "YBO+B]+O 

of colUlm of 8f1 ~ 

corresponding to inputs ~ 

with estillated biases I 

conputat.ions for t 

covariance propagation } ..... 

fOIll of bias filter :i 

COftPUt,e bias filter 

gain natrix 

Note: RBfO=fFl-PFl'"tFl +It 

was saved in smroutine 

EJCF1Q 

., 

no propagation st..p required - since 

there are no bias fll ter dynaId.cs 

l. COIIpUte the effective bias filter 

<<if ........ ..; ne8SUTenent natrix CBFO. where the ! partial tern CBFO= [ABFl "YBO+B] was 

I saved previously in smroutine BlEIl) 

.,w ............ ) update the no-fail 

'. 1 filter blender gain. VBO 

~ CORpUtations appropriate for 

.<i~ ..... '.,.'.'~ Infornation fOIll of bias filter 

,i 

j update bias fllter 

use anit-SYftMtric 

equations ;, ................. ,:" 1 est:i.Ration error ,,; I-----L~=-__ -, 1 __ --lI~ ___ ---. ~ covariance Rauix 

PBFIP [I -GADIBO"CBFO ]-PBFO 

·d .... ..! return :; 

Figure 6. Row Diagnm for SltJmutine BIASF 

42 

., 

:~ 

~ 
1 t . . /,·1 COftI)Utations for infOl'Mtion fom of the bias filter 

.<l :, 

~ update the bias filter DF(JIIAnOf Mtrix. 

P8FO=P9FO + C8Fo-tBfo-t8fO .. , ................. ~ P8FO; Where P8FO=[tFl"PF1"tFl+R]--1 

I was stored previously by _routine EICFIO. 

T1tP2 = P8FD--l j invert P8FO to obtain the error covari~ 

>ft·················1 Mote: this St8I) is optional RI should be 

; done only if the error covarin:e is required 

no 

! -~. U. i~""- i bias f1l tel 

I~MUb 

Fl~ 6. FlOW D1agnm fOr SlttOOtlne BIASF (cmcll.lJed) 

43 
FINDS Proqrammer's Manual 

Documentation For File: FSFDI.FOR 

name: BLEND 

func: BLEND computes the bias and bias-free state estimates and ~blends" them together to form the total state and bias 

estimates. It also forms the total state and bias estimation 

error covariance and Kalman gain matrix. Figure 7 details the 

operation of BLEND. 

call: Call BLEND (Iup) 

args: Iup - integer in update/propagate flag 

refs: EOUATE, MADDl, MATl, MAT4, MMUL, TRANS2, UPDH, VECNUL, VMATl, ~T2 

refby: KALMN 

comm: CMPSTF, DETINF, EKBFO. EKFl, FILTRT. FLTCTL. GBLEND, MAIN2. 

SYSUl, SYSXl, SYSXBO, SYSYBO. SYSYWI. TSTORE 
perforn i 

neaurenent ~ ........ ~ 

. ...t_.. f: --, ~ 

no biases 

estinated 

use nolMl. :! 

residual ~ .... +. 

COIIpUtations ~ 

,ffl"'} at least. one bias est.iMted 

no .,. ~ 

~ 

i 

~ 

? COfIPU1:e total 

~ (bias • bias-free) t no-f~ filter gain , natr1x 

I 

I I 

I use -whitened- residuals 

&,,/'1 obtained fron FILCB. uroutine 

no 

I 

RES8O=Yfl-HXICPl 

! forn the filter residuals 

! Mote: HXlCPl=h,J\at+O'"XllFO ! was saved in smroutine 

I REsatP ! 

rom RESBO as the average 

residual sun using the expanded 

and filtered residuals. RESBOC 

I 

I 

XFl=XFl +GAIIIOC"RESBO , :: uPdate the no-fail .<'!t ................... ! 

. , i f1l tel state estinat.es 

i update the no-fail .. ;~~~ .................... ~ 

, ~ filter bias estinates 

Figure 7. AOtN Diagnm for SIJJmJtine BI....EN) 

45 
perforn state tiM prope;ation 

~_no ___ ~_·...,········i SOM biases ue being estiMted 

:J!.a:: I· .. ··········· .. · ! yes 

COfIPUte the total, 

auonented, no-fail 

filter (state' bias) 

estiMtion error 

COVar1.1n:8 Mtrix at 

tine klk 

XFl = AFl-Xf1 +SFl "tFl 

l 

.~. ""'j lIIr1 input biases? 

no I 

1 ..... ovUa1 .....-__ ...L... __ --. I COfII)Utat1on in C8FO 

t to be used in I uroutine BlASf L...-__ ......-__ --J I 

PXf1 = (PF1 +CBF0"PFl "C8FO' 

~ PBFo-c8fO· 

C8F0"P8f~ PBFO) 

..i* ................. ...! COfII)Ute the propagated '. ; state estiMte 

,;t ................... ·f evaluate the observations . ~ function (Le. h-hat,) 

Figure 7. Row Diagram for 5W)rout1ne BLENJ (conclUded) 

46 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

name: BLGAIN 

func: BLGAIN computes the blender gain. VB. in a recursive fashion. 

VB is computed recursively as: 

VB(i+l) = (I-GAINk*HPI1*ABFl*VB(i) 

+ (-BFlub + GAINk(HPl*BFlub-D)] 

where the second term is computed as the augmented matrix: 

[(GAINP*HPI-I)*BFlub , -Gaink*Dl 

BFlub refers to a matrix built out of the columns of BFI. 

where each column. corresponding to biases which are 

estimated. 

call: 

args: 

refs: 

refby: 

comm: 

is included (augmented together) to form BFIub. 

Call BLGAIN (VB) 

VB - double inout updated blender gain matrix 

MADDl, MADDI, MATI, MMUL2. MSCALE 

BIASF 

EKFI. MAIN!, MAIN2. SYSUI. SYSXl. SYSXBO. SVSVWl. TSTORE. 

VOBSRV 

name: SETISN 

func: SETISN maintains the value of a vector called ICNTSN. The 

ordering of elements in ICNTSN are constant and correspond 

to the absolute replicated sensor ordering found in Table 6. 

The value of each element is the location in UFI for the 

first six elements. and the location in the expanded innovations. RFI. for the rest of ICNTSN. 

ICNTSN provides a "mapping" between an absolute indexing 

scheme and a particular (collapsed - due to failures) indexing 

scheme used by the NFF 

call: Call SETISN 

args: 

refs: 

refby: 

comm: 

None 

IMSCLE 

RECONF 

OETINF. DETXBI. FILTRT. SYSUI 

47 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

name: 

func: 

call: 

arqs: 

refs: 

refby: 

comm: 

CHKRAD 

CHKRAD checks radar altimeter turn-on criteria. If the follo~ing criteria are satisified the radar altimeter 

measurements are added to the no-fail filter measurements. 

and the MlS elevation measurements are removed (selected out). 

RADAR = false (i.e. radar s~itchover has not occured) 

and IXF1(3)1 < Hradar (A/C ;s belo~ a fixed altitude) 

and Irepls(6)!=O (vertical accelerometers available) 

Radar altimeter measurements are added by "healing" them. and 

performing the reconfiquration required. In addition. if the 

filter covariance is too small for x and x-dot. it is boosted 

to force the radar altimeter measurements to be used by the 

no-fail fi 1 ter. 

Call CHKRAD 

None 

RECONF, TLOUT. VECNUL 

None 

CMPSTF. DCIDEI. DETXBI. EKBFO. EKF1. FILTRT. FLTCTL. HEALCM, 

HFCOM. INOU, LOGIC4, PLOTS, SENSCM. SIMCOM. SYSXBO. SYSYW1 

name: UPOA 

func: UPDA updates the discrete state transition matrix (AFl). 

Currently AF1 is a constant so UPDA is called only once. AFl 

;5 defined in equation (2.2.13) on page 29 of [2] 

(~here A=AFl). 

call: Call UPDA (nr,nc.x,A) 

args: nr - integer in currently not used 

matrix 

refs: 

refby: 

comm: 

nc - integer in currently not used 

x - double in currently not used 

A - double out updated ~iscrete state transition 

MTH$DEXP 

INITG 

MAINl. SIGTAU. SYNC 

48 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

name: UPDAB 

func: UPDAB updates the discrete state transition matrix (ABFI) to 

include the coupling due to the estimation of input 

measurement biases. It also computes and saves a matrix of 

partials needed for the bank of detectors BDFI. 

Computationally UPDAB computes: 

1) ABFI = AFI + partial of BFI*(UFI) w.r.t. XFI 

2) BDFI = partial of BFI**BFlu. w.r.t. phi. theta. psi where 

XBFIu is a vector of failure estimates for input sensors. 

The reader is referred to pages A-I in [3] for a description 

of the partial derivative terms required for this module. 

call: Call UPDAB (ns.nu,u,AB) 

args: ns - integer in currently not used 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

nu - integer in currently not used 

u - double in input measurement vectors (UFI) 

AB - double out updated discrete state transition 

matrix 

which includes the coupling due to input measurement 

None 

EKFNI 

biases. 

DETXBI. EULER. MAIN1. SYNC. TRBER 

UPDB 

UPOB updates the discrete input weiqhting matrix. BF1. 

also evaluates and saves: 

1) sines and cosines of the estimated euler angles 

2) the transformation from the B to the R frame 

3) the transformation from the R to the E frame 

BFI is defined in equation (2.2.13) on page 29 of [2] 

where (B=BF1) 

Call UPDB (nx.nu,x,B) 

nx - integer in 

nu - integer in 

currently not used 

currently not used 

and 

x - double in vector of current state estimates 

B 

(e.g. XF1) 

double out 

matrix 

updated discrete input weighting 

MTH$OCOS. MTH$OSIN. MTH$DTAN 

EKFN1. INITG 

49 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

comm: EULER, FLTCTL, MAINl, SYNC 4 TRBER 

name: UPDO 

func: UPDO updates the discrete process noise covariance matrix. 

OFI. UP DO assumes that UPDB has been called recently, 

therefore Trb and Ter are current. OFI is defined in 

equation (2.2.14) on page 30 of [2] (where Q=QFl). In 

addition. provisions have been made in UPDO to allow for 

the following modifications to OFl: 

1) modeling errors. not accounted for by the plant and 

measurement equations~ can be accounted for partially 

by increasing the process noise variance. Therefore, a 

vector of terms, called DIAGQ is added to the diagonal of 

OFI. Currently DIAGO is set to zero and can only be 

changed at compile time or via the debugger at run time. 

2) to represent errors due to scale factor and misalignment 

of the rate gyros. the following terms are added to the 

measurement noise variance for rate gyros: 

/ \ / \ / \ 

10 1 11 I STMPII I STMPll 

Vrg = V + spm* 11 0 11 ISTMP21 + scaleF* ISTMP21 

11 1 0, I STMP31 I STMP31 

\ / \ I \ I 

where each of these terms are defined in comments in the 

actual code. 

call: Call UPDO (nx,ndistb,V,Q) 

args: nx - integer in total number of states 

refs: 

refby: 

comm: 

ndistb- 1nteger in currently not used 

V - double in vector of measurement noise variance 

used by the filter 

o - double out updated discrete process noise 

covariance 

LIMVAL. MTH$DEXP 

EKFNI 

ARSTAT. MAIN!. M:ONCO, RGMP. SIGTAU, SYNC. TRBER 

50 
name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

name: 

func: 

UPDH 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

UPDH updates the non-linear observations function H. H is 

defined in equations 12.2.15)-12.2.24) on pages 30 and 31 in 

(2] (~here h(x(k)] = H). 

Call UPDH (ny,nx,X,H) 

ny - integer in 

nx - integer in 

X - double in 

H - double out 

MTH$DASIN, ~H$DSORT 

BLEND, RCOF 

currently not used 

currently not used 

vector of current state estimates 

updated vector of observations 

FILTRT. MAIN1, MLSALL, XOYOZO. YOBSRV 

UPDPH 

UPDPH updates the partial of H ~.r.t. XF1. called HPI. 

HP1 is defined on pages A-3 - A-5 in (3]. 

Call UPDPH (nx.X) 

nx - integer in 

X - double in 

MSCALE. MTH$DSORT 

CLPSIO, EKFN1 

total number of states 

vector of current state estimates 

CMPSTF. MAIN1. MLSALL. SYSU1. SYSXBO. SVSYW1. XOVOZO, VOBSRV 

DETECT 

DETECT implements a bank of detectors and likelihood ratio 

computers. Each detector estimates the level of a bias 

jump failure - hypothesized to start at the beginning of 

an estimation ~indo~ - by observing the expanded and filtered 

residuals sequence generated bv RESCMP and FILCOL. The 

hypothesized failure is assumed to affect no-fail filter 

input measurements or output measurements only. Therefore. 

a single failure cannot directly enter into BOTH an input 

and an output measurement. 

The bank of likelihood ratio computers operate over a decision 

residual ~indo~ and are designed to compute the log likelihood 

51 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

of a singleton sensor failure, or a dual simultaneous failure 

in MlS sensors. 

Subroutine DETECT functions as an executive of this bank of 

detector/LR computers. It is responsible for computing all 

common terms required to intialize the parallel bank at the 

time of estimation and decision ~indo~ resets, managing the 

estimation and decision ~indo~ mechanisims, and implementing 

the parallel computations in a sequential fashion. The reader 

is referred to (1]-(3] for detailed descriptions of the method 

of operation, and particularly to figure 1 on page 12 in [2] ~hich gives a functional description. Since 

subroutine DETECT is a key subroutine in the FINDS program. 

Figure 8. a detailed flo~ diagram. ;s supplied to describe 

its operation. 

call: Call DETECT 

args: None 

refs: EOUATE, GMINV. LIB$INIT_TlMER. LIB$STAT_TIMER. LKF. LRT. 

MADDI. MATI, MAT6, MATNUL, MMUL, MMUL2, MSCALE. VECNUL, VMPRT 

refby: NAV 

comm: CMPSTF. CNEST. COLFIL. CPU. DCIDEI. DETINF. DETXBI. DETYBI. 

EKBFO, FILTRT, FLTCTL~ HEALCM, INITVL. MAINl. MAIN2. MULTOT. 

SENSCM. SYSUl, SYSXl. SYSXBO. SYSYWI. TSTORE. YOBSRV 

52 
...•.. ~ .... v. ...... _ ................ " 

:~~~ 

initialize 

qu5ltities 

COfIIIOO to all 

detector 1lR' s 

no 

yes 

initialize 

qu5ltities 

used in 

COfIP8flS4ting 

for the colored ., nature of the 1, 

nLS neasurenents f: 

~ 

~j 

;~ 

.$.".~ initialization (Note: Ifrst is 

; set to 1 in a det4 stateMnt) 

j scale factor for increasing .~~ ..... { innovations covariance ! presented to detectors 

... ,.J ar! we sinulating colored 

4········,···,··., l no1HS for the nLS sensor? 

FIlaz=(l-Gllaz )"PtIIaz 

FIlel=(l-Cllel )-PHIel 

FIlrn=(l-CNrn)-PHIm 

! Note: GIl'" terM ! are initialized in ········1 stmroutine naTe and 

I PHI- terM are set 

I in stmroutine FIlca. 

Alcorl=CIIICC" [(l-PHIaz-2) +2.o-cMaz-PHIaz-2]/(1-F1Laze-2) 

Alcor2=CNICC"(1-PHIaze-2)/(1-FIlaz--2) 

Elcorl=CMICC"[ (1-PHIel-2) 

+2.o-GNel-PHIel"2]/(1-FIlel"2) 

Elcor2=CMICC"(1-PHIel"2)/(1-FIlel--2) 

RNcorl=CNICG-[(1-PHIrn-2) 

+2.o-cNrn-PHIrn"2]/(1-FILm--2) 

RNcor2=CNICC"(1-PHIm·-2)/(1-FIlm-·2) 

1 expand the observations partials natr1x 1 to account for replicated sensors 

TnP2 = COI2'eplCFl-cat2 

USE colored! 

nlS noi~e :1' ...... ,., assunpUons? j ;''l-. 

F11J.'I8 8. Flow Olagnm for &.tJroutIne CETECT 

53 
Stnpl • Stnp2 • Stnp3 • 1.0 

no 

ii = 3 l····~,... no 

Stftpl = RNcorl 

Stftp2 = RNcor2 

Stftpl = acorl 

Stftp2 = acor2 

Stl'lp3 = RfI(ii )-IREPlF (lII1+ii) 

Figure 8. Flow Dlegrzm for ~ CElECT (CD1tlru:d) 

54 
l: 

font i: 

imovations ~ covariance ~ 

using 11M ~ I 

nlS noise !: 

asmIptions i 

* 

* TftPl = inverse <l::: ••• ·.[! of imovaUons 

::: covariance 

Fl~ 8. Flow Dlagrcm for Stalrrutlne OElECT (cootlrued) 

55 
no 

save POrtion of 

the detection ./ .. neasurenent IMltrix 

no 

", I ere «InY of these biases input 

! ftNSUrMlf'lt biases? 

yes 

I ..... i ~ = pointer to! fom 1 inpUt type ! -tPl-eFllf) 

! Where BFllb 

represents a .~...... natr1x fomecl 

out of the I colunns of 8Fl 

! which correspond 

I to iI1Juts vi th I estiftated biaes 

I 

I 

.... J are there «InY input ,i$. .....• ,! neasurenent biases 

yes 

TnP2[NXl.NXB]r = I-TnP2[NXl.NXB]r 

.. :~: ...................................... 1 at this: point ntP2 is: 

,---...1-_ .. _ ... _----. ·l the augnented natrlx: ~ 

Fl~ 8. Aow Dlagnm fOr ~ IETECT (cmtIrued) 

56 
start of 

najor loop 

(1ncrMenting 

by sensor type) 

no 

yes 

yes 

.,*" ..... ...1 increnent decision window .. ~ SGIIPle COU'Iter 

1 local flag used for ... ~ differantiating input 

; fron M8SUl8Mf\t sensors 

.::i.\ .............. ! index = absolute sensor type 

L..-_--.,..--_--' :: 

i are any sensors of this type 

<.:<; ......... :~ currently being used by the 

" ~ tFF? •. if not dont't N'I the f detector ILR logic 

INITIALIZA TICl'J 

sequentially process 

each detector 

... :~~ .......... ~ 

are we using the RSDDtU and is this 

sensor an input sensor? .. if so 

don't N'I detector ILR logic since 

4- 00•

0000 .1 

" 

the RSDDtU has resident fOI ~ili ties 

are we using the RSDDtU's euler angle 

est.1nates in the tFF and is this sensor 

an mu rtHSUrenent type? •• if so 

don't run the detectorllR logic 

) is this sensor an input sensor? 

. ':~::::, set flag to indiC4t.8 this 

sensor is a neasurenent sensor 

F~ 8. Flow Olagmn for SltJIwtine [ElECT (cmtinJed) 

57 
fom input 

failure 

conpensated 

discrete 

state 

trmsition 

natrix 

no 

I is this the first SGrIPle 

¥ / 1 of a new decision Idndow? 

yes 

no 

kCTewh(i.ndex) = kCTewh(i.ndex)+l 

kCTeuh( index) ) N'lXeuh( index)? 

yes 

XBFI(jj) = 0 

PBFI(jj) • PBFIC(index) 

for jj = all replications 

~ increnent estiMtion 

i window decision , / 1 window comter for 

¥ I this sensor type 

! tifte to 1n1 tiate "" ...... ~ a new est1Mt1on 

i window? 

~. 

i reset 

i est.inet.ion 

~vindows 

i for all 

.....---YAl.-[-jJ-'. ]t....c-=-o---'I ,."Ii"";"" 

YEJ.[jj]c = 0 

VRIC[jj]c = 0 

for jj = all replications 

COft2[7,9]c = ABFl[7,9]C 

-BDFI[ll,ll+2]C 

VRlPl = IFl-cGft2'"YBI[index]c 

C8FI[index]c = CBFI[index]c-VTnPl 

index2 = index 

index3 = 1 

index .. = Icntsn(index) 

.,1: .... ; see page 4J in [1] , 

': pointers to specific ... " sensor replication, l n absolute 

; nusurenent index 

Figure 8. Row D1agnm for Stmoutlne [ElECT (cont1rued) 

58 
ftinor loop ~: no 

~ 

:s 

entry point *= 

(increnented ~.' .. , ... , .. , .... 

by replication) I :l» 

. ..,~ is this replication I 

.4" " used by the NFF? ~ 

VTnPI(i)=C8FI(lNOYPI(INORYP(i».index) 

no 

no 

II = INORYP(IndexV) 

VTnP1(index4) = VTnP1(!ndexY)+Yscale(II) 

filter elenents of VTnPl which 

IIUltiply nLS neasurenents 

to accomt for their colored 

noise statistics if IUre=1 

:s 

."'~ is this an nLS sensor? .«i,l'·· ;(. 

yes pointer to col. in IXmS 

JJ = (index3-1)-'+index--6 

IXmS[JJ]c = vntPl 

DEST(JJ) = XBFI(index2) 

I 

~ 

I 

~ 

I 

~: conpute the ~ .ffective ~ observation 

~ Mtrix for I the detector. ~ see page 42 in [1] 

~ ! I 

* ~ 

I :1 

~ 

~ ~ 

x 

~ 

:> 

:~ 

save the observation natrix 

and failure estinate 

(used later to detect 

nultiple nLS failures) 

Figure 8. Row DIagnm for SLtInxJtlne [ElECT (cmtinJed) 

59 
LKF{XBFI{index2).PBFI{index2).YTnPl.TnPl.RESBOC. RESBI [lndex2]c. Nyf) ..,~ ........... . run the detector 

for this sensor 

LRT (IcCT ewh. PRI(JU{:lndex2). REseI [:lndex2 ]e. • . " .......... J perforl'l log-likelihood ratio 

inactive replications 

enuy point. ~~.";;';';";;"""' .. .". .. ",.,..,,.,.,>,,.= ... I""'l,,' 

¥' 

TrlP1. Alana{ index2).ttyf) . .. " ~:: conputat:I.on for this sensor 

x 

. ~~ ....... .;: increnent replication . i index 

'-----r---.....J , done with this . sensor type (no 

fIOre replications)? yes 

index .. = Icntsn(index2) 

~ is this sensor active? 

no 

close .. 1nor loop.... ~ 

proces next replicated >.<:<. 

sensor of the sane type ;\ : have all sensors: been Drocessed _ ~l·""~ by the bank of detectorsIlR's:? 

close Mjor loop... ..; 

process next sensor . 

type 

.< •.•. 

Figure 8. Flow Diagnm for Sl..tJrrutine C£lECT (cmtinJed) 

60 
)'/ 

LRT (keT dIIh. PRI(JU(lFTl) • RfSBOC. DlPl I perf ~······1 for 

Oll'l log-1ikel1hood COfIPUt,ations 

the no-fail hypothesis A1811da(lFn) .1Iyf' 

, ~ keThlr = kCThlr+1 I 

... ! tine to reset .'~i;,"'··· i heder wirldovs? 

yes kCThlr > Id'IXhlr? • I kCThlr = I 

no 

,,.. 

I 

proces healer 

window comters 

lG'Il = [DEST(1)+DEST(4]n =j 

.. =i fom aver ~2 = [DEST(2)+OEST(5]n ega failure .X>l •••.••..•.•• 

lG'IJ = [DEST(J)+OEST(6)]/2 .. ' ~ estiMte for nLS sensors 

RES8J[I]C = RfSSOC-(OOBS[I]c+OOBS[4]c)-lG'Il • 

if Ireplf(7)=2 

RfS8J[2]c = RfSBOC-(DIBS[2]c+OOBS[5]-lG'Il • 

IF Ireplf(8)=2 

RES8J[J]c = RESBOC-(DIBS[J]c+DOBS[6]-lG'Il • 

IF Ireplf(9)=2 

lRT(kCTdwh.PRIORJ(l).RES8J[l]c.TnPl. • 

AlandJ(I).Myf) 

lRT(kCTdwh.PRIORJ(2).RfS8J[2]c.TnPl. • 

AlandJ(2).Nyf) 

, 

LRT(kCTdWh.PRIORJ(J).RES8J[3]c.TnPl. 

AlandJ(3 Lilyf') 

• 

~ 

fol1'l nultiple nLS 

=: failure conpen$4ted residuals 

cotIpUte log-likelihood ratio's 

f or nul tiple nlS failures 

Fl~e 8. Flow Dlagrcm for SltIrrutine [ElECT (cmtirued) 

61 
if nultiple sensors are 

not available. disable 

detection of nultiple failures 

Figure 8. Flow OlagIml for SlJlrootlne £:l:1ECT (COOCIUded) 

62 
name: LKF 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

func: LKF provides the estimator structure for the failure 

detectors. LKF implements a linear Kalman filter using the 

information form4 and assumes a scalar state equation. The 

module functions as fo110~s: 

The plant equation is: 

Xm;(k+l) = Xmi(k) i.e. no dynamics 

the measurement equation is of the form: 

Y(k+l1 = C;*Xmi(kl + n(k+1) Y(k+1) is a vector 

of nv elements ~here n(k+1) - N(O.RT) 

the filter equations are: 

RTinv = RT**-l (measurement noise covariance) 

Gi = [1.0/Pmi(k)]*Ci'*RTinv (filter gain) 

Pmi(k+1) = Pmi(k) + Ci'*RTinv*Ci (filter information) ~here. remember. Pmi is defined as the inverse of the 

estimation error covariance (i.e. the information matrix) 

Ri(k+1) = Y(k+1) - Ci*Xmi(k) (detector residuals) 

Xmi(k+l) = Xmi(k) + Gi*RHk+ll ("best" estimate) 

For a more detailed explanation of the detectors 

implementation see section 2.4 in [3]. and section 2.1.2 

in [2J. 

call: Call LKF (Xmi.Pmi.Ci.RTinv.Y,Ri.nvl 

args: Xm; - double inout scalar estimate of the state (i'th 

failure level estimate) 

Pmi - double inout scalar filter information matrix 

(information in i 'th failure estimate Xmi) 

Ci - double in effective observations matrix 

(computed in DETECT) 

RTinv double in inverse of the measurement noise 

covariance matrix (NFF innovations covariance) 

Y - double in observations vector (expanded 

innovations from the no-fail filter) 

Ri - double out innovations sequence from the LKF 

(failure compensated innovations sequence) 

nv - integer in number of elements in the observations 

vector. Y 

refs: None 

ref by: DETECT 

comm: MAIN1 

63 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

name: LRT 

func: LRT computes the log likelihood ratios over a decision window. 

The computations are as follows: 

1) if k=1 A=-PHi. This initializes the log likelihood ratio. 

A. to -In(PHj) at the start of a new decision window. 

(Subroutine INITG initially stores PHi as the 10q of the 

a-priori probability of a sensors failure). 

2) SUMI = RES'*RTinv*RES 

3) A = O. 5*SI.JMI + A 

The reader should refer to section 2.7 in [3] or section 2.1.4 

in [2] for a more detailed description of this method. 

call: Call LRT (k.PHj,RES.RTinv.A,ny) 

args: k - integer in decision window simulation step 

counter 

refs: 

refby: 

comm: 

PHi double in logarithm of the a-priori probability 

that the j'th sensor will fail 

RES double in failure corrected innovations sequence 

from the j'th failure detector 

RTinv - double in inverse of the innovations covariance 

A -

nv - MAT3A 

DETECT 

MAINI 

matrix 

double 

for the 

integer 

inout computed value of loq likelihood ratio 

j'th failure hypotheses 

in number of observations 

name: DEC IDE 

func: DECIDE computes the decision cost which mlnlmlzes Bayes Risk. 

and chooses the most likely hypothesis conditioned on this 

cost vector. DECIDE considers singleton sensor failures as 

well as dual simultaneous failures in MLS sensors. DECIDE 

operates as follows: 

1) find the smallest 10q likelihood ratio for singleton 

failures (stored in Al 

2) find the smallest log likelihood ratio for multiple 

failures (stored in ALAMO;) 

3) pick the smallest of 1) or 2) and determine the 

corresponding sensor type(s) and replication(s) of this 

sensor 

64 
call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

4) if the chosen hypothesis is the no-tail condition 

simply return: 

5) otherwise. print out various messages informing the user 

of the decision. and update the failure Queue (i.e. NNfail. 

IfailT. and IfailR) 

Call DECIDE (m.cost,A,Beta) 

m - integer in total number of singleton failures +1 

(representing the no-fail hypothesis) 

cost - double in currently not used 

A - double in vector of log likelihood ratios for 

Beta 

CONVRF. 

NAV 

singelton failures 

double in currently not used 

MXMN2. TLOUT, VMPRT 

DCIDEI. DETINF. DETXBI. FILTRT, HFCOM. INOU. MAIN2. 

MULTDT. NAMES. PLOTS. SETCOM. SIMCOM. SYSU1 

RECONF 

RECONF reconfigures the FTS for proper operation lif possible) after failures have been detected and isolated. and after 

sensors heal. Figure 9 shows a functional flow diagram of 

the operation of RECONF. Also. see section 2.6 of [2]. 

Call RECONF (IHfail.Iabort) 

IHfail- integer in Heal/Fail recontiguration flag where 

IHfail=l for failures. and otherwise for healings 

Iabort- integer out run abort flaq where Iabort=O 

indicates normal operation. and otherwise indicates 

the run should be aborted 

ALTYP. CLPSIO. EQUATE, IMTCG2. KALMAN. MATCG2. MATNUL. MINSET 

MSCALE. MTH$DEXP. MTH$DLOG. NOISR, PNTINV. RCOV, RESCMP. 

SETISN. SUMIN. TLOUT 

CHKRAD. NAV 

DCIDEI. DETINF. DETXBI. EKBFO, EKF1. FILTRT. GBLEND, HEALCM. 

HFCOM. INITVL. SETCOM. SIMCOM. SYSU1, SYSX1. SYSXBO. SYSYBO 

65 
cycle through all i 

1IIfa:U failures r', ,. .. .. ..... 

(e-rrER) 

..... 1 set nission abort nag L...-_--. __ --l to "no abort- status 

.J!.' .... ! reconfigure for healinos 

no 

J tnI new failures ....... ~ . !t:/" "to consJ.der ,: .< ~:"i return 

reset healer. 

detection. met 

est.:i.nati.on windows 

reset log-likelihood 

ratios to ·infinity· 

j = Nfail + index 

lend = IfailT(j) 

Ireplc = IfailR(j) 

Ir@plf(ICftd) = Ir@plf(ICftd)-l 

INoutF(Iend.lreplf) = -2 

yes 

.. ~ is this a MasureMnt sensor 

.. 

x.:: ....• .!j neasurenent \. l sensor 

Figure 9. Flow Diagmn for St.tlIWUne REc;cN= 

66 
~~ic;" 

abort 

Figure 9. Flow Diagrcm for Sl.tlroutine RECCl\F (contirued') 

67 
1'10 

XFl = RBFO[l]c 

PFl = RBFO[i·l.NX]c 

";;~:"""""f re-propagate the MFF 

~,........, .+.········1 return 10 ' 

Fi~e 9. Flow Dlagr~ for SlJlroutine REC(t.F (contlrued) 

68 
,,~ ........ J reconfiglaation , ~ for hul.ings 

'&""1 not at. end of decision window? 

yes 

no 

'."~. . . ". "' .. ";1 SlY sensors to heal? :~ 

jindex = IhealP( index) 

lend = IfailT(jindex) 

lreplc = IfailR(jindex) 

correct no-fail 

prior probability 

.l~i···········1 return 

>, 

~""".1 a neasurenent sensor 

( has healed 

Figure 9. Flow Olagrcm fOr SltJroutlne RECQ\F (cootlrued) 

69 
'\ 

collapse Ifllil T 

and IfailR. 

decrenent Nfail 

adjust !fail T «Of 

IfailR to account for 

increMntal failures Tstop = Tines 

EXIT 

FigJIe 9. FIO\tol Diagnm for SLtIrrutine RE~ (corclOOed) 

70 
name: 

func: 

CLPSIO 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

CLPSIO is used to collapse (or expand) the no-fail filter and 

its associated data structures due to a single failure 

(healing) of a sensor. In particular. CLPSIO does the 

following: 

1) If Iclps(O (i.e. collapse no-fail filter) 

al if Isns(=NU1 (i.e. for input sensors) 

NOTE: currently FINDS doesn't allow input sensors to 

be removed. The logic that is used currently is only 

partially complete. * set OF1(Isns)=O.O * reset PF1 and PBFO by calling subroutine RCOV 

* collapse the input mapping vector. INOUP and adjust 

NUIC 

* if NB!=O and this sensor has a normal operating bias 

being estimated. collapse the bias estimator by 

calling subroutine CLPSBE 

b) if Isns>NU1 (i.e. for measurement sensors) * set RF1(ICmdY)=O.O * reset PF1 and PBFO by calling subroutine RCOV 

* update NY and INOYP 

* update NYF and INORYP 

* collapse the residuals vector. RESBOC 

* update the inverse measurement pointing vector. 

lNOYPI 

* if NB!=O and the no-fail filter is estimating a 

normal operating bias for this sensor - collapse the 

bias portion of the filter by calling subroutine 

CLPSBE 

2) If Iclps>=O (i.e. expand the no-fail filter 

al for input sensors: 

* reset the process and measurement noise matrices 

OF1 and RF1. by calling subroutine NOISR 

* update NUIC and INOUP 

* if a normal operating bias ;s to be estimated add it 

via subroutine CLPSBE 

b) for output sensors: 

* call NOISR to set OF1 and RF1 

* update NY. and INOYP 

* update NYF. and lNORYP 

* expand RESBOC 

" update INOYPI * if NB!~O and a normal operating bias is to be 

estimated - call CLPSBE 

71 
FINDS Programmer's Manual 

Documentation For File: FSFD1.FOR 

call: 

args: 

ints: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

* correct the partial derivative of h w.r.t. x. HPI 

by calling subroutine UPDPH 

Call CLPSIO (Iclps,Isns,Ireplc) 

1clps - integer in flag used to control the collapse/ 

expansion of the no-fail filter, where Iclps=-l indicates to 

collapse and Iclps=l indicates to expand it. 

1sns - integer in absolute index of the sensor 

Ireplc- integer in replication of the sensor 

1cmdY - integer absolute measurement sensor index as 

described in Table 1 on page 9 in [1] 

1Rsns - integer absolute replicated sensor index (see 

Table 6). 

ALTYP, CLPSBE. IMTCG2, MATCG2. NOISR, PNTINV, RCOV, UPDPH 

RECONF 

DETINF. DETXBI. EKBFO. EKF1. FILTRT, INITVL. SYSU1. SYSX1. 

SYSXBO. SYSYW1 

NOISR 

NOISR resets the process or measurement noise covariance terms 

in the no-fail filter for a given sensor type. In particular: * if Isns <= NUl (i.e. it corresponds to an input 

measurement to th~ no-fail filter) and if body 

mounted sensors are used: 

QFl(Isns) = sig(Isns)**2 

otherwise if the RSDIMU is used: 

QF1(Isns) = si9(18)**2 for 1<Isns<3 

or OF1(Isns) = sig(17)**2 for 4<Isns<6 

* if Isns > NUl (i.e. a measurement sensor) 

RF1(1sns) = sig(1sns-NU1)**2/Ireplf(Isns) 

(remember Ireplf(1sns) is the number of active 

sensors of this type currently used by the no-fail 

filter) 

Call NOISR (Isns.1replc) 

1sns integer in absolute index of sensor 

1replc- integer in currently not used 

None 

CLPSIO. RECONF 

ASOUT, FILTRT, SIGTAU. SYSU1. SYS~l 

72 
name: 

func: 

ca 11 : 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

RESCMP 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

RESCMP computes the expanded residuals sequence from the 

collapsed residual sequence generated by the no-fail filter. 

The results are then stored in RESBOC. This sequence is 

the same as the one which would have been generated had the 

filter been driven by all replications of the measurement 

sensors rather than their average value. See section 2.3.1 

in (2]. RESCMP also computes an estimate of the filter 

observations and stores this result in HXKP1. 

Call RESCMP 

None 

None 

NAV. RECONF 

AGOUT. ASOUT. CNTROL. DETINF. EKBFO~ EKF1. FILTRT, 

MLOUT. PSIR, RAOUT. RIOUT. SYSU1, SYSXBO, YOBSRV 

FILCOL 

FICOL estimates colored MLS noise states and compensates the 

expanded innovations sequence generated by RESCMP. This is 

done in an effort to "whiten" the innovations sequence. since 

it is known that the MLS sensors have colored rather than 

white noise statistics. 

Call FILCOL 

None 

EOUATE. MTH$DEXP 

NAV 

CNEST. COLFIL. DETINF. FILTRT~ FLTCTL. MAIN1. MLOUT, PJUNCK. 

SENSCM. SYNC. SYSU1 

CLPSBE 

CLPSBE is responsible tor resetting the bias estimator portion 

of the no-fail filter such that a single bias can be added or 

deleted. In particular. CLPSBE: 

1) calls ADJSTBP to determine IBkey and IYkey and to adjust 

the bias pointer vector INOBP. as well as NXB. NUB, NYB. 

NUB1, and NB. 

73 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

call: 

args: 

ints: 

refs: 

refby: 

comm: 

2) if IBkey(O (implying that either the bias exists and we've 

tried to add it. or the bias doesn't exist and we've tried 

to delete it) then CLPSBE fails by printing out this 

message on the terminal: 

CLPSBE: Routine Fails 

3) if kflag=-1 (collapse the bias estimator) 

a) the IBkey row and column of the bias filter error 

covariance. PBFO. is deleted 

b) the IBkey column of the bias filter blender gain, VBO, 

is deleted 

c) the IBkey row of the vector of bias estimates, XBFO, 

is deleted 

4) if kflag!=-1 (expand the bias estimator) 

a) PBFO is expanded about the IBkey row and column, and 

they are zeroed out 

b) The initial value of the bias fiter error covariance is 

loaded into the appropriate diagonal element s.t. 

PBFO(IBkey,IBkey)=PBFOI(Ibias)**2 

c) VBO is expanded about the IBkey column. and it is zeroed 

out 

d) XBFO is expanded about the IBkey row and zeroed out 

Call CLPSBE (kflag,Ibias) 

kflag - integer in flag to indicate whether to collapse 

or expand the bias filter. (-1 =) delete. +1 =) add) 

Ibias - integer in absolute index of bias type to be 

added or deleted 

IBkey - integer pointer to the location of the bias 

(absolute sensor index) IIIbiasli in the reduced 

no-fail filter bias vectors and matrices 

IYkey - integer pointer to the location in the no-fail 

filter measurement vector which corresponds to bias 

IIIbiasli 

ADJTBP. ALTYP, MATCG2 

CLPSIO 

EKBFO. GBLEND. INITVL, SYSU1, SYSX1, SYSXBO, SYSYW1, YOBSRV 

74 
name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

ADJTBP 

ADJTBP increments or decrements various and 

scalars used by CLPSBE and the bias filter itself~ ~hen adding 

or deleting biases in the estimator. 

Call ADJTBP (Iflag,Index~Irkev,Iykey) 

Iflaq - integer in flag indicating addition or deletion 

of a bias. ~here -1 =) delete. and +1 =) add 

Index - integer in absolute index to sensor type of 

bias to be added or deleted 

Irkev - integer out to bias in the reduced 

bias set (i.e. the bias vectors used by the filter) 

if the routine succeeds and Irkey=-l if the routine 

fails 

Iykey - integer out to absolute output 

index ~hich corresponds to the bias referred to by 

Index. If the bias is on an input measurement then 

Iykey=O 

ALTYP. IMTCG2, PNTINV 

CLPSBE 

CMPSTF. DETXBI. SYSUl, SYSXl, SYSXBO, SYS~l 

RCOV 

RCOV resets the no-fail filter's estimation error covariances 

once a failure has been detected and isolated. In particular 

it sets: 

1) 

/ \ 

I PO 0 

I 

I 

I 

I 0 Pb I 

\ I 

= 

I 

I PO 

I 

I .0 

\ 

\ 

o I 

I 

Pb I 

/ 

~here X**2 = Xmi**2 + 1.0/Pmi 

+ Vi*Vi'*X**2 

2) if PBFO ) PbfOI then PBFO is set to PbfOI (i.e. the initial 

uncertainty) and XBFO = 0.0. 

This corresponds to the conditional covariance reset method 

discussed in section 2.6 of [2]. Logic still exists in this 

routine ~hich can be used to cause the other t~o reset methods 

discussed in [2] to be used. ho~ver. a re-compilation of the 

code ~ould be required. 

Call RCOV (PO,Pb.XO,Vi,Xmi.Pmi.lcmd) 

PO - double inout bias free filter estimation error 

75 
FINDS Programmer's Manual 

Documentation For File: FSFOI.FOR 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

covariance 

Pb - double inout bias filter estimation error 

covariance 

XO - double 1nout vector of current state and bias 

estimates 

Vi - double in blender gain for the i'th detector 

Xmi double in estimate of the i'th failure level 

Pmi - double in information matrix for the i'th 

failure 

Icmd - integer in absolute sensor type of the failed 

sensor ~TNUL. UPOH, VMPRT 

CLPSIO. RECONF 

CMPSTF, EKBFO, EKFl, INITVL, INOU, MA.IN1, SYSU1, SYSX1, 

SYSXBO, SYSYW1, YOBSRV 

M1NSET 

MINSET determines if the A/C can operate if a particular 

sensor is removed. by knowinq the minimal sensor sub-sets 

allowed for stability. Currently MINSET will allow all 

replications of 1MJs to be removed. all replications of M...S 

elevation - provided the radar altimeter is available, and 

all replications of the radar altimeter - provided MLS 

elevation is available. Otherwise, if all replications of any 

other sensor are lost MINSET will abort the run. 

Call MINSET (1sns,Ireplc,1ok) I5ns - inteqer in absolute sensor index 

Ireplc- integer in replication of the sensor - currently 

not used 

10k - integer out abortlrun flag where if 

None 

RECONF 

10k = -1 perform a misson abort, otherwise if 

10k = 1 allow the sensor in question to be removed 

and the run to proceed 

FILTRT, LOGIC4 

76 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

name: HEALR 

func: HEALR manages the operation of the healer detection logic. 

Its primarY function is to maintain all sensors selected 

as "failed" by the FOI logic and determine if they have 

healed or recovered. Healer decisions are made ONLY at the 

end of a healer decision window. Special logic is employed in 

order to force the lMUs to heal in a coordinated fashion 

(i.e. for the ;'th replication of an IMU to heal; phi. theta. 

and psi must all be healthy). This loqic, while specific to 

the IMUs. forms the framework required to impose arbitrary 

additional constraints on a sensor's healing. A detailed 

explanation of how the healers operate can be found in section 

2.5 in [2]. Also helpful in understanding this routine is the 

description of common blocks HEALCM and HFCOM. Figure 10 

provides a detailed flowchart to indicate how the healers are 

rea I ized. 

call: Call HEALR 

args: 

ints: 

and 

that 

number. 

None 

Xsum - double vector of runninq sums - one for each 

active healing process. See subroutine AVECMP for a 

description of how the elements are computed 

IfailP- integer where the row index ;s 

the healer process number. and the value of each 

element the corresponding failed sensor's 

location in the list of failed sensors 

(IfailT and IfailR) 

NfailL- integer length of IfailP. i.e. number of 

healer processes currently running. Both IfailP and 

NfailL are updated at the start of each new healer 

window. 

lMUrep- integer 

logic. 

local test vector used for IMU healing 

The row index is the IMU replication number. 

the value is the number of sensors within that IMU 

have healed 

IMUmap- integer 

logic. 

local test matrix used for IMU healinq 

The column index is the lMU replication 

the rows store particular sensors which have healed. 

and the value stored ;s the corresponding position in 

the list of healed sensors, IhealP. Note this matrix 

allows us to map the locations in IhealP to each 

replication of an IMU 

77 
FINDS ProQrammer's Manual 

Documentation For File: FSFDI.FOR 

refs: 

refby: 

comm: 

Iremov- integer local test vector used for IMU logic. 

This array stores the locations in IhealP which 

correspond to sensors which passed the healer decision 

criterion but cannot be allowed to heal - due to other 

constraints. Currently, this means only a portion of 

an lMU has healed 

Nremov- integer length of Iremov. i.e. number of 

sensors which must be removed from the list of healed 

sensors. IhealP 

AVECMP, BUBBLE. LRTHLR. TLOUT 

NAV 

HEALCM. HFCOM. SYSUl 

78 
return 

"'~ are there -.y failed sensors1 I r :: 

~ . 

"~""""';' return ~ 

, ...... ; are q huler processes currently IUVling? , 

no 

initialize neu healer 

processes. Le. set 

Nfaill & IfailP 

ll=IfailP(i) 

JJ=IfailT(ll) 

kk=IfaiIR(ll) 

~ establish pointers for MCh ~ hHler where 

". ~ ll=pointer into failure x;··················} vectors 

~ JJ=8bsolute sensor type I KK=sensor replication 

Perfom routine 

pr .... 

v~ -"nn for ;, ...... <':;» ... ,.,. ;~ 

each healer process J 

processed IU healers? .~>:-:.,.:.:-:.:.>: .. /:,.:.,.:-)::::.::~::::.:.);.y;.»:.m»»:.x(lo;om:·:·;.>:·:·:·» ~~ end of 

".' "'j healer window? 

,.,." 

no yes ~ ...... ~ return 

Figure 10. Flow D1agrcm for Slbroutlne t-£ALR 

79 
I perrorn enCI or ·It··········~ window healer 

i tests 

«'t ................. ; 0011 out local pointer arrays ~ 

II=IfaiIP(i) 

JJ=IfailT(U) 

LRTHLR(Xsuft(i).kCThlr.BthrSh(JJ). 

FthrSh(JJ).Dthrsh(JJ).IHF) 

.. .J is the healer vector (IhealP) filled? .... ". 

~ <~\, ........... i: add to the list of healed sensors , Yo 

>: 

~ 1ncrenent the nunber of 

.;i ...... , ... :;: sensors that have ~aled· 

is the heUad sensor NOT 

GO mu output 1 

special looic to 

r8fteflber what 

pet of the 

.. D'lU healed 

NO sensors heUed? 

no 

Figure 10. Flow Diagmn for Slbroutine t-£.ALR (cootirued) 

80 

return 
special 

processinQ 

required to 

condition 

each InU 

to heal as 

a Wlit 

yes 

no 

comter for sensors which ~ed· but ~t 

be rencmd yet clJe to additional constraints 

(besides those iftposed by the healer logic) 

~ did ILL. or MOE of the COIIpOMf'Its of 

... ,., ~ the i °th replication of the DIU ~al""? :~ 

;~ 

no 

lrenov(Nrenov+j)=DlUnap(j.i) 

j::l, ... InUrep(j) 

i store the colunn of DlUrep (which 

.. :: .. J (which correspond to partial DIU 

" %. hNlings) into a tenporary linear ~ array, Irenov 

Nrenov=Nrenov+ InUrep(j) 

,.' A finihsed? 

.•.. 

~ have tInY sensors been declar@d 

.:; ~ed· but which cannot heal 

/!: due to additional conuaints? 

~/ i (i.e. only a part of Sl IrIU ./ * has healed) 

no 

II=If811P(IhealP(i) 

JJ=If811T(U) 

U=IfaiIR(U) 

TlOUT(17,O.JJ.U.l) 

no 

I remve the sensors frOft the 

.. ! list Of sensors to heal and 

yes 

4·" wait for ENTIRE InU to ~al· 

collapse lhealP 

by renovinc;l the 

sensors pointed to 

by lrenov 

hal=hal-tcrenov 

sort Irenov 

frOft snal.l 

to large 

values 

EXIT 

Fl~ 10. Flow Dlagrcm for StJ)rouUne H:.ALR (~IlXEd) 

81 
FINDS Proqrammer's Manual 

Documentation For File: FSFDI.FOR 

name: AVECMP 

func: AVECMP supports the operation of HEALR bv computinq the 

running sum of (Xwork-Xfail) over the healer window of 

length kmxhlr. The value of the sum is reset to zero at the 

start of a new healer window. Xwork and Xfail are defined 

as follows: 

* for input measurement sensors: 

Xwork = a measurement from a (assumed) correctly 

workinq replicated sensor of the same type 

as the railed one 

Xfail = a measurement from the failed sensor 

* for output measurement sensors: 

Xwork = the estimate of the observation obtained 

from the no-fail filter 

Xfail = the measurement from the failed sensor. 

call: Call AVECMP (Xsum,IfailT~IfailR.kreset) 

args: Xsum - double inout the running sum of (Xwork-Xfail) for 

refs: 

refby: 

comm: 

name: 

func: 

a particular failed sensor 

IfailT- integer in absolute sensor type of failed sensor 

IfailR- integer in replication of failed sensor 

kreset- integer in reset flag which indicates the start 

None 

HEALR 

of a new healer window if kreset=1 

AGOUT. ASOUT. EKF1. LAOUT. MLOUT, PSIR, RAOUT, RIOUT, 

RGOUT, SYSU1. YOBSRV 

LRTHLR 

LRTHLR performs a likelihood ratio test to determine if 

a sensor has healed at the end of a healer window. The 

test ;s performed as follows: 

1) a maximum likelihood estimate of the normal operational 

bias is computed as: 

Best = Xsum/length 

where Xsum is computed in AVECMP. and length is the number 

of samples in the window. The estimate is limited by: 

if Best> Bthrsh then Best = Bthrsh 

if Best < -Bthrsh then Best = -Bthrsh 

where Bthrsh is the largest expected bias level for this 

sensor type (set in INITG) 

82 
Call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

2) a maximum likelihood estimate for a failure level is 

computed as: 

Fest = Xsum/length 

The failure estimate is then limited by: 

if Fest) 0.0 & Fest < Fthrsh then Fest = Fthrsh 

if Fest < 0.0 & Fest) -Fthrsh then Fest = -Fthrsh 

where Fthrsh is the smallest expected failure level for 

this sensor type (set in INITG) 

3) a decision function is evaluated as: 

xtmp = 2.0*(Fest-Best)*Xsum + length*(Best**2+Fest**2) 

4) the value of the decision function is compared to a 

decision threshold, Dthrsh (set in INITG), and if xtmp is 

less than Dthrsh the sensor is declared "healed" (by 

setting IHF=-l). A detailed description of this method can 

be found in section 2.5 in [2]. 

Call LRTHLR (Xsum.length.Bthrsh.Fthrsh.Dthrsh,IHF) 

Xsum - double in the sum. over the entire healer 

Hindow. of (Xwork-Xfail) as computed by AVECMP 

length- integer in the number of samples included in the 

healer Hindow 

Bthrsh- double in the maximum expected value for a 

normal operating bias level on this sensor 

Fthrsh- double in the minimum expected value for a 

failure in this sensor 

Dthrsh- double in the decision threshold to be used in 

determining whether a sensor has healed 

IHF - integer out a flaq indicating the outcome of the 

LRT. IHF=-l if the sensor has healed and if IHF=O it 

has not healed 

DABS. DFLOAT 

HEALR 

None 

CONVRF 

CONVRF determines the proper conversion factor needed to 

convert from "program" engineering units to "user" or output 

units. It also supplies a 5 character literal name describing 

the name ot the units. Currently only no-fail filter states 

and sensors are accounted for. The routine operates as 

fol10~s: 

83 
FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

ca 11 : 

arqs: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

arqs: 

1) the user supplies a flag, Iopt, to indicate ~hether states 

or sensors are to be considered 

2) the user also supplies an index, n, ~hich indicates in an 

absolute ordering convention found in table 1. page 9 in 

[1], ~hich element of the state or sensor vector is 

desired. 

3) CONVRF then determines the conversion factor required and 

stores it in the value of the function CONVRF, and the 

name of the units. stored in Lname. 

X=CONVRF (n.Iopt,Lname) 

n - integer in 

sensor vector 

absolute index into the state or 

Iopt - integer in 

the no-fail 

sensor type 

a flag indicating n is an index into 

filter state vector if Iopt=l; or n is a 

index if Iopt !=1 

Lname - char out a 5 character name for the units to be 

converted to. 

CONVRF- double out the value of the conversion factor 

required to convert to user units. 

None 

DECIDE, INITG, PRNTIC, TLOUT ~ONCO 

AVBIAS 

AVBIAS computes. for a particular sensor type, the effective 

average bias seen by the no-fail filter. AVBIAS operates 

as follo~s: 

1) for input sensors it subtracts the true signal and noise 

from each measurement and then. if the no-fail filter 

uses more than one replication. averages these quantities 

across replications. The true signal and noise are saved 

in the appropriate sensor modules in EFBSLA and EFBSRG for 

linear accelerometers and rate gyro's respectively. 

2) for output measurement sensors AVBIAS simply averaqes the 

true (i.e. simulated) bias levels across replications. 

X=AVBIAS (n) 

n - integer in the absolute sensor type index found 

in table 1 on page 9 in [1] 

AVBIAS- double out the effective average bias for the 

n'th sensor type 

84 
refs: 

refby: 

comm: 

SLMv'fR 

PR INTIC. SAVIT 

FINDS Programmer's Manual 

Documentation For File: FSFDI.FOR 

A~lP. ASMP. EFBS. FILTRT. LAMP. MLSMP. RALMP. RGMP 

3.3.3 Documentation For File; FGAC.FOR3.3.4 Documentation For File: FWIND.FOR85 
FINDS Programmer's Manual 

Documentation For File: FWINO.FOR 

3.3.5 Documentation For File: FSENS.FOR3.3.6 Documentation For File: FIO.FORname: SAVIT 

func: To save a user selectable set of program variables in a 

periodic fashion on a binary plot file. SAVIT uses a 3 pass 

structure to provide this capability, ~here: 

Ipass=l provides initialization - SAVIT interactively 

prompts for groups of outputs to be saved 

Ipass=2 save (record) variables 

Ipass=3 flush buffers and close files 

The reader is directed to section 4.4 in [1] for a detailed 

discussion of the plot file contents and interactive prompts 

provided by SAVIT. 

call: Call SAVIT 

args: None 

ints: Ipass - integer in 

FLTCTL 

pass flag stored in common block 

Lsave - integer vector of yes/no responses to the 

prompting questions (found in Table 6 in [7]) - used to control execution of the routine. 

refs: ALTYP, AVBIAS, FILERl, ISPEC, LASK, MTH$DSORT, RECRDS, 

SAVIT. SEONCE, VECHG1, VECNUL 

refby: FINDS 

comm: ACCLS. AGMP, AGOUT, ANGLES, ARSTAT. ASMP. ASOUT. CMPSTF. 

CNEST. CNTROL. CONTRL. CRTE. DCIDEI. DETINF. DETXBI, DETYBI. 

EGUIDE. EKBFO. EKF1. FCOM1. FC~. FILTRT. FLTCTL, GSLOPE. 

GUIDE, GYROS, IMLS. INITVL. INOU. LAMP. LAOUT. LlNAC. LOGIC4. 

MAINl, MAIN2. MCONCO. MLOUT. MLSALL. MLSMP. PJUNK. PORT, 

PSIR. RALMP. RGMP. RGOUT. RGUIDE. RGYRO. RIOUT. RIOUT2, 

SPCFOR. SYSUI. SYSX1. SYSXBO. SYSYW1. VARLAT. VARLON. UPDAT. 

WIND. YOBSRV 

86 
name: PRNTrC 

FINDS Programmer's Manual 

Documentation For File: FIO.FOR 

func: To print FINDS Fi1ter-detector-hea1er initial conditions. as 

well as sensor module simulated normal operating parameters 

and scheduled failure information. The output is printed to 

a user specified ASCII file in a special table format. The 

output is printed in three passes - correspondinq to different 

types of information - controlled by an input flag, IoptnZ. 

The reader is referred to fiqure 8 starting on page 66 of (1] 

for an example of the output generated by PRNTIC. See also 

discussion on IoptnZ below. 

call: Call PRNTIC (kdsk,IoptnZ) 

args: kdsk - integer in fortran unit number of the ASCII 

file output will be directed to 

IoptnZ- integer in output control flag where if: 

* IoptnZ = 1; print page 66 of (1] - except for the 

last two lines 

* IoptnZ = 2; print last two lines on page 66 

in (1] and tables 1. and 1a 

* IoptnZ = 3; print tables 2-5 on pages 68-69 

in (1] 

refs: AHEDR. AVBIAS, CONVRF. FOR$DATE_T_DS, FOR$INQUIRE. 

FOR$TIME_T_DS, FSCHED. IDTS. M[H$DEXP. MTH$DSORT, OUTDAT. 

PAGEFD. PTITL3 

refby: FINDS, NAV 

comm: AGFP. AGMP. ARFDIP. ARFP. ARMP. ASFP. ASMP. DCIDEI. DETSIG. 

DETXSI. EARTH, FILNAM. FILTIC, FILTRT. FLTCTL. FTITL1, GRFDIP. 

GRFP. GRMP. HEALCM. lEST. INITVL. LAFP. LAMP. LINAC2. LNAVl. 

MAINl. MAIN2. MCONCO, MLSFP. MLSMP. MULTDT. NAMES, PLOTS. 

ORANO. RALFP. RALMP. RGFP. RGMP. RIOUT. RIOUT2. SIGTAU. 

SIGVOR. SIMCOM. SYNC. SYSUl. SYSX1. SYSXBO. WIND. WINDCO 

name: FSCHED 

func: To determine if a particular sensor (addressed by type and 

replication) is scheduled to fail in this simulation run. 

If FSCHED determines that a failure will occur. it determines: 

* the time of failure 

* the failure type (i.e. bias, null. etc.) * the simulated failure magnitude call: Call FSCHED (IsensT,IsensR,convrt,IfailT,failT,failTY,failm) 

args: IsensT- integer in absolute sensor type (from Table 1 

87 
FINDS Programmer's Manual 

Documentation For File: FIO.FOR 

refs: 

refbv: 

comm: 

in [1]\ 

IsensR- integer in 

convrt- double in 

failure level 

replication number of this sensor 

conversion factor to be applied to the 

IfailT- integer out failure indication flag where: 

if IfailT = 0 - no filaures are simulated, and if 

IfailT > 0 then IfailT is the failure type with: 

o = no failures 

1 = increased noise failure 

2 = increased bias failure 

3 = increased scale factor failure 

4 = hardover failure 

5 = null failure 

6 = ramp failure 

failT - double out failure onset time in simulation 

seconds 

failTY- double out failure type (loqical) strinq. Ten 

character strinq used to indicate the simulated 

failure mode - if no failures then failTY = ' 

failm - double out simulated failure maqnitude (in user 

units) 

CHKFL. FLEVEL 

PRNTIC 

AGFP. AGMP. ASFP. ASMP, LAFP, LAMP, MLSFP, RALFP. RALMP. 

RGFP. RGMP 

name: CHKFL 

func: This routine checks for the occurrence of a failure. It 

assumes that a sensor can only fail once. 

call: Call CHKFL (IpntTF,mxtyp.mxrow.timeF,failT,Ifail) 

args: IpntTF- integer in row number in timeF to be checked 

(indicates which sensor is to be considered) 

mxtyp - inteqer in maximum number of sensor failure modes 

simulated (also = col. dimension of timeF) 

mxrow - integer in row dimension of timeF. i.e. matches 

dimension statement's row dimension for timeF 

timeF - double in matrix of failure times. The rows 

correspond to the sensors. and the col. correspond 

to the failure more. Therefore. if sensor i fails 

with a bias failure. timeF(i.2) = the time of failure. 

88 
refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

FINDS Programmer's Manual 

Documentation For File: FIO.FOR 

(second col. represents bias failures. see section 3.3 

in [1] for more details). If timeF(i ,j) )= tstop no 

failures will be simulated. 

failT - double out time of failure determined bv 

subroutine CHKFL 

Ifail - double out failure indicator flaq. Ifail = 0 if 

AHEDR 

FSCHED 

SETCOM 

FLEVEL 

no failure and Ifail = failure type if a failure was 

found. See description on Ifai1t in subroutine FSCHEP 

for details. 

To determine the simulated failure level - returned in 

function 

X = FLEVEL (IFtype,index.Fin,Fib.Fisf,Fhard.Framp,convrt) 

IFtype- integer in absolute failure type 

(1 (= IFtype (= 6) See FSCHED for details. 

index - integer in index into the failure level vectors 

(sensor indicator). Each failure level vector is 

dimensioned to be the number of sensor types in that 

sensor group. For example, MLS = 3 (azim.e1,rng), 

las = 1 

Fin double in increased noise failure levels 

(vector) 

Fib double in increased bias failure levels (vector) 

levels 

Fisf - double in incresed scale factor failure levels 

(vectors) 

Fhard - double in hardover failure levels (vector) 

Framp - double in ramp failure levels (vector) 

convrt- double in conversion factor to be applied to the 

failure level (conversion from proqram to user units) 

F1evel- double out Simulated failure level in user units 

ALTVP. CONVRF. MTH$DSORT 

FSCHED 

ANGLES, AZELRN, CRTE, DETXBI, EGUIDE. EKFl, GSLOPE, 

lNOU, LOGIC4, MCONCO, PSIR, SIMCOM, UPDAT, VARLON 

89 
FINDS Programmer's Manual 

Documentation For File: FIO.FOR 

name: OUTDAT 

func: To print a double preclslon array in a formatted fashion. 

Specifically OUTDAT performs the fo110~ing: 

1) prints a one line comment (up to 70 characters) 

2) if convrt!=1.0 each element of the array is 

multiplied by convrt 

3) the array is printed ~ith up to 4 (user specified) 

columns and ~here each element contains 15 digits. 

call: Call OUTDAT (kdsk,A,n,convrt,nco1,letrs) 

args: kdsk - integer in fortran unit number of the ASCII file 

output ~i11 be directed to 

A - double in array to be printed 

n - integer in length of the array, A 

convrt- double in conversion factor to be applied to 

all elements of A before printing 

ncol - integer in desired number of columns (i.e. the 

number of elements per ro~ of printout); 0<nco1<S 

letrs - char in a one line comment ~hich ~i11 be 

printed preceeding output of the array 

refs: AHEDR 

refbv: PRNTIC 

comm: None 

name: TlOUT 

func: To print a coded message (corresponding to an "event") in the 

time line (TlN) file. The reader is referred to section 4.2 

on page 71 of [1] for a detailed description of this file and 

its format. 

call: Call TlOUT (msg,Imsg1,Imsg2,Imsg3,Imsg4) 

args: msg - integer in message number corresponding to the 

event # in table S in [1] 

Imsg1 - integer in first message qualifier - corresponds 

to 1.0.#1 in table 5 in [1] 

1msg2 - integer in 

to 1.0.#2 in 

Imsg3 - integer in 

to 1.0.#3 in 

Imsg4 - integer in 

to 1.0.#4 on 

all float i ng 

second message qualifier - corresponds 

table S in [ll 

third message qualifier - corresponds 

table 5 in [1] 

fourth message qualifier - corresponds 

pages 71-72. ~here Imsg4=0 means that 

point information ~ill be recorded in 

90 
refs: 

refby: 

comm: 

FINDS Programmer's Manual 

Documentation For File: FIO.FOR 

absolute values. and Imsg4=1 means they ~ill be 

recorded as estimation errors 

Note: Information for the floatinq point descriptors 

discussed in Section 4.2 in [1] is obtained from the 

common block variables. 

ALTYP. CONVRF. MTH$DSORT 

AIRSPS. ATITGS, AUTLD. BLMAS, BMRGS. CHKRAD. CKUNST. DECIDE. 

FINDS. GETMLS, HEALR. LINAC1. NAV, RADALS. RATEG1, RECONF 

ANGLES. AZELRN. CRTE. DETXBI. EGUIDE. EKF1. GSLOPE, lNOU. 

LOGIC4. MCONCO, PSIR, SIMCOM, UPDAT. VARLON 

91 
FINDS Programmer's Manual 

Documentation For File: FIO.FOR 

3.3.7 Documentation For File: FUTSUB.FORname: ABSLIM 

func: Limits an input variable to lie within a symetric bound 

about zero. 

call: Call ABSLIM eX,Xlim) 

args: X - double inout variable to be limited. On return 

-IXliml (= X (= IXliml 

refs: 

refby: 

comm: 

name: 

func: 

call : 

args: 

refs: 

refby: 

Xlim - double in value of the boundary 

None 

AUTOLD. BANKTR 

None 

ACCVEL 

Computes velocity and acceleration terms. Usually used 

in G-frame. 

Call ACCVEL (RDq,RDDg,hdot,Vg,dtvg,hddot.psita,xtacc) 

RDg - double in derivative of position vector [3] 

RDDg - double in 2nd derivative of position vector [3] 

hdot - double out vertical component of velocity vector. 

i.e. hdot = -RDg(3) 

Vg - double out magnitude of velocity in x-y plane 

dtvg - double out down track velocity 

hddot - double out vertical component of acceleration 

vector, i.e. hddot = -RDDg(3) 

psita - double out direction of velocity vector in x-V 

plane 

xtacc - double out 

DATAN2, DSQRT 

FINDS 

cross track acceleration 

comm: None 

92 
name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

ROTATV 

FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

Rotates position, velocity, and acceleration vectors in the 

I-frame into the E-frame and G-frames. 

Call ROTATV (Ri,RDi.RDDi,comet.sinet.we,~ee,rmag,REi,RDe. 

RDg,RDDe.RDDg) 

Ri - double in 

I-frame (3] 

RDi - double in 

I-frame (3] 

RDDi - double in 

I-frame (3] 

comet - double in 

rotation 

sinet - double in 

~e -

~ee - rmag - REi - ROe 

rotation 

double in 

double in 

double out 

double out 

double out 

the I-frame 

RDg - double out 

RODe - double out 

frames 

inertial position vector in the 

inertial velocity vector in the 

inertial acceleration vector in the 

cosine of angle swept by the earth's 

sine of angle swept by the earth's 

earth's rotation rate 

~e '* we 

absolute value of the length of Ri 

pOSition vector in the E-frame 

earth velocity vector coordinitized in 

velocity vectors in G-frame 

relative acc1eration bet~een E and I 

RDDg - double out RODe transformed to G-frame 

ASIN. DATAN2, MATMUL. ROTMAT 

FINDS 

TRANS 

ROTMAT 

Computes various frame transformation matrices. Common 

block TRANS provides the inputs to this routine and common 

blocks TRANS and ANGS store the results. In particular if. 

i=1. ANG(1)=phi. ANG(2)=theta and ANG(3)=psi => Tbg 

i=2. ANG(4l=latitude. ANG(5)=longitude =) Til.Tel,Tge 

i=3. ANG(3)=lat1. ANG(4)=lat2. ANG(5)=lon2-1on1 => Tgg 

i=4. ANG(1)=phi. ANG(2)=theta. ANG(3)=psi => Tbi 

Call ROTMAT (i) 

i - inteqer in 

to compute 

flaq indicating ~hich transformations 

93 
FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

name: 

func: 

call : 

args: 

refs: 

refby: 

comm: 

DCOS, DSIN, MATMUL 

ACEOIN, AUTLD. FINDS. ROTATV. RUNWAY. WAYPNT 

ANGS. TRANS 

RUNGK3 

Perform Runge-kutta integration for one simulation step 

ahead 

Call RUNGK3 (dtime,Dx,X,DERSUB.n) 

dtime double in simulation step size in seconds 

Ox - double out perturbation in X 

X - double out state vector of length n 

DERSUB- double in subroutine name of the function to 

be integrated. (must be of the form DERSUB(Ox,X,n)) 

n - integer in length of X and Ox 

OERSUB 

FINDS 

RUNGEK 

RUNWAY 

Computes the aircrafts position and velocity vectors in 

the G-frame 

Call RUNWAY (Reor,Ri,RDi.we.cospsi,sinpsi,cwt,swt,Posit,Veloc) 

Reor - double out runway origin in the I-frame 

Ri - double in inertial position vector in I-frame 

ROi - double in inertial velocity vector in I-frame 

we - double in earths rotation rate 

cospsi- double in cosine of the runway yaw angle 

sinpsi- double in sine of the runway yaw angle 

cwt - double in cosine of we*dtime 

swt - double in sine of we*dtime 

Posit double out A/C position in the G-frame 

Veloc - double out A/C velocity in the G-frame 

ROTMAT, MATMUL 

FINDS 

TRANS 

94 
name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

arqs: 

refs: 

refby: 

comm: 

SETJ.Xv1 

FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

Initializes all elements of a vector to a constant 

scalar, i.e. 

X ( i ) = v 

Call SETUM (X.k,V) 

X - double out 

k - integer in 

V - double in 

None 

AUTLD 

None 

VECM 

for 1 (= ; (= k 

vectors to be initialized 

length of vector X 

value to use for initialization 

Multiplies two vectors in an element by element fashion. s.t. 

A(i) = A(i)*B(;) for 1 (= i (= n 

Call VECM (A,B,n) 

A - double inout 

B - double in 

n - integer in 

None 

BM..AS, BMRGS 

None 

VECMS 

output vector of length n 

input vector of length n 

length of A and B 

Increments a vector by the element 

two other vectors. s.t. 

by element product of 

A( i) = A( i) + B ( i) *C ( i) for 1 (= i (= n 

Call VECMS (A.B,C,n) 

A - double inout 

B double in 

c - double in 

integer in 

output vector of length n 

input vector of length n 

input vector of length n 

n - length of A. B. and C 

None 

ATITGS. 

None 

BMLAS. BMRGS. LINACI. RATEGI 

95 
FINDS Proqrammer's Manual 

Documentation For File: FUTSUB.FOR 

name: 

func: 

call : 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

xDname: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

VECSUM 

Increments a vector by another s.t. 

A(i)=A(i) + B( i) for 1 <= i <= n 

Call VECSlJv1 (A,B,n) 

A - double inout vector to be incremented 

B - double in input vector 

n - integer in length of A and B 

None 

ATITGS, Br-t..AS, Bfv1RGS, LINACl, RATEGI 

None 

MATV3 

Multiply a 3x3 matrix by a vector s.t. 

X = A*Y 

Note: X and Y CANNOT reside in the same memory locations. 

Call tAATV3 (X,A,Y) 

X - double inout output vector 

A - double in input matrix 

y - double in input vector 

None 

BM..AS, BMRGS, GTOI 

None 

MATTV3 

Multiplv the transpose of a 3x3 matrix by a vector s.t. 

X = A'*Y 

Note: X and Y CANNOT reside in the same memory locations. 

Call tAATTV3 (X.A,Y) 

X - double inout 

A - double in 

Y - double in 

None 

GYROCR 

None 

output vector 

input matrix 

input vector 

96 
name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

MATMUL 

FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

Multiply a 3x3 matrix by a vector (passed as 3 scalar 

elements). Used primarily to multiply the frame 

transformation matrices stored in common block TRANS 

Call MATMUL (V,a,b,c,d~e,f) 

V - double in matrix stored with rows packed into 

a 9 element linear array 

a,b,c - double in elements of vector multiplied by V 

d.e.f - double out elements of resultant vector 

None 

ACEOIN, AUTLD. FINDS. ROTATV. ROTMAT. RUNWAY. WAYPNT 

None 

MOVUM 

Equates two vectors. i.e. 

TO = FRCM 

Call MOVUM (FROM.TO,num) 

FROM - double in input array 

TO - double out output array 

num - integer in length of TO and FRCM 

None 

AUTLD 

None 

DGATIO 

Prints a matrix out on unit kout with an identifier label 

Call DGATIO (A,nr.nc, let) 

A - double in matrix to be printed 

nr - integer in number of rows in A 

nc - integer in number of columns in A 

let - integer in 4 character name for the matrix 

None 

BIASF 

INOU. MAIN! 

97 
FINDS Proqrammer's Manual 

Documentation For File: FUTSUB.FOR 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

S~R 

Computes the averaqe sum of the elements of a vector. 

Elements are included in the average ONLY if a corresponding 

entry in the row of an index matrix is exactly one. 

1 

SUMMER = - SUM {XI;)} 

n 

for 1 <= i <= nx. and 

Index(i). Where n is defined as the number of unit entries 

in Index 

XX = SUMMER (X.nx,Index) 

X - double in vector to be averaged 

nx - inteqer in length of X and Index 

Index - integer in row vector (of length nx) whose 

elements indicate whether corresponding entries in 

another vector are valid (Index(i)=l) or not 

(Index(i)!=1). Note it is implicitly assumed that 

Index is a matrix with row dimension equal to ndim. 

SUMMER- double out value of the average sum of X 

conditioned on the elements of Index 

None 

AVBIAS. SUMIN, SUMOUT 

MAINl 

ASUMER 

Computes the average sum of the elements of a vector. 

Elements are included in the average ONLY if the 

absolute value of a correspondinq entry in the row of 

an index matrix is exactly one. 

1 

ASUMMER = - SUM {Xli)} for 1 (= i <= nx. and 

n 

IIndex(ill=1. Where n is defined as the number of unity 

magnitude entries in Index 

XX = ASUMER (X,nx,Index) 

X - double in vector to be averaqed 

nx - integer in length of X and Index 

Index - integer in row vector (of length nx) whose 

elements indicate whether corresponding entries in 

another vector are valid (IIndex(ill=l) or not 

(IIndex(i)1 !=1). Note it is implicitly assumed that 

98 
refs: 

refbv: 

comm: 

name: 

func: 

call: 

arqs: 

refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

refs: 

FINDS Proqrammer's Manual 

Documentation For File: FUTSUB.FOR 

Index is a matrix with row dimension equal to ndim. 

ASUMER- double out value of the average sum of X 

None 

GTOI 

MAINI 

MAXMIN 

conditioned on the elements of Index 

Searches a double precision vector and determines the 

maximum and minimum values and their corresponding 

locations. 

Call MAXMIN (V,npts~vma)(.vmin~nmax.nmin) 

V - double in vector to be searched 

npts - inteqer in lenqth of V (i.e. number of elements 

in V to be searched) 

vmax - double out value of 

vmin - double out value of 

nmax - inteqer out location 

nmin - inteqer out location 

None 

None 

None 

MAXMINS 

the maximum element in V 

the minimum element in V 

of the maXlmum element 

ot the minimum element 

in V 

in V 

Searches a single preclslon vector and determines the 

maximum and minimum values and their corresponding 

locations. 

Call MAXMINS (V.npts,vmax.vmin,nmax.nminl 

V - real in vector to be searched 

npts - integer in length of V (i.e. number of elements 

in V to be searched) 

vmax - real out value of 

vmin - real out value of 

nmax - inteqer out location 

nmin - integer out location 

None 

99 

the maximum element in V 

the minimum element in V 

of the maximum element 

of the minimum element 

in V 

in V 
FINDS Proqrammer's Manual 

Documentation For File: FUTSUB.FOR 

refby: None 

comm: None 

name: MXMN2 

func: Searches a double preclslon vector and determines the 

maximum and minimum values and their corresponding 

locations conditioned on the value of a correspondinq 

active/inactive flag in a second Vector. Only those 

elements which correspond to "active" elements in the 

conditioning vector are consldered in the max-min operation. 

call: Call MXMN2 (Imactv.V.npts.vmax.vmin.nmax,nmin) 

args: Imactv- integer in an array of active/inactive flags -

s.t. if an element of Imactv is non-zero then a 

corresponding element in V is active and should be 

considered in the operation. 

V - double in vector to be searched conditioned on 

Imactv 

npts - integer in length of V & Imactv 

vmax - double out value of the maximum element in V 

vmin - double out value of the minimum element in V 

nmax - integer out location of the maximum element in 

nmin - integer out location of the minimum element in 

refs: None 

refby: None 

comm: None 

name: VECHGI 

func: fo collapse or expand the size and ordering of a vector. X. 

as directed by a pointer vector. KX. and a flag kflag. S.t. 

The pointer vector KX 15 simplv an array 01' 

monotonically increasing index pointers into X if kflag=l. 

or Y if Klaq=2~ which define the proper elements of the 

resulting vector. 

Y = collapsed X if kflaq = 1 

V 

V 

Y = expanded X if kflaq = 2 (new elements are zeroed) 

One of the key features of this routine is that X and Y 

100 
call: 

args: 

refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

can be equivalent. 

Call VECHGI (ktlag,X,KX.Y,n,nmax) 

klaq integer in flaq indicating to collapse if 1 and 

to expand if 2 

X - double in input vector to be collapsedl 

expanded 

KX - integer in pointer vector used to allocate the 

proper elements to use in the operation 

Y double out output vector which is 

collapsed/expanded version of X 

n - integer in the dimension of KX 

nmax - integer in the dimensioned length of X and Y. 

None 

SAVIT 

None 

MATCG2 

Note: if expanding X, elements of Yare zeroed out 

between nand nmax 

To add or delete a row in a double precision matrix or vector. 

or to add or delete a column in a matrix. If a row or column 

is added. its elements are set to zero. 

Call MATCG2 (jflag,index.Y,nr.nc) 

jflag - integer in operation flag where: 

jflag = 1 add a row -1 delete a row 

jflag = 2 add a column -2 delete a column 

index integer in pointer to row or column to be added 

or deleted 

Y - double inout matrix whose index 'th row or column 

is to be added or deleted 

nr - integer inout number of rows of Y (incremented or 

decremented accordingly in MATCG2) 

nc - integer inout number of columns of Y (incremented or 

decremented accordingly in MATCG2) 

ALTYP 

CLPSBE. CLPSIO. RECONF 

MAINI 

101 
FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

ca 11 : 

args: 

refs: 

refby: 

comm: 

IMTCG2 

To add or delete a row in an integer matrix or vector. 

or to add or delete a column in a matrix. If a row or column 

is added. its elements are set to zero. 

Call IMTCG2 (jflag,index.IV.nr.nc) 

jflag - integer in operation flag where: 

jflag = 1 add a row -1 delete a row 

jflag = 2 add a column -2 delete a column 

index integer in pointer to row or column to be added 

or deleted 

IV - integer inout matrix whose "index" row or column 

is to be added or deleted 

nr - integer inout number of rows of V (incremented or 

decremented accordinq1y in IMTCG2) 

nc - integer inout number of columns of Y (incremented or 

decremented accordinglY in IMTCG2) 

AUYP 

CLPSBE. CLPSIO. RECONF 

MAINI 

PNTINV 

Searches a pointer vector for particular entry. The pointer 

vector is an integer array with monotonically increasing 

elements. Typically, a pointer vector will show how a 

(possibly collapsed) vector's elements relate to a standard 

(absolutely indexed) vector. Therefore. this routine can 

be used to answer the followinq question: "hhat element of 

the measurement vector (a possibly collapsed vector) 

corresponds to the indicated airspeed's output (an absolute 

index)?" 

Call PNTINV (;sns.lpoint.n.index) 

isns - inteqer in valve searched for in Ipoint (usually 

relates to an absolute index in a standard mappinq) 

Ipoint - integer in pOinter vector to be searched 

n - integer in length of Ipoint 

index - inteqer out index in Ipoint where isns was found. 

If isns was not found index < 0 

None 

ADJTBP. CLPSIO. RECONF 

None 

102 
name: 

func: 

ca 11 : 

arqs: 

refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

LIMVAL 

FINDS Proqrammer's Manual 

Documentation For File: FUTSUB.FOR 

Applies a two sided. svmetric limiter about zero to the 

elements of a vector. A. s.t. 

Ali) = A(i), if IAlill (= BLim(i) 

A(i) = signIA(i))*BLim(i). if IAlill) BLimli) 

where BLim is a vector of absolute limit stops - one for each 

element in A. 

Call LIMVAL (A.BLim.n) 

A - double inout 

BLim - double in 

n - integer in 

None 

vector to be limited 

vector of absolute limit stops 

length of A and BLim 

ATITGS. BMLAS. 8MRGS. LlNACl, RATEGI. UPDO 

None 

LIMVL2 

Applies a two sided anti-svmetric limiter to the 

elements of a vector. A. s.t. 

Ali) = BLim(k) if Ali) ) BLimlk) - upper limit 

A( i) = BLim( k+l) if AI il <: BL iml k+l) - lower 1 imit 

Ali) = A(i) otherwise 

where k = (i-1)*2+1 

Call LIMVL2 (A.BLim.n) 

A - double inout vector to be limited 

BLim - double in vector of upper and lower limits 

12 for each element of A) 

n - integer in length of A. and half the length of 

BLim 

None 

AIRSPS 

None 

103 
FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

name: NOISEG 

func: Generates a vector of random samples from a normal 

distribution with zero-mean. and unity variance. 

call: Call NOISEG (X.jseed,n) 

args: X - double out vector of n samples from a N(O,I) 

gaussian distribution 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

jseed - integer inout seed value for the random number 

n -

GAUSS 

ATTIGS. 

None 

BARN! 

generator 

integer in length of X 

BMLAS. BMRGS. LlNAC!. RATEGI. STARTF 

Generates a single random sample from either: 

a N(O.I) distribution if iflag < 0 or. 

a Uniform(-l.l) distribution if iflaq > O. 

X = BARNl (iflag.ikey,iseed) 

iflag - integer in flag which determines the distribution 

from which to select the sample. If iflag < 0 use an 

NCO,l) distribution. else use a uniform (-1,1) 

distribution 

ikey - integer in not used 

iseed - integer inout seed value for the random number 

generator 

BARN! - double out the value of the sample conditioned on 

iflag 

UNIFRM. GAUSS 

AIRSPS. ATITGS. BMLAS. BMRGS. GETMLS. ILNAGI. IRATGI. 

NOISEG. RADALS 

None 

!04 
name: 

func: 

call: 

arqs: 

refs: 

refbv: 

comm: 

name: 

func: 

call: 

ars: 

refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

GAUSS 

FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

Selects a single random sample from a N(am.s) distribution. 

Where am = mean~ and s = standard deviaiton. Note: this 

routine is specific to the VAX computer. 

Call GAUSS (iseed.s~am.v\ 

iseed - integer inout seed value for the random number 

generator 

s - double in 

am - double in 

v - double out 

RAN. DSORT~ DLOG 

BARN!. WINDGT 

None 

UNIFRM 

standard deviation of the distribution 

mean value 

the sample selected 

Selects a random sample from a uniform distribution 

between 0 and 1. This routine is specific to the VAX 

computer. 

Call UNIFRM (iseed.v\ 

iseed - integer inout seed value for the random number 

qenerator 

v - double out value of the sample obtained from a 

Uniform 10.1) distribution. 

RAN 

BARNI 

None 

NAMFIL 

ro create VAX VMS file names which have a common name. and 

various extensions. The common file name is prompted for 

in the first call to NAMFIL - it can be read from the TTY 

or from a data file. 

Call NAMFIL (kunit.Lext,Name) 

kunit - integer in Fortran unit number from which 

res pones are to be accepted 

Lext - char in a 4 character file extension of the 

105 
FINDS Programmer's Manual 

Documentation For File: FUTSUB.FOR 

refs: 

refby: 

form ".FOO", which is to be appended to the common 

group name 

Name - char out rhe resulting (12 character max) file 

name created by concatenating a common group name with 

the specific file extension 

ALTYPO. ENCODE 

FINDS 

comm: None 

3.3.8 Documentation For File: F~SUB.FORname: 

func: 

ca 11 : 

args: 

refs: 

refbv: 

comm: 

GMINV 

Computes the inverse of a square matrix A. If A is 

sinqular or if A is NOT square. the routine computes 

the Penrose generalized inverse. See Rust. B .• Burrus. 

W.R •• and Schneeberger. C •• "A Simple Algorithm for 

Computing the Generalized Inverse of a Matrix". CACM. 

Vol. 9. No.5, May 1966. 

Call GMINV (nr,nc,A,V.mr,mt) 

nr - integer in number of rows in A 

nc - integer in number of columns in A 

A - double in matrix to be inverted 

U - double out generalized inverse of A 

mr - integer out rank of A 

mt - integer in used for print control. mt=O 

suppresses possible error message printout. 

DOT. DOT2. SWAP. VADD 

BIASF. DETECT. EKFN1 

lNOU. MAIN1 

106 
FINDS Programmer's Manual 

Documentation For File: FVMSUB.FOR 

name: MvUL 

func: Forms the matrix product 

Z=X Y 

A sparseness test is performed on x. 

call: Ca 11 MVlIL ( X. Y. n 1. n2. n3.n 

args: X - double in input matrix 

Y - double in input matrix 

n1 inteqer in row dimension 

(n1 x n2) 

(n2 x n3) 

of X and Z 

n2 - integer in col length of X. row length 

n3 - integer in col 1enqth of 

Z - double out output matrix 

refs: VADD1 

refbv: BIASF~ BLEND, DETECT, EKFN1 

comm: MAIN1 

name: rvMJL2 

func: Forms the matrix product 

Z=X Y 

A sparseness test is performed on Y. 

Call MMUL2 (X.Y,n1,n2.n3.Z) 

Y and Z 

(n1 x n3) 

call: 

args: X - double in input matrix (n1 x. n2) 

Y - double in input matrix (n2 x n3) 

n1 integer in row dimension of X and l 

of Y 

n2 - integer in col. 1enqth of X. row length of Y 

refs: 

refbv: 

comm: 

n3 - integer in col. length of Y and l 

Z - double out output matrix In1 x n3) 

VADD 

BLGAIN. DETECT. EKFNI 

MAIN1 

name: MATl 

func: Forms the straightforward matrix product 

Z=X Y 

No sparseness tests are performed. 

call: Call MAT! (X,Y~n1~n2~n3.Z) 

args: X - double in input matrix (n1 x n2) 

107 
FINDS ProQrammer's Manual 

Documentation For File: F~SUB.FOR 

refs: 

refby: 

comm: 

name: 

func: 

ca 11 : 

args: 

refs: 

refby: 

comm: 

name: 

func: 

Y - double in input matrix (n2 x n3) 

n1 integer in ro~ dimension of X and Z 

n2 - integer in col. length of X. ro~ length 

n3 - integer in col. length of Y and Z 

Z - double out output matrix (n1 x n3) 

DOT3 

BIASF. BLEND, BLGAIN, DETECT. MAT3, MAT3A 

MAIN1 

MATlA 

Forms the matrix product 

Z=X Y 

No sparseness tests are performed. Z and Y can start 

at equivalent core locations. 

Call MAT1A IX.Y.n1.n2.n3.Zl 

X - double in inout matrix (n1 x n2) 

Y - double in input matrix (n2 x n3) 

n1 integer in ro~ dimension of X and Z 

n2 - integer in col. lenqth of X. ro~ lenqth 

n3 - integer in co 1. lenqth of Y and Z 

Z - double out output matrix (n1 x n3) 

None 

BIASF. EKFN1 

MAIN1 

MAT2 

Forms the matrix product 

Z=XY' 

in cases ~here the product Z is S~TRIC. No 

sparseness tests are done. The arrays Z and Y 

can start at equivalent core locations. 

Call MAT2 (nl.n2.X,Y,Z) 

of Y 

of Y 

call: 

args: n1 - inteqer in ro~ dimension of X.Y, and col. 

n2 

X -

length of Z. 

inteqer in 

double in 

col. dimension of X and Y 

input matrix (n1 x n2) 

108 
ret's: 

refbv: 

comm: 

name: 

func: 

ca 11 : 

arqs: 

refs: 

refbv: 

comm: 

name: 

rune: 

(" a Ii: 

':if':!C; : 

" 

,' ... , .,: 

y -

Z - DOT2 

EI<.FNl 

MAINl 

MAn 

double in 

double out 

FINDS Programmer's Manual 

Documentation For File: FVMSUB.FOR 

input matrix (n1 x n2) 

output matrix (n1 x n2) 

Forms the sYmmetric matri:.: product 

Z = X V X' 

where V is sYmmetric. ana no soarseness tests ar~ done. 

Call (VlAT3 Inl.n2.X.V.ZI 

nl - inteqer In row lenqth of K and Z. col. 

length of Z. 

n2 - inteqer in 

lenqth of Y 

x - double 

Y - double 

Z - double 

DOT2. f"lA Tl 

BrA. SF. Ei:-.FNI 

rV\AINl 

rvlp r 3~, 

In 

in 

in 

col. 1enqth at' X and Y. row 

inout matrix In1 x n21 

input (svmmetricl matrix in2 x n21 

outout (svmmetric) matri~ (n1 x n11 

for'ms thE' 'O'lmm":'ty'lC matt'l' l)t"("jU-: r 

i = '" v x 

wn.-:y·E' Y 15 5vrnm":tY'i(. Cll10J 11':- '.;U<'tY''';''::rl''.''';S t:.:-":-ts ar": '1(:.n",. 

'~a ; 1 f'lL\ T jA \ n 1 . ni • ~ . y • ~ , 

nl - int":(l~:Y 1n Y'OW I.:-nqtn '~.I Z. (.j. i,,:n'Jtn (".t .. ~n,.1 

n:: o. 

1\ -

,-,j If I"V-i . 

1 nt'?'),","y· 

(JC'UC' i..:--

,jr)uti it" 

q(II.IO i .-

l 

, n 

1 !", 

1 t; 

111 

Hlp.,1 mary", ,n,; • nl, 

i nour. ,,, ',/mrn"'t t' 1,.:, m.jt y' 1. .". .. p .• 

,:,u1;('ut ,'~vrnrn"'t r II~ I m::lt (,1' I II i ' n j , 

\"'. ~ t n Ii : t. r .M ":; r.. L t~ r 

ilY·' 
FINDS Programmer's Manual 

Documentation For File: FVMSUB.FOR 

comm: MAIN1 

name: MAT4 

func: Forms the matrix product 

Z = XY' 

No sparseness tests are performed. 

call: Ca 11 MAT4 (X~Y.n1,n2.n3.Z) 

arqs: X - double in input matrix 

y - double in input matrix 

(n1 

(n3 

n1 integer in row dimension of 

n2 - integer in col. length of X 

n3 - integer in row length of Y. 

x n2) 

x n2) 

X and Z 

and Y 

col. length 

Z - double out output matrix (n1 x n3) 

refs: DOT2 

refbv: BIASF. BLEND 

comm: MAIN1 

name: MAT5 

func: Forms the matrix product 

Z = XY' 

A sparseness test ;s performed on Y. 

ca 11 : Call MAT5 (X. Y.n1.n2.n3.2) 

args: X - double in input matrix (n1 x n2) 

Y - double in input matrix In3 x n2) 

n1 integer in row dimension of X and Z 

n2 - integer in col. length of X and Y 

n3 - integer in row length of Y, col. length 

Z - double out output matrix In1 x n3) 

refs: VAOD. VSCALE 

refbv: EKFN1 

comm: MAIN1 

110 

of Z 

of Z 
name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

name: 

func: 

ca 11 : 

args: 

MAT6 

Forms the matrix product 

Z = KY' 

FINDS Programmer's Manual 

Documentation For File: FVMSUB.FOR 

in cases where Z is symmetric. 

perrormed on Y. Neither X nor 

A sparseness test is 

Y may be equivalent to Z. 

Call MAT6 (n1.n2.X,Y,Z) 

n1 - integer in 

n2 - integer in 

X double in 

Y - double in 

Z - double out 

VADD 

DETECT 

MAIN1 

MADDI 

row length or X~Y~ and Z 

col. lenqth of X. Y. and Z 

input matrix (n1 x n2) 

input (svmmetric) matrix (n1 x n2) 

output (svmmetricl matrix (n1 x n1) 

Adds two matrices as follows: 

Z = X+c1*Y 

Call MADD1 (nr.nc,X,Y,Z.cl) 

nr - integer in row length of X,Y. and Z 

nc - integer in col. length of X,Y. and Z 

X double in input matrix (nr x nc) 

V - double in input matrix (nr x nc) 

Z - double out output matrix (nr x nc) 

el - double in scale factor applied to Y 

None 

BIASF. BLEND. BLGAIN. DETECT. EKFNl 

MAIN1 

MADDI 

Sets up square matrix A where: 

A = c1*B+c2*I 

I is an identity matrix. 

Call MADDI (n,A.B.c1.c2) 

n - integer in size of matrices 

A - double out output matrix (n x n) 

111 
FINDS Programmer's Manual 

Documentation For File: FVMSUB.FOR 

refs: 

refby: 

comm: 

name: 

func: 

call : 

args: 

refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

B - double in input matrix (n x n) 

c1 - double in scale factor app 1 ied to B 

c2 - double in scale factor applied to I 

None 

BIASF, BLGAIN~ DETECT~ EKFN1 

MAIN1 

EQUATE 

Sets a matrix A equal to a matrix B (can be used for 

equating matrix partitions or sub-blocks as well) 

A=B 

Call EQUATE (A,B.nr.nc) 

A - double out 

B - double in 

inteqer in 

integer in 

output matrix (nr x nc) 

input matrix (nr x nc) 

row length of A and B 

col. length of A and B 

nr - nc - None 

BIASF. 

MAIN1 

BLEND. DETECT, EKFN1. FILCOL. INITG. RECONF 

t-1ATNUL 

Initializes columns of a matrix to zero. Where: 

Xi = 0, for n1 (= i (= n2: 

and Xi is the ith col. of X. In addition. if a flaq is 

set. rows between n1 and n2 can be nui1ed out as well. 

Call MATNUL (X.nl.n2.ktrig) 

X - double inout matrix to be nulled 

n1 - integer in first col. (row) to be nulled 

n2 - integer in last col. (row) to be nulled 

ktriq integer in flag, when ktrig=O only columns 

are nulled. otherwise rows and columns are nulled 

None 

DETECT, RCOV, RECONF 

MAINl 

112 
name: 

func: 

call : 

args: 

refs: 

refby: 

comm: 

name: 

func: 

ca 11 : 

args: 

refs: 

refby: 

comm: 

name: 

func: 

ca 11 : 

args: 

refs: 

refbv: 

FINDS Programmer's Manual 

Documentation For File: F~SUB.FOR 

MSCALE 

Sets a matrix A equal to a matrix B and scales. 

A = cl*B 

Call MSCALE (A.B.nr,nc.cl) 

A - double out output matrix (nr x nc) 

B - double in input matrix (nr x nc) 

nr - integer in row length of A and B 

nc - inteqer in col. lenqth of A and B 

c1 - double in scale factor applied to B 

None 

BLGAIN. DETECT. EKFN1. RECONF. UPDPH 

MAIN1 

fRANS2 

Transpose a matrix 

AT = A' 

Call TRANS2 ( nl,n2,A,AT) 

n1 - integer in row length of A. 

n2 - integer in col. length of A. 

col. length 

row length 

A - double in matrix to be transposed n1 x 

AT - double out transposed matrix (n2 x nl) 

None 

BLEND 

MAINI 

BUBBLE 

Performs a bubble sort on an array of inteqers. The 

elements of the array can be ordered increasinq or 

decreasinq in value. 

Call BUBBLE (NA.n.k) 

of AT 

of AT 

n2) 

NA - inteqer inout array of inteqers to be sorted 

n - inteqer in lenqth of array NA 

k - integer in a key. where k>O orders NA decreasinq 

in value while k<=O yields an increasinq order 

None 

HEALR. INITG. READRC 

113 
FINDS Proqrammer's Manual 

Documentation For File: F~SUB.FOR 

comm: 

name: 

func: 

call: 

arqs: 

refs: 

refbv: 

comm: 

name: 

func: 

ca 11 : 

arqs: 

ret's: 

refby: 

comm: 

name: 

func: 

call: 

arqs: 

None 

DOT 

Computes the dot (or inner) product between two linear 

arrays (column vectors)~ with accumulation carried out 

in double precision. 

x = DOT (nr~A,B) 

nr - integer in lenqth of arrays A and B 

A - double in vector 

B - double in vector 

None 

GMI NV. MA T3A 

None 

DOT2 

Computes the dot (or inner) product between two rows of 

a matrix. 

x = DOT2 (nn.A,B) 

nn - integer in 1 enqth of A( B ) times the dimensioned 

row length of A(B) 

A - double in row vector (or row of a matrix) 

B - double in row vector 

None 

GMINV. MAT2. MAT3. MAT4 

MAINl ndim - dimensioned row lenqth of A and B 

DOT3 

Computes the dot (or inner) product between two arrays, 

where one array is stored as a row vector and the other 

as a column vector. 

x = DOT3 (n,A,B) 

n - integer in length of A and B 

114 
refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

name: 

func: 

ca 11 : 

args: 

refs: 

refbv: 

comm: 

A -

B -

None 

MAT! 

MAIN1 

VADD 

double in 

double in 

FINDS Programmer's Manual 

Documentation For File: FVMSUB.FOR 

row vector 

column vetor 

ndim - dimensioned row length of A 

ro increment a qiven vector A by a second vector s.t.: 

A = A+cl*B 

Call VADD (n~c1.A~B) 

n -

c1 -

A -

B -

None 

integer in 

double in 

double inout 

doub 1 e in 

lenqth of A and B 

scale factor 

vector to be incremented 

vector to scale with 

GMINV. MAT5. MAT6. MMUL2 

None 

VADD1 

To increment a given row vector A bv a second row vector 

B s.t.: 

This 

Call 

nn -

c1 

A -

B -

None 

r«JL 

MAINl 

Arow = Arow+cl*Brow 

routine assumes A and B are stored as matrices. 

VADD1 (nn.c1.A~B) 

inteqer in 

row length of 

double in 

double inout 

double in 

length of AlB) times the dimensioned 

AlB) 

scale factor 

row vector to be incremented 

row vector to be scale 

ndim - dimensioned row ienqth of A and B 

115 
FINDS Proqrammer's Manual 

Documentation For File: FVMSUB.FOR 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

arqs: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

arqs: 

VSCALE 

Equates a vector A to a scaled vector B. 

equivalent. 

A = c1*B 

Call VSCALE (A,B,n.c1) 

A and B can be 

A double out 

B - double in 

n - integer in 

vector to store result in 

vector to be scaled 

length of A and B 

c1 - integer in scale factor 

None 

MA.T5 

None 

SEONCE 

Initializes an integer array to a monotonically 

increasing sequence s.t.: 

K = [l.2.3, •••• n.O.O, ••• ,0]' 

Call SEONCE (K,n) 

K - integer out array to be initialized 

n -

None 

integer in lenqth of sequence to be stored in K 

INITG. READRC. SAVIT 

MA.IN1 - ndim - dimensioned 1enath of K 

INSRTN 

Used to update (and maintain) an inteaer vector (of 

pointers) with a new (unique) value. The new value 

is added to the list ONLV if: 

1. it's not alreadY present in the list 

2. the current 1enqth of the list is )=0 

3. the current length of the list is < a 

maximum length. 

Call INSRTN (Iseq~ index, ivalue, mxsize) 

Iseq - integer inout array (list) of unique inteqers 

index - integer inout current length of the list 

iva1ue- integer in candidate for addition to the list. 

116 
refs: 

refby: 

comm: 

name: 

func: 

ca 11 : 

args: 

refs: 

refbv: 

comm: 

name: 

func: 

call: 

args: 

refs: 

refbv: 

comm: 

Iseq 

mxsize- integer in 

None 

READRC 

None 

VECNULS 

FINDS Proqrammer's Manual 

Documentation For File: F~SUB.FOR 

maximum (dimensioned) length of Iseq 

Initializes a linear array to zero - single precision version. 

Where: 

Call 

Xli) = 0.0 for i1 (= i (= i2 

VECNULS (X.i1.i2) 

X -

il - i2 - None 

None 

None 

VECNUL 

real inout 

integer in 

integer in 

vector to be nulled 

starting element to null 

final element to null 

Initializes a linear array to zero - double precision 

version. Where: 

Xli) = 0.0 for i1 (= i (= i2 

Call VECNULS (X,i1.i2) 

X - double inout 

ili2 -

None 

integer in 

integer in 

vector to be nulled 

starting element to null 

final element to null 

BLEND. CHKRAD. DETECT. SAVIT 

None 

117 
FINDS Proqrammer's Manual 

Documentation For File: F~SUB.FOR 

name: 

func: 

call: 

args: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

arqs: 

refs: 

refby: 

comm: 

name: 

func: 

call: 

args: 

swo.p 

Interchanqes 2 rows. 2 columns. or 2 diagonals of two 

matrices. 

Call SWAP (A.B.n.inc) 

A - double inout a matrix to be interchanged 

B - double inout a matrix to be interchanged 

n - integer in number of elements to be swapped 

inc - inteqer in interleavinq factor. where: inc = 1 

swaps columns. inc = ndim swaps rows. and inc = ndim+1 

swaps diaqonals. Where ndim is the row dimension of A 

and B. 

None 

GMINV 

None 

VMA.T1 

Multiplies a given vector by a matrix. 

Y = A X 

where: X is an n2 vector and A is an n1 by 

Ca 11 VMA.T1 CA,X.nl,n2,Y) 

A - double in input matrix (n1 x 

X - double in input vector (n2) 

n1 - inteqer in row of A and length 

n2 - integer in col. of A and X 

y - double out output vector (n1) 

None 

BLEND 

MAIN1 ndim - dimensioned row lenqth of A 

VMA.T2 

Computes the vector-matrix product sum 

Y = Z+A X 

n2 matrix. 

n2l 

of Y 

where is an n2 vector. and A is an n1 by n2 matrix. Y 

and Z can be equivalent. 

Call ~T2 (Z.A.X,n1.n2.Y) 

Z - double inout input vector (nl) 

11B 
refs: 

refby: 

comm: 

A -

X -

nl 

n2 

Y -

None 

BLEND 

MAINI 

double 

double 

integer 

Y and Z 

integer 

double 

in 

in 

in 

in 

out 

FINDS Proqrammer's Manual 

Documentation For File: FVMSUB.FOR 

input matrix (nl x n2) 

input vector (n2) 

row len9th of A, col. lenqth of 

col. length of A and X 

output vector (nl) 

ndim - dimensioned row length of A 

3.3.9 Documentation For File: PLOTD.FORname: 

func: 

call: 

outs: 

PLOTO 

Utility proaram to plot the unformatted (binarY) time historY 

data stored in the .PLT file aenerated by FINDS. 

To invoke PLOTD. the user simply types (at the VMS monitor 

1 eve 1 ) : 

$ RUN PLOTOINODEBUG 

or. if FOREIGN.COM has been executed : 

$ PLOTO 

PLOTD will then prompt the user for various directive 

commands. Time history data is identified by a unique name 

stored in the header of the .PLT file. (See Table 6 on 

page 82 of [1] for a current list of these names.) 

PLOTD can be used to generate plots of one or several 

variables versus time. or to create cross plots of one 

variable vrs. another. CurrentlY PLOTO creates a single plot 

per paae. The plots can be generated on a TEKTRONIX 

4010/4014 or any terminal capable of emulating a 4010 or 4014. 

119 
FINDS Proqrammer's Manual 

Documentation For File: PLOTD.FOR 

3.3.10 Documentation For File: PRINTD.FORname: 

func: 

call: 

outs: 

PRINTD 

Utility program used to examine the unformatted (binary) time 

history data stored in the .PLT file qenerated by FINDS. 

PRINTD can be used to either display selected data in tabular 

form. or to compute temporal means and autocorrelations. The 

results are presented to the users terminal. the sYstem line 

printer. or to a user specified data file. 

To invoke PRINTD. the user simply types (at the VMS monitor 

1 eve 1) : 

$ RUN PRINTDINODEBUG 

or. if FOREIGN.COM has been executed 

$ PRINTD 

PRINTD will then prompt the user for various directive 

commands. Time history data is identified by a unique name 

stored in the header of the .PLT file. (See Table 6 on 

page 82 of [1] for a current list of these names.) 

either: 

a. A table of selected data. where each column of data is 

headed by the name and enqineering units. Data can be 

"windowedll by selectinq upper and lower temporal limits. 

Within a window~ one can further seqment the data by 

specification of a constant skip factor. 

b. All of the following: 

1. The sample mean. 

2. The sample variance. 

3. The sample autocorrelation function normalized bv the 

sample variance. 

4. The decision of a whiteness test performed on the 

selected data. 

Please see Appendix A.1 of [1] for a more complete 

description. 

120 
FINDS Proqrammer's Manual 

Documentation For File: PRINTD.FOR 

3.3.11 Documentation For File: DOC.RATname: 

func: 

DOC 

(Ratfor and Fortran Documentation generator) 

Prepares a RUNOFF input file from specially formatted embedded 

documentation contained in a RAT FOR or FORTRAN program or 

9roup of programs. Each source file is entered in the table 

of contents and each source file. subroutine. and common block 

is entered in the index. 

The program is executed by typing: 

$ DOC 

The user is prompted 

Output file name 

Header level 

Line lenqth 

Input file 

for the follo~ing items: 

The name to use for the RUNOFF input 

file 

A header at this level is created for 

each separate source file. containina 

the source file name. 

Line length to specify to RUNOFF 

Name of source file to be processed. 

or name of indirect file. 

No default extensions are assumed for any of the above. 

In place of specifYinq a source file as input. the user may 

specifY an indirect file by enterinq "@indirect_file_name" ~hen prompted for an input file. The indirect file should 

contain a list of the source files to be processed. This 

option is useful ~hen processing complicated programs spread 

over many source files. 

Installation notes: 

Simply compile and link DOC. then execute this command: 

DOC :== Run/nodebuq DOC 

Source proaram formating notes: 

A documentation header must beqin ~ith the characters "#{doc". 

or "Cdoc" starting in the first column on a separate line. and 

end ~ith the characters "} #" (~ithout the space), or 

"Cenddoc" also on a seperate line for RATFOR. and FORTRAN 

sources respectively. All the enclosed text ~ill be included 

in the runoff file ~ith the follo~ing exceptions: 

121 
FINDS Proqrammer's Manual 

Documentation For File: DOC.RAT 

* The comment character "C" is stripped off the first column 

of each line in FORTRAN sources. 

* Lines of the form "FIG: FFPF(n)" will be used to set aside 

pages for "Floating Full Page Figures". The number 1< n <99 

is the number of pages required for the figure. 

Any data in a line beqinning "name:" will be assumed to be the 

name of a subroutine or common block and hence will be entered 

in the index. 

122 
4 INTERNAL DATA STRUCTURES 

FINDS Programmer's Manual 

Documentation For File: DOC.RAT 

This section describes the important common blocks used by FINDS 

routines to communicate with each other. The first section reviews 

some of the important assumptions and concepts used in buildina and 

manipulatinq the internal data structures. The last section describes 

each common block in detail. Each such description contains a 

statement about the contents of the common block and a description of 

each variable in the form: 

name type units description 

These are followed by a list of all the routines which use the common 

block. 

4.1 Data Structure Conventions 

In the course of developing FINDS. various indexina schemes were 

required. as well as many special purpose data storage conventions. 

Many of these conventions become apparent when the detailed flow 

diaqrams are studied carefully. The individual realizations of these 

methods are described in the next subsections. This subsection 

attempts to describe the conventions and concepts themselves. 

The aeneral storaae format used for matrices is to allocate 

tdimension) them "ndim" by "ndim", where "ndim" is an integer variable 

stored in common block lMAIN11 tndim=15 in this version of FINDS). 

The i j element of the matrix ;s then stored ;n the i i element of the 

storaae area. Therefore. if the matrix to be stored were of size 5 by 

5. and ndim = 15. then we view the matrix as a linear array. with a 

column offset of 15 elements (i.e. five data locations followed by 

ten unused elements in each of 5 columns). Althouah this storaae 

scheme is less efficient (from a memory access point of view) than 

simply storing the columns contiguously (with a column offset of 

five), it was necessary in order to use many of the utility routines 

documented ;n file FUTIL.FOR. 

123 
FINDS Proqrammer's Manual 

Data Structure Conventions 

The OrlqlnS of most of the internal data storaqe conventions can be 

grouped into the followinq areas: 

· No-fail filter 

• FDI logic 

• Reconfiguration 

The first two areas require internal data structures that maintain an 

absolute index so the program can relate states, measurements. 

inputs. failures. etc .• to particular "phvsical" sensors or 

quantities. The last area. however, imposes a need to modify the 

absolute ordering to reflect loss or addition of a sensor. Tables 1-7 

define the important absolute indexing schemes employed by FINDS. 

These tables not only define conventions for particular arrays. but 

also implicitly define all the matrices which operate on them. 

As mentioned above. in order for FINDS to be capable of reconfiqurinq 

itself the absolute indexinq schemes had to be modified. This was 

accomplished by using two techniques. They are: 

• use pointer arrays to provide the mappinq between the absolute 

indexing scheme (actual locations of the data) and the current 

collapsed/expanded sets. 

• physically collapse or expand the arrays 

Both methods are used in FINDS. The following is a typical example of 

the first method: 

YFI is a fixed lenqth vector of averaged measurements 

presented to the no-fail filter. It uses the absolute 

measurement indexing convention discussed in Table 2. 

If ALL replications of a particular type of sensor have 

failed. and are therefore not available to the NFF. the 

corresponding element in YFI is zeroed out. A pointer 

array lNOYP is used to provide the mapping between the 

(possibly) collapsed measurement vector required by the 

NFF and the fixed lenqth vector YFI which is maintained. 

Fiqure 11 graphically shows how this arrangement works. The 

important point to see here is that the data is phYSically 

stored in the array usinq the absolute indexing scheme. 

and it is extracted usinq the pointer array INOYP which 

accounts for any reconfiquration. 

124 
An example of the second method is as follows: 

FINDS Programmer's Manual 

Data Structure Conventions 

RESBOC is a variable lenqth vector of expanded residuals 

from the NFF. The vector is formed by first computinq the 

residuals usinq the (absolute) replicated measurement 

indexinq convention (see Table 7). and then collapsinq 

it to eliminate elements correspondinQ to sensors which 

are not available. The pointer array. INORYP is used to 

mao each element to the absolute index in Table 7. 

Figure 12 shows how this approach works. Notice that 

here the data is storeo in a collapsed fashlon and 

INORYP is used to identify each element (the value of 

an element in INORYP is the measlJrt?ment index in Table 71 

The followinq arrays use this method of oraanization: 

HPl. RESBOG. RESBOC. RBFO. and (SFO 
T~le L No-Fall Fllter Absolute State Indexing Conventioos 

Array state ProgrmI 

Index Vari~le lilits 

1 Xrlll feet 

2 Vrlll feet 

3 Zrlll feet 

4 XrlJf feet/sec 

. 5 Yrlll feet/sec 

. 

6 Zrlll feet/sec 

7 Phi radians 

8 Theta rad1ans 

9 Psi radiCfis 

10 XIII feet/sec 

11 v. feet/sec 

126 
Table 2. No-Fall Filter ,Absolute Measurement Indexing GoovenUons 

Array t1easurenmt Prograll 

Index Nelle lklits 

1 Azm rooic.ls 

2 El rooic.ls 

3 Rng feet 

4 lAS feet/sec 

5 Phi rooic.ls 

6 Theta rooic.ls 

7 Psi radi~s 

8 RA feet 

127 
Table 3. f\{)-Fail Filter Absolute IflJut Indextrg conventions 

Array Irprt Progrcrn 

Index Nare lklits 

1 Ax feet/sec/sec 

2 Ay feet/sec/sec 

3 Az feet/sec/sec 

4 p ICKjians/sec 

5 Q ICKjlcr1S/ sec 

6 R ICKjlCYls/sec 

128 
Table 4. No-Fail Filter Process Noise Indexing Conventions 

Array Progr(JIJ 

Index NaJE Iilits 

1 AX feet/sec/sec 

2 Ay feet/sec/sec 

3 Az feet/sec/sec 

4 p radlcr1s1 sec 

5 Q radicr1S/sec 

6 R radicr1S/sec 

7 Xw feet/sec 

8 Vw feet/sec 

129 
Tctlle 5. Mlsolute Sensor Inaextng cooventlons 

Array sensor Progran 

Index I~ lhits 

1 Ax feet/sse/sse 

2 Ay feet/sse/sse 

3 Az feet/sec/sec 

4 P radims/sec 

5 Q radims/sec 

6 R radims/sec 

7 Azm r8(Ums 

8 El radiB'ls 

9 Rng feet 

10 lAS feet/sec 

11 Phi radians 

12 Theta r8(Ums 

13 psi mllcrts 

14 RA feet 

130 
Table 6. Replicated sensor Irdexlng Cooventioo 

Array Sensor Progrnn 

Irdex I~~l1cat1oo lXlits 

1 Ax-* feet/sec/sec 

2 Ay-* feet/sec/sec 

3 Az-* feet/sec/sec 

4 P-* radi~s/sec 

5 Q-* radl~s/sec 

6 R-* radi~s/sec 

7 Azm-1 radiEris 

8 El-1 radiClls 

9 Rng-1 feet 

10 IAS-1 feet/sec 

11 Phi-l radia1s 

12 lheta-1 radi~s 

13 Psi-l radiEris 

14 RA-1 feet 

15 Azm-2 radicrls 

16 El-2 radia1s 

17 Rng-2 feet 

18 IAS-2 feet/sec 

19 Phi-2 radi~s 

20 Theta-2 radians 

21 Psi-2 radians 

22 RA-2 feet 

* - refers to the repllcatloo currently In use by the ~ 

(e.g. 1, 2, or 3) 

131 
T~le 7. Replicated Measurement Indexing COOVentloo 

Array 

Index 

1 

2 

3 

4 

5 

6 

7 

8 

9 

10 

11 

12 

13 

14 

15 

16 

NeasurenEnt Sensor 

I~LBoolicatioo 

Azm-1 

El-1 

Rng-l 

IAS-1 

Phi-1 

lheta-1 

Psi-l 

RA-1 

Azm-2 

El-2 

Rng-2 

IAS-2 

PI1i-2 

Theta-2 

Psi-2 

RA-2 

132 

Progran 

lilits 

rooiCl'ls 

radiCl'ls 

feet 

feet/sec 

rooiCl'ls 

radiCl'ls 

radi~s 

feet 

radians 

radiCl'ls 

feet 

feet/sec 

radiCl'lS 

radi~s 

radi~s 

feet 
ny 

nyf 

IJ\k)YP YF1 

1 • Azm 

2 • E1 

3 • Rng 

4 • IPS 

8 0 

0 0 

0 0 

0 RA 

Fl~re lL E)((Il1)le Of Pointer Array IrxlexlrYJ 

RESBOC 

Azm-l • 1 

EI-l .. 2 

IAS-1 • 4 

Phl-l .. 5 

Treta-1 • 6 .. Psi-l .. 7 

EI-2 • 9 

Rng-2 • 10 

0 0 

0 0 

0 

Figure 12. EXBlllle of Collapsed Array Indexing 

133 

nymax 

:i 

:! :1 

:< 

~~ 

. 

~ 

~ 

~ 

1 nyf 

~ 

~ 

~ 

:1 
FINDS Proqrammer's Manual 

Detailed Descriptions Of FINDS Common Blocks 

4.2 Detailed Descriptions Of FINDS Common Blocks 

4.2.1 Description Of CMPSTF - name: CMPSTF 

cont: Ouantities associated with the composite (bias-free plus bias) 

no-fail filter. 

vars: nxb - integer unitless the total number of states and 

bias states in the NFF 

GAINKX- double mixed the combined no-fail filter 

gain matrix 

PXF1 - double mixed the combined no-fail filter 

estimation error covariance. (see 2.2.32-2.2.35 

in [2]) 

refbv: ADJTBP. BIASF, BLEND. CHKRAD. DETECT, INITG. NAV, RCOV. 

SAVIT. STARTF, UPDPH 

4.2.2 Description Of DCIDEI - name: DCIDEI 

cont: Quantities needed by the LR computations and the decision 

vars: 

logic. 

Ihyp -

kCTdwhkMXdwhinteger unitless the hypothesis chosen by the 

decision loqic. Where Ihvp = the replicated sensor 

index of the failed sensor if Ihvp(NFT1. or if Ihyp = 

NFT1 it siqnifies nothinq has failed. whereas if 

NFTl(Ihyp<NFTl+3 then it signifies a multiple failure 

of MlS azimuth. elevation. or ranqe respectively 

inteqer unitless counter for elapsed samples since last decision window was started 

inteqer unitless maximum number of samples in a 

decision window (i.e. number of samples/decision 

window) 

kCTewh- integer unitless vector of decision window 

counters - one for each detector. The elements 

are arranged bv absolute replicated sensor index 

kMXewh- integer unitless vector of maximum decision 

134 
FINDS Proqrammer's Manual 

Description Of DCIDEI 

windows in an estimation window (i.e. number of 

decision windows/estimation windows) - one for each 

detector 

PRIORI- double unitless vector of the log of the prior 

probabilities of failure - one for each sensor, 

ordered by replicated sensor index 

ALamda- double un1tless vector of the log-likelihood 

of a sensor failinq - one for each sensor, ordered 

by replicated sensor index 

BetaI - double unit1ess not used currently 

COSTI - double unitless not used currently 

refby: CHKRAD. DECIDE. DETECT. INITG. NAV. PRNTIC. RECONF. SAVIT 

4.2.3 Description Of DETINF - name: DETINF 

cont: Information pertinent to the detectors 

vars: nft - inteqer unitless the total number of replicated 

sensors (considered for FDI) 

nft1 - inteqer unitless nft+1 

nyf - integer unitless the current number of 

replicated measurement sensors 

INORYP- integer unitless pointer vector to the 

measurement sensor type (from Table 1 in [1]). The 

array index is the replicated (and possibly collapsed) 

set of sensors used by the NFF, and the value of an 

element of INORYP is the absolute sensor type of that 

sensor 

ICNTSN- integer unitless ICNTSN is used to determine 

1. if a particular sensor type and 

replication is being used by the NFF 

2. and if it is being used - which element of 

the input vector or expanded measurement 

vector it corresponds to 

ICNTSN is organized as follows: the array index 

corresponds to the absolute replicated sensor index. 

the value is either 

1) the index in the input vector 

135 
FINDS Proqrammer's Manual 

Description Of DETINF 

(if index(=NUl) 

2) or the index in the expanded measurement 

vector (if index)NUl) 

if the sensor is not used bv the NFF the value of its 

element in ICNTSN ;s zero 

RESBOC- double mixed expanded residual vector from 

the no-fail filter. (see 2.3.1-2.3.3 in [2]\ 

refbv: BLEND. CLPSIO. DECIDE. DETECT. FILCOL. INITG. NAV. RECONF. 

RESCMP. SAVIT. SETISN 

4.2.4 Description Of DETSIG -

name: DETSIG 

cont: Sensor noise statistics assumed bv the detectors. 

vars: PDETCT- double mixed vector containing standard 

deviations of the expected noise (in program units) 

assumed for each sensor type by the detectors. PDETCT 

is ordered bv absolute sensor type 

refbv: INITG. PRNTIC 

4.2.5 Description Of DETKBI -

name: DETKBI 

cont: Ouantities associated with the sensor failure detectors 

vars: NF - integer unitless current number of sensor 

TYPES that are active (i.e. not failed\ 

NFmax - inteqer unitless maximum possible number of 

sensor TYPES that can be considered 

NYmax - inteqer unitless maximum possible number of 

measurement sensor types that can be considered 

XBFI - double mixed vector of current failure 

level estimates - one for each detector. Detectors 

136 
FINDS Proqrammer's Manual 

Description Of DETKBI 

are ordered usin~ the absolute indexinq scheme for 

replicated sensors. (see 2.3.18 in [2]) 

PBFI - double mixed vector of estimation 

information for each estimated failure. Ordered in 

the same fashion as XBFI. (see 2.3.20 in [2]) 

VBI - double mixed matrix of blender gain vectors 

where each column of VBI is a blender gain vector. 

The columns are indexed using the same scheme as XBFI. 

(see 2.3.17 in [2]) 

BDFI - double mixed matrix of partial derivatives 

evaluated about the current failure estimates. Specifically~ it is the partial of BF1 w.r.t. failures 

in phi. theta. and psi. The matrix is organized as a 

partitioned matrix with each partition of size NX rows 

by 3 columns. The partitions are ordered (in the 

column direction) as the partial of BF1 w.r.t •• the 

first replication of phi. theta. psi. the second 

replication of phi. theta. pSi. and so on. If dual 

redundancy is assumed the entire matrix would be 

nx bv 18. (see 2.3.16 in [2]) 

refby: ADJTBP. CHKRAD. CLPSIO. DECIDE. DETECT. INITF. INITG. PRNTIC. 

RECONF. SAVIT. SETISN. SUMJUT. TLOUT. UPDAB 

4.2.6 Description Of DETYBI - name: DETYBI 

cont: Observation matrices and compensated residual vectors for the 

bank of detectors 

vars: RESBI - double mixed matrix of failure compensated 

residuals vectors where each column of RESBI ;s a 

residuals vector. The columns are ordered by 

replicated sensor index. (see 2.3.14 in [2]) 

CBFI - double mixed matrix of detector observation 

matrices where each column of CBFI is an observations 

vector for a detector. The columns are ordered by 

replicated sensor index. (see 2.3.15 in [2]) 

refby: DETECT. INITG. SAVIT 

137 
FINDS Programmer's Manual 

Description Of EKBFO 

4.2.7 Description Of EKBFO - name: EKBFO 

cont: Bias filter arrays used in the bias fiter portion of the 

no-fail fiter (extended Kalman fiter). (see [4]) 

vars: XBFO - double mixed bias filter state vector (i.e. 

vector of current normal operating bias estimates 

RESBO - double mixed residuals vector generated by 

the bias filter portion of the NFF 

GAINBO- double mixed Kalman gain for the bias 

filter 

PBFO - double mixed bias filter estimation 

error covariance (or information) 

refby: BIASF. BLEND. CHKRAD. CLPSBE. CLPSIO. DETECT. INITG. NAV. 

ARCOV. RECONF. RESCMP. SAVIT. SUMIN 

4.2.8 Description Of FCOMI -

name: FCOMI 

cont: Communication and common variables between FILERI and 

RECRDS. All quantities are therefore used in generating 

the binary PLT file. 

vars: ntick - integer unitless ratio of no. of simulation 

steps/record step 

itick - inteqer unitless counter variable~ when 

itick=ntick variables are recorded in the loqical 

record 

nchan - integer unit1ess total no. of channels to be 

saved minus one 

jchan - integer unitless current channel number beinq 

saved 

mxchan- integer unit1ess maximum no. of channels 

allowed 

nbuf - inteqer unit1ess (fixed) lenqth of the phYsical 

record buffer 

ibuf - inteqer unitless current length of the phYsical 

record 

ifo1d - integer unitless flaq indicatinq a previous 

call 

138 
to RECRDS when ipass=2 or 4 

FINDS Proqrammer's Manual . Description Of FC(JYI1 

xbut - real mixed array of lenQth nbuf used to 

store the logical records 

refby: FILER!. FINDS. INITG. NAV. RECRDS. SAVIT. SET 

4.2.9 Description Of FC0M2 -

name: FC0M2 

cont: Storage for the names and units of all variables saved 

in the PLT file 

vars: Lname - char strinq list of unique 5 character 

names for each variable stored in the PLT file. 

Lname is of length mxchan 

Lunit - char strinq list of 5 character names for 

the enQineerinQ units associated with each variable 

stored in the PLT file. Lname is of length mxchan 

refbv: FILERl. FINDS. RECRDS 

4.2.10 Description Of FILNAM - name: FILNAM 

cont: Stores the (12 character) names of all the disk files used 

by FINDS. 

vars: KKBLNK- char string blank name used for testing 

FNDK! - char string name of PLT file 

FNDK5 - char strinq name of general input file 

FNOK6 - char strinq name of OUT file 

FNDK7 - char string name of filter input file 

FNDK8 - char string name of TLN file 

FNDKll- char string name of SIj'JI file 

FNDKl2- char strinq name of sensor input file 

refby: FILERl. FINDS. PRNTIC 

139 
FINDS ProQrammer's Manual 

Description Of FlLTlC 

4.2.11 Description Of FILTIC - name: F IUlC 

cont: Additional initial conditions for the no-fail filter 

vars: SDXIC - double mixed vectors of standard deviations 

which define the statistics of an initial normal 

distribution used to choose the initial no-fail filter 

state estimation error (stored in user units) 

XICerr- double mixed vector of initial no-fail 

filter state estimation errors (stored in user units) 

SDPlC - double mixed vector of standard deviations 

of the diagonal elements of the no-fail filter state 

estimation error covariance (stored in user units) 

POSbnd- double feet position error bound for the 

no-fail filter's divergence test 

VELbnd- double feet/sec velocity error bound for the 

no-fail filter's divergence test 

ANGbnd- double radians anQular error bound for the 

no-fail filter's divergence test 

refby: CKUNST. lNlTG. STARTF. PRlNTlC 

4.2.12 Description Of FILTRT -

name: FILTRT 

cont: FlaQs and pointing vectors used by the no-fail filter 

vars: Iupc - integer unitless (not currently used) rate at 

which NFF covariance is updated [= l/(dt*Iupc)] 

ikc - inteqer unitless (not currenty used) rate at 

which NFF is updated [= 1/(dt*luDc*lKC)] 

dtc - double seconds Iupc*Dtime 

lIMUF - inteqer unitless flag to indicate if NFF uses 

the lMU measurements (O:don't use. !=O:use) 

IRSDF - integer unitless flaq to indicate where the 

input measurements are obtained from. (O:body mounted 

accelerometers and rate gyros. !=O:RSDIMJ) 

IRSDFY- inteqer unitless flag to indicate if the RSDlMU 

computed attitudes are to be used by the NFF (O:don;t 

use. else if IRSDF!=O & IlMUF=O & IRSDFY!=O : then use 

them) 

140 
MXRPLFIREPLFinteqer unitless 

replications used 

logic - currently 

inteqer unitless 

used by the NFF. 

sensor type, and 

that sensor used 

FINDS Programmer's Manual 

Description Of FILTRT 

the maximum number of sensor 

in the NFF and in the FINDS FDI 

limited to 2. 

vector of sensor replications 

The array index is by absolute 

the value ;s the replication count of 

by the NFF 

INOUTF- inteqer unitless a matrix which indicates the 

status of all the sensors used by the NFF. The row 

index of INOUTF corresponds to the absolute sensor 

type, and the column index is the replication number 

of the sensor. The value of each element shows the 

current status of the sensor where: 

-3: unavailable (selected out by decision 

logic) 

-2: failed 

-1: available - but not used by the filter 

(i.e. standby status) 

0: not available to the NFF 

1: available and used 

refby: AVBIAS, BIASF, BLEND. CHKRAD. CLPSIO. DECIDE. DETECT, EKFN1. 

FILCOL. GTOI, INITF. INITG. MINSET. NAV. NOISR, PRNTIC. 

RECONF. RESCMP. SAVIT, SETISN. SUMIN. SUMOUT. UPDH 

4.2.13 Description Of FLTCTL - name: FLTCTL 

cont: FINDS proqram control flaqs 

vars: lfilt - inteqer unitless indicates form of NFF. 

Currently Ifilt=1. signifYinq only the standard EKF 

is used (i.e. not the square root form) 

IBfilt- integer unitless indicates type of covariance 

propagation in the bias filter. where 1: propagate 

covariance. and 2: propagate information 

IgainP- integer unitless frequency of Kalman filter 

gain printout (in samples/printout) 

lpass - integer unitless flag to control output to 

(binary) PLT file where 1: initialize PLT fie, 

141 
FINDS Proqrammer's Manual 

Description Of FLTCTL 

refbv: 

Istop - lwoc -

Ierc -

Ivsc -

HradarBIASF. 

INITG. 

2: write data to file. 3: close PLT file 

integer unitless not used currently 

integer unitless indicates whether white or 

colored MLS noise corrections should be used in the 

NFF. (1: use colored noise assumptions [defaultl. 

0: use white noise assumptions) 

integer unitless specifies whether or not 

corrections for earth's rotation are to be used bv NFF 

(1: use corrections [defalutl. 0: don't use 

corrections) 

integer unitless flag to indicate if 

measurements are to be scaled by Yscale. (-1: scale 

[defaultl. 0: don't scale) 

double feet altitude below which the radar 

altimeter is used bv the NFF in place of the MLS 

elevation sensor 

BLEND. CHKRAD. DETECT. EKFNI. FILCOL. FINDS. INITF. 

NAV. PRNTIC. SAVIT. SUMIN. SUMOUT. UPDB 

4.2.14 Description Of FTITLI -

name: FTITLI 

cont: To store the comment records to be stored in the file header 

of the PLT file 

vars: nline - integer unitless number of 56 character comment 

records 

mxlin1- inteqer unitless maximum number of columns 

in LTITLl 

LTITLl- integer string 

the columns of LTITLl. 

mxlinl 

refbv: FILERl. FINDS. INITG. PRNTIC 

142 

comment records are stored in 

LTITLI is dimensioned 15 bv 
4.2.15 

name: 

cont: 

vars: 

refby: 

4.2.16 

name: 

cont: 

vars: 

Description Of GBLENO - GBLEND 

FINDS Programmer's Manual 

Description Of GBLEND 

No-fail filter blender qain (see (3] and (4]) 

VBO - double mixed no-fail filter blender qain 

BIASF. BLEND. CLPSBE. INITG. NAV. RECONF 

Description Of HEALCM -

HEALCM 

Ouantities used by the healer logic (see section 2.5 in (2]) 

kCThlr- integer unitless contains a running count of 

the elapsed samples since the start of the current 

healer window 

kMXhlr- integer unitless total number of samples to 

process before a healer window should be reset 

CONFBD- double unitless logarithm of the initial 

confidence bound (1/19) for the healer test 

PhealT- double mixed vector containing standard 

deviations of the expected noise (in program units) 

for each sensor type - to be used exclusively by the 

healers (this allows flexibility in specifyinq the 

sensor noise statistics appropriate to the healers -

i.e. different from the detectors. no-fail filter. and 

simulation.) PhealT is ordered by absolute sensor 

type 

Bthrsh- double mixed vector of largest expected 

normal operatinq biases for each sensor type (in 

program units). Bthrsh is only used in the healer 

logic and is ordered by absolute sensor index 

Fthrsh- double mixed vector of smallest expected 

failure levels for each sensor type (in proqram 

units). Fthrsh is only used in the healer logic and 

is ordered by absolute sensor index 

Dthrsh- double mixed vector of a decision 

thresholds to be applied to each healer process. 

This vector is ordered by sensor type. 

Dthrsh is defined as: 

Dthrsh(i) = 2.0*CONFBD*PhealT(i)**2 

143 
FINDS Programmer's Manual 

Description Of HEALCM 

refbv: CHKRAD~ DETECT, HEALR. INITG. PRNTIC. RECONF 

4.2.17 Description Of HFCOM - name: HFCOM 

cont: Common quantities used by the healing and failure - reconfiquration logic in FINDS. 

vars: Nfai1 - inteqer unitless total number of sensors that 

FINDS has determined to be "failed" Nfai1~ integer unitless The maximum number of failures 

that FINDS can process (i .e. dimension of !fai1T & 

IfailR) 

NNfail- integer unit1ess number of new failures. i.e. 

the incremental number of sensors which have ;ust been 

detected as failed - but have not been removed bv the 

reconfiguration 10Qic 

Nhea1 - inteqer unitless total number of sensors which 

the healer logic has declared healthy at the end of a 

healer window 

Nheal~ inteqer unitless the maximum number of sensors 

which can heal in one instant. (i.e. the dimension 

of Ihea1P) 

IfailT- integer unitless vector containing the absolute 

sensor type for each failed sensor. Whenever a sensor 

fails its absolute sensor type (from Table 5) is added 

to Ifai1T. Therefore. this vector is ordered by 

relative time of occurrence of the failure. (failed 

sensor index) 

IfailR- integer unitless vector containing the 

replication number for each failed sensor. It is 

ordered the same as IfailT. Together IfailT(i) and 

IfailR(i) determine the i'th failed sensor's type and 

replication. 

IhealP- inteqer unitless vector containing a list of 

the failed sensors which have healed. The value of 

an element is the index in IfailT and IfailR of the 

healed sensor. Therefore. IhealP(j) represents the 

j'th healed sensor and it (i.e. the value of 

144 
FINDS Programmer's Manual 

Description Of HFCOM 

IhealP(1)) points to the IhealP(j)'th failed sensor 

in IfailT and IfailR. 

refby: CHKRAD. DECIDE. INITG. HEALR. RECONF 

4.2.18 Description Of INITVL - name: INITVL 

cont: Initial values for the no-fail filter 

vars: INOBPS- integer unitless lNOBPS=INOBP at the start of 

the run 

PBFOI - double mixed initial values for the 

standard deviations of the bias free estimation error 

(in user units). Addressed by absolute state index 

(see Table 1) 

PBFIC - double mixed initial values for the 

standard deviation of the detector error information 

(in user units), addressed by absolute sensor index 

(see Table 5) 

refby: CLPSBE. CLPSIO. DETECT. INITG. PRNTIC. RCOV. RECONF. SAVIT 

4.2.19 Description Of INOU - name: INOU 

cont: Contains Fortran unit numbers tor 1/0 to the users terminal 

and to all disk files. 

vars: kin - integer unitless unit no. for input from TTY 

kout - inteqer unitless unit no. for output to TTY 

kdsk1 inteqer unitless unit no. for output to PLT 

file 

kdsk5 - inteqer unitless unit no. for input from 

general input file 

kdsk6 - integer unitless unit no. for output to OUT 

145 
FINDS Programmer's Manual 

Description Of INOU 

file 

kdsk7 - integer unitless 

input file 

kdsk8 - integer unitless 

fi le 

kdskl1- integer unitless 

file 

unit no. for input from filter 

unit no. for output to TLN 

unit no. for output to SUM 

kdsk12- integer unitless unit no. for input from sensor 

input file 

refby: AIRSPS 4 ATITGS. AUTLD. BANKTR. BIASF, BMLAS. BMRGS, CHKRAD. 

DECIDE, DGATIO, FILERl4 FINDS. GETMLS. GMINV. ILNAC1, 

INITF, INITG, IRATGl, NAV~ RADALS, RCOV. SAVIT, STABCN, 

TLOUT, VMPRT, WAYPNT 

4.2.20 Description Of MAINl - name: MAINl 

cont: Provides common dimensioninq information for two dimensional 

arrays and a scratch area for temporarY use by all 

subroutines. 

vars: ndim - integer unitless row dimension for two 

dimensional arrays 

ndiml - integer unitless ndim + I 

COMI - double temporary scratch array dimensioned 

ndim by ndim 

refby: ASUMER, BIASF, BLGAIN. DETECT. DGATIO. DOT2. DOT3. EQUATE. 

FILCOL. GETMLS. GMINV. GTOI. IMSCLE, IMTCG2. INITG, LKF. 

LRT, MADDl. MADDI. MATl4 MATlA4 MAT2. MAT3, MAT3A, MAT4, 

MATS. MAT6. MATCG2. MATNUL. fvMJL. Mv1JL2~ MSCALE 4 NAV. 

OUTOAT. PRNTIC, RCOV. SAVIT, SEONCE~ STARTF 4 SUMIN, SUMMER. 

TRANSP. UPOA, UPDAB, UPDB. UPDH. UPDPH, UPDO, VAODl, VMATI. 

Vf'i!AT2. VMPRT, 

146 
r 

4.2.21 Description Of MAIN2 -

name: MAIN2 

FINDS Programmer's Manual 

Description Of MAIN2 

cont: Provides a temporary scratch array for use by all routines. 

vars: C0M2 - double temporary scratch array dimensioned 

ndim by ndim 

refby: BIASF. BLEND. BLGAIN. DETECT. DECIDE. EKFN1. INITG. NAV. 

PRNTIC. SAVIT 

4.2.22 Description Of MULTDT -

name: MJLTDT 

cant: Quantities used in detectinq 

vars: PRIORJ- double mixed 

the prior probability 

the same type to fail 

failure) (ordered MLS 

mUltiple simultaneous failures 

vector of the logarithms of 

of more than one MLS sensor of 

in the same instant (common mode 

azimuth. elevation~ range) 

ALamdJ- double mixed 

of a multiple MLS 

as PRIORJ 

vector of the log-likelihood 

sensor failure. Ordered the same 

RESBJ - double mixed matrix of multiple MLS failure 

compensated residuals vectors. Columns are ordered 

the same as elements of PRIORJ. 

refby: DECIDE. DETECT. INITG. PRNTIC 

4.2.23 Description Of SENSCM - name: SEN SCM 

cant: Ouantities used in determining the SIMULATED sensor 

confiquration 

vars: lIMUS - integer unitless flaq to indicate if the IMU 

sensor signals are simulated (available to the NFF) 

where 1: IMU exists. and 0: IMU doesn't exist 

147 
FINDS Proqrammer's Manual 

Description Of SENSCM 

IRSDS - inteqer unitless flaq to indicate if the RSDIMU 

is simulated. Where 1: simulated: and 0: not 

simulated 

MXRPLS- inteqer unitless the larqest maximum number of 

replications of any sensor that was simulated 

IREPLS- integer unitless vector whose elements indicate 

the simulated replications of accelerometers, rate 

gyros, MLS, lAS. and IMU sensor systems. respectively 

IREAOS- integer unitless not used currently 

refby: CHKRAD. DETECT. INITG. FILCOL 

4.2.24 Description Of SIMCOM -

name: SIMCOM 

cont: Provides communication between the simulation and the routines 

used to record the PLT file (RECRDS and FILER1) 

vars: ifq - integer 

thalf - real 

time - real seconds 

de 1 t - rea 1 seconds 

size 

not used 

not used 

current simulation time 

simulation integration step 

nstep - integer not used 

tstart- real seconds startinq time of the 

simulation 

tstop - real seconds final time (estimated) 

refby: CHKRAD. CKUNST. DECIDE. FILER1. FINDS. GYROCR. lNITG. 

NAV. PRNTIC, RECONF, RECRDS. TLOUT 

4.2.25 Description Of SMPRM - name: SMPRM 

cont: Saves qeneral simulation quantities associated with the 

148 
PLT file 

vars: nbuf - inteqer unitless 

used to incrementally 

ntick - integer unitles5 

steps/record steps 

delt - real seconds 

by FINDS 

LCODE - inteqer 

refby: READRC 

4.2.26 Description Of STITL - name: SrITL 

FINDS Programmer's Manual 

Description Of SMPRM 

length of the phYsical record 

store the data in the PLT file 

the ratio of no. of simulation 

the integration step size used 

not used 

cont: Stores the comment records contained in the file header 

of the PLT file 

vars: nline - inteqer unitless 

comment records 

mxline- inteaer unitless 

in LTITL 

LTITLE- inteqer strinq 

the columns of LTITLE. 

m):.line 

refbv: READRC 

4.2.27 Oescriotion Of SvSUl - nam.:: :; y:;Ul 

number of 56 character 

maximum number of columns 

comment records are stored in 

LTITLE is dimensioned 15 bv 

cont: 0uantities associated with t~e inout~ to th~ no-fai1 filt~r. 

\far-~: flJU - inteoer' unitless t(ltai numt·er of inputs to 

nl)-fail tilt--,. In(ll1dinq ar.;t\litv inour:s 

1\)lJl _. total number of inputs to 

14'~ 
FINDS Programmer's Manual 

Description Of SYSUI 

NU-NG) 

NUlPl - integer unitless NUl+1 

NG - integer unitless total number of qravity inputs 

NU1C - inteqer unitless NUl - currently not used 

INOUP - inteqer unitless pointer vector to absolute 

input measurements used by the NFF. Where~ the array 

index corresponds to the location in UFl, and the 

value is the absolute input measurement type index 

found in Table 3. Note: since we do not allow the 

input vector to collapse this array is not strictly 

required - however, it does provide much of the 

functionality needed to facilitate reconfiquring the 

inputs to the NFF in future releases of FINDS. 

UFI - double mixed vector of compensated inputs 

used by the no-fail filter (computation in SUMIN) 

refby: ADJTBP. AVECMP, BIASF, BLEND, BLGAIN. CLPSBE, CLPSIO, DECIDE. 

DETECT EKFNl, FILCOL~ GTOI. HEALR, INITF, INITG. NAV, NOISR. 

PRNTIC. RCOV, RECONF. RESCMP, SAVIT, SETISN. SUMIN, UPDPH 

4.2.28 Description Of SYSXl - name: SYSX1 

cont: Bias free filter state dimensions and sYstem matrices 

vars: NX - inteqer unitless total number of states in bias 

free portion of the no-fai filter 

NXI - integer unitless NX+l 

AFI - double mixed describe state transition 

matrix - set in UPDA. (see 2.2.13 in [2]) 

BFl - double mixed discrete processes noise 

covariance matrix (i.e. EWE/). (see 2.2.13 in [2]) 

refby: ADJTBP. BIASF, BLEND, BLGAIN. CLPSBE. CLPSIO. DETECT, EKFNl. 

INITG, NAV, PRNTIC, RCOV, RECONF. SAVIT, STARTF 

150 
r 

4.2.29 Description Of SYSXBO - name: SYSXBO 

FINDS Proqrammer's Manual 

Description Of SYSXBO 

cont: Ouantities associated with the bias filter portion of the 

NFF. 

vars: NB - integer unitless the current number of biases 

estimated by the NFF (NB=NUB+NYB) 

NUB - integer unitless the current number of input 

sensor biases estimated by the NFF 

NUBl - integer unitless NUB+1 

NYB - 1nteger unitless the current number of 

measurement biases estimated bv the NFF 

NBMXI - integer unitless the original (total) number 

of biases requested to be estimated bv the NFF 

INGBP - integer unitless pointer vector to the sensor 

type of each bias estimated 4 where the array index is 

the bias index used bv the filter. and the value of 

each element is the absolute sensor index (from 

Table 5) of the corresponding sensor 

ABFl - double mixed discrete state transition 

matrix which accounts for the estimation of normal 

operating biases. (see eq. 2.2.30 in (2]) 

refby: ADJTBP. BIASF, BLEND. BLGAIN. CHKRAD. CLPSBE. CLPSIQ, DETECT 

EKFN1. INITG. KALMN. NAV 4 PRNTIC. RCOV 4 RECQNF. RESCMP. SAVIT. 

SLMIN. UPDPH 

4.2.30 Description Of SYSYW1 - name: SYS'(WI 

cont: Quantities associated with the no-fail filter's observations 

and process noises 

vars: NY - inteqer unitless total number of possibly 

averaqed (or collapsed) measurements presented to the 

no-fail filter 

Ndistb- integer unitless total number of process noise 

inputs to the NFF 

NYMXI - integer unitless initial (maximum) number of 

averaged measurements to the NFF 

INOYP - inteqer unitless pointer vector to "active" 

151 
FINDS Proqrammer's Manual 

Description Of SYSYW1 

refby: 

4.2.31 

name: 

cont: 

vars: 

refby: 

averaged outputs used by the NFF where INOYP is formed 

such that the array index corresponds one-to-one with 

the elements of the (possibly collapsed) measurements 

of the NFF. and the value of each element corresponds 

to the absolute measurement index in Table 2. 

lNOYPI- integer unitless inverse mapping of INOYP. i.e. 

the array index is the absolute measurement index. and 

the value is the corresponding index in the current 

measurement vector to the NFF. If a particular 

measurement type is not used by the filter its value 

in INOYPI will be zero 

YF1 - double mixed vector of averaged 

measurements used by the NFF - uses absolute 

measurement sensor indexing 

RF1 - double mixed vector of measurement noise 

covariances organized by absolute measurement index 

(Table 2). Each element in RF1 is adjusted to 

reflect the number of sensors averaged 

OF1 - double mixed vector of process noise 

covariances organized by absolute input index 

(Table 3). (see 2.2.14 in [2]) 

HP1 - double mixed effective observation matrix 

for NFF (partial of h w.r.t.x) (see 2.2.31 in [2]) 

ADJTBP. BIASF. BLEND. BLGAIN. CHKRAD. CLPSBE. CLPSIO. DETECT. 

EKFN1. INITF. INITG. NAV. NOISR, RCOV. SVIT. SUMOUT. UPDPH 

Description Of YOBSRV -

YOBSRV 

Contains the scaling array for the filter observations 

Yscale- double mixed vector of scale factors used 

to scale each averaged measurement into the NFF. The 

scaling is performed to ensure that the measurement 

noise variance is unity for each sensor 

AVECMP. BIASF. BLGAIN. CLPSBE. DETECT. INITF, INITG. RCOV 

RESCMP. SAVIT. SUMOUT. UPDH. UPDPH 

152 
153 

FINDS Proqrammer's Manual 

Description Of VOBSRV 
FINDS Proqrammer's Manual 

REFERENCES 

5 REFERENCES 

(11 Lancraft. R.E. and Caglayan. A.K .• "FINDS: A Fault 

Inferrinq Nonlinear Detection System - User's Guide". 

NASA CR-172199. September 1963. 

(2] Caqlavan. A.K. and Lancraft. R .E.. "A Fault Tolerant SYstem 

for an Inteqrated Avionics Sensor Confiqurat'ion". NASA CR-3634. 

1964. 

(3] Caqlavan. A.K. and Lancraft. R.E •• "An Aircraft Sensor 

Fault Tolerant System", NASA CR-165876. April 1982. 

(4] Caqlavan. A.K. and Lancraft. R.E •• "A Separated Bias 

Identification and State Estimation Alqorithm for 

Non-l1near Systems". Automatica, Vol. 19. No.5. 

pp. 561-570. September 1983. 

(5] "VAX-ll DIGITAL Standard Runoff version 2.0. Users Guide". 

Digital Equipment Corporation. No. AA-J268B~ May 1982. 

154 
APPENDIX A 

SUMMARY OF SPECIFIC HARDWARE AND SOFTWARE REOUIREMENTS 

Computer: 

Storage: 

Terminals: 

Hard-copv 

devices: 

Operatina 

System: 

Software: 

Digital Equipment - VAX-7ao or 750 

At least one disk drive 

Either a Tektronix model 4010/4014 or one that emulates a 

Tektronix 4010/4014 (for plotting purposes.) 

No specific requirements. All output is directed to 

disk files or to the users terminal. 

VMS Version 3.0 or higher. VMS utilities and 

libraries are required. 

Fortran-77 compiler 

The followina files are supplied: 

Command Files: 

FINDS .COM 

FINDSLIB.COM 

GETDOC .COM 

MAKEFPG .CctJI 

Executable Files: 

DOC.EXE 

FINDS.EXE 

PLOTD.EXE 

PRINTD.EXE 

Fortran Files: 

DOC.FOR 

FGAC.FOR 

FIO.FOR 

A-1 
SlM'1A.RY OF SPECIFIC HAROWA.RE AND SOFTWt\RE REQUIREt-ENTS 

FIOSUB.FOR 

FMA.IN.FOR 

FSENS.FOR 

FSFDI.FOR 

FUTSUB.FOR 

FVMSUB.FOR 

FWII\O.FOR 

PLOTO.FOR 

PRINTD.FOR 

Libraries: 

FINDSLIB.OLB 

OPT Fil es: 

PLOT.OPT 

PRINTO.OPT 

COM files: 

- FINDSC.COM 

FINDSL.COM 

FINDSLIB.COM 

FOREIGN.CCM 

FPMV3.COM 

FIL files: 

FINDSPM.FIL 

FINDSPMA.FIL 

FINDSPMB. FIL 

RNO files: 

FPMV3.RNQ 

LISA floppy disk files: 

A 5 1/4 floppy disk ~hich contains t~o Lisa Dra~ applications: 

1. FINDSfiqs - all the flo~charts in the FINDS programmers manual. 

2. FINDScharts - all the tables used in the FINDS programmers 

manual. 

A-2 
APPENDIX B 

GENERATING THE FINDS PROGRAMMERS MANUAL 

It was stated in the introduction that this manual was generated in a 

semi-automatic fashion usinq a combination of a rudimentary text 

formattinq program called Digital Standard Runoff (OSR), an Apple Lisa 

computer usinq LisaOraw, and a text stripping program (DOC). This 

appendix provides the details of this system. In particular this 

appendi x wi 11 : 

o Enumerate the procedure required to produce a COPy of this 

proqrammers manual. 

o Briefly describe the mechanics of the automatic documentation 

system. 

o Document the current set of "rules" for embedded source code 

documentation. 

o Describe the steps required for addinq future documentation 

to the manual. 

o And finally, present some observed stenqths and shortcominqs 

of this approach. 

The following steps are required to produce a copy of this manual: 

1. Type $ @foreign and then $ @findspg ,this produces a file 

fpmv3.mem which can be printed on a suitable printing device 

(daisv wheel, dot matrix_ or laser printer). 

B-1 
GENERATING THE FINDS PROGRAMMERS MANUAL 

2. Load the Lisa floppy disk into an Apple Lisa computer and 

print all the figures and tables using LisaDraH, or 

alternatively if a file of current figures is maintained, 

simply make copies of the figures and tables. 

3. Insert the figures and tables into the document in the 

approriate places. 

As shoHn above. only three simple steps are required to produce a copy 

of an existing manual. NoH let's take a closer look at Hhat actually 

Has performed in step 1. Figure 13 ShOHS a closeup of the underlying 

mechanics. From this figure He can see that step 1 first stripped. 

from a list of files, documentation containing: 

o Each file's contents 

o Subroutine descriptions 

o Common block descriptions 

In addition. index items Here added and the files Here put in a form 

compatible Hith DSR (all done via the program DOC.) Each type of 

information is saved in a separate file. These files are then 

referenced in a runoff file Hhich contains a template of the manual 

(e.g. the Introduction, Appendicies, and beginnings of chapters Hhere 

the files Hill be included.) The output of DSR is a file Hhich 

contains all the written text, and saves "Hhite" space for all the 

figures and tables. 

B-2 
Text Editor 

Documentation 

Template File 

(e.g.DSR 

Text file) 

LISA/Draw 

Figures & Tables 

File Header 

Documentation 

Finished 

Manual 

••• 

ooc 

Subroutine 

Documentation 

D.S.A. 

Text of Manual 

Common Bkx:k 

Documentation 

Figure 13. Mechanics of Automatic Manual Generation 

B-3 
GENERATING THE FINDS PROGRAMMERS MANUAL 

In order for the text stripping program, DOC, to work properly various 

"rules" are required for placing embedded documentation in Fortran 

source files. The basic premise is that comment lines which occur 

between special header lines are to be treated as documentation. 

Currently the following header delimiters are supported: 

1. Cfil Cendfil - These bracket file content comments. 

2. Cdoc Cenddoc - These bracket subroutine documentation. 

3. Ccom Cendcom - These bracket common block documentation. 

In qeneral. formattinq within header delimiters is arbitrary. 

However. if "Cname:" is encountered. the rest of the line is treated 

as a file. subroutine or common block name and is entered into the 

index. Furthermore. if fiqures are required, DOC can be used to save 

space for them. This is done bv using the followinq construct: 

"Cfiq: FFPF(n)" where 1<n<99 is the number of Floatinq Full Page 

Fiqures required. The following rules must be followed: 

1. Header delimiters must occur on separate lines 

2. Each line between header delimiters must start with a comment 

character "e" (for FORTRAN files). 

3. Each line of documentation must be less than or equal to 70 

characters (not counting the comment character.) 

4. Each line is passed verbatum into the document so that block 

formatting can be performed using tabs and spaces. 

5. The special symbols "Cname" and Cfig" discribed above must 

start in column 1. 

Althouqh the formatting of documentation is arbitrary and therefore up 

to the programmer, in order for the final document to be consistent a 

documenting convention is required. In this document the following 

convention was adhered to: 

B-4 
GENERATING THE FINDS PROGRAMMERS MANUAL 

File header documentation 

Cfil 

Cname: 

Ccont: 

Csubr: 

Cendfil 

Name of the file. 

Description of what the file contains. 

list of subroutines ~ith a one line description of each. 

Subroutine and Program documentation 

Cdoc 

Cname: Name of subroutine or function (~ith optional enumeration of 

Cfunc: 

Ccall : 

Cargs: 

Mnemonics.) 

Short description of ho~ the subroutine functions. 

Sample calling sequence. 

list of arguments used in calling sequence along ~ith a short 

definition and an indication of ~hether they are used as inputs 

outputs or both. 

Cints: list of key internal variables and there definitions. 

Crefs: list of subroutines referenced by the routine (~ith optional 

description of each.) 

Crefby: list of the routines that reference this routine. 

Ccomm: list of the common blocks used by this routine (~ith optional 

description of each.) 

Cfig: FFPF(n) TITlE[ ••• ] 

Cenddoc 

Common block documentation 

Ccomblk 

Cname : 

Ccont: 

Cvars: 

Crefby: 

Cendcom 

Name of 

Purpose 

List of 

List of 

the common block. 

or contents of the common block. 

variables alonq ~ith a definition of each. 

routines containing this common block 

8-5 
GENERATING THE FINDS PROGRAMMERS MANUAL 

At this point the reader should have a basic understanding of how the 

automatic documentation system works, as well as how to add 

documentation to a Fortran source file (the reader is refered to [5] 

for a complete discussion of the DSR commands used to format the 

runoff file.) However, it is not yet clear what steps are required to 

generate the manual if additional documentation~ and/or figures or 

tables are added or deleted. Basically the same steps mentioned at 

the start of this appendix apply, with the following exception: since 

DSR doesn't support the notion of lists of tables, figures, or 

references -- they must be maintained by hand. This means that: 

1. If table or figure numbering is modified, all direct 

references to figures or tables by number must be updated to 

reflect the new sequence. This can be avoided if they are 

refered to by title or placement. 

2. The page numbers in the list of figures and the list of 

tables must be corrected. This is accomplished by simply 

running DSR once. noting the correct page numbers~ correcting 

the runoff file, and re-running DSR. 

3. If references are added or subtracted from the manual. 

citations made in the body of the report must be corrected. 

as well as the list of references itself. 

In closing. the following 

effectiveness of this method. 

observations are made 

On the positive side: 

as to the 

1. The documentation is available inside the source file itself, 

therefore it is readily available for a programmer to 

reference. 

2. Documentation can be kept up to date by simply making an 

incremental addition to existing text. Moreover it can 

conveniently be done at the same time the code is altered 

when the concept is clearest. 

3. WOrking documentation can be made available at any point in 

the development process. 

4. It's flexible. All documentation is stored electronically. 

Therefore. changes can be made without disturbing the overall 

structure, or compleatly re-drawinq old figures to add minor 

B-6 
GENERATING THE FINDS PROGRAMMERS MANUAL 

modifications. 

For all its strong points. there are of course some ~eaknesses as ~ell: 

1. DSR's lack of support for tables. figures. and references can 

create some extra maintainence effort. This could be 

eliminated if a more po~erful text formatter ~here used. or 

if a pre-filter ~ere ~ritten to do the maintainence 

automatically. 

2. Because the documentation is ~ritten in a decentralized 

fashion it can be discontinuous in style and notation. unless 

clearly defined rules are follo~ed. 

3. If a correction in notation is desired several files must be 

modified, rather than a single one in the case of a more 

conventional document. 

4. Source files ~ill. of course. be larger if this method is 

used. This may be a concern if disk space is at a premium. 

B-7 
Common blocks 

cmpstf. 134 

dcidei, 134 

deti n t'. 135 

detsig, 136 

detxbi. 136 

detybi. 137 ekbfO~ 138 

fcoml. 138 

fcom2. 139 

fil nam. 139 

fil ti c. 140 

fi ltrt, 140 

fltctl. 141 

ftitll. 142 

gblend. 143 

healcm. 143 

hfcom. 144 

initvl. 145 

i nou, 145 

main1, 146 

main2. 147 

multdt. 147 

sen scm. 147 

simcom. 148 

smprm. 148 

stitl. 149 

sysu1, 149 

Sysxl. 150 

sysxbO. 151 

sysywl. 151 

yobsrv. 152 

Source files 

doc.rat. 17. 121 

fqac.for. 13. 85 

IM)EX 

fio. for. 14, 86 

fmain.for. 11~ 18 

fsens.for, 14, 86 

fsfdi.for. 11~ 28 

futsub.for. 15. 92 

fvmsub.for. 16, 106 

fwind.for. 13. 85 plotd.for~ 17. 119 

printd.for. 17, 120 

Subroutines 

abslim. 92 

accvel. 92 

adjtbp. 75 

asumer. 98 

avbias, 84 

avecmp. 82 

barnl. 104 

biasf. 41 

blend. 44 

blgain. 47 

bubble, 113 

chkfl. 88 

chkrad. 48 

ckunst. 36 

clpsbe, 73 

clpsio, 71 

convrf, 83 

decide. 64 

detect, 51 

dgatio. 97 

doc. 121 

dot. 114 

dot2. 114 

dot3. 114 

ekfn1. 38 

equate. 112 

Index-l 
fllcol. 73 

finds - (main program). 18 

flevel. 89 

fsched. 87 

gauss. 105 

gminv. 106 

gtoi. 36 

gyrocr. 35 

hea1r. 77 

imtcg2. 102 

inital. 27 

initf. 32 

initg. 32 

i nsrtn. 116 

kalmn. 37 

1 imva 1. 103 

limv12. 103 

1 kf, 63 

lrt. 64 

lrthlr. 82 

maddl. 111 

maddi. 111 

matl. 107 

matla. 108 

mat2. 108 

mat3. 109 

mat3a. 109 

mat4. 110 

matS. 110 

mat6. 111 

matcQ2. 101 

matmu I. 97 

matnu 1. 112 

mattv3. 96 

matv3. 96 

maxmin. 99 

maxmins. 99 

minset. 76 

mmul. 107 

mmu12. 107 

Index-2 

movum~ 97 

msca1e. 11.3 

mxmn2. 100 

namfil. 105 

nav (fault tolerant naviqator\. 

28 

noiseQ. 104 

noisr. 72 

outdat, 90 

plotd. 119 

pntinv. 102 

printd. 120 

prntic. 87 

rcov. 75 

reconf. 65 

rescmp. 73 

rotatv, 93 

rotmat. 93 

rungk3, 94 run~ay, 94 

savit. 86 

seqnce, 116 

set. 27 

setisn. 47 

setum. 95 

startf. 33 

sum;n, 34 

summer. 98 

sumout. 34 s~ap. 118 

tlout. 90 

trans2. 113 

unifrm. 105 

upda. 48 

updab. 49 

updb. 49 

updh. 51 updph~ 51 

updq, 50 

vadd. 115 
vaddl. 115 

vechg1. 100 

vecm~ 95 

vecms~ 95 

vecnul. 117 

Index-3 

vecnuls. 117 

vecsum, 96· 

vmatl, 118 

vmat2. 118 

vscale, 116 
Standard Bibliographic Page 

1. Report No. 12. Government Accession No. 3. Recipient's Catalog No. 

NASA C:R-177986 

4. Title and Subtitle 5. Report Date 

rINDS: A :;.'ault Inferring Nonlinear Detection System - December 1985 

Prop,rammers J'anual Version 3.0 6. Performing Organization Code 

7. Author(s) 8. Performing Organization Report No. 

P,oy E. Lancraft Report No. 6012 

9. Performing Organization Name and Address 10. Work Unit No. 

BBN Laboratories 11. Contract or Grant No. 

lQ !foulton Street NASl-16579 Cambridl!e. HA 02238 13. Type of Report and Period Covered 12. Sponsoring Agency Name and Address 

National Aeronautics and Space Administration Contractor Report 

14. Sponsoring Agency Code 

Washington DC 20546 505-34-13-12 

15. Supplementary Notes 

Langley Technical '~onitor: :;.'rederick ~lorrell 

Comnuter Prop,ram Documentation 

16. Abstract 

This report provides detailed software documentati.on of the digital computer 

program FINDS (~ault Inferring Nonlinear Detection System) Version 3.0. FINDS 

is a highly modular and extensible comnuter program designed to monitor arid 

detect sensor failures, while at the same time providinp, reliable state estimates. 

In this version of the program the PINDS methodology is used to detect, isolate, 

and compensate for failures in simulated avionics sensors used by the Advanced 

Transport Operating Systems (ATOPS) Transport System p.esearch \Tehicle (Tsny) 

a ;-!icrm"rave Landing System (HLS) environment. !t is intended that this report 

serve as a programmers guide to aid in the maintanence, modification, and 

revision of the FINDS software. 

17. Key Words (Suggested by Authors(s» 18. Distribution Statement 

Sensor failure detection, fault toleran 

navigation, HLS, no-fail filter Unclassified - Unlimited 

Subject Category 06 

19. Security Claseif.(of this report) 120. Security Ciassif.(of thill pag .. ) ! 21 No. of Pages i 22. Price 

Unclassified Unclassified . 173 A08 

For sale by the National Technicill InfoJ'!!lctj~I' So!l'Yic.e, Springfield, Virginia 22161 

NASA LaDlley Form 63 (JUDe 1985) 

in 
End of Document