&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 I S TI CS OF ALL OF THE
G 00TOUT FLOWS FOR LATEP REPORTING.
C
150 CONTINUE
FIN=IPRA MNIN)
J^IN^IFLk + NJCHA' MFIN-1)
DO 163 1=10, LO
F= IPRA !M I)
JF=IFLW+NCHAp MF-1)
IF( I'JO.LE.2) GOTO 151
IF(WS( JFIN+1) .LT.O.CCD GOTO 152
WFLOW(F)=WFLOW(FIN)*WS(JFH)/WS(JFIN+1)
GOTO 151
152 WFLOW(F)=HFLOW 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 , ?)
LPM(4, S) ,LPM(5, 3)
LPM(7,3),LpM(3,d)
i_PMl 10, 5) /S4365/
LBM(i,9) ,LPM(2, ^)
LPM(7,9),LPM(3,9)
,
,
,
,
,
,
,
»
L°M
LPM
LPM
LPM
LPM
LPM
LPM
LPM
(
(
(
(
(
(
(
(
3
6
9
3
6
9
3
9
,
,
,
,
,
,
,
,
7
7
7
S
3
8 J
9
9
/
/
/
/
/
/
>/
)/
*+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 |