&EPA
United States      Industrial Environmental Research  EPA-600/7-80-010b
Environmental Protection.  Laboratory          January 1980
Agency        Research Triangle Park NC 27711
Coal  Preparation Plant
Computer Model:
Volume II.
Program Documentation

Interagency
Energy/Environment
R&D  Program  Report

-------

-------
                                           EPA-600/7-80-010b

                                                  January 1980
Coal Preparation  Plant Computer  Model
                        Volume  II.
              Program  Documentation
                              by

                 Frederick K. Goodman and Jane H. McCreery

                       Battelle Memorial Institute
                        Columbus Laboratories
                          505 King Avenue
                        Columbus, Ohio 43201
                       Contract No. 68-02-2163
                           Task No. 814
                      Program Element No. EHE623A
                    EPA Project Officer: James D. Kilgroe

                 Industrial Environmental Research Laboratory
               Office of Environmental Engineering and Technology
                     Research Triangle Park, NC 27711
                           Prepared for

                 U.S. ENVIRONMENTAL PROTECTION AGENCY
                    Office of Research and Development
                        Washington, DC 20460

-------
                                FOREWORD
          Many elements and chemical compounds are known to be toxic to man
and other biological species.  But our knowledge concerning the levels and
conditions under which these substances are toxic is extremely limited.
Further, little is known concerning the emission of these pollutants from
industrial processes and the mechanism by which they are transported,  trans-
formed, dispersed, or accumulated in our environment.

          Portions of the Federal Clean Air Act, the Resource Conservation
Recovery Act, and the Federal Water Pollution Control Act require the  U.S.
Environmental Protection Agency  (EPA) to identify and regulate hazardous or
toxic substances which result from man's industrial activities.  Industrial
pollutants are often identified  only after harmful health or ecological
effects are noted.  Remedial actions are costly, the damage to human and
other biological populations is  often irreversible, and the persistence of
some environmental contaminants  may endanger future populations.

          EPA's Office of Research and Development is responsible for  health
and ecological research, studies concerning the transportation and fate of
pollutants, and the development  of technologies for controlling industrial
pollutants.  As a part of this office, the Industrial Environmental Research
Laboratory, which is responsible for development of pollution control  techno-
logy, conducts a large environmental assessment program.  The primary  objectives
of this program are:

          •  The development of  information on the quantities of
             toxic pollutants emitted from various industrial
             processes—information needed to prioritize health
             and ecological research efforts.

          •  The identification  of industrial pollutant emissions
             which pose a clearly evident health or ecological risk
             and which should be regulated.

          •  The evaluation and  development of technologies for
             controlling pollution from these toxic substances.

          The coal cleaning environmental assessment program has as its
specific objectives the evaluation of pollution and pollution control problems
which are unique to coal preparation, storage, and transportation.   The coal
preparation industry is a mature yet changing industry, and in recent years
significant achievements have been made in pollution abatement.  As an aid
in the evaluation of an advanced physical coal cleaning facility being
constructed near Homer City, Pennsylvania, an existing computer program
was verified and modified to simulate the design and operation of physical
coal preparation plants.   Specifically, this report provides user documentation
(Volume I) and programmer documentation (Volume II) for Coal Preparation
Simulation Model Version 4 (CPSM4)  as modified by Battelle.
                                    11

-------
                                   PREFACE
          Since July, 1976, Battelle's Columbus Laboratories has been con-
ducting a major study for the U.S. EPA on the environmental assessment of
coal cleaning processes.  In one portion of this study,  existing computer
programs capable of modeling coal preparation plants were verified and modi-
fied to aid in the evaluation of an advanced coal cleaning facility being con-
structed at Homer City, Pennsylvania.  The only computer program found with the
required capabilities was one developed in FORTRAN under the technical leader-
ship of the U.S. Bureau of Mines and the sponsorship of the U.S. EPA.  The
original version of this program, Coal preparation ^imulation Model Version 4
                                                         CD*
(CPSM4) is described in Gottfried, Jacobsen, and Vaillant
          This document describes in detail a Battelle modified program
CPSM4.  The Battelle version of CPSM4 maintains all of the basic capabilities
of the original version; however, these have been restructured and augmented
extensively to make the program usable in the evaluation of a particular
plant.
          The actual presentation is divided into two volumes:   the first
contains user documentation and the second contains program documentation.   The
goal of the first volume is to make the program a usable and understandable
tool for the nonprogrammer interested in the simulation of coal preparation
plants.  The second volume is intended for individuals with knowledge of the
FORTRAN language who are interested in the detailed implementation of the
material presented in Volume I.
* Reference numbers refer to the Reference List at the end of Volume I.  A
  separate reference list is included at the end of Volume II.
                                     iii

-------
          Although pages in each volume are numbered sequentially,  tables
and figures are numbered by volume, chapter, and part followed by a sequence
number as shown below.  The numbering of equations begins at (1)  within
each part.
                           H-12-6.2
                                  i  i
                                  i  i
                                  J  sequence number
                                 part
                               i
                              chapter
                           volume
                                   IV

-------
                                ABSTRACT

          This report documents a steady state modeling system that simulates
the performance of coal preparation plants.  This modeling system was deve-
loped originally under the technical leadership of the U.S. Bureau of Mines
and the sponsorship of the U.S. Environmental Protection Agency.   The
modified form described in this report was developed by Battelle  for the
U.S. Environmental Protection Agency.  The system is written in FORTRAN.
          The original purpose of the modifications was to make the program
usable in the evaluation of an advanced coal cleaning facility being constructed
at Homer City, Pennsylvania.   Subsequent changes were made to allow the model
to be used for a wider range of performance and cost evaluations.   Initial
changes to the original program were made to (1) increase the number of
process operations which  could  be similated and (2) simplify operation of
the program.  Later modifications were made to permit the calculation of
plant water flows and the estimation of plant costs.
          The report is divided into two volumes; Volume I contains user
documentation, and Volume II provides program documentation.   The manner
in which flows of coal are represented and the mathematical approach of the
various unit operations are discussed in detail in Volume I.   Also, the
approach taken for the evaluation of costs is presented.  The preparation
of the input and the interpretation of the output are described in terms
of an example.  In Volume II, the program documentation begins with a
discussion of the basic principles of documentation and then presents each
routine and common block in the system in terms of these principles.
          This report covers work during the period from July 1976 through
July 1979.
                                    v

-------
                              TABLE OF CONTENTS
                                 (Volume II)
FOREWORD	._..... t. .........     11
PREFACE	•   •    iii
ABSTRACT 	 ........      v
LIST OF FIGURES, ...............	   viii
ACKNOWLEDGEMENTS	     xi

1.0  INTRODUCTION  	........ 	  ...       1

     1.1  Basic Principles	   .       4

          1.1.1  Machine Independence   	       4
          1.1.2  Localizing Machine Dependence	   ..-       6
          1.1.3  Localizing Single Decisions  .  	       6

     1.2  Documentation Conventions  	       8

2.0  INFORMATION STORAGE 	      13

     2.1  Dynamic Storage Allocation	  .      14
     2.2  The /WORK/ Common Block	      17
     2.3  The /CNTVAR/ Common Block	      21
     2.4  The /LOCALV/ Common Block	  . .   .      23

3.0  OVERALL STRUCTURE	      24

     3.1  The BLOCK DATA Subroutine	      27
     3.2  Program CPSM4	      29
     3.3  Subroutine SIMUL	  .  .  .	      35

4.0  COMPUTATIONAL UTILITIES  	      51

     4.1  Subroutine CMPBRK   	      52
     4.2' Subroutine BRSIZE   ........... 	  .      56
     4.3  Interpolation and Approximation   ;  .	      67
     4.4  Subroutine INTS	      69
     4.5  Function YINTRP	      73
     4.6  Subroutine SDSIZE   	      79
     4.7  Subroutine DSTRB 	      82
     4.8  Subroutine ECON	      86

5.0  THE UNIT OPERATIONS	      98

     5.1  Subroutine BREAK2   	      99
     5.2  Subroutine NOTPTH	     104
     5.3  Subroutine SCREEN   	     108
     5.4  Subroutine DCWASH   	     112
     5.5  Subroutine WASH	     119
     5.6  Subroutine WASH2 .  .  .  .	     122
                                      VI

-------
                              TABLE OF CONTENTS
                                (Continued)
     5,7  Subroutine FROTH 	        126
     5.8  Subroutine BREAK i	        135
     5.9  Subroutine ROTARY  	        140
     5.10  Subroutine CRUSH  	        147

6.0  CHARACTER MANIPULATION	        156

     6.1  Displaying Size Information  	        158
     6.2  Displaying Unit Descriptors  	        160
     6.3  Internal Character Display Codes 	        161
     6.4  The /CHRSET/ Common Block	        169
     6.5  The /CODERC/ Common Block	        172
     6.6  The /FILES/ Common Block	        173
     6.7  The /CONST/ Common Block	-	        174
     6.8  Subroutine CNVTIE  	        175
     6.9  Subroutine PRSIZE  	        182
     6.10  Subroutine RDDESC 	        191
     6.11  Subroutine PRDESC 	        195
     6.12  Subractive RDVAL  	        198

7.0  INPUT PROCESSING  	        201

     7.l"  Subroutine RDUNIT  	        202
     7.2  Subroutine RDCURV  	        206
     7.3  Subroutine RDFEED  	        214
     7.4  Subroutine CONFSV  	        219
     7.5  Subroutine FEEDSV  	        222
     7.6  Subroutine RDCFBS  	        226
     7.7  Subroutine RDFDBS  	        231
     7.8  Subroutine SVBASE  	        236
     7.9  Subroutine RDBASE  	        239

8.0  REPORT GENERATION 	        243

     8.1  The /BLK1/ and /BLK2/ Common Blocks	        244
     .8.2  Subroutine VESSEL	        247
     8.3  Subroutine PRHEAD  	        250
     8.4  Subroutine OUTPTl  	        253
     8.5'  Subroutine CMPUS 	        264
     8.6  Subroutine OUTPT2  	        273
     8.7  Subroutine OUTPT4  	        288
     8.8  Subroutine PRLINE  	        299
     8.9  The /IOCNT/ Common Block	        302
     8.10  The /FLAGS/ Common Block	        303

9.0  REFERENCE LIST FOR VOLUME II	        304


                                      vii

-------
                              LIST OF FIGURES






Figure No.                                                             Page






II-1-1.1   A  Machine-Independent ANSI FORTRAN Program .....    -     5




II-1-2.1   Flowcharting Symbols   	        12




II-2-2.1   Equipment Information  Control Block  	        19




II-2-2.2   Curve Set Information  Block  	        20




II-2-3.1   Content of /CNTVAR/ Common Block   	        22




II-3-0.1   Elements of Program 	        25




II-3-1.1   Listing of Block Data  Subroutine   	        28




II-3-2.1   Listing of Program CPSM4  	        30




II-3-3.1   Listing of Subroutine  SIMUL  	    .    36




II-4-1.1   Listing of Subroutine  CMPBRK  	        53




II-4-2.1   Percent Ash by Size	        57




II-4-2.2   Flowchart for Subroutine BRSIZE 	        62




II-4-2.3   Listing for Subroutine BRSIZE 	        63




II-4-4.1   Flowchart for Subroutine INTS 	        79




II-4-4.2   FORTRAN Listing for Subroutine INTS 	        71




II-4-5.1   Flowchart for Function YINTRP 	        74




II-4-5.2   FORTRAN Listing for YINTRP   	        75




II-4-6.1   FORTRAN Listing for Subroutine SDSIZE 	        80




II-4-7.1   Listing of Subroutine DSTRB  	        83




II-4-8.1   Listing of Subroutine ECON   	        87




II-5-1.1   Listing for Subroutine BREAK2 	       100




II-5-2.1   Listing for Subroutine NOTPTH 	       105




II-5-3.1   Listing for Subroutine SCREEN 	        109




II-5-4.1   Listing for Subroutine DCWASH 	        113




                                      viii

-------
                               LIST OF FIGURES
                                 (Continued)

Figure No.                                                            Page

II-5-5.1   Listing for Subroutine WASH	-,       120

H-5-6.1   Listing for Subroutine WASH2  	       123

II-5-7.1   Listing for Subroutine FROTH  	 .......       127

II-5-8.1   Listing for Subroutine BREAK  	       136

II-5-9.1   Listing for Subroutine ROTARY 	  ...       141

H-5-10.1  Listing for Subroutine CRUSH  ......  	       148

II-6-3.1   CDC Numeric Internal Display Codes  .........      166

II-6-3.2   Simple Numeric Conversion Routine ..........      166

II-6-3.3   Function IRJLZ  ......... 	      167

II-6-4.1   Initialization of Letter Array  . 	      169

II-6-4.2   Internal Display Codes for CPSM4  	  . .      171

II-6-6.1   Initialization of /FILES/ Variables 	      173

II-6-7.1   Initialization of /CONST/ Variables 	      174

II-6-8.1   Listing for Subroutine CNVTIE 	      176

II-6-9.1   Mesh Sizes	      183

II-6-9.2   Fractional Sizes  	  . .      184

II-6-9.3   Flowchart for Subroutine PRSIZE 	  . .      186

II-6-9.4   FORTRAN Listing for Subroutine PRSIZE  	      187

II-6-10.1  FORTRAN Listing for Subroutine RDDESC  	      192

II-6-11.1  FORTRAN Listing for Subroutine PRDESC  	      196

II-6-12.1  Listing for Subroutine RDVAL  	 ....      199
                                      IX

-------
                              LIST JOF FIGURES
                                (Continued)

Figure No.


II-7-1.1  ' Listing for Subroutine RDUNIT	,. .. . . 	     203

II-7-2.1   Listing for Subroutine RDCURV  .,......„..._..     207

II-7-3.1   Listing for Sub.r.0,uti,n£ HBFEED	-  .     215

II-7-4.1   Listing for Subroutine  CONFSV	  .     .220

II-7-5.1   Listing for Subroutine FEEDSV	     ,223

II-7-6.1   Listing for Subroutine RDDFIS  .	  .  .     227

II-7-7.1   Listing for  Subroutine RDFDB'S	     232

II-7-8.1   Listing for  Subroutine SVBASE  	  ...     237

II-7-9.1   Listing for  Subroutine RDBASE  	     240

II-8-1.1   Contents  of  /BLK1/ Common Block 	     245

II-8-2.1   Listing for  Subroutine VESSEL  	     248

II-8-3.1   Listing  for  Subroutine PRHEAD  	     251

II-8-4.1   Listing for  Subroutine OUTPT1  	     254

II-8-5.1   Listing for  Subroutine CMPUS  	  	     265

II-8-6.1   Listing for  Subroutine OUTPT2	    .274

II-8-7.1   Listing for Subroutine OOJTPT4	,.  .     289

II-8-8.1   Listing for Subroutine PRLINE  	     300

-------
                              ACKNOWLEDGEMENTS

          This study was conducted as a Task on Battelle's Columbus Laboratories'
program "Environmental Assessment of Coal Cleaning Processes" supported by the
Industrial Environmental Research Laboratory, U.S. Environmental Protection Agency,
Research Triangle Park, North Carolina.
          Dr. Byron S. Gottfried, Departments of Industrial Engineering and
Energy Resources at the University of Pittsburgh, and P. Stanley Jacobsen,
Coal Preparation and Analysis Laboratory of the U.S. Bureau of Mines, are
thanked for their patient assistance.  Valuable assistance has been provided,
through comments in several progress review meetings, by Mr. Ed Zawadzki, con-
sultant to General Public Utilities Corporation, Messrs. Charles Statler, Ray
McGraw, and Jim Tice of Pennsylvania Electric Company, Dr. Gerald Janik of
New York State Electric and Gas Corporation, and Mr. Ken Harrison of Heyl and
Patterson, Inc.
          The contributions of Mr.  G.  Ray  Smithson, Jr., Program Manager,
Mr. Alexis W. Lemmon, Jr.,  Deputy Program  Manager, and Dr. Gerald L. Robinson,
Task Leader, are gratefully acknowledged.
          The advice, counsel, and comments of the EPA Project Officer, Mr.
James D. Kilgroe, and others at the IERL/RTP facility were invaluable in
performance of this work.
                                     XI

-------
                             II  PROGRAM DOCUMENTATION
                               1.0  INTRODUCTION
          The documentation of large computer programs is never easy.
Theoretically, it has a simple goal - to describe exactly how the program does
what it does.  Very-generally, the documentation has two primary purposes.
From the standpoint of the final user of the program, it tells him how to use
the program and explains exactly how the results are derived.  This informa-
tion is needed by the final user, if he is to use the program effectively and
if he is to evaluate its results.  From the standpoint of the programmer who
must maintain, debug, alter, or enhance the program, the documentation is
needed so that he can fully understand the programming conventions and
algorithms used.  It is this second type of documentation, programmer's
documentation, which causes the most difficulty.  Throughout the remainder
of this work, the term documentation will be used to refer to that documentation
written for the use of programmers.
          For simple programs the documentation consists of a series of des-
criptions and flowcharts which describe the program.  This description includes
a brief presentation of each routine and common block, a description of the
variables used, and a description of the actual program instructions and their
relationships.  The purpose of such documentation, then, is to describe the
program, where the term program refers to the actual set of instructions which
make it up.  The production of this type of documentation is straightforward
and often quite mechanical.  Despite the tediousness of its production, this
level of basic documentation is important and must be made available.
          As programs get larger, however, the above level of basic documenta-
tion becomes increasingly less than satisfying and sufficient.  Before the
specific programming code description can be useful to a programmer who is con-
sidering making some change, he must first understand the approach being taken.

-------
He must  first  fully understand what a particular section of code is intended
to do before he  can hope  to appreciate a description of the particular logic
used to  do it.   A second  level of documentation is then needed.  This second
level describes  what  the  larger sections of code do and: how these sections are
logically interrelated.   This second level represents the functional
documentation  of the  major components in the system.
          As an  example of the distinction between functional  documentation'
and basic documentation,  consider any one of the examples in Carnahan,
       (D*
et al.    t on the use of applied numerical methods.  For example  they show
the application  of a  fourth order Runga-kutta method to the transient behavior
of a resonant  circuit.  Pages 370 through 375 include flowcharts of  the routines
used, descriptions of the variables, brief descriptions of the routines, and
the FORTRAN listing of those routines.  These pages are an excellent example
of basic documentation.
          Suppose now that the above five pages alone were copied  and given to
a programmer along with a sample run and the complaint that the results seemed
incorrect.  Could he  fix  the program or at least diagnose the  problem?  The
answer would almost certainly be that he could not.  Additional information
would be needed  about the Runga-kutta approach to  the solution of  differential
equations and  about the actual mathematical  form of the circuit problem.  Such
information is,  of course, provided in  the remainder of Chapter 6  of Carnahan
et al.   This chapter  is an excellent example of functional documentation.  Un-
fortunately, there is still a real potential problem.  What if the programmer
selected did not happen to know about differential equations,  or perhaps knew
no calculus at all?   It is this sort of problem that is often  faced  in attempts
to document large computer programs such as  CPSM4.
          Before the  algorithms and functional relationships used  in a program
can be appreciated and understood by some programmer, he must  understand the
methodology or basic  approach from which they derive.  Why were the particular
set of functional relationships chosen to solve the problem at hand?  What
were the alternative  approaches and why were they rejected?  Questions such as
these relate to  the methodology used in the design of the computer program
being documented.  It is  to this level of methodological documentation that
much of  the discussion in this presentation belongs.
* Reference numbers in this volume refer to the Reference List on page 304.

-------
          Methodological documentation differs from basic and functional docu-
mentation in one very important way.   It need not be specific to any particular
computer program.  It does not describe how a particular program is written;
rather, it provides the information needed to understand why a possibly large
group of computer programs are written the way they are.  The above is not,
however,  intended to imply that no actual computer programs will be presented.
The opposite is true.  Program CPSM4, along with a number of examples, will
be explicitly described.  This description will also include, however, the
methodological underpinnings of the program.

-------
                             1.1  Basic Principles

          Throughout the ensuing discussion many opinions are expressed upon
which conclusions are drawn and programs will be written.  It is the author's
hope that his opinions relative to this area are self-consistent and reason-
able.  They are based on a series of general, interrelated, basic principles.
Though these are premises - i.e., cannot be proved and/or have not been
empirically verified - they nontheless seem true and can be stated explicitly
though not formally.  This part of the chapter introduces them as a group.
Each will be discussed and used in more detail in various places throughout
this documentation.

1.1.1  Machine Independence

          Programs, in this  case FORTRAN programs, are often measured in terms
of their machine independence.  Without becoming overly  pedantic, the term
machine independence  seems to  have at least  two uses.  In one sense, it is
used to measure  the likelihood that  the program will run on any randomly
selected computer without requiring  major  programming changes.  A program
is said to be machine independent  if it has  a high likelihood of running on
many different machines.  It is,  in  essence,  in  this sense  that  the  term will
be used here.  There  is, however,  another  use of  the term.   It  is used  to measure
that proportion  of  the program which is written  in ANSI  FORTRAN.  Since every
major FORTRAN compiler must  include  ANSI FORTRAN  as part of  its  language inter-
face, the assumption  in  the  above  use of the term machine  independence  is that
if a program is written  in ANSI  FORTRAN, then it  will be usable  on any machine
having a FORTRAN compiler.
          Machine independence,  in  the  first sense of the  term,  is not  just  a
syntax problem if FORTRAN is being used as the programming  language.  The
fact that a program is written in such a way that it will be compiled success-
fully by any FORTRAN  compiler, does  not imply that it will execute in the same
way on each computer.  ANSI FORTRAN  is not semantically  a machine-independent
language.  This fact  is especially true of the FORMAT statement.  As an
example of the above  lack of semantic machine independence on the part of

-------
ANSI FORTRAN, consider the extremely simple problem shown in Figure II-l-l.l.
The problem here is to write a computer program that will first read a name,
containing no more than 20 characters and punched on a card beginning in
column 1, and then write it introduced by the message "the name is".
          This program would compile under any FORTRAN compiler, but it would
produce the desired results  only on a CDC 6000 or 7000 series computer.  The
reason is simple.  Only the above CDC series computers have word size and
internal character display codes constructed to allow storage of 10 characters
per computer word.  Any other computer would ignore characters within the
fields defined and would not, therefore, produce the desired results.
                    DIMENSION NAME  (2)
                  1  FORMAT(2A10)
                  2  FORMAT(1H1,1OX,11HTHE NAME  IS,1X,2A10)
                    READ(5,1)(NAME(I),1=1,2)
                    WRITE(6,2)(NAME(I),1=1,2)
                    STOP
                    END

        FIGURE II-l-l.l.   A MACHINE-INDEPENDENT  ANSI FORTRAN PROGRAM

          The point to be recognized here is that the results produced by a
FORTRAN program are not just dependent on the syntax of that program.  They
are also  dependent upon the internal characteristics of the  computer compil-
ing and executing the program.  Putting this more precisely, it is  the seman-
tics of a FORTRAN program that finally determine its independence,  given that
it has syntactic independence.  Being written in ANSI FORTRAN is a  necessary
but not sufficient condition for a program to be machine  independent.

-------
1.1.2  Localizing Machine Dependence

          It must be emphasized that few significant programs  including
program CPSM4 will be completely machine independent - i.e., will run without
any change whatsoever on any computer with an ANSI FORTRAN compiler.   It is
the responsibility, however, of the programmer to minimize the machine de-
pendencies whenever possible if he is claiming to write machine-independent
code.  Furthermore, those dependencies should be localized as  much as possible
in the code.  It is an absolute law that the probability of error increases
significantly as the number of changes needed in a program increases and as
                                                                     v
those changes become more dispersed.  If a program must be changed in order
to move it to another machine, then it is the programmer's responsibility to
minimize the probability of error associated with -that move.

1.1.3  Localizing Single Decisions

          Closely related to the notion of localizing machine  dependencies,
is the principle of localizing single decisions.  This methodological princi-
ple, stated very simply, is that whenever possible a single decision on the
part of the programmer should be reflected or implemented wi(thin a single
block of statements in the language interface.  There are numerous examples
of this principle in the following presentation.
          The use of this principle has two obvious benefits.   First, because
the decision has been implemented at one local point, it will  be easy to find
in the program and easy to change when necessary without introducing error.
The localization also means that the making of that decision will*be explicitly
discussed in the basic documentation describing that area of the code.  As.a
result, the program will be easier for others to understand and work with.
          The second benefit that derives from using the principle of localiz-
ing single decisions is that it encourages the programmer to think about the
problem that he is programming more deeply than he might otherwise.  It is
very easy to program every problem as though it consisted of a collection of
special cases each of which is independent of every other.  Such programming,

-------
-though it often tends to execute efficiently from the standpoint of absolute
central processing time, is highly undesirable from the standpoint of large
program design for the very simple reason that it generates programs that
become too long to work with effectively.  There is much to be said for
economy of notation in programming and the principle of localizing and,
therefore, finding single decisions helps greatly in achieving the economy.

-------
                        1.2  Documentation Conventions

           In  the  following discussion,  a  large number of FORTRAN  routines
 are  presented.   In  general,  these  routines  have one  of  two  purposes.  Many
 are  intended  to  serve  only as  an example  for  some  particular  point  that  is
 being made.  -These  are always  quite short and often  given in  fragmentary-
 form.   The purpose  and function of these  routines  is obvious  from the context
 of the discussion.   No effort  is made  to  document  them  further.   The  other
 set  of routines  are those that actually make  up  the  program.   Each  of these
 routines  is documented in detail.   This chapter  discusses the conventions to
 be used in this  documentation.
           The methodological documentation for many  of  the  routines within
 CPSM4  has already been given in Section I.  The  material  in this  section
 assumes that  the reader is familiar with  it.   In those  cases  where additional
 methodological discussion is needed, it is presented in the part  immediately
 preceding the part  on  the relevant routine.  Each routine is  given its own
 part within the  presentation.   The text of each  part contains necessary
 functional documentation to make  the basic documentation clear.   The  basic:
 documentation is given in the  form of one or  two figures which present the
 functional documentation for that  routine.  These are the flowchart for  the
 routine and the  listing of the routine as generated by  the  FTN FORTRAN compiler
 on the CDC machine  at  Battelle's  Columbus Laboratories.  All  basic  descriptive
 documentation for a routine is included in the comments for that  routine,
 including a 'verbal' flowchart. No separate  discussion constituting  the basic
 documentation of  the routines  is provided.  Since  this  convention does not
 agree  with normal practice,  a  brief description  of the  commenting conventions
 used in the listings of the routines is given here-
           The  basic documentation  conventions used in the routines  presented
here are based on two  simple premises.  First, the primary  user of basic
documentation  is  the programmer who  is  unfamiliar with  the'  routine being
documented and who must make some modification in  that routine.  This  un-
familiarity may derive  from  the fact that  the programmer has never seen  the

-------
routine in question, or it may derive from the fact that though the programmer
has worked with the routine before, or even written the routine, he has for-
fotten the details of the actual coding conventions used.  Remember that basic
documentation views the routine as a set of instructions.  Its purpose is to
describe those instructions.  In this context, the basic documentation con-
stitutes the documentation of last resort.  The programmer who is interested
in what a routine does and generally how it does it will read the functional
documentation.  He will not read the basic documentation until he must deal
with the actual code".
          The second basic premise upon which the basic documentation
conventions are based is that when a programmer needs to know what the actual
code of a routine looks like, the document that he will have easiest access to
and that he will be primarily interested in, is the listing of the routine
itself.  The basic documentation will be turned to only when the programmer
has some question or doubt about why some line or block of code is constructed
in the way it is.  The single most frustrating experience in the author's
programming life is to have before him the listing of a routine within some
large program; the need to understand why some line of code is, or worse is
not, there; and the information that the basic documentation is either log-
istically unavailable or "in preparation".
          What follows from the above two premises seems obvious.   The place
for the basic documentation is in the listing itself.  The two should be
inseparable.  A routine is not truly even written until the basic documentation
is completed.  The following information is included in the comments of every
routine of importance presented here.  First the title of the routine intro-
duced by a comment beginning with the word TITLE in column 7,  This comment
tells the reader basically what the routine does and/or what the name of the
routine stands for.  The second comment begins with the routine type and name
in column 7, followed by a description of what the routine generally does.
This description constitutes a brief synopsis or outline of the functional
description.  The thirJ comment type, which begins with the word PARAMETER
in column 7, is included if and only if the routine has any formal parameters.

-------
For each parameter, a brief description of its use is included.   The fourth
comment type begins with the word COMMON in column 7.,' This comment is included
if and only if the routine has any variables declared in common blocks within
that routine.  The purpose of this comment is to specify exactly which of the
declared common variables are actually used in the routine.  Since common
variables are used in many routines, no description of their use is included
as this description is not germane to the routine.  The fifth comment type,
which is keyed by the word EXTEENALS in column 7, is used if and only if the
routine makes any external references including FORTRAN library routines.
Finally, the sixth introductory comment begins with the word VARIABLE in column
7.  This comment describes all the local variables used in the routine.  All
of the comment types are included between the statement introducing the routine
and the next named comment card.  The basic purpose of this set of comments
is straightforward - to.define every symbol that appears in an executable
statement in the routine.
          The executable statements in the routine are broken into a series
of steps.  Though more  than one physical line of code may participate in a
single step, the following general rules are followed for breaking a routine
into steps.  First, all executable statements, with the possible exception
of a labeled'RETURN statement immediately preceding the END statement, are
part of some step in the routine.  Second, if a block of statements form a
single step, then those statements must be physically contiguous.  In so far
as branching is concerned, it is unrestricted within a given step; however,
no statement external to the step may branch to any statement other than the
first statement in the  step.  Groups of steps may be blocked into sections
if the routine is long  enough to warrant such additional segmentation. . If this
is done, no statement outside of a section may branch to any statement within
the section other than  the first one.  The reader may note that these conventions
tend to force structured programming.  Readers unfamiliar with the term
                                               (2)
structured programming  are referred to Dijkstra   .
          The cpmmenting conventions associated with the above structuring of
the routines are as follows.  All of the steps in the routine, or within a
section if sections are used, are numbered sequentially from one.  Each step
                                       10

-------
is introduced with a comment with the word STEP, followed by its number, in
column 7.  The purpose of the comment is to describe the function of the step
and not to describe the form of the statements making up the step.  The de-
scription of the statements is next to them and there is no need to describe
what the reader can see.  These comments attempt to deal with the problem
that the form of statements often belie their function.  The statement itself
is the best description of its form.  The comment is intended to describe the
function associated with that form.  An important rule about the content of
the step function comment is that if it includes a branch to some other step,
or if it includes a reference to some external routine, then that reference
must be explicitly mentioned by number or name.  The effect of this rule is
that the comments tend to form a verbal flowchart of the routine.  If sections
are included, they too are numbered from one, but they use the Roman numbering
system.
          In most cases the verbal flowchart formed by the comments is suffi-
cient to show the logical relationships between the statements in the routine
being documented.  In these cases no additional pictorial flowchart will be
included.  Occasionally, however, for routines which are particularly complex
in so far as branching is concerned, the verbal flowchart is not compact
enough to show the structure.  In these cases a pictorial flowchart is also
provided.  Figure II-1-2.1 shows the flowcharting symbols used.   The only
additional comment to be made is that each step in the routine is explicitly
shown in the flowchart via the small numbered circles.  This convention
simplifies the task of relating the flowchart to the listing.
                                        11

-------
     Symbols
Description of use
                        Terminal box - indicates beginning or end of a routine.
                        Connector box - indicates a step number, as shown in
                        the comments of the actual listing.
                        Operation box - contains operations or groups of opera-
                        tions that perform computations.
c
 Information box  -  contains  information not  directly used
 but helpful in understanding  flowchart.
                        Decision box - contains statements of a test on which a
                        decision is made.
      o
Off-page connector.
                   FIGURE II-1-2.1.  FLOWCHARTING SYMBOLS

                                    12

-------
                             2.0  INFORMATION STORAGE

          Since a coal preparation plant  is  viewed  as  a  set  of  units  each
accepting certain flows as inputs, manipulating those flows, and then
producing flows as output, there are basically two  types of  information
that must be stored by the program:
          (1)  Descriptions of unit operations
          (2)  Descriptions of flows.
This part describes how this information stored.   The first  part of this
chapter describes the general technique of dynamic  storage allocation used;
while the remaining parts describe how the particular units  of information
are allocated.
                                       13

-------
                        2.1  Dynamic Storage Allocation,

          A traditional problem in writing  FORTRAN programs is providing
storage area for the data  to be manipulated by the program.  There are two
ways in which such provisions can be made:
          (1)  By hard-wiring instructions  into  the program at the time
               it is written via explicit DIMENSION statements;
          (2)  By placing  logic into the program that  allows it  to
               make provisions as  the  need  arises.
The first technique is  referred to  as  dimensioning  the data, and the second
as dynamically allocating  the data.  Program CPSM4  dynamically allocates all
equipment specifications and detailed  flowstream data.
          Dimensioning  is  usually  used in  small,  application-specific programs
It is easy to program and  programs  using it are  easy to debug.   It should
never be used, however, in large generalized programs  because it places need-
less restrictions on the user, is  extremely inefficient insofar  as core
utilization is concerned,  and makes it very difficult  to modify  the program.
          To use the dimensioning  technique,  the programmer must make a series
of decisions.  First, he must decide what  types  of  information are needed.
Second, he must decide  how much core to allocate to each occurrence of each
information type.  Third,  he must  decide how  many occurrences of  each type
should be allowed.  Having made all of these  decisions,  the programmer writes
a series of individual  DIMENSION statements which reflect all of the above
decisions.
          As an example of dimensioning shortcomings,  an early version of
program CPSM4 had the following limitations:
          (1)  No more  than 23 size increments could be used to  define
               the flows
          (2)   No more than 10 specific gravity increments  could  be
               used to define the flows
                                       14

-------
          (3)  No more than 13 unit operations could be used to define
               the plant configuration
          (4)  No more than 23 flows could be used to define  the
               plant configuration.
In addition, each unit required six cells of information and each flow
required four cells of information plus four arrays each dimensioned by size
and specific gravity fraction.  The total data storage cells then allocated
in the program was

                    (6-13) + 23-(4+4-23-10) = 21330.

          The sample problem which accompanied that early version had 10 units,
19 flows, 8 size fractions, and 8 specific gravity fractions.  Had the program
been set to these sizes it would have only needed data storage cells equal to

                    (6-10) + 19-(4+4-8-8) = 5000.

This sample problem, then, only required 23 percent of the data storage cells
which the program had actually provided for.  It is in this sense that
dimensioning is efficient  in so far as core utilization is concerned.
          Continuing the example, an early application of the program required
using 7 units, 13 flows, 9 size fractions, and 12 specific gravity fractions.
This application could not be run using that version of the program because
it exceeded the limitation on the number of specific gravity fractions, even
though its total data storage requirement was only

                    (6-7) + 13(4+4-9-12) = 5710.

It is in this sense that dimensioning places needless restrictions on the user.
          The limitation of 10 specific gravity fractions was expressed in
every DIMENSION statement in every subroutine and common block manipulating
flow data.  Using the dimensioning approach, the programmer's decision to
limit  the maximum number of specific gravity fractions had to be implemented
in many different places in the program.  Thus, dimensioning forces a violation
of the principle of localizing single decisions,  discussed earlier.  It is in
this sense that dimensioning makes it difficult to modify programs.
                                       15

-------
          The alternative is dynamic storage allocation.  The disadvantage of
dynamic storage allocation is that programs using it must contain additional
logic to perform the storage allocations.  For large generalized programs,
however, this disadvantage is easily outweighed by the fact that this, techni-
que places few restrictions on the user; is efficient from the standpoint of
core utilization; and greatly reduces the likelihood of program changes  '
necessitated by problems having unexpected data needs.
          Basically, dynamic storage allocation is implemented as follows.
First the programmer determines the total amount of data storage cells to
be allocated.  This space is referred to as working storage.  Within CPSM4
these are allocated in blank common.  At all times the program keeps track of
the next available cell in working storage.  If at a particular point data
storage is needed, it is allocated to the next available cell  and  the address
of the next available cell is incremented by the amount of space needed.  The
only hard-wired decision  that  the programmer must make when he writes the
program has to do with the overall storage types to be allocated.   The details
of the implementation  are discussed in the following parts of this  chapter.
                                      16

-------
                        2.2  The /WORK/ Common Block

          The /WORK/ common block contains the main control variables needed
to allowcate information to the working storage area.  The block contains
eleven simple integer variables - NEXT, LAST, ICURVE, INUNIT, IDATA, ITITLE,
ICHAR, IFLW, IASH, ISUL, and IBTU.
          The integer variable NEXT contains the address in working storage
of the next available cell.  Any routine that  requires storage uses the
value of this variable as the address at which that storage begins.  As
storage is used, the variable NEXT is incremented accordingly.  As storage
is no longer needed, the variable NEXT is decremented .  NEXT  is initialized at
1 by the BLOCK DATA subroutine.
          The integer variable LAST contains the address in working storage
of the last available cell.  Thus, it specifies the total number of cells
available for data storage.  If more  cells are needed, the program
will stop.  The condition is detected when the value of NEXT exceeds LAST.
LAST is initialized at 6000 by the BLOCK DATA subroutine.
          The integer variable ICURVE contains the address in working storage
of the start of the equipment type specification.  In particular,  it contains
the address of the first equipment information block.  The value of ICURVE
is set by the main program.  The equipment information block is described
in Figure II-2-2.1.
          The integer variable IUNIT contains the address in working storage
of the start of a vector containing the addresses of the unit descriptions.
The value of this variable is set by subroutine RDCFBS.
          The integer variable IDATA contains the address in working storage
of the start of the detailed flow information.  The value of this variable
is set by subroutine RDFDBS.
          The integer variable ITITLE contains the address in working storage
of the start of the run description.   The value of this variable is set by the
main program.
          The integer variable ICHAR contains the address in working storage
of the start of the details of the characteristics.  The value of this variable
is set by subroutine RDFDBS.

                                       17

-------
          The integer variable IFLW contains the address in working storage
of the start of the flowstream characteristics.   The value of this variable
is set by subroutine RDFDBS.
          The integer variable IASH contains the sequence number of ash in
the characteristics.  The value of this variable is supplied by the user.
          The integer variable ISUL contains the sequence number of total
sulfur in the characteristics.  The value of this variable is supplied by
the user.
          The integer variable IBTU contains the sequence number of the Btu/lb
value in the characteristics.  The value of this variable is supplied by the
user.
                                      18

-------
Cell      Description of Contents
-1        Equipment type identifier
 0        Address of next equipment information block (0 if last block)
 1        Address of equipment descriptor
 2        Equipment unit operation code
          Code    Unit Operation
           1      Blending
           2      Splitting
           3      Screening
           4      Single-stage washing
           5      Two-stage washing
           6      Froth flotation
           7      Rotary breaking
           8      Crushing
 3        Address of curve set control blocks (see Figure II-2-2.2)
 4+       Miscellaneous constants
                                  Cell    Constants
Unit Operation
Single-stage washing
Two-stage washing
Froth flotation
Rotary breaking
          Crushing
4      Imperfection denominator offset
4      Imperfection denominator offset
4      Imperfection denominator offset
4      Number of falls constant
5      Hole size threshold
6      Lower screening constant
7      Upper screening constant
8      Height selection factor
4      Selection constant
5      Crushing zone constant
7      Screening constant
         FIGURE II-2-2.1.  EQUIPMENT INFORMATION CONTROL BLOCK
                                       19

-------
Cell      Description of Contents
 0        Curve set type code
          Code    Meaning
           1      One-dimensional vector
           2      Univariate distribution
           3      Size classification curves
           4      c-generalized curves
           5      Actual distribution curves
 1        Number of points per curve
 2        Number of size intervals, curves, or vectors
 3        Address of x-points or vectors
 4        Address of y-points if relevant
 5        Address of special information if relevant
          Curve
          Code    Special Information
           3      Size classification
                  decision variable value for each curve
           4      Size classification
           5      Size classification
                  Number of curves per size
                  Decision variable value for each curve
        FIGURE  II-2-2.2.   CURVE  SET  INFORMATION BLOCK
                                     20

-------
                       2.3  The /CNTVAR/  Common Block

          The other common block involved in the storage of unit and flow
information is the /CNTVAR/ common block.  Figure II-2-3.1 describes the
contents of this block.
                                      21

-------
Variable     Description
KF           This two-dimensional integer array contains the origin and destina-
             tion unit number for each flow.

SIZE         This one-dimensional real array contains the flowstream  size  distri-
             bution.

GBOUND       This one-dimensional real array contains the specific gravity
             distribution.

GRAV         This one-dimensional real array contains the mid-points  of the
             specific gravity fractions.

WFLOW        This one-dimensional real array contains the moisture content
             of  each flow.
 S

 Dl
This one-dimensional typeless array contains the flow type codes.

This one-dimensional real array contains the value of the first
decision variable for each unit.
 D2
This one-dimensional real array contains the value of the second
decision variable for each unit.
 D3
This one-dimensional real array contains the value of the third
decision variable for each unit.
 NSIZE
This one-dimensional integer array contains the base address in
working storage of the equipment information control block per-
taining to each unit.

This integer variable contains the number of size fractions in
the flowstreams .
 NGRAV


 IOUT

 NUNITS
This integer variable contains the number of specific gravity
fractions in the flowstreams.

This integer variable contains the output control code.

This integer variable contains the number of - units in the config-
uration.
NFLOWS       This integer variable contains the number of flows in the config-
             uration.
NCHAR
This integer variable contains the number of characteristics
associated with the flowstreams.
             FIGURE II-2-3.1.  CONTENT OF /CNTVAR/ COMMON BLOCK
                                      22

-------
                       2.4  The  /LOCALV/ Common Block

          As discussed in Subpart 1.2.1.1 of Section I, unfortunately the
scratch storage used by each subroutine in FORTRAN programs is allocated core
storage independently of the scratch storage allocated to other subroutines.
This causes large programs such as CPSM4 with many subroutines to be very core
intensive.  This was a particularly severe problem in the original version
of the program.
          To deal with this problem, the common block /LOCALV/ is introduced.
Subroutines allocate their local variables to this block, thus, reducing the
total amount of scratch storage used to the maximum amount needed by a single
routine.  Obviously, some caution must be exercised in using this technique
in cases where one routine calls another.  In such cases, both must not use
the same words in the block.
          Operationally,  many routines will contain this block; however,  all
variables in the block will be treated as local variables in the documentation.
                                       23

-------
                            3.0  OVERALL STRUCTURE

          The preceding two chapters presented the overall programming and
storage allocation approaches taken in the current version of program CPSM4.
At this point, the overall program structure can be presented.  This chapter
discusses the-actual organization of the subroutines, functions, and common
blocks.  It then gives the documentation for the main control routines.
          The subroutines, functions, and common blocks in program CPSM4 are
divided into six general categories.  These are:
          (1)  The main control elements
          (2)  The computational utilities
          (3)  The unit operations
          (4)  Character manipulation
          (5)  Input processing
          (6)  Report generation.
This chapter presents the main control routines,  while the remaining chapters
present the other routines.  Figure II-3-0.1 shows all subroutines, functions,
and common blocks in the program as they are grouped into the above categories.
It also gives a brief description of each.
          In so far as the main control elements are concerned the common blocks
have already been described in the previous chapter.
                                       24

-------
  I  Main  Control  Elements

    Element           Description
    Block Data         Initialize  common blocks
    CPSM4             Main control  program
    SIMUL             Simulation  executive  routine
    //                 Working storage
    /CNTVAR/           Program control  variables
    /LOCALV/           Local scratch storage
    ,/WOKK/             Control working  storage utilization

 II  The Computational Utilities

     Element           Description
    CMPBRK             Compute a breakage  matrix.
    BRSIZE             Compute bridge based  on size  intervals
    INTS               Perform linear interpolation
    YINTRP             Perform 4-point  Lagrangian  interpolation
     SDSIZE             Summarize flowstream  data by  size increment
    DSTRB             Split feed  according  to a distribution  curve
    ECON              Compute economic data

III  The Unit  Operations

    Element           Description
    BREAK2             Simulate breakage  that occurs during operation of a unit
    NOTPTH             Compute proportion  not passing through  hole
    SCREEN             Simulate screening  unit operation
    DCWASH             Compute washing  distribution  curve
    WASH              Simulate washing unit operation
    WASH2             Simulate two-stage  washing  unit operation
    FROTH             Simulate froth flotation unit operation
    CRUSH             Simulate crushing unit operation
    BREAK             Simulate breaking process
    ROTARY             Simulate rotary  breaking unit operation

 IV  Character Manipulation

    Element           Description
    /CHRSET/           Define character set
    /CODERC/           Contain raw coded record
    /FILES/           Define file names
    PRSIZE             Print size  values
    RDDESC             Read descriptor
    PRDESC             Print descriptor
    CNVTIE             Convert value to display form
    /CONST/           Store constant values
    RDVAL             Convert value to internal numeric form

                     FIGURE II-3-0.1. ELEMENTS OF  PROGRAM

                                     25

-------
 V  Input Processing
    Element
    RDUNIT
    RDCURV
    RDFEED
    CONFSV
    FEEDSV
    RDBASE
    RDCFBS
    RDFDBS
    SYBASE

IV  Report Generation

    Element
    VESSEL
    PRHEAD
    CMPUS
    /BLK1/
    /BLK2/
    OUTPT1
    OUTPT2
    OUTPT4
    PRLINE
    /IOCNT/
    /FLAGS/
Description
Read unit information
Read equipment type information
Read feed description
Create a configuration data base
Create a feed data base
Read a data base
Read the configuration from a data base
Read the feed description from a data base
Create a data base
Description
Print unit description
Print report heading
Compute unit summary values
Store unit summary values
Sort distribution curve values
Output flowstream specific gravity analysis
Output unit summary data
Output summaries for units and flowstreams
Print a line of output
Store carriage control values
Store line width for output
                       FIGURE II-3-0.1,  (continued)
                                      26

-------
                      3.1  The BLOCK DATA Subroutine

          Within most versions of FORTRAN all variables in labeled common
blocks must be initialized in a BLOCK DATA subroutine.  The BLOCK DATA sub-
routine shown in Figure II-3-1.1 initializes the common blocks for program
CPSM4.  The various parts of this chapter discussing the individual common
blocks explain the significance of the individual initializations.
                                     27

-------
 3LQCK DATA
 COMMON/CHRSET/LETTER
 COMMON/CNTVAK'
-------
                           3.2  Program  CPSM4

          Program CPSM4 is the main control routine.  It directs the proces-
sing of the input, the execution of the simulation, and the generation of
the summary output tables.  The particular procedure followed is shown in
Figure II-3-2.1,which contains the listing and basic documentation for pro-
gram CPSM4.
          The reader should be aware that the PROGRAM statement itself is
unique to CDC-FORTRAN and should be removed prior to compiling it on non-CDC
machines.
                                     29

-------
      PROGRAM  CPSMMINPUT,OUTPUT   ,FAPE5=INPUT,TAPES=OUTPUT,TAPE3,
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
TITLEtCOAL  PREPARATION SIMULATION MODEL,  VERSION M

PROGRAM  CPSM<*  IS  THE MAIN CONTROL ROUTINE FOR THE COAL PREPAR-
ATION  MODEL SIMULATION PROGRAM.

EXTERNALS     CNVTIE, ECON, OUTPT1,  OUTPT**,  PRDESC, PRHEAD,
              PRLINE, ROBA5E, R3CFBS,  RODESC, RDFDBS, SIMUL
              CONFSV, FEEOSV

COMMON       VARIABLES USE3
//            SG
/CODERC/     ICOL, LCOL, LINE
/FILES/       READER
/CNTVAR/     GBOUNO, IOUT, KF, NCHAR,  NFLOWS, MGRAV, NSIZE,
              S.SIZE.
/IOCNT/       CARCON, JOB
/WORK/       ICURVE, IDATft, ITITLE,  IUNIT,  NEXT
/CHRSET/     LETTER
/LOCALV/     LTITLE

VftRIABLE     DESCRIPTION
FILE3         THIS INTEGER ARRAY IS  USED  TO  CONTAIN DETAILS OF THE
              CONFIGURATION DATA BASE.
I             THIS DUMMY INTEGER VARIABLE  IS USED TO CONTROL THE
              MOVEMENT THR3JGH LOCAL  LOOPS.
IF            THIS DUMMY INTEGER VARIABLE  IS USED TO CONTROL THE
              MOVEMENT THROUGH THE FLOWS.
L01,L32,LD3,  THESE INTEGER ARRAYS CONTAIN INTERNAL DISPLAY CODE
LO^,LQ5,LD6,  VALUES FOR CJTPUT PURPOSES.
LD7
NCELL


NCOST

NFEED

NOW

LINES
IBASE
TFLOW
THIS DUMMY INTEGER VARIABLE IS USED  TO  CONTAIN THE
NUMBER OF CELLS  OF WORKING STORAGE REQUIRED BY VAR-
IOUS ENTITIES.
THIS INTEGER  VARIABLE IS USED TO CONTROL  EXECUTION  OF
SUBROUTINE  E C  0  N.
THIS INTEGER  VARIABLE CONTAINS THE NUMBER OF INPUT
FEEDS
THIS INTEGER  VARIABLE CONTAINS THE POSITION IN
WORKING STORAGE  OF THE FEED DESCRIPTION.
THIS INTEGER  VARIABLE IS USED TO 
-------
C     NREC          THIS  INTEGER VARIABLE IS USED TO :ONTAIN  THE  LENGTH
C                   OF THE CONFIGURATION HEADER  RECORD.
C
      COMMON/LOC4LV/LVFILL(135), LTITLE(65)
      COMMON/CODERC/ICOL,LCOL,LINE(150)
      COMMON/FILES/READER,PRINTRfOFFLIN
      COMMON/CNTVAR/KF<2,100) ,SIZE<23),GBOUND( 21) ,GRH V(2Q)
      1,WFLOW(100)  ,S(130),01(60),D2(&0>,D3(60),L(6Q)
      2             ,             ,NSIZE,NGRAV,IOUT,NUNirS,NFLOWS,NCHAR
       COMMON/WORK/NE*T,LAST,ICUR>/E,IJNIT,IOATA , I TIT LE , ICH AR, IFLW, I ASH ,
      1  ISUL,IBTU
       COMMON /CHRSET/LETTERU 7)
       COMMON/IOCNT/J08,CARCON
       COMMON  SG(7000)
       DIMENSION FILE3(63)
       DIMENSION L01 (5) ,LD2(5) , L03(r>)tLD
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
      CALL CONFSV
      CALL FEEDSV
   12 CONTINUE
      CALL ROBASE(FILE3,SG,NREC,0)
      NEXT=NREC
      IUNIT=NEXT
      ICURVE=SG(NEXT>
STEP
USING SUBROUTINE   R  D  0 E S C PROCESS  AND STORE
THE RUN DESCRIPTION.
   11 ICOL=1
      LCCL=65
      00 13 I=ICOL,LCOL
   13 LINEU )=LTITL£(I)
      CALL RDOESC(SG(NEXT) ,NSELL)
      ITITLE=NEXT
      NEXT=N£XT+NCELL
      DO 10 1=1,150
   10 LlNE(I) = LETTER(i»5)
STEP 5        IF  THIS  IS  A COST RUN ONLY  BRANCH TO STEP 13.

IF(IOUT.LT-O)  GOTO  101

STEP 8        WITH THE HELP OF SUBROUTINE   R  0  2  F 3 S READ AND
              STORE  THE CONFIGURATION DESCRIPTION
CALL RDCFBS
      ICOL=ICOLfl6
      CALL PROESC(LOT)
      CALL PRLINE
      LINES=LINES*2
      CALL PRLIN'E
                       FIGURE II-3-2.1.  (Continued)
                                  32

-------
      CALL CNVTIE (iF,2,-i)
      1C CL=ICOL«-3?
      CALL 3N\/TIE(KF(1, IF) ,2,-l)
      ICOL ICOL4- ) GOTO  8

      I30L=18
      CALL °RDESC(L05)
      CALL PRLINE
    8 CONTINUE
      IF(S
-------
c
n      ^TFP 10       HALL SUBROUTINE   D u T °  T  i  TO n
C                    THE FEED rLC/J2T^EAM.
C
    3   CONTINUE
       CALL OUTPTl(SG(IOATA),Sl?E,SBOJNO,NSIZETNSPAV,NCHAP,TFLOV,lflQ  CALL SIMUL
C
C      STEP 12       USING SUBROUTINE  0 U T P T  t»  PRODUCE  THE UNIT AND
C                    FLOWSTREAM SJMMARV REPORTS.
C
       CALL OUTPTtt
C
C      STEP 13       IF THE COST  COMPONENT IS  TO  BE RU^ CALL   E C 0 N.
C
  101  IF(NCOST ,NE.0)  CALL ECON
C
C      STEP t
-------
                           3.3  Subroutine SIMUL

          Subroutine SIMUL is used to physically direct the simulation of
the passage of the feed flowstream through the configuration.   Figure II-3-3.1
contains the listing and basic documentation for subroutine SIMUL.
                                      35

-------
 c
 c
 c
 c
 c
 c
 r~
 o
 c
 c
 c
 c
 r*
 o
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
 c
c
c
c
c
c
c
SUBROUTINE  S

TTTLE(SIMULATE PERFORMANCE  OF  CONFIGURATION)
SUBROUTINE  SIMUL IS THE MAIN  ROUTINE FOR CONTROLLING THE SIMULA-
TION  OF  THE CONFIGURATION  VERSJS  THE FEED DESCRIPTION.
EXTERNALS
COMMON
/CHPSET/
/WCRK/
/CNTVAR/

/BLK1/
/IOCMT/
/CODERC/
/BLK3/
//

VARIABLE
IFLOW
IPRCM.IP1-


IAOP,11-17


IOST


NS


NCELL


IAVL,AVL
       IU
IEOUIP
I'JO,J3
              BREAK2,CMPUS,CNVTIE, CRUSH, FROTH, OJ TPTi , OUTPT 2, PROESC,
              PRLINE,ROTARY,SCREEN,SDSI7E,WASH,WASH2

              VARIABLES USED
              LETTER
              NEXT, LAST, IFLW
              KF,SI7E,GBOUND,GRAV,S,Oi,D2,03,L,NSIZE,NGRAV,IOUT,
              NUNITS,NFLOWS,NCHAR, WFLOW
              ISCC,ISFO,ISM,ISMX,ISRF,SUMRY
              CflRCON
              ICOL,LINE
              OISTRR
              WS
                                                    USED TO CONTAIN
                                                    THE BEGINNINGS
                                                    CONTAIN THE
                                                           WITH
                                                               THE
DESCRIPTION
THIS  1-OIMEN5IONAL INTEGER  ARRAY  IS
THE  ADDRESSES  IN WORKING STORAGE  OF
0^ THE  DETAILED FLOW STORAGE  ARRAYS,
THESE INTEGER  VARIABLES ARE USED  TO
FLOWSTREAM  NUMBERS OF THE FLOWS ASSOCIATED
CURRENT  UNIT.
THESE INTEGER  VARIABLES ARE USED  TO CONTAIN THE
ADDRESSES  IN WORKING STORAGE  OF THE STORAGE AREAS
ASSOCIATED  WITH THE CURRENT UNIT.
THIS  INTEGER 1-0IMENSIONAL  ARRAY  IS USED TO CONTAIN
THE  OUTPUT  FLOW TYPE SYMBOLS  ASSOCIATED WITH THE
CURRENT  UNIT.
THIS  INTEGER VARIABLE CONTAINS  THE ROW NUMBER IN
THE  SUMMARY ARRAYS OF THE VALUES  RELATING TO THE
COMPOSITE.
THIS_INTEGER VARIABLE CONTAINS  THE TOTAL NUMBER
OF CtLLS REQJIRED TO STORE  EACH SET OF DETAILED
FLOWSTREAM  DATA.
THIS  TYPELESS  VARIABLE IS THE STORAGE AREA AVAILAB-
ILITY POINTER. IF IT IS 7ERO  THERE ARE NO AREAS
AVAILABLE.  IF  IT IS POSITIVE  IT CONTAINS THE ADDRESS
OF THE  FIRST AVAILABLE AREA.  AT THAT ADDRESS IS
STORED THE  ADDRESS OF THE NEXT  AVAILABLE AREA OR a
ZERO. THIS  CONTINUES TO CHAIN ALL AREAS AVAILABLE.
THIS  OUMMY  IMTEGER VARIABLE IS  USED TO CONTROL THE
MOVEMENT THROUGH THE UNITS  IN THE CONFIGURATION.
THIS  INTEGER VARIABLE CONTAINS  THE NUMBER OF FLOW-
STREAM PARAMETERS ASSOCIATED  WITH^THE CURRENT UNIT.
THIS  INTEGER VARIABLE CONTAINS  THE ADDRESS IN
WORKING STORAGE OF THE EQUIPMENT  TABLE ASSOCIATED
WITH  THE CURRENT JNIT.
THIS  TYPELESS  VARIABLE: CONTAINS THE  UNIT  O°ER-
ATION CODE.
               FIGURE II-3-3.1.   LISTING OF SUBROUTINE SIMUL
                                  36

-------
c
r
C
C
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
r
^/
c
c
r
•~s
c
c
c
c
c
c
c
c
c
c
c
r>
r
^
r.
NT N
I. J

IA,TB,IC,ID

MINT

NOUT

10


LO
N8RK, XBRK



IBR,BR


0V



FIN,F1
CL


FU


IAD
I3LK1


ICONV


IPASS

IRTRT


JF,JF1, JFIN,
JJ, J°2, JP3t
L01-LD7

NDAT5
           , OLDF1
THIS INTEGER VARIABLE  COMTA
INPJT FLOWS.
THIS REAL VARIABLE CONTAINS
MATERIAL BEING  INPUT  INTO  T
THIS DUMMY  INTEGER VARIABLE
MOVEMENT THROUGH  THE  FLOWS.
THESE DUMMY INTEGER  VARIABL
MOVEMENT THROUGH  MISCELLANE
THESE TUMMY INTEGER  VARIABL
INFORMATION ADDRESSES  IN  WO
THIS INTEGER VARIABLE  CONTA
             SCRATCH  STORAG
             VARIABLE  CONTA
     INS THE NUMBER  OF UNIT


      THE TOTAL  AMOUNT OF
     HE UNIT.
      IS USED TO CONTROL  THE
            USED TO  CONTROL  THE
            AL LOOPS.
            USED TO  STORE  FLOV
             VARIABLE
            ^ARAMETER
CONTA
ARRAY

CONTA
ARRAY
INTERMEDIATE
THIS INTEGER
OUTPUT FLOWS
TMIS INTEGER
IN THE UNIT
PARAMETERS.
THIS INTEGER VARIABLE
IN THE UNIT PARAMETER
PARAMETERS.
THIS DUMMY IMTEGER VARIABLE
MOVEMENT THRDUGH THE FLOW  C
THIS TYPELESS VARIABLE  IS  U
NUMBER OF CELLS USED IN THE
BREAKAGE UNIT.
THIS TYPELESS VARIABLE  SPEC
TAKES PLACE DJRING OPERATIO
THIS PEAL VARIABLE IS USED
DECISION VARIABLES COP  THE
FLOWSTREAMS.
THESE INTEGER VARIABLES ARE
THIS REAL VARIABLE CONTAINS
MATERIAL IN THE LOWER FLOWS
THIS REAL VARIABLE CONTAINS
MATERIAL IN THE UPPER FLOWS
THIS INTEGER ARRAY IS EQUIV
THIS INTEGER VARIABLE CONTA
MAXIMUM NUMBER OF CHARACTER
THIS INTEGER VARIABLE IS  US
CONVERGENCE IF RETREATMENT
THIS INTEGER VARIABLE COUNT
ITERATIONS.
THIS ONE-DIMENSIONAL INTEGE
SEQUENCE NUMBERS OF  THE RET
THESE INTEGER VARIABLES ARE
POINTERS.
ES ARE
OUS LO
ES ARE
RKING STORAGE.
INS THE NUMBER
E APEAS.
INS THE NUMBER
                     OF  UNIT
                     OF  UNIT
INS THE STARTING  ADDRESS
S OF THE OUTPUT FLOW

INS THE ENDING ADDRESS
S OF THE OUTPUT FLOW


 IS USED TO CONTROL THE
HARACTERISTICS.
SEO TO CONTAIN THE
 SPECIFICATION OF THE

IFIES WHETHER BREAKAGE
N OF THE UNIT.
TO CONTAIN THE VALUE OF
MOISTURE CONTENT  OF OUTPUT

 USED QS ARRAY POINTERS.
 THE PROPORTION OF
TREAM,
 THE PROPORTION OF
TREAM.
ALENCED TO IA , IB,  1C,  ID.
INS FOUR TIMES THE
ISTICS.
ED AS AN INDICATOR  OF
STREAMS ARE PRESENT.
S THE NUMBER  OF

R ARRAY CONTAINS  THE
REATMENT STREAMS.
 USED 4S DUMMY ARRAY
                                                                  CELLS
THESE INTEGER  ARRAYS  CONTAIN CHARACTER CODES  FOR
DISDLAY.
THIS INTEGER VARIABLE CONTAINS THE
REQUIRED TO STORE  THE DETAILED ^LO
T^I~ INTEGER VARIABLE CONTAINS THE
MENT STREAMS.
THESE REAL ARRAYS  CONTAIN DETAILED
VALUES  FPC" DREVIOUS  ITERATIONS,
              NUMBER  OF
             I  VALUES.
              NUMBER  OF

              FLOWSTREAM
                                                            RETREAT-
               FIGURE II-3-3.1.

                            37
                                     (Continued)

-------
C     OLDWF         THIS REAL  ARRAY CONTAINS  MOISTURE CONTENT VALUES
C                   FROM PREVIOUS ITERATIONS.
C     REM           THIS REAL  VARIABLE IS  USED FOR TEMPORARY STORAGE
C                   FOR THE  WATER CONTENT.
C     PU,PL         THESE  REAL VARIABLES ARE  USED FOR THE  UPPER AND
C                   LOWER  FLOKSTREAM CONTENT  RATIOS FOR  SPLITTERS.
C     SUM           THIS REAL  VARIABLE CONTAINS THE TOTAL  WATER CONTENT
C                   OF THE STREAMS ENTERING  A  BLENDER.
C     TEMP          THIS REAL  VARIABLE IS  USED FOR TEMPORARY STORAGE.
C     TOTAL         THIS REAL  VARIABLE CONTAINS THE RATE OF FLOW OF A
C                   FLOWSTREAM.
C
      COMMON/CHRSET/LETTER<<*7)
      COMMON/WORK/NEXT, LAST.ICURVE,UNIT,10 ATA,ITITLE,ICHAR,IFLW
      COMMON/CNTVAR/KF(2tlQO) ,SIZE(23),GBOUNO(2i),GRAV(20»
      1,WFLOW(1 00) ,S<100>,01(6 0)»D2(60>,03(6 0),LC 60)
      2                          ,NSIZEtNGRAV,IOUT,NUN ITS,NFLOWS,NCHAR
      COMMON/BLKI/ISFD, ISCC, ISRF, IS MX ,S YLO ( 2,SEA(2«*),SUMRY(2f*,'»0>
      COMMON/COOERC/ICOL,LCOL,LINE(15QJ
      COMMON/eLK2/DISTRB(2<+,2C!)
      COMMON WS(6000)
      COMMON/IOCNT/JOB..CARCON
      DIMENSION LD1<9).LD2(8)* LD3( 7) , LDM5) ,LD5 (5) , L36 (10)
      DIMENSION L07(10)
      DIMENSION IFLOW(100),IPRA1(7),IAOR(7),IOST(3)
      DIMENSION IAD(«f)
      DIMENSION IRTRT(13) , OLOF {t 0 » 5) , OLOWF «10 )
      DIMENSION OLDF1(1Q,2)
      INTEGER S,F,FIN,FI
      INTEGER CARCON
      DIMENSION ISMU)
      EQUIVALENCE (ISFO,ISM(1) )
      EQUIVALENCE (UO,IUO),(BR,IBR),(IAVL,AVL),(XBRK,NBRK)
      EQUIVALENCE (I A, I ADC 1)), (13, IAD (2 » , ( 1C, IflD (3 )) , (ID, lADCiM
      EQUIVALENCE (IADR (1) , II) , (I ADR( 2 ) , 12) , (I ADR ( 3 ) , 13) , (I ADR (V) , I«i)
      1            ,(IADR(5),I5),(IAOR(6),I6),(IADR(7},I7)
      EQUIVALENCE ( IPRA M( 1) , I PI) , < IPRAMC2) , IP2) , ( IPRA M( 3) , IPS)
      1            , ( IPRAM(«») ,IP^»)
      DATA LD1(1),LD1(2),LD1(3) , L 01 (i» )/ 38, 3 395*fC813,2 0 552515, 13^55366 II
      DATA L01 (5) ,LDl(fi) ,LD1 (7 ) / 33 692 93 63, 33 79 17 165 ,10 i»672Q 66 /
      DATA LOK8) , L 01 < 9 )/2 0 <+32 7763, 15 78 3116 8 /
      DATA LD2(1),LD2(?),LD2(3)»L02 (k ) / 31, 1 3<*5 60 589 , ? 56, LD5 (!+) / 17, 758<+ 2 06 91 ,1 5^6965 18 , 2565625 10/
      DATA LD5 (5) /59S/
      DATA LDF.(l),L06(2),LD6(3),L06(V)/tt 3, 15*»7«*<»13^,103Q35i*61,2^03 09 7 ll/
      DATA LHfS (5) ,LD6(&),LD6(7)/30'f91l23c'» 7600 38 35^, 18 6355 ft 7/
      DATA LOP>(8),L06(9),L06(10)/8.7092221,10i»672085,579'»0/
      DATA I_n7m ,LD7(?>,LD7(3),LD7(!») /«*2,66^69729'+,263t*67982,370£*83e53/
                      FIGURE II-3-3.1.  (Continued)

                                  38

-------
      3 ATA LD7 (5), L07(6),L 07 ( 7 )/236 73939?, 10 S^ 27*53, «» 770
      DATA LOMR>,L07
    5 CONTINUE
      NEXT=MEXT+NCELL
      MP=0
      IPASS=Q
C
C     STEP  5        INITIALIZE  AT  ONE THE DUMMY  COUNTER TO CONTROL  THE
C                   MOVEMENT THROUGH THE UNITS  IN  THE CONFIGURATION.
C
    6 CONTINUE
      TPASS=IPASS+1
      IP(IPASS.EQ.ll) NP=Q
      TF(IDASS.GT.ll) GOTO 184
      00 1^5  IU=i,NUNITS

                      FIGURE II-3-3.1.   (Continued)

                                  39

-------
c
c
s
c
c

c
c
c
c

c
c
c
c


c
c
c

c
c
c
c

c
c
c
c
c
c
c
c


c
c
c
c

STEP 5



NP=0

STEP 7


IEQUIP=L (IU)

STEP 9


UO=WS(IEQUIP
BR=WS(IEQUIP

STEP 9

NIN=1

STEP 10


FLGWM=0. 0

STEP 11



STEP 12


NINT=3
IF(IUO.EO.l)

STEP 13



INITIALIZE AT
FLOW AREA PAR
OPERATION.



OBTAIN THE BA
TABLE FOR THE




ZERO THE TOTAL NUM
AMETERS NEEDED BY T




SE ADDRESS OF THE E
CURRENT UNIT.



OBTAIN THE UNIT OPERATION TYPE C
MENT TABLE.

+ 2)
fi»)

DETERMINE THE



INITIALIZE TH
INPUT FLOWS A



INITIALIZE AT
THE MOVEMENT


INITIALIZE TH
BY THE UNIT A


GOTO 25

INITIALIZE AT
THROUGH THE I






NUMBER OF INPUT FL




BER OF DETAILED
HE CURRENT UNIT




QJIPMENT DESCRIPTION




ODE FROM THE EQUIP-





OWS TO THE UNIT.



E TOTAL AMOUNT OF MATERIAL IN THE
T ZERO.



ZERO THE DUMMY COU
THROJGH THE FLOWS.


E NUMBER OF INTERME
T ZERO.




ONE THE DUMMY COUN




NTER USED TO CONTROL



DIATE FLOWS REQUIRED





TER USED TO MOVE
NPUT FLOWS TO THE UNIT.


       DO  15 1=1,NIN
C
C      STEP 1<*       INCREMENT BY ONE  THE  DUMMY COUNTER USED TO CONTROL
C                    THE  MOVEMENT THROJGH  THE FLOWS,  AMD IF IT EXCEEDS
C                    THE  NUMBER C^ FLOWS  BRANCH TO  STE3 59.
C
   10  F=Ftl
       IF (F.3T.NFLOWS)GO  TO 995
C
C      STEP 15       IP THE  DESTINATION OF THE CURRENT  FLOW IS NOT THE
C                    CURRENT UNIT, LOOP BACK TO STEP  JU .
C
       I? «F(?, F) .NE.IU) GO  TO 10
C
C      STEP 16       INCREMENT THE NJM3ER  OF UNIT FLOW  PARAMETERS BY O^'E.

                     FIGURE  II-3-3.1.  (Continued)

                                  40

-------
C
C     STE"  17       STO^E THE FLOW  NUMBER AND FLOW ADDRESS  IN THE PARA-
c                   METER STORAGE ARRAYS.
r
      IPRAM(NP)=F
      IAOR(ND)=IFLOW(F)
C
C     STEP  1^       USING SUBROUTINE   S  D S I 7 E  COMPUTE  THE SUMMARY
C                   VALUES FOR THE  FLOW.
C
      IA=ICLOW (F)
      IB=ISM(I)
      CALL  SOSI7E(WS(IA),SUMRY(1,13     ),NSIZE,NGRA V,NCHAR,TOTAL )
C
C     STEP  19       AOO THE AMOUNT  OF  MATERIAL IN THE  CURRENT FLOW INTO
C                   THE TOTAL AMQJNT OF  MATERIAL IN THE  FEED  TO THE UNIT.
C
      JF=IFLW+NCHAR MF-1)
c
C     STE°  23       INCPEMENT BY  ONE  THE  DUMMY COUNTER  CONTROLLING THE
C                   MOVEMENT THROUGH  THE  UNIT INPUT FLOWS.  IF ALL HAVE
C                   NOT BEEN PRODESSED,  LOOP BACK TO  STEP  1<*.
C
   15 CONTINUE
C
C     STEP  21       BRANCH ACCORDING  TO  THE TYPE OF UNIT OPERATION.
C                   BRANCH    UNIT  OPERATION
C                   STEP 22   CRJSHING
C                   STEP 23   BLENDING
C                   STEP 2<*   SPLITTING,  SCREENING OR FRACTIONATION.
C                   STEP 25   TWO-STAGE  WASHING
C                   STEP 26   ROTARY  BREAKING
C                   STEP 27   WASHING OR  FROTH FLOTATION
C
      GOTO(25,30,30,
-------
   30 NOUT=2
      IOST(1)=LETTER(?i>
      I3ST(£)=LFTTER(12)
      GO T3  55
C
r;     ST^P  "5       SET THE NUMBER OF OUTPUT FLOWS FO^ THE UNIT  OPER-
0     '   "           ATTON OF  TWO-STAGE WASHING  TO THREE AND  THE  T >PE CODE
C                   FOR THE THIRD  FLOW TO M. THEN BRANCH TO  STEP 29.
C
   35 NOUT=3
      I3ST(3)=LETTER<13)
      GO TO  50
r>
C     STEP  26       SET THE NUMBER OF INTERMEDIATE FLOWS TO  FOUR FOR
C                   THE UNIT  OPERATION OF ROTARY  BREAKING.
C
   t»0 NINT=V

C     STEP  27       SET THE NUMBER OF OUTPUT FLOWS TO TWO.
G
   t*5 NOUT=2
C
C     STEP  28       SET THE FLOW TYPE CODES  TO  C  AND R.
C
   50 IOST<1)=LETTER<3)
      IOST(2)=LETTER( 18)
r
C     STEP  29       INITIALIZE  AT  ONE THE DUMMY  COUNTER TO BE  USED  TO
C                   CONTROL THE MOVEMENT THROUGH  THE DUTPUT  FLOWS FROM
C                   THE UNIT.
>_»
   55 00  75  I = 1,NO'JT
r*
\-S
C     STEP  30       INITIALIZE  THE DUMMY COUNTER  TO CONTROL  THE  MOVEMENT
C                   THROUGH THE rLOWS AT ZE^O.
n
      F=0
C
C     STEP  31       INCREMENT  BY ONE THE DUMMY  COUNTER TO CONTROL THE
C                   MOVEMENT  THROUGH THE FLOWS  AND IF ALL FLOWS  HAVE BEEN
C                   PROCESSED,  BRANCH TO STEP ^0.
i~i
o
   SC F=F+1
      TF(F.3'.NFLOWS)GO TO 996
C
C     STEP  3?       IF THE CU"RESJT FLOW DOES NOT  HAVE THE CURRENT UNIT
C                   AS AN ORIGIN,  LOOP BACK  TO  STEP 3L.
C
      Ir (K^d, F) .NE.IU) GO TO  60
r-
~j
C     ^TEP  33       IF THE CURRENT OUTPUT FLOW  CODE 13 ZERO, BRANCH TO
                    STEP 35,
C
      TF(IQST(I).EQ.3)GO TO  65
r*
C     STEP  3<+       IF THE CURRENT OUTPUT FLOW  CODE IS NOT EQUAL TO THE

                    FIGURE  II-3-3.1.  (Continued)

                                 42

-------
C                   CURRENT FLOW  TYPE  CODE, LOOP RACK  TO  STEP 31.
r
      IF (S(P) . NE. IQST< I ) )GO TO oC
n
o
C     STEP  35       THE CURRENT CLOW  IS  AN OUTPUT FL 04  FROM THE CURRENT
C                   UNIT.  INCREMENT  THE  NUMBER OF UNIT  FLOW PARAMETERS
P                   BY ONE.
C
   65 NP=NP«-1
C
r     STEP  36       STORE THE FL3W  NUMBER IN THE UNIT  PARAMETER LIST.
C
      IPRAM(NP ) = F
C
C     STEP  37       IF THERE ARE  NO  AVAILABLE FLOW DATA STORAGE AREAS,
C                   BRANCH TO STEP  39.
C
      IFdAVL. EQ. Q> GO TO 7C
C
C     STEP  38       ALLOCATE THE  FLOW  TO THE CURRENT STORAGE AREA,
C                   REMOVE THE AREA  F^OM THE AVAILABLE  SET,  AND BRANCH
C                   TO STEP VD.
C
      IFLOW
-------
      NEXT=NEXT+NCELL
      IF(NEXT. GT.LASDGO TO 997
   85 CONTINUE
   9Q CONTINUE
C
C     STEP «f 2       IF  BREAKAGE OOES  NOT  OCCUR IN  THE UNIT, BRANCH  TO
C                   STEP k7
C
      IF(IBR.EQ.Q)  GOTO 86
C
C     STEP ff3       COMPUTE THE NJMBE*  OF CELLS USED  IN THE BREAKAGE
C                   SPECIFICATION  ARR4Y.
C
      XBRK=HS (IBRl
C
C     STEP  <»<4       COMPUTE THE NEW  FLOW TO THE UNIT  4FTER BREAKAGE.
C
      CALL  3REAK2(WS(I1),WS(I2),WS< 13 ) » SI7E , NSIZE, N GR A V, NCH A R, WS ( IBR) ,
     1  N8PK)
C
C     STEP  !f5       IF THE USER HAS  REQUESTED ONLY  SUMMARY REPORTS,
C                   BRANCH TO STED 
-------
             =IFLOW(F>
             m
    on 99  I=I,NDATA
 qq WS (K) =WS (K) + WS( KK)
 38 CONTINUE
    IF , WS ( 13 > , WS ( IEQU I P) , S U E » WS ( JP
   1 ,          WS(JP?*i)    ,NSIZE,NGRAV,NCHAR,DKIJ M
    GO TO  l«fO
110 OONTIN'JE
    CALL  HAS(-,WS(I3)»WS(IEQUIP>tSIZE,GPAtf
   1           tDISTPP,MSIZE,N3RA\/,NCHAP»01(lU))
    CALL  STSIZE    /TOTAL
    CALL  C^IPUSCWS (IEQUIP),WS(Il)fW3(I2>,WS(I3),NSI?E,NGRAV,GPAV
    CALL  =JOTAOV('/1JS(I1)«WS,WS(I?),WS:(I^),WS(I5),WS(I6),WS(I7)

                   FIGURE II-3-3.1.  (Continued)

                                45

-------
     1            ,SI7E,HS(IEQUI*),NSI7E,NGRA\/fNCHAR,>lS
     2            , W S ( J D 3 +1 >   , Ol(IU),D3(IUM
      GO TO  1kC
  135 CALL  C?!)^ (Uc WFLOW(F)
       10=1
       L0 = l
       IA=IAD R( 1)
       JF=IFLW-«-NCHAR *(F-1)
       CALL  SDSIZE(WS(IA),SUMRY(ltISFD),NSI7E»NGRAV,NCHAR,WS(JF+D)
       W"LOW(F) =SUM
       IF (NP.NE.3) GOTO  153
             1( 2)
       JF=IFLH-NCHAR*(F-1)
       CALL  SOSIZE (Wsdfl) .SUMRY (1,1503) , NS I7E, NGR AV , NCHA R, WS ( JF
             M( 3)
       JF=TFLW+N'CHAP*(F-1)
       CALL  SOSI7E(WS(IA),SUMRY(1,ISRF), NS I ZE , NCR A V, NCHAR , WS ( JF + 1) )
       GOTO  150

       STEP  51       THE  UNIT  IS 4 SPLITTEP.  COMPUTE  THE SUMMARY  DATA
                    FOP  THE  OUTPJT FLOWS.

       CONTINUE
       00  lf+5  I-IC,LO
       IA = IfiQR( I)
       f-IP^AMf !)
      IB = ISM ( I )
      CALL  SnSI7E(WS(IA),sUMRY(l,IB     ) , NS I 7E , NGRA V, NCHAR, WS ( JF+-1 ) )
      CONTINUE

                     FIGURE II-3-3.1.  (Continued)

                                  46

-------
c
C     STEP  52       SAVE THE COMPOSITE  C H fiPfl CTE   GOTO 162
      CW = D2
      WFLOW(F)=D2(IU)*WS(JF-H)/(1QO.O-Q2
-------
C                   BRANCH TO  STEP  56.
C
       IFdOJT. EQ. 0) 30 TO 171
       TC(NR.GT.C)  GOTO 171
       IF(IP4SS .EQ.i) GOTO 171
       IF(IUO.EQ.1.ANQ.NP.NE.3)  GOTO 169
C
C      STEP  5«f      USING SUBROUTINE  0 U T P T  2   PRINT THE UNIT
C                   PERFORMANCE  REPORT.
C
       CALL  OUTPT2(SIZE,GBOUNO,N5IZEtNGRAV»NCHAPf IU,IJO,D1 (IU) ,02(111),
      1  03(10)-)
p
C      STEP  55      USING SUBROUTINE  0 U T P T  1   GEMERATE ANY  FLOW-
C                   STREAM SPECIFIC GRAVITY REPORTS REQUESTED  BY THE
C                   USER FROM  THE  OUTPUTS OF THE CURRENT UNIT.
C
   169  CONTINUE
       00  170 1=10,LO
       F=IPRAK( I)
       IFdOJT. EG.?) 50 TO 165
       IF(KF(1,F).GT.3.AND.KF(2,C),GT. 0) GO TO 170
   165 IA=IA3R<15
       JF=IFLW+NCHAR MF-1)
       CALL  OUTPTKWS(IA) ,SIZE,GBOUND,NSIZE,NCRAV,NCHAR, WS(JF-H) ,F,KF,S)
   17G  CONTINUE
   171  CONTINUE
C
C      STEP  56      RETURN THE  DETAILED FLOW INFORMATION STORAGE AREAS
C                   FOP THOSE  FLOWS NO LONGER REQUIRING THEM.  THESE
C                   INCLUDE  INPUT  FLO-IS TO THE  UNIT,  JNIT  INTERMEDIATE
C                   FLOWS, AND  THOSE FLOWS FROM  THE UNIT LEAVING THE
C                   CONFIGURATION.
C
       DO  180 1=1,NP
       F=IPRA MI)
       IF(I.LT.IO)GO TO 175
       IF(I.ST.LO.AND.IUO.EQ.l)  GOTO 175
       IFd.GT. LOGO TO 176
       IF «F(2,F) .GT.OJGO TO  ISO
   175  IF(KF(i,F).EO.O) GOTO  180
   176  IA = IADR( I)
       WS(I A) =AWL
       IAVL=IA
   1«*0  CONTINUE
C
C      STEP  57      INCREMENT  BY  ONE THE DUMMY  COUNTER CONTROLLING THE
C                   MOVEMENT THROUGH THE UNITS  IN  THE CONFIGURATION
C                   AND Ip ALL  HAVE NOT BEEN PROCESSED, LOOP BACK TO
C                   STEP 6.  IF  ALL  HAVE BEEN PROCESSED, END LOCAL
C                   PROCESSING.
C
  185 CONTINUE
C
C      STEP 5^       IP 9ETRFATMF_\(T  STREAMS ARE  PRESENT  CHECK FOP
C                    CONVERGENCE.   IF CONVERGED  END  LOCAL PROCESSING,  IF

                     FIGURE II-3-3.1.   (Continued)

                                 48

-------
C                   NOT  LOOP  3flC< TO STEP  5.
C
      IF(NP.EQ.C)  GOTO  l?u
      ICONV=1
      IFdPASS .EQ. 1) GOTO  210
      '10  ?C5  I=1,NP
      r=i«?TRT ( n
      JFrlFLW+KCHAR MF-ll
      IF(AaS(WFLOW = WFLOW (F)
       OLOF1 (I, 1)=WS (JF+ll
   22C  CONTINUE
       DO  223 J=l,5
       JFl=JF-»-J
   223  OLOFCI, J I = WS( JF1  )
       OLOWF(I)=WFLOW(F)
   225  CONTINUE
       GOTO  5
   ?26  NR=G
       GOTO  &
   I'i'i  CONTINUE
       IF (IOUT. GT.O. AND. IPASS. EG. 1) GOTO  6
       IF (IPASS. LT. 11)  GOTO
       CALL  PRnESC(LD7l
       CALL  PRLINt
       GO  TO 99°
       ICQL-0
       CflLL  "NVTIE (556206^, C, -2)
                     FIGURE II-3-3.1.   (Continued)

                                  A9

-------
      CALL CNVTIE(IU,«t,-l>
      CALL 3RDESC(LD2)
      CALL PRLINE
      GOTO 39«
C
r;     STEP 59       A UNIT IS MISSING AN INPUT FLOW.  DISPLAY THE
C                   APPROPRIATE  HESSA3E, AND END  THE  3UN.
C
  99S CARCON=LETTER<27)
      ICOL = 0
      CALL PRDESC(LD3)
      CALL 3NVTIE(IU,3,-1)
      CALL PRLINE
      50 TO  998
C
C     STEP SO       A UNJIT IS MISSING AN OUTPUT FLOW. DISPLAY THE
C                   APPROPRIATE  MESSAGE, AND END  THE  *UN.
C

      ICOL=J
      CALL 3ROESC(LD% >
      ICOL=ICOL*2
      LINE(rCOL)=IOST(T)
      CALL DROESC(LD5)
      CALL CNVTIE (IU,?,-1)
      CALL PRLINE
      GO TO  996
C
C     STEP 61       THERE  IS INSJFFICIENT ROOM TO  SIMJLATE THE SPECIFIED
C                   CONFIGURATION.  DISPLAY THE APPROPRIATE MESSAGE, ANO
C                   END  THE RUN.
C
  997 CARCON=LETTER(27)
      ICOL=0
      CALL PROESC(LD6)
      CALL :NVTIE(IU,3,-1)
      CALL PRLINE
  998 STOP
      RETURM
      END
                    FIGURE  II-3-3.1.   (Continued)
                                 50

-------
                            4.0  COMPUTATIONAL UTILITIES

          This chapter describes the computational utilities used within CPSM4
These utilities are called by the various unit operation and control routines
within the program.  Their function is to perform those general computational
operations such as normalization, bridging,  interpolation,  etc. which are
not specific to any one of the particular algorithms within the program.  To
a certain extent this chapter may be thought of as introducing the basic
conventions and notations to be used later in describing the unit operation
algorithms themselves.  The actual routines  to be documented in this chapter
are as follows:
          1)  CMPBRK, which computes a breakage matrix
          2)  BRSIZE, which computes a bridge based on size intervals
          3)  INTS, which performs linear interpolation
          4)  YINTRP, which performs 4-point Lagrangian interpolation
          5)  SDSIZE, which summarizes flowstream data by size increment.
          6)  DSTRB, which splits a flowstream according to a distribution
              curve
          7)  ECON, which computes economic  data.
                                       51

-------
                           4.1  Subroutine CMPBRK

          The breakage that takes  place during the operation of a unit is
simulated by subroutine BREAK2.   The breakage is characterized in part by a
breakage matrix which is computed  by this utility CMPBRK.   Following Broadbent
            (3 4)
and Callcott  '    the breakage matrix is obtained from a breakage function
and the grade sizes of the feed.   The breakage function is defined as
                      " exp  ~
             '      (1 - exp (-1))
where B(x,y) is the fraction of coal in initial size y broken below size x.
The i-jth element of the breakage  matrix is then the proportion of feed which
was in the jth  size grade before breakage and is in the ith size grade after
breakage.  To allow for more severe breakage, integral powers (> 1) of the
breakage matrix may be used.  The  computation of the breakage matrix raised
to the desired  power is performed  by subroutine CMPBRK.   Figure II-4-1.1 gives
the listing and basic documentation for this routine.
                                       52

-------
c
G
C
C
c
c
c
C
C
r
u
w>
c
G
C
C
c
G
G
C
C
C
C
c
c
f->
L<
c
c
c
c
c
c
G
C
C
c
c
G
C
G
C
C
G
G
SUBROUTINE :MP6*K<6R,TEMP,K8R,SIZE,NSIZE)

TITLE(COMPUTE BREAKAGE  MATRIX)
SUBROUTINE «MPdRK
K3R-TH
      OMPUTES THE  BREAKAGE MATRIX RAISED TO  THE
PARAMETER



TEMP

K3R

SIZE

NSIZE


EXTERNAL

VARIABLE
It JtK

SMID
NS

IK

RATIOS
             DESCRIPTION
             THIS  2-GIMENSIONAL UPPER TRIANGULAR  REAL  ARRAY IS
             USEO  TO  CONTAIN THE PROPORTION OF COAu  IN ONE SIZE
             FRACTION THAT  WILL BREAK INTO ANOTHER SIZE FRACTION,
             THIS  ?-OIMENS.LONAi_ REAL ARRAY IS USED FOR SCRATCH
             STORAGE.
             THIS  INTEGER VARIABLE CONTAINS THE POHER  OF THE
             BREAKAGE MATRiX TO BE CALCULATED.
             THIS  SEAL 1-OIMENSIONAL ARRAY CONTAINS  THE SIZE
             DISTRIBUTION DEFINITION FOR THE FLOWS.
             THIS  INTEGER VARIABLE CONTAINS THE NUMBER OF SIZE
             FPACTIONS DEFINING THE FLOWS.

             EXP
DESCRIPTION
THESES DUMMY  INTEGE*
THE MOVEMENT  THROUGH
THIS 1-niMENSIONAL  RE
OF THE SIZE FRACTIONS
THIS DUMMY INTEGER  VA
SOUND POR LOOPS  PROCE
ARRAY.
THIS INTEGER  VARiABcE
NUMBER OF SIZE FRACTI
THIS INTEGER  VARIABLE
BREAKAGE MATRIX  MOST
THIS REAL VARIABLE  IS
FOR THE BREAKAGE  FUN3
OF THE SIZES.
VARIABLES ARE  USED  TO  CONTROL
MISCELLANEOUS  LOCAL LOOPS.
AL ARRAY CONTAINS THE  MID-POINTS
*
RIABLE IS USED  AS A LOWER
SSING THE TRIANGULAR BREAKAGE

 CONTAINS 1 LESS THAN  THE
ONS CLASSIFYING THE FLOHSTREAMS.
 CONTAINS THE  POWER OF THE
RECENTLY EVALUATED.
 USED TO CONTAIN THE ARGUMENT
TION.  IT CONTAINS  THE RATIO
      'DIMENSION  S< (NSIZE, NSIZE) ,TEMP (NSI ZE , NSI ZE ) , SIZE (NSI ZE )
      COMMON/LOCALS/SMID(23),L,NS,IK,LVFlLL(169)
STEP i
COMPUTE THE  MID-POINTS  OF THE SIZE FRACTIONS.
      00 10 1=1,NSIZE
      SHlD(I)=(SI7E(I)«-SIZE(I*l))/2. 0
   10 CONTINUE
STEP 2
UiiNG THE GENERAu  BREAKAGE EQUATION COMPUTE  THE
         FIGURE II-4-1.1.  LISTING OF SUBROUTINE CMPBRK
                                 53

-------
c
c
c
c
c
c
c
c
0
c
L
c
c
c
c
c
r
c
c
                CUMULATIVE BREAKAGE  MATRIX.

   DO 23 I = 1»NSIZF.

   IF U.EQ.NSIZEI  GOTO  20

   DO 15 J=L,NSIZE
   RATIOS=SIZE(JJ/S^ID(I)
   BtUI, J) = (1.0-EXP(-RATIOBM/0.6321«f
15 CONTINUE
20 CONTINUE
   STEP 3
COMPUTE THE  FIRST POWER OF  THE  NON-CUMULATIVE
BREAKAGE MATRIX.
       NS=NSIZE-1
       DO  25  1=1,NS
       00  25  J=I,MS
       6R(I,J)=8R(.t,J)-BK(I,J«-l)
   25  CONTINUE
   STEP
IF THE REQUIRED POWER OF THE  BREAKAGE MATRIX IS 1,
ENO L33AL  PROCESSING.  ELSE SET  THE CURRENT POWER OF
THE BREAKAGE  MATRIX TO 1.
       IF(KBR.iQ.l)  GOTO 55
   STEP
PUT THE FIRST  POWER OF THE BREAKAGE MATRIX IN THE
UPPER TRIANGLE  OF  THE TEMPORARY  STORAGE ARRAY.
       DO  30  I=1,NSIZE
       DO  30  J=I,NSIZE
       TEMPd , J) =6r< (I, J)
   JO  CONTINUE
      STEP  6
                 COMPUTE THE NON-DIAGONAL ELEMENTS  OF  THE PRODUCT
                 OF  THF  FIxST POWER  0~  THE 3R£AKAGF  MA1RIX WITH THE
                 CURRENT POWER OF  THE  SFEaKAGE MATRIX.   STORE THE
                 CESULT  IN THE LOWER TxIANGLE OF THE TEMPOtvARY
                 STORAGE ARRAY.
   35 CONTINUE
   DO
              = l,NSIZE
      LO ^0  J=L,NSIZE
      TEMP (J , I) =0. n
      QO UO  K = I , J
      TEMP(J,I)=rEMP(J,I)*TEMP
-------
   (fG CONTINUE
C
C     STEP  7        STOPE THE  CURRENT  POWER OF  THE  BREAKAGE MATRIX
C                   INAKxAYBR.
C
      00 50  I=1,NSIZE
      L=I*1
      00 k5  J=L,NSIZF
      6R(I,J)=TEMP(J,I)
   k5 CONTINUE
      BK(I,I) = TEHP(I,I)*B
   50 CONTINUE
C
C     STEP  3        INCREASE THE  CURRENT POWER  OF THE  BREAKAGE MATRIX
C                   BY 1.
C
      IK=IK+1
C
C     STEP  9        IF THE CURRENT  POWEF OF THE BREAKAGE MATRIX IS THE
C                   REQUIRED POWER,  END LOCAL PROCESSING.  ELSE LOOP
C                   BACK TO STEP  6.
C
      IF{KBR.N£.IK) GOTO 35
   55 CONTINUE
      RETURN
      END
                  FIGURE II-4-1.1.   (Continued)
                                  55

-------
                            4.2  Subroutine BRSIZE

           In Section I it was pointed out that the program assumes that
 characteristics are uniformly distributed over their size and specific gravity
 fraction classifications.  Subroutine BRSIZE is the core utility routine which
 implements this assumption as it relates to the size fractions.
           The most important, and unfortunately complicated, ramification of
 the uniformity assumption has to do with its interaction with the size frac-
 tion classification schemes.   Figure II-4-2.1 shows the values for percent ash
 classified by size for a typical flow stream.  Notice that for any given
 size'fraction interval  in terms of which the flow is classified, all sizes
 within it show the same percent ash.  This follows directly from the
 uniformity assumption.  If, for example, an estimate were needed for the frac-
 tion 1 inch to .9 inch,   which falls entirely within the 1-1/4 to 3/4 inches
 fraction, the value would simply be 45 percent.
           The complication arises when an estimate is needed for some size
 fraction that does not fall entirely within a defined fraction.  As an example,
 suppose an estimate of percent ash were needed from the data shown in Figure
 II-4-2.1 for the size fraction 1 inch to .6 inch.  One portion of this
 fraction (1 inch to 3/4 inch) is shown as having 45 percent ash, while the
 other portion (3/4 inch to .6 inch) has 34.6 percent ash.  The appropriate
 calculation then would be to  take the weighted average of the two values.
 Consider that

                           (1.0  - .75)/(  1.0 - .6)  = .625                (1)

 represents  that  portion of  the  material  in the interval 1.0 to .6 inch which
 is also in  the interval 1.0 to  .75  inch,  and

                           (.75  - .6)7(1.0 - .6)  =  .375.                  (2)

represents that portion of the  material  in  the .75  to • 6 interval.  These
follow from assuming that all material is  uniformly distributed within the
size fractions.  Therefore,
                           .675  x 45  +  .375  x 34.6 =  43.35               (3)
                                       56

-------
<
S-i
OJ
     50.0
     45.0
     40.0
     35.0
     30.0
     25.0
20.0
     15.0
     10.0
      5.0
      0.0
          1.25     1.10   1.00
                           .99   .80   .70   .60   .50   .40   .30


                                    Size in Inches


                             FIGURE II-4-2.1.   PERCENT ASH BY SIZE
.20    .10   .00

-------
is the appropriate estimate for the percent ash for the 1 to  .6 inch  size
fraction.
          The above example does not represent an actual calculation  needed
in the program and was chosen only as an illustration.  At no time  is  it
necessary to estimate coal characteristics of the flows for size  fraction
classifications other than the one over which they are defined.   In fact,
the inverse is needed.  All of the following algorithms define size fraction
distributions based on their controlling paramaters.
          (1)  Single-stage washer
          (2)  Two-stage washer
          (3)  Forth flotation cell
          (4)  Rotary breaker
          (5)  Crusher
          (6)  Screen
These unit defined size distributions are completely  independent  of the size
distribution used to define the flows in the plant.
          The unit distributions are used not just to determine what
characteristics certain size fractions have, but also to determine what
particular mathematical algorithm is used to apply to that size fraction.  As
an example, consider the screening algorithm that might be simulating the
passage  of coal in the size ranges 1/4 to 1/8 inch, 1/8 inch  to 10 mesh, and
10 to 28 mesh over an 8-mesh screen.  The screening algorithm assumes  that
all material larger than the screen size will pass over, and  that some proportion
of the material smaller than the screen size will pass through.  Within the
screening simulation, then, there are two algorithms which might be applied - the
pass over algorithm and the pass through algorithm.  The pass over algorithm
would apply to the entire fraction 1/4 and 1/8 inch and to that portion of
the 1/8  to 10 mesh fraction which is above 8 mesh.  The pass,  through  algorithm
would apply to that portion of the 1/8 to 10 mesh fraction below  8 mesh and
to the entire 10 mesh to 28 mesh fraction.
          Within the routines simulating the above listed unit operations,
there are minimally  two sources of  complexity.   One  relates  to  implementing
the various fraction specific algorithms and the other relates to determining
which portions of which size fractions should have which algorithms
applied to them.   Within program CPSM4, these two operations  have been split.

                                        58

-------
A single subroutine BRSIZE was written to perform the estimation needed to
reconstitute one set of size fractions into another.  This subroutine is
described in detail in this part.  The separation of the redistribution logic
from the remaining simulation logic in the unit operation routines makes
those routines much easier to work with.
          Reiterating an earlier discussion, a ubiquitous complication within
program CPSM4 , as in most programs which simulate real world situations, is
that data, coefficients, and/or algorithms predicated on some classification
cross some characteristic.  Algorithms which perform or support such reclassi-
f ication operations are termed bridging algorithms .   In CPSM4 information and
algorithms classified by arbitrary size fraction must be applied to the size
fraction classification scheme used to define the flows; therefore, a bridging
algorithm is needed to bridge from one size classification to another.  Note
that the characteristic to be classified is always the same  — the size
of coal.  Subroutine BRSIZE contains this size bridging algorithm.  Figure II-
4-2.2 is the flowchart for subroutine BRSIZE while Figure II-4-2.3 presents
the  FORTRAN listing.
          The basic assumptions made within BRSIZE are as follows.  First,
all  size classifications are defined as a monotone decreasing sequence of n+1
non-negative reals, where n is the number of fractions defined by the
classification.  Let
                          s = Sl,...,sn,sn+1                            (4)

be such a sequence.  By definition then, the i-th size fraction contains no
coal larger than s. and no coal smaller than or equal to s   .  Saying
this differently, the sequence s can be said to induce a definition of n closed-
open, ordered intervals
which define n mutually exclusive, dense size fractions.  These fractions are
defined from largest to smallest.
          Second, the fact that bridging is needed implies that there are two
classifications :

                                      59

-------
           SI  =  si  ,...,si   .. ,  the initial classification over which
                the  information or algorithm is defined; and
           SF  =  sf  ,...,sf  , ,,,  the final classification to which the
                 1       nf+1'
                formation or algorithm is to be applied.

 Since all size  fractions in SF must be treated, the following relationship
 must hold between  SI and SF.
                        sil  i sfl  > sfnf-HL i Sini+l                       (6)
 This relationship  simply requires that all sizes encompassed by the final
 classification  must be encompassed by the initial classification; though the
 initial classification may  encompass more.  For most initial classifications
 generated within the program the  following holds:
                                si =100 inches
                                  1                                      (7)
                               si  . ,  =0 inches.
                                ni+1
 Thus, the program  assumes  that no flows containing  coal particles larger than
 100 inches will be  simulated.  The figure 100 inches was, of course, chosen
 to be arbitrarily  large.
              As was implied in the previous part, the definition of the two
 size classifications is all that  is needed to determine the bridge.  This
 fact follows  directly from  the uniformity hypothesis.  To describe  how  the
 calculation proceeds requires introducing some additional terminology.  Let
 [si.,si.+1) be  an  arbitrary fraction within the Initial size classification
 and let [sf, ,sf , , -, ) be an  arbitrary fraction in the final size classification.
 Now if
                              si.>sf ,^si      and/or
                                              and/or                     (8)
                            sf  >si.>si.  n >sf, . n
                             k—  j    ]+l—  k+1
 then  some  part  of  [sf  ,sf   .^  is  contained within [si.,si.   ).  In this case,
 we will  say  that  [si., si    , contributes  to [sf ,sf   )..   What is to be
                    J   J '-*- )                    K.   K~r_L
 calculated is that proportion  of  [sf  ,sf    )  to which [si., si.,,) contributes.
                                                          D    J ""-L
 This  will be termed the contribution  ratio cr.
          As  shown in  an earlier example,   the denominator of  the  contribution
ratio  is always  the width  of the final size fraction.  For  the general  case

                                       60

-------
here,  it is  sf,-sf    .  The numerator for cr is calculated in one of four
              K
ways.
          (sVsfk+i)/(sfk-sfk+i)=1-° if SV *• sfk > sfk+i ^
          (sfk-sij+l)/(sfk-sfk+l)<:L-0 if sij isfk^-sij+l > sfk+l
     cr =                                                              (9)
                                   .O if sfk > sf .  >       >

                                     if Sk  > Si  >
Given the above,  the  sum of all the contributions to a given final size
fraction will always  be one.  The proof, though straightforward, is lengthy
in its details and will not be given here.
          The basic information returned by subroutine BRSIZE is then the
set of contribution ratios.  These are returned in a typeless array to be
described in the  basic documentation.  This array is termed the bridge
specification array .
                                      61

-------
                                                         YZS
                                              SIZEF(l)
                                                      NO
                                                NBRONBRG+1
                                                BRG(NBRG)-0
                                                II-II-H
                                                        -O
             n-ii+i
           IMIN-SIZEI(II)
-0-


FHAX-IMIM
BRG(NBRC)-IV





VAL-(FMAX-
IM1N) /RANGE
REMAIN-REMAIN
-FMAX+IMIN
FIGURE II-4-2.2.  FLOWCHART FOR SUBROUTINE BRSIZE

                       62

-------
c
c
c
c
c
c
c
u
c
c
c
c
c
c
c
G
c
c
I
c
c
c
c
c
c
c
c
c
c
c
c
L.
c
c
c
c
c
c
c
c
G
c
G
c
c
c
c
SUBROUTINE 3RSI ZL (S I ZEI , NSI'ZEI »SI ZEF , NSI ZF_F » 6RG, NBRG )


TI7LEKOMPUTE BRIDGE  BASED  ON  SIZE  INTERVALS)


SUBROUTINE BRSIZF IS  USED  TO COMPUTE THE BRIDGE NEEDED TO  ALLO-

CATE FLOW DATA SPECIFIED  IN ONE SET OF SIZE INTERVALS  (THE  INI-
TIAL INTERVALS) INTO  ANOTHER SET  OF SIZE INTERVALS  (THE FINAL
INTERVALS). THIs  ROUTINE  MAKES  THE  ASSUMPTIONS THAT BOTH  INTERVALS

ARE DEFINED IN DESCENDING  ORDER AS  CLOSED-OPEN INTERVALS  AND THAT
THE SIZE RANGE DEFINED  BY  THE  FINAL INTERVALS COMPLETELY  ENCOM-

PASSES THE RANGE  DEFINED  BY THE INITIAL INTERVALS.


PARAMETER    DESCRIPTION

SIZEI(l)     THIS REAL  1-0IMENSIONAL MONOTONE-OECPEASING  ARRAY

             DEFINES  THE  INITIAL  SIZE  INTERVALS.
NSIZEI       THIS INTEGER VARIABLE  DEFINES THE NUMBER OF  INITIAL

             SIZE INTERVALS.
SIZEF(l)     THIS REAL  1-DIHENSIONAL MONOTONE-DECREASING  ARRAY
             DEFINES  THE  FINAL  SIZE INTERVALS.
NSIZEF       THIS INTEGER VARIABLE  DEFINES THE NUMBER OF  FINAL

             SIZE INTERVALS.
BRG(l)       THIS TYPELESS  i-DIMENSIONAL ARRAY CONTAINS THE
             BRIDGE  SPECIFICATION.  IT  CONTAINS ONE  VARIABLE LENGTH
             RECORD  FOK EACH FINAL  SIZE INTERVAL. EACH OF  THESE
             RECORDS  IS STRUCTURED  AS  FOLLOWS.
             CELL       DESCRIPTION
             0          THE  NUMBER  OF INITIAL SIZE INTERVALS THAT
                        CONTRIBUTE  TO THE FINAL SIZE INTERVAL.

                        THIS CELL  MAY CONTAIN ZERO,

             2*1-1      THE  SEQUENCE NUMBER OF THE I-TH INITIAL
                        INTERVAL CONTRIBUTING TO THE FINAL  INTERVAL
             2*1        THE  CONTRIBUTION RATIO FOR THE I-TH

                        INTERVAL TO  THE FINAL INTERVAL.
M8RG         THIS INTEGER VARIABLE  RETURNS THE NUMBER OF  CELLS
             USED IN  THE  BRIDGE SPECIFICATION ARRAY.


VARIABLE     DESCRIPTION
FI           THIS INTFRGER  VARIABLE IS USED TO CONTROL THE  MOVE-
             MENT THROUGH THE  FINAL INTERVALS. IT NORMALLY  POINTS
             TO THE  MINIMUM CELL  OF THE CURRENT FINAL INTERNAL.
             THUS, IT IS  EQUAL  TO  ONE  PLUS THE INTERVAL NUMBER.

FMIN         THIS REAL  VARIABLE CONTAINS THE MINIMUM OF THE CUR-
             RENT FINAL INTERVAL.
ICNT         THIS TNTEGER VARIABLE  CONTAINS THE ADDRESS IN  THE

             3RIDGE  SPECIFICATION  ARRAY OF THE COUNT CELL FOR
             THE  CURRENT  FINAL  INTERVAL.
II           THIS INTEGER VARIABLE  CONTROLS THE MOVEMENT  THROUGH
             THE  INITIAL  INTERVALS. IT NORMALLY POINTS TO  THE
             CELL CONTAINING THE  MINIMUM FOR THE INTERVAL.  THUS*
         FIGURE II-4-2.3.  LISTING FOR SUBROUTINE BRSIZE


                                 63

-------
C
C
C
C
C
C
C
C
t
C
C
C
C
C
C
C
C
C

C
C
C
C
C
C
C
C
C
G
C
r
C
C
   15
IMOX


IMIN

IV,VAL



RANGE

REMAIN
              IT  EQUALS  ONE PLUS THE INTERVAL  NUMBER.
              THIS  REAL  VARIABLE CONTAINS  THE  MAXIMUM OF THE
              CURRENT  INITIAL INTERVAL RELATIVE  TO THE CURRENT
              FINAL INTERVAL.
              THIS  REAL  VARIABLE CONTAINS  THE  MINIMUM OF THE
              CURRENT  INITIAL INTERVAL,
              THIS  TYPELESS VARIABLE CONTAINS  THE VALUE OF THE
              CONTRIBUTION FRACTION OF THE CURRENT INITIAL INTER-
              NAL TO THE CURRENT FINAL INTERVAL  STORED IN FLOATING
              POINT FORM.
              THIS  REAL  VARIABLE CONTAINS  THE  VALUE OF THE OVER-
              ALL RANGE  OF THE CURRENT INITIAL INTERVAL.
              THIS  PEAL  VARIABLE CONTAINS  THE  AMOUNT OF THE CUR-
              RENT  INITIAL INTERVAL REMAINING  WHICH HAS NOT YET
              CONTRIBUTED  TO A FINAL INTERVAL.
       DIMENSION  SIZEI(l),SIZEF(1),BRG(1)
       INTEGER  9RG,FI
       REAL  IMIN,I*AX
       EQUIVALENCE  
-------
c
c
c
c
c
c
c
c
c
c
c
b
c

c
c
c
c
c
c
c
c
c
c
c
c
c
c
G
c
c
c
STEP
THE CUKRENT  INITIAL INTERVAL ENDED  WITHIN THE

CURRENT FINAL  INTERVAL. KEoET THE  INITIAL INTERVAL
50 THAT THE  CURRENT ONE NOW BFGINS  WITHIN THE FINAL
INTERVAL.
   20
11=11*1

IMAX=IMIN

IMiN=SIZEI(II)
      RE*AIN=RANGE
iTEP
IF THE START  OF THE INITIAL INTERVAL  EXCEEDS THE END
OF THE CURRENT  FINAL INTERVAL THEN  IT IS  WITHIN THE

FINAL INTERVAL. IN THIS CASE, BRANCH  TO  STEP 8.
NOTE THAT  IT  IS AT THIS POINT THAT  THE CLOSED-OPEN

INTERVAL ASSUMPTION IS USED.
IF(IHAX-FMIN)25
STEP 6
THE INITIAL  INTERVAL IS NOT WITHIN  THE  CURRENT FINAL
J.NTEKVAL.  INCREMENT THE CURRENT FINAL INCREMENT

CONTROL VARIABLES.
   25
FI=FI*1
FMIN=SIZEF(FI!
STEP 7
INCREMENT THE  NUMBER OF CELLS USED  IN  THE BRIDGE

SPECIFICATION  ARRAY BY ONE TO ALLOW  FOR THE COUNT

CEL^ FOR THE CURREN1 FINAL INTERVAL  AND INITIALIZE
THAT CELL AT ZERO.
NBRG=N6R3+1
BR&(N3RG)=0
ICNT=N6R3


STEP 3
AT THIS POINT  IT  IS KNOWN THAT THE  CURRENT INITIAL

INTERVAL CONTRIBUTES TO THE CURRENT FINAL INTERVAL.

INCREMENT  THE  NUMBER OF INITIAL  INTERVALS CONTRIBUT-
ING TO THIS  FINAL  INTERVAL BY ONE  AND  STORE THE

SEQUENCE NUMBER OF THE INITIAL INTERVAL IN THE

NEXT AVAILABLE CELi. OF THE BRIDGE  SPECIFICATION
ARRAY.
   30  BRGCICNT)=5xG(ICNT)+l
       NBRG = NBRG-H

       dF.G(NBRG) =il-l
       N3RG=NBC3+I
                 FIGURE  H-4-2.3.  (Continued)
                                  65

-------
C     STEP 9        IF  THE MINIMUM OF  THE  CURRENT INITIAL  INTERVAL IS
C                   LESS THAN THE MINUMUM  OF THE CURRENT  FINAL INTERVAL,
C                   BRANCH TO STEP 12.
C
      IFUMIN.LT.FMIN)GO TO 35
C
C     STEP 10       THE INITIAL INTERVAL  ENOS WITHIN THE  FINAL INTERVAL,
C                   THEREFORE, THE ENTIRE  REMAINDER CONTRIBUTES TO THAT
C                   FINAL INTERVAL. COMPUTE THE FRACTION  AND STORE IT
C                   IN  THE NFXT AVAILABLE  CELL OF THE  BRiDGt SPECIFICA-
C                   TiON ARRAY.
C
      VAL=RE MAIN/RANGE
      BRG(N3RG) =IV
C
C     STEP 11       IF  ALL INITIAL INTERVALS HAVE BEEN PROCESSED,
0                   BRANCH TO STEP 13.  ELSF, LOOP BACK TO  STEP k .
C
      lF(NSIZEI-II)ifO,20,20
C
C     STEP 12       THE CURRENT INITIAL INTERVAL EXTENDS  BEYOND THE
C                   RANGE OF THE CURRENT  FINAL INTERVAL,  COMPUTE THE
C                   FRACTION CONTRIBUTING  TO THE FINAL  INTERVAL, STORE
C                   IT  IN THE NEXT AVAILABLE CELL OF THE  BRIDGE SPECIFI-
C                   CATION ARRAY, RECOMPUTE THE INITIAL INTERVAL BOUNDARY
C                   VALUES,  AND LOOP BACK  TO STEP 6.
C
   35 VAL=(IMAX-FMIN)/RANGE
      RE«AIN=REMAIN-IMAX+FMIN
      IMAX=FMIN
      6Rt
-------
                    4.3  Interpolation and Approximation

          In addition to the general topic of conventions and notations,  one
other general area must be developed before the detailed discussion of the
unit operations can begin and before discussing the remaining subroutines.
This is the topic of interpolation and approximation.  CPSM4 is a mathemat-
ical model of the processes within a coal preparation plant.  As such it does
not actually perform any of the operations within a plant; rather it attempts
to maintain the same mathematical relationships between measurable quantities
as would result from measuring those quantities within the actual plant.   Such
relationships are represented mathematically as functions.  Unfortunately,
it is never possible to represent the real world relationship exactly.  This
shortcoming arises from a variety of sources such as an incomplete under-
standing of the phenomena under study, the stocastic or random nature of the
relationship, and the uncertainties associated with the very measurements
used as basis for establishing the relationship.
          Real world relationships  are then approximated  via functions, based
on measured values.  The next question to be asked has  to do with how the
functions are to be represented in  the machine.  Theoretically, the best
representation would be as  some exact functional form.  Such a  representa-
tion would seem to be the best since it would always give a precise result for
any quantity whose value depends upon the function.
          Actually functions of this sort are never programmed  in their exact
functional form in program  CPSM4.   Instead they are represented indirectly via
a  finite set of pairs of values.  The normal view of this set of pairs of
values  is as though they represented the coordinates of points  of that function
if it were displayed in graphical form.  There are two  reasons  why functions
are typically based on measured values.  First, their exact form is often not
known.  Second, different particular unit operations within the various generic
types differ only insofar as their functional forms are concerned.  It is
desirable, then, to be able to vary these functional forms from the data  deck
of the  program.  Since all  functions of the type of interest here can be
represented as a series of  points and since such series are very easy to  input
into the program, all functions are represented via a series of points.

                                       67

-------
          Given that functions  are  represented  as  a series of finite points,
obtaining a value for any point requires  interpolation.   The basic concept
behind the use of interpolation is  that the value  of any point of a function
can be estimated based upon the values  of known points  surrounding it.   The
number of points used and the manner  in which particular estimates are computed
varies  from estimation technique to  estimation technique.   There is a wide
body of literature on this topic; therefore,  the various techniques available,
their advantages and disadvantages, will  not be discussed here.
          Within program CPSM4  there  are  two routines for doing  interpolation,
subroutine INTS and function YINTRP.  Subroutine INTS performs simple linear
interpolation;  while function YINTRP  performs 4-point Lagrangian interpolation.
                                      68

-------
                            4.4  Subroutine INTS

          The simplest form of interpolation is linear.  This type of inter-
polation bases the dependent value of a given point upon the know dependent
values of the two points surrounding it.  The assumption made is that the
unknown point lies on the straight line connecting the two points.  The
arithmetic required to implement this assumption is straightforward and is
shown in the basic documentation.  It should be pointed out that subroutine
INTS does not perform extrapolation.  Any independent value which lies out-
side the range specified is assigned the dependent value of the appropriate
end point.
          Figure II-4-4.1 is a flowchart for subroutine INTS; Figure
II-4-4.2 presents  the FORTRAN  listing.
                                       69

-------

FIGURE II-4-4.1.   FLOWCHART FOR SUBROUTINE INTS
                      70

-------
      SUBROUTINE I NTS(X,Y,RX,RY,N)
C
C     TITLECPERFOKM LINEAR  1NTERPLOAT1ON>
C
C     SUBROUTINE INTS  PERFORMS  UNIVAKIATF  LINEAR  INTERPOLATION FROM A
C     TABLE OF VALUES  OF  X  VERSUS Y.
C
C     PARAMETER    DESCRIPTION
C     X            THIS 1-DIMFNSIONAL 'EAL ARRAY  CONTAINS THE INCE-
C                  PENDENT  X-VARIABLE VALUES. THIS  SET  OF VALUES HUST
C                  BE  EITHER  INCREASING OR MONOTONE  DECREASING.
C     Y            THIS 1-DIMENSIONAL REAL ARRAY  CONTAINS THE DEPENDENT
C                  Y-VARIABLE  VALUES.
C     KX           THIS REAL  VARIABLE CONTAINS THE  VALUE  OF  THE  INDE-
C                  PENDENT  VARIABLE AT WHICH A VALUE  FOR  THE OEPEN-
C                  DENT VARIABLE  SHOULD BE COMPUTED.
C     FY           THIS REAL  VARIABLE RETURNS THE COMPUTED VALUE FOR THE
C                  DEPENDENT  VARIABLE.
C     N            THIS INTEGER  VAKTA8LE DEFINES  THE  NUMBER  OF POINTS
C                  USED TO  DEFINE THE VARIABLES.
C
C     VARIABLE     DESCRIPTION
C     J            THIS INTEGER  VARIABLE CONTAINS THE SEQUENCE NUMBER
C                  OF  THAT  POINT  IMMEDIATELY TO THE  LEFT  OF  THE  VALUE
C                  FOR WHICH  THE  DEPENDENT VARIABLE  IS  TO BE COMPUTED.
C                  THIS IS  REFERRED TO AS  THE BASE  POINT.
C
      DIMENSION X(N),Y(N>
C
C     STEP i       BRANCH  ACCORDING TO WHETHER OR NOT THE X-VARIABLE
C                  IS  DEFINED  AS  MONOTONE  INCREASING  OR DECREASING.
C                  BRANCH     HOW  DEFINED
C                  STEP 2     INCREASING
C                  STEP 3     DECREASING
C
      IF(X(N)-X(1) HO,10,20
C
C     STEP 2       THE X-VALUES  ARE MONOTONE DECREASING.  FIND THAT X-
C                  GREATER  THAN  OR EQUAL TO THE SPECIFIED VALUE. IF ONE
C                  IS  FOUND,  BRANCH TO STEP 5. ELSE  BRANCH TO STEP *».
C
   10 00 15 J=1,N
      IFCRX-X (J ) )15,35, 35
   15 CONTINUE
      GO TO 30
C
C     STEP 3       THE X-VALUES  ARE MONOTONE INCREASING.  FIND THAT X-
C                  VALUE  SMALLER  THAN OR EQUAL TO THE SPECIFIED  VALUE.
C                  IF  ONE  IS  FOUND BRAN:H TO STEP 5.  ELSE, BRANCH TO


         FIGURE II-4-A.2. FORTRAN LISTING FOR SUBROUTINE INTS

                                 71

-------
G                   STEP  i».
C
   20 00 25 J=i,N
      IF(RX-X( JM 3 5t 35,25
   25 CONTINUE
C
C     STEP «f        THE  SPECIFIED POINT IS  BEYOND THE SPECIFIED  RANGE OF
C                   THE  X-VARIABLE.SET THE  DEPENDENT VALUE TO  THE  LAST
C                   i/ALUE AND END LOCAL PROCESSING.
C
   30 RY=Y(N)
      GO TO 9^9
C
C     STEP 5        IF THE  SPECIFIED POINT  IS  WITHIN THE RANGE OF  VALUES
C                   OEF1NFO, BRANCH TO STEP  6.  ELSE SET THE DEPENDENT
G                   VALUE EQUAL TO THE FIRST VALUE, AND END LOCAL  PRO-
C                   CESSING.
C
   35 IF (J.GT.l)GO  TO «»0
      RY=Y (1)
      GO TO 999
C
C     STEP 6        COMPUTE THE VALUE FOR THE  DEPENDENT VARIABLE AND
C                   END  LOCAL PROCESSING.
C
   i»0 RY=«t ( J-1)-Y< JMMX ( J)-RX)/(X (J)-X(J-l) ))+Y(J)
  999 RETURN
      END
             FIGURE II-4-4.2.   (Continued)
                                 72

-------
                            4.5  Function YINTRP

          A more  complicated form of interpolation than linear is Lagrangian,
a form of  polynomial  interpolation.   In particular,  function YINTRP bases
the dependent  value of  the given point upon the known dependent values
of the four points  surrounding it by assuming that the given point lies
on a no more than forth degree polynomial connecting the known points.
Carnahan,  Luther, and Wilkes^  '  contains an excellent discussion of
Lagrange's interpolation polynomial.  Readers unfamiliar with this type of
interpolation  are referred to  that source.   The discussion will not be re-
peated here.
          The  method  of solution used in this implementation is derived and,
 therefore, will be discussed briefly.  The basic formula for Lagrange's
 4-point interpolating polynomial is shown in (1).
              min+3 min+3
          f(x) = E  (H (x-xJ/Cx^x.-)^                                 (1)
              i=min j=min
By rewriting this as (2) about nine multiplications and nine subtractions can
be saved, at the expense of four divisions.
            min+3
          c = n   (x-x.)
             j=min
                                                                        (2)
              min+3           min+3
          f(x) = E  ((C/(x-Xi))/n (x±-x
              i=min           j =min    -1
This is the form used in Function YINTRP.
          If any independent values lie outside the range specified, then
the dependent value is assigned the value of the appropriate end point; thus,
YINTRP performs no extrapolation.  If any independent values lie so close
to one of the end points that they cannot be surrounded by four points, then
linear interpolation is performed instead.  Normally the known x-coordinates
must be specified in monotone increasing foriL.  The only exception is that
all x-points from a certain position onward may have the same value.  In
these cases, the first point in such a sequence is considered to define the
endpoint .
          Figure II-4-5.1 is the flowchart for function YINTRP, while
 Figure II-4-5.2 presents  the FORTRAN listing.
                                      73

-------
                                                      "1 NO
           1=1
\
X-XPTS(I) Y^-~
• /
A'
1=1+1
=0
• r/ M
                                                        YES
                      YINTRP=

                     YPTSCI-D +

                    (X-XPTS(I-l))*
YINTRP=YPTS(
N)
     U        W-v^
        *>XPTS(I)
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
G
c
c
c
Ly
c
c
c
c
C
c
c
c
c
c
G
c
L
G
C
c
c
c
c
c
c
c
c
c
c
c
c
L-
FUNCTION YINTRP(XPJS, YPTS,X,N)


TITLE(PE*FORM  ^-POIMT  LAGRANGIAN INTERPOLATION*


FUNCTION YINTRP  PERFORMS UNIVARIATE,  *»-POlNT,  LAGRANGIAN
POLATION FROM  A  TABLE  OF VALUES OF X  VERSUS  Y.  THE BASIC
USED TO 30MPUTE  THE  VALUE IS AS FOLLOWS.
 Yv = SUM (K) (Y«)*XP/(X
WHERE YV = THE DEPENDENT VARIABLE VALUE
      XV = THE SPECIFItO INDEPENDENT  VARIABLE  VALUE
                                                 INTER-
                                                 FORMULA
      X =

      Y =

      XP =
      THE

      ING


PARAMETER
YINTRP


XPTS
YPTS


N


X
VARIABLE
I


Kl
K2



XPROD


YPROD


K
THE VECTOR OF  INDEPENDENT VARIABLE VALUES

THE VECTOR OF  DEPENDENT VARIABLE VALUES
II(I) (XV-X(J) }
SUBSCRIPTS I,  J,  K  RANGE OVER THE FOUR POINTS  SURROND-

THE SPECIFIED  INDEPENDENT VALUE.
                               THE COMPUTED  VALUE FOR
                                            THE INOEPEND-
                                            OF  VALUES
DESCRIPTION
THIS REAL  VARIABLE RETURNS
THE DEPENDENT  VARIABLE.
THIS 1-DIMENSIONAL REAL  ARRAY CONTAINS
ENT VARIABLE  
-------
       DIMENSION  XPTS(N) ,rPTS(N)

 C     STEP 1       DETERMINE  IF  THERE IS A X-VARIABLE POINT  IMME-
 c                  U1A7ELY  GREATER THAN OR EQUAL TO THE  SPECIFIED  POINT
 C                  AND  BRANCH ACCORDINGLY.
 C
 C                  BRANCH     STATUS
 C                  STEP 2     ALL POINTS LESS THAN SPECIFIED  POINT
 C                  STEP 5     DEFINED POINT EQUALS SPECIFIED  POINT
 C                  STEP k     A POINT GREATER THAN THE SPECIFIED  ONE
 C
       00 18 I*1»N
       IFIX-XPTSilJ )20t 15,10
    10 CONTINUE
 C
 C     STEP 2       THE X-tfALUE SPECIFIED IS GREATER THAN ALL THE X-
 C                  POINTS DEFINED FOR THE VARIABLE. SET  THE  Y-VALUE
 C                  EQUAL TO THE  Y-VALUE OF THE LAST POINT AND END LOCAL
 C                  PROCESSING.
 C
       VINTRP=YPTS«N)
       GO TO 999
 C
 C     STEP 1       THE SPECIFIED VALUE EQUALS ONE OF THE DEFINED X-
 C                  POINTS.  SET THE Y-VALJE EQUAL TO THE CORRESPONDING
 C                  Y-POINF  VALUE.
 C
    15 YANTRP=YPTS(I)
       GO TO 999
 C
 C      STEP k       THAT X-POINT  WHICH IS IMMEDIATELY GREATER THAN THE
 C                   SPtCIFIED  POINT HAS BEEN FOUND. BRANCH ACCORDING TO
 C                   WHICH POINT THAT IS.
 C                   BRANCH     POINT
 C                   STEP 5     FIRST POINT
 C                   STEP 6     SECOND POINT OR LAST POINT
 C                   STEP 7     ANY OTHER POINT
 C
    20  IF(I-?)30,35,25
    25  IF(I-N)^0,35,35
 C
 C      STEP 5        THE FIRST  POINT IS GREATER THAN THE SPECIFIED VALUE.
 C                   SET THE  Y-^ALUE EQUAL TO THE  FIRST  POINT S Y-VALUE.
 o                   THEN FND LOCAL PROCESSING.
 C
    30  YINTRP=YPTS(1)
       GO  TO 999
C
C      STEP  6        THE SPECIFIED  POINT  IS  SO CLOSE TO  THE ENDS  OF THE


             FIGURE II-4-5.2.  (Continued)

                                 76

-------
C
C
c
c
C
C
C
C
C
C
C
C
C

C
C
C
C
C
C
   35
                DFFINEJ  DISTRlbUTION THAT  k  POINTS SUUROUNDING  IT
                A.%E  NOT  AVAILABLE. USE  LINEAR INTERPOLATION  TO  COM-
                PUTE  A  Y-yALUE AND END  LOCAL PROCESSING.

         = YPTo(I-ll'MX-XPTS(I-lMMYPTS ( I ) -YPTS ( I -1 ) ) / 
-------
c
C     STFP  14       INCREMENT  THE  3UNMY COUNTER CONTROLLING  THE OUTER
C               s   SUMMATION  BY  ONE, AND  IF  ALL POINTS  HAVE  BEEN PRO-
C                   CtSSED, LOOP  BACK TO STEP 11.
C
   60 CONTINUE
C
C     STEP  15       MULTIPLY THE  THE Y-VALUF  COMPUTED ABOVE  BY THE
C                   PRODUCT OF  THE X DIFFERENCES TO OBTAIN THE FINAL
C                   INTERPOLATED  
-------
                           4.6  Subroutine SDSIZE

          Many of the routines in the program need access to the flow weight
and flow characteristics summarized by size fraction and for the composite.
This summarization is performed by subroutine SDSIZE.  The calculation is
straightforward and is discussed adequately in the basic documentation.  It
should be observed, however, that the values for the ash, total sulfur, and
pyritic sulfur are converted from ratio form to percent form.
          Figure II-4-6.1 contains the listing for subroutine SDSIZE.  No
flowchart, other than the verbal one in the listing, is provided since
SDSIZE performs minimal branching.
                                       79

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
L
SUBROUTINE SDSI2E(FLOW,SUM,NSIZE,NGRAV,NCHAR, TOTAL)


TITLEtSUMMARIZE FLOHSTREAM DATA  BY  SIZE  INCREMENT)


SUBROUTINE SDSIZE IS USED TO CALCULATE  SUMMARY DATA MBOUT A

FLOWSTkEftW BY SIZE INCREMENTS, THUS  REMOVING THE SPECIFIC

GRAVITY 3ETAIL FROM THE SUMMARIZATION.
PARAMETER
FLOH
SUM




NSIZE


NGRAV


NCHAR


TOTAL
COMMON

/WORK/


VARIABLE

NS
J


K


EPSlLN
 DESCRIPTION
 THIS REAu 3-OIHENSIONAL  ARRAY  CONTAINS THE DETAILED

 INFORMATION DESCRIBING THE  FLOW  STREAM CLASSIFIED

 BY SIZE INCREMENT AND SPECIFIC GRAVITY INCREMENT.

 THIS REAu 2-DIMENSIONAL  ARRAY  RETURNS THE SUMMAR-

 IZED DATA BY SIZE INCREMENT AND  TOTAL DESCRIBING

THE FLOW STREAM.
 THIS INTEGER VARIABLE CONTAINS THE NUMBER OF SIZE

 INCREMENTS.

 THIS INTEGER VARIABLE CONTAINS THE NUMBER OF

 SPECIFIC GRAVITY INCREMENTS.

THIS INTEGER VARIABLE CONTAINS  THE NUMBER OF

CHARACTERISTICS

THIS REAL VARIABLE RETURNS THE  FtOWRATE OF THE

FLOWSTREAM.
VARIABLES
IBTU
USED
DESCRIPTION

THIo INTEGER VARIABLE CONTAINS  THE ROW NUMBER IN

THE SUMMARY ARRAY OF THE  TOTAL  FLOW INFORMATION. IT

IS THE ROW JUST BELOW THE ROW FOR  THE LAST DETAILED

SIZE INCREMENT.

THIS DUMMY COUNTER CONTROLS THE MOVEMENT THROUGH
THE SIZE INCREMENTS.

THIS 3UMMY COUNTER CONTROLS THE MOVEMENT THROUGH

THE SPECIFIC GRAVITY INCREMENTS.
THIS DUMMY COUNTER CONTROLS THE MOVEMENT THROUGH

THE ASH, SULFUR, AND BTU  CATEGORIES.

THIS KErtL VARIABLE CONTAINS THE EPSItON VALUE FOR
ZERO.
      COMMON/WO*K/NEXT,L4ST,rCURVE,IUNIT,IOATA,ITITLE,ICHAk,IFLW,IASH,
       IbUL,IBTU

      DIMENSION FL OW (N SI ZE,N&RAt/, NCHAR) , SUM (2%, NCHAR)

      DATA EP5ILM/1.E-3/
      STFP 1
c
c
             COMPUTE THE *OW NUMBER  IN  THE  SUMMARY ARRAY OF THE

             ROH TO CONTAIN THE  INFORMATION FOR THE TOTAL FLOW

             STREAM. THIS ROW IS JUST BEuOW THE ROW FOR THE
         FIGURE II-4-6.1.  FORTRAN LISTING FOR SUBROUTINE SDSIZE


                                 80

-------
C                   FINAL SIZE  INCREMENT.
C
      NS = NSIZE<-1
C
C     STEP 2        COMPUTE THE SUMMARY ARRAY.
C
      DO 15 K=1,NCHAR
      SUM
-------
                           4.7   Subroutine DSTRB

          Subroutine DSTRB  distributes  a feed between two output flowstreams
according to a distribution curve.   Figure II-4-7.1 gives the listing and basic
documentation for this routine.
                                      82

-------
b
c
c
G
C
C
c
c
c
c
c
G
C
c
c
c
c
c
c
c
c
c
c
c
G
c
c
c
c
c
c
c
c
c
c
G
c
c
      SUBROUTINE DSTRB(FEED,UPPER,LOWER«.)ISTFB»INCR»NS IZE,NGRAV,NCHAR)


      TaTLEtQIiTSiBUTE THE FEEu BETWEEN THE  UPPEk  AND LOWER OUTPUT
      FuOWSTREAMS)


      SUBROUTINE DSTR8 SPLITS THE FEED FL.OWSTREAH  INTO THE UPPER AND
      LOWER  OUTPUT  FLOWSTREAMS ACCORDING TO  A  DISTRIBUTION CURVE.
PARAMETER
FEED


UPPER _


LOWER


CISTR8


INCR



NSIZE


NGRAV


NCHAR



VARIABLE
I


J


K


II



JJ



KK
                   REAL  ARRAY  CONTAINS THE VALUES FOR
                               RETURNS THE VALUES
                                      THE VALUES FOR
                                        THE
DESCRIPTION
THIS ^-DIMENSIONAL
THE FEED STREAM
THIS ^-DIMENSIONAL  REAL  ARRAY
FOR THE UPPER  OUTPUT  FLOW.
THS 3-DIMENSIONAL REAL ARRAY  RETURNS
THE LOWER OUTPUT Ft.OH.
THIS 1-DIMENSIONAL  REAL  ARRAY  CONTAINS
DISTRIBUTION CURVE  VALUES.
THIS 1-OIMENSIONAL  INTEGER  ARRAY INDICATES THE
SIZE, SPECIFIC GRAVITY AND  CHARACTERISTIC INCREMENTS
IN THE DISTRIBUTION CURVE.
THIS INTEGER VARIABLE SPECIFIES THE NUMBER OF SIZE
FRACTIONS CLASSIFYING THE FLOWSTREAM.
THIS INTEGER VARIABLE SPECIFIES THE NUH8ER
SPECIFIC GRAVITY FRACTIONS  CLASSIFYING THE
THIS INTEGER VARIABLE SPECIFIES THE NUMBER
CHARACTERISTICS CLASSIFYING THE FLOWSTREAM.
                                            OF
                                            FLOWSTREAM
                                            OF
DESCRIPTION
THIS DUMflY INTEGER  VARIABLE  IS  USED TO CONTROL
MOVEMENT THROUGH  THE  SIZE  FRACTIONS.
THIS DUMMY INTEGER  VARIABLE  IS  USED TO CONTROL
MOVEMENT THROUGH  THE  SPECIFIC  GRAVITY FRACTIONS.
THIS DUMMY INTEGER  VARIABLE  IS  USED TO CONTROL
MOVEMENT THROUGH  THE  CHARACTERISTICS.
THIS OUMMY INTEGER  VARIABLE  IS  USED TO CONTROL
MOVEMENT THROUGH  THE  SIZE  FRACTIONS OF THE DISTRIB-
UTION CURVE.
THIS DUMMY INTEGER  VARIABLE  IS  USED TO CONTROL
MOVEMENT THROUGH  THE  SPECIFIC  GRAVITY FRACTIONS OF
THE DISTRIBUTION  CURVE.

THIS DUMMY INTEGER  VARIABLE  IS  USED TO CONTROL
MOVEMENT THROUGH  THE  CHARACTERISTICS OF THE
niSTRiBUTION CURVE.
      DIMENSION OISTRB(l),INCR<3)
      DIMENSION FEEDCNSIZE,NGRAV,NCHARI,UPPER(NSIZE,NGRAV*NCHAR I ,
     1 LOWERtNSIZE,NGRAV,NCHAR)
      REAL  LOWER
        FIGURE II-4-7.1.  LISTING OF SUBROUTINE DSTRB


                                83

-------
G     STEP 1       INITIALIZE  AT  ONE  THE  DUMMY COUNTER  USEU  TO CONTROL
C                  MOVEMENT THROUGH  THE CHARACTERISTICS.
C
      DO 30 K=1,NCHAR
C
C     STEP 2       SET THE DUMMY  VARIABLE CONTROLlNG THE  CURRENT
C                  CHARACTERISTIC OF  THE  DISTRIBUTION CURVE.
C
      KK=K
      IF KK = 1
C
C     STEP 3       INITIALIZE  AT  ONE  THE  DUMMY COUNTER  USED  TO CONTROL
C                  MOVEMENT THROUGH  THE SPECIFIC GRAVITY  FRACTIONS.
C
      DO 20 J=1,NGRAV
C
C     STEP k       SET THE DUMMY  VARIABLE CONTROLIN6 THE  CURRENT
C                  SPECIFIC GRAVITY  FRACTION OF THE DISTRIBUTION
C                  CURVE.
C
      JJ=.H-(KK-1)*INCR{2)
      IF
-------
G                   HAVE  NOT BEEN  PROCESSED  LOOP BACK  TO  STEP 2.
30    CONTINUE
G     STEP  11       END  LOCAL PROCESSING
      KETUPN
      END
              FIGURE 11-4^7.1.   (Continued)
                                   85

-------
                            4.8   Subroutine  ECON

          Subroutine ECON computes  the  economic  data  for  the  plant.   Figure
II-4-8.1 gives  the  listing and basic  documentation  for  this routine.
                                      86

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
SUBROUTINE ECON


TITLE(CCMPUTE ECONOMIC DATA)


SUBROUTINE ECON COMPUTES  AN  ECONOMIC  SUMMARY FOR THE

OUTPUT FLOWSTREAMS.
COMMON

/IOCNT/

/CNTVAR/

//

/WORK/

/CODERC/

/CHRSET/

/FILES/

/BLK1/


VARIABLE

LD1-LD13


PC

IPC


IOP


ICS


HEATCV


NCONS


NOPER


NTAB


NSCEN


F


I

FLOWP


SINC


IBLNK
JF

JF1

IOCOST




IOPROO




IDSCEN


AHOUR
VARIABLES USE3
CARCON, JOB

KF, NCHAR, NCLOHS, S

HS, SG
IFLW, NEXT

ICOL, LCOL. LINE

LETTER
READER
CFO


DESCRIPTION
THESE 1-DIMENSIONAL INTEGER  ARRAYS  CONTAIN  INTERNAL

DISPLAY CODES FOR OUTPUT PURPOSES.

THIS REAL VARIABLE CONTAINS  THE  PRODUCTION  CONSTANT.
THIS INTEGER VARIABLE CONTAINS THE  PRODUCTION
SPECIFICATION TYPE CODE.

THIS INTEGER VARIABLE CONTAINS THE  SALEABLE OUTPUT
FLOW CODE.

THIS INTEGER VARIABLE CONTAINS THE  SALEABLE
CHARACTERISTIC CODE.
THIS REAL VARIABLE IS THE BTU/LB TO HEAT  UNIT
CONVERSION FACTOR

THIS INTEGER VARIABLE CONTAINS THE  LENGTH OF
CONSTRUCTION PERIOD.

THIS INTEGER VARIABLE CONTAINS THE  LENGTH OF THE

OPERATIONAL PERIOD.
THIS INTEGER VARIABLE CONTAINS THE  NUMBER OF TABLE

FUNCTIONS
THIS INTEGER VARIABLE

SCENARIOS.

THIS INTEGER VARIABLE
MOVING THROUGH THE FLOWS.
THIS INTEGER VARIABLE IS USED AS A  DO-LOOP

THIS 1-DIMENSIONAL REAL ARRAY CONTAINS  THE

COMPOSITE CHARACTERISTICS OF PROOJCTION.
THIS 1-DIMENSIONAL REAL ARRAY CONTAINS  THE

CHARACTERS C, M, R.

THIS INTEGER VARIABLE CONTAINS A DATA  VALUE.
CONTAINS THE NUMBER OF COST
IS USED AS A DO-LOOP COUNTER
                     COUNTER.
                     HOLLERITH
THIS INTEGER VARIABLE  IS  A

THIS INTEGER VARIABLE  IS  A
THIS 1-OIMEN5IONAL INTEGER
INTERNAL DISPLAY SOOES FOR

DESCRIPTION

THIS 1-OIMENSIONAL INTEGER
INTERNAL DISPLAY 30DES FOR

DESCRIPTIONS

THIS 1-DIMEN5IONAL INTEGER
INTERNAL DISPLAY 300ES FOR
     SUMMARY FLOWSTREAM

     SUMMARY FLOWSTREAM

     ARRAY CONTAINS THE
     THE COST UNITS
POINTER

POINTER
     ARRAY DONTAINS THE
     THE PRDDUCTION UNITS


     ARRAY CONTAINS THE

     THE SCENARIO DESCRIPTIONS
THIS REAL VARIABLE CONTAINS  THE  NUMBER OF HOURS OF
              FIGURE II-4-8.1.  LISTING OF SUBROUTINE ECON


                                87

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c

PROD

NCELL

ITAB

LTAB

ICE

LCE

ICELL

LCELL

IYR

LYR

IPROF

IOEP

IPROD

NOEL

RP

OF

RI

TR
IBASE

IARG,ARG

VAL.IVAL

IARG2
flP
CO

CN

OE
OE
TA
NY

NPOINf

IY
                             THE  AMOUNT OF MATERIAL
                               AS
             POINTER FOR THE
OPERATION ANNUALLY.
THIS REAL VARIABLE CONTAINS
IN THE ANNUAL PRODUCTION
THIS INTEGER VARIABLE CONTAINS  THE NUMBER OF CELLS
USED IN DESCRIPTORS
THIS INTEGER VARIABLE IS  USED
TABLE FUNCTION SPECIFICATIONS
THIS INTEGER VARIABLE IS  USED  AS  A POINTER FOR THE
TABLE FUNCTION SPECIFICATIONS
THIS INTEGER VARIABLE IS  USED  AS  A POINTER FOR THE
             INFORMATION
             VARIABLE IS  USED  AS  A POINTER FOR THE
             INFORMATION
             VARIABLE IS  USED  AS  A POINTER IN
COST
THIS
COST
THIS
                      IS USED  AS  A  POINTER IN

                      IS THE FIRST  YEAR OF THE
             CODE
             VARIABLE
CONTAINS THE DEPRECIATION
     ELEMENT
     INTEGER
     ELEMENT
     INTEGER
WORKING STORAGE
THIS INTEGER VARIABLE
WORKING STORAGE
THIS INTEGER VARIABLE
OPERATIONAL PERIOD
THIS INTEGER VARIABLE IS THE  LAST YEAR OF THE
OPERATIONAL PERIOD
THIS INTEGER VARIABLE CONTAINS  THE  PROFITABILITY
MEASURE TYPE
THIS INTEGER
TYPE CODE
THIS INTEGER
ASSUMPTION CODE
THIS INTEGER VARIABLE
ELEMENTS TO 3E CHANGED
THIS REAL VARIABLE .CONTAINS
DESIRED
THIS REAL VARIABLE CONTAINS
MENT TO BE BORROWED
THIS 'REAL VARIABLE CONTAINS
THE DEBT
THIS REAL VARIABLE CONTAINS
THIS INTEGER VARIABLE CONTAINS  THE  BASE ADDRESS
OF THE CURRENT COST ELEMENT
THIS TYPELESS VARIABLE CONTAINS THE COST
CALCULATION ARGUMENT TYPE CODE
THIS TYPELESS VARIABLE CONTAINS THE COST ELEMENT
VALUE
             VARIABLE CONTAINS  THE  PRODUCTION
                      CONTAINS  THE  NUMBER OF COST
                             THE  RATE OF PROFIT
                             THE  FRACTION OF INVEST-

                             THE  INTEREST RATE FOR
                             THE  INCOME TAX RATE
                CONTAINS THE
   USED FOR TEMPORARY  STORAGE
   THE ANNUAL  PRODUCTION
       DEPRECIABLE  CAPITAL
THIS INTEGER VARIABLE  IS
THIS REAL ARRAY CONTAINS
THIS REAL ARRAY
INVESTMENT
THIS REAL ARRAY CONTAINS THE  NONDEPRECIABLE OPERATING
INVESTMENT
THIS REAL ARRAY
THIS REAL ARRAY
THIS REAL ARRAY
                CONTAINS
                CONTAINS
                CONTAINS
       OPERATING EXPENSES
       DEPRECIATION
       TAX ALLOWANCE
                         THE
                         THE
                         THE
THIS INTEGER VARIABLE CONTAINS  THE  NUMBER OF YEARS
OF COMBINED CONSTRUCTION AND  OPERATION
THIS INTEGER VARIABLE IS USED AS  A  POINTER F0'n
WOP
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
LY
IRQW

LRCW

LINES

LEVEL

J
IX

IT

ISC

IOPER

IL

ID
ICALG

1C
THIS INTEGER
THIS INTEGER
OUTPUT
THIS INTEGER
OUTPUT
THIS INTEGER
PRINTED ON TH
THIS INTEGER
STORAGE OF TH
THIS INTEGER
THIS INTEGER
WORKING STORA
THIS INTEGER
WORKING STORA
THIS INTEGER
OVER THE SCEM
THIS INTEGER
OPERATIONS
THIS INTEGER
WORKING STORA
VARIABLE CONTA
VARIABLE IS  US
               INS THE FINAL TIME  VALUE
               ED AS A ROW POINTER  FOR.
VARIABLE  IS  USED AS A ROW POINTER  FOR

               INS THE NUMBER OF LINES

                THE ADDRESSES IN WOPKING
VARIABLE CONTA
E CURRENT PAGE
ARRAY CONTAINS
E COST VALUES
VARIABLE IS  US
VARIABLE IS  US
GE
VARIABLE IS  US
GE
VARIABLE IS  US
ARI05
VARIABLE CONTA

VARIABLE IS  US
GE
               ED  AS A  DO-LOOP COUNTER
               EH  AS A  POINTER FOR

               ED  AS A  POINTER FOR

               ED  AS 4  DO-LOOP COUNTER

               INS THE  FIRST YEAR OF

               ED  AS A  POINTER FOR
THIS INTEGER  VARIABLE CONTAINS THE  COST  CALCUL-
ATION ARGUMENT  TYPE CODE
THIS INTEGER  VARIABLE IS USED FOR  TEMPORARY STORAGE
      COMMON/CHRSET/LETTER(<*7)
      COMMON/FILES/REAOER,PRINTR,OFFLIN
      COMMON/WORK/NEXT,LAST.ICURVE,UNIT,ID ATA,ITITLt,ICHAR,IFLW
      COMMON/CODERC/ICOL,LCOL,LINE(150)
      COMMON/CNTVAR/KF(2,100),SIZE(23),GBOUNO(21),GR4V(20),WFLOW(IOQ)
     1            ,S(IQO),01(60),02(60),03(60),L(60)
     2                         ,NSIZE,NGRAV,IOUT,NUNITS,NFLOWS,NCHAR
      COMMON/IOCNT/JOB,CARCON
      COMMON/8LK1/CFO(50,6),CFT(53,6)
      COMMON WS(60DO)
      COMMON/LOCALV/PC,IPC,IOP, I3S,HE ATCV,NCONS,NOPER,NTAB,NSCEN
     1             ,FLOWP(5),AFEED,PROD,IDCOST(5),IDPROD(5),ITAB,ID
     2             ,NCELL,LTAB,LCELL,ICELL,ICE,LCE,IBASE,IYR,LYR,I PROF
     3             ,IOEP,IPROO,NOEL,?P,OF,RI,TR,LEVEL(10),IOSCEN(1U
      DIMENSION SINC(3)
      DIMENSION AP(50),CD(50),C^(50),OE(50),DE(50),TA(50)
      INTEGER READER,PPINTR,OFFLIN,WS
      INTEGER F
      INTEGER CARCON
      DIMENSION LDK8) ,LD2(8) ,LD3(8)
      DIMENSION SG(6000)
      EQUIVALENCE )), CD Ed) ,CFD(1,5» ,(TA(1),CFO(1,6))
      EQUIVALENCE (VAL,IVAL),(IARG,ARG)
      DATA SINC(1),SINC(2),SINC(3)/HC,1HM,1HR/
      DATA IRLNK/-999999/
      DATA LD1 (l),L01(2),LDl(3),L01('»)/3'», 203765001,23 6901318, 755623B28/
      DATA L01(5),LDl(6),LDi(7)/75&33i*925,876«*fl918,2Q009299/
      DATA L01(P)/1182203^/
      DATA L02(1),L02(2),L02(3),L02U)/33,273216133,557590'»1,3210'»8972/
                     FIGURE II-4-8.1.  (Continued)

-------
      DATA 102 (5) ,L02(6) ,LD2 ( 7 ) /25 78721 33, 3 196 27856 ,3 3 7 96599 7/
      DATA L02 (8)/2555W
      DATA L03 (1) , L03 ( 2 >, LD3 < 3 >,LD3
-------
C                  THEM  IN  WORKING STORAGE.
C
      IF(NTA3. EO. 0) GO TO  85
      ITAB=SEXT+1
      DO  *G IT=i,NTA3
      REAO(READER,2)IQ,NCELL
    2  FORMATJ2I5)
      WS (NEXT) =ID
      NEXT=NEXTfl
      IF(IT.GT.l) WS (LTAB)=NEXT
      LTAB=N£XT
      MS (NEXT) =0
      NEXT=MEXT*1
      WS(NEXT) =NCELL
      NEXT=NEXT-H
      LCELL=NEXT+NCELL-1
      RE AD (RE ACER, 3) (WS(I) , I=NEXT , LCELL )
    3  FORMAT(8F10.0 >
      NEXT=LCELL+i
      LCELL=LCELL*NCELL
      RE AD (READER, 3) (MS (I) , I = NEXT , LCELL)
   ^C CONTINUE
C
C     STEP &       READ  AND  STORE THE BASIC  COST  ELEMENT INFORMATION.
C
   *5 ICE=NEXTfi
   9Q
      MS (I3ASE ) = 0
      IC£LL=IBASE+6
    k FORMAT ( 1 13, 2 1 1,6 A 1,1 II, 113, 111, II 3, IX, 2F1Q. fl, *tO Al )
      REAO , 1 = 1, 6 )
     1             , (WS(I) ,I=ICELL,L3ELL),(LINE(I) ,I=7,i»6)
      IF(WS(I9ASE-1) .EQ.-DGO  TD 100
      NEXT=N£XT+13
      IF(LCE.GT.O)HS(LCE)=IBASE
      LCE=I3ASE
      IF(WS(IBASE*3).EQ.O)GO TO 97
      ICOL=1
      LCOL=3
      CALL ROVAL(IYR,I8LNK)
      IF(IYR.EQ.I3LNK)GO TO  91
      ICQ\. = k
      LCOL=6
      CALL ROVAL(LYR,IYR)
      GO' TO 96
   91 IF(WS(I8ASE+3)-l) 93,9^,92
   92 IF (WS(I8ASE + 3) -«*) <*5,<)k,
-------
   95 IYR=-NCONS+1
      LYR=IYR
   95 WS (I3ASE+M=IYR+NCOSS
      WS(I3ASE+5)=LYR+NCONS
   97 ICOL=7

      CALL RDDESC(WS(NEXT) ,NCELD
      NEXT=NEXT*NCELL
      GO TO 90
C
C     STEP 7        BEGIN  PROCESSING THE INDIVIDUAL CDST SCENARIOS.
C                   BEGIN  BY  INITIALIZING AT ONE  THE DUMMY COUNTER USED
C                   TO  CONTROL  THE MOVEMENT THROUGH THE COST COMPUTATION
C                   SCENARIOS.
C
  100 DO 600 ISC=1,NSCEN
C
C     STEP 8        READ THE  CURRENT SOST SCENARIO COMTROL CARD.
C
    5 FORMAT(3Ii,lI2,=IVAL
      I8ASE = WS (I3ASE)
      IFUBASE.GT. 0)GO  TO 135
      00 136 1=1,10
      LEVEL!I)=0
  136 CONTINUE
C
C     STEP 11       BEGIN  THE COMPUTATION OF THE  COST ELEMENT VALUES.
C                   FIRST  SET THE BASE  ADDRESS  OF  THE CURRENT COST
C                   ELEMENT  EQUAL TO THE BASE ADDRESS OF THE FIRST
C                   ELEMENT.
C
      IBASE=ICE
C
C     STEP 12       OBTAIN THE  V4LUE OF THE ARGUMENT FOR THE COST ELEMENT
C                   COMPUTATION FOR THE CURRENT  ELEMENT.
C
  1^9 IARG=KS( I3ASE+6)
      IF (IARG-1) ltf3,l««5,16C
  1<+C IARG=WS (IPASE+1C)

                     FIGURE II-4-8.1.  (Continued)
                                 92

-------
      SO TO 200
  111 5 ICELL=ICE
  150 IF (WS (IPASE+7) . EQ .MS C ICELL-1 I >GO  TO  155
      ICELL=WS (ICELL)
      IF(ICELL) 150,995,150
  155 IARG=WS( ICELL*-!)
      GO TO 20G
  16C F=WS
      VAL=VAL*ARG
      GO TO 250
  215 IVAL=WS ( IBASE+11J
      VAL=ARG**VAL
      GO TO 25 Q
  220 IF(NTAB.EO.O)GO  TO 997
      IT=ITAB
  225 IF(WSdT-l) .EQ.WS (I8ASE + 9) )GO TO  230
      IT=WS(IT1
      IF(IT)225,99e,225
  230 NPOINT=WS
-------
      LEVEL(IL)=I8ASE
      03 255 1=1,11
      ICELL=LEVEL(I)
      IF(ICELL.EQ.O) GOTO 255
      IARG=WS( ICELL+1)
      ARG=ARG+VAL
      WS(ICELL+1>=IARG
  255 CONTINUE
C
C     STEP 15       OBTAIN THE BASE A3DRESS  OF THE NEXT COST  ELEMENT,
C                   AND  IF IT IS NOT ZERO, LOOP BACK TO STFD  12.
C
      IBASE=WS(IBASE)
      IF(IRASE.GT.O)GO  TO 139
C
C     STEP 16       PRINT THE BASIC TABLE  FOR  THE COST VALUES.
C
      IBASE=ICE
      LINES=1QO
  260 IF(WS(IBASE+12).EQ.Q)GO TO 286
      IF(LINES.LT.25)GO TO 265
      LINES=C
      CALL PRHEAO
      JOB=0
      CARCON=LETTER(27)
      ICOL = 1
      CALL PROESC(LOl)
      ICCL=ICCL + 1
      LINE(ICOL)=LETTER<<*5)
      CALL PROESCdDSCEN)
      CALL PRLINE
      CARCON=LETTER((f5)
      CALL PRLINE
  ?65 LINES = LINES-H
  270 IFdCOL.GT.WS (IBASE*2> ) GO TO 275
      ICOL=ICOL+1
      LINE(ICOL)=LETTER {<*5)
      GO TO  270
  275 CALL PRDESC(MS(IBASE+12))
  280 IF(ICOL.GE.50)GO  TO 285
      ICOL=ICOL+1
      LINE(ICOL)=LETTERC+7)
      30 TO 2"0
  2*5 CONTINUE
      CARCON=LETTER(?7)
      CALL CNVTIE(WS(I8ASE + 1) ,16,2)
      CALL PRLINE
  2«6 I3ASE = WS (IBASE)
      IF(IBASE.GT.O)GO  TO 260
C
C     STEP 17       INITIALIZE THE  PROJECT CASH FLOW DESCRIPTION AT ZERO.
C
      NY=NCONS+NOPER
      00 290 1=1,NY
      TO 290 J=l,6
           , J)=0.0

                     FIGURE II-4-8.1.  (Continued)
                                  94

-------
  290  CONTINUE
C
C     STEP 13       ADD  THE COST ELEMENT  VALUES INTO  THE  CASH FLOW
C                   DESCRIPTION
C
      IBASE=ICE
      IC=WS00)360,3ifC,35C
  3<*0 00 3<+5 I = IOPER,NY
      OP (I)=AP (I) -i-PROO
  3i*5 CONTINUE
      GO TO  36C
  350 00 355 I=IOPER,NY
      AP(I) = AP(I)MOE(I)/OE(IPR30M
  355 CONTINUE
C
C     STEP 21       DISPLAY THE PROJECT CASH FLOW  DESCRIPTION.
C
  350 LROW=0
      IY=-NCONS
  365 I9CW=LROW + 1
      LP CW-LRO V+-23
      IP (LROW. GT.NY) LRCW=NY
      CALL PRHEAD

                     FIGURE II-4-8.1.   (Continued)

                                  95

-------
    J08=0
    CARCON=LETTER (27)
    ICOL=1
    CALL 3ROESC(L02)
    ICOL=ICCL+1
    CALL PROESC(IOSCEN)
    CALL PRLINE
    CALL PRLINE
    WRITEC PRINTR, 601)
501 FORMAT <36X,11HOEPRECIABLE,8X,1£»HNONOEPRECIABLE, /, 20 X, 6H ANNUAL
   1      t 13X,7HCAPITAL,i3X,9HOP£RATING,51X,9HOTHER TAX, /,<*X,
    CFT
-------
1*35 AS=AS/AP (NY)
    LRCW=fl
    IY=-NCONS
<*1C IPOW=LROW+1
    LROW=LROH-23
    IF(LROW.GT.NY)LROW=NY
    CALL PRHEAO
    J08 = Q
    CARCON=LETTER< 27)
    ICOL=1
    CALL PRDESC
633 FORMAT(59X,9HCASH FLOW,/,2IX,7HTAXABLE,15X,5HTAXES,13X,5HAFTER
   1       , ifiX,3HNET,15X,8HOISCOJNT,lOX,lPHDISCOUNTED,/,'fX,i*HYEAR
   2       ,1*4X,6H INCOME, 16X , «*H PA I D, 13 X,5HT AXES, 13 X, 9HCASH  FLOW,13X
   3       ,6HFACTOR,12X,9HCASH  FLOW)
    00 1*15  I = IROW,LROW
    IY=IY*1
    MRITE(PRINTR,6Qi») IY, (CFT(I,J) ,J = 1,6)
631* FORMA T(1HO,2X, Ii*,i«F20.2,F20.6,F20.'t)
1*15 CONTINUE
    IF(LROW.LT.NY)50 TO  «*10
605 FORMAT(//,1X,19HUNIT SELLING PRICE  ,lF10.if,16H RATE OF RETURN=
   1,1F6.«*,17H INCOME TAX  RATE = ,1F6.M
    WRITE(PR INTR,605) AS,RP,TR
630 CONTINUE
    GO TO  999
995 STOP 1
996 STOP 2
997 STOP 3
995 STOP (»
999 RETURN
    END
                    FIGURE II-4-8.1.  (Continued)
                                 97

-------
                             5.0   THE UNIT  OPERATIONS
                                        f
          By now just about  everything that can be said about the unit opera-
tions has been said.   This chapter presents the actual routines which simulate
the unit operations.   The actual  code within these routines is self-evident
and straightforward given all of  the  previous discussion.   Other than the
listings themselves and the  basic documentation associated  with them little
additional information is provided in this  chapter.
                                      98

-------
                          5.1  Subroutine BREAK2

         Subroutine BREAK2 simulates breakage during the operation of a unit
Figure II-5-1.1 gives the listing and basic documentation for this routine.
                                      99

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
C
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
G
PI
c
c
c
c
c
SUBROUTINE 3PEAK2 JFEED ,PROD ,BR,SIZE , NSIZE, NGRAV, NCHAR, 6RK, NBRtO


TITLEtSIMULATE BREAKING OF  FLOW  DURING UNIT OPERATION)
SUBROUTINE BREAK2 13 THE ROUTINE  USED TO BREAK THE FLOW  BEFORE IT

ENTERS A UNIT.  IT SIMULATES  THE  BREAKAGE THAT OCCURS  DURING

OPERATION OF THE UNIT.
PARAMETER

FEED
PROD


BR


SIZE


NSIZE


NGRAV


NiiHAR


BRK


NBRK




COMMON

/8LK1V


EXTERNALS


VARIABLE
It J,K,L


STORE


BRGfIBRG
18
             DESCRIPTION

             THIS 3-DINENSIONAL  REAL ARRAY CONTAINS THE DETAILED

             CHARACTERISTICS  OF  THE  FLOW BEFORE BREAKAGE  OCCURS.

             IT RETURNS THE DETAILS  OF THE FLOW AFTER  BREAKAGE.

             THIS 3-DIHENSIONAL  REAL ARRAY IS USED FOR SCRATCH

             STORAGE.
             THIS 2-DIMENSIQNAL  REAL ARRAY IS USED TO  CONTAIN

             THE BREAKAGE  MATRIX.

             THIS i-DIMENSIONAL  REAL ARRAY CONTAINS THE SIZE

             FRACTION DISTRIBUTION  CLASSIFYING THE FLOWSTREAM.

             THIS INTEGER  VARIABLE  CONTAINS THE NUMBER OF  SIZE

             FRACTIONS CLASSIFYING  THE FLOWSTREAM.

             THIS INTEGER  VARIABLE  CONTAINS THE NUMBER OF  SPECIFIC

             GRAVITY FRACTIONS CLASSIFYING THE FLOWSTREAM.

             THIS INTEGER  VARIABLE  CONTAINS 1 PLUS THE NUMBER OF

             FLOWSTREAM CHARACTERISTICS.

             THIS 1-DIMENSIONAL  REAL ARRAY CONTAINS THE BREAKAGE

             SPECIFICATIONS FOk  THE  UNIT.

             THIS INTEGER  VARIABLE  CONTAINS THE NUMBER OF  CELLS

             USED IN SPECIFYING  THE  BREAKAGE IN THE UNIT.


             VARIABLES USED

             SUMRY, ISCC


             BRSIZE, CMP3RK,  SDSIZE


             DESCRIPTION

             THESE DUMMY INTEGER VARIABLES ARE USED TO CONTROL THE

             MOVEMENT THROUGH MISCELLANEOUS uOACL LOOPS.

             THIS REAL VARIABLE  IS  USED AS A TEMPORARY STORAGE
             LOCATION.

             THIS TYPELESS, 1-GIME NS IONAL ARRAY IS USED TO CONTAIN

             THE BRIDGfc SPECIFICATION MRRAY FOR MOVING FROM THF

             UNIT BREAKAGE SIZE  SPECIFICATION TO THE FLOWSTREAM
             SPECIFICATION.

             THIS INTEGER  VARIABLE  CONTAINS THE NUMBER OF  CELLS
             USED IN THE BPIOGE  SPECIFICATION ARRAY.

             THIS INTEGER  VARIABLE  CONTAINS THE NUMBER OF  SIZE

             FRACTIONS SPECIFYING THE BREAKAGE IN THE  UNIT.

             THIS DUMMY iNTEGER  VARIABLE IS USED TO CONTROL
         FIGURE II-5-1.1.  LISTING FOR SUBROUTINE BREAK2


                                100

-------
C
G
c,
C
C
C
C
C
C
C
C
C
C
C
t
C
C
C
C

C
C
C
C
C
C

C
C
C
C
C
C

C
C
                                             SIZE SPECIFICATION.
                                             IS USED TO CONTAIN
                                             FLOWSTREAM SIZE
              THE  MOVEMENT  THROUGH THE  BRIDGE SPECIFICATION  ARRAY.
 SF            THIS  1-DIMENSIONrtL REAL ARRAY  CONTAINS THE SELECTION
              FACTORS  FOR THE UNI1 BREAKAGE
 SI            THIS  1-DIMENSIONAL REAL ARRAY
              THE  SELECTION FAuTO*S FOK  THE
              SPECIFICATION.
 NB            THIS  INTEGER  VARIABLE CONTAIN^  THE NUMBER OF
              rLOWSTREAM  SIZE FRACTIONS  TO WHICH A GIVEN UNIT
              BREAKAGE  SIZE FRACTION CONTRIBUTES.
 TOTAL        THIS  =EAL  VARIABLt RETURNS  THE  TOTAL AMOUNT, BY
              HEIGHT,  OF  COAL IN THE BROKEN  FLOW
 NS            THIS  INTEGER  VARIABLE CONTAINS  1 LESS THAN THE
              NUM6E?  OF  SIZE  FRACTIONS  CLASSIFYING THE VARIABLES,
 VA,_,IVA_     THIS  TYPELESS VARIABLE IS  USED  TO READ KEAL VARIABLES
              FROM  THE  INTEGER ARRAY 3RK.

 DIMENSION F-EO(NSIZE,NGRAV,NCHAR),PROO
-------
L
c
c
c
                    SPECIFICATION.
0
C
c
c
c
c
c
      00 2B I=i,NSIZF
      SI (IJ = 0.0
   20 CONTINUE
STEP 6
                SET  THE  CONTENTS OF THE  ARRAY TO CONTAIN  THE
                SELECTION  FACTORS FOR  THE  BREAKAGE SIZE SPECIFICATION
      00  25  1=1,N52
       IVAL=3RK(J)
       SF(I)=VAL
   25  CONTINUE
C
o
C
C

C
c
c
c
c

STEP 7


18 = 0

STEP 3



                    INITIALIZE THE  VARIABLE NEF.CEG TO  MOVE THROUGH
                    THE BREAKAGE  SIZE  DISTRIBUTION.
                    MOVING THROUGH  THE  SIZE FRACTIONS  COMPUTE THE
                    SELECTION FACTORS  FOR THE FLOWSTREAM  SIZE
                    DISTRIBUTION.
   DO 35 1=1,N35
   13 = 13+1
   N8=I5RG(IP)
   IF(N3.EQ.O)  GOTO  35
   DO 30 J=1,N3
   IB=I8+1
   K=I6RG(I5)
   IE=IB+1
   SI(K)=SI[K)+BRG(I3)*SF(I»
30 CONTINUE
35 CONTINUE

   STEP 9

   GOTO 50

   STEP 10
             BRANCH  TO STEP 11
             SET  THE  A^RAY OF SELECTION  FACTORS FOR THE  CASE
             WHERE  ALL  SELECTION FACTORS ARE EQUAL.
      CONTINUE
      IVAL = 3RX(5)
      DO i45  I = l,N
      SI(I)=VflL
      CONTINUE
                  FIGURE II-5-1.1.  (Continued)

                                 102

-------
U     STEP 11       COMPUTE THE PRODUCT AFTEk BREAKAGE.
C
   50 CONTINUE
      NS=NSIZF-1
      DO 61"! 1 = 1, NS
      00 60 J=itNG£AV
      DO 6GKK = 1 ,NCHA\
      STCRE=0. 0
      CO 55 L = 1,I
   55 CONTINUE
      PROD (I t J,K)=FFEO(It J,K)*(1.-SI(I» + STORE
   faO CONTINUE
      DO 70  J=1,NGRAV
      00 70  K=1,NCHAR
      STORE=0.0
      00 65  L=1»NS
      STORE=STOFE*FEhO (L,J,K)*3R(L»NSIZE)*SI(L)
   65 CONTINUE
      -PROD (NSIZE,J,
-------
                         5.2  Subroutine NOTPTH

          A calculation required primarily  by the screening unit operation
and used also by the rotary breaking  operation is of the proportion of
material of a certain size  that  will not pass through an opening of a
given size.  This calculation was described in Volume I in the part on the
screening unit operation.   Subroutine NOTPTH performs it.   Figure II-5-2.1
contains the listing and basic documentation.
                                    104

-------
t-
c
c
c
c
c
c
c
c
c
c
c
c
b
c
c
c
c
c
c
c
G
c
c
c
c
c
c
c
c
c
c
c
c
G
L.
c
c
c

c
c
c
c
SUBROUTINE NOTPTH(SIZE,PR,HOLE,AA,NSIZE)

TITLElPROPORTION  NOT  PASSING THROUGH HOLE)

SUBROUTINE NOTPTH  :0*purES  THE PROPORTION OF  MAThKlAL CLASSIFIED
BY SIZE IN:REMWNTS WHICH WILL NOT PASS THROUGH  A  HOLE OF A
SPECIFIED SIZE.
PARAMETER
SIZE (1 )
PR(NSIZE)
HOLE
AA
NSIZE
VARIABLE

I


FRAC
SMID
SNAX


C
DESCRIPTION

THIS REAL i-DIMENSIONAL,MONOTONE-DECREASING,  REAL

ARRAY DEFINES  THE  SIZE  INCREMENTS FOR THE  MATERIAL

TO 8E PASSED THROUGH.  THE I-TH CELL DEFINES  THE
UPPER BOUND FOR  THE  I-TH  INCREMENT, WHILE  THE I+1ST

CELL DEFINES THE  LOWER  EOUNO f-OR THE I-TH  INCREMENT.

                    REAL ARRAY RETURNS THE  PROPORTION

                    SIZE INCREMENT THAT WILL  NOT  PASS
THIS 1-DIMENSIONA^
OF THE MATERIAL  sv
THROUGH THE HOLE.
THIS REAL  VARIABLE
THIS »EAL  VARIABLE
                    CONTAINS THE SIZE OF THE  HOLE.
                    CONTAIN^ THE ADJUSTMENT FACTOR

USED IN THE COMPUTATION OF THE PROPORTION. IT  IS  A
FUNCTION OF THE  TYPE  OF UNIT AND HOLE SIZE.
THIS INTEGER  y/ARIABLE  OEFINEb THE NUMBER OF  SIZE

INCREMENTS.


DESCRIPTION

THIS TUMMY COUNTER  CONTROLS THE MOVEMENT THROUGH

THE SIZE INCREMENTS.
THIS ,\EAL VARIABLE  CONTAINS THE PROPORTION OF  THE
NATEPIAL IN A  GIVEN SIZE INCPEMENT WHICH IS  LARGER

THAN THE HOLE  SIZE.
THIS REAL VARIABLE  CONTAINS THE AVERAGE MATERIAL
SIZE RELATIVE  TO  THE  HOLE SIZE FOR A GIVEN SIZE

INCREMENT.
THIS REAL VARIABLE  CONTAINS THE PROPORTION OF  HAT-

ExIAL IN A GIVEN  SIZE  INCREMENT WHICH IS SMALLER
THAN THE HOLE  SIZE  WHICH WILL NOT PASS THROUGH.
THIS REAL CONTAINS  THE MAXIMUM OF THE CURRENT  SIZE

FRACTION.

THIS SEAL VARIABLE  IS  USED FOP TEMPORARY STORAGE.
DIMENSION SI7EC1) »°R (NSIZE)
STEP 1
INITIALIZE  AT  ONE  THE  DUMMY
THROUGH THE  SIZE  INCREMENTS
                             COUNTER  WHICH  MOVES
      CO 50 I=i,N3IZP
      STEP 2
              IF  THE  UPP>E^ BOUNu OF THE  CURRENT  SIZE INCREMENT
              DOEc,  MOT  EXCEED THE HOLE SIZE,  BRANCH TO STEP 6.
        FIGURE II-5-2.1.  LISTING FOR SUBROUTINE NOTPTH
                                 105

-------
c
      IF(SIZE(I)-HOLE)25,25,10
C
C     STEP 3        IF  THE  LOWER BOUND  OF  THE CURRENT SIZE  INCREMENT IS
G                   LESS THAN THE HOLE  S±ZE, BRANCH TO  STEP 5.
G
   10 IF (SIZEU+1>-HOLE>20,15, 15
C
L     STEP k        ALL  MATERIAL IN THE  SURRENT INCREMENT IS LARGER THAN
G                   THE  HOLE SIZE. NONE  WILL PASS THROUGH THE HOLE. SET
c                   THE  PPOPORTION NOT  PASSING THROUGH  AT ONE AND BRANCH
G                   TO  STE° 9.
C
   15 PR (I) = 1. 0
      GO TO 50
C
G     STEP 5        THE  HOuE SIZE FALLS  WITHIN THE CURRENT  SIZE INCRE-
C                   MENT. COMPUTE THE PROPORTION OF MATEFilAL THAT IS
C                   LARGER  THAN THE HOLE SIZE AND BRANCH TO STEP 7. NOTE
C                   THAT THIS COMPUTATION  ASSUMES THAT  THE  MATERIAL IS
C                   DISTRIBUTED RECTANGULARLY BY SIZE WITHIN THE iNCRE-
C                   MENT.
C
   20 FRAC=(SIZE(I)-HOLE)/(SIZE(I)-SIZE(1*1))
      SMtX=HOLE
      GO TO 30
C
C     STEP 6        ALL  THE MATERIAL IN  THE CURRENT INCREMENT IS SMALLER
C                   THAN THE HOLE SIZE.  SET THF. PPOPORTION  OF THE MATER-
C                   IAL  THAT IS LARGER  THAN THE HOi_E SIZE TO ZERO.
C
   25 FRAC=0.0
      SMAX=SIZE(I)
C
C     STEP 7        COMPUTE THE PROPORTION OF THE SMALLER MATERIAL WHICH
G                   WILL NOT PAoS THROUGH  THE HOLE.
C
   3Q SMin=(SMAX+SIZE(1+1))/2.0
      C=1./EXP(AA*(1.0-£MIQ/HOLE))

C     STEP 6        ThF  OVERALL *ATIO NOT  PASSING THROUGH EQUALS THE
C                   PROPO-TION LARGER PLUS THE PROPORTION SMALLER TIMES
L                   THE  PROPORTION OP THE  SMALLER MATERIAL  NOT PASSING
G                   TH40U3H.
G
      PR(I)=FRAC-Kl.n-FRAC)*r
C
c     3TEP 9        INCREMENT THE DUMMY  COUNTER WHICH MOVES THROUGH THE
<-                   SIZt INCREMENTS BY  ONE, AND IF ALL  HAVE NOT BEEN
             FIGURE II-5-2.1.  (Continued)

                                 106

-------
G                    PCQCESbEQ LOOP  3ACK TO STEP  2.
C
   50  CONTINUE
C
C      STEP 10       END LOCAL PROCESSING.
C
       RETURN
       END
              FIGURE  II-5-2.1.   (Continued)
                                   107

-------
                         5.3  Subroutine SCREEN

          Subroutine SCREEN performs  the calculations  required to simulate
the screening unit operation.  Figure II-5-3.1  contains  the listing and
basic documentation for subroutine  SCREEN.
                                    108

-------
U
1-^
u
C
G
C
C
C
C
C
C
I
C
C
0
I,
C
C
G
C
C
C
C
C
b
C
C
L-
C
C
C
C
C
C
C
L
C
C
r
u
C
G
C
C
C
SUDROUTI\1E SCCEENt-EECUUPPE*,LOWE*,EQUIP,SIZE,FU,FL»NSIZEtNGRAV
                  ,NCHAR,01)

TITLElSIHUuATE  SCREENING UNIT OPERATION)

SUBROUTINE SCREEN  is  USED TO CONTROL  THE  SIMULATION OF THE SCREEN-
ING UNIT OPERATION.
                    PTION
                    -DIMENSIONAL REAL  ARRAY  CONTAINS THE DETAILED
                    TERISTICS OF THE FEED  TO THE SCREEN.
                    -DIMENSIONAL REAL  ARRAY  RETURNS THE DETAILED
                    PTION Of THE UPPER  OUTPUT FLOW FROM
                    cAi_  3-DIMENSIONAL  ARRAY  RETURNS THE
                    PTION OF THE LOWER  OUTPUT FLOW FROM
                    NTEGEC 1-uIMENSIONAL  ARRAY CONTAINS
PARAMETER
FEED
UPPER

LOWER

EQUIP

SIZE

FU

FL

NSIZE

NGRAV

NCHAR

Di

OFSCRI
THIS 7
THIS 1
uESCRI
THIS T,
DESCRI
THIS I
HE NT C
THIS i
QISTFj.
THIS R
IN THE
THIS R
THE LO
THIS i
FRACTI
THIS I
GRAi/IT
THIS I
CHARAC
THIS R
DECISI
                                            THE SCREEN.
                                            DETAILED
                                            THE SCREEN.
                                            THE EQUIP-
THE S
                    ONTKOL INFORMATION  FOR  THE  SCREEN.
                    -DIMENSIONAL REAL ARRAY CONTAINS THE SIZE FRAC-
                    oUTION.
                    EAL  VARIABLE RETURNS  THE  AMOUNT OF MATERIAL
                     UPPER OUTPUT FLOW.
                    EAL  VHKIA3LE RETURNS  THE  AMOUNT OF MATERIAL  IN
                    WER  OUTPUT FLOW.
                    NTEGEK VARIABLE CONTAINS  THE NUMBER OF SIZE
                    ONS  CLASSIFYING THE FLOWSTREAMS.
                    NTEGER VAPIA3LE CONTAIN^  THE NUMBER OF SPECIFIC
                    Y FRACTIONS uLASSIFYING THE FLOWSTREAMS.
                    NTEGER VARIABLE CONTAINS  ONE PLUS THE NUMBER
                    TERISTICS DEFINED FOR THE FLOWSTREAMS.
                    EAL  V4RIA3LE CONTAINS THE VALUE OF THE FIRST
                    ON VARIABLE FOR THE UNIT. IN THIS CASE IT IS
                    REENING  MESH SIZE.
EXTERNALS     I NTS,NOTPTH,OSTRB,SDSIZE
COMMON        VARIABLES USED
/3LK1/        SYLD,3TURFC,SF,_T,SINK,ISCC,ISRF,ISFD,bUMRY
/WORK/        IPTU
//            ws

TRIABLE      DESCRIPTION
ICURVE        THIS  INTEGER VARIABLE  CONTAINS THE BASE ADDRESS  IN
              WOKKING STORAGE OF THE  CURVE  CONTROL BLOCK DEFINING
              THE  SCREENING DISTRIBUTION.
INlR          TrsIS  ONE-CIMENSIONAu INTEGER  AR^AY GIVES THE
              INCREMENTS OF THE DISTRIBUTION CURVE DIMENSIONS.
IX            THIS  INTEGEK VARIABLE  CONTAINS THE ADDRESS IN  WORKING
              STORAGE ON THE INDEPENDENT  VARUFS ASSOCIATED WITH  THE
              SCREENING DISTRIBUTION.
        FIGURE II-5-3.1.  LISTING FOR SUBROUTINE SCREEN

                                 109

-------
G     IY            THIS INTEGER VARIABLE  CONTAINS THE  ADDRESS IN WORKING
C                   STORAGE OF THE • DEPENDENT VALUES OF  THE  SCREENING
C                   DISTRIBUTION.
G     AA            THIS RFAL VARIABLE  CONTAINS THE EMPIRICAL SCREENING
G                   CONSTANT FROM THE DISTRIBUTION.
G     S             THIS DUMMY INTEGER  VARIABLE IS USED  TO  CONTROL THE
C                   MOVEMENT THROUGH  SIZE  FRACTIONS.
G     NS            THIS INTEGER VARIABLE  CONTAINS THE  ROW  NUMBER IN THE
C                   VARIOUS SUMMARY ARRAYS OF THE VALUES FOR THE COMPO-
C                   SITE.
C     IS*3, !SrB    THESE DUMMY INTEGER VARIABLES ARE USED  FOR
C                   TEMPORARY STORAGE.
C
      DIMENSION FEEO(N5IZE,NGRAV,NCHAR) , UPPER t NSI ZE , NGRAV, NC HAR )
     1          ,LOWER(NSIZE,NGRAV,Nt-HAR) , EQUIP U) , SIZE (NSIZE ) ,1 NCR ( 3)
      COMMON /WORK/NEXT, LAST, I CURi/E, I UNIT, I DA TA,IT1TLE, ICHARt IFL W, I ASH,
     1 ISUL.IBTU
      COMNON/6LK1/ISFO,ISCS,ISI?F,I5>MX,SYLD{2M ,TYLD<2«») ,£FFIC(2
-------
C
C     STEP 6        USING SUBROUTINE   S  D  S I Z E  COMPUTE THE SUMMARY
C                   VALUES FOR THF  FLOWSTREAMS.
C
      GALL SOSIZE(UPPER,SUMRY (1,1 SCO , NS1 Z E ,NGRA V ,NCHA R, FU)
      CAt.L SCSIZE UOWFR,SUMRY (1, ISRFI , NSIZE ,N6RAV, NCHAR, FD
C
C     S1FP 7        COMPUTE THE PERCENT  OF MATERIAL  IN  THE FEED REPORTING
C                   TO  THE UNDERFLOW.
C
      DO !»Q S = ltNSIZE
      SYLD (S) = (1.0-SYLD (Sn*10Q.O
      ?TUREC (S) = 5YLD(S)
   kO CONTINUE
C
C     STFP 8        COMPUTE THE COMPOSITE  VALUES OF  PERCENT TO UNDERFLOW
C                   AND BTU TO UNDERFLOW.
C
      IbFB=ISFD+IBTU-l
      6TUREC (NS)=iUMRY (N3 , ISRB) *FL/SUMRY (NS , ISFB > MOO . O/ i FU*FL)
C
C     SVFP 9        COMPUTE  THE VALUES  FOR OVERSIZE  IN  UNOEFLOW AND
C                   UNOERSIZE IN OVERFLOW.
C
      CO t*5  S = i,NS
      SFi_T
-------
                           5.4  Subroutine DCWASH

          As discussed several times previously, the most difficult aspect
of the washing and two-stage washing unit operations is the calculation of
the distribution curves themselves.   Once these curves are given, the re-
maining calculations are simple.   The calculation of the distribution curve
is complicated by the fact that the  curves from which they are calculated
do not necessarily have the same  size distribution as the flowstream being
washed.  Subroutine DCWASH calculates the distribution.  The key parameter
passed to it is CURVE which contains the curve set control block for the
curves upon which the calculation is to be based.   The reader is referred to
Chapter 2 of this volume for the  storage conventions used.  Figure II-5-4.1
contains the listing and basic documentation  for subroutine DCWASH.
                                       112

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
L
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
SUBROUTINE OCWASH(DS,SIZF,GRAV,NS1ZE,NGRAV,CUKVE,0V)


TITLFtCCMPUTE  WASHER D ± SltU GUTION 3URi/E)


SUBROUTINE DCWASH  IS THE KEY ROUTINE  USED  BY  THE OPERATIONS  OF

HASHING AND TWO-STAGE WASHING. IT IS  USED  TO  COMPUTE  THE DISTRI-

BUTION CJvfE FOR  THE  UNIT GI ,/EN THE  \/ALUE  OF SPECIFIC  GRAVITY  OF

SEPARATION.
EXTERNALS


COMMON
oc


SIZE
NSIZE


NGRAv


CURVE




0V
VARIABLE
BRG, IBRG
S


G


NPOINT


ISC


NSC


NBRG
YINTR3, INTS,  BRSIZE


i/ARIA3LiS USED
WS

DESCRIPTION
THIS 2-CIMENSIONAL,  REA!
SUTION CURVE  VALUES  FOR
THIS PEAL I-OIMENSIONAL
FRACTION DEFINITION  FOR
. ARRAY  RETURNS THE DISTSI-

THE UNIT.

ARRAY CONTAIN^ THE SIZE

THE FLOWSTREAMS.
THIS 3EML,  i-DIMENSIDNAL ARRAY CONTAINS  THE  SPECIFIC
GRAVITY FRACTION DEFINITION FOR THE  FLOWSTREAHS.

THIS INTEGER  VAPAABuE SPECIFIES THE  NUMBER OF SIZE

FRACTIONS CLASSIFYING THE FLOWSTREAMS.

THIS INTEGER  »/ARlAB».E DEFINES THE NUMBER OF  SPECIFIC
GRAVITY FRACTIONS  DEFINING THE FLOWSTREAMS.

THIS 1-QIMENS*ONAL i^NTEGEF ARKAY CONTAINS  THE CURVE

CONTROL INFORMATION FOR THE CURVES FROM  WHICH THE

DISTRIBUTION  CURVE IS TO BE COMPUTED.
THIS REAL VARIABLE CONTAINS THE VALUE OF THE  DECISION

VARIABLE FOR  THE UNIT.  THIS IS SPECIFIC  GRAVITY OF
SEPARATION  IN  THIS CASE.


DESCRIPTION
THIS TYPEuESS,  1-OIMENSIONAL ARRAY IS USED TO CONTAIN

THE BRIDGE  SPECIFICATION ARRAY FOR MOVING  FROM THE

CURVE SIZE  DISTRIBUTION TO THE FLOWSTREAN  DISTRI-

BUTION.
THIS DUMMY  INTEGER VARIABLE IS USED  TO CONTROL THE

MOVEMENT THKOUGH SIZE FRACTIONS.
THIS DUMMY  INTEGER VARIABLE IS USED  TO CONTROL THE

MOVEMENT THROUGH THE SPECIFIC GRAVITY FRACTIONS,

THIS INTEGER  VARIABLE IS USED TO CONTAIN THE  NUMBER

OF POINTS IN  THE CURVE.

THIS INTEGER  VARIABLE CONTAINS THE ADDRESS IN WORK-

ING STORAGE OF  THE CURVE SIZE FRACTION DEFINITION.

THIS INTEGER  VARIABLE CONTAINS THE NUMBER  OF  SIZE

FML^IONS OVER  WHICH THE CUKVE IS DEFINED.

THIS INTEGER  VARIABLE CONTAINS THt NUMBER  OF  CELLS

USET IN THE BRIDGE' SPECIFICATION ARRAY.
        FIGURE II-5-4.1.  LISTING FOR SUBROUTINE DCWASH


                                 113

-------
C                   FNT VARIABLE FOR LOOK-UP  IN  THE CURVE.
C      B             THIS DUMMY INTEGER VARIABLE  IS USED TO CONTROL THE
C                   MO/EMENT THROUGH THE BRIDGE  SPECIFICATION ARRAY.
C      IX            THIS INTEGER VARIABLE CONTAINS THE ADDRESS IN WORKING
C                   STORAGE OF THE INDEPENDENT CURVE POINTS.
C      IY            THIS INTEGER VARIABLE CONTAINS THE ADDRESS IN WORKING
C                   SIORAGE OF THE INDEPENDENT CURVE POINTS.
G      SC            THIS DUMMV INTEGER VARIABLE  IS USED TO CONTROL THE
C                   MOVEMENT THROUGH THE CURVE SIZE FRACTIONS.
C      NS            THIS INTEGER VARIABLE CONTAINS THE NUMBER OF FLOW-
C                   STREAM SIZE FRACTIONS TO  WHICH A GIVEN CURVE SIZE
C                   FRACTION CONTRIBUTES.
C      YVAL          THIS REAL VARIABLE CONTAINS  THE INDEPENDENT VALUE
C                   COMPUTED FROM THE CURVE VIA  LOOK-UP-
C      SB            THIS DUMMY INTEGER VARIABLE  IS USED TO CONTROL THE
C                   MOVEMENT THROUGH THE SIZE FRACTIONS TO WHICH A
C                   GIVEN CURVE FRACTION CONTRIBUTES.
C      INW           THIS INTEGER VARIABLE CONTAINS THE ADDRESS IN WORKING
C                   STORAGE OF THE COUNT 2ELLS ASSOCITED WITH EACH SIZE
C                   FRACTION FOR A SET OF EXPLICIT PERFORMANCE CURVES.
G      LW            THIS INTEGER VARIABLE CONTAINS THE ENDING ADDRESS
C                   OF THE VALUES ASSOCIATED  WITH  EACH OF THE ACTUAL PER-
C                   FORMANCE CURVES
C      XW,  NW        THIS TYPELESS VARIABLE CONTAINS THE NUMBER OF CURVES
C                   DEFINEJ FOR THE CURRENT CURVE  SIZE FRACTION.
C      Lfl            THIS INTEGER VARIABLE CONTAINS THE START IN THE
C                   BRIDGE SPECIFICATION ARRAY OF  THE INFORMATION FOR
C                   THE CURRENT CURVE SIZE FRACTION.
C      IWASH         THIo INTEGER VARIABLE CONTAINS THE ADDRESS IN
C                   WORKING STORAGE OF THE VALUE ASSOCIATED WITH THE
C                   FIRST CURVE FROM WHIuH THE ACTUAL CURVE IS TO BE
C                   COMPUTED.
L      i-WASH         THIS INTEGER VARIABLE CONTAINS THE ADDRESS IN WORKING
C                   STORAGE OF THE VALUE ASSOCIATED WITH THE LAST CURVE
w                   UPON WHICH THE ACTUAL CURVE  IS TO BE BASED.
C      IXA           THIS INTEGER VARIABLE CONTAINS THE ADDRESS IN
C                   WORKING STORAGE OF THE INDEPENDENT POINTS ASSOCIATED
C                   WI^H THE FIRST CURVE JPON WHICH THE ACTUAL CURVE IS
C                   TO BE BASED.
C      LXA           THIS INTEGER VARIABLE CONTAINS THE ADDRESS IN
C                   WOKKING^STOkAGE OF THE INDEPENDENT POINTS ASSOCIATED
C                   WITH THE LAST CURVE UPON  WHICH THE ACTUAL CURVE IS
C                   TO BE 3ASED.
L      IYA           THIS INTEGER VARIABLE CONTAINS THE ADDRESS IN
C                   WDRKINii STORAGE OF THE DEPENDENT POINTS ASSOCIATED
C                   WITH THE FIRST CURVE UPON WHICH THE ACTUAL CURVE IS
C                   TO BE 3ASLO.
-G~-    LYA           THIS INTEGER VARIABLE CONTAINS THE ADDRESS IN
C                   WOKKING STORAGE OF THE DEPENDENT POINTS ASSOCIATED
                     FIGURE II-5-4.1.   (Continued)

                                 114

-------
C                  WITH  THF  LAST CUR./E UPON WHICH  THE ACTUAL CURVE  IS
C                  TO  BE  3ASFO.
C     RATIO        THIS  PEAL VARIABLE CONTAINS  THE RATIO USED FOR ALLOC-
G                  TING  THE  VALUES COMPUTED FROM  TWO ACTUAL CURVES.
C     YHIN         THIS  PFAL VARIABLE CONTAINS  THE LOOK-UP VALUE FROM THI
C                  LAST  wDTUAL CURVE.
C     XVAL         THIS  KEAL VARIABLE CONTAINS  THE ARGUMENT TO THE
C                  DISTRIBUTION  CURVES.
C     IW           THIS  INTEGER  VARIABLE CONTAINS  THE STARTING ADDRESS
C                  OF  THE  VALUES ASSOCIATED WITH  EACH OF THE ACTUAL
C                  PERFORMANCE CURVES.
C
      DIMENSION DC (2
-------
C     STEP 5        INITIALIZE  AT ONE THE DUMMY COUNTER USED TO
C                   CONTROL  THE MOVEMENT THROUGH THE  SPECIFIC GRAVITY
C                   FRACTIONS.
C
      DO 25 G=1,NG5?AV
C
C     STEP 6        COMPUTE  THE VALUE OF OREOUCEO  SPECIFIC GRAVITY FOR
C                   LOOK-UP  IN  THE OGENEftALIZED DISTRIBUTION CURVES.
C
      XVAL=GRAV (G»/OV
C
C     STEP 7        INITIALIZE  THE VARIABLES NEEDED TO MOVE THROUGH
C                   THE  CURVE  SIZE DISTRIBUTION.
C
      6=0
      IX=CURVECO-NPOINT
      IY=CURVE<5)-NPOINT
C
C     STEP 8        MOVING THROUGH THE SIZE FRACTIONS COMPUTE THE
C                   DISTRIBUTION CURVE VALUES FOR THE CURRENT SPECIFIC
C                   GRAVITY  FRACTION. SUBROUTINE  Y I N T  R P  IS USED
C                   TO  PERFORM  THE ACTUAL LOOK-UP.
C
      00 20 SC=1,NSC
      B=B*1
       IX=IX*NPOINT
       IY=IY*NPOINT
       IF(NS.EQ.Q»GO  TO  20
       YVAL = YINTRP(WSfIX),WSUY) , X VAL ,NPOINT)
       DO 15 SB = i,NS
       B=B + 1
       S=IBRG(3)
       B=B+1
       OC (S,G) = DC(S,&)*YVAL*BRG(B1
   15  CONTINUE
   20  CONTINUE
C
C      STEP j       INCREMENT  BY  ONE THE DUMMY COUNTER  CONTROLING THE
C                  MOVEMENT  THROUGH THE SPECIFIC GRAVITY  FRACTIONS, AND
C                  IF MLL  HAVE NOT BEEN PROCESSED* LOOP BACK TO STEP 6.
C
   25  CONTINUE
C
G      STEP 10      END  LOCAL  PROCESSING.
C
       50 TO 999
C
C      STEP 11      THE  DISTRIBUTION CURVE IS TO BE COMPUTED FROM

                     FIGURE II-5-4.1.   (Continued)

                                116

-------
C                   EXPLICIT PERFORMANCE  CURVES. BEGIN  BY  INITIALIZING
C                   THE VARIABLES  NEEDED  TO MOVE THROUGH  THE  CURVES.
C
   30 B=fl
      lX = CURi/E ( k)
      IY=CURVE(5)
C
C     STEP 12       INITIALIZE AT  ONE  THE  DUMMY COUNTER  USED TO CONTROL
C                   THE MOVEMENT THROUGH  THE CURVF SIZE  FRACTIONS.
C
      DO 60 SC=1,NSC
C
C     STEP 13       INITIALIZE THE  VARIABLES NEEDED TO  MOVE  THROUGH THE
C                   CURVES SUPPLIED  FOix  THE CURRENT SIZE FRACTION.
C
      IW = LW«-1
      XW=WS(INW)
      LW=LW+NW
C
C     STEP I**       OBTAIN THE  NUMBER  OF SIZE FRACTIONS  TO WHICH THE
C                   NEXT CURVE  SIZE  CONTRIBUTES, AND  IF  IT IS ZERO,
C                   BRANCH TO STEP 17.
C
      8=e*i
      NS=IBRG
-------
G                   CURVE SIZE  FRACTION. SUBROUTINE  I N  T  S   IS USED TO
L,                   PERFORM THE  ACTUAL LOOK-UPS.
C
   55 IXA=IXf (IWASH-iW)*NPOINT
      IYA=I¥+IXA-!X
      LXA = IXA-NPOINT
      LYA=IYA-NPOINT
      00 713  G=i,N3RAV
      CALL I NTS (MS (IXA) *Ha (I Y A ) , GR/W 
-------
                          5.5  Subroutine WASH

          The unit operation of washing is implemented in subroutine WASH.
Given subroutine DCWASH,  this routine is straightforward.   Figure II-5-5.1
contains  the listing and  basic documentation for subroutine WASH.
                                     119

-------
c
c
c
c
u
c
c
c
c
c
c
c
c
c
c
c
c
c
L
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
L.
0
c
SUBROUTINE WASH I FEED,CLEAN,REFUSE,EQUIP,SIZE,GRAV,01STR6,NSIZE
              ,NGRAV,NCHAR,SGSP>


TITLECSIMULATE THE WASHING  UNIT OPERATION)


SUBROUTINE W*SH IS THE  MAIN CONTROL ROUTINE  USED TO SIMULATE THE

WASHING JNIT OPERATION.
PARAMETER
FEED


CLEAN
REFUSE


EQUIP


SIZE


GRAV


DISTRB


NSIZE


NGRAV


NCHAR


SGSP





COMMON




EXTERNALS


VAK.I03LE

ICURVE




INCR
DESCRIPTION
THIS 3-OIMENSIONAL,  REAL ARRAY CONTAINS  THE VALUES

FOR THE FEED STREAM  INTO THE WASHING  DEVICE,
THIS 3-DIMENSIONAL,  REAL ARRAY RETURNS THE VALUES
FOR THE CLEAN  OUTPUT FLOW PRODUCED  BY  THE WASHING

UNIT.
THIS 3-OIMENSIONAL,  REAL ARRAY RETURNS THE VALUES
FOR THE REFUSE  STREAM PRODUCED BY THE  WASHING UNIT.

THIS i-DIMENSIONAL  INTEGER ARRAY CONTAINS THE
EQUIPMENT TYPE  CONTROL INFORMATION  FOR THE UNIT.
THIS 1-DIMENSIONAL,  REAL ARRAY CONTAINS  THE SIZE
FRACTION DEFINITION  FOR THE FLOWSTREAMS.

THIS 1-DIMENSIONAL,  REAL ARRAY CONTAINS  THE SPECIFIC
GRAVITY FRACTION DEFINITION FOR THE FLOWSTREAMS.

THIS 2-DIMENSIONAL,  REAL ARRAY IS USED TO STORE

THE DISTRIBUTION CURl/E COMPUTED FOR THE  UNIT.
THIS INTEGER VARIABLE CONTAINS THE  NUMBER OF  SIZE
FRACTIONS DEFINING  THE FLOWSTREAMS.

THIS INTEGER VARIABLE CONTAINS THE  NUMBER OF
SPECIFIC GRAVITY FRACTIONS DEFINING THE  FLOWSTREAMS.

THIS INTEGER VARIABLE CONTAINS ONE  PLUS  THE NUMBER

OF CHARACTERISTICS  DEFINED FOR THE  FLOWSTREAMS.
THIS =?EAL VARIABLE  CONTAINS THE VALUE  FOR SPECIFIC

GRAVITY OF SEPARATION TO BE USED TO COMPUTE THE

DISTRIBUTION CURVE  FOR THE UNIT.
              VARIABLES
              WS
          USED
              DCWASH,  OSTRB


              DESCRIPTION

              THIS  INTEGER VARIABLE CONTAINS  THE ADDRESS IN

              WORKING  STORAGE OF THE CURVE  iET  DEFINING THE
              DISTRIBUTION CURVE FOR THE UNIT.

              THIS  1-DIMENSIONAL INTEGER ARRAY  IS USED TO SPECIFY

              THE  INCREMENTS OF THF DISTRIBUTION CURVE DIMENSIONS.
      DIMENSION  FEEDCNSIZE,NGRAV,NCHAR),CLEAN(NSIZE,NGRAV,NCHAR)
     1          ,RtFUSE (K'SIZE,NGRAV,NCHAR) , EQUIP (M , SIZE (NSIZE)
     2          ,&KAtMNG*AV) ,DIST9B(2«»,20)
         FIGURE II-5-5.1.  LISTING FOR SUBROUTINE WASH


                                 120

-------
      DIMENSION INCC(3)
      COMMON W5 (6000)
      INTEGE^ EQUIP, WS
      CATA INC" (1) , INCH (?),INCR(3)/2tt,20,0/
C
L,     STEP 1        OBTAIN THE AGDP^SS  IN  WORKING STORAGE  OF THE CURVE
u                   SET  DEFINING THE  DISTRIBUTION CURVE  FROM THE FOURTH
L                   GEL,-  OF THE EQUIPMENT  TYPE CONTROL  VECTOR.
C
C
C     STEP 2        UiING SUBROUTINE   D  C  W A S H  COMPUTE THE ACTUAL
C                   DISTRIBUTION CU=>VE  FD?  THE UNIT.
C
      CALL 3CWASu(uISTRE,3IZE,GRAV,NSlZE,NGRAV,WS (ICURVE),SGSP)
C
C-     STEP 3        USING SUBROUTINE   D  S  T P P  COMPUTE  THE  VALUES FOR
u                   THE  CLEAN ANO  REFUSE OUTPUT Ft.OWS  BASED ON THE
C                   DISTRIBUTION CURVE.
C
           DSTxa(FEED,CLEAN,REFUbE,DISTR3,INCOfNSlZE,NbRAV,NCHAR)
C     STEP k        CND  LOCAL PROCESSING.
C
      RETURN
      END
             FIGURE II-5-5.1.  (Continued)
                                 121

-------
                           5.6  Subroutine WASH2

          Two-stage washing is  implemented  via subroutine WASH2.   As with
WASH, given the operation of DCWASH the calculations in WASH2 are simple.
Figure II-5-6.1 gives the listing and basic documentation for subroutine
WASH2.
                                    122

-------
SUBROUTINE
           W ASH 2 ( FE ED ,2 LEA M , MI DD^E , REFUSc. , EQUI P, 51 ZE , GR AV , D I STRB
                tN5IZF»NGRAV,NCHAR,SGSP)
TITLE (SIMULATE THE 2-STAGE WASHING UNIT OPERATION)


SUoKOUTINt WASH? j.^ THE MAIN CONTROL ROUTINE USED TO SIMULATE  THE
        WASHING OPERATION.
U
C
C
C
c
w
c
c
c
c
c
c
c
c
c
c
w
c
c
c
c
c
c
c
c
c
c
c
c
c
u
c
c
c
c
0
c
c
c
c
c
c
c
Z-blAbL W

PARAMETE\
FEED

CLEAN


MIDDLE

DEFUSE

EQUIP

SIZE

GRAV

OISTR8

NSIZE

NGRAV

NCHAR

SGS!"



COMMON
//

tATERNALi

VARIABLE
ICURVE


S

G

             THIS 3-OIMENSIONAL, REAL ARRAY CONTAINS THE VALUES
             FOR THE FEEj STPEAM INTO THE WASHING DEVICE.
             TH.Lo ^-DIMENSIONAL, REAL ARPAY RETURNS THE VALUES
             FOR THE CLEAN OUTPUT Fi_OW PRODUCED SY THE WASHING
             UNIT.
             THIS ^-DIMENSIONAL, REAL ARRAY RETURNS THE VALUES
             FOR THE MIDDLINGS STREAM PRODUCED BY THE UNIT.
             THIS 3-DiMENSIONAL, REAL ARRAY RETURNS THE VALUES
             FOR THE REFUSE STPEAM PRODUCED BY THE WASHING UNIT,
             THIS 1-DIMENSIONAL INTEGER ARPAY CONTAINS THE
             EQUIPMENT TYPE CONTROL INFORMATION FOK THE UNIT.
             THIS 1-DIMENSiONAL, REAL ARRAY CONTAINS THE SIZE
             FRACTION DEFINITION FOR THE FLOWSTREAMS.
             THIS 1-DIMENSIONAL, REAL ARRAY CONTAINS THE SPECIFIC
             GRAVITY FRACTION DEFINITION FOR THE FLOWSTREAMS.
             THIS 2-DIMENSIONAL, REAL ARRAY IS USED TO STORE
             THE DISTRIBUTION CURtfE COMPUTED FOR THE UNIT.
             THIS INTEGER VARIABLE CONTAINS THE NUMBER OF SIZE
             FRACTIONS DEFINING THE FLOWSTREAMS.
             THIS INITEGEP VARIABLE CONTAINi THE NUMBER OF
             SPECIFIC GRAVITY FRACTIONS DEFINING THE FLOWSTREAMS.
             THI^ INTEGER VARIABLE CONTAINS ONE PLUS THE NUMBER
             OF CHARACTERISTICS DEFINED FOR THE FLOWSTREAMS.
             THIS REAL VARIABLE CONTAINS THE VALUE FOR SPECIFIC
             GRAVITY OF SEPARATION TO BE USED TO COMPUTE THE
             DISTRIBUTION CURVE FOR THF UNIT.
                    .ES USED
             Wi
             DCWASH, DSTRB

             DESCRIPTION
             THIS INTEGE? VARIABLE CONTAINS THE ADDRESS IN
             WORKING STORAGE OF THE CURVE SET DEFINING THE
             DISTRIBUTION CU*.VE FOR THE UNIT.
             THIS DUMMY, INTEGER VARIABLE iS USED  TO CONTROL
             MOVEMENT THROUGH THE SIZE FRACTIONS.
             THIS DUMMY, INTEGER VARIABLE IS USED  TO CONTROL
             MOVEMENT THROUGH THE SPECIFIC GRAVITY FRACTIONS.
                                                              THE
                                                              THE
   FIGURE  II-5-6.1.  LISTING FOR SUBROUTINE WASH2


                          123

-------
L     c             THIS  DUMMY, INTEGE*  VARIABLE IS USED  TO  CONTROL THE
C                   MOVEHFNT THROUGH THE  FLOW CHARACTERISTICS.
C     INCR          THIS  1-DIMENSIONAL INTEGER ARKAY IS USED TO SPECIFY
C                   THE  INCREMENTS IN THE  DISTRIBUTION CURVE DIMENSIONS.
C
      DIMENSION  FEED (NSIZE, NGRAV, NCHAR) , CL EAN ( NSIZE , NGRAV, NCHAR)
     1          , MIDDLE (NSIZE, NGRAV, NCHAR) , REFUSE ( NS I ZE , NGRAV , NCHAR)
     1          ,EQUIPU)» SIZE (NSIZE) , GRAV (NGRAV) , OISTRB < ?tt, 2 0 )
      DIMENSION  INCR(3)
      COtiMON WSlf>000)
      INTEGER  S ,G,C, EQUIP, WS
      REAL MIDDLE
      DATA INC?(1> ,INCR(2),INCR(3)/2«»,20,0/
C
C     STEP 1        OBTAIN THE ADDRESS IN  WORKING STORAGE  OF THE  CURVE
C                   "5ET  DEFINING THE MIDDLINGS DISTRIBUTION  CURVE  FROM
C                   THE  FOURTH CELL OF THE  EQUIPMENT TYPE  CONTROL  VECTOR,
C
C
C     STEP  2        USING SUBROUTINE  D  C  W  A S H  COMPUTE  THE  DISTRI-
C                   BUTION 3UFVE FOR THE MIDDLINGS.
C
      CALL  DCWASH(DI;>TfcB,SIZE,GRAV,NSIZE,NGRAV,WS ( ICURVE) ,SGSP>
C
C     STEP  3        USING SUBROUTINE  0  S  T  R 8  COMPUTE  THE  VALUES  FOR
C                   THE  MIDDLINGS AND REFUSE OUTPUT FcOWS
C
      CALL  OSTR 6(FEED,MIDDLE,R£F USE, OIST R B, INCRt NSI Z£, NGRAV, NCHAR)
C
G     STEP  k        COMPUTE THE ADDRESS  IN  WORKING STORAGE  OF THE CURVE
C                   SET  DEFINING THE DISTRIBUTION CURVE FOR THE CLEAN
C                   OUTPUT FLOW.
C
      ICURVE=13URVE-6
C
C     STEP  5        U^ING SUBROUTINE  D  C  W  A S H  CALCULATE  THE  DISTRI
C                   BUTION 3URVE FOR THE CLEAN OUTPUT FLOW.
C
      CALL  OCWASH(DISTR8,SIZE,r,PAV,NSIZE,NGRAV,WS (ICURVF ) , SGSP)
C
C     STEP  6        MOVING THROUGH THE SIZE  AND SPECIFIC  GRAVITY  FRAC-
C                   TIONS COMPUTE THL VALUES FOR THE Ci-EAN  AND  REFUSE
C                   OUTPUT FLTWb.
C
      CO 30 S=l, NSIZE
      00 30 G=1,NG.*'AV
      DO ^n C=I,MCHAP
      rLEAN(i,3,C) =FEFH (5,G,C) *DISTRP. (S,3)
                      FIGURE II- 5-6.1.   (Continued)

                                 124

-------
   IF (REFUSE =MIOO.E (S,G,C> *REFUoE (5 »G,C)
   REFUSE(S,G,3)=0 .0
30 CONTINUE
   fr.ETLRN
   END
           FIGURE  II-5-6.1.   (Continued)
                                125

-------
                          5.7  Subroutine FROTH

          The froth flotation unit operation is implemented via subroutine
FROTH.   Figure II-5-7.1 contains  the listing for that routine.
                                    126

-------
c
c
c
G
L
C
o
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
0
G
c
c
c
c
c
L
c
c
c
c
c
c
c
c
G
C
c
c
      SUBROUTINE FROTH(FEED,CCtREF,SIZE,GRA V,GBOUND,NSIZE,NGRAV,NCHAR
     1                 ,E3UIP>


      TiTLt(SIMULATE  FROTH  FLOTATION UNIT OPERATION)
      SUBROUTINE FROTH  iS  USEO TO CONTh.OL
      FLOTATION UNIT  OPERATION.
                                      THE  SIMULATION OF THE  FROTH
PArvAMETER    DESCRIPTION
FrED         THIS  ^-DIMENSIONAL KEAL  ARRAY  CONTAINS THE DISTRIBU-
             TION  AND  CHARACTERISTICS  OF  THE FEED TO THE UNIT.
CC           THIS  T-DIMENSIQNAi. REAL  ARRAY  RETURNS THE DISTRIBU-
             TION  AND  CHARACTERISTICS  OF  THE CLEAN OUTPUT FLOW
             FROM  THE  UNIT.

REF          THIS  3-DIMENSIONAL RECL  ARRAY  RETURNS THE DISTRIBU-
             TION  AND  CHARACTERISTICS  OF  THE REFUSE OUTPUT FLOW
             FROM  THE  UNIT.

SIZE         THIS  1-OIMENSIONAL REAL  ARRAY  DEFINES THE FLOWSTREAM
             SIZE  DISTRIBUTION.
GRAV         THIS  REAL 1-01MENSIONAL  ARRAY  CONTAINS THE HIDPOINTS
             OF  THF  SPECIFIC GRAVITY  FRACTIONS.
GBOUN3       THIS  RcftL 1~DIMENSIONftL  ARRAY  CONTAINS THE SPECIFIC
             GRAVITY DISTRIBUTION FOR  THE FLOWSTREAMS,
NSIZE        THIS  INT.EGER VARIABLE DEFINES  THE NUMBER OF SIZE
             FRACTIONS.
NGRAV        THIS  INTEGER VARIABLE DEFINES  THE NUMBER OF SPECIFIC
             GRAVITY FRACTIONS.
NChAK        THIS  INTEGER VARIABLE DEFINES  THE NUMBER OF CHARACT-
             ERISTICS  PLUS ONE SPECIFIED  FOR THE FLOWSTREAMS.
EQUIP        THIS  1-D1MENSIONAL INTEGER  ARRAY CONTAINS THE EQUIP-
             MENT  INFORMATION BL03K  FOR  THE UNIT.


COMMON       VARIABLES USED
/BLK1/       ISFD,  3UHRY
/WORK/       IASH
//           ws


EXTEPNALS    YINTPP, FLOAT,  ABS


VARIABLE     DESCRIPTION
NS           THIS  INTEGER VARlMBi-E CONTAINS ONE PLUS THE NUMBER
             OF  SIZE FRACTIONS.
NG           THIS  INTEGER VARIABLE CONTAINS ONE PLUS THE NUMBER
             OF  SPECIFIC GRAVITY FRACTIONS.
I            THIS  CUMMY  INTEGER VARIABLE  IS USED TO CONTROL  THE
             MOVEMENT  THROUGH THE SIZE FRACTIONS.
WT           THIS  REAL VARIABLE CONTAINS  THE WEIGHT OF FEED
SCMWT        THIS  ^EAL,  1-DIMENSIONAL  ARRAY CONTAINS THE CUMULA-
             TIVE  WEIGHT BY  SIZE FRACTION IN THE FEED.
         FIGURE II-5-7.1.  LISTING FOR SUBROUTINE FROTH


                                 127

-------
c
c
c
c
c
c
c
c
c
c
c
c
G
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
u
c
c
c
c
c
c
c
c
c
L
c
c
c
C
L,
c
c
SCMASH


Jl


K


J


YIELD


ASH


IJX




ONIN
NCURVE
NPOINT


IX
IY




II


JK


INDEX



SUM1


RATIO



SUM2


SUM3
THIS REAL 1-OIMENSIONAL  ARRAY CONTAINS THE  CUMULA-
TIVE WEIGHT OF ASH  BY  SPECIFIC GRAVITY IN THE FEED.
THIS DUMMY INTEGER  VARIABLE IS USEO  AS A UPPER LIMIT
IN THE CALCULATION  OF  CUMULATIVE VALUES.

THIS CUNMY INTEGER  VARIABLE IS USED  TO CONTROL THE
MOVEMENT THROUGH  LOCAL LOOPS.
THIS DUMMY INTEGER  VARIABLE IS USED  TO CONTROL THE
MOVEMENT THROUGH  SPECIFIC GRAVITY FRACTIONS.
THIS REAL, 1-DIMENSIONAL ARRAY CONTAINS THE DESIRED
YIELD FOR EACH SIZE FRACTION.
THIS xEAL, 1-OIMENSIONAL ARRAY CONTAINS THE DESIRED
PROPORTION ASH FOR  EACH  SIZE FRACTION.
THIS INTEGER  VARIABLE  CONTAINS THE ADDRESS  IN WORK-
ING STORAGE OF THE  X-POINT VALUES ASSOCIATED  WITH
THAT DISTRIBUTION CURVE  WHICH COMES  CLOSEST TO
GIVING THE DESIRED  RESULTS.
THIS REAL VARIABLE  CONTAINS THE MIMIMUM DIFFERENCE
ENCOUNTERED BETWEEN THE  SPECIFIC GRAVITY OF SEPARA-
TION GIVING THE CLOSEST  ASH VALUE AND THE ONE GIVING
THE DESIRED YIELD VALUE.
THIS INTEGER  VARIABLE  CONTAINS THE ACDRESS  IN WORK-
ING STORAGE OF THE  CURVE SFT CONTROL BLOCK  CONTAIN-
ING THE DISTRIBUTION CURVES.
THIS INTEGER  VARIABLE  CONTAINS THE NUMBER OF  CURVES.
THIS INTEGER  VARIABLE  CONTAINS THE NUMBER OF  POINTS
PER CURVE.
THIS INTEGER  VARIABLE  CONTAINS THE ADDRESS  IN WORK-
ING STORAGE OF THE  X-POINTS ASSOCIATED WITH THE CUR-
RENT CURVE.
THIS INTEGER  VARIABLE  CONTAINS THE ACDRESS  IN WORK-
ING STORAGE OF THE  Y-POINTS ASSOCIATED WITH THE
CURRENT CURVE.
THIS DUMMY INTEGER  VARIABLE IS
MOVEMENT THROUGH  THE CURVES.
THIS INTEGER  VARIABLE  CONTAINS
OF THE CURRENT CURVE.
THIS DU1MY INTEGER  VARIABLE IS
MOVEMENT THROUGH  THE 20  VALUES

GRAVITY OF SEPARATION  TO BE APPLIED  TO EACH CURVE.
THIS xEAL VARIABLE  CONTAINS THE TOTAL AMOUNT  OF
MATERIAL IN THE FEED IN  THE CURRENT  SIZE FRACTION.
THIS DUMMY REAL VARIABLE IS USEO IN  THE COMPUTATION
OF YIELD ANQ  PERCENT ASH FOR EACH ATTEMPTED DISTRI-
BUTION.

THIS rEAL VARIABLE  CONTAINS THE AMOUNT OF MATERIAL
IN CLEAN IF THE CURRENT  CURVE WERE USEO.
THIS ^EAL VARIABLE  CONTAINS THE AMOUNT OF ASH IN
Tn£ LlE*N IP  THE  CURRENT CUKVE WERE  USED.
THIS PEAL, 1-CIMENoIONAL ARRAY CONTAINS THE YIELD
USED TO CONTROL THE


THE SEQUENCE  NUMBER


USED TO CONTROL THE
OF DESIRED  SPECIFIC
                    FIGURE II-5-7.1.  (Continued)
                                 128

-------
c
r-
L
C
C
t
c
c
c
G
C
c
c
C
C
G
C
c
c
c
c
c
G
C
C
G
G
C
C
C
c
c
c
c
c
c
G
C
u
G
C
,-*
u
C
ASHPTS
SGSP2


SGAV

DIFF


IJY



SGSP


X


XYLD

XASH


YLDAV

ASHAV


TARGET
DELTA



ASHDIF
             GIVING IMF DESIRED
             THIS CEAL VAR1*3LE
             GIVING THF DESIRED
             THIS REAL VARIABLE
              ASSOCIATED WITH THE CURRENT  CU^VE  AND  THE  CURRENT
              CESIRE3 SPECIFIC GRACITY OF  SEPARATION.
              THIS REAL 1-DIMENSIONAL ARRAY  CONTAINS THE PROPOR-
              TION' ASH IN THE CLEAN IF THE CURRENT CURVE ANC  SEPAR-
              ATION GRAVITY WERE USED.
              THIS REAL, I-QI^ENSIONAL ARRAY  CONTAINS  THE VALUES
              OF THE SEPARATION GRAVITIES  ATTEMPTED.
              THIS 'EAL VARIABLE CONTAINS  THE  SEPAFATION GRAVITY
                                 YIELD.
                                 CONTAINS  THE  SEPARATION GRAVITY
                                 PROPORTION  ASH.
                                 CONTAINS  THE  AVERAGE  OF THE
              ASH SEPARATION GRAVITY AND THE  YIELD GRAVITY,
              THUS ~EAL VA»xTA3LE CONTAINS  THE  ABSOLUTE DIFFERENCE
              BETWEEN THE ASH GRAVITY AND  THE  YIELD  GRAVITY.
              THIS INTEGER VARIABLE CONTAINS  THE  ADDRESS IN WORK-
              ING STORAGE OF THF Y-POINTS  ASSOCIATED WITH THAT
              CURVE GIVING THE BEST RESULTS.
              THIS =EAL VARIABLE CONTAINS  THE
              GIVING THE BEST OVERALL RESULTS,
              THIS PEAL VARIABLE CONTAINS  THE
              OF SPECIFIC GRAVITY FOR cOOK-UP
              THIS REAL VARIABLE CONTAIN^  THE
              THE BEST OVERALL CURVE.
              THIS \EAL VARIABLE CONTAIN^  THE  PROPORTION ASH
              OBTAINED FROM THE 8EST OVERALL  CURVE,
              THIS REAL VARIABLE CONTAINS  THE  AVERAGE
              OVEF.HcL YIELD AND THE QESIREb  YIELD.
              TNIS REAL VAK.TABLE CONTAINS  THE  AVERAGE  OF THE
              OVERALL PCOPO^TION ASH AND THE  DESIRED PROPORTION ASH,
              THIS REAL VARIABLE CONTAINS  THE  TARGET YIELD.
              THIS 1-DlMENSIONAi. REAL ARR AY 'CONTAINS THE INCRE-
              MENTAL AMOUNT NEEDED TO CLEAN  TO ACHEIVE THE  TARGET
              BY SPECIFIC GRAVITY FRACTION.
              THIS xEAL VARIABLE CONTAINS  THE  DIFFERENCE BETWEEN
              AN ACTUAL PLRCENT ASH AND THF  TARGET PERCENT.
              THiS INTEGEK VARIAuLE CONTAINS  THE  SEQUENCE NUMBER.
              OF THE SPECIFIC GRAVITY FRACTION COHING  CLOSEST TO
              THE DESIRED ASH VALUE.
 F            THIS REAL VARIABLE CONTAINS  THE  ADJUSTED VALUE  FOR
              THE BEST DISTRIBUTION VALUE.

 COflMON /W OF K/ NEXT, LAST, ICV   , I UNIT , I DAT A , IT ITLE, ICHAR , IFLW , I ASH ,
I ISUL.IBTU
 COMMON/3LKl/iSFD,ISCC,ISRF,ISMX,SYLO(24),TYLO(24),EFFIC(24),
1 3TUrxFC(24),ASH£r^K(2i+J,SFLT(?4),SINK(2'+) , SMISPL (24) »SNRGR (2«*) *
2 SGRAV (24) ,5PE (24) |SIMP124> ,SEA(2«*>, SUMRY < 24,40)
 COMHON/LOCAwV/NS,MG,SCMWT(20),SuMASH(20) ,YIELD (23S , ASH (231 ,1JX
1             ,DMIN,i:Ui?VE,NCUP-VE,NPOINT,IXtIY,Jl,SUMlfRATIOtSUM2
                                              SEPARATION GRAVITY
                                             \

                                              GENERALIZED VALUE
                                              IN THE DISTRIBUTIONS.
                                              YIELD OBTAINED FROM
                                                      OF THE BEST
                                                             BEST
                 FIGURE II-5-7.1.   (Continued)

                                129

-------
     2              , 5U^,YLQPTS(20) » ASHPTS(20) ,i(20) , S GSP1 , SGSP 2, SGAt/
     3              , C IFF, IJY, SGS P f X, X YLO.X ASH, YLDAV, ASH AV, TARGET
     ^              , DELTA (20) ,ASHOIF,JKtF
      DIMENSION  FEc.D(NSIZE,NGRA\/,i») t CC (MS IZE , NGRn V , ^ ) , KEF ( NSIZE ,NGRAV,<*)
     1          ,SIZE(23)t GRA»MNGRA\n ,GBO UNO (NGRA \l ), EQUIP (U )
      COMMON  W5(600R)
      INTEGER  EQUIP, WS

C     STEP 1        COMPUTE ONE PLUS  THE NUMBER  OF  SIZE AND SPECIFIC
C     "             GRAVITY FRACTIONS.
C
      N3 = NSIZE*1
C
C     STEP  2        COMPUTE THE  DFSIRED VALUFb  OF  YIELD AND PROPORTION
C                   ASH FOR EACH  SIZE FKA3TION.
C
      DO 5  1=1, NSIZE
      IF(SUMRV(I,ISFC).LTS1.F-6I  GOTO 5
      SCMWT (11=0.
      SGMASH (1) =0.
      WT=0.0
      DO 12  J=1,NGRAV
   12 WT=HT+FEED(I ,J,1)
      DO t*  J = 2,NG
      J1=J-1
      SCMWT( J) = 0.
      SCMASH( J> =0.
      DO 3  K=l, Jl
      SCMWT( J) =SCMWT( J) «-FEED(I,K, 1)
    3 SCMASH(J)=bCMASH(JH-FEEDCI,KfIASHI
      SCMASH(J)=SCMASH(J)/SCMWT(J)*100.0
      IF(SCMASH( J) .LT.SCMASH(J-l) ) SC MASH ( J ) =bCMAS H ( J-l )
      SCMWf ( J)=SCMWT( J)*100.0/WT
       VI ELD (I) = -ni*YINTR^ (G60UNC, SCMWT , 1 . 5 0 ,NG)
       ASH (I) =.01* YIN? RP .GE.l.E-6)  GOTO 71)
C

                  FIGURE II-5-7.1.  (Continued)
                                 130

-------
G
G
C
L-
C
C
C
G
C
C
C
C
C

C
C
C
G
C
C
C
G
C
   69
   70
              THE:  CURRENT SIZE  FRACTION is EMPTY.  ZFRO OUT THE
              VALUES  C0,\ THE CLt^N  AND REFUSE OUTPUT FLOWS, AND
              BRANCH  TO STEP 18.
00 69  J = l,N
30 69  K=1,NCHAR
ccti«J,K)=n.o
h£F(I,J,<)=3. 0
CONTINUE
GO TO  in
STEP 6
IJX = 0
DM1N=100
A DISirtUPUTION CURVE MUST BE  CERIVEO FOR THE CURRENT
SIZE FRACTION.  INITIALIZE THE  BASIC  VARIABLES NEEDED
TO MOVE THROUGH THE CURVES.
               0
      NCURVF = WS (ICURVE + ?)
      UPOINT=WS (I3URVE+1)
      IX = WS (ICJRrfE *3)-NPOINT
                      -NPOINT
STEP 7
DO 8
STEP 3
Ji = Il
IX=IX*NPOINT
IY=IY+NPOINT

STEP 9
INITIALIZE  AT  ONE THE DUWMY COUNTER  USED TO CONTROL
THE MOi/EMENT  THROUGH THE INDIVIDUAL  RAW GENERALIZED
DISTRIBUTION  CURVES.
UPQATF THE  VARIOUS CONTROL  VARIABLES SO THAT THEY
POINT TO  THE  CURRENT CURVE.
MOVING THROUGH  ALL DESIRED SPECIFIC  GRAVITIES OF
SEPARATION  BEGINNING AT i.M  AND  ENDING AT 1.60 IN
INCREMENTS  OF  0.91 DETERMINE  THE  YIELD AND ASH
WHICH WOULD RESULT FROM EACH  OF THE  ACTUAL DISTRI-
BUTION CURVES  WHICH WOULC BE  GENERATED.
      DO 7 INDiX=i,20
      SUM1=0 .
      S(INDEX)=1.^0+.01*FLOA1
      DO 6 J=l, NGRAV
      X=GRAV ( J) /S (INDEX)
                        (INDEX)
                  FIGURE II-5-7.1.   (Continued)

                                 131

-------
      RATIO=YINTR°(MSCIX) ,WS(IY),X.NPOINT)
      SUK1=SUMH-FEED(I, J, II
      SUM2 = SUM2+RATIO*FEEO(I, J, 1)
      SUM3=SUM3+RATIO*FEED(I,J,IASH)
    6 CONTINUE
      YLDPT3(INJEX)=SUM2/SUM1
      ASHPTS(INDEX)=SUM3/SUW2
      IFdNQEX.EQ.llGO  TO  7
      IF(ASHPTS SGSP2=SGSP1
      SGAV=0.5*(SGSP1+SGSP2)
      DIFF=ABS(SGSP2-SGSP1)
      IFtDIFF.SE.iMINJGO  TO  8
C
C     STEP 11       THE  CJRRENT CURVE MAY  BE THE  DESIRED CURVE.  UPDATE
C                   CONTROL  VARIABLES ACCORDINGLY.
C
      IJX=IX
      IJY=IY
      SGSP=SGAV
      DMIN=DiFr
C
b     STEP 12       INCREMENT BY ONE  THE  DUMMY COUNTER CONTROLLING THE
C                   MOVEMENT  THROUGH  THE  RAW GENERALIZED CURVES. IF ALL
C                   HAVE NOT  BEEN PROCESSED, LOOP  BACK TO STEP 8.
C
    8 CONTINUE
C
C     STEP 13       COMPUTE  THE VALUES ^OR  THE OUTPUT FLOWS BASED ON
<-                   THE  BEST  OVFRAi_L  DISTRIBUTION  CURVE FOUND.
C
      SUM1=0.
      SUM2=8.
      SUM3=0.
      00 11 J=1,NGRAV
      00 9 K=1,NCHA".
                 FIGURE 11-5-7.1.  (Continued)

                                132

-------
      CC(IiJ»0=YIFLC(I)*FEFC(I,J,KI
      IF(IJX. E3.0)GO  TO 80
      X=GRAV (J)/SG£P
      CCU,J,K)=YiNT.RP(W5(IJX),WS(IJY),X,?0)*FEED(I,JtK)
    0 •iEFED TO ADJUST THE DISTRIBUTION
C                   CURVE VALUE IN ORDFR TO OBTAIN THE DESIRED VALUES.
C
      YLDAV=.5MYIELD (I)*XYLO)
      ASHAV=.5MASH(!)+XASH)
      TARGET=YLDAV*(ASH(I)-XASH)/(YIELD(I)-XYLO)
      HMIN=10Q.0
      oo 90  J=I,NGRA;
      OELTA(Jl=Q.
           F = C:(J.,J,IASH)/CC(I»J»1)-ASHAV
           Ac»i (TAiGET-ASHOIF)
      IF(Dj.FF.GE.DMIN)GO TO 90
      JK = J
      OMIN=DIF-
   90 CONTINUE
      OELTA(/K)=(YIELD(I)-XYLD)/F£ED(I,JK,1)
C
C     STEP 17       ADJUST  THE  VALUES OF THE OUTPUT  FLOWS  TO REFLECT
c                   THE ADJUSTMENT NEEDED.
c
      DO 91 J=1,N5'AV
      X=GRAV(J)/SGSP
      F=YINTRO(WS(i JX)  ,WS(IJY),X,NPOINT)*DtLTA(J)
      IF(F.GT.1.)F=1.


                  FIGURE II-5-7.1.  (Continued)


                                133

-------
       IF(F.LT.O.)F=9.
       DO  91  K=1,NCHAR
       CCU,J,K)=F*FEEO (I, J,K)
       REF
-------
                          5.8  Subroutine BREAK

         A key  operation performed by the rotary breaking unit operation
for both the coal  stream and the rock stream components  of the feed  involves
simulating  the actual breakage,  selection for breakage,  and screening  in  the
drum.   These operations  are carried out in subroutine  BREAK.   Figure II-5-8.1
contains the listing and basic documentation for  this  routine.
                                     135

-------
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
L
C
L
C
C
C
C
C
C
C
C
C
C
C
OVER
UNDER

PROD

BR
 SUBROUTINE FREAK(OVE<, UNDER,PR 00,BR,C,FALL,NSIZE,NGRAV , NCHAR
L                ,NFALL,HGT,FOVER,FUNDER,HSF)

 TITLE
-------
o                  'IONS  ^HICH CONTAIN MATERIAL WHlLH HAS THE  OPPOP-
C                  TUNITr  TO 3E BROKEN INTO MATERIAL IN SMALLER  FRAC-
C                  TIOMS.
C     T            THIS  DUMMY INTEGE^ VARIABLE I j USED TO CONTROL  THE
C                  MOVEMENT THROUGH THE  SiZE  FRACTIONS.
U     J            THIS  DUMMY INTEGEF VARIABLE Ii> USED TO CONTROL  THE
C                  MOVEMENT TH?OUGn THE  SPECIFIC GRAVITY FRACTIONS.
C     <            THIo  DUMMY INTEGER VARIABLE IS USED TO CONTROL  THE
C                  MOVEMENT THROUGH THE  COAL  CHAPAuTERlSTICS.
C     NN           THIS  DUMMY INTEGEC VARIABLE IS USED TO CONTROL  THE
C                  MOVEMENT THROUGH THE  FALLS OF COAL.
      SEL          THIS  REAL VARIABLE CONTAINS THAT PROPORTION OF  COAL
C                  SELECTED ^Ox BREAKAGE  ON A GIVEN FALL.
C     L            THIS  DUMMY INTEGER VARIABLE IS USED TO SPECIFY  THE
r                  SEQUENCE NUMBER OF THAT  SIZE FRACTION IMMEDIATELY
C                  SMALLER THAN THE SIZE  FRACTION WHOSE MATERIAL IS
C                  CURRENTLY BFING BROKEN.
C     II           THiS  DUMMY INTEGER VAfUAEi-E IS USED TO CONTROL  THE
U                  MOVEMENT THROUGH THOSE  SIZE FRACTIONS RECEIVING
C                  3ROKEN MATERIAL.
C     P            THIS  ^EfiL VARIA3LE CONTAINS THAT PROPORTION OF
C                  COAL  IN A GIVEN SIZE  FRACTION TO 6£ BROKEN  INTO
C                  ANOTHER GIVEN SIZE FRACTION.
C
      DIMENSION OVER(NSIZE,NGRAV,NCHAR),UNDFR(NSIZEfNGRAV,NCHAR)
     1         ,PROD(NSIZE,NGRAtfiNCHArO ,BR(23,23) ,C(NSIZE),FALL(NFALL)
C
C     STEP 1       COMPUTE ONE MINUS THE  NUMBER OF  SIZE FRACTIONS.  IT
C                  IS  THIS NUMBER OF FRACTIONS WHICH MIGHT LOSE  MATERIAL
C                  BECAUoE OF BREAKAGE.
C
      NS = NSIZE-1
^
u
C     STEP 2       ZERO  OUT THE CUixRENT  AMOUNT OF MATERIAL IN  THE
U                  UNDERFLOW STREAM.
C
      DO 15 I=l,N5IZr
      00 15 J=1,NGRAV
      DO 10 K = l, NCHAR
      UNC'ER( I , J,K) =0. 0
   10 CONTINUE
   15 CONTINUE
C
C     STEP 3       INITIALIZE AT ONE THE  DUMMY COUNTER TO BE USFD  TO
C                  CONTROL THE MOVEMENT  THROUGH THE FALLS OF COAL.
C
      CO 60 NN=l,NFAwL
C
C     STEP k       COMPUTE THE PROPORTION OF  COAL WHICH IS ELIGIBLE  FOR


                    FIGURE II-5-8.1.  (Continued)

                                 137

-------
c                   BREAKAGE  ON  THE CURRENT  FALL.
C
      SEL=FALL(NN)
      IF(HPT.GT.HiF)SEu=SEL*HGT/HSF
C
G     cyco  5        MOVE THAT  GOAL WHICH IS  NOT Ei_IGj_E  FOR  BREAKAGE
G                   ON THE CURRENT FALL INTO THE SCRATCH  STORAGE ARRAY.
G
      00  20  J=i,N3RAV
      DO  20  K=i,NCHAR
      PPOD(NSIZF,J,K)=OVFR(NSIZE,J,K)
      00  20  1 = 1,NS
      PROG .
C
      IF(ShL.E3.fl.0)GO TO 35
C
C     STEP  7        COMPUTE  THE  NEW DISTRIBUTION OF COAL  WHICH RESULTED
C                   FP.OM THE  BREAKAGE ON THE CURRENT FALL,  AND STORE IT
C                   IN THE SCRATCH STORAGE  ARRAY.
C
      DO  30  1=1,NS
      L=I
      00  25  II=L,NSIZE
      P=(BR( I,II)-6R(I,IIt-l)
      DO  25  J = 1,NGRA7
      CO  25  K=i,NCHAR
      PROGdl, J,K)=PPOD(iI ,J
   25 CONTINUE
   30 CONTINUE
G
C     STEP  4        AT THIS  POINT THE SCRATCH STORAGE ARRAY CONTAINS ALL
C                   OF THc MATERIAL IN  THE  OVFRFuOW AT  THE  START OF THE
c                   CURRENT  FALL IN THE NEW  ^IZE DISTRIBUTION.  COMPUTE
G                   THE PPOPO^TION OF THAT  MATERIAL WHICH WILc NOT CURR-
G                   ENTLY PASS  THROUGH  THE  HOLES IN THE DRUM.  THIS HAT-
C                   E.xIAL IS  THE OtfEKFLOrt  STRRAM FOR THE  NEXT  FALL. THE
G                   MATERIAL  WHICH DOES PASS THROUGH IS ADDED  INTO THE
G                   UNDFFFLOW  STRRAM.
C
   35 00  51]  I = i ,Mi>IZE
      DO  50  J = 1,MG*A\/
      HO  50  K=1,NCHA=
      n*/ER(I,J,K)=C(T)*P=nD(T,J,K)
      PROG (I , J,K) =Pr^OO (I, J,0-nrfE«(I,J,K)
      UNDER (I, J,K) ^UN'JEKf I, J, K) *P^OD (T ,J,K)
                     FIGURE II-5-S.1.   (Continued)

                                  138

-------
   50 CONTINUE
C
C     STEP 9        INCREMENT  THE  DUMMY COUNTER  CONTROLING THE  MOVEMENT
C                   THROUGH THE  FALLS uY ONEt AND  IF ALL FALLS  HAVE NOT
C                   3EEN SxMUuATEO  uOOP BACK TO  STEP k.
C
   615 CONTINUE
C
C     STEP 10       COMPUTE THE  WFIGHT OF COAL  IN  THE OVERFLOW  AND
C                   UNDERFLOW  STREAMS.
C
      FUNCE*=0. 0
      DO 70 I=1,NSI7E
      00 70  J = l,NGRAi/
          ER = FUNOEKfUNCEiv (I, J, 1)
            FOVER + OVER (I, J, 1)
   •70 CONTINUE
C
C     STEP 11       END LOCAL  PROCESSING.
C
      RETURN
      END
                 FIGURE II-5-8.1.  (Continued)
                                 139

-------
                         5.9   Subroutine ROTARY

          Subroutine ROTARY performs  the calculations  needed to simulate the
rotary breaking unit operation.   Figure  II-5-9.1  contains the listing and
basic documentation for this routine.
                                    140

-------
      SUBROUTINE
     1
     2
           ROTARY(FEED,CPROD,RPROD,COVER,ROVER,CUNOR,RUNOR,SIZE
                  ,EQUIP,NSIZE,NGRAV,NCHAR,FCPROO,FRPROD,LENGTH
                  ,PIAM,HO;.E)
C
c
u
c
c
c
c
c
c
c
c
c
c
c
c
L
c
c
c
c
c
G
C
c
c
c
0
c
c
c
c
c
c
c
c
b
c
c
c
c
c
c
c
c
c
c
TITLEtilMULATE  ROTARY  6REAKER)

SUBROUTINE xOTARY  PERFORMS THE CALCULATIONS  NEEDED TO SIMULATE
THE UNIT OPERATION OF  ROTARY BREAKING.
PARAMETER
FtEQ

CPPOD


RPROG


COVER


ROVER


CUNDR


RUNDR


SIZE

EQUIP

NSIZE

NGRAV

NCHAR

FCPROO

FRPROO

LENGTH

QIAM

HOLE
THIS REAL,
3UTION ANu
TH€ ROTARY
THiS REAL,
bUTIOM ANu
                                         THE  DISTRI-
                                         CO'MPONENT OF

                                         THE  DISTRI-
                                         COMPONENT
                                         BREAKER.
                                         THE  DISTRI-
                                         COMPONENT OF

                                         THE  DISTRI-
                                         COMPONFNT OF
uESCRIPFION
THIi REAL,  3-QIMENSIONAL ARRAY CONTAINS  THE DISTRI-
BUTION ANL>  CHARACTERISTICS OF THE FEED TO  THE UNIT.
            ^-DIMENSIONAL ARRAY RETURNS THE DISTRI-
            CHARAC7E*ISTICS OF THE UNDERFLOW FROM
            3REAKFR.
            3-OIMENSIONAL ARRAY RETURNS THE DISTRI-
            CHMRACTERISTICS OF THE OVERFLOW FRON THE
ROTARY BREAKER.
THIS SEAL,  3-uIHENSIONAL ARRAY RETURNS
3JTIOM AND  CHARACTERISTICS OF THE COAL
THE OVERFLOW  FROM  THE ROTARY BREAKER.
THIS REAL,  3-OIMENSIONAL ARRAY RETURNS
3UTTON ANO  CHARACTERISTICS OF THE ROCK
OF THE OVERFLOW .STREAM FROM THE ROTARY
THIS REAL,  3-OIMENSIONAL ARRAY RETURNS
3UTION ANu  CHARACTERISTICS OF THE COAL
THE UNDERFLOW  FROM THE ROTARY BREAKER.
THIS REAL,  3-DIMENSIONAL ARRAY RETURNS
BUTION AND  CHARACTERISTICS OF THE ROCK
THE UNDERFLOW  STREAM FROM THE ROTARY  BREAKER.
THIS REAL,  1-OIMENSIONAL ARRAY CONTAINS  THE SIZE
DISTRIBUTION  DEFINITION FOP THE FuOWS.
THIS REAL,  1-DIHENSIONAL ARRAY CONTAINS  THE EQUIP-
MENT INFORMATION  CONTROL SLOCK.
THIS INTEGER  VARIABLE DEFINES THE NUMBER OF SIZE
FRACTIONS DEFINING THE FLOWS.
THIS INTEGER  ,/ARiABuE CONTAINS THE
FIC GRAVITY FRACTIONS DEFINING THE
THIS INTEGER  VARIABLE CONTAINS ONE
OF CHARACTERISTIC^ uEFIMED FOR THE
THIS REAL VARIABLE RETURNS THE AMOUNT OF MATERIAL
IN THE UNDERFLOW  FROM THE ROTARY BREAKER.
THIS REAL VARIABLE RETURNS THE AMOUNT OF MATERIAL
IN THE OVERFLOW  FROM THE ROTARY BREAKER.
THIS REAL VARIABLE CONTAINS TH€ LENGTH IN  FEET OF THE
QxUM. IT IS THE  FIRST DECISION VARIABLE.
THIS REAL VARIABLE CONTAINS THE DIAMETER IN FEET OF
THE LxUM. IT  IS  THE  SECOND DECISION  VARIABLE.
THIS REAL VARIABLE CONTAINS THE HOLE  SIZE  IN INCHES.
                                     NUMBER OF  SPECI-
                                     FLOWS.
                                     PLUS  THE
                                     FLOWS.
NUMBER
         FIGURE II-5-9.1.   LISTING FOR SUBROUTINE ROTARY
                                 141

-------
c
w
c
c
c
c
c
c
c
c
G
C
c
c
G
C
G
C
C
G
C
G
C
C
C
G
C
C
c
c
c
c
c
G
c
G
r
'_/
C
c
u
L
C
EXTERNAL:

COMMON

/BLKi/
/WORK/

VARIABLE
SMID

BR



SEL, ISE1



NFALL

HGT

A
J


NS


NG
PATIOB



FROCK
FCC

FPR


FRC
                    IT  IS  THE THIRD DECISION


                    NOTPTH,  EXP, 3PEAK, SGSIZE
1/ARj.AEuES USED
ws
SYLC,SFLT,SINK,SUMRY,ISCC,ISMX,ISRF
IASH

DESCRIPTION
THIS 1-DIMENSIONAL REAL ARRAY CONTAINS  THE MID-
POINTS OF THE  SIZE FRACTIONS.
THIS 2-DIMENSIONAL REAL ARRAY CONTAINS  THE PROPOR-
TION OF MATERIAL IN THE I-TH SIZE  FRACTION THAT HILL
BE IN THE J-TH  FRACTION OR BELOW AFTER  BREAKAGE.
THIS TYPELESS  VARIABLE CONTAIN-i THE  BASE  ADDRESS
IN WORKING STORAGE OF THE CURVE SET  CONTROL BLOCKS
FOR THE BREAKAGE FALL SELECTION FACTORS.
THIS INTEGER  VARIABLE CONTAINS THE NUMBER OF FALLS
TO BE TAKEN IN  THE BREAKER
THIS ?EAL VARIABLE CONTAINS THE HEIGHT  OF EACH FALL
IN THE BREAKER.
THIS REAL VARIABLE CONTAINS THE EMPIRICAL SCREENING
VALUE FOR THE  MATERIAL PASSING THROUGH  THE HOLES  IN
THE BREAKER.
THIS INTEGER  DUMMY VARIABLE IS
MOVEMENT THROUGH VARIOUS LOCAL
THIS CUMMY INTEGER VARIABLE IS
MOVEMENT THROUGH THE SPECIFIC
 USED TO CONTROL THE
 LOOPS.
 USED TO CONTROL THE
GRAVITY FRACTIONS.
THIS INTEGER  VARIABLE  CONTAINS 1 LESS  THAN  THE  NUMBER
OF SIZE FRACTIONS  CLASSIFYING THE FLOWSTREAMS.
THIS INTEGER  VARIABLE  CONTAINS ONE  LESS  THAN  THE  NUM-
BER Oc SPECIFIC  GRAVITY FRACTIONS CLASSIFYING THE
FLOWSTREAMS.
THAi DUMMY  INTEGER VARIABLE USED AS  A  LOWER BOUND
FOR LOOPS  PROCESSING THE TRIANGULAR  BREAKAGE  ARRAY.
THIS REAL  VARIABLE IS  USED TO CONTAIN  THE  ARGUMENT
FOR TME BREAKAGE CALCULATION. IT CONTAINS  THE RATIO
OF THF SIZES.
THIS -EAL  VARIABLE CONTAINS THE TOTAL  WEIGHT  OF
•*ATEFIAL IN THE  ROCK COMPONENT OF THE  FEED  TO THE
ROTAFr BREAKER.
THIS SEAL  VARIABLE CONTAINS THE WEIGHT OF  MATERIAL
IN THE OVERFLOW  STREAM FKOM THE ROCK COMPONENT.
THIS ?EAL  VARIABLE oONTAlNi, THE TOTAL  WEIGHT  OF MATER
I«L IN THE  UNGERFLOW ST*EAM FROM THE COAL  COMPONENT.
^HIS REAL  VARIABLE CONTAINS THE TOTAL  WEIGHT  OF MAT-
ERIAL IN THE  OVERFLOW  STREAM OF THE  KOCK COMPONENT.
THIS REAL  i/ARIABLF CONTAINS THE TOTAL  WEIGHT  OF WAT-
                  FIGURE II-5-9.1.   (Continued)
                                142

-------
C
C
b
o
C
C
C
C
C
C
C
C

C
C
C
C
C
C
C
C
C
C
C
C
C
 RATIO


 NSC

 Ii

 TOTAL
             E^IAL  FROM THE UNDERFLOW  STREAM OF THE ROCK  COMPONENT
             THIS DUMMY REAL VARIABLE  CONTAINS VARIOUS  WEIGHT
             RATIOS  IN THE CALCULATION OF  THE UNIT PERFORMANCE
             CHARACTERISTICS.
             THIS INTEGER VARIABLE CONTAINS THE ROW NUMBER  IN THE
             VARIOUS  SUMMARY ARRAYS  OF THE COMPOSITE  VALUES.
             THIb INTEGER VARIABLE CONTAINS THE ADDRESS IN
             WOOING  STORAGE OF THE  ACTUAL SELECTION  FACTORS.
             THIS REAL VARIABLE IS USED  FOR TEMPORARY STORAGE,
 DIMENSION FEED(NSIZE,
1         ,RPRODEL,NFALLtHGT, A, NS,NGfL, RATIOS, FROCK, FCR
                      ,FRC,RATIO,NSC,IS,LVFILL(156)
                      SUMRY(1,D)
                      »
 STEP 1
          (k)
 STEP 2
             OoTAIN  THE ADDRESS IN  WORKING STORAGE OF THE  CURVES
             DEFINING  THE ^AuL >El_ECTION VALUES.
             COMPUTE  THE NUMBER AND  HEIGHT OF THE FALLS  IN  THE
             Ort.UM  OF  THE ROTARY 3REAKER.
NFnLL=IFIX (LENGTH/EQUIP (6) )
HGT=.75*DIAM
 STEP 3
             OBTAIN  THE  SCREENING  EQUATION EXPERIMENTAL  CONSTANT
             BASED  ON THE EQUIPMENT  SPECIFICATION ANO  THE  HOLE
             SI7F.
 A=EQUIP(6)-
 IF
                      = EQUIP
 S3EP k
             UiiNG  SUBROUTINE  N 0  T  P T  H  COMPUTE THE  PROPOR-
             TION OF  MATERIAL BY SIZE  FRACTION THAT HILL  NOT
             PASS THROUGH THE HOLES  IN THE DRUM ON A  SINGLE PASS.
              FIGURE II-5-9.1.  (Continued)
                           143

-------
      CALL N OTPTH ( SIZE, SYLD, HOLE, A, N SIZE)
      DO 10 I=1,NSI?E
      IF(SYLD(I>.LT.1.0E-USYLD(I> = 0.0
   If CONTINUE
C
C     STEP 5       COMPUTE  THE MIDPOINTS OF THE  SIZE FRACTIONS.
C
      00 15 Isl,NSIZE
      SMIt) (I )=(SIZE(I)«-SIZE(I + 1) )/2. 0
   15 CONTINUE
C
C     STEP 6       UiING  THE  GENERAL BREAKAGE EQUATION COMPUTE THE
C                  VALUFS IN  THE  BREAKAGE MATRIX.
C
      NS=NSIZE-1
      DO 25 1=1, NS
      BR( 1,1 1=1.0
      DO 20 II=L,NSIZE
      RATIOB=SIZE(II)/SMID(I)
      BRf I,III = <1.0-EXPC-RATIOBII/0.6321«»
   20 CONTINUE
      BR(I,NSIZE*1)=0.0
   25 CONTINUE
C
L     STEP W        LIBERATE THE ROCK AND COAL  COMPONENT FLOWS FROM
C                   THE FEED TO THE BREAKER. EXPRESS THE DESCRIPTIONS
C                   OF THE  COMPONENTS IN ADDITIt/E  FORM.
C
      FROCK=0.
      NG = NGRAV-1
      00 35 I=1,NSIZE
      DO 30 J=1,N6RAV
      DO 30 K=1,NCHAR
      COVEKd, J,K)=FEED(I, J,K)
      ROVERd, J,K)=0. 0
   3D CONTINUE
      ROVER(I,NGRMV,1)=COYER(I,NGRAV,IASH)-COVER(I,NG,IASH)
      IF (ROVERCI,N&RAV,1) . LT . 0 . 0 ) ROVE*< I , NGRAV , 1) =0. 0
      COVER(I,NGRAV, 1) = COVER ( I f NGRAV , 1 ) -RO VER (I, NGRAV, 1)
      ROVER (I, NGRAV, I ASH) = xOVER ( I , NGRAV, 1 )
      UOVERU • NGK AV, I ASH) = COW EM I, NGRAV, I A SHI -ROVE* 1 1, NGRAV, I ASH)
   J5 CONTINUE
C
^     STEP 3        USING  SUBROUTINE  BREAK   SIMULATE THE PASSAGE
C                   OF TH^  COAL COMPONENT FLOW  THROUGH THE BREAKER.
C
                 FIGURE II-5-9.1.  (Continued)


                                144

-------
      CALL BREAK (GO «/ER,CUNuR,C PRO C,6R, SYLD,WS
-------
C     STEP  15       USING SUBROUTINE  S D S  I  Z  E  SUMMARIZE  BY 'SIZE
C                   FRACTION  AND  COMPOSITE THE CHARACTERISTICS  OF THE
0                   COAL GONPONENT  IN THE OVERFLOW STREAW.
C
      LALL  SOSIZE(COVER,SJMRY(l.ISMX),NSIZE,NGRAV,NCHAR,TOTAL)
      kATIO=100.0*FCP./(FCR+FR.R)
      00 A5  1=1,NSu
      SFLT(I)=tJ.O
      IF(SUHRY(I,ISRF).GT. 0. 0) SFLT (I) =SU«kt (I ,1S«X) /SUMRY (I, ISRF) *RATIO
   U5 CONTINUE
C
C     STEP  16       USING SUBROUTINE  S D S  1  Z  E  CALCULATE  THE  OISTRI-
C                   BUTiON  OF  THE ROCK COMPONENT IN THE UNDERFLOW STREAM.
C
      CALL  SDSIZE(kUNDR,SUMKYU,ISMX> ,NSIZE , NGRAY , NCHAR, TOTAL!
      RATIO=100.tl*FRC/(FxOFCJC)
      00 50  1=1,NSC
      SINK
-------
                         5.10  Subroutine CRUSH

          The  crushing  unit  operation is  implemented  in subroutine CRUSH.
Figure  II-5-10.1  contains  the  listing and basic  documentation.
                                     147

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
t
c
c
c
c
c
L
SUBPOUTTNF CRUSH(FEED,PROu,FED,SIZE,EQUIP,NSIZE,NGRAV, NCHAR,SO)


TITLECilMULATE CRUSHER)


SUBROUTINE CRUSH IS USED  TO CONTROL  THE SIMULATION  OF  THE  CRUSHING

UNIT OPERATION.
PARAMETER

FEED


PROD
FED





SIZE


EQUIP


NSIZE


NGRAV


NCHAR


SO




EXTERNALS


COMMON
VARIABLE

8*
CU^VE, ICURVE
N»OINT
IX
DESCRIPTION

THIS REAL, 3-DIMENSIONAL ARRAY CONTAINS THE  DISTRI-
BUTION AND CHARACTERISTICS OF THE FEED TO THE UNIT.

THIS REAL, 3-OIMENSIONAL ARftAY RETURNS THE DISTRI-

BUTION AND CHARACTERISTICS OF THE PRODUCT FROM THE

CRUSHED.
THIS REAL, 3-DIMENSIONAL ARRAY CONTAINS THE  DISTRI-

BUTION AND CHARACTERISTICS OF THE MATERIAL IN THE

CRUSHED IMMEDIATELY  AFTER THE MATERIAL LARGER THAN

THE CRUSHING ZONE  HAS  BEEN BROKEN.

THIS REAL, 1-DIMENSIONAL ARRAY CONTAINS THE  SIZE

DISTRIBUTION DEFINITION.

THIS *EAL, 1-DIMENSIONAL ARRAY CONTAINS THE  EQUIP-

MENT INFORMATION CONTROL BLOCK.
THIS INTEGER VARIABLE  DEFINES THE NUMBER OF  SIZE

FRACTIONS DEFINING THE FLOWS.

T4IS INTEGER VARIABLE  CONTAINS THE NUMBER OF SPECIFIC
GRAVITY FRACTIONS  DEFINING THE FLOWS.

THIS INTEGER VARIABLE  CONTAINS THE NUMBER OF CHAR-

ACTEKlSTICS PLUS ONE DEFINED FOR THE FLOHSTREAMS.

THIS ?EAL VARIABLE CONTAINS THE VALUE OF THE CRUSHER

SETTING.


INTS, SDSIZE


VARIABLES USED
MS

SUMRV


DESCRIPTION

THIS REAL, 2-DIMENSIONAL ARRAY IS USED TO CONTAIN

THE PROPORTION  OF  MATERIAL IN EACH SIZE FRACTION

WHICH WILL 3E BROKEN INTO PIECES OF THE OTHER SIZE

FRACTIONS.

THIS TYPELESS VARIABLE CONTAINS THE ADDRESS  IN
WORKING STORAGE OF THE CURVE SET DEFINING THE EQUIP-

MENT TYPE SPECIFIC BREAKAGE DISTRIBUTION.

THIS INTEGER VARIABLE  CONTAINS THE NUMBER OF POINTS

IN 1HE EQUIPMENT BREAKAGE DISTRIBUTION.

THIS INTEGEP VARIABLE  CONTAINS THE ADDRESS IN WORKING

STOPAGE OF THE  INDEPENDENT VALUES ASSOCIATED KITH

THF EQUIPMENT SPELIFIS BREAKAGE DISTRIBUTION.
         FIGURE H-5-10.1.  LISTING FOR SUBROUTINE CRUSH


                                 148

-------
c
c
c
c
u
c
c
c
c
c
c.
c
c
c
c
c
c
c
c
c
c
c
c
G
c
c
c
c
c
0
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
IY


1

J

SNIO

NNS

Ml
MM


NS

L


PR



II

RATIOS
P

FRAC1


FRftC2

SMI 01


SMIQ2
THIS INTEGER  VARIABLE  CONTAINS THE ADDRESS  IN WORKING
STORAGE OF  THE  DEPENDENT VALUES ASSOCIATED  WITH  THE
EQUIPMENT  BREAKAGE  DISTRIBUTION.
THIS DUMMY  INTEGER  VARIABLE IS USED TO CONTROL THE
MOVEMENT THROUGH  LOCAL  LOOPS.
THIS GUMMY  INTEGER  VARIABLE IS USED TO CONTROL THE
MOVEMENT THROUGH  LOCAL  LOOPS.
THIS 1-QIMENSIONAL  REAL ARRAY CONTAINS
OF THE SIZE FRACTIONS.
THIi INTEGER  VARIABLE  CONTAINS ONE PLUS
OF iIZE FRACTIONS.
THIS INTEGER  VAPIABi.E
OF THAT SIZE  FRACTION
                                        THE  MIDPOINTS
                                         THE  NUMBER
                       CONTAINS THE SEQUENCE  NUMBER
                       CONTAINING THE MAXIMUM  OF  THE
CRUSHING ZONE.  THIS  SIZE FRACTION WILL BE REFERRED
TC Ai> THE CRUSHING  FRACTION.
THIS INTEGER  VARIABLE  CONTAINS THE SEQUENCE  NUMBER  OF
THE FRACTION  IMMEDIATELY LARGER THAN THE CRUSHING
FRACTION,
THIS INTEGER  VARIaBuE  CONTAINo THE SEQUENCE  NUMBER  OF
THE SIZE FRACTION  IMMEDIATELY SMALLER THAN THE
CRUSHING FRACTION.
THIS INTEGER  VARIABLE  CONTAINS ONE MINUS THE  NUMBER
OF SIZE FRACTIONS.
THIS INTEGER  DUMMY  VARIABLE IS USED AS THE LOWER
LOOP LIMIT  IN  PROCESSING THE TRIANGULAR BREAKAGE
ARRAY.
THIS SEAL 1-DIMENSIONAL ARRAY CONTAINS THE PROPO-
TION OF MATERIAL  IN  A  GIVEN SIZE FRACTION THAT WILL
BREAK INTO  MATERIAL  EQUAL OR SMALLER THAN THE OTHER
SIZE FRACTIONS.
THIS INTEGER  DUMKY  VARIABLE IS USED TO CONTROL
THE PROCESSING  OF  INNER LOOPS.
THIS REAL VARIABLE  EQUALS THE ARGUMENT TO THE
BREAKAGE DISTRIBUTIONS. IT CONTAINS THE RATIO OF
THE RELEVANT  SIZE  FRACTION MIDPOINTS.
THIS REAL VARIABLE  CONTAINS THE PROPORTION OF
MATERIAL IN A  GIVEN  FRACTION WHICH WILL BE BROKEN
TO MATERIAL IN  ANOTHER GIVEN FRACTION.
THIS REAL VARIABLE  CONTAINS THE AMOUNT OF MATERIAL
MOVING FROM ONE  FRACTION TO ANOTHER.
                          CONTAINS THE FRACTION OF
                          FRACTION
THIS DUMMY *EAc  VARIABLE
MATERIAL IN  A  GIVL'N SIZE
CALCULATION  APPLIES.
THIS SEAL DUMMY  VARIABLE
FRACTION OF  A  GIVEN SIZE
THIS DUMMY REAL  VARIABLE
A SIZE FRACTION  BOUNDARY
BOUNDARY
THIS REAL DUMMY  V-ARIABLE
                          CONTAINS
                          FRACTION
                          CONTAINS
                          AND SOHE
 TO  WHICH A  GIVEN

 THE REMAINING
t
 A  MIDPOINT  BETWEEN
 CRUSHER SIZE
                          CONTAINS THE HIDPOINT  3E-
             FIGURE II-5-10.1.   (Continued)
                                 149

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
   LL


   SELi


   SEL2


   SEL


   RATIOS


   VAL


   K
TWEtN A CRUSHER SIZE BOUNDARY  AND A FLOWSTRE~AM SIZE
BOUNDARY. ,
THIS DUMMY INTEGER VARIABLE  IS USED IN THE CALCU-
LATION OF DIRECT RATIOS  FROM CUMULATIVE RATIOS.
THI5 REAL VARIABLE CONTAINS  THE RATIO OF MATERIAL
SELECTED FOR SOME CALCULATION.
THIS REAL VARIABLE CONTAINS  THE RATIO OF MATERIAL
SELECTED FOR SOME CALCULATION.
THIS REAL VARIABLE CONTAINS  THE OVERALL RATIO
OF MATERIAL SELECTED.
THIS REAL VARIABLE CONTAINS  THE RATIO OF A SIZE AND
THE CRUSHER SETTING FOR  USE  IN THE SCREENING EQUATION.
THIS REAL VARIABLE CONTAINS  THE AMOUNT OF MATERIAL
BEING MOVED AFTER BREAKAGE.
THIS DUMMY INTEGER VARIABLE  IS USED TO CONTROL THE
MOVEMENT THROUGH FLOW  CHARACTERISTICS.
      DIMENSION FE£0«NSIZE,NGRAV,NGHAR),PROD(NSIZE.NGRAV9NCHAR)

     1         ,FED(NSIZE, NGRAV,NCHAR).SIZE

      NPOINT=HS(ICURVE+li
      IX=HS(ICURVE*S)
   STEP 2
INITIALIZE AT ZERO THE  ARRAY  WHICH WILL CONTAIN THE

PROPORTION OF MATERIAL  IN  GIVEN  SIZE FRACTIONS WHICH

WILL BE CRUSHED INTO OTHER FRACTIONS.
51
      DO 51 I=1,NSIZE

      DO Si J=1,NSIZE
      t>R(I, Jl=0.0

      CONTINUE
   STEP 3
COMPUTE THE MIDPOINTS  OF  THE  SIZE FRACTIONS.
             FIGURE H-5-10.1.  (Continued)
                                150

-------
      00  10  I=1,NSIZE
   10  SM1D(I) = CSIZE(I) +SIZE-EQUIP(?)*Sn»<*,3,-3
    h  Hi=I-l
      GO  TO 8
    3  CONTINUE
C
C     STFP 6       INITIALIZE AT ZERO  THE  FLOW DESCRIPTION ARRAYS
C                  WHICH WILL CONTAIN  THE  VALUES FOR THE CRUSHED NATER-
C                  IAu.
C
    8  00  21 I=1,NSIZE
      00  21 J=i,NGRAV
      00  21 K=1,NCHAR
      FEOlIt JtK)=FEED (I ,Jf K)
   21  PRODH , J,K)=0,0
C
C     STEP F       COMPUTE THE SEQUENCE  NUMBERS OF THE SIZE FRACTIONS
C                  IMMEDIATELY ABOVE ANO  IMMEDIATELY BELOW THE CRUSHING
C                  FRACTION. THEN IF ALL  FRACTIONS ARE BELOW THE CRUSH-
C                  ING FRACTION .BRANCH TO  STEP 19.
C
      IF(M1,EQ. 0)GO TO 90
C
C     STEP 8       COMPUTE THE SEQUENCE  NUMBER OF THE NEXT TO SMALLEST
C                  SIZE FRACTION,  THIS  IS  THE LARGEST FRACTION WHICH
C                  CAN LOSE MATERIAL  AS  A  RESULT OF CRUSHING.
C
      NS=NSIZE-1
C
C     STEP 9       IF THER£ IS NO  MATERIAL IN SIZE FRACTIONS SMALLER
C                  THAN THE CRUSHING  FRACTION, BRANCH TO STEP 15.
C
      IFtMl.EQ.DGO TO 50
C
C     STEP 10      INITIALIZE AT ONE  THE  DUMMY COUNTER TO CONTROL THE


                 FIGURE II-5-10.1.   (Continued)

                                151

-------
                MOVEMENT THROUGH THE SIZE FRACTIONS WHICH ARE LARGER
                THAN THE CRUSHING FRACTION.
   00 2* 1*1,N
   STEP 11      USING SUBROUTINE  I N T S   AHO  THE EQUIPMENT TYPE
                SPECIFIC BREAKAGE DISTRIBUTION  COMPUTE THE CUMULATIVE
                PROPORTION OF MATERIAL THAT MILL  3REAK INTO SMALLER
                FRACTIONS.
   DO 9 II*L»HSI?E
   CALL iNTSfWSflKI.KSIir*. RATIOS, PR€II1»I*POINTI
 9 CONTINUE
   STEP 12      PHYSICALLY SIMULATE THE  BREAKAGE  OF MATERIAL FROM
                FRACTIONS LARGER THAN THE CRUSHING FRAtTIO* INTO
                FRACTIONS MOT SMAU.ER THAN THE  CRUSHING FRACTION.
                                ^

   00 23 II*L»M1
   08 23 J«l,tt&RAV
   00 29 **itNCMAR
   FEOtII,J,K**F£DCII, J,K>«-FEDCI, J,IO»Z
29 CONTINUE

   STEP 13      COMPUTE THE PROPORTION OF MATERIAL IN THE CURRENT
                FRACTION WHICH MILL BREAK INTO  FRACTIONS SMALLER
                THAN THE CRUSHING FRACTION.

   00 25 II*HM,NSIZE
   LLsH-l
   PaPR(LLI-PRCII)
   8RH,II)=BR(I,II» *P
25 CONTINUE

   STEP l«t      INCPFHENT BY ONE THE DUMMY  COUNTER CONTROLLING THE
                MOVEMENT THROUGH THE FRACTIONS  LARGER THAN THE CRUSH
                ING FRACTION, AND IF NOT ALL  HAVE BEEN PROCESSED,
                LOOP BACK TO STEP 11.

2% CONTINUE

   STEP 15      COMPUTE THAT PROPORTION OF  MATERIAL IN THE CRUSHING
                FRACTION WHICH IS LARGER THAN THE CRUSHING ZONE MAX-
                IMUM ANu COMPUTE THE CUMULATIVE PROPORTION OF THAT


              FIGURE II-5-10.1.  (Continued)


                             152

-------
C                  MATERIAL  WHIUH WILL BREAK  INTO  SMALLFR FRACTIONS
G                  USING  SUBROUTINE  I N T S   AND  THE  EQUIPMENT TYPE
C                  SPECIFIC  BREAKAGE DISTRIBUTION.
C
   5Q  PR(M1)=1.0
      FRACi=(SIZF(M1)-FQUIP<7)*SO)/CSIZF=PR(Ii)*EQUIP(6)
      LL=II-1
      P=PR(LLJ-PR(1I)
      BR(NllIi)sB*
-------
C
G
C
C
C
C
C
C
C
C
C
G
C
G
C
9Q
76
                ING  FRACTION SO THAT
                SIZt  FRACTION.
                                          IT POINTS TO  THE FIRST SUCH
   IF(MH.GT.NS) GOTO
   DO k<3 I=MM,NS
                         ki
   STEP 20
                 USING THE GENERAL  BREAKAGE FUNCTION COMPUTE  THE
                 CUMULATIVE BREAKAGE  I/ALUES FOR THE CURRENT  FRACTION.
      1=1*1
      00 *3 II=L,N5IZE
      RATI08=3HIO(II)/SMID(I)
      PR(II)=(i.O-EXP(-RATIOB))/0.63214
      CONTINUE
      PR(NSIZE)=fl.0
   STEP 21
                COMPUTE  THAT PROPOTION  OF THE MATERIAL  IN  THE
                CURRENT  FRACTION WHICH  WILL 8E SELECTED  FOR  BREAK-
                AGE.  THE ASSUPTION HER.E is THAT SOME  MATERIAL  WILL
                SLIP  THROUGH THE CRUSHER. NOTE THAT THE  STANDARD
                SCREENING FORMULATION IS USED HERE.
      SEL1=0.0
      SEL2=0.0
      FRAC1=1.0
      FRAC2=1.0
      SEui=EQUIP(6)
      IF (SIZE (1*1) -SO) 76,*6>'f6
      FRACi=(SIZE(I)-SO)/ (SI Z£ ( I ) ~SI 7E (I* 1 ) )
      FRAC2=1. 0-FRAG1
      iMID2=(SO*SIZE(I*ll )/2. U
      SATIOS=SMI02/SO
      GO TO  7%
      RATIOS=SMID(I)/SO
      SEL 2 = EXP (EQUIf» (8)* (RATIOS- l.fl) )
      DO kT  IIsLiNSIZE
      SEL = SEL1*FRMC1*SEL2*FRAC2»EQUIP<6)
      PRdll =PR(II )
      PK(I)=SEL
      STEP  22
                 ADO  THE  BREAKAGE CONTKlBUTJON COMPUTED  ABOVE  INTO THE
                 BREAKAGE ARRAY.
   L=I*1
   00 5 it I
   LL=II-1
   P=Pxd_L) -PP (II)
               = L,NSIZE
                  FIGURE II-5-10.1.  (Continued)
                                 154

-------
   5<+  CONTIMUE
C
C     STEP 23      INCREMENT BY  ONF  THE  DUMMY COUNTER CONTROLLING  THE
C                  MOVEMENT THROUGH  THE  SIZE FRACTIONS BEcOW THE CRUSH-
C                  ING FRACTION,  AND IF  NOT ALL HA/E BEEN PROCESSED,
t                  LOOP 3ASK TO  STEP 20.
C
   k9  CONTINUE
C
C     STEP 2/f      MOtfE THE PROPORTION  OF  MATERIAL NOT SELECTED FOR
C                  BREAKAGE IN EACH  FRACTION BELOW THE CRUSHING FRAC-
C                  TION INTO THE  DIAGONAL  ENTRIES OF THE BREAKAGE  ARRAY.
C
   %1  PR(NSIZE)=0.0
      UO »»0 II = HM,NSIZE
      tsR,NSIZE,NGRAtf,NCHAR,VAL)
C
C     STEP 27      END LOCAL PROCESSING
C
      KET
      END
                 FIGURE II-5-10.1.  (Continued)
                                155

-------
                         6.0  CHARACTER MANIPULATION

          Any computer program that is to be directly controllable by or
informative to a human user must be able to accept and produce coded records.
Coded records are constructed of sequences of characters.  Thus, any FORTRAN
program that  is to communicate with a human user must be able to deal with
characters.  The only obvious mechanisms through which characters can be
dealt with in FORTRAN are the coded READ and WRITE statements with associated
FORMAT.  This chapter will show that these mechanisms cannot by themselves be
used to establish coded communications of the quality desired.  The reason
for this is that their use requires that the programmer know the FORMAT
of a record to be read or written at the time he writes the program.
          The process of dealing with characters in a, computer program is
referred to by the term character manipulation.   Generally, the following four
capabilities are encompassed under this term;
          (1)  The ability to read coded records and to decompose them
               into sequences of characters
          C2)  The ability to construct coded records from sequences
               of characters and to write them
          (3)  The ability to convert subsequence of characters into
               internal binary representations T- fixed point, floating
               point, or literal
          (4)  The ability to convert internal binary representations
               into subsequences of characters.
Within FORTRAN, character manipulation is performed by the system routines
which support execution.  The programmer does not have access to them;
he can only direct their action via formatted READ and WRITE statements.
This approach gives the programmer very little flexibility.  He needs some
techniques to pro ride additional control over the character manipulation
capabilities.
          The purpose of this chapter is to present these techniques as they
are implemented in CPSM4.   First, some problems  are presented which can
only be solved with great difficulty using standard approaches.  Then, the
approach taken in CPSM4 is described, first g'enerally, and then in terms

                                     156

-------
of  the actual utility routines being  used.   It  is  important to remember in
reading the discussion in this chapter  that  CPSM4  is run on many different
computers, which created a major design problem.   Thus,  the character manipu-
lation techniques chosen had  to be  programmable in a machine-independent form.
                                      157

-------
                      6.1  Displaying  Size  Information

          As discussed extensively in various parts of  this  document,  all
size information is entered into the program in decimal  inch form.   This
absolute,  though admittedly arbitrary rule, simplifies  the user's  task.
He can always be certain what units to use.  From the  standpoint of  the output,
however, there is no reason why the same absolute convention need  be followed.
It is a fairly standard convention to display small size measurements  in mesh
rather than in inches, and to display larger values in  fractional  rather than
decimal form.  Ideally,  then, program CPSM4, when it generates an  output
report, should follow the same output convention.  The  program does  follow
this convention.
          Unfortunately, the convention of showing size  values in  either mesh
or frational form, when possible, cannot be implemented  using a simple FORMAT
statement, since there is no FORMAT specification letter which performs the
desired converion - i.e., which generates the character  sequence 1 1/2 when
presented with the floating point value of 1.5 or which  generates  the character
sequence 28M when presented with the floating point value of  0.0232.  The
program itself then needs routines which can perform the desired conversions.
           The approach  taken in the original version of the  program was the
 exact inverse of the one taken in the present version.  In that version the
 user entered the size fraction classification scheme in fractional or mesh
 form (without the suffix M).  The program then converted these into inch form
 and retained the display forms for use in its output tables.  There are two
 objections to this approach - a serious one and a trivial one.
           The trivial objection is that the convention  of saving the input
 characters for later display purposes requires additional redundant core
 storage.   The objection is  trivial since the additional storage needed is
 slight.
                                       158

-------
         The serious objection  is  that  having  the program convert the input
to inches can cause interpretation  problems.  An actual example will illustrate
this point.  In a recent application  of  the  program,  one of the size fraction
break points was specified as  9  mesh,  equal  to  approximately 2 millimeters or
0.08 inches.  The table lookup in the routine which converted the input to
inches had entries for 8 and for 10 mesh,  but not for 9 mesh.  This is because
9 is not a frequently used mesh  classification.   The  user of the program,  in
this case the author who is unfamiliar with  the fine  points of size classifi-
cation schemes, did not realize  that  9 would not be recognized as a mesh.   The
convention in the program at that time was to assume  that any input size  de-
finition which was not recognizable as a mesh should  be assumed to be in  inches;
therefore, the internal size value  assigned  was 9 inches and not 0.08 inches.
The output, however, always displayed the  9, which was still believed by  the
author to be a recognized mesh size.  The program results were,  however, bizarre
since it treated those fractions which were  0.08 inches as being 9 inches.
Considerable time was spent in locating  the  problem.
         No such problems can occur  with  the present convention.  The pro-
gram will always use the size  range definitions as entered by the user.   If
those definitions contain even fractions or  meshes, then they will be dis-
played as such.  If the user makes  a  mistake, then that mistake will appear
explicitly in the output so that he can  see  it.
         The actual routine used to  generate the appropriate size display,
PRSIZE, will be discussed after  another  problem has been presented and after
some machinery has been introduced.
                                       159

-------
                     6.2  Displaying Unit Descriptors

          The other general problem requiring some extension of  the  standard
FORTRAN FORMAT approach has to do with the unit descriptors.  CPSM4  produces
three reports which include unit descriptors:
          (1)  The units input report
          (2)  The unit performance reports
          (3)  The summary of data for units reports.
Examples of all these reports can be found in part 1-2.1 which presents the
output for the handbook example.  In the units input report, the unit des-
criptor appears beginning in print column 51 surrounded by parentheses.  In
the unit performance reports, the descriptor appears centered under  the
title.  Finally, in the summary data for units report, the descriptor appears
beginning in print column 25 again surrounded by parentheses.
          In order to place these descriptors on these reports in the manner
described above, the programmer has two options.  He can hardwire the de-
scriptors into the program and, thus, give the user no control over  them;
or he can implement some sort of character manipulation routines which will
allow him to count the characters in the descriptors, place them at  will
in the output line, and concatenate them with other characters.
          The first alternative was chosen in the original version of program
CPSM4.  In that version the user had no control whatsoever over the  equipment
inventory to be available.   There were precisely 22 equipment types  from which
the user could choose.   Each equipment type had a hardwired set of curves,
identifying code, and descriptor associated with it.  Each unit in a particu-
lar plant configuration was described via the generic equipment type
descriptor.   This approach is obviously not appropriate for this version in
which the user has broad control over the equipment types and in which indi-
vidual uni's are assigned their own descriptors.
          The actual routine used to enter the unit descriptors into the
various report types is subroutine VESSEL.  This routine is documented
in Part 2 of Chapter 8.
                                      160

-------
                   6.3   Internal Character Display Codes

         The previous two parts of  this  chapter  discuss needs of program CPSM4
which require it to have some minimal  character manipulation capabilities.  The
key point to be developed in this part is that  if the processes of conversion
to and from internal representations can  be  separated from the process of
recognizing and producing sequences  of characters,  then FORTRAN provides a
straightforward capability for doing character manipulation - that of integer
arithmetic.  The key notion upon which this  point rests is that of the
internal character  display codes.  From a methodological standpoint,  the
approach to be taken here is based on  an  elemental result from computational
linguistics.  As Hopcroft and Ullman^  ' put  it, if a language V* has
an alphabet V containing p symbols then:  "We can  think of the sentences of
V* as numbers represented in base p".
          The traditional approach  to the supposed inability to control
 character manipulation explicitly via the format approach in FORTRAN is to
 augment the FORTRAN subroutine  and  function library with a series of utilities
 that  are written  in assembly language and  that   can perform the needed
 operations - the most basic of which  are masking,  shifting, and Boolean
 combination.  In fact, most manufacturers supply such utilities as part of
 their FORTRAN product set.  These utilities are  then available to the program-
 mer either as function references or  via the CALL statement.  This approach
 has two major drawbacks.  In the first place, any program using it is not
 machine independent.  Each time the program is to be run on a different type
 of machine, the character manipulation utilities have to be rewritten.  The
 second drawback is that the implementation  of  the character manipulation
 capabilities strictly via function  and subroutine references is clumsy at
 best.  At times, extremely detailed access  is  needed both to the input
 character stream and to the output  character stream.  This access is much
 easier to achieve  if the FORTRAN routines which  require it can have  direct
 contact with the character stream.  This point will not be developed further
 here, but several  examples of it will be seen  in later parts of this chapter.
                                      161

-------
          A final introductory comment before moving  into  a  discussion
of the approach to be taken here has to do with  the inconsistency  of
the internal representations of the characters on  the various  machines.
These representations are referred to as the internal character display
codes.  The observation to be made is that even  if a  program has access
to the individual characters, it is still not necessarily  machine  indepen-
dent.  Just as with FORMAT statements, the very  representation of  the
character varies from machine to machine.
          Assume that there are two utility routines  available which
have the ability to return the ith character in  the input  stream.  One
returns the character left-justified blank-filled to  the right, and the
other returns it right-justified zero-filled to  the left.  These are the two
forms in which individual characters are typically stored.   Suppose now that
it is necessary to determine whether or not some character in  the  input was
some particular character - say an A.  The statement  below in  (1)
          IF(ICHAR.EQ.IHA)                                              (1)
could be used if the character is being returned in ICHAR left-justified,
blank-filled to the right; while one of the statements in  (2)
          IBM 370 - IF(ICHAR.EQ.193)
          UNIVAC - IF(ICHAR.EQ.10)                                      (2)
          CDC 6400 - IF(ICHAR.EQ.l)
could be used if the character is being returned in ICHAR right-justified,
zero filled to the left.   The problem with the left-justified, blank-filled
to the right approach is  that even though it would function  properly on any
machine, the IF statement is not ANSI FORTRAN.  H-type constants,  referred to
as the literal forms of characters, may appear only in DATA  statements and in
FORMAT statements in ANSI FORTRAN.  The problem with  the right-justified,
zero-filled to the left approach is even worse.  This form of  the  character
simply constitutes the internal display code value in integer  form for the
character.   Integer constants are perfectly acceptable in ANSI FORTRAN IF
statements; thus, there is no syntax problem.  The problem is  semantic.  The
characters do not have the same internal display codes on  different machines.
The UNIVAC IF statement would be true on the UNIVAC if and only if the

                                     162

-------
character were an A; while  it  would be true on the CDC 6400 only if it were
a J.  There are no  standards  for what  the internal display codes should be
for characters.
         Using the characters as right-justified, zero-filled to the left
values, then, is not feasible  if  the  program is to be usable in a machine-
independent context.  The alternative  would appear to be some version of the
left-justified, blank-filled  to  the right approach modified to avoid the
strictly syntactic  problem  that  literal constants are restricted as to where
they may appear.  This  approach  is  very attractive for another reason.  It is
very easy to write  a utility  in  ANSI FORTRAN which returns characters left-
justified, blank-filled to  the right.   This is true because a character read
under an Al format  specification will  be of this form.
         The obvious modification  of  the first approach is to initialize the
value of the A literal  constant  in  a variable in a DATA statement.   The
character could then be compared to this initialized variable.  The following
shows how this would be written:
         DATA IA/1HA/                                                   (3)
         IF(ICHAR.EQ.IA)
This IF statement,  with associated  DATA statements, is syntactically well-formed
ANSI FORTRAN and will produce  the same branch on every computer.
         In general, the above  logic  could be expanded slightly in a
manner  that might  initialize  an entire array containing all the characters
of interest.  If at some point a routine needed to know if some input
character represented the ith character of interest, then it could  compare
that input character to the ith  word in the previously initialized  list.
This might look something like:
         DIMENSION LET(26)
         DATA LET(1),LET(2),LET(3),.../1HA,1HB,1HC,...                 (4)
         IF(ICHAR.EQ.LET(I))
The crucial characteristic  of  this  approach is that the value of some given
unknown character  could be  established by determining its sequence  number in
the list of possible characters.  For  each unique character recognizable by
the program, there  would be one  and only one unique sequence number in the
list of characters.  The approach taken here is based on this observation.

                                     163

-------
          The conclusion,  upon which the approach  taken  here  to  character
manipulation is based,  is that the FORTRAN language provides  no  first  order
techniques for referencing characters directly  if  the programs written in
that language are to be compiled on different machines.   The only method
available is to compare the characters to pre-established lists which contain
the values for those characters.  It is important to note that though the
representations established by literal constants in DATA  statements vary from
machine to machine, the programming statements needed to  establish them are
the same on every machine.  What is important is not what the  DATA statement
establishes per se, but rather the relationship between what is established
and what is received when the characters are transmitted.   In  particular,
the internal representation on any given machine for any  given character, say
A, when established via the notation 1HA in a DATA statement is identical to
the representation received for that character when it is read via an Al
format specification or when it is written via that specification.  It  does
not matter what the actual representations are; it only matters that the
above relationship holds for every character on every machine.
          Up until this point in the discussion,-the general problem of
character manipulation has been restricted to the problem of character
recognition.  The previous discussion has shown how characters can be
recognized via IF statements - i.e., how programs can be  written  which  contain
sections of code whose execution is contingent on the occurrence  of particular
characters in particular positions.  This ability to branch contingent  on the
presence of particular characters is not necessarily sufficient to produce an
efficient capability to convert strings of characters into  internal represen-
tations and visa versa.  Some stronger capability is needed.
          Earlier in this section it was observed that if characters were
returned right-justified, zero-filled to the left, then the resulting internal
display code values could simply be treated as integer constants.  On any
particular machine, the attractiveness of this result is  that  these internal
display code values could be used computationally'.  It is  this fact that is
used by assembly language routines  that do character manipulation.  The same
operation could be performed in FORTRAN for particular machines if the  FORTRAN
routines had access to the internal display code values in their  integer forms,

                                     164

-------
         As an example, Figure  II-6-3.1 shows the internal display code
values for the CDC 6400  computer in decimal,  integer form for the numeric
characters.  Assume a  function called  IRJZF is available, which returns the
internal display code  value  associated with a character stored right-
justified, zero filled to  the left  for the CDC 6400.  Using this routine it
would be straightforward to  write an ANSI FORTRAN routine which converts
numeric character strings  to their  integer equivalents.  Figure II-6-3.2
shows a function which performs  this operation.
         The basic trick  used in the  above function,  IVAL,  is that, for the
CDC 6400 computer, the actual integer  value expressed by a numeric character
equals the internal display  code value of that character minus 27.  Once the
expressed values of the  characters,  stored in the array ICHAR, can be computed
for the individual digits  in the number, the expressed value of the sequence
of characters can be computed directly by doing base ten arithmetic.  The
basic logic  shown in IVAL  is exactly the logic used within that CDC FORTRAN
system routine which processes I-format specifications (except for error
checks and alike).
         As pointed out earlier, however,  even if there were a function
IRJZF available for every  machine,  function IVAL would still not produce the
proper results on computers  other than CDC.  Function IVAL uses a trick
based on  the internal  display code  values for characters on CDC computers.
These values are not the same on other computers.  IVAL, if executed on an
IBM, DEC, or UNIVAC compuer, would  produce hash.
         What is needed is  a technique for producing some set of integer
values of the characters on  particular machines.  In other words, a method
is needed to generate  a  set  of machine-independent internal display code
values.  Whatever tricks were used  to  convert sequences of these display
values into  internal representations would then be valid on a machine-
independent  basis as well.
                                       165

-------
Character
0
1
2
3
4
Internal
Display
Code
27
28
29
30
31
Character
5
6
7
8
9
Internal
Display
Code
32
33
34
35
36
FIGURE II-6-3.1.  CDC NUMERIC INTERNAL DISPLAY CODES
                FUNCTION IVAL(ICHAR,NCHAR)
                DIMENSION ICHAR(NCHAR)
                IVAL=0
                DO 10 I=1,NCHAR
                IVAL=IVAL*10+IRJZF (ICHAR( I)) - 27
            10  CONTINUE
                RETURN
                END
  FIGURE II-6-3.2.  SIMPLE NUMERIC CONVERSION ROUTINE
                          166

-------
          Fortunately,  it is very easy to generate a set of machine-
independent  internal display code values relative to a given set of accept-
able  characters.   It was observed earlier in this section that if at some
point a  routine needed  to know if some input character represented the ith
character of interest,  then it could compare that input character to the ith
word  in  a previously established list of characters.  This previously
established  list  would  contain the entire character set of interest.  In
other words, each character would be represented by one and only one position
in the established list.  The sequence number of the position in the list
matching the character  would be a unique integer value corresponding to each
character and would not be dependent on the particular machine executing
the program.  This set  of sequence numbers is precisely the set of machine-
independent  display code values needed.
          Figure  II-6-3.3 shows a version of function IRJLZ.   This is a
referenced in function  IVAL that  returns a machine-independent internal dis-
play  code value for the alphanumeric characters which coincidentally match
the actual CDC internal display code values for those same characters.   This
version  of IRJLZ  is written in ANSI FORTRAN, with the exception of the DATA
statement which is abbreviated for the sake of simplicity.  If this version
of IRJLZ were used in conjunction with function IVAL as shown in Figure
II-6-3.2, then IVAL would produce the proper results on all machines.
     FUNCTION IRJLZ(ICHAR)
     DIMENSION L(36)
     DATA L(l)	,L(26),L(27),...,L(36)/1HA,...,1HZ,1HO,...1H9/
     DO 10 1=1,36
     IF(ICHAR.EQ.L(I))GOTO 15
 10  CONTINUE
     1=0
 15  IRJLZ=I
     RETURN
     END

                     FIGURE II-6-3.3.  FUNCTION IRJLZ

                                     167

-------
          The actual approach to internal character display codes, and thus
to character manipulation, taken in program CPSM4, can now be presented based
upon the previous discussion.  The next part of this chapter describes the
common block /CHRSET/ which contains the equivalent informaton to that con-
tained in the array L in function IRJLZ shown in Figure II-6-3.3.
                                     168

-------
                      6.4  The /CHRSET/ Common Block

          The  /CHRSET/  common block contains a single integer array LETTER
which is  dimensioned at 47.   This array is initialized as shown in
Figure II-6-4.1  in the  BLOCK DATA subroutine accompanying program CPSM4.
The user  might note that this rather clumsy form of the DATA statement is
the only  one accepted by ANSI FORTRAN.   The abbreviated forms of the DATA
statement using  subscripts or implied subscripts are not allowed.  This is
the most  common  violation of ANSI FORTRAN syntax that  occurs in programs
supposedly written in 'standard FORTRAN'.
   DATA LETTER(l),LETTER(2),LETTER(3),LETTER(4)/1HA,1HB,1HC,1HD/
   DATA LETTER(5),LETTER(6),LETTER(7),LETTER(8)/1HE,1HF,1HG,LHH;/
   DATA LETTER(9),LETTER(10),LETTER(11),LETTER(12)/1HI,1HJ,1HK,1HL/
   DATA LETTER(13),LETTER(14),LETTER(15),LETTER(16)/1HM,1HN,LHO,1HP/
   DATA LETTER(17),LETTER(18),LETTER(19),LETTER(20)/1HQ,1HR,1HS,1HT/
   DATA LETTER(21),LETTER(22),LETTER(23),LETTER(24)/1HU,1HV,1HW,1HX/
   DATA LETTER(25),LETTER(26),LETTER(27),LETTER(28)/1HY,1HZ,1HO,1H1/
   DATA LETTER(29),LETTER(30),LETTER(31),LETTER(32)/1H2,1H3,1H4,1H5/
   DATA LETTER(33),LETTER(34),LETTER(35),LETTER(36)/1H6,1H7,1H8,1H9/
   DATA LETTER(37),LETTER(38),LETTER(39),LETTER(40)/1H+,1H-,1H*,1H//
   DATA LETTER(41),LETTER(42),LETTER(43),LETTER(44)/1H(,1H),1H$,1H=/
   DATA LETTER(45),LETTER(46),LETTER(47)/1H ,1H,,1H./
                 FIGURE II-6-4.1.   INITIALIZATION OF LETTER ARRAY
                                      169

-------
          The array LETTER, then, contains all of the characters which will
be recognized by the program in descriptors.  This group was chosen since it
represents the standard FORTRAN character set and since these are available
on all machines.  As will be seen later, any character which is not in the
above set will be treated as though it were a blank.
          Returning now to the basic methodological result from computational
linguistics presented in the previous part, it was observed that the
sentences in language V* over an alphabet V, containing p symbols, can be
represented as numbers base p.  All descriptors entering the program can be
thought of as sentences of the language LETTER* over the alphabet LETTER.
Therefore, all descriptors can be represented as numbers base 47, which is
the number of symbols in LETTER.  To allow for additional characters that
may be necessary, the descriptors are actually represented as base 64 numbers.
          Given the above, each individual character, then, must represent a
single numeric digit base 64.  This implies that each must have a base 10
equivalent value of between 0 and 63.  These single digit values are the
internal display code values used within the program.  They are equal to
the sequence number of the character in the LETTER array in the /CHRSET/
common block.  Figure II-6-4.2 shows these internal display code values.
                                      170

-------
Character
A
B
C
D
E
F
G
H
I
J
K
L
M
N
0
P
Internal
display
code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Character
Q
R
S
T
U
V
W
X
Y
Z
0
1
2
3
4
5
Internal
display
code Character
17 6
18 7
19 8
20 9
21 +
22
23 *
24 /
25 (
26 )
27 $
28
29 blank
30
31
32
Internal
display
code
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

FIGURE II-6-4.2.  INTERNAL DISPLAY CODES FOR CPSM4.
                        171

-------
                      6.5  The /CODERC/  Common  Block

        Before moving into a discussion of the  actual character manipulation
routines themselves, three additional common blocks must  be  presented.   The
first common block, /CODERC/ contains the raw coded record being processed,
interpreted, or constructed by the manipulation routine.  The characters
themselves are either represented in their literal form,  left-justified
blank-filled to the right, or in the CPSM4 internal display  code form depend-
ing on the context.
        The block itself contains three quantities - ICOL, LCOL, and LINE.
ICOL is a simple integer variable that typically indicates the relative
starting address in the LINE array at which processing should begin.  The
LCOL integer variable indicates the relative ending address  for processing.
The particular uses of the variables is obvious in the routines manipulating
them.  The LINE array is a one-dimensional integer array  containing the
unpacked characters.
                                      172

-------
                      6.6  The  /FILES/  Common  Block

         The /FILES/ common block  contains  the unit numbers  of the file from
which coded input records are to be read,  the file  to which coded output
records are to be sent, and the  file to  be used for off-line  storage.   These
values are contained in the integer variables READER, PRINTR,  and OFFLIN,
respectively.  Figure II'-6-6.1 shows the initialization  of these variables
as performed in the BLOCK DATA subroutine.   Thus,  cards  are read from TAPE5,
written to TAPE6, and no off-line records  are written in the  current version.
                                DATA READER/5/
                                DATA PRINTR/6/
                                DATA OFFLIN/O/
              FIGURE  II-6-6.1.   INITIALIZATION OF /FILES/  VARIABLES
                                      173

-------
                       6.7  The /CONST/ Common Block

          The final common block to be discussed before beginning the actual
discussion of the character manipulation routines themselves is the /CONST/
common block.  This block contains values of constants needed by the character
manipulation routines.   Figure II-6-7.1 shows the initialization of the
variables in this common block as performed in the BLOCK DATA subroutine.  The
real one-dimensional array TENS is used to determine the number of decimal
places required for a real numeric value.  The integer variable ICOM is used
by the character manipulation routine CNVTIE as the space between commas in
integer values.
DATA TENS(1),TENS(2),TENS(3),TENS(4)/10.,100.,1000.,10000./
DATA TENS(5),TENS(6),TENS(7)/100000.,1000000.,10000000./
DATA TENS(8),TENS(9)/100000000.,1000000000./
DATA ICOM /3/
             FIGURE II-6-7.1.  INITIALIZATION OF /CONST/ VARIABLES,
                                       174

-------
                          6.8  Subroutine CNVTIE

         The fundamental output conversion  routine within  program CPSM4 is
subroutine CNVTIE.  This routine converts packed character  sequence numbers,
fixed point numeric values and floating point numeric  values  into  characters
for display.  The listing and basic documentation  of CNVTIE given  in Figure
II-6-8.1 are self-explanatory given the discussion in  the early  part of  this
chapter.
                                      175

-------
c
c
c
c
o
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
C
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
b
c
SUBROUTINE JNVTIE
-------
C                  FIELD.
C     IlilS,  Dli     THI.> TYPF,_ESS  VARIABLE CONTAINS  THE  ACTUAL
C                  VALUE.
C     MOu           THIS INTEGER  VARIABLE SPECIFIES  THE  MODULUS USED
C                  TO CONVERT  THE  DIGITS TO CHARACTER SEQUENCE NUMBERS,
C     IWL           THIS INTEGER  VARIABLE SPECIFIES  THE  ACTUAL NUMBER
C                  OF POSITIONS  ALLOCATED FOP THE  CHARACTERS.
C     IDIG          THIS INTEGER  VARIABLE IS USEC  A^» TEMPORARY STORAGE
C                  FOR THE niSPLAY VALUE Ai IT  IS  BEING MANIPULATED.
C     POW           THIS REAL  VARIABLE CONTAINS  THE  VALUE OF TEN RAISED
L                  T0 THE  NUMBER  OF uECIMAL PLACES  FOR  THE CONVERSION
c                  OF FLOATING POINT REPRESENTATIONS.
c
C     COMMON       VARIABLES  USED
c     /CODER:/     LINE,NCHA-
C     /CHRSET/     LETTER
G     /CONST/       TENS,I30M
C
C     EXTERNALS     IA3S, IFIX
u
      COMM ON/CO GE~C/NCHAP,LCOL,LlNE( 150)
      CO MMON/CONST/TENS(9),1COM
      INTEGER VALUE,FIELD
      EQUIVALENCE (015,1015)
      EQUIVALENCE (IVAL,VAL)
      DATA  ICC/^6/
C
C     STEP  1        COMPUTE  THE  HIGH-OKCER FIELD  POSITION AND IF THE
C                  FIELD HAS  A  FIXED SIZE INCREMENT  THE  NUMBER OF
C                  CHARACTERS  IN  THE CURRENT RECORD  ACCORDINGLY. NOTE
C                  THE USE  OF  THE  FORTRAN   FUNCTION  I A E S.
C
      IC = NCHAR+1
      NCHAR=NC4AK*-IAES( FIELD)
C
G     STEP  2        USING THE   FORTRAN  FUNCTION  I A B S  SET
C                  THE DISPLAY  VALUE EQUAL TO THE  ABSOLUTE VALUE OF
C                  THE TIE  VALUE, AND BRANCH ACCORDING  TO ITS TYPE.
C                  BRANCH     TYPE OF VALUE
L                  STEP 3     CODED
C                  STEP 5     FLOATING ^OINT
C                  STEP 7     FIXED POINT
C
      IDIS=lM3S(VALUE)
      iF(ITYPE*l)10,10,20
C
C     STEP  3        CODEC CHARACTERS nRE 8EING GENERATED. IF THE VALUE
L-                  CONTAINS NONE, BRANCH TO STEP  25.
                 FIGURE II-6-8.1.  (Continued)

                                 177

-------
c
   10 IF*IDISI15,160,15
C
C     STEP t*        SET THE MODULUS,  OFFSET, ANC  SPACING TO PROCESS A
C                   CODED VALUE  AND  BRANCH TO STEP  9.
C
      IAQD=0
      ICM=200
      GO TO  UO
C
c     STEP 5-       A FLOATING POINT  VALUE is BEING  PROCESSED. COMPUTE
C                   THE FIXED POINT  DISPLAY VALUE  ANC  IF NO DECIMAL
C                   PLACES ARE REQUESTED, BRANCH TO  STEP 7,
C
   20 POW=1. 0
      IF (ITYPE. GT. 0)POW = TENS (ITYPE)
      TF UTYPE) 25,30, 25
C
u     STEP  6        A DECIMAL POINT  WILL EE NEEDED  AS A SEPARATOR. SET
L                   THE SEPARATOR  VALUE AND SPACING ACCORDINGLY AND
C                   BRANCH TO STEP  8.
C
   25 ICM=ITY»E
      GO  TO  35
C
C     5TEP 7        A NUMERIC  VALUE  WITH NO DECIMAL  PLACES IS BEING
C                   PROCESSED.  SET THE SEPARATOR  VALUE  TO INDICATE A
C                   COMMA C+6)  AND SET THE SPACING  AS  INDICATED.
r
w
   30 IuM=IQOM
      ICC=<+6
C
C     STEP a        A NUMERIC  VALUE  IS BEING PROCESSED.  SET THE MODU-
C                   LUS AND OFF-SET  ACCORDINGLY.
C
       STEP  9        IF THE VA^UE  IS  BEING RiGHT  JUSTIFIED, BRANCH TO
                    STEP 16.

       IF (FIELD) k5, <*5, 105

       ?""EP  11       THE i/ALUE  IS  6EING s.EF T- JUSTIF IEO .  THE NUMBER OF
                    °05ITIONS  KEQUI^EC MUST BE  COMPUTED. BEGIN BY OET
                    t^MINING THE  NUMBER OF DIGITS  IN THE VALUE.
                  FIGURE II-6-8.1.   (Continued)

                                 178

-------
      IOIG=IDIS
      IDIG=IuT3/MOC
      IFtlDIG) 50,55,50
C
C     bTEP  11      THE NUMBER  OF  DIGITS HAS  BEEN  COMPUTED. IF THE
C                  VALUE IS  COOED,  BRANCH TO  STEP 13.
C
   55  IFUADD) 60,85,60
C
C     STEP  12      THE VALUE  IS NUMERIC. COMPUTE  THE NUMBER OF  ADD-
o                  ITIQNAL  POSITIONS REQUIRED  BY  THE SIGN, THE  COMHA
C                  SEPARATORS,  AND  THE DECIMAL  POINT AS RELEVANT.
C
   60  IF(ITYPE) 65, 65, 70
   65  IWD=IWO+ (IWD-1)/ICOM
      GO  TO 75
   70  CONTINUE
      IDIG=ICIS/MOD
      IF( (IOIS-10IG*MOD) .NE. 01  GOTO 71
      IDIS = IPIG
      ICM=ICM-1
      GOTO  70
   fl  IWD=IWO-KIWD-ITYPE-1)/ICOM + 1
      IFdFIX (t/AL) .FQ.O) IWD = 1WD + 1
   75  IF(VALUE) 8(1,65, 85
   80  lrtO=IWD+l
C
C     STEP  13       THE NUMBER  OF  POSITIONS REQUIRED BY THE tfALUE HAS
C                  BEEN COMPUTED, IF THE VALUE  IS  TO BE CONCATENATED,
C                  BRANCH  TO STEP 15.
C
   85  IF(FIELD) 90, 100, 100
C
C     STEP  lif       THE VALUE IS BEING i-EFT- JUSTIF IEO IN A FIXED FIELD
C                  IF THE  REQUIRED NUMBER OF  POSITIONS EXCEEDS THE
C                  FIELD WIDTH, SET THEM EQUAL  TO  THE FIELD WIDTH,
C                  THEN BRANCH TO STEP 17.
C
   90  uC=IC-FI£LD-l
      00  91 i=IC,LC
   91  LINE (I )=^5
      IFdWD+FIEuD)  110,110,95
   95  iWQ = -FIF>_D
      GO  TO 110
                  FIGURE II-6-8.1.  (Continued)
                                 179

-------
C     STEP 15       THE  VALUE IS BEING  CONCATENATED. ADO  THE  NUMBER OF
C                   POSITIONS REQUIRED  BY  IT  TO THE NUMBER  OF  CHAR-
C                   AuTE
-------
c
      STEP 21       IF  ThE  VA^UE CONTAINS  DIGITS,  OR  IF  THE DIGIT  JUST
C                   °3SIT;nK'EL 13  TO  THE:  RIGHT OF  A DECIMAL POINT,
u                   LOOP  SACK TO STtP  13.
L
      iFliOIS)115,135,115
  135  iF(ICC-i»7M40,ii5 ,140
C
C     STEP 22       IF  THF  TIE VA_UE  WHS  POSITIVE, 3RANCH TO STEP  25.
C
  litO  IF(tfALUE) 145, 160,160
C
L,     STCB 23       TM£  VALUE WAS  NEGATIVE.  IF THERE  IS  ANOTHER POS-
C                   ITIOM AVAILABLE,  INSERT A MINUS SIGN AND BRANCH TO
C                   STEP  25. ELSE, CONTINUE TO STEP 24.
C
  ifr5  LC=LC-1
      IFfLC-IC)155,150,150
  150  LINE(LC^=36
      GO TO 160
C
C     iTEP 2%       THE  VALUE HAS  OVERFLOWED THE FIELD.  INSERT AN  AS-
C                   TERIX IN THE HIGH  O^DER POSITION.
C
  155  LlNE(IC»=39
C
C     STEP 25       THE  VAi_UE HAS  BEEN CONVERTED.  RESET  THE COMMA
C                   SPACING  VARIABLE  TO 3  AND END  LOCAL  PROCESSING.
C
  16Q  ICOM=3
  999  CONTINUE
      00 170 I = IC,NCHAR
      J=LINE (I)
  178  LINEd ) = LETTER{ J)
      RETURN
      END
                  FIGURE II-6-8.1.   (Continued)
                                 181

-------
                          6.9  Subroutine  PRSIZE

          Sufficient machinery has now been introduced  to  deal  directly with
the problem introduced in part 6.1 of this chapter.   Summarizing, all  size
information should be displayed in mesh form if it represents an even  mesh
size or in fractional form if it represents an even  fraction  (eighths).
Otherwise, it should be shown in decimal inches with up to  five decimal
places.  Not mentioned before, the size displays should be  left-justified
with concatenation to the right, if they are to appear  in  table row de-
scriptors; and they are to be right-justified if they appear within column
headings.  Subroutine PRSIZE is the core routine used to implement this set
of capabilities.  It makes use of subroutine CNVTIE,  which  was  described
earlier.
          Figure II-6-9.1 shows the mesh size displays produced by subroutine
PRSIZE along with their equivalents in decimal inches and their internal dis-
play codes shown in base 10.  Equivalently, Figure II-6-9.2 shows this same
information for the even fractions.  The values shown in the last two  columns
are initialized in the subroutine in a DATA statement.  Some explanation of
the internal display codes is probably needed.
          Let D be a function which specifies the base 10 internal display
code value for a given character or sequence of characters.  The values of D
for single characters are known and are given in Figure II-6-4.2.  Now the
value of a sequence of characters C ,...,C  can be computed from the formula
                                   K.      O
shown in (1)
                         0
          D(C ,...,C ) = £  D(C.).64                                    (D
             k      °   i=k    1
This equation, of course, is the standard definition  of the base 10 value of
a base 64 number.  To see how this calculation works, consider  the computation
shown in (2) of the internal display code value of the display  3/8.
          D(3/8) = D(3)x64x64-l-D(/)x64+D(8)
                 = 30x4096+40x64+35x1
                 = 122880+2560+35                                       (2)
                 = 125475
This is the internal display code value shown for 3/8 in Figure II-6-9.2.

                                      182

-------
Mesh display
4M
6M
8M
10M
14M
20M
' 28M
35M
48M
65M
100M
15 OM
200M
270M
325M
400M
Decimal inches
0.185
0.131
0.093
0.065
0.046
0.0328
0.0232
0.0164
0.0116
0.0082
0.0058
0.0041
0.0029
0.0021
0.0017
0.0015
Internal display
1997
2125
2253
116429
116685
120525
121037
124941
129229
137229
7452365
7472845
7714509
7743181
7985165
8238797
FIGURE II-6-9.1.  MESH SIZES
              183

-------
Fractional display
7/8
3/4
5/8
1/2
3/8
1/4
1/8
Decimal inches
0.875
0.75
0.625
0.5
0.375
0.25
0.125
Internal display code
141859
125471
133667
117277
125475
117279
117283
FIGURE II-6-9.2.  FRACTIONAL SIZES
                184

-------
         At first glance,  the  above  calculation looks very imposing;
however, they actually go quite quickly  on  a desk calculator.   A simpler
form to compute is shown in (3).
         D(3/8) = (D(3)x64+D(/))x64+D(8)                                (3)
         Given the initialization  of the internal display codes,  the re-
mainder of the routine is straightforward as described in the  basic documen-
tation.  Figure II-6-9.3 contains the flowchart for PRSIZE; while  Figure
II-6-9.4 contains the listing and basic  documentation.
                                      185

-------
                             /    v^   —    \
FIGURE  II-6-9.3.  FLOWCHART FOR SUBROUTINE PRSIZE
                      186

-------
c
G
C
C
o
o
£
.c
c
c
c
c
c
c
G
c
c
c
c
c
c
c
c
c
c
c
c
c
c
G
c
G
c
G
C
C
C
c
c
c
c
G
      SUBROUTINE ^K3I ZE (51 ZE , WI QTH)

      TiTLE(PRINT SIZE  VA^UE)
SUBROUTINE
THIS ROUTINE AS
SENTEO A3 FLOAT
CORRESPONDS TO
Pi_AYEQ Ai SUCH
VALUE 13 AN EVE
THE ROUTINE P*I
ROUTINE PRxNTS
PLACES. THE ROU
DEPENDING UPON
               ZE IS  USED TO CONTROL THE
               SUMFS  THAT ALL SIZE VALUE
               ING POINT  INCHES. IF THAT
               ONE OF  THE STANDARD MESH
               FOLuO^EO  BY THE UNITS IND
               N FRACTION IN HALVESt FOR
               NTb IT  IN  FRACTIONAL FORM
               THE VALUE  IN DECIMAL FORM
               TINE WILL  EITHER RIGHT OR
               THE CONTEXT.
                             PRINTING  OF  SIZE VALUES.
                            S ARE  INTERNALLY REPRF-
                             FLOATING  POINT  VALUE
                            SIZES,  THEN  IT  IS DIS-
                            ICATOR  (M).  IF  THE SIZE
                            THS, OR IN EIGHTS, THEN
                            . IN ALL OTHER  CASES THE
                             WITH  UP TO  FIVE DECIMAL
                             LEFT  JUSTIFY THE DISPLAY,
PARANETEt
SIZF

WIDTH
COMMON
/CODERC/
/CHRSET/

EXTERNALS

VARIABLE
VAL

MESH

FRAC

IFRAC
LC
IN
                                                        OF THE FIELD
                                                        THAN ZERO,
                                                        FIELD OF
                                                        THE OIS-
DESCRIPTION
THIS KEAL  VARIABLE CONTAINS THE SIZE  VALUE TO BE
DISPLAYED.
THa.S IMTEGER  VARIABLE CONTAINS THE  WIDTH
TO CONTAIN THE  DISPLAY. IF IT IS GREATER
THEN THE DISPLAY  is RIGHT JUSTIFIED  IN  A
THE SPECIFIED  WIDTH.  IF IT IS ZERO,  THEN
PLAY IS LEFT-JUSTIFIEj IN A FIELD OF  WHATEVER WIDTH
IS NEEDED  TO  CONTAIN  THE DISPLAY CHARACTERS GENERATED,

VARIABLES  USED
!30L,LINE
LETTER

A6S, CNVTIE,  IFIX, FLOAT

DESCRIPTION
THIS REAL  1-OIMENSIONAL ARRAY CONTAINS  THE SIZES IN
INCHES 3F  THE  STANDARD MESH SIZES.
THIS INTEGER  1-DIMENS10NAL ARRAY CONTAINS  THE MESH
COOtS STORED  AS CHARACTER SEQUENCES  BASE  «i7.
THIS REAL  1-DIMENSIONAL ARRAY CONTAINS  THE VALUES
FO* THE EVEN  FRACTIONS RECOGNIZED BY  THE  ROUTINE.
THIS INTEGER  1-OIMENSIONAL ARRAY CONTAINS  THE DIS-
PLAY CODES NEEDED FOR THE FRACTIONS  STORED AS NUM-
BERS ?ASE  *»7.
THIS REAL  VARIABLE CONTAINS THE THRESHHOLO VALUE
FOR REAL EQUALITY COMPARISONS.
THIS INTEGER  VARIABLE CONTAINS THE  STARTING COLUHN
POSITION IN THE DISPLAY WHEN THIS ROUTINE  WAS CALLED.
THIS DUMMY INTEGER VARIABLE IS USED  TO  CONTROL THE
MOVEMENT THROUGH  LOCAL LOOPS.
THIS INTEGER  VARIABLE CONTAINS THE  NONOECIHAL VALUE
OF THE SIZE.
         FIGURE II-6-9.4.  FORTRAN LISTING FOR SUBROUTINE PRSIZE
                                 187

-------
C     REM           THIS  5EAL VARIABLE CONTAINS  THE DECIMAL  PORTION  OF
C                   THE SIZE,
C     1C            THIS  INTEGER VARIABLE  IS  USED TO CONTAIN THE  ENDING
C                   POSITION OF THE DISPLAY.
C
      DIMENSION  VAL<16), MESH(16),FRAC (7),IFRAC(7)
      COMHON/CODERC/1COL,LCOL,LINE(150)
      CONHON/aH*SET/LETTER(1»7l
      INTEGER WIDTH
      DATA EPS/0.OOQ001/
      DATA MESH(l),MESH(?),WESHm,MESH(«»l/1997,2i25,2253,ll&'»29/
      DATA MESH(5) , MESH(6) ,WESH(7»,MESHI8)/116685,1205 25, 121037,12%9«»1/
      DATA MESH(9),MESH(10>,MESH(111          /129229,137229,7%52365/
      DATA «ESH<12)/7<*72845/
      DATA MESH (13) ,HESH (1%) , MESH (15 )/771*509, 77<»3181, 798516 5/
      DATA HESH<16)/S238797/
      DATA IFRAC(1),IFRAC<2), IFRAC (3) /1M 859,125^71,133667/
      DATA IFRAC Ct) ,IFRAL (5 J , IFRAC (6 )/117277,125**75, 117279/
      DATA IFR&C(7)/117283/
      DATA VAL(1),VAL(2),VAL13),VAL (<») /O. 185, 0. 131, fl.093, 0. 065/
      DATA VAL<5),VAL(6),VAL(7) , VAL ( 8 ) /O. OV6, 0. 0328, 0. 0 232 , 0. 016 W
      DATA VAL (9) , VAL (10) , VAL (11) ,VAL (12) / 0.0116, 0. 0082,0. 04358, 0.0041/
      DATA ./AL(13) ,^AL
-------
C                  BRANCH  TO STEP 6.
C
   20  IN=IFIX(5IZE)
      ^EM-SIZE-FLOATdN)
      IF(REV|.GT.EPS)GO  TO  25
C
C     STLP ?       THE  SIZE  REPRESENTS  AN  EVEN NUMBER  OF  INCHES. DIS-
C                  PLAY  THEM AND BRANCH  TO STEP 12.
C
      i^MLL SNVTIEdN, 0»-1)
      GO  TO 55
C
G     STtiP 6       DETERMINE IF THE DECIMAL PORTION REPFSENTS AN EVEN
C                  FRACTION. IF NOT, BRANCH TO STEP 11.
C
   25  DO  SO 1=1,7
      1FCASS(REM-F«ACd)>,LT,EPS)GO TO  35
   30  CONTINUE
      GO  TO U5
C
C     STEP 7       THE  CECIMAL PORTION  IS  AN EVEN FRACTION.  IF THE
G                  NONbFCIMAi. PORTION IS  ZERO, BRANCH  TO  STEP10,
C
   *5  IFflN.EQ. 0)GO TO  ^
C
C     STEP 8       DISPLAY  THE NONDFCIMAL  PORTION OF THE  FRACTION USING
C                  SUBROUTINE  C N V D  I  S  .
C
      CALL CNrfTIE(IN,Ot-l)
C
C     STEP 9       INSERT  A  BLANK BETWEEN  THE  NONFRACTIONAL  PART AND
C                  THE  FOLLOWING FRACTIONAL PART.
C
      IUOL = ICOL«-1
      LINE(ICOL)=LETTEPU5)
C
C     STEP 10      USING  SUBROUTINE-  C  N  V D I S  DISPLAY  THE FRACTIONAL
C                  PART  OF  THE SIZE VALUE  AND  BRANCH TO STEP 12.
C
   kO  CALL CNVTIE( IFRAC (I) ,0,-2)
      GO  TO 55
C
C     STEP 11      THE  SIZE  VALUE DOES  NOT REPRESENT ANY  EVEN VALUE.
C                  USING  SUBROUTINE  C  N  V V A L  DISPLAY THE VALUE
C                  WITH  UP  TO 5 CECIMAu  PLACES.
C          ••
   <*5  CALL GNVT1E(SIZE,0,5)
C
C     STEP 12      THE  DISPLAY HAS BEEN  LFFT-JUSTIFIED .  IF THAT IS THE

                     FIGURE II-6-9.4.   (Continued)


                                 189

-------
C                   DESIRED ORIENTATION,  END LOCAL PROCESSING.
C
   55 IFIWIDTH.EQ.0)50 TO 993
C
C     STEP 13       THE CHARACTERS MUST  BE  RIGHT JUSTIFIED.  MOVE  THEN
C                   TO  THE RIGHT THE  APPROPRIATE NUMBER  OF PLACES.
C
      IC = LOWI3TH
   60 LINE(IG)=LINE(ICOL)
      IuOL=ICOL-l
      iC=IC-l
      IFdLOL.GT.LOGO TO 60
      ICOL=LC+HICTH
C
C     5TEP Ik       iF  THE LEFT-HAND  SIDE  OF THE FIELD CONTAINS SPACES,
C                   BLANK THESE OUT.
C
      LC = LC+1
      1FCIC.LT.LOGO TO 999
      DO 65  I=LC,IC
      LiNEU )=LETTER(^5)
   65 CONTINUE
C
C     STEP 15       END LOCAL PROCESSING.
C
  999 RETURN
      END
                  FIGURE II-6-9.4.   (Continued)
                                 190

-------
                           6.10  Subroutine RDDESC

         Another problem in CPSM4 requiring  some  character manipulation
capability involved the ability to display  the  unit  descriptions in various
types of contexts.  This problem was  introduced in part  6.2 of this chapter.
Subroutine RDDESC is used to read the descriptor into  a  linear array.   Given
the previous discussion, the methodology used is straightforward from the
basic documentation which is shown in Figure  II-6-10.1.   The routine does
little non-local looping; therefore,  no pictorial  flowchart is included.
                                      191

-------
c
c
c
c
L.
c
c
c
c
c
c
c
c
c
c
c
c
G
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
SUBROUTINE RGDESC (DE Su , NCELU


TITLE(*£AD DESCRIPTOR)


SUePOUTINL RODESC IS  USED TO READ A DESCRIPTOR CONTAINED WITHIN

A SPECIFIED FIELD AND  STORED IN LITERAL  FORM AND TO CONVERT IT
INTO A N-PFECISION  NUMBER REPRESENTED BASE  61*.


PARAMETER    DESCRIPTION
OESC         THIS 1-3IMENSIONAL, INTEGER ARRAY RETURNS THE 8ASE
             6
-------
C     STE°  ?       INITIALIZE. THE NUMBER  DIGITS IN THE  DESCRIPTOR AT
C                  ZERO,  4NO THE NUMBEC  OF CELLS USED  AT  1.
C
      DESC (1) =0
      NCETLL=1
C
C     STEP  *       FJ.NU-  "HE IkAUING  NQNJ-oLANK CHARACTER  IN  THE INPUT
C                  FIELL.  IF THE FIELD  IS  ALL 5LANK, END  LOCAL PRO-
C                  CESSIMG.
C
      i.C = LCOL
   15 1F<^1NE (LC)-«*5) 50,^0,50
   fcO LU = LC-1
      IF (LCI 999,999,35
C
u     STEP  <+       ENTER  THE NUMBER OF  CHARACTERS IN THE  DESCRIPTOR IN
C                  WORC  1  OF THE DESCRIPTOR KETURN ARRAY.
G
   50 CONTINUE
      DESCd ) = .u-ICO. + l
C
I     STEP  5       T-^E  NEXT BLOCK OF  DIGITS MAY NOW BE  STORED. INCRE-
C                  MENT  THE NUMBER OF CFLLS USEO 9Y ONE AND  INITIALIZE
C                  THE  NErf CELi- AT ZERO.
C
   55 NCFLL=N3£cL + l
      DESL (NICELD =0
C
C     STEP  6       INITIALIZE THE DUMMY  COUNTER TO CONTFOL THE PACKING
C                  OF THE  CHARACTERS  AT  ZERO.
G
      DO  60 1=1,5
G
C     STEP  7       STORE  THF NEXT DIGIT  IN THE CURRENT  CELL,
C
      OESC(NCELL)=OESC(NCFLL)*6^4-LINE(ICOL)
C
o     STEP  6       INCREMENT THE ADDRESS  OF THE NEXT CHARACTER BY ONE,
C                  AND  IF  ALL CHARACTERS  HAYE BEEN PROCESSED, END
C                  LOCAL  PROCESSING.
C
      ICOL=ICO_ + 1
      IF(LC-I30D 999,60,F-0
C
C     STEP  9       1NCKEMEWT THE DUMMY  COUNTER CONTROLiNG THE PACKING
C                  OF  THE  CUFRtNT CELL  BY  1, AND IF IT  DOES  NOT EXCEED
C                  5  LOOP  3ACK TO STEP  7.  IF IT DOES,  LOOP BACK TO
G                  STEP  5.
C


                 FIGURE II-6-10.1.  (Continued)

                                 193

-------
 60  CONTINUE
     GO  T0 "55
999  P£TURN
     END
                 FIGURE II-6-11.1.  (Continued
                                 194

-------
                          6.11  Subroutine PRDESC

         The routine  that  reconverts  stored  descriptors back into display
form is subroutine PRDESC.   The  routine  is straightforward,  given the
previous discussion.   Figure II-6-11.1 contains  the listing  and basic docu-
mentation.  The logical  flow of  the  routine is very simple;  therefore, no
pictorial flowchart is included.
                                     195

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
I*
c
c
c
c
c
c
c
c
c
c
c
c
c
c
u
c
c
c
c
SU?ROUTINE PP.DESC (DESC)


TITLEiPRINT DESCRIPTOR)


SUBROUTINE ^RDESC  iS  USED TO CONTROL  THE  PRINTING OF DESCRIPTORS.
IN OTHER WORiiSt  THIS  ROUTINE CONVERTS  A  DESCRIPTOR STORED  IN  STAN-
DARD STRING FO*M INTO A  SEQUENCE OF CHARACTERS WHICH WAY  BE

PRINTED,
PARAMETER

DESC
COMMON
/CHRSET/
/CODERC/


VARIABLE

IW
NC
DESCRIPTION
THIS i-DIMENSIONAL INTEGER ARRAY  CONTAINS THE DES-
             CRIPTOR
             FORMAT.
        TO  BE  PRINTED STORED IN STANDARD STRING
                                USED  TO CONTAIN THE

                                ARRAY  OR THE CURRENT
IWORD


1C



LET


I
VARIABLES USED
LETTER

ICOLt LINE


DESCRIPTION

THIS DUMMY INTEGER VARIABLE IS

RELATIVE ADDRESS  IN THE STRING
WORD BEING PROCESSED.
THIS INTEGER  VARIABLE  CONTAINS THE  NUMBER OF CHAR-
ACTERS YET TO  BE  REMOVED FROM THE STRING.
THIS INTEGER  VARIABLE  CONTAINS THE  NUMBER OF CHAR-
ACTERS WITHIN  THE  CURRENT WORD OF THE  STRING.

THIS INTEGER  VARIABLE  CONTAINS THE  CURRENT WORD OF
THE STRING BEING  PROCESSED.

THIS TEMPORARY  INTEGER VARIABLE CONTAINS THE PAR-

TIAcLY UNPACKED CHARACTERS OF THE CURRENT WORD OF
THE STRING BEING  PROCESSED.

THIS INTEGER  VARIABLE  CONTAINS THE  SEQUENCE NUMBER
THE CJRRENT CHARACTER  UNPACKED FROM THE STRING.
THIS DUMMY INTEGER VARIABLE IS USED AS A DO-LOOP
COUNTER.
                                                     OF
      DIMENSION DESC(l)

      COMMON/CHRSET/LETIERU7)

      COMHON/uODERC/ICOL,LCOL,LINE(15fl)
      INTEGER DESC
      STEP 1
              INITIALIZE  THE SUBSCRIPT  FOR  THE STRING ARRAY,
              OBTAIN  THE  NUMBER OF CHARACTERS IN THE STRING, AND

              INITIALIZE  THE NUMBER OF  CHARACTERS PACKED INTO  THE

              FIRST WORD  AT THE MAXIMUM NUMBER OF CHARATERS ALLOWED
              PER  WORD.
      IW = 1

      NC=DESC(IW)
         FIGURE II-6-11.1.  FORTRAN LISTING FOR SUBROUTINE PRDESC


                                 196

-------
c
c
c
c
c
c

c
c
c
c
c
c
c
c

G
c
c
     NPW=5
   STEP  2
   15
IF TH- NUMBER  OF  CHARACTERS REMAINING  IN  THE  STRING
IS LESS THAN THE  NUMBER OF uHARACTERS  IN  THE  CURRENT
WORJ, SET THE  NUMBED  OF CHARACTERS  IN  THE  WORD  EQUAL
TO TH<- NUMBER  OF  ^HARACTFRS REMAINING  IN  THE  STRING.
10  IF(NPW.GT,NC)NPW=NC
   STEP  3
UNPACK
STORED
ANu STORE IN  THE
IN THE NFXT WORD
OUTPUT LINE THE CHARACTERS
OF THE STRING.
      ICOL=ICOL*N3W
      IWORO=QE5C(IH)

      00  IF  1=1,
   LINE4ICO_)=LETTE*(LET)

   ICOL=ICOL-1

   !WORD=IC
   CONTINUE
      STEP
      NC=NC-NPW
   STEP 5
                INCREMENT  THE  AOCRESS IN THE OUTPUT  ARRAY  OF  THE
                LAST CHARACTER STORED BY THE NUMBER  OF  CHARACTERS

                IN TH^ LAST  PROCESSED WORD, AND DECREMENT  THE

                NUMSE< OF  CHARACTERS REMAINING IN THE STRING  BY  THAT
                SAME AMOUNT,
IF THERE ARE  ANY  CHARACTERS REMAINING  IN  THE  STRING,

LOOP BACK TO  STEP 2.
   IF(NC.GT.0)GO TO 10


   STEP 6        ENO LOCAL  PROCESSING.


   RETURN
   END
                 FIGURE II-6-11.1.  (Continued)
                                197

-------
                          6.12 Subroutine RDVAL

          Subroutine RDVAL converts a coded character string representing
an integer into the numeric value of the integer.   The listing and basic
documentation for this routine are given in Figure II-6-12.1.
                                   198

-------
   iUBRO'JTINF
c
b
c
(j
c
c
0
b
c
b
c
c
c
c
b
c
b
b
c
t
c
u
c
(j
c
c
c
c

i'ITLE<*Di/AL

SUBROUTINE R
STRING PEPKE

PAFA^ETEK
IVAL

IBLANK


COMMON
/IQuNT/
/CHRSET/
/CODERC/

EXTERNALS

VARIABLE
I, J
1C

LD1

MINUS



CONVERTS A CODED INTEGER VALUE INT

PVAu COMPUTES THE NUMERIC VALUE OF
SENTING AN INTEGER.

DESCRIPTION
THiS INTEGER VARIABLE RETURNS THE
THE STRING.
THIS INTEGER VARIABLE CONTAINS A
TO INDICATE A BLANK STRING.

VARIA3LES USED
CHRCON, JOB
LETTEP
I^OL»LCOL,LINE

Pi\DES3» PKLlNE

DESCRIPTION
THESE INTEGER VARIABLES ARE USED
THIS INTEGER VARIABLE IS USED TO
STAKTING POSITION OF THE DIGITS T

0 ITS NUMERIC »/ALUE)

A CODEC CHARACTER



INTEGER VALUE OF

VALUE TO BE USED










AS DO-LOOP COUNTERS.
INDICATE THE
0 BE DECODED.
THIS INTEGER ARRAY CONTAINS PACKED CHARACTER CODES
FOR DISPLAY.
THIS INTEGER VARIABLE IS USED TO
NUMBER


INDICATE A NEGATIVE


15
COMMON/CHRSET/LETTF? (tm
COMMON/FILES/READE\,PKTNTR,OFFLIN
COMMON/CODERC/ICOLiLCOL,LINE(150)
COMMON/IOCNT/J03,CAR30N
iNTEGEP GASCON
INTEGER READER,PRINTS,OFFLIN
DIMENSION LDK8)
DATA Lul(l),LDl(2),LDl(3) » L Dl C+) /3^, 15M 90 151, 20 107<*&it, 2150t)116/
DATA LD1(5),L31 (6),LD1( 7)/387695S2, 75673158 9, 3 0%36«58/
DATA LD1(8)/236054S/
HINUS=1
STEP 1       DETERMINE  THE  FIRST NON-BLANK  CHARACTER.  IF ALL
             CHARA:TERS ARE BLANK,  BRANCH  TO STEP 7.
oo 10 I = ICO_,L.COL
IF(LlNE(I).NE.LET7E3t«»5))GO TO 15
CONTINUE
IVAL=IBLANK
GO TO 999
STEP 2       DETERMINE  WHETHER THE  NUMBER  IS NEGATIVE.
IVAL=0
      FIGURE II-6-12.1.  LISTING FOR SUBROUTINE RDVAL


                              199

-------
      IF(LINE(I).NE.LETTER<36))GO TO 16
      MINUS=-1
      1=1*1
C     STEP 3        DETERMINE THE NUMERIC  VALUE  OF THE STRING.
   16 IC = I
      DO sa i=ic,i-COL
      00 20 J=?7,36
      IF(LINEd).EQ.LETTER 
-------
                          7.0 INPUT PROCESSING

         The purpose of  the input processing routines  is  to read the user
input  from either data cards or  from  data  bases,  to  create data bases of
the feed and configuration data  if these do  not  already exist,  and to
store  the data in the program arrays.   The presentation in this chapter
relies heavily on the material presented in  Chapter  6 of Volume I which
describes the preparation of the input  and the  construction of  the data
bases, and on the material in Chapter 2 of Volume II which describes
how information  is  stored in the program.
                                    201

-------
                           7.1  Subroutine RDUNIT

          Subroutine RDUNIT reads the unit description cards.  The listing
and basic documentation for this routine are given in Figure II-7-1.1.  Note
that RDUNIT makes certain that the equipment identifier associated with the
unit is in fact defined within the equipment inventory.  If this is not true,
the routine ends the execution of the program after issuing an error message.
                                     202

-------
c
G
C
C
c
t
c
c
G
c
c
c
G
C
C
C
c
c
G
f<
f
C
c
c
c
G
C
G
C
C
C
c
c
G
C
COMMON
/WORK/
/FILES/
/COOERC/
//
SUBROUTINE RDUNIT


TITLFtREAD UNIT INFORMATION)


iUEfcOUTINE ixDUNIT IS USED  TO  CONTROL THE READING AND STORING  OF
THE UNIT INFORMATION FOR THE  CONFI G JRATION.
RDOESC

VARIABLES USED
NEXT, lUNITt ICURVE
"EAGER, PFINTR
iCOL, LCOL, LINE
WS
L, 01, D?f 03

DESCRIPTION
THIS INTEGEK. VARIABLE  CONTAINS THE ADDRESS IN WORK-
ING STORAGE INTO  WHISH THE  UNIT DESCRIPTOR ADDRESS
IS TO 3E PLACED.
THESE DUMMY INTEGER  VARIABLES  ARE USED TO CONTROL THE
MOVEMENT THROUGH  THE  UNITS  IN  THE CONFIGURATION.
THIS INTEGER VARIABLE  CONTAINS THE ADDRESS IN WORK-
STOPAGE OF THE EQUIPMENT  INFORMATION BLOCK ASSOCI-
ATED WITH THE UNIT.
THIS INTEGER VARIABLE  CONTAINS THE EQUIPMENT IDEN-
TIFIER ASSOCIATED  WITH THE  UNIT.
THIS INTEGER VARIABLE  CONTAINS THE UNIT OPERATION
TYPE CODE ASSOCIATED  WITH THE  UNIT.
THIS INTEGER VARIABLE  CONTAINS THE NUMBER OF CELLS
OF WORKING STORAGE REQUIRED BY THE UNIT DESCRIPTOR.
VARIABLE
IU
U, I


1EGUIP



ID


IUO


NCELL
      COMMON/ WORK/ NEXT, LA ST , I CURV E, I UNIT , 10 AT A, IT ITLE , ICHAR.IFLW
      COMMON/FILES/READER,P*TNTR,OFFLIN
      COMHON/COQERC/ICOL,LCO»_, LINE < 1*0) ,CA (110)
      COMMON  MS (6080)
      COMMON/CNTVAR/KF (2,100),SIZE(23) ,3 BOUND (21) ,GRAV (20)
     1,WFLOW(1QO)  ,S(10fl)»Dl(60)t02l60),D3(60) ,L<60)
     2                        ,NSIZE,NGRAV,IOUT,NUNITS,NFLOHS,NCHAR
      INTEGER  Dl,02,(j3
      INTEGEK WS, DEADER, PRINTR,U
    2  FORMAT (215, 3F10.0,i*OAl>
STEP 1
ALLOCATE SPACE  FOR,  INITIALIZE, AND RECORD THE
ADDRESS IN WORKING  STORAGE OF THE UNIT INFORMATION
CONTROL VECTOR.
      IUNIT=NEXT
      NFXT=NEXT*NUNITS
         FIGURE II-7-1.1.  LISTING FOR SUBROUTINE RDUNIT


                                203

-------
      IU=IUNIT-I
c
C     STEP ?        INITIALIZE AT ONE THE  DUMMY  COUNTER TO CONTROL  THE
C                   MOVEMENT  THROUGH THE UNITS.
C
      DO 80 U=1,NUNITS
C
C     STEP 3        UPDATE  THE ADJRESS OF  THE  CURRENT UNIT IFORMATION
C                   ADDRESS  CELL.
C
C     STEP V        REAu  IN  THE BASIC INFORMATION  FOR THE CURRENT  UNIT.
C
      RE AD (READER, 2)  L ( U) , 01 < U ) , 0 1< U ) , D2 (U ) ,03 (U ) , LINE
C
C     STEP 5        LOCATE  THE  EQUIPMENT  INFORMATION SLOCK IN WORKING
C                   STORAGE  FOR THAT EQUIPMENT TYPE  IDENTIFIED BY  THE
C                   UNIT.  IF NO SUCH BLOCK  CAN oE  FOUND, END THE RUN
C                   WITH  AN  APPROPRIATE MESSAGE.
C
      IG=L(U)
      IEQUIP=i:URVE
   20 1FIIO.EQ. WSUEUUIP-IHGO TO 25
      IEQUIP=WS (IEQUIP)
      IF (IEQUIP.GT.O )GO  TO  20
      WiUTE(PRINTR,6) ID
    6 FORMAT 
-------
c
c
c
c
c
c

G
C
c
c
      WS(IU)= NrXT

      NEXT = NEXT+NCEi_L
   STEP 9





80  CONTINUE


   STEP 10
   90
C
C
c
INCREMENT  BY  ONE THE
MOVEMENT THROUGH THE
GEEN PROCESSED,  LOOP
DUMMY COUNTER  CONTROLLING THE

UNITS, AND  IF  ALL HAVE NOT
BACK TO STEP  3.
STORE THE  DECISION VARIABLES  AND  IDENTIFIERS FOR
EACH UNIT.
      IUNIT=NEXT-IUNIT

      00  90  i=l,NUNITS
      WS(NEXT) =LU )
      NEXT=NEXT+1
   NEXT=NFXT+1
   WS(NEXT) =C?(T)

   NEXT=NEXT*1
   WS (NEXT) =03(1)
   NEXr=NF.xr-H
   CONTINUE
   STEP 11
      RETURN
      END
END L03AL  PROCESSING,
                 FIGURE II-7-1.1.  (Continued)
                                 205

-------
                           7.2  Subroutine RDCURV

          Of all the input routines,  subroutine RDCURV is by far the most
complex.  Its role is to read the equipment inventory and to store it in
working storage.  The listing and basic documentation for this routine is
given in Figure II-7-2.1.   The material presented there depends heavily
on the discussion in Volume I, Chapter 5, Part 3 and on the information
presented in Figure II-2-2.1.
                                      206

-------
C
c
C
c
c
c
c
c
c
c
c
G
c
c
c
w
c
c
c
b
c
c
c
0
c
r
••J
c
L
c
c
c
c
c
c
c
L
c
c
G
C
c
c
c
c
      SUBROUTINE
TITLE(rEAO EQUIPMENT  CURVE DATA)
SUBROJTINE 
-------
L     ITYPE         THIS  INTEGER VARIABLE CONTAINS THE TYPE CODE  FOR  THE
C                   oJRRENf  CURVE SET.
C     NPOINT        THIS  INTEGER VARIABLE CONTAINS THE NUMBER OF  POINTS
C                   PER LURVE IN THE CURVE  SET.
C     NSIZE         THIS  INTEGER VARIABLE CONTAINS THE NUMBER OF  CURVES
C                   OR  VECTORS OR SIZE FRACTIONS  IN THE CURRENT SET.
C     LCELL         THIS  DUMMY INTEGER VARIABLE  IS USED' TO SPECIFIY THE
C                   ENDING  ADDRESS IN WORKING  STORAGE TO WHICH A  READ
C                   SHOULD  BE PERFORMED.
C     NCR*          THIS  INTEGER VARIABLE CONTAINS THE ACTUAL NUMBER  OF
C                   CURVES  OR VECTORS WITHIN THE  CURVE SET.
C     IX            THIS  INTEGER VARIABLE CONTAINS THE ADDRESS IN WORKING
C                   STORAGE  OF THE VECTOR OF INDEPENDENT VALUES TO BE
C                   READ  IN.
C     IY            THIS  INTEGER VARIABLE CONTAINS THE ADDRESS IN WORK-
C                   ING STORAGE OF THE DEPENDENT  VALUES TO BE READ IN.
C     1C            THIS  DUMMY INTEGER VARIABLE  IS USED TO CONTROL THF
C                   MOVEMENT  THROUGH THE CURVE SETS.
C     ICC           THIS  DU1MY INTEGER VARIABLE  IS USED TO CONTROL THE
C                   MOVEMENT  THROUGH THE ACTUAL  CURVES WITHIN THE CUR-
C                   RENT  :URVE SET.
C     IBR           THIS  INTEGER VARIANLE DETERMINES  WHETHER THE  FLOW IS
C                   SUBJE3T  TO BREAKAGE OJRiNG OPERATION OF THE UNIT.
C     NSB           THIS  INTEGER VARIABLE CONTAINS THE NUMBER OF  SIZE
C                   FRACTIONS IN THE BREAKAGE  SPECIFICATIONS.
C
      COMMON/FILES /RE A DER,PRI NT R,OFFLIN
      COMMON/WORK/ NEXT, LAST, I CURVE, IUNIT, I DATA » IT ITLE,ICHAR,IFLW
      COHHON/CODERC/iCOi_,L:OL»LINE(^0) ,CA(11Q)
      COMMON WS(6000)
      DIMENSION NCONS(9),C3NS<5) , ICONS <5) , NCURVE<9)
      INTEGER dS, READER, PRINTR
      EQUIVALENCF  ICONS (1 ), ICONS ( 1) )
      DATA NCONSd ) ,NCONS(2) , NCONSt5),NCONS<
c
C     STEP 1        READ  THE  EQUIPMENT INVENTORY  COUNT CARD
C
         D (READER, 1)NE QUIP
       TEP 2        INITIALIZE AT ONE THE DUMMY  COUNTER USED 10 CONTROL
                    THE  MOVEMENT THROUGH THE  INDIVIDUAL EQUIPMENT TYPES
                  FIGURE II-7-2.1.  (Continued)

                                 208

-------
C                  Wli'H^N THE INVENTORY
C
     00 70 IE=1,NETUIP

G    STEP 3        READ "HE EQUIPMENT  TYPE SPFCIF ICAT10N  CARD FOR THE
C                  CURRENT TYPE,
C
     REAO(REAOER,1>  ID ,1 UO , I BR, LINE
C
C    STEP «f        USING SUBROUTINE   R 0  D E S C  STORE THE  EQUIPMENT
C                  TYPE DESCRIPTOR  IN  THE NEXT AVAILABLE  CELLS OF
C                  WORKING STORAGE.
     ICOL = 1
      IOESC=NEXT
      CALL  uDOESCCWSCIDESii) ,NCELL)
      NEXT = NEXT+NCEi_L
C
C     STEP  5        STORF THE IDENTIFIER AND FNTFR THE  TYPE  INTO THE
C                  STORAGE  CHAIN.
C
      WSINEXT) =IC
      NFXT=NEXT-H
      IFUE.GT.DGO TO 10
      ICURV£=NEXT
      GO  TO  15
   10  WS
-------
      kSTNEXT) = ICON5 (I)
   16 NLXT=NEXT+1
G
C     STEP 9        DETERMINE THE  NUMBER OF CURVE  SETi  TO Bh READ. IF
0                   ZEf%0, BRANCH TO  STFP 30.
   17 NC = N CURVE (IUO)
      IF (NC. EQ. Q)GO TO k5
C
c     STEP 10       ALLOCATE SPACF  IN  WORKING STORAGE  FOR THE CURVE SET
C                   INFORMATION CONTROL StOCKS, AND  RECORD THEIR ADDRESS.
C
      WS (lEOUIP*-^) = NEXT
C
C     STEP 11       INITiALIZE AT  ONE  THE DUMMY COUNTER TO BE USED TO
C                   CONTROi. THE MOVEMENT THROUGH THE  CURVE SETS.
L
      DO BO  IC=1,NC
C
C     STEP 12       UPDATE THE CUKi/E  iET INFORMATION  CONTROL BLOCK
C                   AuOPFSS SO THAT  IT POINTS TO THE  BLOCK FOR THE
L                   CURPFNF CURVE  SET.
C
      luV=IC7+6
C
C     STEP 13       RFAu 3NT STORE THE MAIN CURVE CONTROL INFORMATION.
C
      READ (RE A JFC,?) l TYPE, \IPOINT.NSIZE
      WS(ICV) =ITYPE
      WS (ICV+1) =NPOINT
      KS (I~V+2) =NSIZE
C
C     STFP lit       IF  SIMPLE VECTORS  ARE 3EING ENTERED,  8RANCH TO
C                   STEP 23.
C
      1F(ITYPE.EQ. DGO TP 15
U
L     ^TEP 15       IF  SIMPLE 3IVARIATE  DISTRIBUTIONS CURVES ARE BEING
i-                   READt BRANCH TO  STEP 25.
C
      IF (ITYPE.EQ. 2)^0 TO k5
U
C     STEP 16       THE CURVE ^~T  HAS  A  SIZE oL ASLIFI CAT I ON SCHEME ASSO-
^                   CIATED WITH xT.  RECO
-------
      READ(READER,3) ( rto (I) ,I=NEXT,LCELL)
      NEXT=LCELL*1
r
c     3TE01  17      IF  A  CLASSIFICATION CURVE  is BEING READ,  BRANCH  TO
c                  STEP  22.
G
      IFdTYPE.EQ. 3)GO  TO  30
C
u     3TE13  16      IF  A  C-3ENERALIZED DISTRIBUTION CURVE IS  BEING READ,
G                  b?ANCH  TO  STEP 25.
C
      IFdTYPE.EQ. MGO  TO  t*5
C
C     STEP  19      EXPLICIT  DliTRlSU TI ON CURVES ARE 3EING READ.  READ
u                  ANO  STORE  THE NUHtiEK OF  CURVES  PEK SIZE FRACTION.
C
      LCELL=NEXT+NSIZE-1
      READ (READER, 2) (WS<1) , I = NEX T ,LCELD
C
G     STEP  2fl      COMPUTE  THE TOTAL NUMBER OF  CURVES TO BE  READ.
C
      DO  25 I = NEXT ,1_CELL
      NCRV = NuR\/«-rtS (I)
   25  CONTTNUE
      NEXT=LCELL+1
C
C     STEP 21      READ AND  STORE THE DECISION  VARIABLE VALUES  ASSO-
C                  CIATED  WITH EACH OF THE  EXPLICIT CURVES. THEN  BRANCH
C                  TO STE»  26.
C
      RE AD (READER, 3) (MS (I) ,I = NEXT,LCELL)
      GO  TD 50
C
G     STEP 22      SET  THE  NUM8ER OF CURVES  EQUAL TO THE NUMBER  OF
C                  »OINTS,  AND THE NUMBER  OF POINTS EQUAL TO THE
i-                  NUMBER  OF  SxZE FRACTIONS. THEN BRANCH TO STEP 2*».
C
   30  Nbr,V = NPOINT
      NPOiNT^NSIZE
      GO  TO £+0
C
C     STEP 23      SET  THE  NUMBER OF CURVES  EQUAL TO THE NUMBER  OF  SIZE
c                  FK.ACTIONS.
c
   35  NCKV=NSI?E

                    FIGURE  II-7-2.1.  (Continued)


                                211

-------
c
c
c
c

c
c
c
c

c
c
c
c


c
c
c
c

c
c
c

STEP 2U

rn
GO TO 55

STEP 25


«»5 NCRV = NSIZ

STEP 26


5D WSUCV + *)
NEXT=NEXT

STEP 27


55 WS(IC\/ + 3)

STEP 2e


INITIALIZE THE ADDRESS OF THE DEPENDENT VALUFS
ZERO, AND BRANCH TO STEP 27.
_


SET THE NUMBER OF CURVES EQUAL TO THE NUMBER OF
FRAoTIONS.

E

STORE THE ADDRESS OF AND ALLOCATE SPACE FOR THE
PENDENT VALUES.

= NEXT
+NPOINT*NCRV

STO<=E THE ADDRESS OF AND ALLOCATE SPACE FOR THE
DEPENDENT VALUES.

=NE/T

r^EAT AND STORE THE ACTUAL CURVE VALUES.


AT




SIZE




CE-





IN-






c
c
c
c
c
c
C
C
C
      IY = WS(
      DO 56  IC:=1,NCRV
      LCELL=iX-(-NPOINT-l
      RE AD(READER,3) (WS(i) ,I=IX,LCELL)
      IX=LCELL*1
      IFdY.EQ. 0)GO TO 56
      LCtLL=IY+NPOINT-l
      PEADIFFAOEK,3) (dS (i) ,I = IY,LCELLI
   56 CONTINUE
STEP 29
                 INCREMENT BY  ONE  THE DUMMY COUNTER CONTROLLING  THE
                 MOVEMENT THROUGH  THE 3URVE SETS  FOR THE CURRENT
                 EQUIPMENT TYPE,  AND IF ALL HAVE  NOT BEEN  PROCESSED,
                 LOOP BAuK TO  STEP 12.
60 CONTINUE
65 CONTINUE

   oTEP 30
              IF
              STi
                    THERE IS
                   :P 35.
NO BREAKAGE  FOR THIS UN^T,  BRANCH TO
                  FIGURE II-7-2.1.   (Continued)

                                 212

-------
      IFU6R.EQ.O)  GOTO 71
C
C     STEP 31       .
-------
                           7.3  Subroutine RDFEED

          Subroutine RDFEED reads the descriptions of the input flows,
Figure II-7-3.1 contains the listing and basic documentation.
                                    214

-------
c
G
C
u
c
r
!j
C
c
c
c
c
c
V
c
c
c
c
c
c
c
t
c
c
c
G
c
c
c
c
c
c
c
c
G
,-,
L,
c
c
c
c
c
c
c
c
c
c
c
c
c
SUBROUTINE -
-------
u     NS            THiS INTEGER VARIABLE  CONTAINS THE  NUMBER OF SIZE
C                   FRACTIONS FOR WHICH  DETAILED DATA IS  BEING READ.
C     SUM2          THIS REAL VARIABLE CONTAIN* THE WEIGHT  OF MATERIAL
C                   ACCOUNTED FOR IN A PARTICULAR SIZE  FRACTION.
0     VAL           THIS REAL 1-Dj. MENSiON^L  ARRAY CONTAINS  THE OVERALL
C                   CHARACTERISTIC s/ALUES  FOR THE SMALLEST  SIZE FRACTION.
C     NPOINT        THIS INTEGER VARIABLE  CONTAINS THE  NUMBER OF POINTS
C                   UiED TO DEFINE THE PERCENT ASH - BTU  VALUE FUNCTION.
C     VSL8TU        THIS 1-DIMENSIONAL REAL  ARRAY CONTAINS  THE BTU VALUES
C                   FOR  INTERPOLATION.
U     V^tYLD        THIS 1-DIMENSIONAL REAL  ARRAY CONTAINS  THE PERCENT
C                   ASH  VALUES FOR INTERPOLATION.
C     NC            THIS INTEGER VARIABLE  CONTAINS ONE  LESS  THAN THE
C                   NUMBER  OF CHARACTERISTICS.
C
      COMMON/WORK/NFXT,LAST,ICURVF,IUNIT,IDATA,ITITLE»ICHAR,IFLW,IASH,
     1 ISUL,I8TU
      DIMENSION TEM*MNSIZE,NGRAi/,NCHAR)
      DIMENSION VoLYLD(60),VSLBTU(60)
      COMMON/FILE5/*EAOER,PRINTR,OFFLIN
      DIMENSION WT(23),T8TU(20),VAL<50)
      INTEGER  READER,PRINT',
    1 FORMAT (13F6. 3)
    2 FORMAT (8-10.5)
    3 FORMAT(115)
    % FORMAT(10X,I3,3X,I3)
C
C     STEP 1        READ THE CONTivOL DATA  FOR THE FEED
C
      KEAD(READFR,^)  JAOJ,JBTU
      NS=NSIZE
      IF(JAOJ,EQ.1)NS=NS-1
C
C     STEP 2        READ THE WEIGHTS ASSOCIATED WITH EACH SIZE INCRE-
C                   MENT FOR THE CURRENT FEED.
C
      READ (READER,1) (WT(I),I = 1,NSIZE)
C
C     STEP 3        READ THE BTUS PER SPECIFIC GRAVITY  INCREMENT FOR
C                   THE  CURRENT FEED.
C
      IFU6TU.EQ. (J)P.EAG (READER, 2) (TBTU(J) , J = 1,NGRAV)
C
^     STEP if        REAC THE VALUES FO-^  THE  CURRENT FEEC, NORMALIZE  IT,
C                   AND  CONVERT THE PERCENTAGES TO RATIOS.
C
      SUM1 = 0 .0
      uO 17  1=1,No
                .WT (T)


                  FIGURE  II-7-3.1.  (Continued)

                                 216

-------
   3UK2 = 0. 0
   00 15 J=1,NGRAV
   READ(RE AJER, 2) (TEMP(I,J , K) ,K=i,NCHAR)
   IFtJBTU.EQ.8)  TEMPd, J,I3TU)=TPTU< J)
   SUM2 = SUM24.TEMPII,J,1)
   00 15 K=2,NCHAR
   IF(K.EQ.IBTl) )  GOTO 15
   TEMP
   COM=COM«-TEMP (NSIZE, J, 1) *TEW>P( NSI ZE, J ,K)
19 CONTINUE
   IF(COM.EQ. 0. 0  .OR. VAL (K-l) .EQ . 9. Q > GO TO 21
   COM = C0M/,/AL (K-l)* 100. 0
   CO 20 J = 1,NGKA\/
   TE^PtNSiZE,J,K)=TEMP(NSIZE,J,K )/COM
20 CONTINUE
21 CONTINUE
25 DO SO  I=l,NiIZE
   WT(I)=WT(IJ/SUM1
   DO 30 J=1,NG*AV
   TEHP
-------
   36  CONTINUE
       DO  S7 I=l,MiI7E
       DO  37 J = 1,NG
-------
                          7.4 Subroutine CONFSV

          Subroutine CONFSV is used to create a data base of the configuration
in the case where the input data to the program is read from cards.   The
configuration data base,  consisting of the equipment inventory as a  header
record followed by up to  thirty plant configurations distinguished by a
four-letter key, is created on file number 3 and may be saved at the end
of the program run for permanent file storage of the configurations.
Figure II-7-4.1 contains  the listing and basic documentation of subroutine
CONFSV.
                                    219

-------
      SUbROUTINE  30NFSV
C
C     TITLE(GREATE  A  CONFIGURATION DATA  BASE)
C
L     SUBROUTINE  CONFSV  CREATES A DATA BASE OF PLANT CONFIGURATIONS.
C
L     CO*NON        rfARi.ABi.ES USED
L     /GNTVAP./      NUNiTS, NFt-OWS
C     /FILES/       READER
C     /WORK/        NEXT.ICURVE.IUNIT
C     //            SG
C
C     EXTERNALS SV oASE ,RDCURV , PDUNIT
C
C     VAiUABLE      DESCRIPTION
C     NREC          THIS  INTEGER VARIABLE  CONTAINS THE  LENGTH  OF THE
C                   HEADER RECORD FOR  THE  FILE,
C     FILE          THIS  ONE-OIMENSIONAL  INTEGER ARRAY  CONTROLS THE
C                   WRITING  OF THE DATA BASE.
C     KEY           THIS  INTEGER VARIABLE  IS USED TO CONTAIN  THE KEYS
L                   FOR  THE  PLANT CONFIGURATIONS ON THE  DATA  BASE.
C     BLANK         THIS  INTEGER VARIABLE  CONTAINS A BLANK  KEY.
C     NST,NFIN      THESE INTEGER VARIABLES ARE USED AS  POINTERS IN THE
C                   HEADER RECORD.
C     I             THIS  INTEGER VARIABt-E  IS USED AS A  00-LOOP COUNTER.
C
      COMMON/3NTVAR/KF<2, 10 0) , SIZE (2 T) , G BOUND C 21 ) ,GRAV ( 20)
     1,W FLOW (100)  ,S(100),Oi(60),D2(60),C3(60),L(60)
     2                         ,NSIZE,NGRAV,IOUT,NUNITS,NFLOWS,NCHAR
      COMM ON/ FILES /READER, PR! NT R,OFFLIN
      COMMON /WORK/ NEXT, LrtST, I CURVE, IUNIT , IOATA , ITITLE , ICHAR, IFL W
      COMMON  55(6000)
      DIHENSION FILE<2)
      INTEGER FILE , RE ADFR, PRI NTR, BLANK
      INTEGER SG
      DATA FILE (1) /3/,FILE(2)/0/,BLANK/«fH     /
C
ii     STEP 1        PEAO  THE HEADER INFORMATION FOR THE  FILE  - THE
r                   EQUIPMENT INVENTORY
C
      CAuL RDGJRV
      SG(NEXT) =ICUP;E
      NREC=NEXT
C
c     ST^P 2        OPEN  IHE SAVE FILE  AND  WRITE THE HEAGER  INFORMATION
C
      CALL SVBiST ( FILE, S3, NRtC»0)
         FIGURE II-7-4.1.  LISTING FOR SUBROUTINE CONFSV

                                  220

-------
C     S7FP *        REA-< THE KEY  FOR  THE NEXT CONFIGURATION.   IF  ZERO
C                   THEf,F  A*L NO  MORE  CONFIGURATIONS,  BRANCH  TO  STEP 7
L
   10  RE*D -;, 11)  KEY
   11  FORMAT (A ^)
      IF«EY.EQ.aL ANK)  GOTO 30
      kEAC
-------
                          7.5 Subroutine FEEDSV

          Subroutine FEEDSV is used to create a data base of the input feed
descriptions in the case where the input data to the program is read from
cards.   The feed data base, consisting of the size fractions,  specific
gravity fractions and characteristics as a header record followed by up
to thirty feed descriptions each distinguished by a four-letter key, is
created on file number 4 and may be saved at the end of the program run
for permanent file storage of the feeds.  Figure II-7-5.1 contains the
listing and basic documentation of subroutine FEEDSV.
                                   222

-------
c
c
c
c
c
c
c
c
SUBKOUTINF; FFEDSV

TITLE. (CrvEAlF  A  FEEP DATA BASE)

SUBROUiiNF FtPCSV  3REATEi A OATw  BASF OF FEEDS.
COMMON
/WORK/
/CODFPCV
/FILES/
/CHR;jET/
              VARIABLES USFO
              IASH,ISUL, I3TU
              ICOc.,LCOL,LINF
              rEACE?
              LETTFR
o
c
c
o
L
EXTERNAL?
      NSIZE
L
C
C
L,
c
L
C
G
C
C
C
G
C
G

NCHAR

NRFC

NST,NFIN
NVAL

FILE

KEY

BLANK
1, J, K
              RuFEEC , S VB ASE

              DESCRIPTION
              THIS INTEGER' VARIABLE  CONTAINS
              FRACTIONS OF THE  FEED.
              THIS INTEGER VARIABLE  CONTAIN^
              SPECIFIC GRAVITY  FRACTIONS FOR
              THIS INTEGER VARIABLE  CONTAINS
              CHAKAGTERloTICS FOR  THE  FEED.
              THIS INTEGER VARIABLE  CONTAIN^
              HEACFR RECORD FOR  THE  DATA BASE.
              THESE INTEGFR VARIABLES  ARE USED
              IN  THE HEADER RECORD.
              THIS INTEGER VARIABLE  IS USED TO
              
-------
C                   CHARACTERISTICS.
C
      KE AD (READER, 11) NSI ZF , NGRAi/ ,NCHAR
   11 FORMAT (315)
      REC(l) =N3IZE
      REC<2)=NGRAV
      REC(3)=NCHAR
      NREC=3
      NST=NREC+1
      NFIN=NREG+NSIZE+1
      REAO(kEADER,21) IREC < I ) , I=NST , NFIN >
      NREC=NFIN
       RE AD (READErv, 21)  (REC ( I ) , I=NST, NFIN )
       NREC=NFIN
       NSI=NREC+1
       NFIN=NREC+3
       RE AD (READER, 11)  (REC ( I ) . I = NST
       NREC=NFIN
       IASH=IRE:
   21  FORMAT (10F8. 0)
       NST = NRECf 1
       DO ^0  J=1,NCHAR
       READ (READER, Ml  (LI NE { II ,1 = 1,
       00 25  1 = 1, «*9
       DO 23  K = l,
-------
      NST=NST* 1
      IREC
      IRFC (NSf*-l)
   4f G NS T = MS T + 3
      NkEC=NST-l
   ki FOS>MftT(5tl,lX,30Al,lX,7Ml,lX,7Al)
C
C     STEP 2        OPEN THE SAVE  FILE AND WRITE  THE HEADER INFORMATION
L.
      CALL SVBASE(FILt ,RE C , NREC , B )
(J
C     STEP 3        KtAD THE KEY  FOR  THE NEXT FEED.   IF ZERO THERE
C                   ARE NO MORE FFEOS, oRuNCH TO  STEP 5.
C
   20 READ (READER, 31)  KEY
   31 FOPMAT (A<+)
      1F(KEY.EQ.?LANK) GOTO 30
C
C     STEP <*        READ. THE FEED  DESGRIPFION AND  SAVE ON THE SAVE  FILE
C
      CALL RDFEED (5 EC ,NSI ZE t NGRAV , NCHAP)
      CALL SV3ASE (FILE , RFC, NREC, KEY)
      GOTO 20
C
C     STEP 5        CLOSE THE SAVE  FILE.  END PROCESSING.
C
   30 CALL SV343E(FlLE,kE3 ,NREC,0)
      RETURN
      END
                  FIGURE II-7-5.1.  (Continued)
                                  225

-------
                          7.6 Subroutine RPCFBS

          Subroutine RDCFBS  reads  a configuration,  selected according to
its key,  from the configuration data base.   Figure  II-7-6.1 contains the
listing and basic documentation for subroutine RDCFBS.
                                    226

-------
c
u
C
c
c
c
c
c
c
t
u
c
c
c
c
c
c
c
c
c
L
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
 SUBROUTINE ROCFBS(FILE3)


 TITLE(F.EAD A CONFISCATION  FROM THE  DATA BASE)


 iUSROUTINt ROCFBS bEuFCTS AND  DISPLAYS THE DESIRED PLANT
 CONFIGURATION FROM THE  DATA  BASE.


 PARAMETER    DESCRIPTION
 FILES        THIS 1-DIMFNSIONAL INTEGER ARRAY CONTROLS THE
              REAPING OF  THE  DATA BASE.

 COMMON        VARIABLES  USED
 /CODERG/     ICOL
 /FILES/      KEADER
 /CHRSET/     uhTTE?
 /CNTi/AR/     NFuOWS,NUNITS,01,02,03, KF,L,S
 /WORK/        NEXT,IUNIT
 //            SG
 /IOCNT/      JOOtCMRCON


 EXTERNALS    RDBASE,PRHEAD,PROES3,CNVTIE,PPLINE,VESSEL

 VARIABLE     DESCRIPTION
 LGi-LD<+      THESE ONE-01MENSIONAL  INTEGER ARRAYS CONTAIN
              PACKED CHAKACTER  CODES  FOR OUTPUT PURPOSES.
 KEY           THj.S INTGER VARIABLE  CONTAINS THE KEY FOR THE
              REQUIRED CONFIGURATION.
 NST,NFIN     THESc INTEGER  VARIABLES  ARE USED AS POINTERS IN
 IOLD.NU      WORKING STORAGE.


 NREC         THIS INTEGER VARIABLE  CONTAINS THE LENGTH OF THE
              DATA BASE  RECORD.
 I,J,U        THESE INTEGER  VAKlABLES  ARE USED AS DUMMY COUNTERS.
 LINES        THIi> INTEGER VARIABuE  IS USED AS A COUNTER FOP THE
              NUMBER OF  LINES
 10            THIS INTEGER VARIABLE  IS THE EQUIPMENT IDENTIFIER.
 IUO           THIS INTEGER VARIABLE  CONTAINS THE UNIT OPERATION
              TY^E CODE.
 J.EQUIP        THIS INTEGER VARIABLE  CONTAINS THE ADDRESS IN
              WORKING STORAGE OF THE  EQUIPMENT INFORMATION FOR THE
              UNIT.

 COMMION/1:ODERu/IGOL,LCO<.,LlNF (150)
 COMMON/ FIi_ES/Rt ADE°» PRINTR, OFFLIN
 COMrtON/CHRSET/LETTER(U7)
 COMMON/CMT7AR/KF{2,10Q),SIZ£(23),GBOUNu(21),GRA\/(20),WFLOW(100)
1            ,S(100),D1(60),D2(60),D3(60),L(60)
2                         ,NSIZE,NGRAV, IOUT,NUNITS,NFLOWS,NCHAR
 COMMON/WORK/NEXT,LAST,I CURVE,I UNIT,I DATA,ITITLE,ICHAR,IFLW
         FIGURE II-7-6.1.  LISTING FOR SUBROUTINE RDCFBS


                                227

-------
      COMMON  SG(6UOO)
      COMWON/IOC NT/JOB,GASCON
      INTEGER  GARCON
      INTEGER  READER,PRINTR,OFFLIN,S
      INTEGER  J
      INTEGER  3G
      INTEGER  FILES,01.02,03
      DIMENSION  L01U1,LD2(3),ID3(5) ,LDM1Q)
      DATA LD1U),LD1<2),L01{3),L01 U)/ll, 3560297<»1 t2i»0l»39f»29,18/
      DATA LD2C1) , L02 ( 2 ), L3 2 ( 31 /9 ,3560297^1, 53*63097
      DATA LD3( 1) ,L03 (2),LD3(3),L03((t)/18, 66'*32'f 67115^987350 , 2153273S/
      DATA L03(5)/<»9<*91/
      DATA LDMi) , LOM2),LD<* (3) , L0«» («*)/*»U, 15<»7551*»8 , 1522285«»9,«» 31252«»3%/
      DATA LDM5) , LOk (6), LD«t ( 7 )/755823%9
      NFIN=NFIN-1
      NFLOWS = SG(NFIN)
      NFIN=NFIN-1
      NUNITS=SG(NFIN)
      NU=IUNiT+NUNITS-l
      DO 12 I=IUNIT,NU
      IF(SG(I).GT.IOLD) SG(I)=SG(II*NST
   12 CONTINUE
      I=NFIN-5*NFLOWS
      J=l
   15 KF(1,J)=SG(I)
      KF(2, J)=SG(H-1)
      S(J»=SG(I*2)
      J=J + 1
      1 = 1 + 3
      IF( J.L.F.NFLOWS)  GOTD 15
      I=NEXT
      U=l
   16 L(U)=SG(I)
      Dl (U)=SG(]>1)

                     FIGURE  II-7-6.1.   (Continued)


                                 228

-------
   D2iU) =SG(I+2)
   C3(U)=SG(I+3)
   U=U«-1
   1 = 1+ k
   IF (U.LE.NUNIT3 >  GOTO 16
   STEP k        PSiNT OUT THE  DETAILS OF THF CONFIGURATION.
   LlNES=52
   00 80 U=1,NUNITS
   IEOUI'D = L(U)
   ID=SG(IE3UIP-1)
   iUO=SG(IEQUIP+2)
   IF(LINES.LT.513  GOTO 60
   LlNES=0
   UMLL PSHEAC
   JOE=-1
   CMRCON=LETTEP c+5)
   ICOL=10
   CALL PRQESC(LOl)
   lCOL = ICOL+2'*
   oALL "RDESC (^Q?.)
   CALL PR3ESC(L03)
   CALL PRLINF
60 i_INES = LlNES<-2
   CALL PRLINE
   ICOL=14
   CALL CNVTIE(U,2,-i)
   CALL CNVTIE(Iu,2,-ll
   CALL PRLINE
   IF (1UO.EQ.6.0R.IUO. EQ. l.OR.IUO.EQ. 9) GOTO 75
   IFdUO.EQ.7)  GOTO 70
   CARCON=LETTER(37)
   ICOL = 8<+
   CALL CMVTIEtOKU) ,7,^)
   CALL PRLINE
   GOTO 7^
70 CAKCON=LETTER(37)
   ICOL = 71
   CALL CN»/TIE(bl (U) ,6, 3)
   CALL CNVriE (P2 (U) ,6, 31
   CALL CNVTIE(D3(U) ,8, 3)
   GAuL PkLINE
75 CALL 7ESSEL(U,1)
80 CONTINUE
   STEP 5        BRANCH TO STEP  7.
   GOTO 900
   STE» 6        THEPF IS  NO  CONFIGURATION  CORRESPONDING TO  THE
               FIGURE II-7-6.1.  (Continued)

                               229

-------
G                   GIVEN  KEY.  PRINT  OUT AN  ERROR MESSAGE,
  999  ICOL=8
      CALL  PRUNE
C     STEP  7        ENO  LOCAL PROCESSING.
  900 CONTINUE
      RETURN
      END
                  FIGURE  II-7-6.1.   (Continued)
                                  230

-------
                          7.7 Subroutine RDFDBS

          Subroutine RDFDBS reads the header record from the feed data base
and then reads the input feeds to the plant, selected from the data base
by their keys.  Figure II-7-7.1 contains the listing and basic documentation
for subroutine RDFDBS.
                                     231

-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
G
c
c
c
c
c
c
c
c
c
c
c
c
c
c
SUBROUTINE RDFCBS(NFEEO,FLOWT)


TITLE(REftD THE FEED DESCRIPTION F*OH  THE  DATA BASE)


SUBROUTINE RDFDBS READS THE SELECTED  INPUT FEEDS FROM THE DATABASE

AND COMBINES THEM INTO A SINGLE INPUT FEED TO THE PLANT.
PARAMETERS

NFEED


FLOUT
COMMON
/WORK/
/CNTVAR/
/BLKI/
/FILES/
VARIABLES

If JtK
II,JJ,IT1,
IT 2
KEY


LD1


NG


NS


NRFC


TFLOW
DESCRIPTION

THIS INTEGER VARIABLE RETURNS  THE NUMBER OF FEEDS TO
THE PLANT.

THIS REAL VARIABLE RETURNS  THE TOTAL RATE OF FLOW OF

THE INPUT FEED TO THE PLANT.


VARIABLES USED

ICOL
NEXT,IFLW,IOATA,ICHAk,IASH,ISUL,IBTU

GBOUNO,GRAV,NCHAR,NFLOWS,NGRAV,NSIZ£,S,SIZE

FILEif, IREC,REC

READER

SG.ISG
EXTERNALS    OUTPT1,PROESC.PRLINE,RDPASE
DESCRIPTION
THESE INTEGER VARIABLES  ARE  USED  AS DO-LOOP COUNTERS.
THESE INTEGER VARIABLES  ARE  USEQ  AS ARRAY
POINTERS.
THIS INTEGER VARIABLE IS USED  TO  CONTAIN THE KEYS FOR
THE FEEDS ON THE DATA BASE.
THIS 1-DIHENSIONAL INTEGER ARRAY  CONTAINS PACKED
CHARACTER COOES FOR DISPLAY.
THIS INTEGER VARIABLE CONTAINS  ONE PLUS THE NUMBER
OF SPECIFIC GRAVITY FRACTIONS.
THIS INTEGER VARIABLE CONTAINS  ONE PLUS THE NUMBER
OF SIZE FRACTIONS.
THIS INTEGER VARIABLE CONTAINS  THE LENGTH OF THE
PECOR3 READ FROM THE DATA BASE.
THIS REAL VARIABLE CONTAINS  THE  FLOWfcATE OF THE
INDIVIDUAL FEEDS.
      COMMON/CODERC/ICOL,LCOL,LINE(150)

      COMHON/WORK/NEXT,LAST,ICURyE,IUNIT,IGATA,ITITLE,ICHAK,IFLW,IASH,
     1 ISUL,T97U

      COMMON/CNTVAR/KF(2,100),SIZE(23),GBOUND(21),GRAV(2fl),WFLOW(100)

     1            ,S
-------
      EQUIVALENCE  (SG ( 1 ) , I So ( 1 ) )
      COMHON/BLKI/ FILEM63) ,"=EC<729)
      DIMENSION  IXEC(729)
      EQUIVALENCE  (RFC ( 1) , IREC ( 1 ) )
      INTEGER rii.Ett
      INTEGER READF*, PRINTS, OFF..IN
      DIMENSION  L3K5)
      DATA i_Di(i),L01(2),_iJl(3),LDl('f)/35f15<»7551<»8, 15 2226 51*9,** 31 2
      DATA L01(5),LD1(6),LD1 (7 )/ 756566388 , 756028673, 75 550^3 25/
      L'ATM LDK 9)/6010
      NSIZE=RE: 
-------
      DO 21 K=NEXT,IT2
      iSG«) =I\EC< JJ>
   21 JJ=JJ+1
      NEXT=ITI
      DO 1 J = 1,NGRAV
    1 GRAVMJI = .5MG30UND( J )«-GBOUNO ( J + l ) )
      IFLW=NEXT-1
      IT1 = NEXT«-NC4AR*NFLOHS
      IT2=IT1-1
      00 22 K=NEXT,IT2
   22 SG(K)=0.0
      NEXT=ITi
      IDATA=NEXT
      IT1 = NS1ZE*NGRAV*NCHAR«-NEXT
      IT2=IT1-1
      00 30 I=NEXT ,IT2
   20 SG(I)=0.0
C
C     STEP 
-------
      IF(NFEFD.EQ.l)  GOTO <* 0
      CALL OUTPTKSG(ITl), SIZE ,GBOUND,NSIZEiNGRAViNCHAR»       TFtOW,
     1 -I,KF,5)
C
C     STEP 10       INCREMENT 8Y ONE  THE DUMMY COUNTER  CONTROLLING
C                   MOVEMENT THROUGH  THE FEEDS AND  IF ALL  HAVE NOT BEEN
C                   PROCRSSED LOOP  BACK TO STEP 5.
C
   kQ CONTINUE
C
C     STEP 11       BRANCH TO STEP  13.
C
      GOTO 999
C
C     STEP 12       THERE IS NO FEED  CARRESPONbING  TO THE  KEY.  PRINT OUT
o                   AN ER-JOR MESSAGE.
C
  998 ICOL=B
      CALL PRDESC(LDl)
      CALL PRLINE
r»
C     STEP 13       END LOCAL PROCESSING.
C
  999 RETURN
      END
                  FIGURE II-7-7.1.  (Continued)
                                 235

-------
                           7.8   Subroutine SYBASE

          Subroutine  SVBASE writes information on a data base.  Figure II-7-8.1
contains the listing  and basic documentation for subroutine SVBASE.
                                    236

-------
C
C
C

C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
      SUBROUTINE SV8ASE(FILE,REu,NREC,K"Y)

      TITLE (Crct ATt A DATA BASE)
PARAMETER
FILE
                                            ARRAY HAVING ELEMENTS AS
                                             THE FILE ON WHICH THE DATA
      REC


      NREC

      KEY
      VARIABLE
      I
      ID

      SAVE
      DIMENSION KEu(NREC)
      INTEGER FILE,SAVE
DESCRIPTION
THIS IS A 1-DIMF.NSIONAL
FOLLOWS
FILE(I) IS THE  NUMBED  OF
BASE IS TO 3E WRITTEN
FIuF<2) IS USFu TO  CONTAIN THE NUMBER OF RECORDS THAT
HAVE 3EEN WRITTEN TO  THE  DATA BASE.
**** FILF(2> SHOULD BE  SET TO ZE*0 BEFORE OPENING
THE FILE.****
THj.S 1-DIMENSIONAL  ARRAY  CONTAINS THE RECORD TO BE
WRITTEN OUT TO  THE  DATA  BASE.  WHEN  THE FILE IS
OPENED THIS IS  THE  HEADER INFORMATION.
THIS INTEGER VARIABLE  CONTAINS THE LFNGTH OF THE
RECORD CURRENTLY  EEING  WRITTEN.
THIS TYPELESS VARIABLE  CONTAINS THE  KEY ASSOCIATED
WITH THE RECORD.
THE KEY SHOULD  BE ZERO  WHEN THE FILE IS OPENED.
             DESCRIPTION
             THIS  INTEGF*
             THIS  INTEGER
             INDICATOR.
             THIS  INTEGER
              VARIABLE  IS USED Ao A DO-LOOP COUNTER.
              VARIABLE  IS USED FOR AN END-OF-FILE

              VARIABLE  IS USED FOR THE FILE NUMBER OF
                   THE FILE CONTAINING  THE DATA BASE.
      STEP 1
             BRANCH  ACCORDING TO THE TYPE OF DATA BASE OPERATION
             THAT  IS  TO  9E  PERFORMED.
                   9RANuH
                   STEP 2

                   STEP ^
                   STEP U


      IF(KEY.NE.O) GOTO 10
      IF
-------
      GOTO 9130
C
C     STEP 3        THE SfttfE FILE  IS  TO  BE CLOSED.  WPITE  A DOUBLE END
C                   OF FILE INDICATOR.   WRITE A PHYSICAL ENO-OF-FILE
C                   AND END LOCAL  PROCESSING.
C
    5 ID = 0
      WRITECSAVE)  13,ID
      ENDFILE SAVE
      GOTO 900
C
u     STEP 'k        A  RECORL I .> TO  BE  WRITTEN ON THE  SAVt  FILE.
C                   INCREMENT BY ONE  THE  NUMBER OF RECORDS OF THE FILE.
C                   WRITE THE RECORD  KEY  AND RECORD LENGTH FOLLOWED BY
C                   THE RECORD ITSELF.
C
   ID CONTINUE
      FILE(2)=FILE <2)+l
      WRITE(EAVE)  KEYfNPEC
      WRITFtSAVE)  (REC(I)tI=l,NREC)
C
C     STEP 5        END LDurtL PROCESSING.
C
  9iO RETUPN
      END
                  FIGURE II-7-8.1.  (Continued)
                                 238

-------
                           7.9  Subroutine RDBASE

          Subroutine RDBASE reads information from a data base.   Figure II-7-9.1
contains  the listing and basic documentation for subroutine RDBASE.
                                      239

-------
C
C
C
o
C
C
      SUBROUTINE N03ASE(FILE»RECtNREC»KEY I

      TITLEtREAD THE DATA BASE)
      PARAMETER
      FILE
REC
NREC
      KEY
C
C
C
C
C
C
C
C
u
C
C
C
C
C
C



VARIABLE
I
10
K
LENGTH
LLOAD

LOAD

NLOAO


KEY
INIT

DESCi
THIS
THIS
THIS
THIS
THIS
OF T1
THIS
FILE
THIS
IN T

             DESCRIPTION
             THIS IS A 1-DIMENSIONAL ARRAY HAVING ELEMENTS AS
             FOLLOWS
             FILEtll IS THE  NUMBER  OF THE FILE ON WHICH  THE DATA
             BASE RESIDES.
             FILE(2> CONTAINS  THE  SEQUENCE NUMBER OF  THE LAST
             LOADED RECORD.
             FILE13) CONTAINS  THE  NUMBER OF RECORDS ON THE DATA
             BASE.
             **** FILE(3) MUST  BE  SET TO ZERO BEFORE  OPENING THE
             FILE INITIALLY****
             FILEI2N), FILEC2N*1»,  N=2,...,31 CONTAIN THE  KEY
             AND RECORD LENGTH  FOR  THE (N-i)TH RECORD.
             THIS 1-OIMENSIONAL  ARRAY RETURNS THE RECORD JUST READ
             THIS INTEGER VARIABLE  IS USED TO CONTAIN THE  LENGTH
             OF THE RECORD READ.
             N.B. NREC=0 IF  NO  RECORD WITH THE SPECIFIED KEY
             HAS BEEN LOCATED.
             THIS TYPELESS VARIABLE CONTAINS THE KEY  ASSOCIATED
             WITH THE RECORD.
             KEY SHOULD BE SET  TO  ZERO WHEN OPENING THE  FILE
                        INTEGER  VARIABLE  IS USED AS A 00-LOOP  COUNTER.
                        INTEGER  VARIABLE  IS USED FOR THE  DATA  BASE KEYS.
                        INTEGER  VARIABLE  IS USED AS AN  ARRAY POINTER.
                        INTEGER  VARIABLE  CONTAINS THE RECORD LENGTH.
                        INTEGER  VARIABLE  CONTAINS THE SEQUENCE NUMBER
                        IE LAST  LOADED RECORD.
                        INTEGER VARIABLE  CONTAINS
                        CONTAINING  THE DATA BASE.
                        INTEGER VARIABLE  CONTAINS
                        IE DATA  BASE.
                                             THE  NUMBER  OF  THE

                                             THE  NUMBER  OF  RECORDS
DIMENSION
INTEGER F;

STEP 1
                RECINREC),FILE(63)
             BRANCH ACCORDING  TO THE TYPE OF DATA  BASE  OPERATION
             THAT IS TO  BE  PERFORMED.
             SIEP 2    OPhN THE uOAD FILE.
             STEP 5    READ A  RECORD FROM THE LOAD  FILE.
      LLOAC=FILE(2)
         FIGURE II-7-9.1.  LISTING FOR SUBROUTINE RDBASE

                                240

-------
      NwOAQ=FILE(3)
      IFIKEY.NE.O)  GOTO 15
      IF
-------
      LLOAO=LLOAO+1
      IF
-------
                               8.0  REPORT GENERATION

          This chapter discusses the report generation elements.  Very little
time was spent during the effort which this document describes analyzing these
elements.  Consequently, the level of documentation for these routines is
minimal.  With the exception of minor format changes, these routines are ex-
actly as they were in the original version.  At various times, suggestions
have been made for their enhancements such as including a cumulative percent
sink in the flowstream specific gravity analysis report.  To date, none of
these suggestions have been tried.
                                        243

-------
                   8.1  The /BLK1/ and  /BLK2/  Common Blocks

          The purpose of the /BLK1/  and /BLK2/ connnon blocks is to contain the
values of the unit performance measures for printing by subroutine OUTPT2.
Most of these measures are computed  by the unit operation routines themselves.
The measures for the washing,  two-stage washing, and froth flotation unit
operations are calculated by subroutine CMPUS, which is presented in this
chapter.
          The /BLK2/ common block contains a single two-dimensional real
array, DISTRB,  which is used to contain the detailed distribution curve
values.  The contents of the /BLK1/  common block vary according to the unit
operation.  Figure II-8-1.1 contains a description of these storage conventions.
The reader is referred to Volume I,  Chapter 6, Part 4 for a detailed
description of the meaning of the unit performance measures.
                                      244

-------
    SUMRY(ISFD)
    SUMRY(ISCC)
    SUMRY(ISRF)
 II  Screening
    Array
    SUMRY(ISFD)
    SUMRY(ISCC)
    SUMRY(ISRF)
    SYLD
    BTUREC
    SFLT
    SINK
III  Washing, two-
    Array;
    SUMRY(ISFD)
    SUMRY(ISCC)
    SUMRY(ISRF)
    SUMRY(ISMD)
    SYLD
    TYLD
    EFFIC
    BTUREC
    ASHERR
    SFLT
    SINK
    SMISPL
    SNRGR
    SGRAV
    SPE
    SIMP
    SEA
Performance measure
screen  analysis  and  characteristics  of  feed
screen  analysis  and  characteristics  of  upper  output  flow
screen  analysis  and  characteristics  of  lower  output  flow

Performance measure
screen  analysis  and  characteristics  of  feed
screen  analysis  and  characteristics  of  overflow  stream
screen  analysis  and  characteristics  of  underflow stream
weight  percent,  underflow to  feed
Btu  percent,  underflow to feed
percent undersized material in  overflow stream
percent oversized material in underflow stream
stage washing,  and froth flotation
Performance measure
screen  analysis  and  characteristics  of  feed
screen  analysis  and  characteristics  of  clean  output  flow
screen  analysis  and  characteristics  of  refuse output flow
screen  analysis  and  characteristics  of  middlings if  relevant
percent actual  recovery
percent theoretical  recovery
percent recovery efficiency
percent Btu recovery
percent ash error
float in refuse, percent of product
sink in clean coal,  percent of  product
total misplaced material, percent  of feed
near gravity  0.1 material, percent of feed
specific gravity of  separation
probable error,  specific gravity
imperfection
error area

FIGURE II-8-1.1.   CONTENTS OF  /BLK1/ COMMON BLOCK
                    245

-------
IV  Rotary breaking
    Array
    SUMRY(ISFD)
    SUMRY(ISCC)
    SUMRY(ISRF)
    SYLD
    SFLT
    SINK
 V  Crushing
    Array
    SUMRY(ISFD)
    SUMRY(ISCC)
Performance measure^
screen analysis and characteristics of feed
screen analysis and characteristics of overflow  (refuse)  stream
screen analysis and characteristics of underflow (product) stream
percent coal product of coal feed
percent coal in overflow in stream
percent rock in underflow stream

Performance measure
screen analysis and characteristics of feed
screen analysis and characteristics of crushed coal
                   FIGURE II-8-1.1.   (Continued)
                                    246

-------
                           8.2  Subroutine VESSEL

          Subroutine  VESSEL  controls  the  placement  of  the  unit  descriptors
in the  various  output reports.   Figure  II-8-2.1  contains  the  lisiting  and
basic documentation for  this routine.
                                       247

-------
u
C
c
C
c
0
c
L.
c
c
o
c
c
G
C
c
r
C
C
c
c
c
o
c
c
c
L
c
c
c
G
C
Q
C
c
SUEPOUTINE VESSEL (U.IFORM)

DISPLAY JNIT DESCRIPTORS)

SUBROUTINE VESSEL IS USEU  TO  CONTROL THE DISPLAY  OF  THE UNIT
DESCRIPTORS IN ONE OF TH^EE  FORMATS AS DESCRIBED  BELOW.
PARAMETER
U

IFORM
EXTERNALS

COMMON
/WORK/
/CHRSET/
/CODERC/
//
/IOCNT/


VARIA3LF
IU
             DESCRIPTION
             THIS INTEGER  VARIABLE  CONTAINS THE  SEQUENCE NUMBER
             OF THE UNIT WHOSE  DESCRIPTOR IS TO  GE  DISPLAYED.
             THIS INTEGER  VARIA3..E  SPECIFIES THE  FORMAT TO BE
             U^EQ IN DISPLAYING THE uESCRIPTOR,  IT  HAS  ONE OF
             THREE VALUES.
             CODE LEANING
              i   DISPLAY  THE  DESCRIPTOR ENCLOSED IN  PAREN-
                  THESES BEGINNING  IN PRINT POSITION  43. DO NOT
                  SPACE THE  PRINTER.
              ?   PRINT THE  DESCRIPTOR CENTERED  ON  THE  PAGE.
                  SINGLE SPACE  THE  PRINTER.
              *   DISPLAY  THE  DESCRIPTOR ENCLOSED IN  PAREN-
                  THESES BEGINNING  IN PRINT POSITION  25. 00 NOT
                  SPACE THE  PRINTER


             PRDESC, PKLINF


             VARIA3LES USED
             IUNIT
             LETTER
             ICOL, LINE
             WS
             CARCON,JOB


             DESCRIPTION
             THIS INTEGER  VARIABLE  CONTAIN^ THE  ADDRESS IN WORK
             ING STORAGE OF  THE DESCRIPTOR.
      LOMM ON/Cn RSET/^ETTrR(^7)
      «OHMON/CODL^O/ICOL,L:OI_,LINE (150)
      oOMMON/IOCNT/ J06,CARCON
      LOMMON/W3KK/NFXT,^SST,ICURVE,IUNIT,IOATA,ITITL£
      LOMMON W5 (6G01)
c
c
c
STEP 1
             OBTAIN  THE  ADCPESS IN WORKING  SJORAGE OF THE DESCRI-
             PTOF. IF  THERE IS NO DESCRIPTOR,  END LOCAL PROCESSING
      !U=hS(IU)
      1F(IU.EO.0)GO  TO  999
         FIGURE II-8-2.1.  LISTING FOR SUBROUTINE VESSEL

                                 248

-------
C     ?TEP 2        nrvMhCH  KC:OxClNG  TO  THE CESIkED  FORMAT.
C
      iF(IFO"Vt-?)  10, 15, ?0
C
C     STEP 3        DISPLAY  THE CESCFiPTOf  cEGiNNING AN PRINT  POSITION
C                   <*3.
G
   10 ICOI_ = <»3
      JOB = -1
      LINE (ICOL) = uLTr EP(t*l)
      oAi_i_ P^D'S^ (WS (IU))
                         (U? )
      CALL ''KLIME
      GOTO 999
G
C     STEP k        DISPLAY  THE DESoRTPTOR CENTRhu  ON THE PAGE.
C
   15 IGOL = 0
      CALL P*OESC(WS (IU))
      J05 = Q
      CALL PKLlME
      GOTO 999
C
C     STEP 5        DISPLAY  THE jESCRlPTOP ENCLOSED  IN PARENTHESES
G                   BEGINNING IN PRINT  POSITION  25.
C
   20 ICOL=25
       J03=-l
      LINEUCOi.) =LETT Ex Ct
      CALL  PRJ-St I US (IU) )
            PKLlNE
C
C     STEP  6        END  LOCAL PROCESSING.
C
      ENL
              FIGURE 11-8-2.1.  (Continued)
                                  249

-------
                            8.3  Subroutine PRHEAD

          Subroutine PRHEAD  controls  the printing of the page heading for
each page of output.   Figure II-8-3.1 contains  the listing and basic documen-
tation for the routine.
                                       250

-------
      SUBROUTINE  D-'HCAC
r-
L.
o     TITLE(PKTNT  HEADING)
C
C     SUBROUTINE.  r'FHEAG IS USFD  TO  PKxNT A PfiGE  HEADING ON THE  UPPER
C     uEFT-HAN3 CO'NFR 0^ EACH PAGE  OF OUTPUT  FROM  THE RUN. THIS  HEAD-
C     ING CONTAINS  THE USED ^UPPLl^C PUN DESCRIPTION ALONG WITH A  SE-
C     QUENTIAL  PAGE  NUMFFR.
C
G     COMMON        VARIABLES USED
C     /CODFPC/      ICOL
I     /IOCNT/       J03, ~ARCON
C     /CHRSFT/      LETTER
C     /WORK/        ITITLE
L     //            MS
C
C     EXTERNAL}     PRDESC, CNVTIE,  PKLINE
C
C     \/A^IA3LE      DESCRIPTION
C     IPAGE         THIS INTEGER.  VARIABLE CONTAINS THE PAGE NUMBER.  IT
C                   IS  INITIALIZED  AT ZERO, AND IS INCREMENTED BY  ONE
L                   UPON EACH CALL  TO THIS KOUTINE
C
      COMMON/CHRSET/LETTER («*?)
      COMM ON/CODE RC/ICOL,uCOL, LINE (150)
      COMHON/IOCNT/ J03,CARCON
      CONHON/WOTK/NEXT»1-A5T,ICUR>/E,IUNIT,IO/1TA,ITITLE
      COMMON WS(60QO)
      INTEGER  KS,CARCON
      DATA IPAGE/3/
C
C     STEP 1        INITIALIZE  THE  NUMBER OF CHARACTERS CURRENTLY  IN THE
C                   OUT-PUT LINE AT  ZERO.
r
      ICOL=0
r-
C     STEP 2        ENThR  THE USER  SUPPLlEu RUN TITLE INTO THE OUTPUT
C                   LINE,  USING SUBROUTINE  P R 0 E  S C .
C
      CALL PROESC(WS( ITITLE ))
C
C     STEP 3        USING  SUBROUTINE   C N V D I S ENTER THE WORD   PAGE
i-                   INTO THE OUTPUT  LINE.
C
      CALL CN\/TlE(2SS7?66!7,6,-2)
C
o     STEP k        INCREMENT THE PAGE NUMBER BY  ONE.
         FIGURE II-8-3.1.  LISTING FOR SUBROUTINE PRHEAD

                                  251

-------
c
C     STEP 5        UiING SUBROUTINE   C N V C I  S   ENTER THE PAGE  NUM-
C                   3EK INTO THE  OUTPUT LINE.
C
      CnLL CNVTIE(IPAGE,0,-1)
C
C     STEP 6        USING SUBROUTINE   P R L I N  E   WRITE THE HEADING,
L                   KlGHT-JUbTIFIED WITH A PAGE  EJECT. THEN END LOCAL
C             '      PPOCE3SING.
C
      JOB=1
      CARCON=LETTEP<28)
      GALL PRLINE
      CARCON=LETTER(^5)
      CAi-L P
      RETURN
      END
                  FIGURE II-8-3.1. (Continued)
                                  252

-------
                           8.4  Subroutine OUTPT1

         Subroutine OUTPT1  generates  the  specific  gravity analysis  for
flowstreams report.  Figure  II-8-4.1 contain  its  listing.
                                       253

-------
                 OUTFTK^EEDtSIZEtGBOUNj , NS IZE , NGRA V , NCHAi\,       YFLOW,
      TITLE(OUTPUT FLOWSTREAM SPECIFIC GRAVITY  ANALYSIS)

                  OUTP71  IS  USED TO GENERATE THF Ft_OWSTREAM  SPECIFIC
                    DESCRI°TION
                    THIi  REAL,  3-DIMENSIONAt ARRAY CONTAINS  THE  DETAILED
                    DESCRIPTION OF TH^ F^OW  STREAM.
                    THIS  REAL,  1-OIMENSIONAL ARRAY DEFINES  THE  SIZE
                    FRACTION DISTRIBUTION.
                    THIS  REAi_,  1-DIMENSIONAL ARRAY DEFINES  THE  SPECIFIC
                    GRAVITY DISTRIBUTION.
                    THIS  INTEGER VARIABLE  DEFINES THt NUMBER OF  SI7E
                    FRACTIONS.
                    THIS  INTEGER VARIABLE  DEFINES THE NUMBER OF  SPECIFIC
                    GRAVITY FRACTIONS.
                    THIS  INTEGER VARIABLE  DEFINES THE NUMBER OF
                    oHAr.ACTERISTICS.
                    THIS  -^EAL VARIABLE DEFINES  THE *MOUNT OF MATERIAL
                    IN  THC-  FLOWSTREAM.
                    THIS  INTEGER VARIABuE  DEFINES THE FLOWSTREAM FOR
                    WHICH VALUFS ARE BEIMG  DISPLAYED. IT CAN  HAi/E ONE
                    OF  TWO  TYPES Or SETTINGS.
                    uODP  MEANING
                    + T    THE VALUE FOr, THE  I-TH FLOWSTREAM IN THE CON-
                         FIGIKATION IS oEING DISPLAYED.
                    -I    THE VALUE F0~ 1 HE  I-TH iNPUT FLOWSTREAM IS BEING
                         DISPLAYED.
                    THIb  2-31MENSj.ONAL, INTEGER «RRAY DEFINES THE ORIGIN
                    AMD DESTINATION OF THE  FLOWSTREAM.
                    "HIS  1-DIMENSIONAL RE4<_  ARRAY CONTAINS THE FLOWSTREAM
                    TYPE  CODE.

                    VARIABLES USED
                    I:HAR,IPTU
                    LETTF=
                    ICOL.LTNF
                    C^Fc.OKI, JOF
                    sr-
G
C
C
C
c
Q
L
c
c
c
c
u
Ll
L
C
C
0
c
c
c
c
c
c
o
c
c
r
w
c
c
c
c
c
c
c
c
c
c
c
L

TITLE(OUT

buBPOUTI N
GRAVITY R

PARAMETER
FEED

^IZE

G30UND

NSIZE

NGRAV

NC H A R

YFLOW

IFLOW







KF

c
COMMON
/WORK/
/CHRSET/
/CODERCV
/IOCNT/
//
/5LK1/
        PPCESC,  PRHEAu,
                                                     P^SIZE,  SDSIZE
L
I
ss
THIS INTEGER  VARIA-3LE IS UoED  TO  STORE THF CURRENT
l-LOkSTREAM  TYPE  COPE
             FIGURE II-8-4.1.  LISTING FOR SUBROUTINE OUTPT1

                                 254

-------
c
c
u
G
C
c
c
c
c
c
c
c
c
c
u
c
r
w
C
c
c
o
c
c
c
c
L
C
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
L
c
c
Si,S2,S3

EP5ILN

NLPAGE

NC

IGIR

J.CUM

I°S

ICH

IG

LG

1C

TOTAL

W

IPASS

IS

ISTORE

I
III

J
K
KK

LINES

NG

NS

CUMV

DIrcV

                                                     OUTPUT
                                                       THE
                                          CURRENT
                                          INITIAL SPECIFIC
                                          FINAL SPECIFIC
                                               OF THE
THESt xNTcGER VAR^At-LES  CONTAIN  THE  POSSIBLE
FLOWSTREAM TYPE CODES C,  M,  R.
THTS \EAL VARIABLE CONTAINS  THE  EPSILON  VALUE  FOR
ZERO.
THiS INTEGER VARIABLE CONTAINo THE  NUMBER  OF LINES
PER PA3E.
THIS INTEGER VARIABLE CONTAIN^ THE  NUMBER  OF
CHARACTERISTICS CUKKENTLY  BEING  PROCESSED.
THIS INTEGER VARIABLE CONTKOLS THE  FLOWSTREAM
IN DIRECT PERCENT
THIS INTEGER VARIABLE CONTROLS THE  FLOWSTPEAM  01
iN CUMULATIVE FORM.
THxS INTEGER VARIABLE COUNTS THE  PASSES  THROUGH
GROUPS OF CHARACTERISTICS.
THIS INTEGER VARIABLE CONTAINS THE
CHARACTERISTIC DESCRIPTORS POINTER,
THIS INTEGER VARIABLE CONTAINS THE
GKAVITY FRACTION.
THii. INTEGER VARIABLE CONTAINS THE
GRAVITY FPACTION.
THIS INTEGE.^ VARIABLE CONTAINS THE
CHARACTERISTIC.
THIS REAL VARIABLE CONTAINS  THE  FLOWRATE
FLOWSTRxAM.
THIS ^EAL VARIABLE CONTAINS  THE  WEIGHT OF  FEED IN A
GIVEN SIZE FRACTION.
THIS INTEGER VARIABLE IS  USED AS  AN  INDICATOR  FOft
THE FIRST PAGE OF THE CURRENT OUTPUT.
THIS INTEGER VARIABLE IS  USED AS  A  SIZE  FRACTION
COUNTER.
THIS INTEGER VARIABLE
FRACTION AT THE START
THIS INTEGER VARIABLE
THIS INTEGER ,/ARIAeLE
WORKING STORAGE.
THIS INTEGEK VARIABLE
THIS INTEGER VARIABLE
THIS INTEGEK VARIABLE
CURRENT CHARACTERISTIC.
THIS INTEGER VARIAB_E IS
OUTPUT.
THIS INTEGER VARiABuE CONTAINS
GRAVITY FRACTIONS.
THIS INTEGER VARIABLE CONTAINS
FRACTIONS.
THIS REAL 1-CIMENSIONAL  ARRAY
CUMULATIVE FEED ANALYSIS.
THIS REAL 1-CIMENSIONAL  ARRAY
PERCENT FEEL. ANALYSIS.
IS
OF
I
I
I
s
c
o
S
IS
I
s
USED TO STORE THE
THE CURRENT PAGE.
USED
USED
USED
USED
USED
AS
AS
AS
AS
A3
DO L
A
A
A
A
PO
DO
DO
S
IZE
OOP COUNTER.
INTER
LOOP
LOOP
COUNTER
I
C
C
N

OUNTER

*
OUNTER.
FOR
THE

                               USED AS  A  LINE COUNTER  FOR
                                     THE  NUMBER  OF  SPECIFIC
                                     THE  NUMBER  OF  SIZE
                                     IS  USED  FOR  THE
                                        USEC  FOR  THE DIRECT
FIGURE II-8-4.1.  (Continued)


                   255

-------
c
c
c
c
(j
c
c
c
L
c
c
c
SUNV1
              THIS  .^EAL 1-DIMENSIONAL ARRAY  IS USED FOR
              CALCULATING THE  DIKE:!  PERCENT  AND CUMULATIVE FLOWS.
              THESE REAL VARIABLES ARE USED  FOR TEMPORARY
              STORAGE.
              THESE 1-DIMENSIONA^  INTEGER  ARRAYS CONTAIN  INTERNAL
              DISPLAY CODES  FOR  OUTPUT PURPOSES.
LD7.L01
L012,LD
       0, Lull
       13,LSP
LFS,LUN,LCP,
      COMNON/WORK/NEXT,LAST,ICURVEiIUNIT,IOATA,ITITLEtICHAR»IFLH,IASHt
       ISUu, IRTU
      COMMON /CHRSET/LETTERtW)
      COMMON/CODERC/xCOutLC-OL ,LINt(27»,CA(123)
      DIMENSION  riRV(10> ,SUHV(10I ,CUMV(10}
      COMPON/IOCNT/ JOB,CARCON
      COHMON  S&{6000)
      INTEGER  SG
      CIMENSION  FEFO(NSTZE,NGRAVfi*> , SIZE C 231 , GBOUNO ( 11) , KF ( 2 , 1) ,S ( 1)
      DIMENSION  Li»P< 71 ,LIS (5) tLFS (5) ,LCO Ul ti-FT (3 ) , LUN «t) ,LGP C6 ) ,LMP (6)
TNTEGEN :
INTEGER ?
n«TA S1,S
CATA EPSI
OATA NLPn
DATA LSP(
DATA LSP (
DATA LISt
CATA LIS(
DATA LFS(
DATA LFS(
CATA L"0(
DATA LFr(
DATA LUN(
DnU uCP(
                Dia(3),Lull(3),Lul2(i*)fLD13(3)
                ARCON
                ,SS,SltS2,S3
                2,S3/1HC,1HM,1HR/
                LN/O.OOOOOOOni/
                GE/^9/
                11 , LSP(2),LSP(3),LSP(«*)/28, 322962089, 10 3037767, 30 23«*27%9/
                5) ,L3P (6), LSPt 7 )/if 312^1873, 2079586 11, 1852S6/
                l),^IS(?),LIS(5)fl.IS(«») /1 9 , 15**73ie 60 , 76 0038533 , 20370325/
                ?)/ 3«»16t»02/
                l),uFS(2).LFS(3),LFS(«f)/17, 103871955, 3tf 0 2tt'3V69, 75a731586/
                5)/338/
                1),LCO('),L30{3) ,L CO ( <» ) / 1 1 , 6687 H>6<»«» , 15<»751 30 0
                l),LFT(.?),i.FT(3) /7 , 1 0 199^ 797 ,
                1> , LUN (2),LUN( 3) ,LUN(£f)/ll, 35
                l),LjF(2),LCP(3) ,LCP(«»)/ 23, 53
                                      6687 H>6
                                      7 , 1295/
                                      3560 297 J»l , 2«* Qt» 39«»2y , 1 8/
                                      53^979 3,(.KP(U
      DATA LMP(-S) ,LMP(6)/557C59?50,973/
      DATA L-P(i) , L-?P(2),L^P(3) ,LRPC*)/19t 3033265i»7, 95 749263 ,726275 0 1/
      0>iTA L C; 1(1), ...j If), L01(^),L01(«+)/20, 25 F.1* 1«* 153,2 1*6 836053, 2373 25 13«»/
      LAi A LLl(5>/3557373^«/
      LATA L12(l),_02(?),LJ?(3),L02('+)/25,68t*9a697,235225679,2i*6e36053/
                  FIGURE II-8-4.1.  (Continued)
                                  256

-------
      DATA LD2(5) , LD2 < 6 )/ 2373 2513 V, 35573 793 8/
      DATA L03 (1) ,L03(?),LQ3t3)/8,32?9620S9,25155/
      CATA LOVdNLOVmtwDV (3),LOV(V)/15, 695V 22 11 , 3 V7786293 , 30 2797716/
      CAT A LQ5<1), i_Q5(2), C.D5 (3) , L 05 ( V) f 19 , 5589 1276 , 22058 373 , 76 361 V290/
      DATA LD5(5)/8073?B/
      OATM LD&(l),LO&m,LD6<7),L06,LD12(3)/15, 26 9820101,21*3309 19 O/
      DATA L012(4)/756^97719/
      DATA L 013(1) ,LD13(2),L313(3)/8,10387195*,5381/
C
C     STEP1         INITIALIZE  THE  /ARIABtES CONTROLLING THE PRINTING.
C
      IF (NCHA3.GT. 10)  NC=10
      iOxR = l
      IGUM=1
      IFINC.GT.5)  ICUM=0
      IPS=Q
      IC = 0
      ICH=ICHAR
C
C     STEP 2        COMPUTE THE  INITIAL AND FINAL  SPECIFIC GRAVITY
C                   FRACTIONS  TO BE PRINTED.
C
      IG = B
      DO VI J=1,NGRAV
      H=0. 0
      DO VO I=1,N5I7=
      W=W + FEED(I, J,l)
   %0 CONTINUE
      IF (W.LT.£PSILN) GO TO VI
      LG= J
      IFUG,EQ.Q)IG = J
   VI CONTINUE
      IFdG.ECU 0)GO TO 999
      IFtlG.GT. 1IIG=IG-1
      IF(LG.LT.NG
-------
   IPASS=0
   NS=NSI7E+1
   IS = 0
2? IS=IS*1
   IFCIPASS.EQ. 0)GO TO 28
   IF(IS.GT.NS)  GOTO 18
   IF(LINES«-NGRA\/. LT.NLPAGEIGO  TO 17
18 IF
-------
   LINE(1COL)=LETTER(^5)
   CALL PROESC(LCO)
19 CALL PRLINE
   CALL PK1.INE
   JOB = -1
   IPASS=1
   IFCIFi.OW.LE. 0)GO TO 16
   IFtKFdtlFLOrt) .GT.OIGO TO  12
   CALL °ROESC(LFT)
   1=2
   GO TO  22
12 IF (KF( 2,IFLOW) .GT.O) GO TO  15
   SS = S (IFLOW)
   1=1
   IFiSS       .NE.SDGO TO  13
   CAuL PR3ESC(LCP)
   GO TO  22
13 IF(S5       .NE.S2)GO TO  1^
   CALL PRDESC(LMP)
   GO TO  22
IV IF
-------
    CALL
    CALL ?*ROES:(L05>
    GOTO 95
 90 ICOL=ICOL+?5
    IF(IOIR.EQ.l)  CALL PRDESCfLDM
    IFdCUM.EO.l)  CALL PRDESC(LD5)
 95 CONTINUE
    CALL PRLINE
    ICOL=8
    CALL PR3rSC(L06J
    ICOL=ICOL*8
    GALL PRDESC(LD7)
    ICOL=ICO_ + 9>>
111 IT1=IT1*15
    IFCNCHAR.GT.5)  GOTO 112
    IT1=ICH
    00 182 1=1, NC
    CALL PRDESC(i>G(ITl*9) I
102 IT1 = ITH-15
112 CALL PRLINE
    ICOL=51
    IT1=ICH
    DO 103 1=1, NC
    CALL PROESCfSGdTH-12))
    ICOL=ICOL*1
103 IT1=IT1*15
    IFINCHAR.GT.5)  GOTO ll«t
    IT1=ICH
    00 10«> 1=1, NC
    CALL PROESC (SG(IT1*12) )
    ICOL = ICOL*-1
18% IT1 = IT1*-15
1H» CAcL PRLINE
 17 IFtSUHMRYdb,!) .cT.H.Olf^9)GO TO  51
    LINE5=LINES+NG+1
    00 7i* K = 1,NC
    iUMtf «) = 0.0
    CUMVfK)=0.0
 M CONTINUE
    DO it J = IG,LG
    IF(IS.EQ.NS) GO  TO 9
                FIGURE II-8-4.1.   (Continued)

                               260

-------
   DO 75  K=l«Nu
   Oiktf «)=F£EO (TS, J,KK)
75 CONTINUE
   GO TO  61
 9 DO B2  K=i.NC
   KK=K+IC
   CIP\MK)=0,0
   JO 32  I = 1,N5IZF_
   OIRVfK)=CIRy/(K)+FEED(I,JfKK>
82 CONTINUE
81 IF(Iu.EQ.O)  OIRV1=OIRV(1)
   IFtDIRVl.uT.EPSILN )  GOTO  60
   00 83  K=1,N3
   IFdC.EQ.O.ANO. (K.ra.l.OR.K.EQ.IBTJ) ) GOTO  93
   DliiV (K)=OiR\/ «)*100. 0
83 CONTINUE
   DO 76  K=1,NC
   SUMVCK)=3UMV(K) *CI?\/ IK)
76 CONTINUE
   IF(IC.EQ.O)  SUMV1=SUMV (l)
   DO 79  K=1,NC
   IF
-------
     ICOL=3
     CALL PPOESCILD12)
     CALL CNYTIE(YLD,6,i>
     ICOL=ICOL+1R
     CALL CNVTIE (GoOUNOU) ,
     ICOL=ICOL+13
     CALL CNVriE(GaOJND( J)
     xCOL=ICOL+l
     LINE(ICOi.>=,.ETTER (38)
     GOTO "5
  77 IF( J.EQ.LOGO TO 76
     CALL CNVTiE( G80UND( J) f ^, 2)
     ICOL=ICOL+1
     LINE(ICOL)=LETTER (38)
     GOTO 5
  78 CONTINUE
     ICOL=l»0
     CALL CNVTIFCGBOUNOU) »i*,2)
     CA*.L CN(/TIE(6**255271«5, Q,-2)
     ICOL=ICOL*1
     GOTO 6
   5 CONTINUE
     CALL CNVTIE(G90UND( J + i) t**»2»
     ICOL=ICO.*1
   6 CONTINUE
     IPdDiR.EQ. 0 )  GOTO 3
     DO 3 I = 1,NC
     xPdC.Ed. 0. AND. I.EQ.IBTU )  GOTO 2
     uALL CN^TIE(DTP/ (I) ,8 »?)
     GOTO 3
  2  CALL CNVTIE (DIxVf IOTU) ,8»OI
  3  CONTINUE
   
-------
  123  CALL "KLINE
    %  CONTINUE
   51  GOTO 27
C
C      STEP 5        FNO  LOCAL PKOCESSING.
C
  999  REiURN
       END
                        FIGURE 11-8^4.1.   (Continued)
                                    263

-------
                            8.5  Subroutine CMPUS

          Subroutine CMPUS  computes the unit performance measures for the
washing,  two-stage washing,  and froth flotation unit operations.  The
computations themselves  are described in detail in Volume I, Chapter 6,
Part 4.   Figure II-8-5.1 contains the listing.
                                      264

-------
C
c
C
c
c
c
C
C
C
G
C
C
C
c
c
c
G
C
G
c
c
c
c
c
c
c
c
c
c
c
c
c
G
G
C
•c
c
c
c
c
c
I
c
G
SUBROUTINE CM<>Ui
-------
C     STEP 3        MOVING THROLGH  ALL  SIZE FRACTIONS  ANL THE COMPOSITE,
C                   COMPUTE THE VALUES  FOR SPECIFIC  GRAVITY OF SEPARA-
C                   TION, PROBABLE  ERROR,  IMPERFECTION,  AND AuTUAL RE-
C                   COVERY.
C
      00 Ml 1=1, NS
      SYLD(I)=0.0
      SINP(I)=0.0
      SGKAV(I)=0.0
      IF(SUMRY(I,ISFD) .LT.l.E-6)  GOTO  X2=YINT?P(FACTOR,GRHV,25. O.NGRAV)
      SPE(I»=-EQUIP(5I )
      SYLD (1) = 100.0*YLDC:*SUMRY(I,ISCC)/SUMRY(I,ISFOI
      CONTINUE
C
C     STEP •»        MOVING THROUGH  THE INDIVIDUAL SIZE  FRACTIONS, COM-
G                   PUTE THE VALUES  FOR THEOFETICAL RECOVERY, RECOVERY
C                   EFFICIENCY, BTU  RECOVERY, AND ASH ERROR.
C
      ISCA=ISC3+IASH-1
      ISCB=ISu:+IBTU-l
      ISFB=ISFD*IBTU-1
      CO 51 I=1,NSIZE
      TYLDd ) = 0.0
      8TURECm=0. 0
      EFFIC(II=0.0
      ASHERR(I) =0.0
      IF(SUMRY(I,ISFD) .LT.l.E-6) GOTO 51
      SCMWT<1>=0.
      SCMASH(1)=8.
      wT = o.a
      00 12 J=1,NGRAV
   12 WT = HT*-FEErDtI ,J, 1)
      DO 500  J=2,MG
      J1=J-1
      SCMWT (J) = 0.
      Si^MASH( J) =0.
      00 50 K=l,Ji
      SCMWT(J)=SCMWT(j)-fFEEO(I,K,l)
   50 SCHAiHl J)=SCMASH(J» 4-FEEO (I,K,IASHI
      IF(SC,MWT( J) ,i_T.l.E-6)GO  TO 5QD
      SCM/iSH(J)=100.0*SCMASH(J)/SCMWT(J)
                  FIGURE II-8-5.1.  (Continued)


                                 268

-------
C                   THE DISTRIBUTION  CUKt/ES.
C     K             THIS  uUMttY INTEGER  VARIABLE IS USED  TO CONTROL THE
C                   MOVEMENT THROUGH  THE  INTtGERATION  LOOPS WITHIN THE
C                   CALCU.A'ION OF ERROR  AREA.
C     Z             THIS  DUMMY REAL VARIABLE IS USED IN  THE CALCULATION
C                   OF  ERROR AREA.
C     IUO, UO       THo.5  TYPELESS VARIABLE CONTAINS THE  UNIT  OPERATION
C                   TYPE  OOuE FOR THE UNIT.
L,     ISCA,IS03,    THESE DUMMY INTEGER VARIABLES ARE  USED FOR TEMPORARY
C     ISFB          STORAGE
G
      DIME MS I ON FEEOtNSIZE,NGRAV,5) ,CC(NSIZE,NGRAV,5),EQUIP(5)
     1          ,REF(NSIZE,NG*AV,5) , SIZE(23) ,GRA vM NGRAiH , GBOUND ( 21)
      COMMON/oLKl/ISFO,ISOC,ISRF,ISMX,SY(_0 (24) ,TYLO(24),EFFIC(2M f
     1 BIUREG(24),ASHERR(24),SFLTI 24),SINK(24) ,SMISPL(24),SNRGP(2%) ,
     2 SGRAV(24),SPE(24),3I^P(24)»SEA(24),SUMRY(24»40)
      COMMON/BuK2/DISTRB(24,20)
      COMMON/WORK/NEXT,LAST,I CURVE,IUNIT,I DATA,ITITLE,ICHAR»IFLW,IASH,
     1 ISUL,IBTU
      COMMON/LOCAuV/NStNG,SUM4,FACTOR(20),SX1,SX2,SCMWT(20),SCMASH(20)
     1              ,J1.SG1,SG2,SG3,F,UX1S0X2,YL,YR,SUM1,SUM2,Z
     2              ,UO,LVFILL(117)
      EQUIVALENCE  (UO,IUO)
C
C     STEP 1        COMPUTE ONE Pi-US  THE  NUMBER OF SIZE  AND SPECIFIC
C                   GRAv/ITY FRACTIONS.
G
      NS=NSIZE*1
C
C     STEP 2        COMPUTE THE ACTUAL  VALUES OF THE  DISTRIBUTION CURVES
C                   FROM THE DESCRIPTIONS OF THE FEED  AND  CLEAN OUTPUT.
C
      00
      CISTRB(N3»J)=0.0
      SUM*t=3. 0
      DO V350  I = 1,NSTZE
      OISTl4.LT.l.E-9)GO TO *»40
      OISTR3(Ns , J) =100.*DISTRB(NS , J) /SUHI4
  440 CONTINUE
                  FIGURE II-8-5.1.  (Continued)


                                  267

-------
c
c
c
c
r
w
C
C
\J
c
G
C
C
C
c
G
C
r»
o
c
c
c
c
c
c
c
c
c
C
c
c
c
c
c
c
c
0
G
C
u
C
L
C
c
c
c
c
PEFWT
KT
NS


NG


I


I


FACTOR


SXi


SX2


SCMWT



SCMASH


Jl



SGI


SG2
DX1




CX 2




YL


YP


SUM1


5UM2
THIS *EAL VARIABLE CONTAINS THE WEIGHT  OF  CLEAN  COAL.
THIS XLAL VARIABLE CONTAINS THE WEIGHT  OF  REFUSE.
THIS REAL VARIABLE CONTAINS THE WEIGHT  OF  FEED.
THIS INTEGER VARIABLE CONTAINS ONE PLUS THE  NUMBER
OF SIZE FRACTIONS.
THIb INTEGER VARIABLE. CONTAINS ONE PLUS THE  NUMBER
OF SPECIFIC GRAVITY FRACTIONS.
THIS DUMMY INTEGEix VARIABLE IS USED  TO  CONTROL THE
THE MOVEMENT THROUGH SPECIFIC GRAVITY FRACTIONS.
THIb OUMHY INTEGER VARIABLE IS USED  10  CONTROL THE
MOVEMENT THROUGH THE SIZE FRACTIONS.
THIS REAL, 1-DIMENSIONAL ARRAY IS USED  TO  CONTAIN
THE PERCENT TO REFUSE FOR A GIVEN DISTRIBUTION CURVE.
1HIS REAL VARIABLE CONTAINS THAT SPECIFIC  GRAVITY AT
WHICH 75 PERCENT OF THE FEED WENT TO REFUSE.
THIS REAL VARIABLE CONTAINS THE SPECIFIC GRAVITY AT
WHICH 25 P£RCENT OF THE FEED WENT TO REFUSE.
THIS REAL, 1-OIHE NS IONAL wRRAY CONTAINS THE  CUMU-
LATIVE WEIGHT BY SPECIFIC GRAVITY FRACTION FOR THE
                            0.1 LESS  THAN  THE  SPEC-
                            THE SPECIFIC  GRAVITY
                            0.1 Pi_US  THE  SPECIFIC
THIS PEAL, 1-DIMENSIONAL ARRAY CONTAINS THE  CUMU-
LATIVE WEIGHT OF ASH BY SPECIFIC GRAVITY  IN  THE FEED.
THIS CUMMY INTEGER VARIABLE IS USED TO CONTAIN AN
UPPEk LIMIT FOR LOOPS CALCULATING CUMULATIVE  VALUES
FOR THE COMPOSITE.
THIS r^EAL VARIABLE CONTAINS
iFIC GRAVITY OF SEPARATION.
THIS REAL VARIABLE CONTAINS
OF SEPARATION.
THIS REAL VARIABLE CONTAINS
GRAVITY OF SEPARATION.
T^iS PEAL VARj.AB.-E IS USED TO CONTAIN THE FRACTION
OF A °A*TIGULAR SPECIFIC GRAVITY FRACTION WHICH IS
WITHIN A CERTAIN RANGF.
THIS REAL VARIABLE CONTAINS ONE HUNDRETH  OF  THE
DIFFERENCE BETWEEN THE SPECIFIC GRAVITY OF SEPARATION
AND THE FLOAT SPECIFIC GRAVITY VALUE.
THIS REAL VARIABLE CONTAINS ONE HUNORETH  OF  THE
DIFFERENCE BETWEEN THE SINK SPECIFIC GRAVITY  VALUE
ANP THE SPECIFIC GRAVITY OF SEPARATION.
THIb REflL VARIABLE CONTAINS THE PERCENT
FOR THE Fi_OCT SPEuIFIC GRAVITY.
THIS REAu VARIABLE CONTAINS THE PERCENT
FOR THE SINK SPrCIFIC GRAVITY.
THIo LUMMY -^EAL VnRIAbLE IS UiE3 IN THE
OF ERRO* AREA.
     ~FAL VARIABLE IS USED AS A GUMMY IN
     OF E.^ROR AREA.
     CUMflY VAKlABLE IS USED IN THE COMPUTATION OF
             THIS
             T!ON
             THIS
                                         TO  CLEAN
                                         TO  CLEAN
                                         COMPUTATION
                                          THE  COMPUTA-
             FIGURE II-8-5.1.  (Continued)
                                266

-------
      IF(SCMASH(J).LT.SoMA5H(J-l))3CMASH(J)=SGMASH(J-l)
      SCfWT(J»=SCMWT{J)*lflO.O/WT
  500  CONTINUE
      TYL01I)=V1NTKP(3CMASH,SCMWT,5UMRY(I,ISCA>,NG)
      IF(TYLD(I).GT,Q.)EFFICm=i!JO.*SYL3(I)/TYLOm
      5TUREJ(I)=100.*Y1_bC3*SUMRY(I,ISCC) *SUMRY (I, ISC5)
     l/ =0.
      CO 52 K=1,J1
      00 52 I=1,NSI7E
      SCMWTt J)=SwMWT( J) -HOO.*FEED(I,K,1)
   52  SCMASH(J)=i>GMASH(J)*FEEO{I,K,IASH)*-100.0
      IF(SCMWT(J).LT.l.E-6)GO TO  520
      SCMASH(J)=100.*SCMASH(JI/SCMWT(J)
      IF(S-OMASH( J) .LT. SCMASH( J-l) »SCMASH( J)=SCMASH( J-l)
      SCMWT(J)=SCMWT(J)/WT
  520  CONTINUE
      TYLD(NS)=Y1NTRP(oCMASH,SCMWT,SUMRY(NS,ISCA),NG)
      IFlTYLD(NS).GT.Q.)FFFIC(NS)=100.*SrLO(NS»/TYLD(NS)
      BTU REG  / (
     1 SUMRY(NS,iSFO)*SUMR¥(NS.ISFB))
      ASHERi«NS)=SUMSY .LT.l.E-6)  GOTO- 57


                  FIGURE II-8-5.1.   (Continued)

                                  269

-------
      SG1=SGRAV (I) -0.1
      SG2=SGRAVU)
          SGR4rf (II +0.1
      GCWT=0.0
      DO IV  J=1»NGRA./
      Cb*T=CCHT+CC (I, J»l)
      RFFWT=REFWT+REF(I,J,1)
      DO 56 J=l
      IF(SG2.Gr .GBOUNC( J) ) GO TO 5k
      IFCSUNRVdtlSCC) .LT.i.E-6) GOTO  56
      iINK(i)=3INK(I)*CC(I,J» 1)*100.0/C3WT
      SHISFL (I)=SMISP».(I) •H00.0*CCU,J»1)/WT
      GO TO 56
      IF(SG2.LT.GBOUNO(J-H» )GO TO 55
      IF(SUMRf (I,ISRF> .LT.l.E-6) GOTO  56
                   (I)+100.0*REFU,J, 1)/)GO  TO 570
      F = l. 0
      IF ((SG1.GE.G BOUND (J) ).ANO. < SG3 . LF. G8 OUND (J + l) ) )
     1  F=(SG3-SG11/(GBOUN3< J+1)-GBOUNO( J» )
      IF( (SG1.LT.GBOUNO( JM.ANO. (SG3 .cE. GB OUND < J + l) ))
      IFt (SGl.uT.GBOUNCU) ) .AND. ( SG 3 ,LE. G80UND (J + l) ) )
     1 F= *-F*FEEO(I , Jt 1 )*10fl . 0/WT
  5/TO CONTINUE
   57 CONTINUE
C
C     ^TFP 7        FOR THE  COMPOSITE,  COMPUTE THE VALUES  OF SINK IN
c                   CLEAN,  PLOAT  IN  REFUSE,  AND TOTAL  MISPLACED MATERIAL
c
      £Gl = S3RAi/(NS 1-0.1
      SG2 = SbRA^/ (NS)
      SG^ = SG^AV (NS) +3. 1
      SFuT (NS) =0.


                  FIGURE II-8-5.1.  (Continued)


                                 270

-------
      SINK(NS)=0.
      SMISPL(NS)=n.
      SNi\G*.(NS) =0.
      WT=O.Q
      ccwT=n. o
      REFWT=0.0
      DO 15  1 = 1 ,NSIZE
      DO 15  J=1,NGRAV
      CCWT=CCHT+CC (IfJ,l)
      SFFWT = P'EFWT«-REF=SINK(NS)+100.*F*CC(I,J,l)/CCWT
   62 SMISPL (NS)=SMI3PL(NS) H-l 00 . 0* { F*REF (I , J, 1) «• ( 1, -F ) *CC (I , J ,1) )/WT
   &3 CONTINUE
C
C     STEP 8        COMPUTE  THE VALUE OF NEAR GRAVITY  MATERIAL FOR THE
C                   COMPOSITE.
C
      00 65  J=1,NGRAV/
      IFUSG1.3T.GBOUNO U+l) ) .OR« (SG3.LT.G30UND(J>) )GO TO 65
      F=l.
      IF((SG1.GE.GBOUNO(J)).AND.(SG3.Lt.GBOUND(J*l)))
     1 F=(SG3-SG1)/{GBOUND(J+l)-G80UND 
      IFUSGi.L7.G60UNCUM.AND. ( SG 3 . LE. bB OUND (J-H) > )
     1 F=(SG3-&60UNO(J))/(&BOUND(J*l)-GBOUNO(J)J
      IF((SG1.GE.GBOUND(J)).AND.(SG3.GT.GBOUND C J + l)»)
     1 F = (GBOUNO(J-H)-SG1)/ ( GB OUNO ( J+1)-GB OUND (J ) )
      00 6^  I=1,NSIZE
   6% SNRGR
-------
      SEA(II=«.0
      IF *C2-1. »*DX2,NGRAV)*OX2/5. 0
      SEA(II=5.0*(ieQ.O*iSGRAVCI)-GBOUNO(lH-SLIf!l»SUf»2)
   69 CONTINUE
C
C     STEP IS      END  LOCAL PROCESSING.
C
  999 RETURN
      END
                  FIGURE 11-8^-5.1.  (Continued)
                                 272

-------
                           8.6   Subroutine OUTPT2
          Subroutine  OUTPT2  generates  the summary  performance of  units
reports. Figure  II-8-6.1  contains  the  listing.
                                      273

-------
C
G
I
C
G
C
C
G
C
C
C
C
G
C
G
C
C
C
C
C
G
C
G
C
C
G
C
C
C
C
C
C
C
C
C
G
G
C
C
L
C
G
u
U
SUBROUTINE OUTPT2 (SIZE,GBOUNH,NSIZE,NGRAV«NCHAR,IU.IUO,01»02,D3)

TITLE!*EPOKT ON UNIT PERFORMANCE)

SUBROUTINE QiiTPf2 IS USEu TO CONTROL  THE PRODUCTION OF THE
VARIOUS i^EPO^TS WHi:H DEFINE THE  PERFORMANCE OF THE UNxTS WITHIN
THE SIMULATION.
PAFAMETE*
SIZE

G80UNU
NSIZE

NGkAV

NCHAn;

IU

IUO

01

D2

03
COMMON
/BLK1/
/IOCNT/
/CHRSET/
/BLK2/
/GODERC/
EXTEtNALi

VAKTA3LE
I,K

NSTA=7

NS
DESCKlPTION
THIS i-CIMENSIONAL REAL  ARRAY  CONTAINS THE SIZE
DISTRIBUTION FO*  THE  FLOhSTREAM.
THIS ^EAL 1-DIMENSiONAL  ARRAY  CONTAINS THE DEFINITION
OF THE SPECIFIC GRAVITY  DISTRIBUTION FOR THE
THIS INTEGER VARIABLE  CONTAINS THE NUMBER OF SIZE
FRACTIONS.
THIS INTEGER VARIABLE  CONTAINS THE NUMBER OF SPECIFIC
GRAVITY FRACTIONS.
THIS INTEGER VARIABLE   CONTAINS THE NUMBER OF
CHARACTERISTICS.
THIS INTEGER VARIABLE  CONTAINS THE SEQUENCE NUMBER
OF THE UNIT BEING  DESCRIBED.
THIS INTEGER VARIABLE  CONTAINS THE UNIT OPERATION
TYPE CODE OF THE UNIT.
THIS REAL VARIABLE CONTAINS  THE VALUE OF THE FIRST
DECISION VARIABLE  FOR  THE  UNIT.
THIS \EAL VARIABLE CONTAINS  THE t/ALUE OF THE SECOND
DECISION VARIABLE  FOR  THE  UNIT.
THIS R'AL VARIABLE GONTAINS  THE VALUE FOR THE THIRD
DECISION VMRlflBuE  FOR  THE  UNIT.

VARIABLES USED

CARCON,JOB
DISTRP
ICOL, LINE
lETU.IGHAR
FLOAT, VESSEL, PRSIZE,  PFHEAD,  CNVTIE, PROESC, PRLINE
DESCRIPTION
THESE DUMMY INTEGEK VwRIABLES ARE USED TO CONTROL THE
MO/TMENT THROUGH  LOGAL  LOOPS.
THIS INTEGE-s VARxABuE  CONTAINS  VHE SEQUENCE NUMBER
OF THE uAh:GcST SIZE FRACTION CONTAINING ANY MATERIAL.
THiS INTEGER VARIABLE  CONTAINS  THE TOTAL NUMBER
OF VALUES CONTAINED IN  THE  VARIOUS SUMMARY ARRAYS.
             FIGURE II-8-6.1.  LISTING FOR SUBROUTINE OUTPT2

                                274

-------
o
c
c
c
c
c
c
c
w
c
c
c
c
c
c
c
c
L
c
G
c
c
c
c
G
c
c
G
C
c
c
c
c
c
c
c
c
c
c
c
      Kl
K2
IPASS
K3



NLIM


J



JJ,KK
LC^,LPM,NPM,
IADD,IOIG,
LPMD1,LPM02,
LPHD3,NGM,
LOOTS,
LOV1.LDV2,
             THIS INTEGER VARIABLE  CONTAIN^ THE SEQUENCE NUMdER
             OF THE STARTING  VALUE  TO BE  PRINTEu ON THE CURRENT
             PAGE OF THE REPORT.
             THIS INTEGER VARIABLE  CONTAINS THE SEQUENCE NUMBER
             OF THE ENDING  VALUE  TO  3F PRINTED ON THE CURRENT PAGE
             OF THE xEPORT.
             THIS INTEGEP VARI^BuE  CONTROLS THE TITLE AND BRANCH-
             ING APTER THE  TITLE  HAS  BEEN DISPLAYED. IT HAS ONE
             OF TH^EE SETTINGS  AS FOLLOWS.
             CODE MEANING
              i   P^INT TITLE FOR INITIAL PAGE OF REPORT
              0   PRINT TITLE FOR CONTINUATION PAGE AND BRANCH TO
                  DISPLAY UNIT  SPECIFIC  MEASURES.
             -1   PRINT TITLE FOR CONTINUATION PAGE AND BRANCH TO
                  DISPLAY GENERAL MEASURES.
             THIS INTEGER VARIABLE  CONTAINS THE SEQUENCE NUMBER
             OF THE LAST SIZE FRACTION SPECIFIC VALUE ON THE
             CURRENT PAGE.
             THIS INTEGER VARIABLE  CONTAINS ONE MINUS THE NUMBER
             OF SPECIFIC GRAVITY  FRACTIONS.
             THIS DUMMY INTEGER VARIABLE  IS USED TO CONTROL THE
             MOVEMENT THROUGH THE SPECIFIC  GRAVITY FRACTIONS DUR-
             ING THE DISPLAY  OF THE  WASHING DISTRIBUTION CURVES.
             THESE DJMMY INTEGER  VARIABl_tS  ARE USED AS POINTERS
             IN ARRAYS.
             THESF INTEGER  ARRAYS CONTAIN PACKED CHARACTER CODES
             FOR DISPLAY.
LD*/5,LGV6,
LDV7,LOV6,
LDV9,LGM1,LGM


NS


ISPEC


NEW,NH,NLA 3,
NN
             THIS INTEGER  VARIABLE  IS ONE PLUS THE NUMBER OF

             SI7F FRACTIONS.
             THIS INTEGER  VARIABLE  IS USED AS M COUNTER FOR
             OUTPUT  PURPOSES.
             THESE INTEGER VARIABLES ARE USED FOR TEMPORARY

             STORAGE.
      DIMENSION SIZE(23),G30UNO<20)
      DIMENSION LDK5),LD2<12),LQ3(13),LDM't)
      COMMON/WORK/NEXT,LAST,I CURVE,IUNIT,I DATA,ITITLE,ICHAR,IFLW,IASH,
     1 ISUL.I3TU
      COMMON WS (BOOO)
                  FIGURE II-8-6.1.  (Continued)
                                 275

-------
 INTEGEP US
 uOMMON/lOCAti//NSTA37,NStKl,K2,lPASS,Kl,NLIM,Lt/lrILi.ll88)
 COMMON/ 3LK1/ ISM (4) , PM ( 24 , 13 ) , SUM^Y ( 24,40 )
 COMMON/BLK2/DISTRB(24,20)
 COMNON/CODE*C/ICOL,LCOL,LINE<150)
 CONNON/IOCNT/JOB,CARCON
 COMMON/CHRi>ET/LETTERU7)
 INTEGER CARCON
 01 HENS I ON NPM(b),IA3D<8),LPM(10,20),lDiG(13l
 DIMENSION LDrfim ,LDtf2( 31 , LQ*/3 (3) , LD \/4 (5) , LOV5 ( 5) , LDV6 (5* ,
11LDY7(5),LDV8(5),LDV9(5I
 DIMENSION LGMK6)
 DIMENSION LPM31<9),LPMQ2(7) ,LPMD3(3)
 DIMENSION NGM(9) ,LOOTS (101
 DIMENSION LGM(7,9,4)
 DATA LDK1) »L01(2),LD1(3) , L 01 «4) /17 , 67360793,756568388 , 760038533/
 DATA LCl(5)/77/
 DATA L02(11 , LD2(2),LD2(3) ,LD2<4)/54,324326209,308728774,760258733/
 DATA LD2(5J,LD2 S6»,LD2(7)/273176962,303385%09,118936581/
 DATA LD2(8I , LD2 ( 9) , LD2 «10) / 303625357 , 20^59885 t 25 31*1678 2/
 DATA LD2(ll),LD2(12)/156ti23061,3«*16^02/
 DATA LC3tl),LD3(25,LD3«3) ,LD3 «J») /57, 32*»326209t 30872877ttf 76025(J733/
 DATA LL)3(5» ,LD3 ( 6) , LD3 17} /2698 20303, 305^02755 , 95695361/
 •DATA IQ3C8S ,LD3C9) , LD3 ( 1 0! / 30 2265605 ,30%«i28297 ,55^976707
 DATA LD3(11),LD3C12)«LD3(13)/76053768%,758731586,3387
 DATA LOU I) , LOM2) ,LD?*{3) ,LDt»««tJ /ll , 6887146 <*, 15^*751300, «»2/
 DATA LPM(l,l»,LPM(2,l)fLPM(3, i )/«*3, 38 722«»®0 8 . 3**7ttl^612/
 DATA LPM(i»,l) , LPH(5«1) fi.PH(6tl J/155 118 ^21, 235951238, 20 535 5860/
 DATA LPMJ7el),LPM(3,l),LPM«9,1)/263^79621,79625199,759190659/
 DATA LPMilO, D/21396/
 DATA LPM(1,2)?LPMC2,2) , LPM C 3, 2 J/«»3 , 38686226 , 2205 7966/
 DATA LPM(^,2),LPM(5,2) , LPM ( 6, 2 )/7605 573«»9»3 0-?612887f 760281926/
 DATA LPM (7, 2), LPM (3, 2) , 1PM ( 9* 2)/85216239v 60 10),^PM(5,6) , L PM ( 9, 6 ) / ~> 0 1 0 454o 7, 6 Q 1 0 45467, 7669 5 84 04/
                 FIGURE II-8-6.1.   (Continued)

                            276

-------
DATA
DATA
QA'J A
CATA
CATA
CATA
DATA
CATA
OATA
OATA
uATA
LDMf 10,6)/6^365/
LPM (1,7), LPM<2, 7)
LPMi4,7) ,,.pM<5f 7)
LPM( 7, 7) ,LPM<3,7»
LPM I 10,7) /S4365/
i_PM( 1, t ) , ,_0M/
)/

*+3
10
oO

f*3
30
8 0

,15)/3Uf.771118, 760021315, 15 260^^)0 9/
DATA LPM(7,15),LPM(8,15),L.PM(9,15)/12216it617,3J+2293«437,e010%5^87/
OATA LPMdO, 15) /195567/
DATA LPM(l,16»,LPM(2,16),LPM(3,lb)/i*3,15«»i*68690» 10 198 7593 /
CATA i_PM(^,16),LPM(5,16),LPM(6,lB)/255523d23,8010«+5^87,9010t*5^87/
DATA LPM(7,16),A.PM(b,i6),i.PM(9,16)/eniO'f5'4b7,8010tt5it87,80in^5/487/
OATA LPM< It3, 16) /195567/
OATA LPM (1, 17) , LPM(2, 171 ,LPM(3,17)/43,68679378,755310913/
DATA L°M<^,17» ,uPM(5 ,17) ,LPM(6,17) / 8 a 10^5^87 , 8 0 10<+5*+87 , 8 0 10«+5t+87/
DATA LPM(7,17),LPH(d,17),LPM(9,l7)/6ni045^B7,8010'+5'+37,8010'+5i»87/
CATA LPM ( 1Q, 17) /195567/
OATA LPM(l,l3),LPMl2,ie) ,LPM(3 ,16) / k 3 , 5^2 6 b 71 7 , 2 7 3215 765/
OATA LPM(i4,lQ->,.-PM<5,l«),l_PM(6,15) / 5 57 3 8 575 ,2010 76 53, 85 130 2 2 3/
OATA LPM(7,lfJ),LPM(4,lb),LPV(9,lo)/8010tf5t*a7,8010^5i*87, 759190659/
                 FIGURE II-8-6.1.   (Continued)

                            277

-------
DATA LPM(1,19),LPM(2,19) ,LPM«3,19) / 43,54268 71 7, 1 548502627
DATA LPM14,19) ,i-PM(5,19-) ,LPM(6,19)/86630031,397751570,642045277
DATA i_PM(7,19) ,LPM( 8,19),LPN(9,19) 78 0 1045467, 801045487, 80 1045316;
TATA LPM (10 ,19)7643657
DATA LPH(1,20),LPMC2,20),LPM(3,20)743,385935085, 1548506387
DATA LPM(4,20) ,LPM(5,2G) , LPMt 6 ,20.) 7 68493708 ,25 7873108, 3033055837
DATA LPM17,20),LPH(8,20),LPM<9,20) 78 0 1045487, 8 01 045467, 80 1045316/
DATA LPMdQ,20)7643657
DATA NPM< 1) ,NPM(2),NPM(3) ,NPM(4)7S, 0,1101001,11111111111117
DATA NPM(5), NPM(6)/11111111 11111, 1111111111111/
DATA NPM<7),NPMC8)/1190B01, O/
DATA IAOD,LDOTS(10)7801045487,801045487,477
DMTA LOI/K1) ,LDV1(?) ,LOV1(3)         732,^22962089,1030377677
DATA LDtfl (*») ,LD/1/34IJ824967,29247
OATA LOV7(1),L3\/7«2>,LDV7<3)/19, 35 658 1714, 7565977197
DATA LDy/7<<+) , i_D;7 (5) 7760038533, 31331 67
DATA LCVs(i) ,LDtfe (2) ,LDV8(3)716,759190659,876409117
DATA LDV6(4) ,LD*/^(5)7112484677,47
DATA LH1/9 (l),L3V9(':'),LD\y9 (3)720, 321233262,7573915607
OATA Lu«/9(4),LD^9(5)/39a52114,7584042967
DATA LGMK1),   LGHK2),  LGMK3)/   25,319627569,2466824977
DATA LGMK4),   LGM1C5)  720 795 &611 , 7 836142907
OATA LGM1 (6)   /5170in3Q7
            FIGURE II-8-6.1.  (Continued)

                           278

-------









































C
L'
C
G
C
u
DHT A
LMTA
DAI A
DATA
DATA
DATA
DATA
DATA
CATA
DATA
DATA
DATA
DATA
DATA
LATA
DATA
DATH
CATA
CATA
OAT A
LATA
bATA
TATA
CATA
DATA
DATA
OATA
DATA
OATA
LATA
DATA
DATA
OATA
OATA
DATA
CATA
DATA
DATA
DATA
DATA
DATA

STEP




LGM
LGM
LGM
LGM
LGM
LGM
LGM
LGM
w v2
LGM
LGM
LGM
LGM
LGM
LGM
LGM
LGM
L GM
LGM
LGM
LGM
LGM
LGM
LGM
LGN
LGM
LGM
LGM
LGM
LGM
LGM
LGM
LGM
LGM
_GM
LGM
LGM
LGM
LGM
LGM
LGM

1




(1
(1
( 1
( i
(1
( 1
( 1
(1
( 1
(1
( 1
(1
( 1
(1
(1
( LI
( 1
(  3,
> 3,
,1 ,
,1,
»1»
,2,
» 2,
,2,
, 2 ,
.2,
, 2,






1 )
1)
1)
1)
1)
1)
1)
2)
2)
2 )
3)
3)
3)
if)
1)
1)
3)
3)
3)
')
2 )
2)
2)
2 )
2)
2)
2)
2)
2)
3)
3)
3)
2)
3)
1)
2)
2)
2)
3)
3)
3)

FI
TI
IS
LO

,
,
,
,
,
,
,
»
,
,
»
,
,
,
,
,
»
,
/
,
,
,
»
7
,
7
,
t
/
,
,
7
»
,
,
,
»
7
,
»
7

N
0

>C

(2,2,1) /if,
,LbM(2,5, 1) /£*, 159
,LGM (2, 6, I) /**, 159
,LGMf2 ,8,1)
t LGM (2,3,1)
,LbM (2,9,1)
,LGM( 2, it, 2)
,LGM(2,5,2)
,LGM (2,6,2)
,LGM<2,<4,3)
,LGM(2,5,3)
                ,LGMt2,7,l)
                ,LbM(5,7,l)
                ,LGM(2,7,3)
                   M(5,7,3)
       /«*, 159
       /<», 159
       ,LGM(3
       , L GM ( 3
       ,LGM (3
       ,LGH (3
       ,LGM(3
       ,LGM ( 3
       ,LGM (3
       ,LbM (3
       /76VB5
                                  366 ft/
                                  3668/
                                  36B8/
                                  3668/
                                  366S/
                                  3668X
                                  ,5,2
                                  ,6, 2
                                  ,i*,3
                                  ,5,3
                                  ,6,3
       ,7, 1
       9535
,wGM (7,7,3
/30 33265£t 7
)/10
) /10
)/6,
)/6,
)/6,
)/9,
 /15
,130
)/2
-------
c
c
c
c
c

c
c
c
c
c
c
c
c
c
c
c

c
c
c
c
G
c

c
c
c
c
c
c
0
c
       JJ=ISH m
       IF
-------
      IF1IPASS .NE. DGO TO 11
C
C     STEP d        DISPLAY  THE  TITLE FOR THE FIRST  PAGE OF THE REPORT
C                   ON THE OUTPUT  PAGE, AND BRANCH TO STEP 10,
C
      IFdUO.EO. 0)  GOTO 95
      IGOL=3
      CALL PPD£i,C
-------
c
u     STEP  II       DISPLAY TH£  VALUES OF THE DECISION VARIABLES ASSOC<
C                   IATED WITH THE  UNIT.
C
      IFdUO.E-a.O  )  GOTO 306
      GOT 0(30 6, 305,304, 301,301,306,302,.3 031, IUO
  301 IGOL=49
      CALL  PRDESC(LDVl)
      CALL  GN*/TIE(D1,%,2)
      CALL  PRLINE
      CALL  PRLINE
      GOTO  306
  382 ICOL=?3
      CALL  PROESC
-------
C     STFP 12       DISPLAY THE OVERALL  DESCRIPTOR OF THE  SPANNFR OF
C                   THE REPORT.
C
      CALL PRLINE
      CALL PKDFSCILOV9)
      CALL PRuINE
C
C     3TEP 13       INITIALIZE THE  NUMPER OF CHARACTERS  IN THE  CURRENT
C                   CHARACTER ARRAY  AT  ZERO, IN PREPARATION FOR CONSTUCT'
C                   ING THE FIRST LINE  OF THE SPANNER.
C
      ICOL-%2
G
C     STEP 1<»       COMPUTE THE SEQUENCE  NUMBER OF THE LAST ACTUAL  SIZE
C                   FRACTION WHOSE  VALUES ARE BEING DISPLAYED ON  THE
C                   CUR9FNT PAGE OF  THE  REPORT.
C
      K3 = K2
      IF(K^.EQ.NS) O = K3-1
C
C     STEP 15       IF NO SIZE FRACTION  SPECIFIC VALUES  ARE TO  BE
b                   DISPLAYED ON THE  CURRENT PAGE, BRANCH  TO STEP 19,
G
      IF(K3.LT.K1)GO TO 6
C
L     STEP 16       UiING SUBROUTINES   P  R S I Z E  AND  C N V  0  I  S  AS
C                   NECESSARY, CONSTUCT  AND PRINT THE FIRST LINE  OF  THE
C                   SPANNER FOR THE  REPORT.
C
      DO 1 I=K1,K3
      GALL Pn.SIZE(SIZE( 1) ,9)
    i CONTINUE
      IF(K2.EQ.Nb)CALL CN 
-------
      00 2 I=Ki,K3
      CALL PRSIZE(SIZ£(I+1),9I
    2 CONTINUE
      CALL PRLINE
      GO TO 7
C
C     STEP 19       ONLY  COMPOSITE VALUES ARE  BEING DISPLAYED ON THE
C                   CURRENT  PAGE. USING SUBROUTINE  C N 4 0 I S  ENTER
C                   THE HORQ  C  0 M P  IN THE  SPANNER AND PRINT IT.
C
    6 CALL CNVTIE(8«»B720,9,-2)
      GASCON =LETTFRO7)
      CALL PRLINE
C
C     STEP 20       CONSTRUCT AND PRINT THE CURRENT PAGE.
C
    7 CONTINUE
      IF(ISPEC.EQ.l)  GOTO  91
      IFUUO.EQ.9)  IUO=9
      00 105 I = ltNCHAR
      CALL PRLINE
      IFII.NE.l) GOTO  201
      CALL PRQESC(LGM1(1) )
      GOTO 202
  201 IC = ICHAR-H5*a-l)
      CALL PKOESG , 6,0)
  28<* CONTINUE
      K=K+1
      IF'(K.LE.K2)  GOTO  10?
                  FIGURE II-8-6.1.   (Continued)


                                 284

-------
      CALL t»KLINE
  103 CONTINUE
  185 CONTINUE
C
C     STEP 21       DISBLflY UNIT SPECIFIC PERFORMANCE MEASURES  FOR  THE
C                   UNIT OPERATION, IF ANY
C
      IFIIUO.LE.3.0R.IUO.GT.6)  GOTO 15
      ISPEC=1
      IPASS=2
      GOTO 90
   91 CONTINUE
   15 CONTINUE
      CARCON=LETTER U5)
      LALL PRLINE
      J08=-i
      KK = 0
      K=0
      NM=NP* (IUO)
    5 CONTINUE
      IF(NM.EQ.O)  GOTO IF,
      KK=KKM
      NM=NEW
      IF(I.EQ.Q)  GOTO 5
      K=K+1
      NLAB=K+IADD(IUO)
      CALL PRDESL(UPM(1,NLAB  ))
      ICOL=ICOL+1
      J=K1
   ID ICOL=ICOL*1
      CALL CNVTIE(PMU,K<) ,6,IDIG(KK) )
      IF(J.LE.<2)  GOTO 10
      CALL  PRLINE
      GOTO  5
   16 CONTINUE
      IFJIUO.LE .3. OR. IUO.GT.6)  GOTO 25
      CALL  PRDESCluPMOl)
      CALL  PKLINE
      ICOL=2
      uALL  PROESC(LPM02)
      CALL  PkLINE
      ICOL=^
      CALL  PROEiiC  (LOOTS)
      1COL=3
      CALc  PROESC(LPMD3)


                   FIGURE II-8-6.1.   (Continued)

                                  285

-------
      CALL CNVTIE (G30UNC(2) ,*»,2)
      ICOL = ^
      J=K1
      ICOL = ICOL«-3
  171 CALL CNYTIE(D1STRE( J,l> ,5,1)
      IF
      I=K1
      IoOL
  173 CALL CNVTIE(DISTR6(I,J) .5,11
      1=1*1
      IF(I.LE.K2)  GOTO 173
      CALL PRLINE
  625 CONTINUE
      ICOL=3
      CALL PRDESC(LOOTS)
      CALL CNVTIE (32116^86,0 ,-?>
      CALL CN^TIE(GBOUNO(NGRA/),tt,2)
       = K1
  117 uALL CN\/TIE(DISTRB(I,NGRAi/) ,5,1)
      ICOL=IC01.*'*
      1 = 1*1
      IFd.LE.K?)  GOTO 117
      CALL »KLINE
   25 CONTINUE
C
C     STEP 22       IF ] HE LAST COLUMN DISPLAYED ON  THE  CURRENT PAGE
C                   rtfii THE LAoT  COLUMN  TO BE DISPLAYED, END LOCAL PRO-
C                   CESS1NG.
C
      IF (K2.EQ.NS) GO TO 999
C
C     ?!Ff» 23       SET THE PAGE  COLUMN  INDICATORS  TO  POINT TO THE NEXT


                  FIGURE II-8-6.1.  (Continued)

                                  286

-------
c                   PAGE,  RESET THE PAGE TITLE  CONTROL VARIABLE,  AND
C                   LOOP BACK  TO STEP 5.
C
       IPASS=-1
       GO  TO  k
  999  RETURN
       ENO
                   FIGURE II-8-6.1.   (Continued)
                                   287

-------
                           8.7  Subroutine OUTPT4

          Subroutine OUTPT4 produces the summary reports for units and flows,
Figure II-8-7.1 lists this  routine.
                                      288

-------
SUBROUTINF  OUTPTtf

TITLE
-------
C
c
C
c
c
c
c
c
c
c
c
1C

iFl,IF2,JF,
JF1,JF2,NC1,
NC2,ISTOR

SUHM
WATER
THIS DUMMY  INTEGER VARIABLE  IS  USED AS A CO-LDOP
COUNTER.
THIS INTEGER VARIABLE IS  USED AS A POINTER  IN
WORKING STORAGE.
THESE INTEGER VARIABLES ARE  USED FOR TEMPORARY
STORAGE.
THIS REAL  VARIABLE IS USED  FOR TEMPORARY  STORAGE,
THIS REAL  VARIABLE IS THE WATER CONTENT OF  THE
FLOWSTREAM.
      COMNON/CNTVAR/KF(2,100), SIZE 1231,GBOUND(21),GRAVC20)
      1  ,WFLOW (100) ,S (100) ,01(60) , 02(60), D3 (60), L(60)
      2                          ,NSIZE,NGRAV,IOUT,NUNITS,NFLOWS,NCHAR
      COMMON/WORK/NEXT, LAS I", I CURVE, I UNIT, I DATA, IT ITLE, ICHAR,IFLW,IASH,
      1  ISUL,IBTU
      COflMON/CHRSET/LETTERU?)
      COMMON  WS(6000)
      CONHON/iOCNT/JOB,CARCON
      GOMMON/CDOERu/ICOL, LCOL,LINE(150)
      INTEGER  CAR30N
      INTEGER  P»RINTR,WS,S
      DIMENSION LF1<7) ,        uF3 (3 ) ,LF«» <3 ) ,LF 5(«O , LF6 C3) ,        LF8(3)»
      1  LF9(3 ) ,^F10 m  ,LF11 (3)         ,LF13 (*»i,LF14(6),LF15(6),LOASH(3J
      DIMENSION LDl(6),LC2(t),LD3</12, 38666226, S«»7 35365 ,117 7/
      DATA  i_D3< 1> ,L03< 2), LDSC 3) ,LD3( **)/!!, 58 62?0 370, 75 5255509* W
      OAT A  LO't(l),LOii(2),LOi»(3),LO<»(/313911727, 390939781, Wk7/
      DATA  LF3U) ,LF3(?»,LF'5(3)/10,103371955,3«»0283'*69/
      DATA  LFtf(l|,LF^(2l,LF%(3)/6,256^1U153,li»/
      CnTA  LF5 (1) ,LF5  12) , LF5C3) ,LF5(M/11, 68^98697, 235 225679 ,!«»/
      DATA  LF6(1),LF6(2),LF6(3»/6,103871^5^,5381/
      DATA  LF:j(i),LF8{? ), LF 8 ( 3 ) / 9 , 20 19 316 0 3 ,63336/
      uATA  LF9(i),LF9(2),LF9(3)/8,22207U068,87173/
      DATA  i_F10(l) ,1^10(2),LF10( 3)/6,2i*0«+39U29,18/
      DATA  LF11 (1> ,LF11 (2) , L Fll ( 3 ) /8 , 3560 297M ,58 351/
      DATA  LF13(1),LF13(2),LF13C31 , LF1 3( it) / 11, 22 05130 33, 2555127 2«*, 21/
      DATA  LFl«t(l),LFl«»(2) ,LFK»(3)/2V, 337679^97 , 321181
                  FIGURE II-8-7.1.  (Continued)

                                  290

-------
       DATA LFlz»(<+) ,LFl*»l«5) , LF ±£» ( 6 ) / 2? 0579 3**,75971<*9 0 1, 2tt333<» 8/
       DATA LF15(1) ,LF15(2) , LF15 ( 3 ) /2 5, 755782M 2, 330625«»53/
       DATA LF1S <^) ,LF15<5) , LF15<6)/3 89 8825 69, 2 36 901588,25638133 1/
       DATA LQASH(l) , LQASH ( 2) »LOMSH{3)/9»6^7653798»10119590/
C
C      STEP 1         U^lUG SUBROUTINES   P R H E  A  D   AMD  VESSEL
C                    PRODUCE  THE UNITS  SUMMARY  REPORT.
C
       uO  10  IU=1,NUNITS
       IEQUIP=L(IU)
       IC=WSCIE3UIP-i)
       IUO=WS (IEQUTP*2)
       IFCLINES.LE.50) GO  TO 5
       LINES=1
       CALL  PRHEAD
       J03=-l
       CARCON=LETTER(37)
       ICOL=50
       GALL  PROESC (LOU
       CALL  PRuINE
       ICOL=91
       CALL  CNVTIE(%218109**6,0, -2)
      CALL  PF.DESCCLDZ)
      ICOL = ICO_ + <+
      CALL  ^ROESC(LD3)
      CALL  PRLINE
       ICOL=8
       CALL
       CALL PRDESCIL05J
       ICOL=ICO.*25
       oALL PROESC (tD6)
       ICOL=ICOL*10
       CALL PRDESG(L07)
       CALL PPDESC(L07)
       ICOL=ICOL+10
       CALL CNVTIE 129709,0, -.2)
       tALL PRLINF
       00 100 T=9,19
   130  LlNE(D=LETTE!?( 38)
       00 101 1=28,36
   101  LINE 
-------
    00 103  1 = 911,98
IDS LINE (I)=LETTER<33)
    00 10«t  1 = 103,11^
li% LINE GOTO  13
    00 ik IF=1,NFLOWS
    IF
     CALL  PKLINE
     GOTO  12
30if  CALL  CNVFIE (DKIU) ,7,3)
     ICOL=ICOL*?
                FIGURE II-8-7.1.   (Continued)

                                292

-------
      IF (0? ,7,1)
  315 ICOL=9if
      CALL CNVTIF(VSLYLD,5, 1)
      ICOL=ICOL+11
      CALL CN\/TlE(VSLaTU,5,l)
      CALL PRLINE
      GOTO 12
  306 IFtDKIUI .GE.O.QOi)  GALL  CNVTI E (Dl( IU) ,7 ,3)
      CALL CN^TIE
      ICOL = ICOL*-11
      CALL CN»/TIE(VSL3TU,5,1)
      CALL PRLINE
      GOTO 12
  386 CALL CNVriF
      CALL PRLINE
      GOTO 12
  302 CALL CNVTIE
-------
   NC2 = Q
   IF=D
26 IF=IF*1
   IFIIF.GT.NFLOWS)  GOTO 27
   IF(LINES.LF.50)GO TO IF
27 LINES = 5
   IFdF.GT.NFtOWS. AN3.NC2.EQ.NCHAR) GOTO  35
   CALL PRHEAD
   jos=a
   CALL PRDESC(LFl)
   CALL PRLINE
   JOB=-1
   iF(NCl.LE.NCHAR) GOTO
   NCi = l
   IF(NCi.NE.l)  GOTO
   IF(NC2.Gr.NCHARI NC2=NCHAR
   ICOL=51
   IC = ICHAR*-15
   00 *f01 1 = 2, NC2
   CALL PROESw(WS(IC+9) )
   IC=IC«-15
   GOTO
   IF=ISTOR
   NC2=NC1»F
                     NC2=NCHAR
   01 k02  I=NC1,NC2
   CALL PRQESC(WS(IC+9M
   IG=IC+15
   uALL I>KLINE
   CMRCON=LETTER(«t5)
  . ICOL=%
   CALL PRD'SC (LF3)
   CALL
   CALL PRDESC(LF5)
   IF(MCl.EQ.l)  GOTO
               FIGURE II-8-7.1.   (Continued)

                               294

-------
    DO  «»05  I=NC1»NC2
    CALL  PROESC (WS(IC*12) )
    IC=IO15
    ICOL=ICOL«-t*
    GOTO  1*16
    IGOL=ICOL+3
    CALL  PRDESCUFP.)
    IC=ICHAR+15
    00 ^G6  1=2, NC2
    CALL  PRDESL (WS(IC*12»
    IC = IO15
U96 ICOL = I30L+*»
    ICOL = ICOL«-1
    GALL  P^DESC(LFS)
    ICOL=ICOL*5
    CALL  PRDESC (LF9J
    lCOL=ICOL*tf
    CALL  CNtfTIt(386220370,0,-2)
*tl6 CALL  PRLINE
    ICOL=6
    CALL  PROESCJLF10)
    CALL  PROESCCLF11)
    CALL PRDESCCLF11)
    IFCNC1.E9.H GOTO
    ICOL = ICOL«-«t
    DO  197  I=NC1,NC2
    CALL PROESC(LD7)
197 ICOL=ICOL*2
    GOTO ^18
    CALL  CNVTI£{82952,Q,-2)
    DO  i»22  1 = 2, NC2
    IFtI.EQ.IBTU) GOTO  «»21
    oALL  PRDESC
-------
    00 20S 1 = 5, 1«+
208 UNE(I)=LETT£R(38)
    00 201 1 = 17, 2«»
    00 292 1=27,37
2B2 LINE5
    DO 21B  I=IF1,IF2
210 i.INE(I)=LETTER(38>
    ICOL=127
*»21 CALL PRLINE
    ISTOR=IF
 15 LlNES=LINES»-2
    CARCON=u£TTERC27)
    ICOL=8
    CALL CNVTIE(IF,2,-1I
    CALL CNVTIE«KFfl,IFl ,2,-l)
    uINE(ICOL)=5(IF>
    ICOL=ICOL+7
    CALL CNVTIECKF(2,IF) ,2,-l)
    IF(NCl.NI.l)  GOTO 23
    ICO».=ICOL*9
    JF=IFLW+NChAR *(IF-1»
    FLOHPC=SS (JF*D
    CALL ChUTIE(F»_OrtPC,7,l)
                FIGURE II-8-7.1.   (Continued)

                                296

-------
   00 21 I=NC1»NC2
   JF1=JF+I
   SUMP=SG( JF1)
   IFd.EQ.IBTU )  GOTO 16
   CALL CNVTIF(SUMM,5, 2)
   GOTO 21
16 CONTINUE
   IoOL=ICOL-l
   CALL CNVTIE<3UMM,6, 0)
21 CONTINUE
   302=0. 0
   IF(I3UL.EQ.O.OR.IPTU.EQ. 0)  GOTO 22
   JF1 = JF*!SUL
   SUM3=SG ( J^l)
   JF1 = JF+I3TU
   IF(SUt»I^..T.l .E-8) GOTO  22
22 LONTINUE
   CALL CNVTIE (S02»6,2)
       = ICOL*-6
       = WFLOW(IF)
   IF(SUH5.LT.l.E-8> GOTO  19
19 CONTINUE
   CALL CNVTIE(5UM5,6,2)
   CALL CN^TIE (GPH,6,1I
   NC1 = NC1-1
   GOTO 25
23 CONTINUE
   ICOL=ICOL+5
   JF=IFLW*NCHAR *(IF-1
   00 2k  I=NC1,NC2
   SU«M=SG( JF1I
   IF(I.EQ.IBTU) GOTO 28
   CALL CNVTIE (SUMM,6, 2)
   GOTO 2k
28 CALL CNVF IE (SUMM,6, 0)
2% CONTINUE
25 CALL PRLlNE
30 GOTO 26
               FIGURE II-8-7.1.  (Continued)

                               297

-------
c
C     STEP  J        PRINT THE,FOOTNOTE ON THE  FLOWSTREAN  REPORT WHICH
G                   SPECIFIES  THE AMOUNT OF  WORKING STORAGE  USED.
C
   15 CONTINUE
      NWS=NEXT-i
      ICOL=3
      uINE(ICOL)=wtTTEP(39)
      ICOL=ICOL«-5
      CALL  PRDESC(LFlif)
      CALL  CNVriE(NWS,.6,-l)
      CALL  PROESC(LF15)
      CALL  PRLINE
C
C     STEP  k        END LDCAL  PROCESSING.
C
      RETUPN
      END
                       FIGURE II-8-7.1.   (Continued)
                                  298

-------
                           8.8  Subroutine PRLINE

          Subroutine PRLINE prints a line of output.   The listing  and basic
documentation for this routine are contained in Figure II-8-8.1.
                                       299

-------
      SUBROUTINE  PRUNE
C
C     TITLEtPRINT  A  LINF OF  OUTPUT)
C
C     SUBROUTINE  PRUNE  IS  USED TO PkINT A  LINE  OF OUTPUT.
C
C     CONHON       VARIABLES USED
G     /CHRSET/     LETTER
C     /CODERC/     ICOL,LINE
C     /FIcES/      PMNTR
C     /FLAGS/      LINEW
C     /IOCNT/      GARCON
C
u     VARIABLE     DESCRIPTION
C     I            THIS  INTEGER VARIABLE IS USED AS A DUMHY 00-LOOP
C                  COUNTER.
C     NBtNK        THIS  INTEGER IS USED TO  CONTAIN THE NUMBER OF BLANKS
C                  TO  BE INSERTED IN THE LINE.
C
      COMMON/CHRSET/LETTER U7)
      COMMON/CODERC/ICOL.LCOL,LINE(150)
      COMMON/FIcES/REAOER,PRINTR,OFFLIN
      COHHON/FLAGS/LINEW
      COHMON/IOCNT/J03,CA*CON
      INTEGER CARGON,READER,PRINTR,OFFLIN
    1 FORMAT(136A1)
C
C     STEP 1       IF  THE LINE IS BLANK PRINT  THE CARRIAGE CONTROL
C                  CHARACTER AND BRANCH TO  STEP  8.
C
      IFCICOL.GT.O)GO  TO 10
      WRITE
-------
      GO  TO  30
C
C     STEP 5        COMPUTE  THE NUMBER  OF  BLANKS REQUIRED  TO RIGHT
G                   JUSTIFY  THE LINE.
C
   25 NBLNK-=L.INEW-ICCl_
C
C     STEP 6        IF THF  STARTING COLUMN  IS BEYIND THE END OF THE LINE
C                   3RANCH  TO STEP 3.   OTHERWISE PRINT  THE LINE WITH
C                   THE  REQUIRED NUMBER  OF  BLANKS.
C
   30 IF(N8LNK.LE.0)GO  TO  15
      WRIT E< PRINT*, DCAR30N, ( LETTER ( k5 ) , I = 1, NBL.NK ) , ( LI NE (I) , 1 = 1, ICOL )
C
C     STEP 7        RE-INITIALIZE LlNF  AND  ICOL
C
   35 DO  1*0  1 = 1,ICOL
   <»0 LlNEtl )=L£TTED( <+5)
      IGOL=0
C
C     STFP 9        END  LO^AL PROCESSING.
C
  999 RETURN
      END
                   FIGURE II-8-8.1.  (Continued)
                                   301

-------
                       8.9   The /IOCNT/  Common Block

          The /IOCNT/  common block contains the variables  JOB and CARCON
used for printer carriage control.
                                    302

-------
                       8.10  The /FLAGS/ Common Block

          The /FLAGS/ common block contains the variable LINEW.   This  is
set to the line width of the printer in the BLOCK DATA subroutine.
                                      303

-------
                       9.0   REFERENCE  LIST FOR VOLUME II


(1)   Applied  Numerical  Methods,  Edited by  B.  Carnahan,  H.A.  Luther,  and
     J.O.  Wilkes,  John  Wiley and Sons,  Inc.,  New York,  (1969).

(2)   Structured  Programming, Edited  by E.W. Dijkstra, O.J.  Dahl,  and
     C.A.R Hoarse,  Academic  Press, London  (1972).

(3)   S.R.  Broadbent  and T.G.  Callcott,  J.  Inst.  Fuel, 29, 524  (1956).

(4)   S.R.  Broadbent  and T.G.  Callcott,  ibid.,  29_,  528 (1956).

(5)   Formal Languages and Their  Relation to Automata, Edited by J.E. Hopcroft
     and J.D.  Ullman, Addison-Wesley,  Reading,  Massachusetts (1969).
                                     304

-------
                               TECHNICAL REPORT DATA
                         (Please read Instructions on the reverse before completing)
 REPORT NO.~	

 EPA-60g/7-80-010b
                                 3. RECIPIENT'S ACCESSION NO.
  TITLE AND SUBTITLE
 Joal Preparation Plant Computer Model:
  Volume II.  Program Documentation
                                 5. REPORT DATE
                                  January 1980
                                 6. PERFORMING ORGANIZATION CODE
 AUTHOR(S)

Frederick K.  Goodman and Jane H. McCreery
                                 8. PERFORMING ORGANIZATION REPORT NO.
9. PERFORMING ORGANIZATION NAME AND ADDRESS
Battelle Memorial Institute
Columbus Laboratories
505 King Avenue
Columbus, Ohio 43201
                                 10. PROGRAM ELEMENT NO.
                                 EHE623A
                                 11. CONTRACT/GRANT NO.

                                 68-02-2163, Task 814
12. SPONSORING AGENCY NAME AND ADDRESS
 EPA,  Office of Research and Development
 Industrial Environmental Research Laboratory
 Research Triangle Park, NC  27711
                                 13. TYPE OF REPORT AND PERIOD COVERED
                                 Task Final; 7/76 -  7/79
                                 14. SPONSORING AGENCY CODE
                                   EPA/600/13
15. SUPPLEMENTARY NOTES iERL.RTP project officer is James D. Kilgroe, Mail Drop 61,
919/541-2851.
16. ABSTRACT
          The two-volume report describes a steady state modeling system that
simulates the performance of coal preparation plants.  The system was developed
originally under the technical leadership of the U.S. Bureau of Mines and the spon-
sorship of the EPA. The modified form described in this report, written in FOR-
TRAN, was developed by Battelle for the EPA.  The original modifications made the
program usable in evaluating an advanced coal cleaning facility being constructed at
Homer City, PA.  Subsequent changes allowed the model to be used for a wider
range  of performance and cost  evaluations.  Initial changes to the original program
increased the number of process operations which could be simulated, and simpli-
fied program operation. Later modifications permitted the calculation of plant water
flows and the estimation of plant costs.  Volume I contains user documentation, and
Volume n provides process documentation. Volume I describes: the manner in
which  coal flows are represented, the mathematical approach of the various unit
operations, the cost evaluation approach, preparation  of the input, and interpreta-
tion of the output (the last two in terms  of an example). Program documentation
begins in Volume  II with a discussion of basic documentation principles, followed by
presentation of each routine and common block in terms of these principles.
17.
                             KEY WORDS AND DOCUMENT ANALYSIS
                DESCRIPTORS
                                          b.IDENTIFIERS/OPEN ENDED TERMS
                                                COS ATI Field/Group
 Pollution
 Coal
 Coal Preparation
 Mathematical Models
 FORTRAN
 Performance Evaluation
Cost Estimates
Pollution Control
Stationary Sources
Coal Cleaning
13B
08G
081
12A
09A
05A
14A
13. DISTRIBUTION STATEMENT
 Release to Public
                      19. SECURITY CLASS (This Report)
                      Unclassified
                        21. NO. OF PAGES
                           316
                      20. SECURITY CLASS (This page)
                      Unclassified
                                              22. PRICE
EPA Form 2220-1 (9-73)
                                        305

-------