United States
Environmental
Protection
Agency
Office of Air Quality
Planning and Standards
Research Triangle Park, NC 27711
EPA-450/4-89-009b
JULY 1989
SEPA
AIR
USER'S MANUAL FOR OZIPM-4
(OZONE ISOPLETH PLOTTING
WITH OPTIONAL MECHANISMS)
VOLUME 2: COMPUTER CODE
-------
-------
EPA-450/4-89-009b
USER'S MANUAL FOR OZIPM-4
(OZONE ISOPLETH PLOTTING
WITH OPTIONAL MECHANISMS)
VOLUME 2: COMPUTER CODE
OFFICE OF AIR QUALITY PLANNING AND STANDARDS
U. S. ENVIRONMENTAL PROTECTION AGENCY
RESEARCH TRIANGLE PARK, NC 27711
JULY 1989
-------
This report has been reviewed by the Office Of Air Quality Planning And Standards, U. S. Environmental
Protection Agency, and has been approved for publication. Any mention of trade names or commercial
products is not intended to constitute endorsement or recommendation for use.
EPA-450/4-89-009b
11
-------
PREFACE
This document is one of five related to application of EKMA and the use
of OZIPM-4 (Ozone Isopleth Plotting with Optional Mechanisms), the computer
program used by EKMA. Listed below are the titles of the five documents and a
brief description of each.
"Procedures for Applying City-specific EKMA", EPA-450/4-89-012, July 1989
- Describes the procedures for using the Empirical Kinetic Modeling
Approach (EKMA). The major focus is on how to develop needed inputs for
OZIPM-4. In addition this document describes how to determine a control
target once OZIPM-4 has been run.
"A PC Based System for Generating EKMA Input Files", EPA-450/4-88-Q16,
November 1988
- Describes a program that creates EKMA input files using a menu driven
program. This sofware is only available for an IBM-PC or compatible
machine. Files built using this system can be uploaded to a mainframe
computer.
"User's Manual for OZIPM-4 (Ozone Isopleth Plotting with Optional Mechanisms)-
Volume 1", EPA-450/4-89-009a, July 1989
- Describes the conceptual basis behind OZIPM-4. It describes the
chemical mechanism, Carbon Bond 4, and each of the options available in
OZIPM-4. Formats for each of the options are outlined so that a user
can create input files using any text editor.
"User's Manual for OZIPM--4 (Ozone Isopleth Plotting with Optional Mechanisms)-
Volume 2: Computer Code", EPA-450/4-89-009b, July 1989
- Describes modifications to the computer code that are necessary in
order to use OZIPM-4 on various machines. A complete listing of OZIPM-4
is also found in this publication.
"Consideration of Transported Ozone and Precursors and Their Use in EKMA",
EPA-450/4-89-010, July 1989
- Recommends procedures for considering transported ozone and
precursors in the design of State Implementation Plans to meet national
ambient air quality standards for ozone. A computerized (PC) system for
determining whether an ozone exceedance is due to overwhelming transport
is described. This document is necessary, only if an area is suspected
of experiencing overwhelming transport of ozone or ozone precursors.
m
-------
EKMA may be used in several ways: (1) as a means for helping to focus more
resource-intensive photochemical grid modeling analyses on strategies most
likely to be successful in demonstrating attainment; (2) as a procedure to
assist in making comparisons between VOC and NOx controls; (3) in non-SIP
applications, such as in helping to make national policy evaluations assessing
cost/benefits associated with various alternatives and (4) for preparation of
control estimates consistent with limitations/provisions identified in Clean
Air Act Amendments.
IV
-------
TABLE OF CONTENTS
Page
Disclaimer ii
Preface iii
Introduction 1
Computer Considerations 2
OZIPM-4 Subroutines/Functions
OZIPM-4 A-l
Block Data B-l
HDWRIT C-l
MECH D-l
MCHSET E-l
MATRX F-l
MCHWRT G-l
MIXST H-l
RATES 1-1
SPARS J-l
CONVT K-l
VALU L-l
EMISS M-l
STAIR N-l
PHOT 0-1
SOLAR P-l
SPLNA Q-l
SPLNB R-l
CLOCK S-l
SUNTIM T-l
EKCALC U-l
SIM V-l
DRIVES W-l
STIFFS X-l
DIFFUN Y-l
COSET Z-l
CLKMIN AA-1
INTERP AB-1
NSBSLV ' AC-1
NSCORA AD-1
NSCORD AE-1
NSNFAC AF-1
NSSFAC AG-1
OZMX AH-1
SAVIT AM
SORDER AJ-1
YSMER AK-1
-------
TABLE OF CONTENTS (CONTINUED)
Page
CIRC AL-1
SPLOT AM-1
CURV1 AN-1
CURV2 AO-1
RLINE AP-1
LINER AQ-1
EDGMX AR-1
ISOPLT AS-1
VVMNMX AT-1
CONMAP AU-1
VVCMAP AV-1
VVKURV AW-1
WLABL AX-1
VVKRV1 -. AY-1
VVKRV2 AZ-1
AXES BA-1
FRAME BB-1
OPENA BC-1
PLOTS BD-1
-------
INTRODUCTION
The OZIPP program has been revised on several occasions. The most recent
version is OZIPM-4. Volume 1 of this document describes OZIPM-4 and how to run
the computer program. Volume 2 lists the computer code and describes modifica-
tions needed to make the software run on various machines.
OZIPM-4 contains 56 FORTRAN routines. Each subroutine has an identifying
letter as part of the line number (in the right-hand columns). The alphabetical
identifier corresponds to the page number (section) in this document.
-------
CHAPTER 1
COMPUTER CONSIDERATIONS
This chapter describes modifications that need to be made to the OZIPM-4
code in order to make it work on different computers.
Several statements in the subroutine OPENA may have to be commented out
depending on which computer system you are using. There is some inherent
incompatibility between IBM JCL and ANSI Fortran OPEN statements for which we
found the easiest solution was to comment out the OPEN statements.and several
other support lines. Also, this software was originally written so that plotting
could be accomplished using proprietary software on the IBM main-frame. Not all
computer system users have access to compatible software. Five dummy subroutines
have been written to field any calls to a plotter. Also an OPEN statement in
subroutine OPENA, which contains the coding FORM='BINARY', has been commented
out but will serve as a reminder that some plotting packages require a non ANSI
standard binary file be written for later plotting. Some compilers do not have
a binary option.
The source code for this version of EKMA has been compiled and tested on
an IBM 3090, IBM-PC/AT compatible (Microsoft compiler only), Sun 386i(UNIX
system), and a VAX 8650 computer system. The results were replicated on all four
systems using six different sets of input data. Slight differences were noted
among the output due to differences in computer processors. In one case, the
variable, NTRYS, which controls the number of cycles in which to try for a
solution to an iterative process and with a sequence identifier of U 72, was
-------
increased from 8 to 12 in order to obtain a replicated ozone concentration
instead of an approximate value.
The following are instructions for executing any one of the five data sets
on any one of the four computer systems mentioned above. The input files are
labelled with a .INP extention. The output files are labelled with a .OUT
extention while any computer processing control files (e.g. IBM JCL) are labelled
with an extention for that computer system (i.e. .IBM - for the IBM mainframe).
The data and associated function filenames are identified as EXAM1, EXAMS, EXAM4,
EXAMS and EXAM12. These filenames are associated with prior test cases that went
under the names: Testcase, EKMA, BASEISOP, FUTISOP, and PEAK, respectively. All
these files are part of the OZPC.ARC file which was downloaded from SCRAM.
(Support Center for Regulatory Air Models - Bulletin Board System).
Since the output file is set up to write to disk instead of directly to a
printer, the carriage control symbols are also printed and are not an error. The
example output files contain these symbols. You will note that column one in
these output files contain many Os and Is because of this procedure. If you want
the output to go directly to a printer, all unit references in the processing
control files (ie JCL) need to be changed from 10 to 6 and in OZPC.FOR, the 10
on line BC 76 needs to be changed to 6 (see MCB#2, step 12 for a sample of the
coding).
These instructions assume you have uploaded the files in OZPC.ARC to your
computer system.
IBM 3090(mainframe) OS/MVS system
The following instructions will allow you to process any one of the data
sets above or use the information in them to execute other data sets.
-------
1. Determine if you have a software plotting package capable of fielding
the calls to the subroutines NEWPEN, NUMBER, PLOT, PLOTS and SYMBOL.
(These calls were originally written for a Calcomp plotting package.)
a. If you do, then you will have to delete the five subroutines in
step 1. These subroutines are located after sequence identifier
BC 39 in OZPC.FOR. Go to step 2.
b. If you do not, then you go to step 2.
2. The following lines with sequence identifiers, BC 11, BC 23, BC 24,
BC 26, BC 32, and BC 35 need to be commented out. These lines are
associated with OPEN and READ statements that are used by other
computer systems.
3. . The file, OZPC.,ICL, is an example of compile and link JCL for you to
follow. Note the four lines beginning with the line that starts with
//LKED.SYSLIB...have been altered so a CALCOMP 5845 can be used.
//uid JOB (acct,bin),uid,PRTY=2,TIME=(min,sec),NOTIFY=uid
/*ROUTE PRINT HOLD
//*
//CL EXEC FORTVCL,PARM=(NOMAP,NOXREF)
//*
//FORT.SYSIN DD DSN=source.code.file.name,DISP=SHR
//*
//LKED.SYSLIB DD DSN=SYS1.VSF2FORT,DISP=SHR
//* DD DSN=SYS2.IMSL.R9M2.SP,DISP=SHR
// DD DSN=SYS2.IMSL.V1ROMO.LOAD,DISP=SHR
// DD DSN=SYS2.CALCOMP.PLOT1051,DISP=SHR
-------
//PLOTSTEP EXEC PLINIT,ACCOUNT=acct,NAME=plotname,DEST=dest
//PLOTINST DD *
DELIVER TO: user name
bin
//*
//OZPC EXEC PGM=OZPC,PARM='NOXUFLOW
//STEPLIB DD DSN=loadlib,DISP=SHR
//*
//* PARAMETER INPUT
//FT07F001 DD DSN=input.fi1ename,DISP=SHR
//* OUTPUT DIRECTLY TO PRINTER
//*FT10F001 DD SYSOUT=*
//* OUTPUT DIRECTLY TO FILE
//FT10F001 DD DSN=output.filename,
// UNIT=SYSDA,SPACE=(TRK,(45,5),RLSE),
// DCB=(RECFM=FBA,LRECL=133,BLKSIZE=2660),
// DISP=(MOD,CATLG,KEEP)
//* ALREADY FILE (READ)
//FT08F001 DD DUMMY
//* ALREADY FILE (WRITE)
//FT09F001 DD DUMMY
//* EKMA FILE
//FT11F001 DD DUMMY
//* PLOT FILE FOR CALCOMP 5845 PLOTTER
-------
//
//
//*
DD DSN=SYS2.CALCOMP.MODULES,DISP=SHR
DD DSN=SYS1.VSF2LINK,DISP=SHR
//LKED.SYSLMOD DD DSN=loadl ib,DISP=NEW
NOTE: Right-hand names are user-specified as follows:
4.
uid
acct
bin
dest
plotname
plotter.file =
user ID
account number or information
bin number
destination of printout or plot (RMTO)
OZIPM-4 plotter output name
output plotter tape file name of the form:
dest.uidacct.plotname (required only when PLOT
option is selected)
loadlib = file name of load module library
DUMMY = when data is present for this unit, a file name and
other file specifications are needed. (ie
DSN=file.name,DISP=SHR)
OZPC = member name of a partitioned data set. EKMA can
be used in its place.
The following JCL is a generic example that, when edited, will allow the user
to process data.
//uid JOB (acct,bin),name,PRTY=2,TIME=(min,sec),NOTIFY=uid
/*ROUTE PRINT HOLD
//*
-------
//GO.FT 14F001 DD DSN= plot.input.data.file.name,
// DISP=(NEW,CATLG),UNIT=DISK,SPACE=(TRK,(10,10)),
// DCB=(LRECL=80,BLKSIZE=3200,RECFM=FB,DSORG=PS)
//EXEC C58ROUTE,
// PFILE='plot.input.data.file.name;
// DEST=dest
//HEADER.DELIVER DD*
USER NAME,FILE.NAME
ADDRESS
//
IBM-PC and compatibles DOS system
OZPC.FOR is over 600 kbytes long. Most PCs, using the Microsoft Fortran
Version 5.0, can not compile the whole program at once. The program needs to be
divided into individual subroutines that are compiled one by one. The object
files for these subroutines are then linked into an executable file. The
following steps assume that you have divided OZPC.FOR into individual
subroutines.
1. If you have a plotting package that can function using the calls to
NEWPEN, NUMBER, PLOT, PLOTS, and SYMBOL, you will need to delete these
subroutines.
2. Compile and link the individual subroutines. OZPC.PCL was included for
your convenience. This file will automatically compile each subroutine
and then link the subroutines into a executable program not requiring
a link to a software plotting package. This file may have to be edited
-------
depending upon your compile and link situation. The file is executed
at the by typing: OZPC.PCL
3. Rename the executable file in step 2 to OZPC.EXE.
(ie Rename AXES.EXE OZPC.EXE)
4. A control file is necessary in order to execute OZPC.EXE. A generic
file is provided that you can edit to run the examples provided. The
file is named OZPC.PC.
5. A program can be executed by typing:
OZPC filename.ext
6. Examine your example output files and compare them with the output
examples provided from SCRAM.
VAX VMS system
The following instructions will allow you to process anyone of the data sets
above or use the information in them to execute other data sets.
1. If you have a plotting package that can function using the calls to
NEWPEN, NUMBER, PLOT, PLOTS, and SYMBOL, you will need to delete these
subroutines.
2. OZPC.FOR can be compiled and linked using the following two statements
or by executing the COM file, OZPC.VCL:
•
$FORTRAN/CROSS-REFERENCE/LIST/NOOPTIMIZE/DEBUG/SHOW/WARNINGS=NONE -
OZPC
SLINK/DEBUG OZPC
3. OZPC.VAX is an example of a control file for running your program.
Type: 00ZPC.VAX to run an example
8
-------
4. Examine your example output files and compare them with the examples
provided.
Sun 386i Unix System
This set of instructions assumes you have the files in a directory readily
accessible by the Unix system and that your Fortran listing has been converted
to a Unix readible format.
1. If you have a plotting package that can function using the calls to
NEWPEN, NUMBER, PLOT, PLOTS, and SYMBOL, you will need to delete these
subroutines.
2. Compile and link OZPC.FOR using the following statements:
f77 -ANSI ozpc.for
cp a.out to ozpc.exe
3. Copy your input files to Fort.(unit#). Unit 14 is NOT used.
cp examl.inp fort.7
4. To execute, type: ozpc.exe
5. .Rename output files from fort.(unit#) to more identifable name(s).
cp fort.10 output.filename
6. Examine your output and compare it with the examples provided.
-------
c
C**i
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c* * *
PROGRAM EKMA
********************************************************************
OZIPM-4 (EKMA)
THE OZONE ISOPLETH PLOTTING PACKAGE WITH OPTIONAL CHEMICAL
MECHANISM (VERSION 4.00) IS USED IN THE EMPIRICAL KINETICS
MODELING APPROACH (EKMA) TO ESTIMATE VOC CONTROL REQUIREMENTS
THIS VERSION WAS WRITTEN TO ANSI FORTRAN 77 STANDARDS AND
CONTAINS THE CARBON-BOND CHEMICAL MECHANISM (CBM-4) DESCRIBED
BY GERY ET AL. (1988) (EPA-600/3-88-012) .
OZIPM-4 IS AN CONDENSED VERSION OF OZIPM-3. SUPERFICIALLY,
THERE ARE NO CHANGES. THE DEFAULT MECHANISM IS THE CARBON-BOND
(VERSION 4) INSTEAD OF THE CBM-X IN OZIPM-3. THE USER IS REFERRED
TO HOGO AND GERY (1988) FOR A DESCRIPTION OF MODEL USAGE.
OZIPM-4 IS BASED ON THE ORIGINAL OZIPP PROGRAM BY WHITTEN
AND HOGO (1973) AND THE OZIPM-2 PROGRAM (GIPSON, 1984).
THIS VERSION USES THE GEAR INTEGRATION ROUTINES WRITTEN BY
SPELLMANN AND HINDMARSH (1975) .
PARTS OF THIS PROGRAM ARE CONTRIBUTIONS FROM JEFFRIES (1982) AND
GIPSON (1984). THEORETICAL PHOTOLYSIS ROUTINE ARE FROM SCHERE AND
DEMERJIAN (1977) . THE SPLINE ROUTINES ARE FROM CLINE (1974) .
CODE WRITTEN BY:
H. HOGO
M. W. GERY
R. G. JOHNSON
G. W. LUNDBERG
SYSTEMS APPLICATIONS, INC
101 LUCAS VALLEY RD
SAN RAFAEL, CA 94903
(415) 472-4011
*************** CODE REVISION DATE: MAY, 1989
BY: H. HOGO/SAI
******** DEFAULT CHEMICAL MECHANISM: CARBON-BOND VERSION 4
(AUGUST, 1987)
BY: M. GERY/SAI
********************************************************************
SAVE
COMMON /ALOFT/ IALFT, CALFT ( 10 ) , LOCALF ( 10)
COMMON /BIOG/ NBEM,IBSP, WTMOL ( 5) , ACB4 ( 5) , SURFBI ( 5) ,
1 ALOFBI (5).,REDBI (5) ,FSRFBI (5) ,FALFBI (5) ,BEMO(26,5) ,
2 BECO(126,5),CBTOT(5) ,IBLS(5) , BESTOP, BFRAC (20 , 5 )
COMMON /BK1/ FBK(20),FBKAL(5) , HCBK, XNBK, OZBK, H20BK
COMMON /CALC/ NR, KR (200, 12 ) , A (200) , S (200 ) , R (200) , ITYPE (200 ) , IA ( 60)
A
A
*A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
'A
A
A
A
A
A
A
A
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
57
58
59
60
61
62
63
A-l
-------
COMMON /CRED/
L
COMMON /EMIS/
COMMON /NEED/
COMMON /NEEDI/
L
COMMON /OPTS/
1 ,JA(800),DILUT,TEMP,ERR,START,STOPP,TPRNT,TSTEP,ZENI A
COMMON /CNTRL/ SIG,SIGMA,INFO,NPTOfTSRT,DTIM,Zl,Z2,DCON,EHC,EXN
FLST,TLST
ICR,ISPCRf SPCR69(3),SURFCR(3),ALOFCR{3),
REDCR(3),FSRFCR(3),FALFCR(3),COSFBK,COAFBK
NEM,ISP,ESTRT(5),ESTOP,ESLP,IEMLS(5),EOSLP(5),
1 EMO(26,5),ECI(5),EM(26),EC{125),ECO(125,5)
COMMON /FRPLOT7 SAVCON(80,5),SAVTIM(SO),NTSV,INOW
COMMON /HEAT/ SC (200,12),ISC (200,3)
COMMON /HOUR/ OZM(5>,NGO,TTM,TM(5)
COMMON /INOUT/ IN,IOUT,ITAPE,IALN,IALL,INHH,IOZC
COMMON /MIX/ NMIXfAMIX(26),STRM,STOPM,DC(104)
COMMON /MIXING/ DSTRT,DEND,AMC(5),BMC(5),CMC(5),FD(6),FG(6),
1 AMXX(26),DL,TTMAX,SSRISE,SRMIN,DELH,TOIL,NMXX,
2 HEIGHT,SSET,SRISE
HC,XN,NL,OZP(20),OZN(11,11,5),MR,LS,HCS,XNS
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,UNO,1103,
IIH20,JPLUS
ISPD,ICAL,IACR,IDIL,IPLC,IEMS,IRDY,IBLK,IBCK,IPLT,A
1 ITRN,ITIT,IRCT,IRAT,ITIM,IMCH,INIT,ISTR,IMIX,ISPC,A
2 ITMP,IALF,IDEP,IZNI,IMAS,IMOL,ICRE,IBIO,IWAT
COMMON /PHOTON/ CF(72,20),P(24,20),IPH(20),IP,RFCT(20),PP (10,20), A
1 IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF (125,10),
2 IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300)
COMMON /PLTVEC/ HCT(20),OT(20),NT,OHC,HCG,PLTGRD,OXN,XNG,HC1,XN1,
1 TICZ,DIGZ,CHRZ,IPLDEV
COMMON /SCRAT3/ WY(20)
COMMON /SCRATC/ ISPN
COMMON /SPEC/ NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2),
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN,
2 XNAL,NOZ,FENX(2),C(61),NI,KOZ(5)
COMMON /STORE/ AST(60)
COMMON /SUNLIT/ Z(10),RTCON(10),LAM1,INC,SLA,SLO,TZ,IY,IM,ID,
1 ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24),
2 XZ(24),KKK(24),JSTRT,JSTOP,PSPEC,MNLM,MXLM,MAXL,
3 MAXJ
COMMON /TEMPER/ TEMEND,NTEMP,QM(30)
COMMON /TITL/ ITTL{36)
COMMON /WLB1/ FCTR, DIST, CHRSIZ , NNCHR, OZBL
COMMON /WATER/ WATEND,NWATER,PAMB,QW(30),QR(30),PMILLI,ILH20
COMMON /ZENITH/ IPZ,ZDEF (10,20),IPHZ(20),IZENP
COMMON /ALFCHR/ ISPAL(IO)
COMMON /BIOCHR/ IISOP, IBEMSP(5)
COMMON /CALCHR/ SPEC IS (61)
COMMON /CRECHR/ ISPNCR(3)
COMMON /EMSCHR/ EMSP(5)
COMMON /NEED1C/ IBZA
COMMON /PHTCHR/ ISPDP(IO)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER*! AST
CHARACTER*2 ITTL, JTTL, ITEST
CHARACTER*4 ISPAL, ISPDP, ISPNCR, IBEMSP
CHARACTER*4 IPLACE, IOPT
CHARACTER*4 SPECIS, HCSPEC, PLSP, IISOP, ISPN, EMSP, REACT
CHARACTER*4 ISPD,ICAL,IACR,IDIL,IPLC,IEMS,IRDY,IBLK,IBCK,
IPLT,ITRN,ITIT,IRCT,IRAT,ITIM,IMCH,INIT,ISTR,IMIX,ISPC,ITMP,
IALF,IDEP,IZNI,IMAS,IMOL,ICRE,IBIO,IWAT,
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,UNO,1103,
IIH20,IBZA,JPLUS
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
,A
,A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
89A
90
91
92
93
94
95
96
97
97A
97B
97C
97D
97D
97E
97F
97G
97H
971
97J
97K
97L
97M
97N
970
97P
97Q
97R
97S
97T
97U
97X
97Y
97Z
98A
98B
98C
A-2
-------
DIMENSION X (7), IPLACE(6), JTTL(36)
DIMENSION ITTK20)
DIMENSION NRTC(200), XRTC(200),OZAR(4)
INTEGER PSPEC
INITIALIZE SOME LOCAL VARIABLES
DATA HCCON/595./,XNXCON/1890./ITEST/'ZO'/
DATA IPLACE/' LOS',' ANG','ELES',', CA','LIF.',' '/
DATA IEM,KALCMP, JS,KS1/4*0/,NC/11/
DATA JTTL /' ',' I','SO','PL','ET','H ',30*' '/
CALL DATA INITIALISATION ROUTINES
CALL OPENA
WRITE (IOUT,830)
WRITE (IOUT,831)
WRITE (IOUT,832)
CALL MECH
CALL PHOT
CALL MIXST
CALL SUNTIM
READ INPUT FILE AND PRINT IT
**** NOTE THE FOLLOWING CODE IS NOT NEEDED IN ORDER TO USE
OZIPM-4.XX. IF THE USER FINDS THAT THE INPUT FILE (DEFAULT
UNIT 7) CANNOT BE REWOUND USING REWIND STATEMENT THEN
EITHER THE INPUT UNIT NUMBER NEEDS TO BE CHANGED OR
THE FOLLOWING SECTION OF CODE CAN BE COMMENTED OUT.
WRITE (IOUT,980)
DO 30 1=1,1000
READ (IN,850) ITT1
DO 10 IJ=1,20
IF (ITTl(IJ).NE.IBLK) GO TO 20
10 CONTINUE
GO TO 40
20 IF(MOD(1,50).EQ.O) WRITE (IOUT,980)
WRITE (IOUT,, 860) ITT1
30 CONTINUE
40 CONTINUE
REWIND IN
OPTIONS LOOP
DO 820 IOPTLP=1,1000
READ(IN,840) IOPT,(X(I),1=1,6)
DO ISOPLETH
IF (IOPT.NE.ISPD) GO TO 60
IF (ABS(X(D).NE.O.) HC=X(1)
IF (ABS(X(2)).NE.O.) XN=X(2)
IF
-------
CALL RLINE (KS1,JS)
DO 50 K=1,NOZ
49 IF (NUMPSP.GT.l.AND.K.GT.l) READ (IN,880) (OZP(I),1=1,NL)
ISPN=PLSP(K)
CALL LINER (KALCMP,OZN(1,1,K))
50 CONTINUE
INFO=0
JS=0
GO TO 820
DO INDIVIDUAL, CALCULATIONS
60 IF (IOPT.NE.ICAL) GO TO 80
NPTO=1
INFO=1
, NE. 0
, NE. 0
TPRNT=X(4)
TSTEP=X(5)
IF (ABS(X(3» .NE.O
TPRNT=60.
TSTEP=60.
IF (ABS(X(4))
IF (ABS(X{5))
NTSV=0
CALL HDWRITdPLACE, IEM)
CALL SIM (X{1),X(2),ZN,1)
IF (INFO.EQ.l)
DO 70 1=1,NOZ
IF (TM(I).GT.O.) TMX=CLOCK(FLOAT(JSTRT),IFIX(TM(I)))
IF (TM(I) .GT.O.) WRITE (IOUT,900) PLSP (I) , OZM (I) , TM.X
IF (TM(I).LE.O.) WRITE (IOUT,940) PLSP(I),OZM(I)
WRITE (IOUT,870)
c
c
c
c
c
c
70 CONTINUE
CALL SPLOT
NPTO=0
INFO=0
GO TO 820
IMPLEMENT ACCURACY OPTION
80 IF (IOPT.NE.IACR) GO TO 90
IF (ABS(X(1) ) .NE.O.) NC=IFIX(X{1)+0
IF ( (NC/2) .EQ. ( (NC + D/2) ) NC=NC+1
IF (ABS(X(2) ) .NE.O.) MR=IFIX (X (2 ) +0
IF (ABS(X{3)> .NE.O.) ERR=X(3)
IF (ABS(X(4) ) .NE.O.) SIG=X(4)
IF (ABS(X(5) ) .NE.O.) SIGMA=X(5)
IF (ABS(X(6) ) .NE.O.) NGO=0
GO TO 820
READ PLACE OPTION
90 IF (IOPT.NE.IPLC) GO TO 100
IF (ABS(X{1) ) .NE.O.) SLA=X(1)
IF (ABS(X(2) ) .NE.O.) SLO=X(2)
IF (ABS(X(3) ) .NE.O.) TZ=X(3)
IF (ABS(X(4)) .NE.O.) IY=IFIX (X (4 ) +0
IF (ABS(X(5)) .NE.O.) IM=IFIX (X (5) +0
IF (ABS(X(6) ) .NE.O.) ID=IFIX (X (6) +0
.1)
.1)
.01)
.01)
.01)
IF(ABS(X(1)).NE.O
1)
CALL PHOT
CALL MIXST
CALL SUNTIM
GO TO 820
READ MORNING AND AFTERNOON MIXING HEIGHTS
,OR.ABS(X(2)).NE.O.)READ(IN,930)(IPLACE(I),1=1,
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
6A
A
A
A
A
A
A
A
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
A-4
-------
A 219
100 IF (IOPT.NE.IDIL) GO TO 110 A 220
IF (ABS(X(D).NE.O.) Z1=X(1) A 221
IF (ABS(X(2)).NE.O.) Z2=X(2) A 222
IF (ABS(X(3».NE.O.) DSTRT=X(3) A 223
IF (ABS(X(4)>.NE.O.) DEND=X(4) A 2?4
AMIX(l)=-3. , 225
CALL MIXST A „ 6
CALL SUNTIM A 227
JMIN=IFIX(DSTRT)-((IFIX(DSTRT)/100)*100) A 228
TMIN1=FLOAT{(IFIX(DSTRT)/100)*60+JMIN) A 22g
JMIN=IFIX(DEND)-((IFIX(DEND)/100)*100) A 230
TMIN2=FLOAT((IFIX(DEND)/100)*60+JMIN) A 231
JMIN=JSTRT-{(JSTRT/100)*100) A 232
TMIN3=FLOAT{(JSTRT/100)*60+JMIN) A 233
TMIN4=AMAX1(TMIN1,TMIN3,SSRISE) A 234
TSRT=TMIN4--TMIN3 A 235
IF (TSRT.GT.O.) DTIM=TMIN2-TMIN4 A 236
IF (TSRT.LE.O.) DTIM=TMIN2-TMIN3 A 237
IF (DTIM.LT.O.) DTIM=0. a
DCON=ABS(X{5)) *
c G° T° 82° A 240
C READ HOURLY MIXING HEIGHTS \ 242
A 94 ~\
110 IF (IOPT.NE.IMIX) GO TO 150 a
NMIX=IFIX(X(1)+0.1>+1 ?
DO 120 I»l,5 A
120 AMIX(I)=X(I+1) . ^ 247
IF (NMIX-5.GT.O) READ(IN,880) (AMIX(I),1=6,NMIX) A 248
A
STRM=0. "
STOPM=FLOAT(NMIX-1)*60. A
NMX4=(NMIX-1)*3 J
DO 130 I = 1,NMX4 a
130 DC(I)=0. J
NMIX1=NMIX-1
DO 140 I=1,NMIX1 a 9^c
K=3*I-2 A 256
DC(K)=(AMIX(I+1)-AMIX(I))/60. A
140 CONTINUE *
DTIM=STOPM ^
TSRT=0. ^
GO TO 820 ^
C A
C READ HOURLY TEMPERATURE DATA a
A 9 c c
150 IF (IOPT.NE.ITMP) GO TO 161 a
NTEMP=IFIX{X(1)+0.1)+1
DO 160 1=1,5 *
160 QM(I)=X(I+1) J
IF (NTEMP-5.GT.O) READ(IN,880) (QM (I ) , 1=6, NTEMP) A
QM(NTEMP + 1):=2.*QM(NTEMP)-QM(NTEMP-1) . A
QM(NTEMP+2)=3.*QM
-------
PAMB=1.0
IF (ABS(X{2)).NE.O.) PMILLI=X(2)
IF (ABS(X{2)).NE.O.) PAMB=PMILLI/29.9213
READ (IN,880) (QR(I),1=1,NWATER)
WATEND=FLOAT(NWATER-1)*60.
TFACT=l./273.
TNOW=TEMP
DO 165 I=l,rNWATER
RH1=QR(I)
IF (NTEMP.GT.O.AND.I.LE.NTEMP) TNOW=QM(I)
IF (NTEMP.GT.O.AND.I.GT.NTEMP) TNOW=QM(NTEMP)
IF (TNOW.GE.273.) RCONST=18.02*{597.3-.566*{TNOW-273.))/1.9869
IF (TNOW.LT.273.) RCONST=6133.17
IF (QR(I) .GT.100.). RH1 = 100.
IF (QR(I).LT.O.) RH1=0.
QW(I)={6030.*.01*RH1/PAMB)*EXP(RCONST*(TFACT-1./TNOW))
165 CONTINUE
QW(NWATER+1)=2.*QW(NWATER)-QW(NWATER-1)
QW(NWATER+2)=3.*QW(NWATER)-2.*QW(NWATER-1)
GO TO 820
READ EMISSIONS
170 IF (IOPT.NE.IEMS) GO TO 220
NEM=IFIX(X(1)+0.1)
IEM=IFIX(ABS(X(1))+0.1)
ESTOP=FLOAT(IEM)* 60.
IF (X(l).LT.(-0.99999999)) GO TO 190
DO 180 1=1,5
180 EM(I)=ABS(X(I+1))
IF (NEM-5.GT.O) READ(IN,880) (EM(I),1=6,NEM)
CALL EMISS (NEM,EM,EC)
ISP=2
EMSP(1) = IIHC
EMSP(2)=IINX
GO TO 820
190 DO 200 1=1,5
200 EMO(I,1)=X(I+1)
IF (EMO{1,1).LT.(-0.0001)) GO TO 210
ISP=1
EMSP(1)=IIHC
IF (IEM-5.GT.O) READ(IN,880) (EMO(I,I),1=6,IEM)
CALL EMISS (IEM,EMO(1,1),ECO(1,1))
210 READ(IN,880) (EMO(I,2),1=1,7)
IF (EMO{1,2) .LT. (-0.0001)) GO TO 820
ISP=2
EMSP(2)=IINX
IF (IEM-7.GT.O) READ(IN,880) (EMO(I,2),1=8,IEM)
CALL EMISS (IBM,EMO(1,2),ECO(1,2))
GO TO 820
READ EMISSIONS (MOLAR UNITS)
220 IF (IOPT.NE.IMOL) 30 TO 300
NEM=IFIX(X(1)+0.1)
IEM=IFIX(ABS(X(1) ) 4-0.1)
ESTOP=FLOAT(IEM)*63.
IF (X(l) .LT. (-0.99999999)) GO TO 240
DO 230 1=1,5
230 EM(I)=ABS(X(I+1))
IF (NEM-5.GT.O) READ(IN,880) (EM(I),1=6,NEM)
CALL EMISS (NEM,EM,EC)
GO TO 820
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
275F
275G
275H
2751
275J
275K
275L
27 6M
275N
2750
275P
275Q
275R
275S
275T
275U
275V
275W
275X
275Y
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302.
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
A-6
-------
240 ISP-IFIX(ABS(X{2))+0.1)
FHT=X(3)
DAREA=X(4)
HCEM=X(5)
XNEM=X(6)
EFACT=1.
IF (FHT.GT.O.) EFACT=24450./FHT
IF (FHT.GT.O..AND.DAREA.GT.O.) EFACT=24450./(FHT*DAREA)
IF (ISP.GT.2) READ (IN,880) (SPRSE(I),1=3,ISP)
SPRSE(1)=HCEM
SPRSE(2)=XNEM
DO 290 1=1,ISP
READ (IN,840) EMSP(I),(EMO(J,I),J=l,6)
IF (IEM-6.GT.O) READ (IN,880) (EMO{J,I),J=7,IEM)
IF (EMSP(I).NE.IIHC.AND.EMSP(I).NE.IINX) GO TO 260
CONCEN=HCEM
IF (EMSP(I).EQ.IINX) CONCEN=XNEM
QO=EFACT/CONCEN
DO 250 J=1,IEM
EMO(J,I)=EMO(J,I)*QO
250 CONTINUE
GO TO 280
CONVERT OTHER SPECIES
260 CONTINUE
QO=EFACT/SPRSE(I)
DO 270 J=1,IEM
EMO(J,I)=EMO(J,I)*QO
270 CONTINUE
280 CALL EMISS (IEM,EMO(1,I),ECO(1, I) )
290 CONTINUE
GO TO 820
READ EMISSIONS (MASS UNITS)
THIS OPTION WAS IMPLEMENTED IN OZIPM-2
300 IF (IOPT.NE.. IMAS) GO TO 330
NEM=IFIX(X(1)+0.1)
IEM=IFIX(ABS(X(1) )+0.1)
ESTOP=FLOAT(IEM)*60.
ISP=2
EMSP(1)=IIHC
EMSP(2)=IINX
READ (IN,880) (EMO(I,1),1=1,JEM)
READ (IN,880) (EMO(I,2),1=1,IEM)
HCEM=X(2)
XNEM=X(3)
FHT=X{4)*.OC1
DO 320 1=1,ISP
CONCEN=HCEM
IF (EMSP(I).EQ.IINX) CONCEN=XNEM
CONV=HCCON
IF (EMSP(I).EQ.IINX) CONV=XNXCON
Q0=l./(CONV*CONCEN*FHT)
DO 310 J=l,IEM
EMO(J,I)=EMO(J,I)*QQ
310 CONTINUE
CALL EMISS (IEM,EMO(1,I),ECO(1,I))
320 CONTINUE
ISP=2
GO TO 820
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
A-7
-------
c
c
C A 382
C READ CALCOMP PLOTTING OPTION A 383
C A 384
330 IF (IOPT.NE.IPLT) GO TO 340 A 385
KALCMP=1 A 386
FCTR=0.6 A 387
HC1=8.5 A 388
XN1=5.95 A 389
CHRZ=0.10 A 390
IF (ABS(XCL)) .NE.O.) FCTR=X(1) A 391
PLTGRD=X(2) A 392
IF (ABS(X(3)).NE.O.) HC1=X{3) A 393
IF (ABS(X(4)).NE.O.) XN1=X(4) A 394
IF (ABS(X(5)).NE.O.) CHRZ=X(5) A 395
IF (ABS(X(6)).NE.O.) CHRSIZ=X(6) A 396
DIGZ=CHRZ A 397
TICZ=CHRSIZ A 398
GO TO 820 A 399
c A 400
C PERFORM VOC CONTROL REQUIREMENT ESTIMATIONS BASED ON A 401
C CITY-SPECIFIC EKMA GUIDELINES A 402
C A 403
340 IF (IOPT.NE.ISTR) GO TO 350 A 404
C A 405
C ALL EKMA CALCULATIONS ARE DONE IN SUBROUTINE EKCALC A 406
A 407
CALL HDWRITdPLACE, IEM) A 408
A 409
C CALL EKMA SUBROUTINE TO CALCULATE VOC CONTROL REQUIREMENTS A 410
C A 411
CALL EKCALC (X) A 412
GO TO 820 A 413
A 414
C READ REACTIVITIES A 415
A 416
350 IF (IOPT.NE.IRCT) GO TO 360 A 417
KHC=IFIX(X(1)+0.1) A 418
IF (ABS(X(2)).NE.O.) XNF(1)=X(2) A 419
IF (ABS(X(2)).NE.O.) XNF(2)=1.-X(2) • A 420
IF (KHC.GT.O) READ(IN,880) (RCTY(I),1=1,KHC) A 421
GO TO 820 A 422
A 423
C READ SPECIES OF INTEREST A 424
A 425
360 IF (IOPT.NE.ISPC) 30 TO 410 A 426
IF (ABS(X(1)).GT.O.) NOZ=IFIX(X(1)+0.1) A 427
READ(IN,950) (PLSP (I),1 = 1,NOZ) A 428
DO 380 J=1,NOZ A 429
DO 370 1=1,NS A 430
IF (SPECIS(I).NE.PLSP(J)) GO TO 370 A 431
KOZ(J)=I A 432
GO TO 380 A 433
370 CONTINUE A 434
WRITE (IOUT,970) PLSP(J) A 435
STOP A 436
380 CONTINUE A 437
390 IF (PLSP(l).EQ.II03 ) GO TO 820 A 438
IF (ITTL(6).NE.ITEST ) GO TO 820 A 439
DO 400 1=1,36 A 440
400 ITTL(I)=JTTL(I) A 441
GO TO 820 A 442
A 443
C READ TITLE A 444
A-8
c
c
c
c
c
-------
A 445
410 IF (IOPT.NE.ITIT) GO TO 420 A 446
READ(INf850) (ITTL (I) , 1=1, 36) A 447
GO TO 820 A
A
C READ TRANSPORT OPTIONS A
C A 451
420 IF (IOPT.NE.ITRN) GO TO 440 a
OZIN=X<1) £
OZAL=X(2) ?
HCIN=X(3) J
HCAL=X(4) £
XNIN=X{5) £
XNAL=X(6) £
IF (HCIN.GT. (-0.0000001)) GO TO 430 a
JIN=IFIX(ABS(HCIN)-h0.1) A
READ(IN,880) HCIN, (FINHC (I) , 1=1, JIN) A 461
430 IF (HCAL.GT. (-0.0000001)) GO TO 820 A
JAL=IFIX(ABS(HCAL)H-0.1) A
READ(IN,880) HCAL, (FALHC (I ) , 1=1, JAL) A
GO TO 820 *
- A 465
C READ BACKGROUND CONDITIONS A
A
440 IF (IOPT.NE.IBCK) GO TO 450 C
OZBK=X(1) £
HCBK=X(2) J
XNBK=X(3) J
IF (HCBK.GE. (-0.00001)) GO TO 820 A 47o
JBK=IFIX(ABS(X(2))-f-0.01) A
READ (IN, 880) HCBK, (FBK ( I) , 1=1 , JBK) A
GO TO 820 J
C A
C READ ALOFT CONCENTRATIONS OF SPECIES OTHER THAN 03,NMOC,NOX A 478
A 4 7 Q
450 IF (IOPT.NE.IALF) GO TO 480 a
IALFT=IFIX(ABS(X(1))+0.01) a
READ (IN, 950) (ISPAL (I ) , 1 = 1, IALFT) a
DO 470 I=lf IALFT £
DO 460 J=1,NS £
IF (ISPAL(I) .NE.SPECIS(J)) GO TO 460 ' A
LOCALF(I)=J J
GO TO 470 ?
460 CONTINUE ^
470 CONTINUE
READ (IN, 880) (CALFT (I ) , 1=1, IALFT) a 4qn
GO TO 820 , ™
C A 491
C READ INITIAL CONDITIONS FOR ALL SPECIES OTHER THAN 03,NMOC,NOX A 493
480 IF (IOPT.NE.INIT) GO TO 490 a
a
= IFIX(ABS(X(1))+0.1) ?
READ(IN,950) (REACT ( I) , 1 = 1 , NI ) 7
READ(IN,880) (C ( I) , [ = 1, NI) ?
GO TO 820
c A 499
C READ SURFACE DEPOSITION RATE (CM/SEC) A
\-t
490 IF (IOPT.NE.IDEP) GO TO 530 J
IDPTIM=IFIX(ABS(X(1))+0.01) ?
IDEPO=IFIX(ABS(X(2))+0.01) J
DPEND=FLOAT(IDPTIM) *60. C
DO 520 I = 1,IDEPO *
A- 9
-------
READ (IN,840) ISPDP(I), (RDEP1(J,I),J=l,6) A 508
IF (IDPTIM-6.GT.O) READ (IN,880) (RDEP1(J,I),J=7,IDPTIM) A 509
DO 500 J=l,IDPTIM A 510
RDEPO(J,I)=RDEP1(J,I)*36. A 511
500 CONTINUE A 512
CALL EMISS(IDPTIM,RDEPO(1,1),RDCOEF(1,1)) A 513
IF (ISPDP(I).EQ.IIHC) GO TO 520 A 514
DO 510 J=1,NS A 515
IF (ISPDP(I).NE.SPECIS(J)) GO TO 510 A 516
LOCDEP(I)==J A 517
GO TO 520 A 518
510 CONTINUE A 519
520 CONTINUE A 520
GO TO 820 A 521
C A 522
C READ ALREADY COMPLETED SIMULATIONS A 523
C A 524
530 IF (IOPT.NE.IRDY) GO TO 560 A 525
KS1=IFIX(ABS(X(1))+0.1) A 526
JS=2 A 527
IF (NOZ.EQ.l) WRITE (IOUT,910) PLSP(l) A 528
IF (NOZ.GT.l) WRITE (IOUT,910) (PLSP(I),1=1,NOZ) A 529
DO 550 1 = 1,KS1 A 530
IF (X(l).GT.O.) READXIN,880) HCC, XNN, ZN, OZAR A 531
IF (X(l) .LT. (-0-.98)) READ (IALL,990) HCC, XNN, ZN, OZAR A 532
WRITE (IALN,990) HCC,XNN,ZN,OZAR A 533
IF (XNN.GT.O.) RT01=HCC/XNN A 534
IF (XNN.LE.O.) RT01=HCC*1.0E7 A 535
NOZM1=NOZ-1 A 536
IF (NOZ.EQ.l) WRITE (IOUT,920) HCC,XNN,RT01,ZN A 537
IF (NOZ.GT.l) WRITE (IOUT,920) HCC,XNN,RT01,ZN,(OZAR(JJ),JJ=1,NO A 538
1ZM1) A 539
JJ=MOD(I,11) A 54Q
IF (JJ.EQ.O) JJ=11 A 541
II=(I-JJ)/11 + 1 A 542
.OZN(JJ,II,1)=ZN A 543
IF (NOZ.LE.l) GO TO 550 A 544
DO 540 JK=2,NOZ A 545
OZN(JJ,II,JK)=OZAR(JK-1) A 546
540 CONTINUE A 547
550 CONTINUE A 54g
GO TO 820 A 549
C A 550
C READ CHEMICAL MECHANISM A 551
A 552
560 IF (IOPT.NE.IMCH) GO TO 650 A 553
IZENP=1 A 554
IF (X(l).LE.O.) CALL MCHWRT A 555
IF (ABS(X(5)).NE.O.) TEMP=X(5) A 556
IF (QM(1).GT.O.) TEMP=QM(1) A 557
IF (X(l).LT.O.) GO TO 820 A 558
NX=IFIX(ABS(X(1))+0.1) A 559
IP=IFIX(ABS(X(2))+0.1) A 56Q
NHC=IFIX(ABS(X(3)1+0.1) A 561
NEPA=IFIX(ABS(X(4))+0.1) A 562
IF (IP.NE.O) READ(IN,880) (XRTC(I),1=1,IP) A 563
IF (IP.EQ.O) GO TO 600 a
DO 570 1=1,IP \
570 IPH(I)=IFIX(XRTC(I)+0.1) A
A 567
C PLACE ZENITH ANGLE.DEPENDENCE INTO APPROPRIATE SLOT FOR EACH REACTIONA 568
DO 590 K=1,IP I 5576Q9
A-10
-------
DO 580 1-1,10
PP(I,K)=1. A 571
580 CONTINUE A 572
590 CONTINUE A ?Z3
IF (NHC.NE.O) READ(IN,950) (HCSPEC(I),1=1,NH
IF (NHC.NE.O) READ(IN,880) (CARB(I),1=1,NHC)
600 IF (NHC.NE.O) READ(IN,950) (HCSPEC(I),1=1,NHC) A S7R
IF (NHC.NE.O) READ(IN,880) (CARB(I),1=1,NHC) J 576
CALL MCHSET (NX,NEPA) A 576
ILH20=-1 " A 577
DO 640 J=1,NS A 577A
DO 610 1=1,NHC A 578
IF (SPECIS(J).NE.HCSPEC(I)) GO TO 610 A cl?
IH(I)=J A 58°
GO TO 640 A 581
610 CONTINUE A ^82
620 IF (SPECIS(J).EQ.IIN02 ) INOX(1)=J A
IF (SPECIS(J).EQ.IINO ) INOX(2)=J A
DO 630 K=1,NOZ
630 IF (SPECIS(J).EQ.PLSP(K)) KOZ(K)=J a
IF (SPECIS(J).EQ.IIH20 ) ILH20=J *
640 CONTINUE A
INHH=1 A 588
CALL PHOT A 589
CALL MIXST A 589A
CALL SUNTIM A 589B
GO TO 820 A 589C
C A 590
C MODIFY RATE CONSTANTS USING THE RATE OPTION £ 593
650 IF (IOPT.NE.IRAT) GO TO 720 A 593
NRR=IFIX(X(l)+.l) A 594
IF (ABS(X(2)).NE.O.) GO TO 700 A
READ(IN,880) (XRTC(I),1=1,NRR) A ,Q.
DO 660 1=1,NRR A 597
660 NRTC(I)=IFIX(XRTC(T)+.l) 598
READ(IN,880) (XRTC (I) , 1=1, NRR) A HI
DO 690 1=1,NRR A 60°
J=NRTC(I) A 601
DO 670 JK=1,IP A 602
IF (J.EQ.IPH(JK)) RFCT(JK)=XRTC(I) A ^°3
IF (J.EQ.IPH(JK)) GO TO 680 , °4
670 CONTINUE A 605
680 CONTINUE A 606
690 A(J)=XRTC(I) A 607
GO TO 820 A 608
700 DO 710 1=1,NR A 609
710 A(I)=0. A 61°
GO TO 820 A 611
C A 612
C READ DESIRED SIMULATION TIME A 613
C A 614
720 IF (IOPT.NE.ITIM) GO TO 730 A 615
START=0. A 616
STOPP=600. A 617
JSTRT=800 A 618
JSTOP=1900 A 619
IF (ABS(X(2)).EQ.O.) GO TO 820 A ?2°
JSTRT=IFIX(X(1)+0.1) A 621
JSTOP=IFIX(X(2)+0.1)+100 A 622
JMIN=JSTRT-((JSTRT/100)*100) A 623
TMIN1=FLOAT((JSTRT/100)*60+JMIN) A f24
JMIN=.JSTOP-( (JSTOP/100) *100)
TMIN2=FLOAT((JSTOP/LOO)*60+JMIN) A 626
STOPP=TMIN2-TMIN1 A 627
A 628
A-ll
-------
STOPP=STOPP-60.
******* UPDATED 11/81 FOR 24 HR TIME
IF (STOPP.LE.O.) STOPP-1440.+STOPP
CALL PHOT
CALL MIXST
CALL SUNTIM
GO TO 820
ZENITH ANGLE OPTION
730 IF (IOPT.NE.IZNI) GO TO 780
IPZ=IFIX(X(1)+0.1)
DO 770 K=1,IPZ
READ (IN,880) (XRTC(I),1=1,11)
IPNW=IFIX(XRTC(1)+0.01)
DO 740 J=1,IP
IF (IPNW.EQ.IPH(J)) GO TO 750
740 CONTINUE
WRITE (IOUT,960) 1PNW
STOP
750 DO 760 1=1,10
PP (I, J)=XRTC(I'+1)
IF (J.EQ.l) RTCON(I)=RTCON(I)*XRTC(I+1)
IF (J.EQ.l) PP(I,J)=1.
760 CONTINUE
770 CONTINUE
GO TO 820
INPUT EMISSION REDUCTION CREDITS (CURRENTLY IMPLEMENTED FOR CO
780 IF (IOPT.NE.ICRE) GO TO 801
ICR=1
IF (X(l).GT.O.) ICR=IFIX(XU)+0.1)
IF (X(l).LT.-0.0001) ICR=0
IF (X{1).LT.-0.0001) GO TO 820
IEMCR=IFIX (ABS(X(2))+0.1)
NEMCR=IFIX (X(2)+0.1)
DO 800 J=l,ICR
READ (IN,840) ISPNCR(J),SPCR69{J),SURFCR(J),ALOFCR(J),REDCR
1FSRFCR(J),FALFCR(J)
JX=J+2
EMSP(JX)=ISPNCR(J)
READ (IN,880) (EMO(I,JX),1=1,7)
IF ((IEMCR-7).GT.C) READ (IN,880) (EMO(I,JX),1=8,IEMCR)
IF (NEMCR.GT.O) CALLEMISS (IEMCR,EMO(1,JX),ECO(1,JX))
IF (NEMCR.GT.O) GO TO 800
FHT=X(3)*.001
QO=1./(1145.*SPCR69(J)*FHT)
DO 790 1=1,IEMCR
EMO (I, JX) =EMO (I, JX) *QO
790 CONTINUE
CALL EMISS (IEMCR,EMO(1,JX),ECO(1,JX))
800 CONTINUE
GO TO 820
INPUT BIOGENIC EMISSIONS
801 IF (IOPT.NE.IBIO) GO TO 810
NBEM=IFIX(ABS(X(1))+0.1)
BESTOP=FLOAT(NBEM)*60.
IBSP = IFIX(ABS(X(2) )+0 . 1)
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
ONLY) A
A
A
A
A
A
A
A
A
A
(J), A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
684A
684B
684C
684D
684E
684F
684G
A-12
-------
FHT=X(3)*.001
EFACT1=.024450/FHT
DO 805 J=lfIBSP
CBTOT(J)=0.
IFSR^BI ( J)' ^LFBH J? P ( J
READ (IN, 8 80) WTMOL(J)
IF (ACB4(J) .LE.O.) GO TO 803
READ (IN, 880) (BFRAC ( I, J) , 1=1, NHC)
DO 802 1=1,, NHC
CBTOT ( J) =CBTOT ( J) +BFRAC ( I, J) *CARB (I)
802 CONTINUE
803 READ (IN, 880) (BEMO (I, J) , I=1,NBEM)
EFACT=EFACT1/WTMOL ( J)
DO 804 I=1,,NBEM
BEMO ( I , J) =BEMO ( I , J) *EFACT
804 CONTINUE
CALL EMISS (NBEM,BEMO(1, J),BECO(1, J) )
805 CONTINUE
GO TO 820
' REDBI < J)
WRITE (IOUT,890) IOPT
810 IF (IOPT.NE.IBLK)
STOP
820 CONTINUE
STOP
830 FORMAT ('!' /////////)
831 FORMAT (IX //////////)
832 FORMAT (49X,39H***************************
249X,39H*
OZONE ISOPLETH PLOTTING PACKAGE
WITH OPTIONAL MECHANISMS
*********
OZIPM-4 (EKMA)
EKMA(90005)
******
)
349X,39H*
449X,39H*
549X,39H*
649X,39H*
749X,39H*
849X,39H*
149X,39H*
249X,39H*****
840 FORMAT (A4 , 6X, 7F10 .2)
850 FORMAT (36A2)
860 FORMAT (10X,f36A2)
870 FORMAT (1H1//)
880 FORMAT (7F10.5)
<1H1,24HTHE OPTIONS INSTRUCTION ,A4,21H CANNOT BE PROCESSED
'°9HfLD?MAXIT ^ ^ *™ 'A4'1X'3H = ^7-5,12H CE
'" 14Xr36HTHE FOLLOWING RESULTS WERE READ IN. ////1H
930 FORMAT (6A4)
NOT REACHED, THE LAST ONE
950 FORMAT (7{A4,6X))'
960 FORMAT (1HO, 9HREACTION ,I10,10H NOT FOUND)
970 FORMAT (1H1, 39X,8HSPECIES ,A4,38H IS NOT FOUND IN THE KINETIC MECHA
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
)A
A
PA
A
A
A
A
A
IA
A
A
A
[A
A
684H
6841
684J
684K
684L
684M
684N
6840
684P
684Q
684R
684S
684T
684U
684V
684W
684X
684Y
684Z
685
685A
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
A-13
-------
980 FORMAT (1H1//////1HO,28HTHE INPUTS FOR THIS RUN ARE //) A 728
990 FORMAT (1X,7E13.4) A 729
END • A 730-
A-14
-------
BLOCK DATA
SAVE
COMMON /CALC/
NR,KR(200f12),A(200),S(200),R(200),ITYPE(200),
IA(60),JA(800),DILUT,TEMP,ERR,START.STOPP,TPRNT
2 TSTEP,ZENI '
COMMON /CNTRL/ SIG,SIGMA,INFO,NPTO,TSRT, DTIM, Zl,Z2,DCON,EHC,EXN
COMMON /HEAT/
COMMON /SPEC/
COMMON /OPTS/
FLST,TLST
SC(200,12),ISC(200,3)
NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2),
FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN,
XNAL,NOZ,FENX(2),C(61),NI,KOZ(5)
ISPD, ICAL, IACR, IDIL, IPLC, IEMS, IRDY, IBLK, IBCK, IPLT, B
'IMCH' IN"> ISTR, IMIX, ISPC, B
COMMON /EMIS/
L
COMMON /MIX/
ITMP,IALF,IDEP,IZNI,IMAS,IMOL,ICRE,IBIO,IWAT
NEM,ISP,ESTRT(5),ESTOP,ESLP,IEMLS(5),EOSLP(5)
EMO(26,5),ECI(5),EM(26),EC(125),ECO<125,5)
NMIX,AMIX(26),STRM,STOPM,DC(104)
COMMON /MIXING/ DSTRT,DEND,AMC(5),BMC(5),CMC(5),FD(6),FG(6)
1 AMXX(26),DL,TTMAX,SRISE,SRMIN,DELH,TOIL,NMXX,
2 HEIGHT,SSET,SSRISE
COMMON /TEMPER/ TEMEND,NTEMP,QM(30)
COMMON /INOUT/ IN,IOUT,ITAPE,IALN,IALL,INHH,IOZC
ITTL(36)
HC,XN,NL,OZP(20),OZN(11,11,5),MR,LS,HCS,XNS
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,IINO,1103,
IIH20,JPLUS
OZM(5),NGO,TTM,TM(5)
COMMON /PLTVEC/ HCT(20),OT(20),NT,OHC,HCG,PLTGRD,OXN,XNG,HC1,XN1
TICZ,DIGZ,CHRZ,IPLDEV
COMMON /WLB1/ FCTR, DIST, CHRSIZ, NNCHR, OZBL
COMMON /BK1/ FBK(20),FBKAL(5),HCBK,XNBK,OZBK,H20BK
COMMON /SUNLIT/ Z(10),RTCON(10),LAM1,INC,SLA,SLO,TZ,IY,IM ID
2 5?T?Tf I?.T9P' ™CL IEND' SPECIE, MAXZ, ITIME (24) , '
COMMON
COMMON /TITL/
COMMON /NEED/
COMMON /NEEDI/
L
COMMON /HOUR/
^r!24)'K(24)'JSTRT'JSTOP'pSPEC,MNLM,MXLM,MAXL,MAXJB
IPZ,ZDEF (10,20),IPHZ(20),IZENP R
COMMON /PHOTON/ CF (72,20),P(24,20),IPH(20),IP,RFCT (20),PP(10,20) B
COMMON /ALOFT/
COMMON /GEARI/
COMMON /PLTND/
IDE:PO,RDEPO(26,10),LOCDEP(10),RDCOEF{125,10)
IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300)
IALFT,CALFT(10),LOCALF(10)
TTDUM(5),UROUND,NNDUM(4)
JBAR,JSYMB,CVERT{9),TVERT(52,2)
COMMON /EXPVAL/ EXPMAX
COMMON /CRED/ ICF:, ISPCR, SPCR69 (3) , SURFCR (3) , ALOFCR (3)
REDCR(3),FSRFCR(3),FALFCR(3),COSFBK,COAFBK
NBEM,IBSP,WTMOL(5),ACB4(5),SURFBI(5),ALOFBI(5)
RECBI(5),FSRFBI(5),FALFBI(5),BEMO(26,5),
BECO(126,5),CBTOT(5),IBLS(5),BESTOP,BFRAC(20,5)
WATEND,NWATER,PAMB,QW(30)fQR(30),PMILLI,ILH20
COMMON /BIOG/
COMMON /WATER/
INTEGER PSPEC
COMMON /ALFCHR/ ISPAL(IO)
COMMON /BIOCHR/ IISOP, IBEMSP(5)
COMMON /CALCHR/ SPECIS(61)
COMMON /CRECHR/ ISPNCR(3)
COMMON /EMSCHR/ EMSP(5)
COMMON /NEED1C/ IBZA
COMMON /PHTCHR/ ISPDP(IO)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER*! JBAR, JSYMB
CHARACTER*2 ITTL
CHARACTERS ISPAL, ISPDP, ISPNCR, IBEMSP
B
B
B
B
B
, B
B
B
B
, B
B
T,B
C,B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
. B
B
B
B
B
B
[JB
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
18A
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
43A
43B
43C
43D
43E
44
44A
44B
44C
44D
44E
44F
44G
44H
441
44J
44K
44L
44M
B-l
-------
CHARACTER*4 TVERT, CVERT
CHARACTER*'? SPEC IS, HCSPEC, PLSP, 11 SOP, EMSP, REACT
CHARACTER*-? ISPD, ICAL, IACR, IDIL, IPLC, IEMS, IRDY, IBLK, IBCK, IPLT,
ITRN,ITIT,IRCT,IRAT,ITIM,IMCH,INIT,ISTR,IMIX,ISPC,
I IMP, IALF, IDEP, IZNI,IMAS, IMOL, ICRE, IBIO, I WAT,
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,UNO,I103,
IIH20,IBZA,JPLUS
PLOTTING DATA
DATA JBAR/'I'/,JSYMB/'0'/
DATA TVERT/17*' ',' C
1' T ',' R ',' A ',' T
2' P ',' M ',70*' '/
UROUND (ROUND-OFF ERROR), EXPMAX IS THE MAXIMUM EXPONENT ALLOWED
DATA UROUND/1.25E-7/,EXPMAX/87.
DATA TEMEND/0./,WATEND/0./
DATA ISPD/'ISOP'/,ICAL/'CALC'/,
1 IPLC/'PLAC'/,IEMS/'EMIS'/,
2 IPLT/'PLOT'/,ITRN/'TRAN'/,
3 IRAT/'RATE'/,ITIM/'TIME'/,
4 IMIX/'MIXI'/,ISPC/'SPEC'/,
5 II03/'03 '/,IIHC/'VOC '/,
6 ITMP/'TEMP'/,IALF/'ALOF'/,
7 IMAS/'MASS'/,ICRE/'CRED'/,
8 UNO/'NO '/,IIH20/'H20 '/
9 JPLUS/" + '/,IBIO/'BIOG'/
SET DEFAULTS
4/
IACR/'ACCU'/,
IRDY/'ALRE'/,
ITIT/'TITL'/,
IMCH/'MECH'/,
ISTR/'EKMA'/,
IINX/'NOX '/,
IDEP/'DEPO'/,
IICO/'CO '/,
,MBLANK/'M
,IWAT/'WATE'/
IDIL/'DILU'/,
IBLK/' '/,
IRCT/'REAC'/,
INIT/'INIT'/,
IMOL/'MOLE'/,
IBCK/'BACK'/,
IZNI/'ZENI'/,
IIN02/'N02 '/,
'/,IBLANK/'
,IISOP/'ISOP'/
DATA HC/2.0/,XN/0.14/,NL/ll/,MR/5/
DATA ITTL/'ST','AN','DA','RD',' 0','ZO','NE',' I','SO','PL'
1 'H ','CO','ND','IT','IO','NS',19*' ' /
FILE I/O UNITS
DATA IN/7/,IOUT/10/,IALN/9/,IALL/8/,IOZC/11/
DATA INFO/0/,NPTO/0/,NGO/1/
DATA OZP/.08, .12, .16, .20, .24, .28, .30, .32, .34, .36, .40,9*0. /
DATA TSRT/0.0/,DTIM/420./,Z1/510./,Z2/630./,DCON/0.0/
DATA SIG/2./,SIGMA/2./
DATA NMIX/0/,AMIX(l)/-3./,NEM/0/
DATA DSTRT/800./,DEND/1500./,PLTGRD/0./,OHC/0./,FCTR/0.6/
DATA TICZ/0.07/,DIGZ/0.10/,CHRZ/0.10/,HCl/8.5/,XNl/5.95/
DATA CHRSIZ/0.07/,QM(l)/-3./,IPLDEV/-l/
DATA NOZ/1/,PLSP/'03 ',4*' '/,
1KOZ/4,4*0/
DATA ICR/0/,ISPCR/0/,IBSP/0/
DEFAULT REACTIVITIES
DATA RCTY/.037,.035, .052, .021, .089,.117, .564,.085,12*0./,
1 FINHC/.034, .020, . 037, .070, . 042, .026, .498, .273,12*0 . /,
2 FALHC/.034, .020, .037, .070, .042, .026, .498, .273,12*0./,
3XNF/.25,.75/,
4FENX/.05,.95/,NI/0/,CARB/2.,2.,2.,l.,7.,8.,l.,l.,12*0./
DATA HCSPEC/'ETH ','OLE ','ALD2','FORM','TOL ','XYL ' 'PAR
1'NR ',12*' ' /
DATA IH/25,24,17,16,26,32,21,34f12*0/,INOX/l,2/,NHC/8/
SET UP DEFAULT TRANSPORTED CONCENTRATIONS
IPLT,
ISPC,
N ',
P ',
)WED
'/,
', 'ET' ,
/
r
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
44N
440
44P
44Q
44R
44S
44T
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
B-2
-------
c DATA OZIN/0./,OZM,/0./,HCIN/0./,HCAL/0./,XNIN/0./,XNAL/0./ B 102
C SET UP BACKGROUND CONCENTRATIONS
-------
DATA IALFT/0/,IDEFO/0/,DPEND/0./,IDPTIM/0/,DNOWS/0./ B 163
C B 164
C DATA FOR CBM4.3 MECHANISM B 165
C B 166
DATA SPECIS/'N02 ','NO ','0 ','03 ','NO3 ','OID ','H20 ', B 167
1 'OH ','H02 ','N205','HN03','HN02'f'PNA ','H202', B 168
2 'CO ','FORM','ALD2'f'C203','X02 'f'PAN ','PAR ', B 169
3 'X02N','ROR ','OLE ','ETH ','TOL ','CRES','T02 ', B 170
4 'OPEN','CRO ','MGLY','XYL ','ISOP','NR ','M ', B 171
5 26*' ' / B 172
DATA KR/1,3,4,3*3,1,4,4,6,6,4,4,4*5,2*10,2,2,2,12,8,12,1,8,9, B 173
1 9,13,8,9,9,14,8,8,5*16,4*17,2*18,20,2*18,8,21,3*23,3,8,4,5,3 B 174
2 ,8,4,26,2*28,8,27,30,3*29,8,8,31,3,8,4,5,19,22,19,34,120*0,2, B 175
3 1,1,2,4,3*0,7,8,9,0,2,1,1,7,0,2,1,8,0,2*12,8,11,2,1,0,13,9,9, B 176
4 0,14,15,8,0,0,3,5,3,8,5,0,2,1,0,18,9,0,8,0,0,1,4*24,3*25,8,2,0 B 177
5 ,27,5,1,0,8,4,32,31,0,4*33,2,2,19,139*0,7,11*0,7,167*0,2,4,1,2, B 178
6 5,1,5,3,6,3,8,9,8,1,1,2,10,11,5,1,2*12,2,1,2,11,5,8,13,9,1, B 179
7 2*14,8,9,3*9,15,8,11,3*18,2*16,20,18,3*16,2*19,9,0,17,16,17, B 180
8 19,16,19,16,9,1,27,2*30,0,18,19,17,9,19,18,9,19,16,22,1,0,0, B 181
9 34,118*0,3,12*0,3,0,1,0,0,1,3*0,8,0,1,0,0,1,0,1,6*0,2*15,0,9 B 182
1 ,9,8,0,11,9,1,0,1,3*19,22,17,0,0,9,17,2*16,9,16,15,19,9,9,19, B 183
2 11,0,9,15,18,19,18,9,17,16,17,136*0,2,25*0,2*15,3*0,15,9,0,0, B 184
3 5*9,0,0,19,21,19,22,15,17,9,27,29,0,9,0,0,15,9,16,27,0,15,24, B 185
4 9, 25,167*0, 2*19, 3*0, 8, 0,17, 21, 0,0, 15,19, 8, 17,19, 9, 0,28,0,-0,29, B 186
5 3*0,18,19,31,0,C,19,22,31,174*0,21,22,0,0,16,9,15,1,8,9*0,16, B 187
6 15,21,0,0,15,25,21,174*0,2*23,0,0,22,0,9,21,11*0,8,28,0,0,25, B 188
7 31,15,178*0,21,0,21,12*0,9,3*0,21,18,9,178*0,8,14*0,31,4*0,17, B 189
8 8,323*0/ B 190
DATA A/1.0,4.3230E+06,26.64,13750.,2309.,2438.,.04731,.053,1.0, B 191
1 424600.,3.26,100.,3. ,33. 9,44160., .5901,1853.,!.9E-06,2.776, B 192
2 1.5390E-04,1.6E-11,9799.,.1975,9770.,!.5E-05,16820.,217.9, B 193
3 12270.,2025.,5.115,6833.,4144., .2181, .189,2520.,322.,15000., B 194
4 1.0,1.0,237.,.93,636.,24000.,3.7,1.0,18315.,12230.,.0222,3700., B 195
5 9600.,21.,1203.,137100.,95445.,22000.,5920.,42000.,.018,11.35, B 196
6 1080.,11920.,2.7020E-03,9150.,12000.,250.,61000.,32500.,20000., B 197
7 8.40,44000.,.015,36200.,26000.,8.96,27000.,142000.,.018,470., B 198
8 12000.,1000.,2000.,1.0,118*0.07 B 199
DATA S/0.0,-1175.,1370.,0.0,-687.,-602.,2450.,0.0,0.0,-390., B 200
1 0.0,940.,580.,0.0,-250.,1230.,-256.,0.0,10897.,-530.,0.0, B 201
2 -806.,3*0.0,-713.,-1000.,-240.,-749.,10121.,-380.,-1150., B 202
3 -5800.,0.0,187.,4*0.0,1550.,0.0,986.,-250.,2*0.0,-250.,-5500., B 203
4 14000.,2*0.0,1710.,0.0,8000.,2*0.0,324.,-504.,2105.,0.0,792., B 204
5 -411.,2633.,-322.,7*0.0,500.,-116.,8*0.,-1300.,119*0.O/ B 205
DATA SC/610*1.,2.,2*1., .89,2.,2*1.,2.,1.,2*2.,12*1.,2.,3*1., B 206
1 2.,10*1.,2.,.79,1.,.87,.96,2*1.,.63,1.,.5,.91,3*1.,.44,.9,1., B 207
2 -4,4*1., ..03, .7,2*1., .6,138*1., .89,30*1.,2.,3*1.,2., .79,1., .13, B 208
3 1.1,1.,-2.1, .38,1., .74,1.,1.7,1.56,.42,.08, .9,1.,.6,1.,.3,1.,2 . B 209
4 ,.62,.5,2*1.,.8,1.,.4,2*1.,.2,133*1.,.11,34*1.,2.,.79,1.,.11, B 210
5 .94, .04, ,,02, .28,-!., .22, . 09, 1. , . 22, . 12, . 36, . 9, . 56, . 6, . 3, 2*1. , B 211
6 2.,.7, .2,2*1., .55, .67, .55, .1, .1, .06, .1,168*1., .79 ,1., .11, B 212
7 -2.1,2*1.,, .3,1., .1,1., .7,2*1., .56, 2*1.,. 3, 4*1.,. 03,. 8, 2*1., B 213
8 .5,.13,.2,174*1.,-.11,.04,2*1.,.2,1.,.33,1.,.3,10*1.,.69,1.1, B 214
9 2*1.,.5,!.,.!,174*1.,.76,.02,2*1., .02,1.,.44,-!.,11*1., .08, .3, B 215
1 2*1.,.45,.4,.06,178*1.,.22,1.,-1.,12*1.,.76,3*1.,.9,.2,.44, B 216
2 178*1.,.2,14*1., .2,4*1., .2, .1,323*1./ B 217
END B 218-
B-4
-------
SUBROUTINE HDWRIT(IPLACE,IEM)
SAVE
THIS SUBROUTINE WRITES THE HEADER PAGE FOR THE CURRENT CALCULATIONS
COMMON /CALC/
COMMON /CNTRL/
I
COMMON /SPEC/
NRfKR(200,12),A(200),S(200),R(200),ITYPE{200),
IA(60),JA(800),DILUT,TEMP,ERR, START,STOPP,TPRNT
TSTEP,ZENI
SIGrSIGMA,INFO,NPTO,TSRT,DTIM,21,Z2,DCON,EHC,EXN,
FLST,TLST
NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2),
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN,
2 XNAL,NOZ,FENX(2),C(61),NI,KOZ(5)
COMMON /SUNLIT/ Z(10),RTCON(10),LAM1,INC,SLA,SLO,TZ,IY,IM ID
1 ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24),'
2 XZ<24),KKK(24),JSTRT,JSTOP,PSPEC,MNLM,MXLM,MAXL,
J MAXJ
COMMON /PHOTON/ CF(72,20),P{24,20),IPH(20),IP,RFCT(20),PP(10,20),
1 IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF(125,10),
^ „_ , IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300)
COMMON /ZENITH/ IPZ,ZDEF (10,20),IPHZ(20),IZENP
COMMON /EMIS/ NEM,ISP,ESTRT(5),ESTOP,ESLP,IEMLS(5),EOSLP(5)
* ^ t EMO(26,5),ECI(5),EM(26),EC(125),ECO(125,5)
COMMON /MIX/ NMIX,AMIX(26),STRM,STOPM,DC(104)
COMMON /MIXING/ DSTRT,DEND,AMC(5),BMC(5),CMC(5),FD(6),FG(6)
1 AMXX(26),DL,TTMAX,SSRISE,SRMIN,DELH,TDIL,NMXX,
2 HEIGHT,SSET,SRISE
COMMON /TEMPER/ TEMEND,NTEMP,QM(30)
COMMON /FRPLOT/ SAVCON(80,5),SAVTIM(SO),NTSV,INOW
COMMON /INOUT/ IN,IOUT,ITAPE,IALN,IALL,INHH,IOZC
ITTL{36)
HC,XN,NL,OZP(20),OZN(11,11,5),MR,LS,HCS,XNS
SC(200,12),ISC(200,3)
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,IINO,1103,
IIH20,JPLUS
AST(60)
OZM(5) ,NGO,TTM,TM(5)
COMMON /TITL/
COMMON /NEED/
COMMON /HEAT/
COMMON /NEEDI/
L
COMMON /STORE/
COMMON /HOUR/
COMMON /PLTVEC/ HCT(20),OT(20),NT, OHC,HCG,PLTGRD,OXN,XNG,HC1,XN1,
COMMON /ALOFT/
COMMON /WLB1/
COMMON /BK1/
COMMON /CRED/
L
COMMON /BIOG/
COMMON /WATER/
TICZ,DIGZ,CHRZ,IPLDEV
IALFT,CALFT(10) , LOCALF(10)
FCTR,DIST,CHRSIZ,NNCHR,OZBL
FBK(20),FBKAL(5),HCBK,XNBK,OZBK,H20BK
ICR,ISPCR,SPCR69(3),SURFCR(3),ALOFCR(3),
REDCR(3),FSRFCR(3),FALFCR(3),COSFBK,COAFBK
NBEM,IBSP,WTMOL(5),ACB4(5),SURFBI(5),ALOFBI(5),
REDBI(5),FSRFBI(5),FALFBI(5),BEMO(26,5) ,
BECO(126,5),CBTOT(5),IBLS(5),BESTOP,BFRAC(20,5)
WATEND,NWATER,PAMB,QW(30),QR(30),PMILLI,ILH20
COMMON /ALFCHR/ ISPAL(IO)
COMMON /BIOCHR/ IISOP, IBEMSP(5)
COMMON /CALCHR/ SPECIS(61)
COMMON /CRECHR/ ISPNCR(3)
COMMON /EMSCHR/ EMSP(5)
COMMON /NEED1C/ IBZA
COMMON /PHTCHR/ ISPDP(IO)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER*! AST
CHARACTER*2 ITTL
CHARACTERS ISPAL, ISPDP, ISPNCR, IBEMSP
CHARACTER*4 IPLACE
CHARACTER*4 SPECIS, HCSPEC, PLSP, IISOP, EMSP, REACT
c
c
c
c
c
c
c
c
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
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
1
2
3
4
5
6
7
8
8A
9
10
11
12
13
14
15
ISA
16
17
18
19
20
21
22
23
24
24A
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
42A
42B
42C
42D
42E
42F
42G
42H
421
42J
42K
42L
42M
42N
420
42P
42Q
42R
42S
C-l
-------
CHARACTER*4 IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,UNO,I103,
1 IIH20,IBZA,JPLUS
DIMENSION ITMIX{26), IZC(IO), XRTC(IOO), IPLACE(6)
INTEGER PSPEC
DATA IZC/0,10,20,30,40,50,60,70,78,86/, IFRST/1/
IF (IZENP.LE.O.OR.IFRST.NE.1) GO TO 30
IFRST=2
WRITE (IOUT,140) IZC
DO 20 K=1,IP
J=IPH(K)
I=KR(J,1)
DO 10 LL=1,10
IF (K.EQ.l) XRTC(LL)=RTCON(LL)*RFCT(K)*PP(LL, K)
IF (K.NE.l) XRTC(LL)=PP(LL,K)*RFCT{K)*RTCON{LL)*RFCT(1)
10 CONTINUE
WRITE (IOUT,150) J,SPECIS(I),(XRTC(LL),LL=1,10)
20 CONTINUE
30 CONTINUE
WRITE (IOUT,160) (ITTL(I),1=1,36)
KSTOP=JSTOP-100
WRITE (IOUT,170) IPLACE,SLA,SLO,TZ,IM,ID,IY,JSTRT,KSTOP
NOON=SPECIE
IRISE=SRISE
ISET=SSET
IF (INFO.EQ.(-1)) WRITE (IOUT,180) NOON,IRISE,ISET
IF (NMIX.GT.O) GO TO 50
DDTRT=FLOAT(JSTRT)+(TSRT/60.)*100.
DDEND=DDTRT+(DTIM/60.)*100.
WRITE (IOUT,190) Zl,Z2,DDTRT,DDEND
ITMIX(1)=DDTRT
NMX=INT(DTIM/60.+0.5)+1
DO 40 J=2,NMX
40 ITMIX(J)=ITMIX(J-1)+100
WRITE (IOUT,410) (ITMIX(J),J=l,NMX)
WRITE (IOUT,420) (AMXX(J),J=l,NMX)
IF (DCON.GT.O.) WRITE (IOUT,200) DCON
GO TO 60
50 NMIX1=NMIX-1
WRITE (IOUT,360)
WRITE (IOUT,370)
60 IF (QM(1).LT.O.) GO TO 65
NTEMP1=NTEMP-1
WRITE (IOUT,450) (I,1=1,NTEMP1)
WRITE (IOUT,460)
65 IF (QW(1).LT.O.) GO TO 70
NWAT1=NWATER-1
WRITE (IOUT,470) (I,1=1,NWAT1)
WRITE (IOUT,480)
WRITE (IOUT,490)
WRITE (IOUT,500)
(AMIX(I),I=1,NMIX)
,I=1,NTEMP)
(QR(I),I=1,NWATER)
(I,I=1,NWAT1)
(QW(I),I=1,NWATER)
WRITE (IOUT,510) PMILLI
IF (ILH20.LE.O) WRITE (IOUT,520)
70 WRITE (IOUT,270)
IF (NHC.NE.O) WRITE (IOUT,210) (HCSPEC(I),RCTY(I),1=1,NHC)
IF (HCIN.GT.O.) WRITE (IOUT,390) (HCSPEC(I),FINHC(I),1=1,NHC)
IF (HCAL.GT.O.) WRITE (IOUT,400) (HCSPEC(I),FALHC(I),1=1,NHC)
IF (HCBK.GT.O.) WRITE (IOUT,430) (HCSPEC(I),FBK(I),1=1,NHC)
WRITE (IOUT,280) XNF(l)
IF (NHC.EQ.O) WRITE (IOUT,260)
IF ( (OZIN+HCIN+XNIN) .GT. 0.0 .OR.
1 WRITE (IOUT,380)
(OZAL+HCAL+XNAL) .GT. 0.0)
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
42T
42U
42V
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
86A
86B
86C
86D
86E
86F
86G
86H
87
88
89
90
91
92
93
94
95
C-2
-------
IF (OZIN+HCIN+XNIN.GT.O.) WRITE (IOUT,220) OZIN,HCIN,XNIN
,MT ™ n "^.(OZIN+HCIN+XNIN.LE.O..AND.OZAL+HCAL+XNAL.LE.O.)
IF (NI.NE.O) WRITE (IOUT,290) (REACT(I),C(I),1=1,NI)
IF (OZAL+HCAL+XNAL.GT.O.) WRITE (IOUT,230) OZAL,HCAL,XNAL
IF (IALFT.GT.O) WRITE (IOUT,300) (ISPAL(I),CALFT(I),1=1,IALFT)
IF (OZBK+HCBK+XNBK.GT.O.) WRITE (IOUT,440) OZBK,HCBK,XNBK
IF (NEM.GT.O) WRITE (IOUT,240) (I,I=1,NEM)
IF (NEM.GT.O) WRITE (IOUT,250) (EM(I),1=1,NEM)
IF (NEM.GT.(-1).AND.ICR.LE.O) GO TO 110
ISP1=ISP+ICR
IB1=1
IF (NEM.GT.-l) IB1=3
DO 90 J=1,NS
DO 80 I=IB1,ISP1
IF (EMSP(I).EQ.IIHC .OR.EMSP(I).EQ.IINX ) GO TO 80
IF (SPECIS(J).NE.EMSP(I)) GO TO 80
IEMLS(I)=J
GO TO 90
80 CONTINUE
90 CONTINUE
WRITE (IOUT,310) (J,J=1,IEM)
DO 100 I=IB1,ISP1
100 WRITE (IOUT,330) EMSP(I),(EMO(J,I),J=l,IEM)
110 CONTINUE
IF (IBSP.LE.O) GO TO 119
WRITE (IOUT,307)
WRITE (IOUT,308) (IBEMSP(I),SURFBI(I),1=1, IBSP)
WRITE (IOUT,309) (IBEMSP(I),ALOFBI(I),1=1,IBSP)
DO 111 J=1,IBSP
XX=XX+ACB4(J)
111 CONTINUE
IF (XX.LE.O.) GO TO 115
WRITE (IOUT,391)
DO 112 J=1,IBSP
IF (ACB4(J).LE.O
WRITE (IOUT',392)
112 CONTINUE
115 CONTINUE
DO 117 1=1,IBSP
DO 116 J=1,NS
IF (SPECIS(J).NE.IBEMSP(I)) GO TO 116
IBLS(I)=J
GO TO 117
116 CONTINUE
117 CONTINUE
) GO TO 112
IBEMSP(J),(HCSPEC(I),BFRAC(I,J),I=1,NHC)
119
130
WRITE (IOUT,311)
DO 118 1=1,IBSP
(J,J=1,NBEM)
IF (IDPTIM.LE.O) GO TO 130
WRITE (IOUT,320) ( J, J=l, IDPTIM)
DO 120 1=1, IDEPO
RETURN
FORMAT STATEMENTS
7// 42X,48HTHE FOLLOWING PHOTOLYSIS RATE CONSTANTS
C
.)) C
C
C
C
) C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
AREC
/ C
C
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
120A
120B
120C
120D
120E
120F
120G
120H
1201
12 OJ
120K
120L
120M
120N
1200
120P
120Q
120R
120S
120T
120U
120V
120W
120X
120Y
120Z
121
122
123
124
125
126
127
128
129
130
131
132
133
C-3
-------
150 FORMAT (1HO,11X,13,8X,A4,IX,IP,10E10.2)
160 FORMAT (1H1 // 40X,36A2)
170 FORMAT (1HO // 40X,40HPHOTOLYTIC RATE CONSTANTS CALCULATED FOR ///C
149X,6A4 /// 40X,9HLATITUDE ,F10.3 // 40X, 9HLONGITUDE ,F10.3 //
20X,9HTIME ZONE,F7.1 // 40X,5HDATE ,5X,3(I4,3X) // 40X,5HTIME ,7X,IC
34,3X,2HTO,3X,I4,5X,19HLOCAL DAYLIGHT TIME)
180 FORMAT (1HO,39X,10HSOLAR NOON,17 / 1HO,39X,10HSUNRISE ,17,
17X,10HSUNSET ,17)
190 FORMAT (1HO // 40X,39HDILUTION DETERMINED FROM THE FOLLOWING ,, ,w
10X,17HINVERSION HEIGHTS,5X,7HINITIAL,F7.0,5X,5HFINAL,4X,F7.0 // 40C
2X,7HTIMING ,15X,5HSTART,F9.0,5X,4HSTOP,4X,F8.0)
200 FORMAT (1HO,39X,55HDILUTION RATE BEFORE AND AFTER THE INVERSION CHC
1ANGE WAS // 37X,1PE12.3,9H PER MIN.)
210 FORMAT ((1HO,39X,10HEMISSIONS ,6X,3(A4,9H FRACTION,F6.3,3X)))
220 FORMAT (/ 40X,13HSURFACE LAYER,8X,5HOZONE,F9.3,6X,11HHYDROCARBON,FC
17.3,4X,3HNOX,F10.3,4H PPM)
230 FORMAT (/ 40X,5HALOFT,16X,5HOZONE,F9.3,6X,11HHYDROCARBON,F7.3,4X,3C
1HNOX,F10.3,4H PPM)
240 FORMAT (1HO // 40X,50HCONTINUOUS EMISSIONS (EXPRESSED AS THE FRACTC
1ION OF // 40X,54HINITIAL NON-BACKGROUND CONCENTRATION EMITTED PER C
2HOUR) // 40X,4HHOUR,3X,1016 / 47X,7I6)
250 FORMAT (1HO,39X,8HFRACTION,10F6.3 / 48X,7F6.3)
260 FORMAT (1HO,39X,42HTHERE ARE NO HYDROCARBONS IN THE MECHANISM)
270 FORMAT (// 40X,10HREACTIVITY)
280 FORMAT (1HO,39X,7HN02/NOX,6X,F6.3)
290 FORMAT ((1HO,39X,13HSURFACE LAYER,8X,A4,1X,F9.3,6X,A4,5X,F9.3
1,4X,A4,F9.3,4H PPM))
300 FORMAT ( (1HO, 39X, 13HALOFT , 8X, A4 , IX, F9 . 3, 6X, A4 , 5X, F"9 . 3
1,4X,A4,F9.3,4H PPM))
307 FORMAT (1HO,//,4OX,36HTRANSPORTED BIOGENIC CONCENTRATIONS /)
308 FORMAT ((1HO,39X,13HSURFACE LAYER,8X,A4,IX,F9.3,6X,A4,5X,F9.3
1,4X,A4,F9.3,4H PPM))
309 FORMAT ( (1HO, 39X, 1.3HALOFT ,8X,A4,IX,F9.3,6X,A4,5X,F9.3
1,4X,A4,F9.3,4H PPM))
310 FORMAT (1HO // 40X,70HCONTINUOUS EMISSIONS (EXPRESSED AS FRACTION
10F THE INITIAL PRECURSORS)
2 // 40X,7HSPECIES,5X,4HHOUR,5X,10I6 / 61X,1016 / 61X,1016)
311 FORMAT (1HO // 40X,39HBIOGENIC EMISSIONS (IN UNITS OF PPM/HR)
1 // 40X,7HSPECIES,5X,4HHOUR,5X,10I6 / 61X,1016 / 61X,10I6)
320 FORMAT (1HO // 40X,58HSURFACE DEPOSITION RATES (CM/SEC)
1 // 40X,14H
2 // 40X,7HSPECIES,5X,4HHOUR,5X,10I6 / 61X,1016 / 61X,10I6)
330 FORMAT (1HO,41X,A4,4X,8HFRACTION,4X,10F6.3 / 62X,10F6.3 /
1 62X,10F6.3)
331 FORMAT (1HO,41X,A4,16X,10F6.3,/,62X,10F6.3,/,62X,10F6.3)
340 FORMAT (1HO,41X,A4,4X,8HRATE ,4X,10F6.3 / 62X,10F6.3 /
1 62X,10F6.3)
350 FORMAT (1HO // 40X,58HCONTINUOUS EMISSIONS (EXPRESSED AS THE FRACTC
1ION OF INITIAL // 40X,50HNON-BACKGROUND NOX CONCENTRATION EMITTED C
2PER HOUR) // 45X,4HHOUR,3X,11I6 / 52X,4I6)
360 FORMAT (1HO // 40X,39HDILUTION DETERMINED FROM THE FOLLOWING // 4C
10X,49HINVERSION HEIGHTS (AT THE BEGINNING OF EACH HOUR) // 40X,4HHC
20UR,9X,1HO,,9I8 / 46X,10I8 / 46X, 1018)
370 FORMAT (1HO,39X,8HHEIGHT ,10F8.1 / 48X,10F8.1 / 48X,10F8.1)
380 FORMAT (1H1 // 4OX,26HTRANSPORTED CONCENTRATIONS )
390 FORMAT ((1HO,39X,13HSURFACE LAYER,3X,3(A4,9H FRACTION,F6.3,3X)))
391 FORMAT (1HO//40X, 60HTHE FOLLOWING BIOGENIC SPECIES ARE TREATED AC
IS HYDROCARBONS /40X,29H(EXPRESSED AS BOND FRACTIONS) )
392 FORMAT (1HO,39X,A4,12X,3(A4, 9H FRACTION, F6.3, 3X) ,/,
1 7<56X,3(A4,9H FRACTION,F6.3,3X),/))
400 FORMAT ((1HO,39X,6HALOFT ,10X,3(A4,9H FRACTION,F6.3,3X)))
410 FORMAT (1HO //40X,46HMIXING HEIGHTS (AT THE BEGINNING OF EACH HOURC
1) // 40X,4HTIME,2X,10I8/46X,10I8/46X,10I8)
420 FORMAT (1HO,39X,6HHEIGHT,2X,10F8.1/48X,10F8.1/48X,10F8.1)
C
C
vc
4C
1C
C
C
C
4C
OC
C
HC
C
C
FC
C
3C
C
TC
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
re
C
C
3C
-1C
C
C
C
C
\c
C
C
C
C
1C
C
C
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
162A
162B
162C
162D
162E
163
164
165
165A
165B
166
167
168
169
170
170A
171
172
173
174
175
176
177
178
179
180
181
181A
181B
181C
181D
182
183
184
185
C-4
-------
430 FORMAT { (1HO, 39X, 13HBACKGROUND
FRACTION F6 3 3YM
. -., k,rj.u.3,4H PPM)
450 FORMAT (1HO // 40X,43HTEMPERATURE (AT THE BEGINNING OF EACH
1 // 40X,4HHOUR,9X,1HO,9I8 / 46X,10I8 / 46X,10I8)
460 FORMAT (1HO,39X,8HTEMP ,10F8.1 / 48X,10F8.1 / 48X,10F8
470 FORMAT (1HO // 40Xf49HRELATIVE HUMIDITY (AT THE BEGINNING OF
1HOUR) // 40X,4HHOUR,9X,1HO,9I8 / 46X,10I8 / 46X,10I8)
480 FORMAT (1HO,39X,8HRH (%) ,10F8.1 / 48X,10F8.1 / 48X,10F8
490 FORMAT (1HO // 40X,52HWATER CONCENTRATIONS (AT THE BEGINNING
1CH HOUR) // 40X,4HHOUR,9X,1HO,9I8 / 46X,10I8 / 46X,10I8)
500 FORMAT (1HO,39X,8HPPM ,10F8.0 / 48X,10F8.0 / 48X
510 FORMAT (1HO,39X,8HPRESSURE,5X,F6.2,13H INCHES OF HG)
520 FORMAT
-------
SUBROUTINE MECH D i
SAVE D 2
C D 3
C SET DEFAULT MECHANISM CONDITIONS D 4
C D 5
COMMON /CALC/ NR,KR(200,12),A(200),S(200),R(200),ITYPE(200), D 6
1 IA(60),JA(800),DILUT,TEMP,ERR,START,STOPP,TPRNT, D 6A
2 TSTEP,ZENI D 7
COMMON /PHOTON/ CF(72,20),P(24,20),IPH(20),IP,RFCT(20),PP{10,20), D 8
1 IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF(125,10), D 9
2 IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300) D 10
COMMON /ZENITH/ IPZ,ZDEF(10,20),IPHZ(20),IZENP D 11
C D HA
COMMON /CALCHR/ SPECIS(61) D 11B
COMMON /PHTCHR/ ISPNCR(IO) D llc
C D 11D
CHARACTER* 4 SPEC IS D HE
c
c
D 12
C PLACE ZENITH ANGLE DEPENDENCE INTO APPROPRIATE SLOT FOR EACH REACTIOND 13
D 14
DO 40 K=1,IP D 15
DO 20 J=l, IPZ D 16
IF (IPH(K) .NE.IPHZ(J)) GO TO 20 D 17
DO 10 1=1,10 D 18
PP(I,K)=ZDEF(I,J) ' D 19
10 CONTINUE D 20
GO TO 40 D 21
20 CONTINUE D 22
DO 30 1=1,10 D 23
PP(I,K)=1.0 D 24
30 CONTINUE D 25
40 CONTINUE D 26
D 27
DO 50 1=1, IP D 28
J=IPH(I) D 29
RFCT(I)=A(J) D 30
50 CONTINUE D 31
D 32
RETURN D 3 3
END
D
D-l
-------
SUBROUTINE MCHSET (NX,NEPA) v
SAVE h 1
C E 2
C READ NEW MECHANISM ?, *j
C E 4
COMMON /CALC/ NR, KR (200, 12) , A(200) , S (200) , R (200) , ITYPE (200) , IA (60) E 6
•L , JA( 800) ,DILUT, TEMP, ERR, START. STOPP,TPRNT TSTEP ZENTF 7
COMMON /SPEC/ NSfCARB(20)fRCTY(20)fXNf(2),li(20),iNOX(2) ' E 8
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN, E 9
2 XNAL,NOZ,FENX(2),C(61),NI,KOZ(5) E 10
COMMON /HEAT/ SC (200, 12) , ISC (200, 3) E T?
COMMON /NEED1/ IBLANK, MBLANK, IIHC, IINX, IICO, IIN02, UNO, 1103, E 12
1 IIH20,JPLUS P it
COMMON /STORE/ AST (60) £ |^
COMMON /INOUT/ IN, IOUT, ITAPE, IALN, IALL, INHH, IOZC E IS
COMMON /GEAR10/ IRS (200, 12) p ,?
COMMON /PHOTON/ CF (12, 20) , P (24 , 20) , IPH (20) , IP, RFCT (20) , PP ( 10, 20) E 17
1 IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF{125,10), E 18
2 IDPTIMrDPEND,RDEPl(26,10),DNOWS,SPRSE(300) E 19
NS=1
E
E
COMMON /CALCHR/ SPECIS(61)
COMMON /NEED1C/ IBZA
COMMON /PHTCHR/ ISPDP(IO) ,
COMMON /SPECHR/ HCSPEC(20), PLSP(5)f REACT (61) E 19E
*
CHARACTER*! JMINUS, AST
CHARACTER* 4 ISPDP
CHARACTER*4 SPECISf HCSPEC, PLSP, REACT
CHARACTERS IBLANKr MBLANK, II
1 IIH20, IBZA,JPLUS, E
, E 1 q
CHARACTERS IBLANKr MBLANK, IIHC, IINX, IICO, IIN02, IINO, 1103, E 19J
'
2 IPL, IRS, KRS, MORX
DIMENSION KRS(12),SC1(12),IPL(12) E 20"
DATA JMINUS/'-'/ ^ 21
ICOUNT=0 E 22
NR=0 E 23
MORX=IBLANK E 25
DO 10 1=1,200 I 2°
A(I)=0. E 27
S(I)=0. E 28
R(I)=0. E 29
DO 10 J=l,12 E 30
IRS(I,J)=IBLANK E 3l
IF (I.EQ.l) KRS(J)=IBLANK E ^2
SC(I,J)=1. . E 33
10 KR(I,J)=0 E 34
20 NS=NS-1 E 35
WRITE (IOUT,,200) E 36
30 IF (NEPA.LE.O) E 37
E 40
C CHECK FOR MORE PRODUCTS E 41
C E 42
IF (MORX. NE ..IBLANK. AND. NEP A. LE 0) p ^
1READ (IN,160) (SCI(II-3),KRS(II),11=7 12) v A\
IF {NEPA.GT.O) b
1READ (IN,170) J, (KRS (I),1 = 1,7),RTE,ENERGY * ^
IF (NEPA.GT.O) GO TO 50 .
IF (MORX.NE.IBLANK) GO TO 50 ' E 48
DO 40 11=7,12 E 49
E 50
E 51
E-l
-------
KRS(II)=IBLANK E 52
40 CONTINUE E 53
50 DO 60 11=1,12 E 54
60 IRS(J,II)=KRS(II) E 55
A(J)=RTE E 56
S(J)=ENERGY E 57
DO 70 11=4,12 E 58
70 SC(J,II)=SCl(II-3> E 59
80 DO 90 1=1,12 E 60
90 IF (ABS(SC(J,I)).EQ.O.) SC(J,I)=1. E 61
DO 120 K=l,12 E 62
NL=K*5 E 63
NF=NL-4 E 64
DO 100 LK=NF,NL E 65
100 AST(LK)=IB.LANK E 66
IPL(K)=IBLANK E 67
IF (IRS(J,K).EQ.IBLANK) GO TO 110 E 68
IPL(K)=JPLUS E 69
IF (K.EQ.1.0R.K.EQ.4) IPL(K)=IBLANK E 70
IF (SC(J,K).LT.O.) IPL(K)=JMINUS E 71
110 KK = K E 72
IF (IRS(J,K).NE.IBLANK) CALLVALU (SC(J,K),NF,NL) E 73
120 CONTINUE E 74
ICOUNT=ICOUNT+2 ' E 75
IF (IRS(J,8).NE.IBLANK) ICOUNT=ICOUNT+1 E 76
IF (IRS(J,12).NE.IBLANK) ICOUNT=ICOUNT+1 E 77
IF (ICOUNT.GT.50) WRITE (IOUT,200) E 78
IF (ICOUNT.GT.50) ICOUNT=2 E 79
WRITE (IOUT,180) E 80
1 J,IPL(1),(AST{I),1=1,5),IRS(J,1),IPL(2),(AST(I),1=6,10)E 81
2,IRS(J,2),IPL<3),(AST(I),I=11,15),IRS(J,3),IPL(4),(AST(I),1=16,20)E 82
3,IRS(J,4),IPL(5),(AST(I),1=21,25),IRS(J,5),IPL(6),(AST(I),1=26,30)E 83
4,IRS(J,6),IPL(7),(AST(I),I=31,35),IRS(J,7),A(J),S(J) E 84
IF (MORX .NE. IBLANK) E 85
1 WRITE (IOUT,190) IPL(8), (AST(I),1=36,40), E 86
2 IRS(J,8),IPL(9),51,55),IRS(J,11) E 89
IF (MORX.NE.IBLANK.AND.IRS(J,12).NE.IBLANK) E 90
1WRITE (IOUT,190) IPL (12), (AST(I),1=56,60),IRS(J,12) E 91
KR(J,1)=100 E 92
IF (IP.EQ.O) GO TO 140 E 93
DO 130 1=1,IP E 94
IF (J.NE.IPH(I)) GO TO 130 E 95
RFCT(I)=A(J) E gg
GO TO 140 E 97
130 CONTINUE . E 98
140 IF (J.GT.NR) NR=J E 99
IF (J.NE.NX) GO TO 30 E 100
CALL MATRX E 1Q1
RETURN E 1Q2
E 103
150 FORMAT (2(A4,2X),A4,13,F5.1,A4,Al,IX,2(F5.0,IX,A4,2X),F10.2,IX,F7.E 104
12) E 105
160 FORMAT (6(F5.0,IX,A4,2X)) E 106
170 FORMAT (13,2X,7(A4,IX),2F10.2) E 1Q7
180 FORMAT (/2X,13,IX,3(Al,5A1,IX,A4,2X),1H=,IX,3(Al,5A1,IX,A4,2X), E 108
1A1,5A1,1X,A4,3X,1PE11.3,2X,E13.3) E 109
190 FORMAT (45X, 2X, 4 (Al, 5A1, IX, A4, 2X) ) E no
200 FORMAT (1H1////1HO,14H THE REACTIONS,86X,13HRATE CONSTANT,2X,15HACE 111
IT. ENERGY(K) ) E 112
END
E-l
-------
KRS(II)=IBLANK
40 CONTINUE
50 DO 60 11=1,12
60 IRS(J,II)=KRS(II)
A(J)=RTE
S(J) -ENERGY
DO 70 11=4,12
70 SC(J,II)=SCl(II-3)
80 DO 90 1-1,12
90 IF (ABS(SC(J,I)).EQ.O.) SC(JfI)-l.
DO 120 K=l,12
NL=K*5
NF=NL-4
DO 100 LK=NF,NL
100 AST(LK)=IBLANK
IPL(K)=IBLANK
IF (IRS(J,K) .EQ.IBLANK) GO TO 110
IPL(K)=JPLUS
IF (K.EQ.1.0R.K.EQ.4) IPL (K) =IBLANK
IF (SC(J,K).LT.O.) IPL(K)=JMINUS
110 KK = K
120
(SC(J,K),NI
ICOUNT=ICOUNT+2
IF (IRS(J,8).NE.IBLANK) ICOUNT=ICOUNT+1
IF {IRS(J,12).NE.IBLANK) ICOUNT=ICOUNT+1
IF {ICOUNT.GT.50) WRITE (IOUT,200)
IF (ICOUNT.GT.50) ICOUNT=2
WRITE (IOUT,180)
r£ ^(}l'iA*T
-------
SUBROUTINE MATRX
SAVE
SET UP THE INTERNAL ARRAY FOR THE CURRENT CHEMICAL MECHANISM
COMMON /CALC/ NR,IR(200,12),A(200),S(200),R(200),ITYPE(200),IA(60)
1i JA(800),DILUT,TEMP,ERR,START,STOPP,TPRNT,TSTEP,ZENI
COMMON /SPEC/ NS,CARB(20),RCTY(20),XNF(2),IH(20),
1 INOX(2),FINHC(20),FALHC(20),NHC,OZIN,OZAL,
2 HCIN,HCAL,XNIN,XNAL,NOZ,FENX(2),C(61),NI,KOZ(5)
COMMON /GEARI/ TTDUM(5),UROUND,NNDUM(4)
COMMON /HEAT/ SC(200,12),ISC(200,3)
COMMON /NEED1/ IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,UNO,1103,
1 IIH20,JPLUS
COMMON /STORE/ AST(60)
COMMON /GEAR10/ KR(200,12)
COMMON /CALCHR/ SPECIS{61)
COMMON /NEED1C/ IBZA
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER*! AST
CHARACTERS SPECIS, HCSPEC, PLSP, REACT
CHARACTERS IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,IINO,1103,
1 IIH20,, IBZA, JPLUS,
2 KR, KCHR
NOLD=NS+1
DO 170 1=1,NR
c
c
c
c
c
c
c
c
c
c
c
c
SKIP REACTIONS
IF (IR(I, 2) .EQ.
IF (IR(I,2) .EQ.
IF (IR(I,1) .EQ.
IF (IR(I, 1) .EQ.
IF (IABS(IR(I,1
ALREADY PROCESSED
NOLD. OR. IR(I,
3) .EQ.NOLD) IR(I,3)=99
NOLD) IR(I,2)=0
NOLD) IR(I,1)
NOLD) IR(I, 3)
= 99
= 99
) ) .NE.100) GO TO 170
ZERO OUT REACTIONS;
DO 10 J=2,12
10 IR(I,J) = 0
IF LESS THAN THREE REACTANTS
IF (KR(I,1) .NE.
IF (KR(I,3) .NE.
IF (KR(I,3).NE.
SC(I,3)=1.
KR(I,3)=IBLANK
IF (KR(I, 1) .NE.
KR(I,1)=KR(I,2)
KR(I,2)=IBLANK
SC(I,1)=SC(I,2)
SC(I,2)=1.
20 IF (KR(I,2) .NE.
IF (KR(I,3) .NE.
SC(I,3)=1.
IF (KR(I,3) .NE.
KR(I,3)=IBLANK
30 DO 40 K=4, 12
GET RID OF M AS
, FILL FIRST SLOTS.
IBLANK) GO TO 20
IBLANK) KR(I,
IBLANK) SC(I,
IBLANK) GO TO
IBLANK) GO TO
IBLANK) SC(I,
IBLANK) KR(I,
A PRODUCT
1)=KR(I,3)
1)=SC(I,3)
20
30
2)=SC(I,3)
2)=KR(I,3)
F
F
F
F
F
)F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
16A
16B
16C
16D
16E
16F
16G
16H
161
16J
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
F-l
-------
IF
-------
IR(I,J)=NS F 119
160 CONTINUE F 120
170 CONTINUE F i2l
IF (SPECIS(NS).NE.MBLANK) NS=NS+1 F 122
SPECIS(NS)=MBLANK F 123
DO 180 IK=1,NR F 124
DO 180 MT=1,3 F 125
J=IFIX(SC(IK,MT)+UROUND) F 126
ISC(IK,MT)=J F 127
180 IF (SC(IK,.MT)-FLOAT (J) .GT. 4 . *UROUND) ISC (IK, MT) =-1 F 128
RETURN F 129
END F 130
F-3
-------
SUBROUTINE MCHWRT
SAVE
WRITE THE CURRENT MECHANISM TO OUTPUT FILE
COMMON
1'
COMMON
COMMON
COMMON
COMMON
COMMON
COMMON
1
2
/CALC/ NR,KR(200,12),A(200),S(200),R(200),ITYPE(200),
JA(800),DILUT,TEMP,ERR,START,STOPP,TPRNT,TSTEP
NS,CARS(20),RCTY(20),XNF(2),IH(20),INOX(2),
FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,
XNAL,NOZ,FENX(2),C(61),NI,KOZ(5)
SC(200,12),ISC(200,3)
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,IINO,1103
IIH20,JPLUS
AST(60)
IN,IOUT,ITAPE,IALN,IALL,INHH,IOZC
CF(72,20),P(24,20),IPH(20),IP,RFCT(20),PP(10
IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF(125,10)
IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300)
/SPEC/
/HEAT/
/NEEDI/
/STORE/
/INOUT/
/PHOTON/
COMMON /CALCHR/ SPECIS(61)
COMMON /NEED1C/ IBZA
COMMON /PHTCHR/ ISPDP(IO)
COMMON /SPECHR/ HCSPEC(20), PLSP (5), REACT(61)
CHARACTER*! JMINUS, AST
CHARACTER*4 ISPDP
CHARACTER*4 SPECIS, HCSPEC, PLSP, REACT
CHARACTER*4 IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,IINO,1103
1 IIH20, IBZA,JPLUS,
2 KRS, I?L
DATA JMINUS/'-'/
ICOUNT=0
WRITE (IOUT,110)
DO 50 J=1,NR
IR=KR(J,1)
IF (IR.EQ.O.OR.A(J).EQ.O.) GO TO 50
DO 10 1=1,12
II=KR(J,I)
IF (II.GT.O)
IF -(II.LE.O)
10 CONTINUE
KRS(I)=SPECIS(II)
KRS(I)=IBLANK
DO 40 K=l,12
NL=K*5
NF=NL-4
DO 20 LK=NFrNL
20 AST(LK)=IBLANK
IPL(K)=IBLANK
IF (KRS(K).EQ.IBLANK) GO TO 30
IPL(K)=JPLUS
IF (K.EQ.1.0R.K.EQ.4) IPL(K)=IBLANK
IF (SC(J,K).LT.O.) IPL(K)=JMINUS
30 KK = K
IF (KRS(K).NE.IBLANK) CALLVALU (SC(J,K),NF,NL)
40 CONTINUE
ICOUNT=ICOUNT+2
IF (KRS(8).NE.IBLANK) ICOUNT=ICOUNT+1
IF (KRS (12) ..NE.IBLANK) ICOUNT=ICOUNT + 1
IF (ICOUNT.GT.50) WRITE (IOUT,110)
IF (ICOUNT.GT.50) ICOUNT=2
G
G
G
G
G
IA(60)G
',ZENI G
XNIN
r
,20)
r
G
, G
G
G
G
G
G
G
, G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ISA
18B
18C
18D
18E
18F
18G
18H
181
18J
18K
18L
18M
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
G-l
-------
WRITE (IOUT,90) G 52
1 J,IPLU), (AST(I),I=1,5),KRS(1),IPL(2), (AST(I),1=6,10), G 53
2KRS(2),IPL(3),(AST(I),I=11,15),KRS(3),IPL(4),(AST(I),1=16,20), G 54
3KRS(4),IPL(5),(AST(I),I=21,25),KRS(5),IPL(6),(AST(I),1=26,30), G 55
4KRS(6),IPL(7),(AST(I),I=31,35),KRS(7),A(J),S(J) G 56
IF (KRS(8) .NE. IBLANK) G 57
1 WRITE (IOUT,100) IPL(8),(AST(I),1-36,40), G 58
2 KRS{8),IPL(9),(AST(I),I=41,45),KRS{9), G 59
3 IPL(IO),(AST(I),I=46,50),KRS{10), G 60
4 IPL(ll),(AST(I),I=51,55),KRS(11) G 61
IF (KRS(12).NE.IBLANK) G 62
1WRITE (IOUT,100) IPL(12),(AST(I),1=56,60),KRS(12) G 63
50 CONTINUE . G 64
RETURN G 65
G 66
60 FORMAT (2(A4,2X),A4,I3,F5.1,A4,A1,1X,2(F5.0,1X,A4,2X),F10.2,1X,F7.G 67
12> G 68
70 FORMAT (6{F5.0,IX,A4,2X)) G 69
80 FORMAT (I3,2X,7(A4,IX),2F10.2) G 70
90 FORMAT 2X, 13,IX,3(Al,5A1,IX,A4,2X),1H=,IX,3(Al,5A1,IX, A4,2X) , G 71
1A1,5A1,1X,A4,3X,1PE11.3,2X,E13.3) G 72
100 FORMAT (45X,2X,4(A1,5A1,1X,A4,2X)) G 73
110 FORMAT (1H1////1HO,14H THE REACTIONS,86X,13HRATE CONSTANT,2X,15HACG 74
IT. ENERGY(K) ) • G 75
END
G 76-
G-2
-------
SUBROUTINE MIXST
SAVE
SETUP MIXING HEIGHTS BASED ON MORNING AND AFTERNOON VALUES
COMMON /SUNLIT/ Z(10),RTCON(10),LAM1,INC,SLA,SLO,TZ,IY,IM,ID,
COMMON /CNTRL/
ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24),
XZ(24),K(24),JSTRT,JSTOP,PSPEC,MNLM,MXLM,MAXL,MAXJH
SIG,SIGMA,INFO,NPTO,TSRT,DTIM,Z1,Z2,DCON,EHC,EXN,
1 FLST,TLST
COMMON /MIXING/ DSTRT,DEND,A(5),B(5),C(5),FD(6),Y(6),AMIX(26),DL,
1 TTMAX,SRISE,HMIN,DELH,TOIL,NMIX,HTT,SSET,SSRISE
INTEGER PSPEC
DETERMINE TIME OF SUNRISE (STANDARD TIME)
10
T=400.
CALL SOLAR(SLA,SLO,TZ,IY,IM,ID,T,D,5)
IF(D.GE.l.) GO TO 20
T=CLOCK(T,5)
GO TO 10
CONVERT SUNRISE TO LOCAL DAYLIGHT TIME
20 TSR=T
IF(TSR.LT.0600.)
TSR=0600.
DETERMINE SOLAR DECLINATION AND DAY LENGTH
CALL SOLAR{SLA,SLO,TZ,IY,IM,ID,1200.,D,l)
0=0*3.14159/180.
ARG1=-TAN(0.67399}*TAN(D)
DL-ACOS(ARGl)73.14159*1440.
IDL=DL
TSS=CLOCK(TSR,IDL)
COMPUTE TIME MAXIMUM HEIGHT IS REACHED
TMAX=.70*DL
ITMAX=TMAX
TTMAX=CLOCK(TSR, ITMAX)
CONVERT ALL, 2400 HOUR TIMES TO MINUTES AFTER SUNRISE
SRISE=(FLOAT(IFIX(TSR/100.))*60.)+
1 (TSR-(FLOAT(IFIX(TSR/100.))*100.))
DDSTRT=(FLOAT(IFIX(DSTRT/100.) )* 60 .) +
1 (DSTRT-(FLOAT(IFIX(DSTRT/100.))*100.))
DDEND=(FLOAT(IFIX(DEND/100.))*60.)+
1 (DEND-(FLOAT{IFIX(DEND/100.))*100.))
DDSTRT=DDSTRT-SRISE
DDEND=DDEND-SRISE
COMPUTE HMIN AND DELTA HEIGHT
FD1=DDSTRT/DL
FD2=DDEND/DL
DO 30 J=l,5
IF(FD1.GE.FD(J).AND.FD1.LT.FD{J+l)) II=J
IF(FD2.GE.FD(J).AND.FD2.LT.FD(J+l)) JJ=J
J1=JJ
30 CONTINUE
IF(FDl.GE.O.O) GO TO 40
FD1=0.0
H
H
H
H
H
H
H
CJH
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
H-l
-------
= H 65
40 IF(FD2.LT.0.70) GO TO 50 H 66
FD2=.7 H 67
JJ-6 H 68
Jl=5 H 69
50 CONTINUE H 70
X=FD1-FD(II) H 71
XX=FD2-FD(JJ) H 72
FG1=((A(II)*X+B(II))*X+C(II))*X+Y(II) H 73
FG2=((A(J1)*XX+B(J1))*XX+C(J1))*XX+Y(JJ) H 74
DELH=(Z2-Z1)/(FG2-FG1) H 75
HMIN=Z1-FG1*DELH H 76
HMAX=HMIN+DELH H 77
H 78
COMPUTE MIXING HEIGHTS AT HOURLY INTERVALS H 79
H 80
NMIX=0 H 81
JJSTP=JSTOP-100 H 82
IT=JSTRT/100 H 83
T=IT*100 H 84
IF (DEND.GT.TTMAX) DEND=TTMAX H 85
DO 110 J=l,26 H 86
IF(T.LT.DSTRT) GO TO 80 H 87
IF(T.GE.DEND) GO TO 90 H 88
TT=(FLOAT(IFIX(T/100.))*60.) + (T-(FLOAT(IFIX(T/100.)))* 100.) H 89
TT=TT-SRISE H 9Q
FDT=TT/DL H gi
IF (FDT.LT.0.0) FDT=0.0 H 92
KK=0 H 93
60 KK=KK+1 H 94
IF(FDT.GE.FD(KK).AND.FDT.LT.FD(KK+1)) GO TO 70 H 95
IF(KK.LT.S) GO TO 60 H 96
IF(FDT.GE.FD(6)) GO TO 90 H 97
70 CONTINUE H 9Q
X=FDT-FD(KK) H 99
FG=((A(KK)*X+B(KK))*X +C(KK))*X+Y(KK) H 100
AMIX(J)=HMIN+FG*DELH H
NMIX=NMIX+1 H
IF (T.GE.FLOAT(JJSTP)) GO TO 120 H 103
GO TO 100 H 1Q4
80 AMIX(J)=Z1 H 1Q5
NMIX=NMIX+1 H log
GO TO 100 H 1Q7
90 AMIX(J)=Z2 H 1Q8
NMIX=NMIX+1 H log
100 CONTINUE H 11Q
T=T+100. H ,,,
110 CONTINUE H 112
120 CONTINUE H U3
IF(DEND.GT.TTMAX) DEND=TTMAX H 114
RETURN H n5
END H 116-
H-2
-------
c
c
c
— • " —»»»^ v j. .k 1«.|_J AXZ1 A i_lW \ %* f il /
SAVE
SETUP RATE CONSTANTS FOR THE CURRENT CHEMICAL MECHANISM
I
I
I
I
COMMON /CALC/ NR, KR (200, 12) , A(200) , S (200) , R (200) , ITYPE (200) , IA (60) I
A™*,™ ,„„ . JA(800)'DILUT'TE^'ERR/START,STOPP,TPRNT,TSTEP,ZENI I
COMMON /SPEC/ NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2>, I
1 FJ_NHC<20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN. I
C
C
C
c
^ XNAL,NOZ,FENX(2),CR(61),NI,KOZ{5)
COMMON /CALCHR/ SPECIS (61)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT (61)
DIMENSION C(l)
DIMENSION SIG(61)
CHARACTER*4 SPECIS, REACT, HCSPEC, PLSP
FCT= ( 1 . /298 . ) - ( 1 . /TEMP )
DO 10 1=1,51
10 SIG(I)=0.
IF (N.LE.O) GO TO 40
DO 30 1=1, N
DO 20 J=1,NS
IF (SPECIS (J) .EQ.REACT(I)) SIG(J)=C(I)
IF (SPECIS ( J) .EQ. REACT (I)) GO TO 30
20 CONTINUE
SIG(NS+1)=SIG(NS+1)+C(I)
30 CONTINUE
40 N=NS
M=N-1
C(N)=0.
DO 50 1=1, M
C(N)=C(N)+SIG(I)
50 C(I)=SIG(I)
BK=0.
C(N)=C(N)+SIG(NS+1)
IF (SIG(N) .NE.O.) BK=SIG(N)-C(N)
IF (SIG(N) .NE.O.) C(N)=SIG(N)
NP=0
DO 70 1=1, NR
IF -7
40
T W
41
42
43
44
A C
4 b
46
A ~7
4 /
48
A d
4 y
50
51
52
53-
1-1
-------
SUBROUTINE SPARS (IA,JA,N)
SAVE
C
C SETUP INTERNAL GEAR POINTER VECTOR
C
COMMON /CALC/ NR,KR(200f12),A(200),S(200),R(200)
I/ JB(800),DILUT,TEMP,ERR,START,STOPP
COMMON /SPEC/ NS,CARB(20),RCTY(20),XNF(2),IH(20)
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,
2 XNAL,NOZ,FENX(2),C(61),NI,KOZ{5)
,ITYPE(200),IB(60)J
,TPRNT,TSTEP,ZENI J
,INOX(2),
HCINrHCAL,XNIN,
COMMON /CALCHR/ SPECIS(61)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT (61)
CHARACTER*^ SPECIS, HCSPEC, PLSP, REACT
DIMENSION IA(N), JA(N)
DO 10 1=1, N
10 IA(I)=1
KT=0
JA(1)=0
DO 140 IR=1,NR
IF (KR(IR, 1) .EQ.O.OR.KRdR, 1) .EQ.99) GO TO 140
MT=ITYPE(IR)
DO 130 K=1,,MT
I=KR(IR,K)
DO 60 L=1,MT
J=KR(IR,L)
K1=IA(J)
K2=IA(J+1)-1
IF (K1.GT.K2) GO TO 30
DO 20 M=K1,K2
IF (I.EQ.JA(M) ) GO TO 60
20 CONTINUE
30 DO 40 M=J,N
40 IA(M+1)=IA(M+1)+1
KT=KT+1
KD=KT-K2
K2=K2+1
DO 50 M=1,KD
KTM = KT-M
JA(KTM+2) = JA(KTM+1)
50 CONTINUE
JA(K2)=I
60 CONTINUE
K1=IA(I)
DO 120 L=4,12
J=KR(IR,L)
IF (J) 120,130,70
70 IF (K1.GT.K2) GO TO 90
DO 80 M=K1,K2
IF (J.EQ.JA(M)) GO TO 120
80 CONTINUE
90 DO 100 M=I,N
100 IA(M+1)=IA(M+1)+1
KT=KT+1
KD=KT-K2
K2=K2+1
DO 110 M=1,KD
KTM = KT-M
JA(KTM+2) = JA(KTM+1)
110 CONTINUE
J
J
J
J
J
) J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
1
2
3
4
5
6
7
8
9
10
10A
10B
IOC
10D
10E
10F
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
J-l
-------
JA(K2)=J
120 CONTINUE *! **
130 CONTINUE J *°
140 CONTINUE J "
DO 160 1=1,N "I "
T "
1 "I *l
IF (K1.GT.K2) GO TO 160 T ^
MT=K2-K1+1 I. **
DO 150 K=1,MT JT *'
DO 150 M=K1,K2 j gg
IF (JA(M).GT.JA(M-l)) GO TO 150 T -Jn
J-JA(M-l) JT '°
JA(M-1)=JA(M) T ':.
JA(M)=J ^ ^
150 CONTINUE 6
160 CONTINUE J. ll
M=N J 75
DO 190 1=1,M ' j ^
IF(IA(I+1) .GT.IA(I)) GO TO 190 T -,L
NM-I + 1 J If
NN=N+1 J ^
KMIN=IA(NM) ""
KMAX=IA(NN) j ^
DO 170 J=KMIN,KMAX T ^
KM=KMAX+KMIN-J , **
170 JA(KM)=JA(KM-1) T ^
KNOW=IA(I) JT ^
JA(KNOW)=I ° °°
DO 180 LL=NM,NN , *'
180 IA(LL)=IA(LL)+1 T ^
190 CONTINUE I. "^
RETURN I. ^°
END J 92-
J-2
-------
SUBROUTINE CONVT (NUM,L,N)
SAVE
SUBROUTINE CONVT CONVERTS INTEGERS TO ALPHANUMERICS
FOR PRINTING
ASSUMES VALUE OF INTEGER IS POSITIVE
DIMENSION L{5), JDIGIT(IO)
CHARACTER*! JDIGIT, JBLANK, L
DATA JDIGIT/'0', 'L','2','3','4','5','6','7','8','9'/
DATA JBLANK/' '/
NI=NUM
DO 10 1=1,N
L(I)=JBLANK
10 CONTINUE
DO 20 K=1,N
I=N-K+1
NEXT=NI/10
NDX=(NI-NEXT*10)+1
L(I)=JDIGIT(NDX)
IF (NEXT.LE.O) GO TO 30
NI=NEXT
20 CONTINUE
30 RETURN
END
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
K
1
2
3
4
5
6
7
8
9
10
10A
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29-
K-l
-------
SUBROUTINE VALU (VAL,NF,NL)
SAVE
•^
: CONVERT NUMERIC VALUES TO ALPHAS (ONLY USED TO WRITE MECHANISM)
COMMON /STORE/ AST(60)
^ . COMMON /GEAR1/ T,H,HMIN,HMAX,EPS1,UROUND,NC,MF1,KFLAG1,JSTART
*
DIMENSION AC(5), AD(5), BC(5)
CHARACTER*]. IBLK, IPER, IZRO, IW, AC, AD, BC, AST
DATA IBLK/' '/,IPER/'.'/,IZRO/'0'/
*
VAL1=ABS(VAL)
AVAL=ALOG10(VAL1)
IF (AVAL.EQ.0.) RETURN
DO 10 1=1,5
AC(I)=IBLK
AD(I)=IZRO
10 BC(I)=IZRO
IAD=IFIX(AVAL+UROUND)
IF (IAD) 60,20,20
20 IREM=3-IAD
IAD=IAD+1
JREM=IFIX(VAL1+UROUND)
REM=VAL1-FLOAT(JREM)
IF (REM.GT.UROUND.AND.IREM.GT.O) GO TO 30
CALL CONVT (JREM,AC,5)
GO TO 100
30 CALL CONVT (JREM,AD,IAD)
JREM=IFIX(REM*(10.* *IREM)+0.1)
CALL CONVT (JREM,BC,IREM)
DO 40 J=l,IAD
40 AC(J)=AD(J)
AC(IAD+1)=IPER
DO 50 K=1,IREM
KIAD1 = K+IAD+1
AC(KIAD1)=BC(K)
50 CONTINUE
GO TO 80
60 IAD=IABS(IFIX(AVAL-0.1))-1
IVAL=IFIX(VAL1*10000.+0.1)
CALL CONVT (IVAL,AC,5)
AC(1)=IPER
IF (ABS(VAL1+UROUND-0.1).LT.0.00001) GO TO 80
DO 70 1=1,IAD
70 AC(I+1)=IZRO
80 IF (AC(5).NE.IZRO) GO TO 100
DO 90 K=l,4
L=6-K
90 AC(L)=AC(L-1)
IF (AC(1) .EQ.IPER) IW=IZRO
IF (AC(1) .NE.IPER) IW=IBLK
AC(1)=IVV
GO TO 80
100 DO 110 I=NF,NL
K=I-NF+1
110 AST(I)=AC(K)
RETURN
END
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
1
2
3
4
5
6
7
7A
8
9
10
10A
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57-
L-l
-------
c
c
c
c
c
c
c
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 EMISS (N,H,COEFF)
SAVE
TO HANDLE MORE THAN 16 HISTOGRAM INTERVALS (ASSUMING N IS #INTERVALS)
THE DIMENSIONED VARIABLES BELOW MUST HAVE THE FOLLOWING DIMENSIONS
H = N; Y,DYDX = N+l; CF,COEFF = 5*N
SEE ALSO DIMENSION STATEMENT IN STAIR
DIMENSION H(25), CF(125), Y(26), DYDX(26), COEFF(125)
DOUBLE PRECISION CF, Y, DYDX, HRATIO, EXPONE, FORRAT, FORCDY
DOUBLE PRECISION SIGNDY, SMALLV, RATLIM
REAL DELX, H, COEFF
INTEGER STARTY, STOPY, INDEX, N, MODE, MODE1I
INTEGER NPLUS1, FIVEN, J, K
N IS THE NUMBER OF HISTOGRAM INTERVALS
N+l IS THE NUMBER OF EDGES IN THE HISTOGRAM PLOT
RATLIM= 5.001
MODE=1
DELX=1.0
FORRAT= 2.5
FORCDY =5.25
NPLUS1 = N + 1
FIVEN = 5 * N
IF ( FIVEN .LE. 1) GO TO 20
DO 10 J = 1 , FIVEN
SET ALL COEFFICIENTS TO ZERO IN THE CF ARRAY.
CF(J) =0.0
10 CONTINUE
20 CONTINUE
IF ( NPLUS1 .LE. 1) GO TO 40
DO 30 J = 1 , NPLUS1
ZERO OUT ALL THE Y' S AND DYDX'S, IN THE PROCESS
FORCING THE EDGE OF THE LAST DELX INTERVAL TO ZERO
Y(J) = 0.0
DYDX(J) =0.0
LOOK FOR THE FIRST NON-ZERO H
30 CONTINUE
40 CONTINUE
INDEX = 1
WHILE ((H(INDEX) . LE . 0.0) .AND. (INDEX .LT. N) )
50 IF ((H(INDEX) .GT. 0.0) .OR. (INDEX . GE . N) ) GO TO 60
INDEX = INDEX + 1
GO TO 50
60 CONTINUE
STARTY = INDEX
INDEX = INDEX + 1
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
M-l
-------
MODE1I = 1
C IF (MODE .NE. 0)
IF (MODE .EQ. 0) GO TO 70
C THEN
MODE 11 = START Y
Y(STARTY) = H(STARTY)
DYDX(STARTY) - 0.0
70 CONTINUE
C
C ..
C STAIR DETERMINES THE COEFFICIENTS OF THE FOURTH DEGREE
C POLYNOMIAL F(X) = ( ( (AX+B) X+C) X+D) X+E SUCH THAT F(X) IS
C TWICE DIFFERENT-TABLE ACROSS HISTOGRAM INTERVAL EDGES
C MATCHES IN VALUE AT THE INTERVAL EDGES, AND SUCH THAT
C THE INTEGRAL OF F(X)DX = THE HISTOGRAM INTERVAL HEIGHT
C TIMES THE INTERVAL WIDTH (DELX) . THE CROSSOVER POINTS
C (THE VALUES OF F(X) AT THE EDGES BETWEEN TWO HISTOGRAM
C INTERVALS) ARE THE KNOWNS . STAIR SOLVES FOR THE VALUES
C OF F' (X) AT THE EDGES GIVEN THE BOUNDARY CONDITIONS OF
C F' (X) AT THE TWO ENDS OF EACH STAIR EVALUATION. HISFIT
C STEPS THROUGH THE HISTOGRAM IN ONE PASS, BREAKING THE
C HISTOGRAM INTO STAIR EVALUATIONS OF 1 OR MORE INTERVALS
C NOTE THAT THE CURVE DEFINED BY THE COEFFICIENTS IS ONLY*
C ONCE DIFFERENTIABLE AT EDGES BETWEEN STAIR EVALUATIONS
C STAIR EVALUATIONS MAY NOT CROSS POINTS WHERE F' (X) IS
C KNOWN OR FIXED E.G. ZERO POINTS (DY/DX =0), OR FORCE
C FITS (WHERE UNRESTRAINED STAIR FITS RESULT IN FUNCTIONS
C WITH NEGATIVE VALUES WHICH CORRESPONDS TO NO PHYSICAL
C REALITY) . AT THESE EDGES, THE CURRENT STAIR EVALUATION
C IS TERMINATED AND A NEW STAIR EVALUATION STARTED IF
C THE RATIO OF ADJACENT HISTOGRAM VALUES IS LESS THAN 5/1
C A CROSSOVER POINT IS PICKED ACCORDING TO THE HEURISTIC-
C Y = (RATIO ** 0. 50 )M SMALLER VALUE)
r !!u?2S .;°01
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
LOOK FOR NEXT NON ZERO H
WHILE ((H(INDEX) .LE. 0.0) .AND. (INDEX .LT. N) )
90 IF ((H(INDEX) .GT. 0.0) .OR. {INDEX .GE. N) )
1 GO TO 100
INDEX - INDEX + 1
GO TO 90
100 CONTINUE
START NEW STAIR EVALUATION
STARTY = INDEX
GOTO BOTTOM OF LOOP
GO TO 230
IT IS GUARANTEED THAT H(INDEX-l) AND H( INDEX) ARE . GT . 0.0
110 CONTINUE
ELSE
HRATIO = H( INDEX) / H(INDEX-l)
EXPONE= 0.50
IF (HRATIO .GE. 1.0)
IF (HRATIO .LT. 1.0) GO TO 160
THEN
BEGIN UP STEP
SIGNDY =1.0
SMALLV= H ( INDEX- 1)
IF ((INDEX .EQ. (MODE1I +1)) .AND. (MODE .EQ. 0))
IF ((INDEX .NE. (MODE1I + 1)) .OR. (MODE .NE. 0))
1 GO TO 120
THEN
EXPONE =0.57
GO TO 15 C
120 CONTINUE
ELSE
IF .NOT. ((INDEX .EQ. 2) .AND. (MODE .NE. 0))
IF ({INDEX .EQ. 2) .OR. (MODE .NE. 0)) GO TO 140
THEN
IF (HUNDEX-2) . EQ . 0.0)
IF (H(INDEX-2) .NE. 0.0) GO TO 130
THEN
EXPONE =0.57
130 CONTINUE
140 CONTINUE
150 CONTINUE
GO TO 200
END UP STEP
• M
M
• - - M
M
M
M
M
M
M
M
M
- - M
M
- - M
M
M
M
- - M
M
- - M
M
M
M
- - M
M
- - M
M
M
M
M
M
M
M
M
M
- - M
M
- - M
M
M
M
M
M
M
M
.M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
- - M
M
- - M
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
M-3
-------
160
C
C
C - -
CONTINUE
ELSE
C BEGIN DOWN STEP
C
C
C
C
170
C
C
C
180
190
C
Q _
C END
r*
C
200
C
C
C
210
220
C
C - - -
HRATIO = 1.0 / HRATIO
SIGNDY = -1.0
SMALLV= H( INDEX)
IF (INDEX .EQ. N)
IF (INDEX .NE. N) GO TO 170
THEN
EXPONE =0.57
GO TO 190
CONTINUE
ELSE
IF (H(INDEX+1) .EQ. 0.0)
IF (H(INDEX+1) .NE. 0.0) GO TO 180
THEN
EXPONE =0.57
CONTINUE
CONTINUE
DOWN STEP
CONTINUE
IF (HRATIO .LT. RATLIM)
IF (HRATIO .GE. RATLIM) GO TO 210
THEN
Y{ INDEX) = (HRATIO ** EXPONE) * SMALLV
GO TO 220
ELSE
CONTINUE
Y( INDEX) = FORRAT * SMALLV
DYDX( INDEX) = SIGNDY * FORCDY * (Y ( INDEX) / DELX)
STOPY = INDEX
CALL STAIR ( STARTY, STOPY, DELX, H, Y, DYDX, CF)
STARTY = INDEX
CONTINUE
C BOTTOM OF LOOP, EXAMINE NEXT INTERVAL
C------ __
C
230
240
C
C
C
C FOR
C
C
C
1
C
CONTINUE
INDEX = INDEX + 1
GO TO 80
CONTINUE
ENDWHILE (INDEX .LE. N) LOOP
_
THE FINAL SPLINE PORTION, CALL STAIR.
IF (STARTY .NE. (N+l)) .AND. (H(N) . NE 00)
IF ((STARTY .EQ. (N+l)) .OR. (H(N) . EQ 0 0))
GO TO 250
THEN
STOPY = N + 1
CALL STAIR (STARTY, STOPY, DELX, H, Y, DYDX, CF)
M 193
M 194
M 195
M 196
M 197
M 198
M 199
M 200
M 201
M 202
M 203
M 204
M 205
M 206
M 207
M 208
M 209
M 210
M21 i
£. ± ±.
M 212
MO 1 "3
£. ± O
M 214
M 215
M 216
M 217
M 218
M 219
M 220
M 221
M 222
M 223
M 224
M 225
M 226
M 227
M 228
M 229
M 230
M 231
M 232
M 233
M 234
M 235
M 236
M 237
M 238
M 239
M 240
M 241
M 242
M 243
M 244
M 245
M 246
- - - M 247
M 248
- - - M 249
M 250
M 251
M 252
M 253
M 254
M 255
M 256
M-4
-------
250 CONTINUE M 25?
IF (1 .GT. FIVEN) GO TO 270 M 258
DO 260 K * 1 , FIVEN M 259
COEFF(K) = CF(K) M 260
260 CONTINUE M 261
270 CONTINUE M 262
RETURN M 263
END M 264-
M-5
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
~~u^»v, j. j.,.,^ ^ ±nj.f\ XIXOAIM , IVOlUr , UtJjA, H. I.lJlUX.CF)
SAVE
TO HANDLE MORE THAN 16 HISTOGRAM INTERVALS (ASSUMING N IS tINT
THE DIMENSIONED VARIABLES BELOW MUST HAVE THE FOLLOWING DIMENS
H = N; Y,DYDX,A,B,C = N+l; CF = 5*N
SEE ALSO DIMENSION STATEMENT IN HISFIT
J.VJN t\(£.v)r D (/.v) f C(26), CF(125), Y(26). DYDX(26),
DOUBLE PRECISION A, B C R SI S2 Tl T2 Ul U2 VI
DOUBLE PRECISION Y, DYDX, CF ' ' ' '
REAL DELX, H
INTEGER K, KSTRT, KSTOP, KSTOP 1, Jl, J2
INTEGER KSTOP2, KDOWN, KSTRT1
KSTOP 1 = KSTOP - 1
COMPUTE COEFFICIENTS FOR
FK(X)=AK(X-XK)4 + BK (X-XK) 3 + CK (X-XK) 2 + DK (X-XK) +EK
STORE IN ARRAY CF AS:
CF 5*K =A; CF 5*K-1 =B; CF 5*K-2 =C-
CF 5*K-3 =D=YKP CF 5*K-4 =E=YK
CF 5*K-3 =D=YKP CF 5*K-4 =E=YK
FOR K=KSTRT TO KSTOP (WHERE KSTOP-KSTRT IS THE NUMBER
OF INTERVALS. )
KSTRT IS THE LEFT EDGE OF THE STARTING HISTOGRAM BAR
KSTOP IS THE RIGHT EDGE OF THE STOPPING HISTOGRAM BAR
IF (KSTRT .GT. KSTOP 1) GO TO 20
DO 10 K = KSTRT , KSTOP 1
CF(5*K-4)=Y(K)
10 CONTINUE
20 CONTINUE
SET UP AND SOLVE MATRIX
B (KSTRT) =0.0
C (KSTRT) =0.0
IF ( KSTRT .GT. KSTOP 1) GO TO 70
DO 60 K = KSTRT , KSTOP 1
J2=K+1
U2=1.0/(DELX)
A(K)=U2
V2=U2*U2
S2=20.0*V2*H(K)
T2=8.0*V2*(Y{K)+Y(J2))
IF (K.GT. KSTRT)
IF (K.LE. KSTRT) GO TO 50
THEN
Z=1.0/{3.0*{U1+U2)+U1*B{J1)>
B(K)= -U2*Z
R=S2-Sl-T2+Tlf4 .0* (V1-V2) *Y(K)
IF (K.EQ.KSTRT+1)
IF (K.NE.KSTRT+1) GO TO 30
THEN
R=R+U1 *DYDX (KSTRT)
30 CONTINUE
IF (K.EQ. KSTOP 1)
N
N
N
N
ERVALS ) N
IONS N
N
N
N
H(25) N
N
N
N
LV
N
N
N
N
N
N
N
N
L»
N
N
N
N
N
- - - N
N
N
N
N
- - - N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
1
2
3
4
5
6
8
9
10
11
1 O
L£
13
14
1 C
1 D
1 &
X D
17
18
19
20
21
22
23
•O A
^ 4
25
26
27
? Q
JL b
29
30
31
32
-3 -3
-3 J
-5 A
34
35
36
37
38
39
40
41
42
43
44
A C
4 D
46
47
48
49
50
51
52
53
54
55
C £
D b
57
C Q
O O
59
60
61
s- *\
62
63
64
N-l
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
IF (K.NE.KSTOP1) GO TO 40
THEN
R=R+U1*DYDX {KSTOP)
40 CONTINUE
C{K)=Z*(R+U1*C(J1))
50 CONTINUE
J1=K
U1=U2
V1=V2
S1=S2
T1=T2
60 CONTINUE
70 CONTINUE
BACK SUBSTITUTION
IF (KSTOP-KSTRT.GT.l)
IF (KSTOP-KSTRT.LE.l) GO TO 100
THEN
DYDX (KSTOP-1 ) =C (KSTOP-1)
KSTOPP=KSTOP-1
CF (5*KSTOPP-3) =DYDX(KSTOPP)
IF (KSTOP-KSTRT.GT.2)
IF (KSTOP-KSTRT.LE.2) GO TO 90
THEN
KSTOP2 = KSTOP - 2
KSTRT1 = KSTRT + 1
DO 80 K = KSTRT1 , KSTOP2
KDOWN = KSTRT1 + KSTOP 2 - K
DYDX (KDOWN) = C (KDOWN) - B (KDOWN) * DYDX (KDOWN+1 )
CF(5*KDOWN-3) = DYDX (KDOWN)
80 CONTINUE
90 CONTINUE
100 CONTINUE
CF ( 5 *KSTRT-3 ) =DYDX (KSTRT)
COMPUTE 2ND, 3RD, 4TH ORDER COEFFICIENTS
IF ( KSTRT .GT. KSTOP 1) GO TO 120
DO 110 K = KSTRT , KSTOP 1
J2=K+1
Z=A(K)
CF(5*K-2)= 1.5*Z*(-3.0*DYDX(K) + DYDX(J2) + Z* (-8 0*
1 Y(J2) - 12.0*Y(K) + 20.0*H(K)»
CF(5*K-1)= -4.0*Z*Z*(-1.5*DYDX(K) + DYDX(J2) + Z*(-7 0*
1 Y(J2) - 8.0*Y(K) +15.0*H(K)»
CF(5*K) = 5.0*Z*Z*Z*(0.5*(DYDX(J2)-DYDX(K)) - 3.0*Z*
1 (Y(J2) + Y(K) - 2.0*H(K) ))
110 CONTINUE
120 CONTINUE
RETURN
END
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
- - N
- - N
N
- - N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
- - N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
N
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
i A /"\
1 U U
102
103
104
105
106
107
108
109
110
111
110
-LIZ
113
114
115
116
117
118
X X VJ
119
u
121
122-
N-2
-------
SUBROUTINE PHOT
SAVE ° 1
C 02
C **** RATE CONSTANT CALCULATIONS FOR FIRST ORDER PHOTOCHEMICAL 0 4
REACTIONS j!
C REF: SCHERE AND DEMERJIAN (1977) 06
W
COMMON /SUNLIT/ Z(10),RTCON(10),LAM1,INC,SLA,SLO,TZ,IY,IM, ID, 0 8
1 ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24), 0 9
rnMMOM /ou,vrnM/ ^!^)'K{24)'JSTRT'JSTOP'SPEC,MNLM,MXLM,MAXL,MAXJ 0 10
COMMON /PHOTON/ CF(72,20),P(24,20),IPH(20),IP,RFCT(20),PP(10,20), 0 11
1 IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF(125,10) 0 12
2 IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300) 0 13
TSTD=TIME
IF (L.EQ.l) CALL SPLNA (MAXZ,Z,RTCON,2,D,C,W)
IF (L.GT.l) CALL SPLNA (10,Z,PP(1,L),2,D,C,W) 0
u
COMMON /PHTCHR/ ISPDP(IO) ~
CHARACTERS ISPDP ^
INTEGER SPEC ° 13D
DIMENSION D(2), C(72), W(72), V(5), TMS(25) n JR
DATA D/0.,C)./ n !c
C 016
IEND=24 ° 17
NTM=IEND ' 0 l8
TIME=JSTRT
c D° 10 H-lrlEND °Q H
C **** CALL SUBROUTINE TO COMPUTE ZENITH ANGLES FROM TIME OF DAY 0 23
XC=0.0 ° 24
0 25
IF (TSTD.LT.O.) TSTD=TSTD+2400. 0 91
CALL SOLAR (SLA,SLO,TZ,IY,IM,ID,TSTD,XC,5) O 7fl
ITIME(II)=TIME n
XZ(II)=90.-XC 0 29
TIME=CLOCK(TIME,IINC) Q 3"
0 32
10 CONTINUE ' 0 33
0 34
DO 30 L=l,IP ° 35
ISTRT=(MNLM-LAM1)/INC+1 ? ^
ISTOP=(MXLM-LAM1)/1NC+1 ? 3]
C U 38
C **** f!AT.T. P"TPCT cnnorinT'Txir' 1-1^0 ^m TI-FT-, -r,, .
50
0
0
c CALL FIRST SUBROUTINE FOR SPLINE INTERPOLATION OF RATE CONSO 40
DO 20 11 = 1, __
V(1)=XZ(II) ° 44
P(II,L)=0. ° A5
IF (V(l).GT.90.0) GO TO 20 2 ?!
C 047
C **** CALL SECOND SUBROUTINE IN SPLINE INTERPOLATION -SCHEME 0 49
IF (L.EQ.l) CALL SPLNB (MAXZ,Z,RTCON,C,V) O S?
IF (L.GT.l) CALL SPLNB (10, Z, PP (1, L) , C, V) n l->
P(II,L)=AMAX1(0.0,V(2) ) :( ^
20 CONTINUE ° 53
C 0 54
30 CONTINUE ° 55
C DETERMINE TIME OF SOLAR NOON ° 56
C O 57
IZMN=IEND ° 58
XZEM=9999. ° 59
0 60
0-1
-------
DO 40 I=1,IEND 0 gl
IF (XZ(I).GE.XZEM) GO TO 40 0 62
XZEM=XZ(I) 0 63
IZMN-I 0 64
40 CONTINUE 0 65
I=IZMN 0 66
50 TIME-ITIME(I-l) 0 67
XA-XZ(I-l) 0 6Q
DO 60 1=1,60 0 69
SPECIE=TIME 0 7Q
TIME=CLOCK{TIMEf1) 0 71
TSTD=TIME 0 72
IF (TSTD.LT.O.) TSTD=TSTD+2400. n T\
XB=XA 0 74
CALL SOLAR (SLA,SLO,TZ,IY, IM, ID, TSTD,XC,5) 0 75
XA=90.-XC 0 ?6
IF (XA.GT.XB) GO TO 70 0 77
60 CONTINUE 0 7Q
70 DO 80 1=1,IEND 0 79
TMS(I)=60.*FLOAT(I-1) 0 go
80 CONTINUE 0 gl
DO 100 L=1,IP 0 32
DO 90 1=2,IEND 0 83
NMM=IEND+2-I 0 Q4
IF (P(NMM-1,L).GT.O.) GO TO 100 0 85
90 CONTINUE 0 Q6
100 CALL SPLNA (NMM,TMS,P(1,L),2,D,CF(1, L),W) 0 87
RETURN 0 Q8
END
0-2
-------
SUBROUTINE SOLAR {SLA,SLO,TZ,IY,IM,ID,TIME,D,NV)
SAVE
LATITUDE (DEC) SOUTH = MINUS
LONGITUDE (DEC) EAST = MINUS
TIME ZONE
ALSO INCLUDES FRACTION IF LOCAL TIME IS NOT
STANDARD MERIDIAN TIME. E.G. POONA, INDIA 5.5
YEAR
MONTH
AY
LOCAL STANDARD TIME IN HOURS AND MINUTES.
c***
c***
c***
c***
c***
c***
c***
c***
c***
c***
c***
c***
c***
c***
c* **
c***
c***
c***
c* * *
c***
c* * *
SLA.. .
SLO. . .
TZ. ..
IY. .
IM. .
ID. .
TIME. .
D.. R
NV. .
0 ( NV
Y
M
D
E
V
1
2
3
4
5
6
STANDARD TIME **
1 30 PM = 1330
RETURNED VALUE
VALUE TO BE RETURNED, SELECTED AS FOLLOWS
( 7.
DECLINATION (DEC.)
EQUATION OF TIME ADJUSTMENT (HRS )
TRUE SOLAR TIME (HRS.)
HOUR ANGLE (DEC.)
SOLAR ELEVATION (DEC.)
OPTICAL AIRMASS
OTHERWISE, D = 9999.
10
20
DIMENSION MD(ll)
DATA MD/31,29,31,30,31,30, 2*31, 30, 31,307
DATA A,B,C,SIGA/0.15,3.885,1.253,279.93487
RAD=572957,,75913E-4
SDEC=39784.988432E-5
RE=1.
IF (SLO.LT.O.) RE=-1.
KZ=TZ
TC=(TZ-FLOAT(KZ))*RE
TZZ=FLOAT(KZ)*RE
SLB=SLA/RAD
K=ID
TIMH=TIME/100.
I=TIMH
TIMLOC=(TIMH-FLOAT(I))70.6+FLOAT(I)+TC
IMC=IM-1
IF (IMC.LT.l) GO TO 20
DO 10 1=1,IMC .
K=K+MD(I)
LEAP=1
NL=MOD(IY,4)
IF (NL.LT.l) LEAP=2
SMER=TZZ*15.
TK=((SMER-SLO)*4.)/60.
KR=1
IF (K.GE.61.AND.LEAP.LT.2) KR=2
DAD=(TIMLOC+TZZ)724.
DAD=DAD+FLOAT(K-KR)
DF=DAD*360.7365.242
DE=DF/RAD
DESIN=SIN(DE)
DECOS=COS(DS)
DESIN2=SIN(DE*2.)
DECOS2=COS (DE*2.)
SIG=SIG/RAD
DECSIN=SDEC*SIN(SIG)
EFFDEC=ASIN(DECSIN)
IF (NV.NE.l) GO TO 30
D=EFFDEC*RAD
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
P
.00162*P
P
P
P
P
P
P
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
P-l
-------
RETURN p 65
30 EQT=0.12357*DESIN-0.004289*DECOS+0.153809*DESIN2+0.060783*DECOS2 P 66
IF (NV.NE.,2) GO TO 40 p 67
D=EQT p 6Q
RETURN p 6g
40 TST=TK+TIMLOC-EQT p 70
IF (NV.NE.3) GO TO 50 p 71
D=TST . p 72
IF (D.LT.O.) D=D+24. ' p 73
IF (D.GE.24.) D=D-24. p 74
RETURN p ?5
50 HRANGL=ABS(TST-12.)*15. p 76
IF (NV.NE.4) GO TO 60 P 77
D=HRANGL p 7g
RETURN p 79
60 HRANGL=HRANGL/RAD p 8Q
SOLSIN=DECSIN*SIN(SLB)+COS(EFFDEC)*COS(SLB)*COS(HRANGL) P 81
SOLEL=ASIN(SOLSIN>*RAD P 82
IF (NV.NE.5) GO TO 70 P 83
D=SOLEL p 84
RETURN p 85
70 IF (NV.NE.6) GO TO 80 p Q6
IF (SOLEL.LE.O.) GO TO 80 P 87
TK=SOLEL+B p 8fi
E=1./TK**C p 89
D=1./(A*E+SOLSIN) p 90
RETURN p gi
80 D=9999. p 92
RETURN p q!;
END P 94-
P-2
-------
C
C
C
C
C
C
C
C
C
C
C
C
C
10
20
30
40
50
— •" *"•»•— w j. J.1..4-! *jt -uni-x \in,y\, i,U,U,^,WJ
SAVE
DIMENSION X(24), Y(24), D(2), C(72), W(72)
OVER THE INTERVAL X(I) TO X(I+1), THE INTERPOLATING
POLYNOMIAIi
Y=Y(I)+A(I)*Z+B(I)*Z**2+E(I)*Z**3
WHERE Z=(X-X(I))/(X(I+1)-X(I))
Q
Q
Q
Q
Q
Q
n
IS USED. THE COEFFICIENTS A(I),B(I) AND E(I) ARE COMPUTED Q
BY SPLNA AND STORED IN LOCATIONS C (3*1-2) , C (3*1-1) AND O
C(3*I) RESPECTIVELY. n
WHILE WORKING IN THE ITH INTERVAL, THE VARIABLE Q WILL
REPRESENT Q=X(I+1) - X(I), AND Y(I) WILL REPRESENT
Q=X(2)-X(1)
YI=Y(2)-Y(1)
IF (J.EQ.2) GO TO 10
IF THE FIRST DERIVATIVE AT THE END POINTS IS GIVEN
A(l) IS KNOWN, AND THE SECOND EQUATION BECOMES
MERELY B(1)+E(1)=YI - Q*D(1).
C(1)=Q*D(1)
C(2)=1.0
W(2)=YI-C(1)
GO TO 20
IF THE SECOND DERIVATIVE AT THE END POINTS IS GIVEN
B(l) IS KNOWN, THE SECOND EQUATION BECOMES
A(1)+E(1)=YI-0.5*Q*Q*D{1) . DURING THE SOLUTION OF
THE 3N-4 EQUATIONS, Al WILL BE KEPT IN CELL C(2)
INSTEAD OF C(l) TO RETAIN THE TRIDIAGONAL FORM OF THE
COEFFICIENT MATRIX.
C(2)=0.0
W(2)=0.5*Q*Q*D(1)
M=N-2
IF (M.LE.O) GO TO 40
UPPER TRIANGULARIZATION OF THE TRIDIAGONAL SYSTEM OF
EQUATIONS FOR THE COEFFICIENT MATRIX FOLLOWS—
DO 30 1=1, M
AI=Q
0=X (T+?\ -y t r + 1 \
H=AI/Q
C(3*I)=-H/(2.0-C(3*I-1))
W(3*I)=(-YI-W(3*I-1))/(2.0-C{3*I-1))
C(3*I+1)=-H*H/(H-C(3*I))
W(3*I+1)=(YI-W(3*I))/(H-C(3*I))
C(3*I+2)=1.0/(1.0-C(3*I+1) )
W(3*I+2)=(YI-W(3*I+1))/(1.0-C(3*I+1))
E(N-l) IS DETERMINED DIRECTLY FROM THE LAST EQUATION
OBTAINED ABOVE, AND THE FIRST OR SECOND DERIVATIVE
VALUE GIVEN AT THE END POINT.
IF (J.EQ.l) GO TO 50
C(3*N-3)=(Q*Q*D(2)/2.0-W(3*N-4))/(3.0-C(3*N-4))
GO TO 60
C(3*N-3) = (Q*D(2)-YI-W(3*N-4) ) / (2 . 0-C (3 *N-4 ) )
tt
Q
K
Q
Q
Q
Q
Q
Q
Q
Q
o
w
o
»t
Q
Q
Q
Q
Q
Q
Q
Q
Q
Xft
o
w
o
V
Q
Q
— Q
Q
Q
Q
— Q
Q
Q
— Q
Q
Q
Q
Q
Q
Q
Q
--Q
Q
Q
Q
-Q
Q
Q
Q
Q
1
2
3
4
5
6
7
f
g
w
9
10
1 1
X J.
12
13
14
15
16
17
18
19
20
2 1
&• J.
22
23
24
25
26
27
28
29
30
31
32
33
•»J *J
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
A (\
4 9
C A
J U
c -s
51
53
C A
54
55
56
57
58
59
60
61
62
63
64
Q-l
-------
60 M=3*N-6 Q 65
IF (M.LE.O) GO TO 80 Q 66
C Q g 7
C BACK SOLUTION FOR ALL COEFFICENTS EXCEPT Q 68
C A(l) AND B(l) FOLLOWS— Q 69
C 7
DO 70 11=1,M 0 71
I=M-II+3 Q 72
70 C(I)=W(I)-C{I)*C(I+1) Q 73
80 IF (J.EQ.l) GO TO 90 Q 74
c Q 75
C IF THE SECOND DERIVATIVE IS GIVEN AT THE END POINTS, Q 76
C A(l) CAN NOW BE COMPUTED FROM THE KNOWN VALUES OF Q 77
C BCD AND E(l). THEN A(l) AND B{1) ARE PUT INTO THEIR Q 78
C PROPER PLACES IN THE C ARRAY. Q 79
C Q Q Q
C(1)=Y(2)-Y(1)-W(2)-C(3) 0 ai
C(2)=W(2) 0 82
RETURN Q Q3
90 C(2)=W(2)-C{3) 0 84
RETURN Q 85
END Q 86-
Q-2
-------
c
c
c
c
c
c
c
c
c
SUBROUTINE SPLNB (N,X,Y,C,V)
SAVE
DIMENSION X(24), Y(24), C(72), V(5)
V(5)=2.0
LIM=N-1
DETERMINE IN WHICH INTERVAL THE INDEPENDENT
VARIABLE, V(l), LIES.
DO 10 1=2, LIM
IF (V(l) .LT.X(I)) GO TO 20
10 CONTINUE
I=N
IF (V(l) .GT.X(N) ) V(5)=3.0
GO TO 30
20 IF (V(l) .LT.X(l)) V{5)=1.0
Q IS THE SIZE OF THE INTERVAL CONTAINING V(l).
Z IS A LINEAR TRANSFORMATION OF THE INTERVAL
ONTO (0,1) AND IS THE VARIABLE FOR WHICH
THE COEFFICIENTS WERE COMPUTED BY SPLNA.
30 Q=X(I)-X(I-1)
V (2) =((Z*C (3*1-3 )+C (3*1-4 ))*Z+C (3*1-5) )*Z+Y(I-1)
V(3)=((3.*Z*C(3*I-3)+2.0*C(3*I-4))*Z+C(3*I-5))/Q
V(4)=(6.*Z*C(3*I-3)+2.0*C(3*I-4))/(Q*Q)
RETURN
END
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
2
0
J
4
5
6
7
8
9
10
11
12
13
1 A
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30-
R-l
-------
FUNCTION CLOCK (T1,1INC) SI
SAVE c o
r
S3
C **** ADD A TIME IN MINUTES TO A 2400 HOUR TIME AND RETURN A 24DOS 4
C **** HOUR TIME c =
C
S 6
T2-IINC s 7
I100=INT(T1/100.) s g
T3=Tl-100.0*FLOAT(I100)-(-T2 s q
I100=I100+INT(T3/(50.) s 1Q
CLOCK=FLOAT(1100)*100.0+T3-60.0*FLOAT(INT(T3/60.0)) s 11
RETURN o 10
EN° s \l-
S-l
-------
SUBROUTINE SUNTIM
SAVE
•*
: FIND SUNRISE AND SUNSET VALUES
•H
COMMON /SUNLIT/ Z(10), RTCON(10),LAM1,INC,SLA,SLO,TZ,IY,IM,ID
1 ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24),XZ
2' , KJ{24),JSTRT,JSTOP,PSPEC,MNLM,MXLM,MAXL,MAXJ
COMMON /MIXING/ DSTRT,DEND,AMC(5),BMC(5),CMC(5),FD(6),FG(6),
1 AMXX(26),DL,TTMAX,SSRISE,SRMIN,DELH, TOIL,NMXX,
2 HEIGHT,SSET,SRISE
INTEGER PSPEC
*
: FIND SUNRISE
T=0.
10 CALL SOLAR(SLA,SLO,TZ,IY,IM,ID,T,D,5)
IF (D.GE.0.000001) GO TO 20
T=CLOCK(Tf 60)
GO TO 10
: FIND HALF HOUR VALUE
20 T=T-150.
CALL SOLAR (SLA, SLO,, TZ, IY, IM, ID, T, D, 5)
IF {D.GE.0.000001) GO TO 40
30 T=CLOCK(T,1)
CALL SOLAR(SLA,SLO,TZ,IY,IM,ID,T,D,5)
IF (D.GE.0.000001) GO TO 60
GO TO 30
40 T=T-30.
50 T=CLOCK(T,1)
CALL SOLAR (SLA, SLO, TZ, IY, IM, ID, T, D, 5)
IF (D.LT.0.000001) GO TO 60
GO TO 50
60 SRISE=T
FIND SUNSET
T=1200.
70 CALL SOLAR(SLA,SLO,TZ,IY,IM,ID,T,D,5)
IF (D.LT.0.000001) GO TO 80
T=CLOCK(T,60)
GO TO 70
FIND HALF HOUR VALUE
80 T=T-150.
CALL SOLAR(SLA,SLO,TZ,IY,IM,ID,T,D,5)
IF (D.LT.0.000001) GO TO 100
90 T=CLOCK(T,1)
CALL SOLAR (SLA, SLO, TZ, IY, IM, ID, T, D, 5)
IF (D.LT.0.000001) GO TO 120
GO TO 90
100 T=T-30.
110 T=CLOCK(T,1)
CALL SOLAR(SLA,SLO,TZ,IY,IM, ID,T,D,5)
IF (D.GE.O.000001) GO TO 120
GO TO 110
T
T
T
T
T
T
(24)T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
1
2
3
4
5
6
7
8
9
9A
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
T-l
-------
C T 64
120 SSET=T T 65
C T 66
RETURN T 67
END T 6Q.
T-2
-------
SUBROUTINE EKCALC
SAVE
(X)
THIS SUBROUTINE PERFORMS VOC CONTROL REQUIREMENTS AS OUTLINED
™,IIP 1981 EPA GUIDELINES ON THE USE OF CITY-SPECIFIC EKMA THIS
ROUTINE ALSO INCLUDES PROCEDURES DESCRIBED IN APPENDIX B OF THE
1981 GUIDELINES.
THIS ROUTINE WAS MODIFIED OCT 1986 BY HH/SAI TO:
ALLOW FOR TWO OCCURANCES OF OZONE ON A NMOC/NOX LINE
TO SKIP BASE YEAR CALCULATION IF LOCATION IS KNOWN
MODIFIED JUNE 1987 HH/SAI TO:
ALLOW FOR CO EMISSION CREDITS
COMMON /CALC/ NR,KR(200,12),A(200),S(200),R(200),ITYPE(200),IA(60)U
rnMMOM /™™T /JA(800)''DILUT< TEMP, ERR, START, STOPP, TPRNT, TSTEP, ZENI U
COMMON /CNTRL/ SIG,SIGMA,INFO,NPTO,TSRT,DTIM,Zl,Z2,DCON,EHC EXN
1 FLST,TLST '
COMMON /SPEC/ NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2)
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN,
2 XNAL,NOZ,FENX(2),C(61),NI,KOZ(5)
COMMON /SUNLIT/ Z(10),RTCON(10),LAM1,INC,SLA,SLO,TZ,IY,IM ID
ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24),XZ(24)U
PHMMOM
COMMON
,KKK(24),JSTRT,JSTOP,PSPEC,MNLM,MXLM,MAXL,MAXJ
CF(72,20),P(24,20),IPH(20),IP,RFCT(20),PP(10,20)
- IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF(125,10),
2 IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300)
COMMON /ZENITH/ IPZ,ZDEF (10,20),IPHZ(20),IZENP
COMMON /EMIS/ NEM,ISP,ESTRT(5),ESTOP, ESLP, IEMLS(5),EOSLP(5)
rnMMAM /MTV/ EMO(26'5>'ECI<5),EM(26),EC(125),ECO(125,5)
COMMON /MIX/ NMIX,AMIX(26),STRM,STOPM,DC(104)
COMMON /MIXING/ DSTRT,DEND,AMC(5),BMC(5),CMC(5),FD(6),FG(6)
1 AMXX(26),DL, TTMAX, SSRISE,SRMIN,DELH,TOIL,NMXX,
2 HEIGHT,SSET,SRISE
COMMON /TEMPER/ TEMEND,NTEMP,QM(30)
COMMON /FRPLOT/ SAVCON(80,5),SAVTIM(80),NTSV,INOW
COMMON /INOUT/ IN,IOUT,ITAPE,IALN,IALL,INHH,IOZC
ITTL(36)
HC,XN,NL,OZP(20),OZN(11,11,5),MR,LS,HCS,XNS
SC(200,12),ISC(200,3)
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02, IINO, 1103
IIH20,JPLUS
COMMON /TITL/
COMMON
COMMON /NEED I/
COMMON /HOUR/ OZM(5),NGO,TTM,TMY(5)
COMMON /PLTVEC/ HCT(20),OT(20),NT,OHC,HCG,PLTGRD,OXN,XNG,HC1,XN1
fTiT^fJr\T-xi'in ,«»»•«.«»-.._. * * F
COMMON /ALOFT/
COMMON /WLB1/
rn ™ ,
COMMON /CRED/
rnMMOM
COMMON
TICZ,DIGZ,CHRZ,IPLDEV
IALFT,CALFT(10),LOCALF(10)
FCTR,DIST,CHRSIZ,NNCHR,OZBL
FBK{20),FBKAL(5),HCBK,XNBK,OZBK,H20BK
ICR,ISPCR,SPCR69(3),SURFCR(3),ALOFCR(3)
REDCR(3),FSRFCR(3),FALFCR{3),COSFBK,COAFBK
NBEM,IBSP,WTMOL(5),ACB4(5),SURFBI (5),
ALOFBI(5),REDBI(5),FSRFBI(5),FALFBI(5),BEMO(26,5)
BECO(126,5),CBTOT(5),IBLS(5),BESTOP,BFRAC(20,5)
COMMON /ALFCHR/ ISPAL(IO)
COMMON /BIOCHR/ IISOP, IBEMSP(5)
COMMON /CRECHR/ ISPNCR(3)
COMMON /EMSCHR/ EMSP(5)
COMMON /NEED1C/ IBZA
COMMON /PHTCHR/ ISPDP(IO)
U
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
))U
[ U
u
u
u
u
u
u
:)U
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
35A
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
53A
53B
53C
53D
53E
53F
53G
53H
531
53J
U-l
-------
COMMON /CALCHR/ SPECIS(61)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER*4 ISPAL, ISPDP, ISPNCR, IBEMSP
CHARACTER*4 SPECIS, HCSPEC, PLSP, IISOP, EMSP, REACT
CHARACTERM IBLANK,MBLANK, IIHC,IINX, IICO,IIN02,IINO, 1103,
1 IIH20,IBZA,JPLUS
DIMENSION X(7),OZOUT(11),OZV(10),HCTMP(10),ANXTMP(10),OZSORT(10),
HCSORT(IO),ANSORT(10),YP(20),TM(20),SCRSV(3),ALCRSV(3),
SPCRSV(3),SBIOSV(5),ABIOSV(5),EM1(26)
1
2
FOZS =
FOZA =
FOCS =
FOCA =
FXNS =
FXNA =
CFHC =
HI
S!
OZIN
OZAL
HCIN
HCAL
XNIN
XNAL
0.0
CFNOX =0.0
NPTO=0
INFO=-1
DOZ =0.12
AOZ=0.12
HCTNOX=1.
NTRYS = 8
ACCU = 0.0005
RNMOC=0.60
BNMOC = HCBK
IF (ABS(X(1))
IF (ABS(X(2))
IF (X(4) .GT.
.NE. 0.0) DOZ = ABS(X(1))
.NE. 0.0) HCTNOX = ABS(X(2))
0.0) READ (IN,400) FOZS,FOZA,FOCS,FOCAfFXNS,FXNA
READ (IN,400) HCMEAS,ANMEAS,ALREHC,ALRENX,HCLV
REDNOX = 1.0 + X(3)*.01
DO SOME PRELIMINARY CALCULATIONS
OZINSV=OZIN
OZALSV=OZAL
HCINSV=HCIN
HCALSV=HCAL
XNINSV = XNIN
XNALSV=XNAL
IF (ICR.LE.O) GO TO 15
DO 10 J=1,ICR
SCRSV(J)=SURFCR(J)
ALCRSV(J)=ALOFCR(J)
SPCRSV(J)=SPCR69(J)
10 CONTINUE
15 IF (IBSP.LE.O) GO TO 20
DO 16 J=l,IBSP
SBIOSV(J)=SURFBI(J)
ABIOSV(J)=ALOFBI(J)
16 CONTINUE
20 REDNX1=X(3)
ESTIMATE FUTURE NMOC IF NOT GIVEN
RNMOC1=FOCA
IF (FOCA.GE.O.) GO TO 30
IF (FOCA.GT. (-99.) ) RNMOC=ABS(FOCA)*0.01
0
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
53K
53L
53M
53N
530
53P
53Q
53R
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
96A
96B
96C
96D
96E
97
98
99
100
101
102
103
104
U-2
-------
RNMOC1 = (HCALSV - BNMOC)*RNMOC + BNMOC
ESTIMATE FUTURE NMOC IN THE SURFACE LAYER
30 RNMOC2 = (HCINSV - BNMOC)*RNMOC + BNMOC
IF (FOCS.GE.O.) RNMOC2=FOCS
IF (FOCS.LT.(-0.00001)) CFHC=ABS(FOCS)
IF (FXNS.LT.(-0.00001)) CFNOX=ABS(FXNS)
CHCNOX = HCTNOXM1.-CFHO/U.-CFNOX)
ROZ1=FOZA
IF (FOZA.GE.O.) GO TO 50
USE THE OZONE TRANSPORT CURVES TO ESTIMATE FUTURE OZONE IF
FUTURE OZONE IS NEGATIVE (SEE 1981 CITY-SPECIFIC GUIDELINES P. 54)
ROZ1=OZALSV
IF (OZALSV .LE. 0.04) GO TO 50
IF INPUTED FUTURE OZONE VALUE IS LESS -100 THEN USE
DASH LINE OF OZONE CURVE
IF (FOZA.LT.(-99.)) GO TO 40
ROZ1 = 0.7*OZALSV + 0.012
IF (OZALSV .GT. 0..1543) ROZ1 = 0 12
GO TO 50
40 ROZ1 = 0.9*OZALSV + 0.004
IF (OZALSV .GT. 0.129) ROZ1 = 0.12
REPEAT FUTURE OZONE ESTIMATE FOR SURFACE LAYER
50 ROZ2=FOZS
IF (FOZS.GE.O.) GO TO 70
ROZ2=OZINSV
IF (OZINSV .LE. 0.04) GO TO 70
IF (FOZS.LT. (-99.)) GO TO 60
ROZ2 = 0.7*OZINSV -I- 0.012
IF (OZINSV .GT. 0.1543) ROZ2 = 0 12
GO TO 70
60 ROZ2 = 0.9*OZINSV + 0.004
IF {OZINSV .GT. 0.129) ROZ2 =0.12
70 HC1 = -99.0
HC2 = 1.0
OXN2 = HC2/HCTNOX
IFL=0
WRITE (IOUT,410) DOZ,HCTNOX,REDNX1,ROZ1,RNMOC1,FXNA
IF (ICR.LE.O) GO TO 85
DO 80 J=1,ICR
WRITE (IOUT,450) ISPNCR(J),ISPNCR(J),REDCR(J),
1 ISPNCR (J),FALFCR(J'i
80 CONTINUE
85 IF (IBSP.LE.O) GO TO 90
DO 86 J=l,IBSP
WRITE (IOUT,451) IBEMSP{J),IBEMSP(J),REDBI(J),IBEMSP(J)
1FSRFBI(J),IBEMSP(J),FALFBI(J)
86 CONTINUE
90 CONTINUE
ITE {IOUT'420> CFHC,CFNOX,
ROZ2,RNMOC2,FXNS,PLSP(1)
PLSP(l) T'°'> WRITE (I°UT'/340) ROZ2'RNM°C2,FXNS,ALREHC,ALRENX,
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
156A
156B
156C
156D
156E
157
158
159
160
161
162
163
U-3
-------
IF BASE YEAR PRECURSOR TRANSPORT IS LESS THAN BACKGROUND
THEN SKIP APPENDIX B PROCEDURES
IF (X(2) .LT.O.) GO TO 270
IF (HCIN .LE. HCBK) GO TO 150
IF (CFHC.LE.O. .AND.CFNOX.LE.O.) GO TO 150
DO APPENDIX B (STEP 3)
HCIN =0.0
DO 110 1=1, NTRYS
CALL SIM (HC2,OXN2,ZN2,10)
OZV(I)=ZN2
HCTMP (I)=HC2
ANXTMP ( I ) =HC2
DIFF = ABS(ZN2-DOZ)/DOZ
IF (DIFF .LE. ACCU) GO TO 120
IF (HC1 .NE. (-99.0)) GO TO 100
HC1=HC2
ZN1=ZN2
HC2=HC1*DOZ/ZN2
OXN2=HC2/HCTNOX
GO TO 110
100 B=(DOZ-ZN1) * (HC2-HC1)/ (ZN2-ZN1 ) -l-HCl •
CHECK FOR REVERSING TREND. FIX SO WE DO NOT LOOP
IF (ZN2.GT.ZN1 .AND. HC2.LT.HC1 .AND. ZN2.GT.DOZ)
1 B = DOZ*HC2/ZN2
IF (B.LT.O.) B=HC2/2.0
HC1=HC2
ZN1=ZN2
HC2=B
OXN2=HC2/HCTNOX
110 CONTINUE
IFL=1
GO TO 180
DO STEPS 4, 5, AND 6 (APPENDIX B)
120 HCIN = HC2*CFHC
XNIN = OXN2*CFNOX
HCTNOX = CHCNOX
HCl=-99.
RNMOC2 = (HCIN - BNMOC) *RNMOC + BNMOC
HC2 = OXN2*HCTNOX
IF (CFHC.LE.O. .AND.CFNOX.LE.O. ) GO TO 150
DO 140 J=1,ISP
IF (EMSP(J) .NE.IIHC.AND.EMSP(J) .NE.IINX) GO TO 140
IF (EMSP(J) .EQ.IIKC) CFX=CFHC
IF (EMSP(J) .EQ.IINX) CFX=CFNOX
IEM = ESTOP/ 60.
IF (NEM.GT.O) GO TO 131
DO 130 1=1, IEM
EMI ( I ) =EMO ( I , J) / ( 1 . -CFX)
130 CONTINUE
CALL EMISS(IEM,EM1,ECO(1, J) )
GO TO 140
131 IF (J.GT.l) GO TO 140
DO 132 1=1, NEM
EM1(I)=EM(I)/(1.-CFX)
132 CONTINUE
CALL EMISS (NEM, EMI, EC)
140 CONTINUE
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
206A
207
208
209
210
211
212
213
213A
213B
214
215
216
217
217A
217B
217C
217D
217E
217F
218
U-4
-------
c
C NOW DO BASE CASE CALCULATION JJ ?i?
C U 220
150 DO 170 1=1, NTRYS U 221
CALL SIM
-------
THERE IS A MAXIMUM ALONG NMOC/NOX
FIND THE LOCATIONS
DO 210 J=1,LHX
HCTMP(J)=HCSORT(J)
OZV{J)=OZSORT(J)
210 CONTINUE
HCTMP (MM )==HMX
OZV(MM)=OZHX
SX=-SIG*3.0
IF (MM.GT.2) SX=-SIG*60./(FLOAT(MM-2)**2)
220 CALL CURV1{MM,OZV,HCTMP,SP1,SP2,YP,TM,SX)
IT=1
HCML1=CURV2(DOZ,MM,OZV,HCTMP,YP,SX,IT)
IF {IT.GT.O) GO TO 230
SX=SX*10.
SX=AMAX1(--50.,SX)
GO TO 220
230 CONTINUE
NOW DO UPPER PORTION
MDIF=NTRYS-LHX
DO 240 J=1,MDIF
MJ=NTRYS-J
OZV(J)=OZSORT(MJ)
HCTMP{J)=HCSORT(MJ)
240 CONTINUE
OZV(MDIF+1)=OZHX
HCTMP(MDIF-t-l)=HMX
MDIF=MDIF+1
SX=-SIG*3.0
IF (MDIF.GT.2) SX=-SIG*60./(FLOAT(MDIF-2)**2)
250 CALL CURV1(MDIF,OZV,HCTMP,SP1,SP2,YP,TMfSX)
IT=1
HCML2=CURV2(DOZ,MDIF,OZVfHCTMP,YP,SX, IT)
IF (IT.GT.O) GO TO 260
SX=SX*10.
SX=AMAX1(--50.,SX)
GO TO 250
260 CONTINUE
SEE WHICH VALUE IS CLOSEST TO MEASURED NMOC AND NOX
XNM1=HCML1/HCTNOX
XNM2=HCML2/HCTNOX
HCD1=SQRT((HCML1-HCMEAS)**2 + (XNM1-ANMEAS)**2)
HCD2=SQRT{(HCML2-HCMEAS)**2 + (XNM2-ANMEAS)**2)
WRITE (IOUT,540) HCML1,XNM1,HCML2,XNM2,HCMEAS,ANMEAS,PLSP(1)
HC2=HCML1
OXN2=XNM1
IF (HCD2.LT.HCD1) HC2=HCML2
(HCD2.LT.HCD1) OXN2=XNM2
(HCMLl.LT.HCSORT(l).OR.HCML1.GT.HCSORT(NTRYS)) HC2=HCML2
(HCMLl.LT.HCSORT(l).OR.HCML1.GT.HCSORT(NTRYS)) OXN2=XNM2
(HCML2.LT.HCSORT(1).OR.HCML2.GT.HCSORT(NTRYS)) HC2=HCML1
IF (HCML2.LT.HCSORT(1).OR.HCML2.GT.HCSORT(NTRYS)) OXN2=XNM1
IF (HC2.LT.HCSORTU) .OR. HC2 . GT .HCSORT (NTRYS)') WRITE(IOUT,570)
(HC2.LT.HCSORT(1).OR.HC2.GT.HCSORT(NTRYS)) GO TO 330
(IFL.EQ.l) GO TO 120
IF
IF
IF
IF
IF
IF
IFL=3
GO TO
150
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
U-6
-------
FOUND IT. NOW DO FUTURE YEAR CALCULATION
270 IF (X(2).LT.O.) OXN2-ALRENX
IF (X(2).LT.O.) HC2-ALREHC
OXN1 « OXN2*REDNOX
HCORG = HC2
IF (X{6).LT.(-0.000001)) GO TO 330
HCAL=RNMOC1
HCIN=RNMOC2
OZAL=ROZ1
OZIN=ROZ2
IF (FOCS.GT. (-0.00001))
IF (FXNS.GE. (-0.00001))
IF (FXNA.GE.(-0.00001))
HCIN=FOCS
XNIN=FXNS
XNAL=FXNA
ALLOW FOR OTHER EMISSIONS CREDITS (ONLY FOR CO CURRENTLY)
IF (ICR.LE.O) GO TO 285
DO 280 J=1,ICR
SPCR69{J)=SPCR69(J)*(1.+REDCR(J)*0.01)
SURFCR(J)=FSRFCR(J)
ALOFCR(J)=FALFCR(J)
280 CONTINUE
285 IF (IBSP.LE.O) GO TO 290
DO 287 J=l;IBSP
SURFBI(J)=FSRFBI(J)
ALOFBI(J)=FALFBI(J)
DO 286 L=1,NBEM
EMI(L)=BEMO(L, J) * {1.+REDBI(J)*0.01)
286 CONTINUE
CALL EMISS (NBEM,EM1,BECO(1,J))
287 CONTINUE
290 CONTINUE
TAKE AN INITIAL GUESS AT VOC REDUCTION (50 PERCENT)
HC1=0.5*HC2
HC2 = 0.0
ZN2 = 0.0
OXN2 = OXN1
HC3 = 0.5
DO 310 1=1, NTRYS
11=1
CALL SIM (HC1,OXN1,ZN1,10)
DIFF = ABS(ZN1-AOZ)/AOZ
IF (DIFF .LE. ACCU) GO TO 320
IF (ZN1.GT.AOZ.AND.HC3.LE.O.) II=NTRYS+1
IF (ZN1.GT.AOZ.AND.HC3.LE.O.) GO TO 320
DELTA =1.0
IF (ZN1 .NE. ZN2) DELTA = (HC1 - HC2)/(ZN1 - ZN2)
IF ((ABS(AOZ-ZNl) .GT. ABS(AOZ-ZN2)) .AND I NE 1)
HC3 = HC1 + (AOZ - ZN1)*DELTA
ZN2 = ZN1
HC2 = HC1
HC1 = HC3
IF (HC1 .LT. 0.0) HC1 = 0.0
GO TO 310
HC1 = HC2 + (AOZ - ZN2)*DELTA
HC3 = HC1
IF (HC1 .LT. 0.0) HC1 = 0.0
300
310 CONTINUE
320 IF (II.GE.NTRYS) WRITE (IOUT,460) AOZ,I
U 347
U 348
U 349
U 350
U 351
U 352
U 353
U 354
U 355
U 356
U 357
U 358
U 359
U 360
U 361
U 362
U 363
U 364
U 365
U 366
U 367
U 368
U 369
U 370
U 370A
U 370B
U 370C
U 370D
U 370E
U 370F
U 370G
U 370H
U 3701
U 371
U 372
U 373
U 374
U 375
U 376
U 377
U 378
U 379
U 380
U 380A
U 381
U 382
U 383
U 383A
U 383B
U 384
U 385
GO TO 300 U 386
U 387
U 388
U 389
U 390
U 391
U 392
U 393
U 393A
U 394
U 395
U 396
U 397
U-7
-------
IF (II.GE.NTRYS) GO TO 330
REDUC = (HCORG - HC1)*100.0/HCORG
IF (REDUC.LE.90.) WRITE (IOUT,470) REDUC
IF (REDUC.GT.90.) WRITE (IOUT,560) REDUC
330 IF (ABS(X(6)).EQ.O.) GO TO 340
HC1=HCORG*(l.+HCLV*0.01)
WRITE (IOUT,480) HCLV,PLSP(1)
CALL SIM(HC1,OXN1,ZN1,10)
DO OZIPM-2 EKMA OPTION TO GENERATE CHANGE IN OZONE
340 IF (X(S).LE.O.) GO TO 360
THE FOLLOWING ALGORITHM WAS DEVELOPED BY EPA (GIPSON, 1984)
WRITE(IOUT,490)
WRITE(IOUT,500)
DELHC=10.0
DO 350 K=lrll
DELHC=DELHC-10.
HC2=HCORG*(l.O+DELHC/100.)
CALL SIM(HC2,OXN1,ZN,5)
DEL03=((ZN-DOZ)/DOZ)*100.
WRITE(IOUT,510) HC2,OXN1, ZN,DELHC,X(3),DEL03
OZOUT(K)=ZN
350 CONTINUE
IF (X(5).EQ.2) WRITE(IOZC,520) OZOUT
RESET VALUES FOR NEXT OPTION
360 CONTINUE
RESET EMISSIONS IF APPENDIX B WAS USED
IF (HCINSV.LE.HCBK.AND.XNIN.LE.XNBK) GO TO 380
IF (CFHC.LE.O..AND.CFNOX.LE.O.) GO TO 380
DO 370 J=1,ISP
IF (NEM.LT.O) CALL EMISS(IEM,EMO(1,J),ECO(1, J))
IF (NEM.GT.O) CALL EMISS(NEM,EM,EC)
370 CONTINUE
380 CONTINUE
NPTO=0
INFO=0
OZIN=OZINSV
OZAL=OZALSV
HCIN=HCINSV
HCAL=HCALSV
XNIN=XNINSV
XNAL=XNALSV
IF (ICR.LE.O) GO TO 395
DO 390 J=1,ICR
SPCR69(J)=SPCRSV(J)
SURFCR(J)=SCRSV(J)
ALOFCR(J)=ALCRSV(J)
390 CONTINUE
395 IF (IBSP.LE.O) RETURN
DO 396 J=l,IBSP
SURFBI(J)=SBIOSV(J)
ALOFBI(J)=ABIOSV(J)
CALL EMISS (NBEM,BEMO(1,J),BECO(1, J) }
396 CONTINUE
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
438A
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
454A
454B
454C
454D
454E
454F
U-8
-------
RETURN
C FORMAT STATEMENTS
400 FORMAT (7F10.5) U
410 FORMAT (1H1 // 40X,43HEKMA CALCULATIONS ARE PERFORMED TO ESTIMATU
' 38HSITE-SPECIFIC VOC CONTROL REQUIREMENTS // 1HO U
F10 3 4H PPM / i wn n
, F10 3 / ?HO 39X U
,F10 3 8H PERCENT/' 1HO U
' ,lll "X III / H^' U
,F10.3,5H PPMC / 1HO U
,F10 3 5H PPM )
,*iu.j,:>H PPM )
36HBASE YEAR OZONE
339X ,36HBASE YEAR NMOC/NOX
4 36HANTICIPATED CHANGE IN NOX
539X, 36HFUTURE OZONE TRANSPORTED ALOFT
639X, 36HFUTURE NMOC TRANSPORTED ALOFT
739X, 36HFUTURE NOX TRANSPORTED ALOFT
420 FORMAT (1HO,39X,
1 36HMEDIAN CONTRIBUTION FACTOR FOR NMOC ,F10.3 / 1HO,39X
2 36HMEDIAN CONTRIBUTION FACTOR FOR NOX
3 36HADJUSTED NMOC/NOX
430 FORMAT (1HO,39X,
1 36HFUTURE OZONE IN THE SURFACE LAYER
239X, 36HFUTURE NMOC IN THE SURFACE LAYER
339X, 36HFUTURE NOX IN THE SURFACE LAYER ,.,
4 ////1H1 ///,40X,36HTHE FOLLOWING SIMULATIONS WERE DONE /1HO
440 ™^ '
,F10.3 / 1HO 39X
,F10.3,4H PPM / 1HO U
, F10 . 3, 5H PPMC / 1HO U
,F10.3,5H PPM
1 36HFUTURE OZONE IN THE SURFACE LAYER ,F10.3,4H PPM / 1HO U
239X, 36HFUTURE NMOC IN THE SURFACE LAYER , F10 . 3, 5H PPMC / 1HO U
339X, 36HFUTURE NOX IN THE SURFACE LAYER F10.3 5H PPM / IRQ U
439X, 55HBASE YEAR NMOC AND NOX LOCATIONS ARE ALREADY DETERMINED/ '
j 1HU ,
639X, 36HBASE YEAR INITIAL NMOC LOCATION ,F10.3,5H PPMC / 1HO U
739X, 36HBASE YEAR NOX LOCATION F10 3 5H PPM
8 ////1H1 ///40X,36HTHE FOLLOWING SIMULATIONS WERE DONE./1HO '
9 15X,4HNMOC,17X,3HNOXf15X,5HRATIOf17X/A4,16Xf4HTIME) '
450 FORMAT ( 1HO, 39X, 37HEMISSION CREDITS WILL BE ALLOWED FOR A4/1HO
^ov^^nf TICIPATED CHANGE IN 'A4/10X,F10.3f8H PERCENT /1HO
239Xf7HFUTURE ,A4,25H TRANSPORTED ALOFT ,F10.3,4H PPM
451 FORMAT (1HO, 39X, 42HFUTURE BIOGENIC EMISSIONS WILL BE SET FOR
CHANGE IN 'A4f10X,F10.3,8H PERCENT
TRANSPORTED IN THE SURFACE LAYER,F10.3
,7HFUTURE ,A4,25H TRANSPORTED ALOFT
4F10.3,4H PPM ) '
460 FORMAT (1HO // 40X,,15HCOULD NOT FIND ,F10.4,10H OZONE IN
1 13, 6H TRYS //40X,34HCHECK INPUT CONDITIONS OR GENERATE
2 /40X,20HAN ISOPLETH DIAGRAM. )
470 FORMAT (1HO // 40X,27HVOC CONTROL REQUIREMENT IS ,F5.1,8H PERCENT) U
1"™ FOLLOWING SIMULATION WAS DONE WITH A ' U
PERCENT CHANGE IN NMOC. /1HO, n
/ *iiw f U
U
PPM DOES NOTU
OZONU
, . , ,
,'EKMA PREDICTED CHANGES IN OZONE')
490 FORMAT
500 FORMAT
1'%-CHG NOX',3X,'%-CHG 03'/)
510 FORMAT(38XfF6.3,3XrF5.3,3X,F5.4,4X,F6.1,5XrF6.1,
16X,F6.1)
520 FORMAT(11F5.3)
530 FORMAT (1HO,39X, 23HTHE BASE YEAR OZONE OF ,F10.3,
or, T0 _, „ „ GIVEN INPUTS. /40X, 32HTHE MAXIMUN
2E IS ,F10.3,5H PPM.//)
BASE YEAR OZONE OCCURS AT
. RATIO:/1HO,
3
455
456
457
458
459
46?
462
464
>,u
),u
u
u
u
u
u
u
1,0
>,u
u
u
u
u
,u
,u
,u
u
u
/u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
492A
492B
492C
492D
492E
493
494
495
496
497
98
500
5"
505
507
508
.f.,,
,45HTHE LOCATION CLOSEST TO THE MEASURED NMOC OF
512
513
U-9
-------
4 F10.3, 5H PPMC /40X,11HAND NOX OF ,F10.3,18H PPM WILL BE USED. U 514
5 / 40X,50HTHE FOLLOWING SIMULATIONS WERE DONE AT THIS POINT./ U 515
61HO,14Xf4HNMOCf17X,3HNOXr15Xf5HRATIOf17XfA4,16X,4HTIME) U 516
550 FORMAT (1HO,39X,21HCANNOT FIND OZONE OF ,F5.2,17H AFTER SECOND SETU 517
1/40X,56HOF ITERATIONS. CHECK INPUTS OR GENERATE AN ISOPLETH DIA, U 518
25HGRAM. ) U 519
560 FORMAT (1HO,39Xf33HNOTE THE CALCULATED REDUCTION OF ,F6.2,8H PERCEU 520
1NT/40X,54HMAYBE UNREALISTIC WITH THE GIVEN INPUTS. U 521
2/40X,35HAN ISOPLETH DIAGRAM IS RECOMMENDED. ) U 522
570 FORMAT (1HO,39X,44HBOTH CALCULATED NMOC AND NOX LOCATIONS ARE / U 523
140X,57HOUTSIDE RANGE OF INTERPOLATION. CHECK INPUTS OR GENERATE U 524
2/40X,20HAN ISOPLETH DIAGRAM. ) U 525
C U 526
END U 527-
U-10
-------
SUBROUTINE SIM (HCHH,XNHH, ZN, INX)
THIS ROUTINE CONTROLS THE SIMULATION OF AN INDIVIDUAL CALCULATION
SAVE
COMMON /CALC/ NR, KR<200, 12) , A{200) , S (200) , R (200) , ITYPE (200) , IA(60) V
COMMON /TITL/
COMMON /HOUR/
COMMON /CNTRL/
L
COMMON /EMIS/
L
COMMON /HEAT/
COMMON /NEEDI/
,ERR,START,STOPP,TPRNT,TSTEP,ZENI
OZM(5),NGO/TTM,TM(5)
SIG,SIGMA,INFO,NPTO,TSRT,DTIM,Zl,Z2,DCON,EHC,EXN,
FLST,TLST
NEM,IS1,ESTRT(5),ESTOP,ESLP,IEMLS(5),EOSLP(5)
EMO(26,5),ECI(5),EM(26),EC(125),ECO(125,5)
SC(200,12),ISC (200,3)
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,UNO,1103,
IIH20,JPLUS
COMMON /FRPLOT/ SAVCON(80,5),SAVTIM(SO),NT,INOW
COMMON /INOUT/
COMMON /SPEC/
INU,IOUT,ITAPE,IALN,IALL,INI,IOZC
NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2),
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN
2 XNAL,NOZ,FENX{2),CI(61) , NI,KOZ(5)
COMMON /SUNLIT/ Z(10),RTCON(10),LAM1,INC,SLA,SLO,TZ,IY IM ID
1 • ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24),'
COMMON /HJH/ HCSAv! XN^ ' ' **™' J*™' *™' "^ M™' MAXL' ^
COMMON /PHOTON/ CF (72,20),P{24,20),IPH(20),IP,RFCT(20),PP(10,20)
1 IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF(125,10),
2 IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300)
COMMON /MIX/ NMIX,AMIX(26),STRM,STOPM,DC(104)
COMMON /MIXING/ DSTRT,DEND,AMC(5),BMC(5),CMC(5),FD(6),FG(6),
COMMON /BK1/
COMMON /CRED/
L
COMMON /BIOG/
COMMON /WATER /
AMXX(26),DL,TTMAX,SSRISE,SRMIN,DELH,TOIL,NMXX,
HEIGHT,SSET,SRISE
FBK(20),FBKAL(5),HCBK,XNBK,OZBK, H20BK
ICR,ISPCR,SPCR69(3),SURFCR(3),ALOFCR(3),
REDCR(3),FSRFCR(3),FALFCR(3),COSFBK,COAFBK
NBEM,IBSP,WTMOL{5),ACB4(5),SURFBI(5),ALOFBI(5),
REDBI(5),FSRFBI(5),FALFBI(5),BEMO(26,5),
BECO(126,5),CBTOT(5),IBLS(5),BESTOP,BFRAC(20,5)
WATEND,NWATER,PAMB,QW(30),QR(30),PMILLI,ILH20
COMMON /BIOCHR/ IISOP, IBEMSP(5)
COMMON /CRECHR/ ISPNCR(3)
COMMON /EMSCHR/ EMSP(5)
COMMON /NEED1C/ IBZA
COMMON /PHTCHR/ ISPDP(IO)
COMMON /CALCHR/ SPECIS(61)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER*2 ITTL
CHARACTERM ISPDP, ISPNCR, IBEMSP
CHARACTERM SPECIS, HCSPEC, PLSP, REACT, IISOP, EMSP
CHARACTERM IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,IINO,1103
L HH20, IBZA,JPLUS,INST
DIMENSION RT(200), RX(20), C(61), C03(5), INST(3,5),YY(61,6)
DATA INST/' (INS','TANT',')
1'(INS','TANT',') ' ,'(INS1
ISP=IS1+ICR
TCI=FLOAT(JSTRT)
HC=HCHH
XN=XNHH
START=0.
(INS','TANT',' )
TANT'
(INS','TANT' ')
V
V
V
V
V
50)V
n v
V
V
!, V
V
V
V
V
V
V
V
V
V
V
i, v
V
V
V
.XJV
V
, v
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
/v
V
V
V
V
V
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
32A
33
34
35
35A
35B
35C
35D
35E
35F
35G
35H
351
35J
35K
35L
35M
35N
350
35P
35Q
35R
35S
36
37
38
39
39A
40
41
42
43
V-l
-------
T=START
TDIL=0.
TTRS=CLKMIN (TCI)
TTR1=CLKMIN (SRISE)
TTR2=CLKMIN (SSET)
TR1=TTR1-TTRS
TR2=TTR2-TTRS
IF (TR2.LE.O.) TR2=2000.
IF (TRl.GE.,0. .OR. ( (JSTOP-JSTRT) .GT.100) ) GO TO 10
TR2=1440.+TR1
TR1=TTR2-TTRS
IF (TR1.LT..O.) TR1=0.
IF (TR2.LE..O.) TR2=2000.
10 IF (IN1.EQ.1) SAV=STOPP
STOPP=SAV
FLST=1.0
TLST=START
EHC=HC
EXN=XN
HCSAV=HC
XNSAV=XN
TDC=STOPP/80.
TD=0.
DO 20 I=2f80
TD=TD+TDC
20 SAVTIM(I)=TD
SAVTIM(1)=0.
IF (NPTO.EQ.O) TPRNT=STOPP
IF (NPTO.NE.O) TTM=5.0
H=1.E-10
N=NI
M=NS-1
DO 30 J=l,5
30 ECI(J)=1.
IF (ISP.LE.2) GO TO 60
DO 50 1=3,ISP
DO 40 J=1,M
IF (EMSP(I).EQ.IIHC.OR.EMSP(I).EQ.IINX) GO TO 40
IF (SPECIS(J).NE.EMSP(I)) GO TO 40
ECI(I)=SPRSE(I)
IF (ICR.GT.O.AND.I.GT.2) ECI(I)=SPCR69(1-2)
GO TO 50
40 CONTINUE
50 CONTINUE
60 IFH20=0
IFCO=0
IFISOP=0
IF (N.LE.O) GO TO 80
DO 70 1=1,N
C{I)=CI(I)
IF (REACT(I).EQ.IIH20) IFH20=1
IF (REACT(I).EQ.IICO) IFCO=1
IF {REACT(I).EQ.IISOP) IFISOP=1
70 CONTINUE
80 CONTINUE
IF (IFH20.NE.O) GO TO 90
N=N+1
IF (N.LE.O) N=l
REACT(N)=IIH20
C(N)=H20BK
IF (QW(1).GT.O.) C(N)=QW(1)
90 IF (IFCO.NE.O.OR.ICR.GT.O) GO TO 100
N=N+1
IF (N.LE.O) N=l
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
. 66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
89A
90
91
92
93
94
94A
95
96
97
98
99
100
101
101A
102
103
104
V-2
-------
REACT(N)=IICO
C(N)=COSFBK
100 CALL RATES (C,N)
IF (IN1.NE.O) CALL SPARS (IA,JA,M)
DHC=HCIN-HCBK
DXN=XNIN-XNBK
IF (DHC.LT.O.) HCIN=HCBK
IF (DXN.LT.O.) XNIN=XNBK
DO 110 J=1,NHC
K=IH{J)
FBKS=FINHC(J)
IF (FBK(J).GT.(-0.00001)) FBKS=FBK(J)
C(K)=(HC*RCTY{J)+HCIN*FINHC(J))/CARB(J)
110 CONTINUE
DO 120 K=l,2
I=INOX(K)
IF (SPECIS(I).EQ.IIN02) C(I)=XN*XNF(K)+XNIN
IF (SPECIS(I).NE.IIN02) C(I)=XN*XNF(K)
120 CONTINUE
IF (OZIN.EQ.O.) GO TO 160
DO 130 1=1,NOZ
IF (PLSP(I).NE.II03 ) GO TO 130
JOZ=KOZ(I)
C(JOZ)=OZIN
GO TO 160
130 CONTINUE
140 DO 150 1=1,N
IF (SPECIS(I).NE.II03 ) GO TO 150
C(I)=OZIN
GO TO 160
150 CONTINUE
160 IF (ICR.LE.O) GO TO 190
DO 180 J=1,ICR
DO 170 1 = 1,N
IF (SPECIS(I).NE.ISPNCR(J)) GO TO 170
: C(I)=SURFCR(J)+SPCR69(J)
C(I)=SPCR69(J)
GO TO 180
170 CONTINUE
180 CONTINUE
190 IF (ISP.LE.2.0R.ICR.GT.O) GO TO 195
DO 194 J=3,ISP
DO 193 1 = 1,N
IF (SPECIS(I).NE.EMSP(J)) GO TO 193
IF (SPECIS(I).NE.IICO) GO TO 192
IF (IFCO.NE.O) C(I)=C(I)+SPRSE(J)
IF (IFCO.EQ.O) C(I)=SPRSE(J)
GO TO 194
192 C(I)=C(I)+SPRSEtJ)
GO TO 194
193 CONTINUE
194 CONTINUE
195 IF (IBSP.LE.O) GO TO 199
DO 198 J=1,IBSP
IF (ACB4(J).LE.O.) 30 TO 197
DO 196 L=1,NHC
K=IH(L)
C(K)=C(K)+SURFBI(J)*BFRAC(L,J)/CBTOT(J)
196 CONTINUE
GO TO 198
197 L=IBLS(J)
C(L)=SURFBI(J)
198 CONTINUE
199 CALL DIFFUN (N,START,C,RT,2,START)
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
V
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
140
141
142
143
143A
143B
143C
143D
143E
143F
143G
143H
1431
143J
143K
143L
143M
143N
1430
143P
143Q
143R
143S
143T
143U
143V
143W
144
V-3
-------
HC=HCSAV
XN=XNSAV
IF (NPTO.EQ.O) GO TO 210
WRITE (IOUT,520)
WRITE (IOUT,540) (ITTL(I),1=1, 36)
IF (INFO.LT.l) WRITE (IOUT,600) (PLSP(I),I=1,NOZ)
IF (INFO.LT.l) WRITE (IOUT,610) «INST
-------
ERR=ERRSAV
320 CALL DRIVES (M,T,H,C,TNEXT,ERR,21,IN,IA,JA,YY)
T=TNEXT
IF (NPTO.NE.O) GO TO 350
(T.LT.STOPP) GO TO 220
(INX.GT.(-1)) GO TO 350
(INX.EQ.(-1).AND.OZM(l).GT.0.75*ZN) GO TO 350
(INX.NE.(-3)) GO TO 330
TOL=1.0-(0.17/(SQRT(FLOAT(ITAPE))))
IF (OZM(l).GE.TOL*ZN.AND.OZM(1).LE.ZN/TOL) GO TO 350
330 CONTINUE
IF (INX.NE.(-2)) GO TO 340
IF T.5) WRITE (IOUT,660) HC,XN,RR,OZM(1)
IF
-------
IF (T.EQ.START) TIMNW=START V 271
IF (T.NE.START) TIMNW=TPRNT V 272
CTIME=CLOCK(TCI,IFIX(TIMNW)) V 273
C V 274
C ****** UPDATED 11/81 FOR 24 HR RUNS V 275
C
V 276
IF (CTIME.GT.2400.) CTIME=CTIME-2400. V 277
WRITE (IOUT,620) CTIME,HCC,RNX,CNOX,FN02,(C03(I),1=1,NOZ) V 278
IF (INFO.LE.O) GO TO 460 V 279
WRITE (IOUT,500) (SPECIS(I),1=1,M) V 280
WRITE (IOUT,530) CTIME,(C(I),1=1,10),H,(C(I),1=11,M) V 281
CALL DIFFUN (N,TLMNW,C,RT,1,TIMNW) V 282
WRITE (IOUT,480) (RT(I),1=1,M) V 283
DO 440 1=1,NR v 284
J=KR(I,1) v 285
IF (J.EQ.O) RT(I)=0. V 286
IF (J.EQ.O) GO TO 440 V 287
JT=ITYPE(I) v 288
XT=1. v 289
DO 430 L=1,JT v 290
J=KR(I,L) Y 291
XJ=1. V 292
IF (J.GT.O) XJ=C(J)**ISC(I,L) V 293
IF (ISC(I,L) .EQ. {-!)) XJ=C(J)**SC(I,L) V 294
XT=XT*XJ v 295
430 CONTINUE v 296
RT(I)=XT*R(I) v 297
440 CONTINUE v 298
WRITE (IOUT,490) (RT(I),1=1,NR) V 299
IF (IP.EQ.O) GO TO 460 v 300
DO 450 1=1,IP v 301
K=IPH(I) v 302
450 RX(I)=R(K) v 303
WRITE (IOUT,590) (RX(I),1=1,IP) v 304
WRITE (IOUT,650) HEIGHT,TEMP,ZENI V 305
460 IF (TNEXT.EQ.l.) ERR=AMIN1(1.,100.*ERR) V 306
IF (TIMNW.EQ.START) GO TO 320 V 307
IF (NPTO.NE.O) IN1=1 v 308
IF (T.GE.STOPP) RETURN v 309
TPRNT=TPRNT+TSTEP v 310
GO TO 220 v 311
C V 312
C FORMAT STATEMENTS v 313
C V 314
470 FORMAT (1HO,Fll.5,4X,Fll.5,5X,Fl1.5,5X,5(IP,E12.5,3X)) V 315
480 FORMAT (/10H NET RATES,IX,IP,10E12.3/(11X,IP,10E12.3)) V 316
490 FORMAT (//1X,22HTHE REACTION RATES ARE/UH , IP, 10E13.2) ) V 317
500 FORMAT (//3X,5HTIME ,4X,10(4X,A4,4X)/1X,8HINTERVAL,3X,10(4X,A4, V 318
14X)/(12X,10(4X,A4,4X))) v 319
510 FORMAT (1HO,Fl1.5,4X,Fll.5,5X,Fl1.5,5X,5(IP,E12.5,3X),8H NOT MAX) V 320
520 FORMAT (1H1/) ' V 321
530 FORMAT (/IP,Ell.3,10E12. 37E11.3,10E12.3/(11X,10E12.3)) V 322
540 FORMAT (46X,36A2) • V 323
550 FORMAT (1HO,Fl1.5,F9.5,Fll.5,2X,4(IP,E10.4,3X,OP,F5.0,2X),IP, V 324
1E10.4,3X,OP,F5.0) v 325
560 FORMAT (24HOTHE ERROR TOLERANCE IS ,1P,E10.3/ V 326
125HOTHE TEMPERATURE USED IS ,E10.3/ Y 327
221HOTHE MIXING HEIGHT IS ,E10.2) V 328
570 FORMAT (29HOTHE RATE CONSTANTS USED WERE//(1HO,IP,10E13 3)) V 329
580 FORMAT (29HOTHE PHOTOLYSIS REACTIONS ARE/(1HO,9113)) V 330
590 FORMAT (34HOTHE PHOTOLYTIC RATE CONSTANTS ARE/<5X,IP,9E13 3)) V 331
600 FORMAT (1HO,10X,4HTIME,6X,4HNMOC, 7X, 5HNMOC/, 8X, 3HNOX, 9X,3HN02,9X,V 332
1A4,4(8X,A4)) Y 333
610 FORMAT(1 OX,6H(LOT ),4X,5HTOTAL,8X,3HNOX,8X,5HTOTAL,6X,8HFRACTION, V 334
V-6
-------
13X,5(3A4))
V 336
V
, v
130HOTHE CURRENT TEMPERATURE IS ,F10.2/ ' v
230HOTHE CURRENT ZENITH ANGLE IS ,F10.2) v
660 FORMAT (1HO, 4F20 .5, F21 .0) X
670 FORMAT (1HO, 4F20 . 5, 14X, 7HNOT MAX)
650 FORMAT (//30HOTHE CURRENT MIXING HEIGHT IS ,F10 2/
'
680 FORMAT (lXr7E13.4)
,
,
690 FORMAT (1X,F8.5, 2X, F8.5, 2X,F8.5r 3X, 5 (IP, E8.5,2X) ) v 346
"'
a:
V 350
)'4X'5HTOTAL'8X'3HNOX'8X'5H1'OTAL,6X,8HFRACTION, V 352
'1X;f6-°'1X'F10-5'2X'F10-5-2X,F10.5,2X,F10.5,2X,F10.5, V
,l? 1U . 5) ) ..
750 FORMAT (IX, 4F10 . 5, Fll . 0) „
760 FORMAT (IX, 4F10 . 5, 4X, 7HNOT MAX)
END
V
V 358-
V-7
-------
SUBROUTINE DRIVES (N, TO, HO, YO, TOUT, EPS, MF, INDEX, IA, JA, Y) W 1
W 2
C THIS IS THE DRIVER ROUTINE FOR THE GEAR INTEGRATION SCHEME W 3
C W 4
C REF: SPELLMANN AND HINDMARSH (1975) W 5
SAVE JJ *
COMMON /CNTRL/ SIG, SIGMA, INFO, NPTO,TSRT, DTIM, Zl, Z2,DCON, EHC, EXN, W 8
1 FLST,TLST w 9
COMMON /SPEC/ NS,CARB(20),RCTY(20),XNF(2),IH(20), INOX(2), W 10
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN, W 11
2 XNAL,NOZ,FENX(2),C(61),NI,KOZ(5) W 12
COMMON /HJH/ HCSAV,XNSAV w 13
COMMON /GEAR1/ T, H, HMIN, HMAX, EPSC, UROUND, NC, MFC, KFLAG, JSTART W 14
COMMON /GEAR2/ YMAX(IOO) / GEAR3/ ERROR ( 100) /GEAR4/W1 (60, 3) W 15
COMMON /GEARS/ IW1(61,9) /GEAR6/W2 (2400) /GEAR7/IW2 (2400) W 16
COMMON /GEARS/ EPSJ, IPTI2, IPTI3, IPTI4, IPTR2, IPTR3, NGRP W 17
COMMON /GEAR9/ HOSED, NQUSED, NSTEP, NFE, NJE, NZA, NPL, NPU, NZL, NZU, NZROW 18
COMMON /INOUT/ INP, LOUT, ITAPE, IALN, IALL, INHH, IOZC W 19
W 19A
COMMON /CALCHR/ SPECIS(61) w 19B
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT (61) W 19C
CHARACTER* 4 SPECIS, HCSPEC, . REACT, PLSP W 19D
W 1 9F
DIMENSION IA(1), JA(1), YO (N) w 20
DIMENSION Y(N,6) JJ 21
DATA NMX/60/,LENW2/2400/,LENIW2/2400/ w ??
NGP=0 2 H
IF (INDEX. EQ. 4) GO TO 30 w 2l
IF (INDEX. EQ.O) GO TO 60 w ?fi
IF (INDEX. EQ. 2) GO TO 70 w 21
IF (INDEX. EQ. (-1)) GO TO 80 W ?fl
IF (INDEX. EQ. 3) GO TO 90 w ™
IF { INDEX. NE.l) GO TO 270 w tg
IF (EPS.LE.O.) GO TO 240 w ,,
IF (N.LE.O) GO TO 250 w ^
IF ((TO-TOUT)*HO.GE.O.) GO TO 260 w q -,
MLTER=MF-10MMF/1C) w 3^
IF ( (MITER. NE.l) .AND. (MITER. NE . 2)) GO TO 30 w ^ s
NZA=IA(NP1)-1
• MAX=LENIW2/2 w ^'
IPTI2-MAX+1 JJ 33
CALL SORDER (N, IA, JA, IW1, IW1 ( 1 , 5 ) , MAX, IW2, IW2 ( IPTI2) , IER) W 40
IPTI2=NZA+1 W 41
IF (IPTI2+NZA-1.GT.LENIW2) GO TO 290 w 4,
DO 10 1=1, NP1 ^
10
DO 20 1=1, NZA
20 IW2(I)=JA(I) JJ \l
^CALL NSCORD (N, IW1 (1 , 2) , IW2, IW1 ( 1, 3) , IW2 (IPTI2) , IW1, IW1 ( 1, 5) , IW1 ( 1W 47
MAXPL=(LENIW2-NZA)/2 JJ \\
IPTI3=IPTI2+MAXPL w ?*
MAXPU=LENIW2-IPTI3 + 1
(N'IW1(1'2)'IW2'MAXPL'IWK1,3),IW2(IPTI2),IW1(1,4),MAXW 52
(lf5),IW2(IPTI3),IWl(l,6),Y(l,6),IWl(l,9),Y,Y(l,2),Y(l,3),IWW 53
21(1, 7), IW1(1, 8), Y(l, 4), Y(l, 5), IER) w S4
NPL=IW1(N,4) J ll
NPU=IW1(N,6) J: II
NZL=IW1(N+1,3) „ ^
NZU-IWl(N+lf5) JJ I'
IPTR2=NZA+1 JJ II
W-l
-------
IPTR3=IPTR2+MAXO(NZA,NZL) w
IF (IPTR3+MAXO(NZA,NZU)-1.GT.LENW2) GO TO 290 w *i
30 DO 40 1=1,N |! It
YMAX(I)=ABS(YO(I))
IF (YMAX(I).EQ.O.) YMAX(I)=1.E-10 W
40 Y(I,1)=YO(I)
NHCUT=0
W 64
NC=N ?J 65
T=TO ^
H=H° W 68
NZRO=0 W 58
TST=EPS*1.E-10 JJ 69
DO 50 1=1,N JJ 7°
50 IF (Yd, 1) .GT.TST) NZRO=NZRO+1 JJ L~
NZRO=MAXO(NZRO,1) ?! ',
NOLD=NZRO JJ 73
HMIN=ABS(HO) ?! ~\
HMAX=ABS (TO-TOUT) *10. JJ Z
HMAX=AMIN1(HMAX,20.) JJ 7^
EPSC=EPS JJ '
MFC=MF JJ 78
JSTART=0 j 79
NO=N ?J 80
CALL OZMX (Y,TL,TOUT,NO) JJ ?J
NMX1=NMX+1 ' JJ - 82
EPSJ=SQRT(UROUND)
W 84
W 85
GO TO 100
60 HMAX=ABS(TOUT-TOUT?)*10. JJ ??
HMAX=AMIN1(HMAX,20.) JJ 87
GO TO 160 JJ 88
70 HMAX=ABS(TOUT-TOUTP)*10. JJ "
HMAX=AMIN1(HMAX,20.) ' JJ 9°
IF ((T-TOUT)*H.GE.O.) GO TO 300 JJ ?:
GO TO 170 W 92
80 IF ((T-TOUT)*H.GE.O.) GO TO 280 !! I]
JSTART=-1 „ ll
NC=N W 95
EPSC=EPS W 96
TST=EPS*1.E-10 !J 97
MFC=MF W 98
90 CONTINUE W "
100 CONTINUE W 3-??
CALL STIFFS (Y, NO, IA, JA, Wl, NMX, IW1, NMX1) !!
JOZ=KOZ(1) W
KGO=1-KFLAG W l°_3
GO TO (110,190,220,200),KGO Jl
110 CONTINUE f W
IF (T.GE.TL) CALL OZMX (Y,TL,TOUT,NO) M
D=0. w
NZRO=0 W 108
DO 140 1=1,NC W }?9
IF (Y(I,1) .GE.O.) GO TO 130 J!
NGP=NGP+1 W
DO 120 J=l,6 W
C K=(J-1)*N+I W
C 120 Y(K,1)=0. W
120 Y(I,J)=0. W
130 CONTINUE W 115
IF (Y(I,1).GT.TST) NZRO=NZRO+1 f!
AYI=ABS(Y(I,1)) W
YMAX(I)=AMAX1(1.E-10,AYI) W
140 D=D+(AYI/YMAX(I))**2 W
NZRO=MAXO(NZRO,1) W
DO 150 11=1,NC W 121
W 122
W-2
-------
150 YO(II)=Y(II,1)
CALL SAVIT (T,YO)
IF {NZRO.NE.NOLD} JSTART=-1
IF {NZRO.NE.NOLD) NOLD=NZRO
D=D*(UROUND/EPS)**2
IF {D.GT.FLOAT(N)) GO TO 230
IF (INDEX.EQ.3) GO TO 300
IF (INDEX.EQ.2) GO TO 170
160 IF ((T-TOUT)*H.LT.O.) GO TO 90
CALL INTERP (TOUT,Y,NO,YO)
GO TO 320
170 IF (T.GE.TOUT) GO TO 180
IF (((T+H)-TOUT).LE.1..AND.T.GT.1.) GO TO 90
H={TOUT-T)*(1.+4.* UROUND)
JSTART=-1
GO TO 90
180 JSTART=-1
H=AMIN1{H,,1.)
GO TO 300
190 CONTINUE
200 IF (NHCUT.EQ.10) GO TO 210
NHCUT=NHCUT+1
HMIN=.1*HMIN
H=.1*H
JSTART=-1
GO TO 90
210 WRITE (LOUT,330)
IF (KGO.EQ.4) WRITE (LOUT,360) T
STOP
220 WRITE (LOUT,340) T,H
STOP
230 WRITE (LOUT,350) T
KFLAG=-2
STOP
240 WRITE (LOUT,370)
STOP
250 WRITE
STOP
260 WRITE (LOUT,390)
STOP
270 WRITE
STOP
280 WRITE
STOP
290 WRITE
STOP
300 TOUT=T
DO 310 1=1,N
310 YO(I)=Y(I,1)
CALL SAVIT (TOUT
320 INDEX=KFLAG
TOUTP=TOUT
HO=HUSED
IF (KFLAG.NE.O) HO=H
RETURN
FORMAT STATEMENTS
330 FORMAT (//44H PROBLEM APPEARS UNSOLVABLE WITH GIVEN INPUT//)
340 FORMAT (//35H KFLAG = -2 FROM INTEGRATOR AT T = ,E16.8,5H H = E16W
1.8/52H THE REQUESTED ERROR IS SMALLER THAN CAN BE HANDLED//) '
350 FORMAT (//37H INTEGRATION HALTED BY DRIVER AT T = ,E16 8/56H EPS
1TOO SMALL TO BE ATTAINED FOR THE MACHINE PRECISION/)
360 FORMAT /35H KFLAG = -3 FROM INTEGRATOR AT T = ,E16.8/45H CORRECW
(LOUT,380)
(LOUT,400) INDEX
(LOUT,410) T,TOUT,H
(LOUT,420)
YO)
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
w
iW
w
w
w
:w
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
W-3
-------
1TOR CONVERGENCE COULD NOT BE ACHIEVED/)
370 FORMAT {//28H ILLEGAL INPUT.. EPS .LE. O.//)
380 FORMAT (//25H ILLEGAL INPUT
390 FORMAT (//36H ILLEGAL INPUT
400 FORMAT (//24H ILLEGAL INPUT
N .LE. O//)
(TO-TOUT)*H .GE. O.//)
INDEX =,I5//)
410 FORMAT (//44H INDEX = -1 ON INPUT WITH (T-TOUT)*H GE 0 /4H T = EW
116.8,9H TOUT -,E16.8,6H H =,E16.8) * JJ
420 FORMAT {//42H INSUFFICIENT WORKING STORAGE IN IW2 OR W2//) w
END
W
187
188
189
190
191
192
193
194
195-
W-4
-------
SUBROUTINE STIFFS (Y,NO,IA,JA,W1,NMX,IW1,NMX1)
C
C THE GEAR PREDICTOR/SOLVER ROUTINE FOR STIFF EQUATIONS
C
SAVE
COMMON /GEAR1/ T,H,HMIN,HMAX,EPS,UROUND,N,MF,KFLAG,JSTART
COMMON /GEAR2/ YMAX(IOO) /GEAR3/ERROR(100)
COMMON /GEAR6/ W2(2400) /GEAR7/IW2(2400)
COMMON /GEARS/ EPSJ,IPTI2,IPTI3,IPTI4,IPTR2,IPTR3,NGRP
COMMON /GEAR9/ HUSED,NQUSED,NSTEP,NFE,NJE,IDUMMY(5),NZRO
COMMON /HEAT/ SC (200,12),ISC(200,3)
COMMON /CALC/ NR,KR(200,12),A(200),S(200),R(200),ITYPE(200),
1 IB(60),JB(800),DILUT,TEMP,ERR,START,STOPP,TPRNT,
2 TSTEP,ZENI
COMMON /PHOTON/ CF(72,20),PX(24,20),IPH(20),IP,RFCT(20),PP(10,20)
1 IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF(125,10),
2 IDPTIM,DPEND,RDEP1(26,10),DNOWS,SPRSE(300)
COMMON /CALCHR/ SPECIS(Sl)
CHARACTER*4 SPECIS
DIMENSION
DIMENSION
Y(NO,6),
EL(13), TQ(4)
RT{3)
W1(NMX,3), IW1(NMX1,9)
DATA EL(2)/1./,OLDLO/1./
KFLAG=0
TOLD=T
IF (JSTART.GT.O) GO TO 100
IF (JSTART.NE.O) GO TO 20
CALL DIFFUN (N,T,Y,Wl,1,TOLD)
DO 10 1=1,N
10 Y(I,2)=H*W1(I,1)
METH=MF/10
MITER=MF-10*METH
NQ=1
L=2
IDOUB=3
RMAX=1.E4
RC=0.
CRATE=1.
HOLD=H
MFOLD=MF
NSTEP=0
NSTEPJ=0
NFE=1
NJE=0
IRET=3
GO TO 30
20 IF (MF.EQ.MFOLD) GO TO 50
MEO=METH
MIO=MITER
METH=MF/10
MITER=MF-10*METH
MFOLD=MF
IF (MITER.ME.MIO) IWEVAL=MITER
IF (METH.EQ.MEO) GO TO 50
IDOUB=L+1
IRET=1
30 CALL COSET (METH,NQ,EL,TQ,MAXDER)
LMAX=MAXDER+1
RC=RC*EL(1)/OLDLO
OLDLO=EL(1)
40 FN=FLOAT(NZRO)
EDN=FN*(TQ(1)*EPS) **2
X
X
X
X
X
X
X
X
X
X
X
X
X
X
,x
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
1
2
3
4
5
6
7
8
9
10
11
12
12A
13
14
15
16
16A
16B
16C
16D
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
X-l
-------
E=FN*(TQ{2)*EPS)**2
EUP=FN*(TQ(3)*EPS)**2 X 60
BND=FN*(TQ(4)*EPS)**2 v !i
EPSOLD=EPS X 62
NOLD=NZRO X 63
GO TO (60,70,100),IRET * "
50 IF (EPS.EQ.EPSOLD..AND.NZRO.EQ.NOLD) GO TO 60 v c*
IRET=1 * bb
GO TO 40 X 67
60 IF (H.EQ.HOLD) GO TO 100 X !®
RH=H/HOLD X 69
H=HOLD X 70
IREDO=3 X 71
GO TO 80 X 72
70 RH=AMAX1(RH,HMIN/ABS(H)) * 2?
80 RH=AMIN1(RH,HMAX/ABS(H),RMAX) * 15
DO 90 J=2,L X 76.
R1=R1*RH X 77
DO 90 1=1,N X 78
90 Y(I,J)=Y(I,J)*R1 X '*
H=H*RH X 80
RC=RC*RH X 81
IDOUB=L+1 X 82
IF (IREDO.EQ.O) GO TO 550 * ?J
100 IF (ABS(RC~1.).GT.0.3) IWEVAL=MITER C !f
IF (NSTEP.GE.NSTEPJ+20) IWEVAL=MITER C o^
T=T+H A Bb
DO 110 J1=1,NQ X 87
DO 110 J2=J1,NQ X 88
J=(NQ+J1)-J2 X °9
DO 110 1=1,N X 90
110 Y(I,J)=Y(I,J)+Y(I J+l) X 91
120 DO 130 1=1,N X 92
IF (Y(Ifl).LT.l.E-5) GO TO 130 C- "
IF (Y(I,1).LT.(-2.*Y(I,2))) GO TO 290 C- „
130 ERROR(I)=0. * yb
M=0 X 96
CALL DIFFUN
-------
DO 210 K=1,MT y
I=KR(IR,K) £
DO 170 L=1,MT I)
J=KR(IRfL) £
M=IA(J)-1 *
160 M=M+1 * 12°
IF (I-JA(M)) 160,170,160 J
170 W2(M)=W2(M)-RT(L) *
DO 200 L-4,12 *
j=KR(iR,D
IF (J) 200,210,180 0
180 M=M+1
IF (J-JA(M)) 180,190,180 C
190 W2(M)=W2(M)+RT(K)*SC(IR,L) 0
200 CONTINUE Q
210 CONTINUE J
220 CONTINUE *
DO 240 J=lrN J
KMIN=IA(J) J
KMAX=IA(J+1)-1 J
DO 230 K=KMIN,KMAX y
W2(K)=W2(K)*CON £
IF (JA(K).EQ.J) W2(K)=W2(K)+1.-CON*DILOT-CON*DNOWS X
230 CONTINUE *
240 CONTINUE !!
150
152
(IPTI3)'IW1<^6),W2(IPTR3),W1,IW1(1,7),IW1X 153
,
M=ISV £
L=LSV X
IF (IER.NE.O) GO TO 290 0
250 DO 260 1 = 1, N C.
260 W1{I,1)=H*W1(I,2)-(Y(I,2)+ERROR(I)) X 159
(1'3) ' IW2 (IPTI2) ' IW1 (1, 4) , W2 (IPTR2) , Wl (IX 160
^{IPTI3),IW1(1,6),W2(IPTR3),W1{1,2),W1,W2) X 161
DO 270 1 = 1, N y
ERROR(I)=ERROR(I)+W1(I,2) y
D=D+(W1(I,2)/YMAX(I))**2 J
270 Wl(Ifl)=Y(Ifl)+EL(l)*ERROR(I) £
IF (M.NE.O) CRATE=y\MAXl(.9*CRATE,D/Dl) y
IF ((D*AMINl(l.f2.*CRATE)).LE.BND) GO TO 320 v
D1=D
M=M+1 X 169
IF (M.EQ.3) GO TO 280 *
CALL DIFFUN (N, T, Wl, Wl (1 , 2) , 1 , TOLD) y
GO TO 250 X
280 NFE=NFE+2 X 173
IF (IWEVAL.EQ. (-1)) GO TO 310 v
290 T=TOLD A
RMAX=2. X 176
DO 300 J1 = 1,NQ X
DO 300 J2=J1,NQ X
J=(NQ+J1)-J2 X
DO 300 1=1, N X 18°
300 Y(IJ)=YIJ
IF (ABS(H) .LE.HMIN*!. 00001) GO TO 540 v
RH=.25 X
IREDO=1 X
GO TO 70 X 185
310 IWEVAL=MITER X 186
X 187
X-3
-------
GO TO 120
320 IF (MITER.NE.O) IWEVAL=-1 Y
NFE=NFE+M X
D-0. X 19°
DO 330 1=1,N X
330 D=D+(ERROR(I)/YMAX{I))**2 Y
IF (D.GT.E) GO TO 360 Y , Q ,
KFLAG=0 * iy4
IREDO=0 X ll5
NSTEP=NSTEP+1 * ;„
HUSED=H X
NQUSED=NQ X
D0 340 J=1,L X J99
DO 340 1=1,N J
340 Y(I,J)=Y(I,J)+EL(J)*ERROR(I) Y
IF (IDOUB.EQ.l) GO TO 380 Y
IDOUB=IDOUB-1 y
IF (IDOUB.GT.l) GO TO 560 Y
IF (L.EQ.LMAX) GO TO 560 Y
DO 350 1=1,N J
350 Y(I,LMAX)=ERROR(I) X
GO TO 560 X
360 KFLAG=KFLAG-1 *
T=TOLD
DO 370 J1=1,NQ
DO 370 J2=J1,NQ
J=(NQ+J1)-J2
DO 370 1=1,N
370 Y(I,J)=Y(I,J)-Y(]
RMAX=2.
IF (ABS(H).LE.HMIN*!.00001) GO TO 520 v
IF (KFLAG.LE.(-3)) GO TO 500 0
IREDO=2 A
PR3=1.E+20 X 220
GO TO 400 X 221
380 PR3=1.E+20 „ ???
IF (L.EQ.LMAX) GO TO 400
Dl=0.
DO 390 1=1,N
390 Dl=Dl+{(ERROR(I)-Y[I,LMAX))/YMAX(I))**2
ENQ3=.5/FLOAT(L-fl)
PR3 = ((D1/EUP)**ENQ3) * 1.4 + 1.4E-6 Y ,,Q
400 ENQ2=.5/FLOAT(L) 0 ^
PR2={(D/E)**ENQ2)*1.2+1
PR1=1.E+20
IF (NQ.EQ.l) GO TO 420 v ooo
D=0. X 233
DO 410 1=1,N X 234
410 D=D+(Y(I,L)/YMAX(I))**2 Y
ENQ1=.5/FLOAT(NQ) Q
PRl=((D/EDN)**ENQl)*1.3+1.3E-6 Y
420 IF (PR2.LE.PR3) GO TO 430 Y
IF (PR3.LT.PR1) GO TO 450 v
GO TO 440 X 24°
430 IF (PR2.GT.PR1) GO TO 440 Y
NEWQ=NQ X
RH=1./PR2 X
GO TO 480 X 244
440 NEWQ=NQ-1 X 245
RH=1./PR1 X 246
GO TO 480 X247
450 NEWQ=L X 248
RH=1./PR3 X 249
IF (RH.LT.1.1) GO TO 470 Y oc?
X 2 j 1
X-4
-------
DO 460 1=1, N
460 Y(I,NEWQ+1)=ERROR(I)*EL(L)/FLOAT(L)
GO TO 490
470 IDOUB=10
GO TO 560
480 IF ((KFLAG.EQ.O).AND.(RH.LT.1.1)) GO TO 470
IF (NEWQ.EQ.NQ) GO TO 70
490 NQ=NEWQ
L-NQ+1
IRET=2
GO TO 30
500 IF (KFLAG.EQ.(-9)) GO TO 530
RH=10.**KFLAG
RH=AMAX1(HMIN/ABS(H),RH)
H=H*RH
CALL DIFFUN (N, T, Y, Wl, 1, TOLD)
NFE=NFE+1
DO 510 1=1,N
510 Y(I,2)=H*W1(I,1)
IWEVAL=MITER
IDOUB=10
IF (NQ.EQ.l) GO TO 100
NQ=1
L=2
IRET=3
GO TO 30
520 KFLAG=-1
GO TO 560
530 KFLAG=-2
GO TO 560
540 KFLAG=-3
GO TO 560
550 RMAX=100.
560 HOLD=H
JSTART=NQ
RETURN
END
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288-
X-5
-------
SUBROUTINE DIFFUN (L,T,X,XT,IENTRY,TXLD)
SAVE
COMMON /CALC/
NR,KR(200,12),A(200),S(200),R(200),ITYPE(200),
IA(60),JA(800),DILUT,TEMP,ERR,START,STOPP,TPRNT
I TSTEP,ZENI
COMMON /CNTRL/ SIG,SIGMA,INFO,NPTO,TSRT,DTIM,Zl,Z2,DCON,EHC,EXN
COMMON /SPEC/
COMMON /HEAT/
COMMON /NEEDI/
FLST,TLST
NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2),
FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN
XNAL,NOZ,FENX(2),C(61),NI,KOZ<5)
SC(200,12),ISC(200,3)
IBLANK,MBLANK,IIHC,IINX,IICO,IIN02,UNO,I103,
IIH20,JPLUS
ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24),XZ(24)Y
rKKl(24),JSRT,JSTOP,PSPEC,MNLM,MXLM,MAXL,MAXJ
COMMON /PHOTON/ CF (72,20),P(24,20),IPH(20),IP,RFCT(20),PP(10,20)
1 IDEPO,RDEPO(26,10),LOCDEP(10),RDCOEF(125,10),
rnMM^M ,. , IDPTIM'DPEND'RDEP1(26,10),DNOWS,SPRSE(300)
COMMON /EMIS/ NEM,IS1,ESTRT(5),ESTOP,ESLP,IEMLS(5),EOSLP(5)
* EMO<26,5),ECI(5),EM(26),EC(125),ES(125,5)
COMMON /MIX/ NMIX,AMIX(26),STRM,STOPM,DC(104)
COMMON /MIXING/ DSTRT,DEND,AMC(5),BMC(5),CMC(5),FD(6),FG(6)
1 AMXX(26),DL,TTMAX,SRISE,SRMIN,DELH,TOIL, NMXX,HT,
° SSET,SSRISE
IALFT,CALFT(10),LOCALF(10)
ICR, ISPCR,SPCR69(3),SURFCR(3),ALOFCR(3),
REDCR(3),FSRFCR(3),FALFCR(3) , COSFBK,COAFBK
NBEM,IBSP,WTMOL(5),ACB4(5),SURFBI(5),
ALOFBI(5),REDBI(5),FSRFBI(5),FALFBI(5),BEMO(26,5),Y
BECO(126,5),CBTOT(5),IBLS(5),BESTOP,BFRAC(20,5)
WATEND,NWATER,PAMB,QW(30),QR(30),PMILLI,ILH20
COMMON /ALOFT/
COMMON /CRED/
L
COMMON /BIOG/
COMMON /WATER/
COMMON /ALFCHR/ ISPAL(IO)
COMMON /BIOCHR/ IISOP, IBEMSP(5)
COMMON /CRECHR/ ISPNCR(3)
COMMON /EMSCHR/ EMSP(5)
COMMON /NEED1C/ IBZA
COMMON /PHTCHR/ ISPDP(IO)
COMMON /CALCHR/ SPECIS(61)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER*4 SPECIS, HCSPEC, REACT, PLSP
CHARACTERM ISPAL, ISPDP, ISPNCR, IBEMSP
CHARACTERM IISOP, EMSP
CHARACTERM IBLANK, MBLANK, IIHC, IINX, IICO, IIN02, UNO, 1103
IIH20,IBZA,JPLUS
EMULATE MULTIPLE ENTRY WITH COMPUTED GO TO
GO TO (10,380),IENTRY
MAIN ENTRY POINT
10 CONTINUE
N=L
Y
Y
Y
Y
Y
Y
Y
Y
Y
, Y
Y
Y
, Y
Y
Y
Y
Y
Y
Y
Y
4)Y
Y
, Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
,Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
1
2
3
4
5
6
7
8
8A
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
28A
29
30
31
32
32A
32B
32C
32D
32E
32F
32G
32H
321
32J
32K
32L
32M
32N
320
32P
32Q
32R
32S
32T
33
34
35
36
37
38
39
40
41
42
Y-l
-------
DILO=DILUT Y 43
IF(T.LT.TSRT.OR.TXLD.GT.TSRT+DTIM) DILU=0. Y 44
IF(T.LT.TSRT.OR.TXLD.GT.TSRT+DTIM) GO TO 60 Y 45
IF (AMIX(l).GT.(-l.)) GO TO 50 Y 46
TT=CLOCK(TCI,IFIX(T)) Y 47
TT=CLKMIN(TT) Y 48
TT«TT-SRISE Y 49
FDT=TT/DL Y 50
IF(FDT.LT.O.O) FDT=0.0 Y M
K=0 * H
20 K=K+1 Y 53
IF(FDT.GE.FD(K).AND.FDT.LT.FD(K+l)) GO TO 30 Y 54
IF(K.LT.S) GO TO 20 . Y 55
IF(FDT.LT.FD(2)) GO TO 40 Y 56
FGG=1.0 Y 5 7
FGSLP=0.0 Y 58
GO TO 40 Y 59
30 CONTINUE Y 6Q
XFD=FDT-FD(K) Y 61
FGG=((AMC(K)*XFD+BMC(K))*XFD+CMC(K))*XFD+FG(K) Y 62
FGSLP=(3.*AMC(K)*XFD+2.*BMC(K))*XFD+CMC(K) Y 63
40 HT=SRMIN+FGG*DELH Y 64
DILU=(FGSLP*DELH)/(HT*DL) Y 65
GO TO 60 Y 66
50 IF (AMIX(l).LT.O.) GO TO 60 Y 67
E Y 68
C CALCULATE DILUTION FOR CURRENT TIME STEP Y 69
C Y 70
I=IFIX(T/60.+1.9999995) Y 71
IF (T.LE.TOLD.AND.I.LT.IOLD) I=IOLD Y 72
IOLD=I Y 73
IF (I.LE.l) 1=2 Y 74
Z=T-FLOAT{]>2)*60. Y 75
HT=((Z*DC(3*I-3)+DC(3*I-4))*Z+DC(3*I-5))*Z+AMIX(I-l) Y 76
DILU=((3.0*Z*DC(3*I-3)+2.0*DC(3*I-4))*Z+DC(3*I-5))/HT Y 77
60 DILUT=AMAX1(DILU,0.) y 78
TNOW=TEMP Y 7g
ZNOW=ZENI Y 80
DO 70 1=1,N Y 81
XT(I)=-DILUT*X(I) Y 82
IF (SPECIS(I).EQ.IICO) XT(I)=XT(I)+DILUT*COAFBK Y 83
IF (SPECIS(I) .EQ. IIH20 ) XT(I)=XT(I)+DILUT*X(I) Y 84
70 IF (SPECIS(I).EQ.II03 ) XT(I)=DILUT*(OZAL-X(I)) Y 85
IF (T.LT.TSRT.OR.T.GT.TSRT+DTIM) GO TO 140 - Y 86
DO 80 K=l,2 Y 87
J=INOX(K) Y 88
IF (SPECIS(J).NE.IEN02 ) GO TO 80 Y 89
XT(J)=DILUT*(XNAL-X(J)) Y 90
GO TO 90 Y g]
80 CONTINUE Y 92
90 DO 100 K=1,NHC Y 93
J-IH(K) Y 94
FBKS=FALHC(K) y 95
IF (FBK(K) .GT. (-0.00001)) FBKS=FBK(K) Y 96
XT(J)=DILUT*(FALHC(K)*HCAL/CARB(K)-X(J)) Y 07
100 CONTINUE v '
.-, i y b
Y 99
C ENTRAIN OTHER SPECIES y
IF (IALFT.LE.O) GO TO 120 Y
DO 110 K=1,IALFT Y in
J=LOCALF(K) Y 104
XT(J)=DILUTMCALFT(K)-X(J) ) Y ins
110 CONTINUE v :^
i 1U o
Y-2
-------
120 IF (ICR.LE.O) GO TO 131
DO 130 JJ=1,ICR
J=IEMLS(JJ+2)
XT(J)=DILUT*(ALOFCR(JJ)-X(J))
130 CONTINUE
131 IF (IBSP.LE.O) GO TO 140
DO 134 J=1,IBSP
IF (ACB4(J).LE.O.) GO TO 133
DO 132 LL=1,NHC
K-IH(LL)
XT(K)=DILUT*(FALHC(LL)*HCAL/CARB(LL)+ALOFBI(J)*
1 BFRAC(LL,J)/CBTOT(J)-X(K))
132 CONTINUE
GO TO 134
133 K=IBLS(J)
XT(K)=DILUT*(ALOFBI(J)-X(K))
134 CONTINUE
INPUT EMISSIONS
140 IF (T.GE.ESTOP) GO TO 221
FNOW=Z1/HT
IF (AMIX(l).GE.O.) FNOW=AMIX(1)/HT
150 I=IFIX(T/60.)
ENOW=0.
ZZ=(T-FLOAT(I*60))/60.
•*• \ J. i j. / ^
IF (NEM.GT.O) ENOW=((((ZZ*EC(I)+EC(I-l))*ZZ+EC(I-2))*ZZ+EC(I-3
1))*ZZ+EC(I-4))*FNOW/60.
DO 160 J=1,ISP
IF (NEM.GT.O.AND.J.LE.2) ENOWS(J)=ENOW
IF (NEM.LE.-l)
1ENOWS(J) = ((((ZZ*ES(I,J)+ES(1-1,J))*ZZ+ES(1-2,J))*ZZ
2 +ES(I-3,J})*ZZ+ES(I-4,J))*FNOW/60.
160 CONTINUE
DO 220 LL=1,ISP
IF (EMSP(LL).NE.IINX ) GO TO 190
DO 180 K=l,2
J=INOX(K)
XT (J) =XT (J) H-ENOWS (LL) *EXN*FENX (K)
GO TO 220
IF (EMSP(LL).NE.IIHC ) GO TO 210
DO 200 K=1,NHC
J=IH(K)
200 XT(J)=XT(J)+ENOWS(LL)*EHC*RCTY(K)/CARB(K)
GO TO 220
210 J=IEMLS(LL)
XT(J)=XT(J)+ENOWS(LL)*ECI(LL)
220 CONTINUE
221 IF (IBSP.LE.O) GO TO 230
IF (T.GE.BESTOP) GO TO 230
FNOW=Z1/HT
IF (AMIX(l).GE.O.) FNOW=AMIX(1)/HT
I=IFIX(T/60.)
ZZ=(T-FLOAT(I*60))/60.
170
180
190
DO 222 J=1,IBSP
ENWS1(J)=((((ZZ*BECO(I,J)+BECO(I-1,J))*ZZ+BECO(I-2,J))*ZZ
1 +BECO(I-3,J))*ZZ+BECO(I-4,J))*FNOW/60
222 CONTINUE
DO 225 J=l,IBSP
IF (ACB4(J).LE.O.) GO TO 224
DO 223 LL=1,NHC
K=IH(LL)
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
107
108
109
110
111
111A
111B
111C
HID
HIE
111F
111G
111H
1111
111J
111K
11 1L
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
143A
143B
143C
143D
143E
143F
143G
143H
1431
143J
143K
143L
143M
143N
1430
Y-3
-------
223
224
225
C
C DO
C
230
231
240
250
251
260
270
XT(K)=XT(K)+ENWS1
-------
1 , -. -.
1 -QM
-------
ENTRY DIFSET y 242
380 CONTINUE Y 243
TOLD=T Y 244
•TINV-1./60. Y 245
FCT=((3355.7046E-6)*TEMP-1.)/TEMP y 246
IOLD=0 Y 247
TCI=FLOAT{JSRT) Y 248
DHC=HCAL-HCBK . Y 249
DXN=XNAL-XNBK Y 250
D03=OZAL-OZBK Y 251
IF (DHC.LT.O.) HCAL=HCBK y 252
IF (DXN.LT.O.) DXN=0. Y 253
IF (D03.LT.O.) D03=0. y 254
HT=AMIX(1) Y 255
IF (HT.LT.O.) HT=AMXX(1) Y 256
IF (IP.EQ.O) RETURN y 257
IPST=0 Y 257A
IBST1=0 Y 257B
IBST2=0 Y 257C
11=0 Y 258
DO 390 J=1,IP Y 259
IR=IPH(J) Y 260
R(IR)=P{1,J)*RFCT(J) Y 261
IF M.GT.l) R(IR)=R(IR)*R(1) Y 262
IF (R(IR).LT.O.) R(IR)=0. Y 263
390 CONTINUE Y 264
ZENI=XZ(1) v
ISP=IS1+ICR Y 265A
RETURN Y 266
END Y 267-
Y-6
-------
SUBROUTINE COSET (METH,NQ,EL,TQ,MAXDER) z 1
C PART OF THE GEAR ROUTINES 5 \
C Z 3
SAVE ^ \
DIMENSION PERTST(12,2,3), EL(13), TQ(4) Z
,,, , Z 6
/*-1-'2-'1-' -3158,. 07407,. 01391, .002182,. 0002945,. OOOOZ 7
,. 0000003524, 1. , 1 . , .5, . 1667, . 04167, 1. , 1 . , 1. , 1 . , 1 , 1Z 8
9
n ../.f.f.r 10
. 33, 70. 08, 87. 97, 106. 9, 126.7, 147.4, 168. 8r 191. 0,1., 3. 0,6. 0,9. 167, 1Z 11
.5,l.,l.,l.,l.,l.,l.ri.fi./ 7 19
10 MAXDER=5 ^ ^
GO TO (20,30, 40, 50,60), NQ 7 \\
20 EL(1)=1.0 L \\
GO TO 70 * :^
30 EL(1)=6.6666666666667E-01 ! }l
EL(3)=3.3333333333333E-01 7 to
GO TO 70 |g
40 EL(1)=5.4545454545455E-01 7 i?
EL(3)=EL(1) 7 ;"
EL(4)=9.0909090909091E-02 7 „
GO TO 70 *i
so EL(i)=o.48 J ;;
EL{3)=0.7 J 24
EL(4)=0.2 J II
EL(5)=o.o2 L ;;
GO TO 70 '7 9«
60 EL(1)=4.3795620437956E-01 7 ^
EL(3)=8.2116788321168E-01 f ^
EL(4)=3.1021897810219E-01 7 ^
EL(5)=5.4744525547
-------
FUNCTION CLKMIN (X) AA 1
C CALCULATE THE NUMBER OF MINUTES BASED ON A 24 HR CLOCK AA 3
C AA 4
SAVE AA 5
JSTRT=IFIX(X+0.1) AA 6
JMIN=JSTRT-((JSTRT/100)*100) AA 7
CLKMIN=FLOAT((JSTRT/100)*60+JMIN) AA 8
RETURN AA 9
END AA 10-
AA-1
-------
SUBROUTINE INTERP (TOUT,Y,NO,YO) an
C AB •*•
C PERFORM EXACT INTERPOLATION IN TIME ™ ?
C Atf J
SAVE JB 4
COMMON /GEAR1/ T,HfDUMMY(4),N,IDUMMY(2),JSTART AB fi
DIMENSION YO(NO), Y(NO,1) V? ,
DO 10 1=1,N ?f ^
10 YO(I)=Y(I,1) ~ I
L=MAXO(JSTART+1,2) a? i n
S=(TOUT-T)/H ?f ,10
Sl-1. M U
DO 30 J=2,L J? ^
S1=S1*S ^^ 13
DO 20 1=1,N ^ "
20 YO(I)=YO(I)+S1*Y(I,J) ?! Jc
30 CONTINUE ^ 16
RETURN M 17
END AB 18
AB 19-
AB-1
-------
SUBROUTINE NSBSLV
-------
SUBROUTINE NSCORA (N,IA,JA,A,ZAP,JAWORK,AWORKfC,IR,ICT)
PART OF THE GEAR ROUTINES
SAVE
INTEGER IA{1),JA(1),IAP(1),C(1),IR(1),ICT<1)
REAL A(l),AWORK(l)fJAWORK(l)
DO 10 K=1,N
ICK=C(K)
10 IR(ICK)=K
JMIN=1
DO 30 K=1,N
ICK=C{K)
JMAX=JMIN+IA(ICK+1)-IA(ICK)-1
IF (JMIN.GT.JMAX) GO TO 30
IAINK=IA(ICK)-1
DO 20 J=JMIN,JMAX
IAINK=IAINK+1
JAOUTJ=JA(IAINK)
JAOUTJ=IR(JAOUTJ)
JAWORK(J)=JAOUTJ
20 AWORK(J)=A(IAINK)
30 JMIN=JMAX+1
DO 40 1=1,N
40 ICT(I)=IAP(I)
JMIN=1
DO 60 1=1, N
ICK=C(I)
JMAX=JMIN+1A(ICK+1)-IA(ICK)-1
IF {JMIN.GT.JMAX) GO TO 60
DO 50 J=JMIN,JMAX
JAOUTJ=INT(JAWORK(J))
ICTJ=ICT(JAOUTJ)
A(ICTJ)=AWORK(J)
ICT(JAOUTJ)=ICTJ+1
50 CONTINUE
60 JMIN=JMAX+1
RETURN
END
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
AD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39-
AD-1
-------
SUBROUTINE NSCORD (N,IA,JA,IAWORK,JAWORK,C,IR,ICT)
C
C PART OF THE GEAR ROUTINES
C
SAVE
INTEGER IA(1),JA(1),IAWORK(1),JAWORK(1),C(1),IR{1),ICT(1)
DO 10 I=lfN
10 ICT(I)=0
IAWORK(1)=1
DO 30 K=1,N
ICK=C(K)
JMIN=IAWORK(K)
JMAX=JMIN+IA(ICK+1)-IA(ICK)-1
IAWORK
-------
SUBROUTINE NSNFAC (N, IA, JA, A, IL, JL, ISL, L, D,
1ER )
C
C PART OF THE GEAR ROUTINES
C
SAVE
INTEGER IA(1),JA(1),IL(1),JL(1),ISL<1)
INTEGER IU(l),JU(l),ISU(l)fIRLU),JRL{l)
REAL A(1),L{1),D(1),U(1),X(1)
REAL LKI
IER=0
DO 10 K=1,N
IRL(K)=IL(K)
10 JRL(K)=0
DO 180 K=1,N
X(K)=0.
11=0
IF (JRL(K) ,EQ.O) GO TO 30
I=JRL(K)
20 I2=JRL(I)
JRL(I)=I1
11=1
X(I)=0.
1=12
IF (I.NE.O) GO TO 20
30 JMIN=ISU(K)
JMAX=JMIN+IU (K+l) -IU (K) -1
IF (JMIN.GT.JMAX) GO TO 50
DO 40 J=JMIN, JMAX
JUJ=JU ( J)
40 X(JUJ)=0.
50 JMIN=IA(K)
JMAX=IA(K+1)-1
DO 60 J=JMIN, JMAX
JAJ=JA(J)
60 X(JAJ)=A(J)
1=11
IF (I.EQ.O) GO TO 100
70 IRLI=IRL(I)
LKI=-X(I)
L(IRLI)=-LKI
JMIN=IU(I)
JMAX=IU(I+1)-1
IF (JMIN.GT.JMAX) GO TO 90
ISUB=ISU(I) -1
DO 80 J=JMIN,JMAX
ISUB=ISUB+1
JUJ=JU(ISUB)
80 X(JUJ)=X(JUJ)+LKI*U(J)
90 I=JRL(I)
IF (I.NE.O) GO TO 70
100 IF (X(K) .EQ.O.) GO TO 190
DK=1./X(K)
D(K)=DK
IF (K.EQ.N) GO TO 180
JMIN=IU(K)
JMAX=IU(K+1}-1
IF (JMIN.GT,. JMAX) GO TO 120
ISUB=ISU(K)-1
DO 110 J=JMIN,JMAX
ISUB=ISUB+1
JUJ=JU(ISUB)
110 U(J)=X(JUJ)*DK
120 CONTINUE
IU, JU, ISU,U,X,IRL,JRL, IAF
AF
AF
AF
AF
AF
AF
AF
AF
rtr
AF
AF
AF
AF
A r
Ar
AF
AF
AF
•* T-l
AF
AF
AF
AF
AF
AF
AF
AF
AF
TV T?
Ar
TV r1
Ac
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
AF
1
2
3
4
5
6
7
8
10
11
12
13
T A
14
15
16
17
18
19
20
21
22
23
24
25
26
O ~T
27
O O
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
AF-1
-------
1=11 AF 65
IF (I.EQ.O) GO TO 170 ap 66
130
Il-JRL(I) AF 6Q
IF (IRL(I) .GE.ILd+1)) GO TO 160 AF 69
ISLB=IRL(I)-IL(I)+ISL(I) AF 70
J=JL(ISLB) AF 71
140 IF (I.GT.JRL(J)) GO TO 150 AF 72
J=JRL(J) AF 73
GO TO 140 AF 74
150 JRL(I)=JRL(J) AP 75
JRL(J)=I AP 7g
160 1=11 ^ ^
IF (I.NE.O) GO TO 130 AF 78
170 ISLK=ISL(K) AP 79
IF (IRL(K) .GE.IL(PC+1» GO TO 180 AF 80
J=JL(ISLK) AF 81
JRL(K)=JRL(J) AF 82
JRL(J)=K AP g3
180 CONTINUE AF 84
RETURN AF fl ,
190 IER=K £
RETURN AF °°
W 88-
AF-2
-------
c
c
c
c
c
c
PART OF THE GEAR ROUTINES
SAVE
INTEGER IA(1),JA(1>,IL(1),JL(1),ISL(1)
INTEGER IU(l)rJU
-------
90 PK=PPK AG 63
PPK=P(PK) . AG I}
IF (V(PPK)-VJ) 90,110,100 AG fic:
100 P(PK)=LSFS ar ll
V(LSFS)=VJ AG °°
P(LSFS)=PPK a7 *'
PPK=LSFS ^ "
LSFS=LSFS+1 ar in
no CONTINUE Vp '!:
G0 T0 70 AG 72
120PI-PU) AG 73
IF (V(PI).NE.K) GO TO 450 AG 74
IF (LASTI.EQ.O) GO TO 130 AG 75
IF (LASTID.NE.LSFS-3) GO TO 130 AG 76
IRLL=IRL(LASTI) AG 77
ISL(K)=IRLL+1 AG 7Q
IF (JL(IRLL).NE.K) ISL(K)=ISL(K)-1 AG 7q
IL(K+1)=IL(K)+LASTID AG ™
IRL(K)=ISL(K) Ar I"
G° T° 16° AG 82
130 ISL(K)=JLPTR+1 ar li
PI=P(1)
PI=P P ) AG 84
v ' ar o t;
VI=V(PI) ' AG 86
140 IF (VI.GT.N) GO TC 150 ar In
JLPTR=JLPTR+1 Ag gg
IF (JLPTR.GT.MAXPL) GO TO 460 ar flQ
JL(JLPTR)=VI fG H
PI=P(PI) AG 9?
VI-V(PI) AG I1
GO TO 140 AG "
150 IRL(K)=ISL(K) f^ \\
IL(K+1)=IL(K)+JLPTR-ISL(K)+1 ar qc
160 P(l)=l
v iUN+I AG 96
V V J. / INTX a_ Q_
LSFS=2 AG 98
JMIN=IRA(K) f3 II
JMAX»IA(K+1)-1 ££ ^o
IF (JMIN.GT.JMAX) GO TO 200 Ar ini
DO 190 J=JMIN,JMAX ar
T7TT-»/-r\ ' "(a
VJ=JA(J)
PPK=1 AG
170PK=PPK AG
PPK=P(PK) AG 106
IF (V(PPK)-VJ) 170,410,180 ar
180 P(PK)=LSFS AG
V(LSFS)=VJ AG
P(LSFS)=PPK AG
190 LSFS=LSFS+1 ar
200 LASTI = 0 AG
T=K
210 I-JRL(I) AG
IF (I.EQ.O) GO TO 260 a7
PPK=I Aj:
JMIN=IRU(I) A^
JMAX=ISU(I)+IU(I+1)-IU{I)-1 ' ar ip
IF (LASTI.GT.I) GO TO 220 ar
LAST 1=1 ^
LASTID=JMAX-JMIN ^
IF (JU(JMIN).NE.K) LASTID=LASTID+1 Ar
220 IF (JMIN.GT.JMAX) GO TO 210 a7
DO 250 J=JMIN,JMAX ?P
VJ=JU(J)
230 PK=PPK «
AG-2
-------
PPK=P(PK)
IF (V(PPK)-VJ) 230,250,240 AG,
240 P(PK)=LSFS ?-
V(LSFS)=VJ AG
P(LSFS)=PPK AG
PPK=LSFS ~~
250 LSFS=LSFS+1 A
GO TO 210
260 PI-P(l) AG 1?«
IF (V(PI).NE.K) GO TO 420 ar
IF (LASTI.EQ.O) GO TO 270 ac
IF (LASTID.NE.LSFS-3) GO TO 270 ar
IRUL=IRU(LASTI) AP
ISU(K)=IRUL+1 Ar
IF (JO(IROL).NE.K) ISO(K)=ISU(K)-1 ar
IU(K+1)=IU(K)+LASTID IT
IRU(K)=ISU(K) AG
GO TO 300 143
270 ISU(K)=JUPTR+1 A^ l\\
PI=P(1) 145
pl=p(pl) AG 146
VI-V(PI) AG W
280 IF (VI.GT.N) GO TO 290 ar
JUPTR=JUPTR-l-l ' AG
IF (JUPTR.GT.MAXPU) GO TO 430 ar
JU(JUPTR)=VI AG
PI=P(PI)
VI=V(PI) AG 153
GO TO 280 AG 154
290 IRU(K)=ISU(K) AG ]l5
IU(K+1)=IU(K)+JUPTR-ISU(K)+1 AP , ?!
300 I=K AG 15_~
310 I1=JRL(I) AG
CEND=ISL(I)+IL(I+1)-IL(I) ar
IF (IRL(I).GE.CEND) GO TO 320 ar
IRLI=IRL(I) AG
J=JL(IRLI) AG
JRL(I)=JRL(J) AG
JRL(J)=I AG
320 i=n AG 165
IF (I.EQ.O) GO TO 330 A?
GO TO 310
330 I=K AG 169
340 I1=JRU(I) AG
REND=ISO(I)+IU{I + 1)-IU(I) a^
IF (IRO(I) .GE.REND) GO TO 350 ^
IRUI=IRU(I) AG 173
J=JU(IRUI) AG 174
JRU(I)=JRU(J) AG 175
JRU(J)=I AG 176
350 1=11 AG 177
IF (I.EQ.O) GO TO 360 AG, }~L*
IRU(I)=IRU(I)+1 AG ^79
GO TO 340 AG 18°
360 I=IRAC(K) AG 181
IF (I.EQ.O) GO TO 390 AG, n18?
370 I1=JRA(I) AG 183
AG 184
IF (IRA(I).GE.IA(I+1)) GO TO 380
IRAI = IRA(I)
IF (JA(IRAI).GT.I) GO TO 380
JAIRAI=JA(IRAI)
JRA(I)=IRAC(JAIRAI) AG
AG-3
-------
IRAC(JAIRAI)=I AG 191
380 1=11 AG 192
IF (I.NE.O) GO TO 370 AG 193
390 CONTINUE AG 194
ISL(N)=JLPTR AG 195
ISU(N)=JUPTR AG 196
RETURN AG 197
400 CALL YSMER ('ROW'(,K, ' OF A IS NULL') AG 198
GO TO 470 AG 199
410 CALL YSMER ('ROW'(,K, ' HAS DUPLICATE ENTRY') AG 200
GO TO 470 AG 201
420 CALL YSMER ('ROW',K,' HAS A NULL PIVOT') AG 202
GO TO 470 AG 203
430 CALL YSMER ('ROW',,K, ' EXCEEDS JU STORAGE') AG 204
GO TO 470 AG 205
440 CALL YSMER ('COL',K, ' HAS DUPLICATE ENTRY') AG 206
GO TO 470 AG 207
450 CALL YSMER ('COL',,K,' HAS A NULL PIVOT') AG 208
GO TO 470 AG 209
460 CALL YSMER ('COL',,K, ' EXCEEDS JL STORAGE') AG 210
470 IER-1 AG 211
RETURN AG 212
END AG 213-
AG-4
-------
SUBROUTINE OZMX (C,TLL,TOUT,NO) au ,
C ^^ ^
AH 9
C CALCULATE THE MAXIMUM 1 HR AVERAGE VALUE USING A RUNNING AVERAGE AH 3
SAVE JJ} *
51,5), OZ(61,5), OZA{5), TL(5), NT(5) AH 6
RETURN
AH 7
AH 8
COMMON /CALC/ NR, KR <2ob;i2J ,~A(200^ S (200) , R (200) , ITYPE (200) , IA (60) A^ 10
™K«,™ / ,JA(800),DILUT,TEMP,ERR,START,STOPP,TPRNT,TSTEP,ZENIAH 11
COMMON /SPEC/ NS,CARB(20),RCTY(20),XNF(2),IH<20),iNOX(2;, AH 12
1 FIN«C(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN, AH 13
2 XNAL,NOZ,FENX(2),CR(61),NI,JOZ{5) AH 14
AH 1 ^
COMMON /CALCHR/ SPECIS(61) V£ , JL
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61) AH 1SR
CHARACTERM SPECIS, HCSPEC, REACT, PLSP £j| ^
NQ=JSTART ?? "D
IF (T.NE.START) GO TO 20 VC ^
DO 10 1=1,NOZ JJ ^
KOZ=JOZ(I) ™J in
RUN(1,I)=C(KOZ,1) A* on
NT(I)=1 AH 20
TL(I)=START+1. J2 oo
OZM(I)=0. ^ 22
OZA(I)=0. A[J 2^
10 CONTINUE Mi 24
TLL=TL(1) ™ 25
AH 26
20 DO 130 JJ=1,NOZ ^J 27
KOZ=JOZ(JJ) VM oo
30 DO 40 1=1,61 AH 29
RR=(TL(JJ)+FLOAT(I-1)-T)/H ™ ??
IF (RR.GT.O.) GO TO 50
AH "^ 9
IF (TL(JJ)+FLOAT(I--1).GT. STOPP) GO TO 50 AH „
OZ(I,JJ)=C(KOZ,1) At; ~
RH=1. AH 34
DO 40 J=1,NQ AH 35
RH=RH*RR AH 36
40 OZ(I,JJ)=OZ(I,JJ)+RH*C(KOZ,J+1) ' *„ ^
1=61 ^^ Ja
50 1=1-1 AH 39
TL(JJ)=TL(JJ)+FLOAT(I) ^ J?
DO 90 J=1,I AH 41
IF (NT(JJ) .GT.60) GO TO 70 AJj ^
NTT=NT(JJ) AH 4J
RUN(NTT+1,JJ)=OZ(J,JJ) A" ^
NT(JJ)=NT(JJ)+1 Af; 45
IF (NT(JJ).LT.61) GO TO 90 ™ ^
SIX(JJ)=0. AH 47
S2(JJ)=RUN(60,JJ) AJJ 48
DO 60 K=l,29 AH 49
SIX(JJ)=SIX(JJ)+RUN(2*K+1,JJ) ™ 1Q,
60 S2(JJ)=S2(JJ)+RUN(2*K,JJ) A" „
70 sv=SIX(JjrSIX(JJ)+4'*S2(JJ)+RUN(1'JJ)+^ A« "
SIX(JJ)=S2(JJ)-RUN(2,JJ) AJJ ^
S2(JJ)=SV+OZ(J,JJ) A|J "
RUN(61,JJ)=OZ(J,JJ) A, 56
DO 80 K=l,60 AH 57
80 RUN(K,JJ)=RUN(K+1,JJ) AJJ 58
IF (OZA(JJ).GT.OZM(JJ)) OZM(JJ)=OZA(JJ) ^ ^
AH-1
-------
IF (OZA(JJ).EQ.OZM(JJ)) TM
-------
SUBROUTINE SAVIT (T,C)
SAVE INTERMEDIATE CONCENTRATIONS FOR PLOTTING PURPOSES
SAVE
COMMON /FRPLOT/ SAVCON(80,5),SAVTIM(SO),NT,INOW
COMMON /SPEC/ NSfCARB(20),RCTY(20),XNF(2),IH(20),INOX(2),
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN,
2 XNAL,NOZ,FENX{2),CR(61), NI,KOZ(5)
COMMON /SPECHR/ HCSPEC(20), PLSP(5)f REACT(61)
CHARACTER*4 HCSPEC, REACT, PLSP
DIMENSION C(80)
DATA NFRST/1/
IF (NFRST.NE.l.AND.T.EQ.TOLD) RETURN
IF (NT.EQ.O) NT=1
NFRST=2
TOLD=T
IF (NT.GT.80) RETURN
IF (T.LT.SAVTIM(NT)) RETURN
SAVTIM(NT)=T
DO 10 II=lfNOZ
I=KOZ(II)
SAVCON(NT,II)=C(I)
10 CONTINUE
NT=NT+1
RETURN
END
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
AI
1
2
3
4
5
6
7
• 8
9
9A
9B
9C
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28-
AI-1
-------
SUBROUTINE SORDER (N,IA,JA,P,Q,MAX,V,L,IER) AJ 1
C AJ 2
C PART OF THE GEAR ROUTINES AJ 3
C AJ 4
SAVE AJ 5
INTEGER IA{1),JA(1),P(1),Q(1),V(1),L(1) AJ 6
INTEGER S,SFS,PI,PJ,VI,VJ,VK,QVK,DTHR,DMIN AJ 7
IER=0 AJ 8
DO 10 S=1,MAX AJ 9
10 L(S)=S+1 AJ 10
SFS=1 AJ 11
L(MAX)=0 AJ 12
DO 20 K=1,N AJ 13
P(K)=K AJ 14
Q(K)-K AJ 15
V(K)=1 AJ 16
20 L(K)=0 AJ 17
SFS=SFS+N AJ 18
DO 100 K=1,N AJ 19
JMIN=IA(K) AJ 20
JMAX=IA(K+1)-1 AJ 21
IF(JMIN.GT.JMAX+1) GO TO 290 AJ 22
KDIAG=0 AJ 23
DO 90 J=JMIN,\JMAX AJ 24
VJ=JA(J) AJ 25
IF (VJ.NE.K) GO TO 30 AJ 26
KDIAG=1 AJ 27
GO TO 90 AJ 28
30 LLK=K AJ 29
40 LK=LLK AJ 30
LLK=L(LK) AJ 31
IF (LLK.EQ.O) GO TO 50 AJ 32
IF (V(LLK)-VJ) 40,60,50 AJ 33
50 LLK=SFS AJ 34
IF (LLK.EQ.O) GO TO 300 AJ 35
SFS=L(SFS) AJ 36
V(K)=V(K)+1 AJ 37
V(LLK)=VJ AJ 38
L(LLK)=L(LK) AJ 39
L(LK)=LLK AJ 40
60 LLK=VJ AJ 41
70 LK=LLK AJ 42
LLK=L(LK) AJ 43
IF {LLK.EQ.O) GO TO 80 AJ 44
IF (V(LLK)-K) 70,90,80 AJ 45
80 LLK=SFS AJ 46
IF (LLK.EQ.O) GO TO 300 AJ 47
SFS=L(SFS) AJ 48
V(VJ)=V(VJ)+1 AJ 49
V(LLK)=K AJ 50
L(LLK)=L(LK) AJ 51
L(LK)=LLK AJ 52
90 CONTINUE AJ 53
IF (KDIAG.EQ.O) GO TO 320 AJ 54
100 CONTINUE AJ 55
J=0
AJ 56
DTHR=0 AJ 57
DMIN=N AJ 58
1=0 AJ 59
110 I=I+! AJ 60
IF (I.GT.N) GO TO 280 AJ 61
JMIN=MAXO(J+1,I) AJ 62
IF (JMIN.GT.N) GO TO 140 AJ 63
120 DO 130 J=JMIN,N AJ 64
AJ-1
-------
VI=P(J> AT »
IF (V(VI).LE.DTHR) GO TO 150 ?i "
IF (V(VI).LT.DMIN) DMIN=V(VI) ar c?
130 CONTINUE b '
140 DTHR=DMIN AJ 68
DMIN=N AJ 69
JMIN-I AJ 70
GO TO 120
71
150 PJ=P(I) AJ 72
P(J)=PJ AJ 73
Q(PJ)=J ^J 74
PI=VI AJ 75
P(I)=PI AJ 76
Q(PI)=I ™ 77
LI-VI AJ 78
160 LI=L(LI) AJ 79
IF (LI.EQ.O) GO TO 210 AlJ !?
VK=V(LI) Avl °l
LLK=VK AX f?
LJ=VI AJ 83
170 LJ=L(LJ) AJ 84
IF (LJ.EQ.O) GO TO 200 AlJ ?^
VJ=V(LJ) AJ S6
IF- (VJ.EQ.VK) GO TO 170 A^ H
180 LK=LLK AJ 88
LLK=L(LK) A^ 89
IF (LLK.EQ.O) GO TO 190 *7 *?
IF (V(LLK)-VJ) 180,, 170, 190 ^T QO
190 LLK=SFS AJ y^
IF (LLK.EQ.O) GO TO 310 A^ ^
SFS=L(SFS) All 94
V(VK)=V(VK)+1 Avl 9^
V(LLK)=VJ AJ 96
L(LLK)=L(LK) . AJ 97
L(LK)=LLK Av? 98
GO TO 170 AJ "
200 IF (V(VK).GT.V(VI)) GO TO 160 ^ |°?
1=1+1 AJ 101
QVK=Q(VK) A^ ]-°2
PI-P(I) AJ 103
P(QVK)=PI AJ 104
Q(PI)=QVK AJ 105
P(I)=VK AJ 106
Q(VK)=I AJ 107
GO TO 160 AJ 108
210 LI=VI AJ 109
220 IF (L(LI).EQ.O) GO TO 270 ^
LI=L(LI) A^
VK=V(LI) AJ
LLK=VK AJ
QVK=MINO(Q(VK),I) A^
230 LK=LLK AJ
LLK=L(LK) AJ
IF (LLK.EQ.O) GO TO 240 A^
VJ=V(LLK) AJ
IF (Q(VJ).GT.QVK) GO TO 230 A^
V(VK)=V(VK)-1 AJ
L(LK)=L(LLK) AJ
L(LLK)=SFS AJ 122
SFS=LLK AJ 123
LLK=LK AJ 124
GO TO 230 AJ 125
240 IF (Q(VK).LE.I) GO TO 260 AJ 126
IF (V(VK).LE.DTHR) GO TO 250 ^ ^27
Ao 128
AJ-2
-------
IF ((DTHR.LT.V(VK)).AND.(V(VK).LT.DMIN)) DMIN=V(VK)
GO TO 220
250 J=MINO(Q(VK)-1, J)
DTHR=V(VK)
GO TO 220
260 L(LK)=SFS
SFS=L(VK)
GO TO 220
270 L(LI)=SFS
SFS=L(VI)
GO TO 110
280 RETURN
290 CALL YSMER {'ROW',K,' OF A IS NULL')
GO TO 330
300 CALL YSMER ('ROW',K,' EXCEEDS STORAGE')
GO TO 330
310 CALL YSMER ('VERTEX',VI,' EXCEEDS STORAGE')
GO TO 330
320 CALL YSMER ('COLUMNAR,'.. DIAGONAL MISSING')
330 IER=1
RETURN
END
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
AJ
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150-
AJ-3
-------
SUBROUTINE YSMER (A,K,A1) ^ x
\*
C WRITE ERROR MESSAGES ^ ?
C AK d
SAVE ^ ^
C INTEGER AfAl{5) av e
CHARACTER*6 A av L
CHARACTER*4 Al{5) AK fiR
COMMON /INOUT/ INP,LOUT,ITAPE,IALN,IALL,INHHrIOZC AK 7
WRITE (LOUT,10) A,K,(Al(II),11=1,5) AK fl
RETURN £ J
c AK 10
10 FORMAT (1X,A4,I6,5A4) ^ }]
END AK 13-
AK-1
-------
FUNCTION CIRC (TI,XI,YI) AL 1
C AL 2
C PERFORM INTERPOLATION USING FOUR POINTS AL 3
C AL 4
SAVE AL 5
DIMENSION XI(3), YI{3) AL 6
DX=XI{3)-XI(1) AL 7
DY=YI(3)-YI{1) AL 8
X=(XI{2)-XI(1))/DX AL 9
Y=(YI(2)-YI(1))/DY AL 10
T=(TI-XI{1))/DX AL 11
IF (X.EQ.Y) GO TO 20 AL 12
B=((X*X+Y*Y)*0.5-X)/(Y-X) AL 13
TT=SQRT(B*B+2.*T*(1.-B)-T*T) AL 14
CX=B+TT AL 15
IF (X.GT.Y) CX=B-TT AL 16
IF (CX.LT.O..OR.CX.GT.l.) GO TO 20 AL 17
10 CIRC=CX*DY+YI(1) AL 18
RETURN AL 19
20 CX=T*Y/X AL 20
IF (T.GT.X) CX=(T"X)M1.-Y)/U.-X)+Y AL 21
GO TO 10 AL 22
END
AL 23-
AL-1
-------
SUBROUTINE SPLOT
PLOTS SPECIES CONCENTRATIONS AS A FUNCTION OF TIME
SAVE
COMMON /TITL/ ITTL(36)
COMMON /INOUT/ IN, IOUT, ITAPEr IALNf IALL, INHH, IOZC
COMMON /CALC/ NR, KR (200f 12) , A (200) , S (200) , R (200) , ITYPE (200) ,
1 IA{ 60 ),JA (800 ),DILUT, TEMP, ERR, START, STOPP,TPRNT,
2 TSTEP,ZENI
COMMON /SUNLIT/ Z ( 10) , RTCON (10) , LAM1, INC, SLA, SLO, TZ, IY, IM ID
COMMON /SPEC/
COMMON /HOUR/
ISTRT,ISTOP,IINC,IEND,SPECIE,MAXZ,ITIME(24),
XZ(24),KKK(24),JSTRT,JSTOP,PSPEC,MNLM,MXLM,MAXL,
MAXJ
NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2),
FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN
XNAL,NOZ,FENX(2),C(61),NI,KOZ(5)
OZM(5),NGO,TM,DUMMM(5)
COMMON /FRPLOT/ SAVCON(80,5),SAVTIM(80),NT1,INOW
COMMON /PLTND/ JB.AR, JSYMB, CVERT (9) , TVERT (52, 2)
COMMON /NEED1/ JBLANK,MBLANK,IIHC,IINX,IICO,IIN02,IINO,1103
1 IIH20,JPLUS
DIMENSION JGRID(lOl), JSAV(lOl)
C
COMMON /CALCHR/ SPECIS(61)
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER*! JBAR, JSYMB
CHARACTER*2 ITTL
CHARACTERM SPECIS, HCSPEC, REACT, PLSP
CHARACTER*4 JGRID, CVERT, TVERT
CHARACTER*4 JBLANK,MBLANK,IIHC,IINX,IICO,IIN02,IINO 1103
1 IIH20,JPLUS
C
DIMENSION TPRINT(ll),TV1(10)
DATA MAXHC/101/,MAXNOX/50/,TGRID/100./,CGRID/50./
\*
NT=NT1-1
TCI=FLOAT(JSTRT)
DO 100 L=1,NOZ
IF (OZM(L).LE.O.) GO TO 100
C
C SET NORMALIZATION FACTORS AND VERTICAL LABELS
C
CLOW=0.
TLOW=0.
CH=OZM(L)*1.1
CH1=ALOG10(CH)
IAMEG=IFIX(CH1)
IF (CH1.LT.O.) IAMEG=IAMEG-1
CHIGH=CH/(10.**IAMEG)
REM=CHIGH-FLOAT(IFIX(CHIGH))
CHIGH=CH+(1.-REM)*(10.**IAMEG)
CSPAN=CGRID/CHIGH
DO 10 1=1,10
TV1(I)=(FLOAT(M) *.].) *CHIGH
10 CONTINUE
C
C SET HORIZONTAL LABELS
C
20 THIGH=STOPP
30 TSPAN=TGRID/THIGH
DO 40 J=l,ll
TPRINT(J)=(FLOAT(J-l)/10.)*THIGH+.5
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
1
2
3
4
5
6
7
8
9
9A
10
11
11A
12
13
14
15
16
17
18
19
20
21
21A
21B
21C
21D
21E
21F
21G
21H
211
21J
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
AM-1
-------
TPRINT (J) ==CLOCK {TCI, IFIX (TPRINT {J) ) )
40 CONTINUE
C
C CLEAR GRID
C
MAXHC1=MAXHC-1
DO 50 J=1,MAXHC
JSAV(J)=0
50 CONTINUE
C
IF (NT.LT.l) NT=1
DO 60 J=1,NT
KHC=IFIX((SAVTIM(J)-TLOW)*TSPAN+1.5)
KNOX=IFIX((SAVCON{J,L)-CLOW)*CSPAN-0.5)
KNOX=MAXNOX-KNOX
IF (KNOX.LT.l) GO TO 60
IF (KNOX.GT.MAXNOX) GO TO 60
IF (KHC.LT.l) GO TO 60
IF (KHC.GT.MAXHC1) GO TO 60
IF (KHC.LT.2) GO TO 60
JSAV(KHC)==KNOX
60 CONTINUE
C
WRITE (IOUT,110) TVERT(1, 1) , TV1 (1)
DO 90 K=2,MAXNOX
M=MOD((K-1),5)
DO 70 J=2,MAXHC1
JGRID(J)=JBLANK
IF (JSAV(J).EQ.K) JGRID(J)=JSYMB
70 CONTINUE
IF (M.NE.O) GO TO 80
JGRID(1)=JPLUS
JGRID{101)=JPLUS
WRITE (IOUT,130) TVERT(K,1),TV1(I),(JGRID(J),J=l,MAXHC)
GO TO 90
80 JGRID(1)=JBAR
JGRID(101)=JBAR
WRITE (IOUT,140) TVERT(K,1),(JGRID(J),J=l,MAXHC)
90 CONTINUE
WRITE (IOUT,150) CLOW
WRITE (IOUT,170) TPRINT
WRITE (IOUT,160) (ITTL(I),1=1,36)
WRITE (IOUT,180) PLSP(L)
100 CONTINUE
RETURN
FORMAT STATEMENTS
-+)/18Xr101A1/18X,101A1)
110 FORMAT (1H1////9X,A4,F5.3,1H+,10(10H-
120 FORMAT (1H1//////18X,1H+,10(10H
130 FORMAT (9X,A4,F5.3,101A1)
140 FORMAT (9X,A4,5X,101A1)
150 FORMAT (13X, F5 .3, 1H+, 10 (10H +) )
160 FORMAT (46X,36A2)
170 FORMAT (F21.0,10F10.0/63X,14H TIME (LOT) //)
180 FORMAT (1HO/45X,A4,36H CONCENTRATION AS A FUNCTION OF TIME)
END
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
AM
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112-
AM-2
-------
SUBROUTINE CURV1
-------
c
FOR YP AND PERFORM FORWARD ELIMINATION AN 65
DELS=SIGMAP*DELX1 AN 66
IF (ABS(DELS).GE.EXPMAX) GO TO 110 AN 67
EXPS=EXP(DELS) AN 68
SINHS=0.5*(EXPS-1,/EXPS) AN 69
SINHIN=1./(DELX1*SINHS) AN 70
DIAG1=SINHIN*(DELS*0.5*(EXPS+1./EXPS)-SINHS) AN 71
DIAGIN=1./DIAG1 AN 72
YP(1)=DIAGIN*(DX1-SLPP1) AN 73
SPDIAG=SINHIN*(SINHS-DELS) AN 74
TEMP(1)=DIAGIN*SPDIAG AN 75
IF (N.EQ.2) GO TO 30 AN 76
DO 20 1=2,NM1 AN 77
DELX2=X(I+1)-X(I) AN 78
IF (ABS(DELX2)/X(J+1).LT.0.02) GO TO 110 AN 79
DX2=(Y(I+1)-Y(I))/DELX2 AN 80
DELS=SIGMAP*DELX2 AN 81
IF (ABS(DELS).GE.EXPMAX) GO TO 110 AN 82
EXPS=EXP(DELS) AN 83
SINHS=.5*(EXPS-1./EXPS) AN 84
SINHIN-1./(DELX2*SINHS) AN 85
DIAG2=SINHIN*(DELS*{.5*(EXPS+l./EXPS))-SINKS) AN 86
DIAGIN=1./(DIAG1+DIAG2-SPDIAG*TEMP(I-1)) AN 87
YP(I)=DIAGIN*(DX2-DX1-SPDIAG*YP{!-!)) AN 88
SPDIAG=SINHIN*(SINHS-DELS) AN 89
TEMP(I)=DIAGIN*SPDIAG AN 90
DX1=DX2 AN 91
DIAG1=DIAG2 AN 92
20 CONTINUE AN 93
30 DIAGIN=1./(DIAG1-SPDIAG*TEMP(NM1)) AN 94
YP(N)=DIAGIN*(SLPPN-DX2-SPDIAG*YP(NM1)) AN 95
AN 96
C *** PERFORM BACK SUBSTITUTION AN 97
DO 40 1=2,N AN 98
IBAK=NP1-I AN 99
YP(IBAK)=YP(IBAK)-TEMP(IBAK)*YP(IBAK+1) AN 100
40 CONTINUE AN 101
IF (SIGMA.GT.O.) RETURN AN 102
IF (N.EQ.3) RETURN AN 103
IF (NCYC.GT.15) RETURN AN 104
IF (NCYC.GT.O) GO TO 50 AN 105
XTEST=(X(3)+X(2))/2. AN 106
YCORD=(Y(3)+Y(2))/2. AN 107
FACT=SQRT(ABS(SIGMA)) AN 108
YTEST=(YCORD*FACT+CIRC(XTEST,X(1),Y(1))+CIRC(XTEST,X(2),Y(2)))/(2.AN 109
1+FACT) . AN 110
ITHH=1 . AN 111
DY2=CURV2(XTEST,N,X,Y,YP,SIGMA,ITHH)-YTEST AN 112
DSAV=DY2 AN 113
SN— 1. AN 114
IF (DY2.GT.O.) SN=1. AN 115
FACT=0.3*(SN+2.) AN 116
DY2=0. AN 117
IT-1 AN 118
50 NCYC=NCYC+1 AN 119
DY1=DY2 AN 12Q
DY2=CURV2(XTEST,N,X,Y,YP,SIGMA,IT)-YTEST AN 121
IF (NCYC.GT.15) RETURN AN 122
IF (NCYC.GT.13.AND.NCHG.LT.2) GO TO 80 AN 123
IF
-------
70 SLPP1=SLPP1*(1.+SN*FACT) ,„
» T° 10 £
AN 13 1
80 IF (DY2/DSAV.LT.0.2) GO TO 70 AN
SLPP1=SLPPX
NCYC=15
GO TO 10
90 IF (N.EQ.2) GO TO 100 ^N 136
AN 137
C *** IF NO DERIVATIVES ARE GIVEN USE SECOND ORDER POLYNOMIAL AN 138
C INTERPOLATION ON INPUT DATA FOR VALUES AT ENDPOINTS. AN 139
SLPP1-(Y(2)-Y(1))/(X{2)-X(1)> AN 140
DELN=X(N)-X(NM1) ™ ™
DELNMl=X(NMl)-X(N-2) AN ,^
DELNN=X(N)-X(N-2) ^ ™
IF (ABS(DELN)/X(N) .LT.0.02) GO TO 110 AN 144
IF (ABS(DELN)/X(N) .LT.0.02) GO TO 110 AN 145
IF (ABS(DELNM1)/X(NM1) .LT.0.02) GO TO 110 AN 146
IF (ABS(DELNN)XX(N) .LT.0.02) GO TO 110 AN 147
C1=(DELNN+DELN)/DELNN/DELN m
C2— DELNN/DELN/DELNM1 CJ,
C3=DELN/DELNN/DELNM1 a^
SLPPN=C3 * Y (N-2 ) +C2 - Y (NM1 ) +C1 *Y (N) AN
DX2=X(3)-X{2) . ^
DX31=X(3)-X(1) ™
IF (ABS(DX2)/X(3). LT.0.02) GO TO 110 AN 154
IF (ABS(DX31)/X(3) .LT.0.02) GOTO 110 AN 155
C1=-{DX31+DELX1)/DX31/DELX1
C2=DX31/DELX1/DX2
C3=-DELX1/DX31/DX2
SLPPX=Cl*Y(l)-»-C2*Y(2)+C3*Y(3) AN 159
IF (Y{2) .GT.Y(l)) SLPPX-AMAX1 <0. , SLPPX) AN 160
FACT2=SQRT (ABS ( SIGMA)) AN ^
SLPPX=(SLPPX+FACT2*SLPP1)/(1.+FACT2) AN 162
SLPP1=SLPPX
IF (Y(N).GT.Y(NMl)) SLPPN=AMAX1 (0 . , SLPPN) AN 164
SLPNL=(Y(N)-Y(NM1))/DELN AN ,„
SLPPN=(SLPPN+SLPNL*FACT2)/(1.+FACT2) AN 166
SLPPN- (SLPPN-SLPNL*SIGMA) /{I. -SIGMA) AN 1 fil
G0 T0 10 AM \CQ
c AN 168
AN 169
C *** IF ONLY TWO POINTS AND NO DERIVATIVES ARE GIVEN, USE AN 170
C STRAIGHT LINE FOR CURVE AN 171
100 YP(1)=0.
YP(2)=0.
RETURN . AN 175
110 .SIGMA=-50. ™. L'l
RETURN ^
END AN 178-
AN-3
-------
FUNCTION CURV2 (T,N,X,Y,YP,SIGMA,IT) AO 1
c AO 2
C THIS FUNCTION INTERPOLATES A CURVE AT A GIVEN POINT AO 3
C USING A SPLINE UNDER TENSION. THE SUBROUTINE CURV1 SHOULD AO 4
C BE CALLED EARLIER TO DETERMINE CERTAIN NECESSARY AO 5
C PARAMETERS. AO 6
C AO 7
C ON INPUT— AO 8
C T = A REAL VALUE TO BE MAPPED ONTO THE AO 9
C INTERPOLATING CURVE. AO 10
C N = THE NUMBER OF POINTS WHICH WERE INTERPOLATED AO 11
C TO DETERMINE THE CURVE, AO 12
C X,Y = ARRAYS CONTAINING THE ORDINATES AND ABCISSAS AO 13
C OF THE INTERPOLATED POINTS, AO 14
C YP = AN ARRAY WITH VALUES PROPORTIONAL TO THE SECOND AO 15
C DERIVATIVE OF THE CURVE AT THE NODES AO 16
C SIGMA = THE TENSION FACTOR (ITS SIGN IS IGNORED) AO 17
C IT IS AN INTEGER SWITCH. IF IT IS NOT 1 THIS INDICATES AO 18
C THAT THE FUNCTION HAS BEEN CALLED PREVIOUSLY (WITH N,X, AO 19
C Y,YP, AND SIGMA UNALTERED) AND THAT THIS VALUE OF T AO 20
C EXCEEDS THE PREVIOUS VALUE. WITH SUCH INFORMATION THE AO 21
C FUNCTION IS ABLE TO PERFORM THE INTERPOLATION MUCH MORE AO 22
C RAPIDLY. IF A USER SEEKS TO INTERPOLATE AT A SEQUENCE AO 23
C OF POINTS, EFFICIENCY IS GAINED BY ORDERING THE VALUES AO 24
C INCREASING AND SETTING IT TO THE INDEX OF THE CALL. AO 25
C IF IT IS 1 THE SEARCH FOR THE INTERVAL (X (K) , X (K+l) ) AO 26
C CONTAINING T STARTS WITH K=l. AO 27
C THE PARAMETERS N,X,Y,YP AND SIGMA SHOULD BE INPUT AO 28
C UNALTERED FROM THE OUTPUT OF CURV1. AO 29
C AO 30
C ON OUTPUT— AO 31
C CURV2 = THE INTERPOLATED VALUE. FOR T LESS THAN AO 32
C X(l) CURV2 = Y(l). FOR T GREATER THAN X(N) CURV2 = Y(N). AO 33
C AO 34
C NONE OF THE INPUT PARAMETERS ARE ALTERED. AO 35
C AO 36
C *** AK CLINE/NCAR, COMM. ACM 17,4(APR.1974), 221 AO 37
C AO 38
SAVE . AO 39
DIMENSION X(N), Y(N), YP(N) AO 40
COMMON /EXPVAL/ EXPMAX AO 41
C AO 42
S=X(N)-X(1) AO 43
IT=IABS(IT) AO 44
0
C *** DENORMALIZE SIGMA AO 46
SIGMAP=ABS(SIGMA)* FLOAT(N-l)/S AO 47
C
4 g
C *** IF IT.NE. 1 START SEARCH WHERE PREVIOUSLY TERMINATED, AO 49
C OTHERWISE START SEARCH FROM BEGINNING AO 50
IF (IT.EQ.l) 11=2 AO 51
C AO 52
C *** SEARCH FOR INTERVAL AO 53
10 DO 20 1=11, N AO 54
IF (X(I)-T) 20,20,30 AO 55
20 CONTINUE A0 56
I=N AO 57
AO 5 8
C *** CHECK TO INSURE CORRECT INTERVAL AO 59
30 IF (X(I-l) .LE.T.OR.T.LE.X(l)) GO TO 40 AO 60
C AO 61
C *** RESTART SEARCH AND RESET II AO 62
C (INPUT (IT( WAS INCORRECT) AO 63
11=2 AO 64
AO-1
-------
AND.EXPTST
AND.EXPTST
.LT.O
.GT.O
LT.O
GT.O
EXPTST=-EXPMAX
EXPTST=EXPMAX
EXPTST=-EXPMAX
EXPTST=EXPMAX
GO TO 10
*** SET UP AND PERFORM INTERPOLATION
40 IF (SIGMA. LE. (-49.)) GO TO 50
DEL1=T-X(I-1)
DEL2=X(I)-T
DELS=X(I)-X(I-1)
EXPTST=SIGMAP*DEL1
IF (ABS(EXPTST) .GT.EXPMAX. AND.EXPTST
IF (ABS(EXPTST) .GT.EXPMAX. AND.EXPTST
EXPS1=EXP(EXPTST)
SINHD1-.5MEXPS1-1./EXPS1)
EXPTST=SIGMAP*DEL2
IF (ABS(EXPTST) .GT.EXPMAX
IF (ABS(EXPTST) .GT.EXPMAX,
EXPS=EXP (EXPTST)
SINHD2=.5* (EXPS-l./EXPS)
ALN1=ALOG(ABS(EXPS1) )
ALN2=ALOG(ABS(EXPS) )
IF (ABS(ALN1+ALN2) . GT.EXPMAX. AND .EXPS . GT. 1
IF (ABS(ALN1+ALN2) .GT. EXPMAX. AND .EXPS . LT . 1
1 EXPS=EXP (-EXPMAX)
IF (ABS (ALN1+ALN2) .LT. EXPMAX) EXPS=EXPS1 *EXPS
SINHS=. 5* (EXPS-l./EXPS)
CURV2=(YP(1)*SINHD1+YP(I-1)*SINHD2)/SINHS+((Y(I)-YP(I))*DEL1+(Y(I-
ll)-YP(I-l) )*DEL2)/DELS
IF ( (ABS (Y(I) -CURV2 ) +ABS ( Y ( 1-1 ) -CURV2) ) . GT . 1 . 001 * (ABS ( Y ( I ) -Y ( 1-1 ) )
1)) IT=-IT
11 = 1
RETURN
50 IF (I.EQ.l) 1=2
IF (ABS(X(I)-X(I-1))/X(I) .LT.0.02) 1=1+1
IF (I.GT.N) I=N
E-10)
E-10)
EXPS=EXP(EXPMAX)
IT=1
RETURN
END
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
-AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
AO
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101-
AO-2
-------
SUBROUTINE RLINE (KS1,JS)
SAVE
COMMON /NEED/ HC,XN,NL,OZP(20),OZN(11,11,5),MR,LS,HCS,XNS
COMMON /CNTRL/ SIG,SIGMA,INFO,NPTO,TSTRTfDTIM,Zl,Z2fDCON,EHC,EXN,
COMMON /HOUR/
COMMON /SPEC/
FLST,TLST
OZM(5),NGO,TM,DUMMM(5)
NS,GARB(20),RCTY(20),XNF(2),IH(20),INOX(2),
L FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN,
I XNAL,NOZ,FENX(2),C(61),NI,KOZ(5)
COMMON /INOUT/ IN,IOUT,ITAPE,IALN,IALL,INHH,IOZC
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT(61)
CHARACTER* 4 HCSPEC,REACT,PLSP
IF (KS1.GE.121) RETURN
IF (INFO.EQ.O) WRITE (IOUT,365) (PLSP(I),1=1,NOZ)
IF (INFO.LT.O) WRITE (IOUT,370) (PLSP(I),1=1,NOZ)
IF (KS1.GT.O) IBEG=KS1+1
IF (JS.LE.O) IBEG=1
INX=1
DO 20 K=IBEG,121
I=MOD(K,11)
IF (I.EQ.O) 1=11
HCC = FLOAT(J-l)*.l * HC
XNN = FLOAT(1-1)*.l * XN
CALL SIM (HCC, XNN,, OZN (I, J, 1) , INX)
DO 10 L=2,5
OZN(I,J,L)=OZM(L)
10 CONTINUE
20 CONTINUE
RETURN
365 FORMAT (1H1,//,14X,36HTHE FOLLOWING SIMULATIONS WERE DONE
1,6X,4HNMOC,11X,3HNOX,12X,5HRATIO,10X,5(A4,11X))
370 FORMAT (1H1,//,14X,36HTHE FOLLOWING SIMULATIONS WERE DONE
1,6X,4HNMOC,5X,3HNOX,7X,5HRATIO,5(6X,A4,6X,4HTIME))
366 FORMAT (1H1,//,14X,36HTHE FOLLOWING SIMULATIONS WERE DONE
1, 6X, 4HNMOC,11X,3HNOX,12X,5HRATIO,10X,5(A4,11X))
371 FORMAT (1H1,//,14X,36HTHE FOLLOWING SIMULATIONS WERE DONE
1,6X,4HNMOC,5X,3HNOX,7X,5HRATIO,5(6X,A4,6X,4HTIME))
END
fS
EHC,EXN,
i
L,XNIN,
./1HO/1H
./1HO/1H
./1HO/1H
./1HO/1H
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP '
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
AP
1
2
3
4
5
6
7
8
9
10
11
12
13
13A
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
35
36
37
38
39-
AP-1
-------
SUBROUTINE LINER
-------
DRAW THE ISOLINES
CALL WMNMX (SCR,11,11,11,OMIN,OMAX)
NW=0
DO 40 1=1,NL
WY(I)=9.
IF (OZP(I).LT.OMIN.OR.OZP(I).GT.OMAX) GO TO 40
NW=NW+1
WY(NW)=OZP(I)
40 CONTINUE
NCHR=4
NCNT=0
50 VAL=WY(1)*(10.**NCNT)
IF (VAL.GT.0.01) GO TO 60
NCNT=NCNT+1
GO TO 50
60 NCHR=NCHR+NCNT
REMB=WY(1)-FLOAT(IFIX(WY(1)*(10.**(NCNT+2))+0.1))/ (10.** (NCNT+2))
IF (REMB.GE.(0.001/(10.**NCNT))) NCHR=NCHR+1
IDG1=-(1000*NCHR+NW)
CALL CONMAP(SCR,11,11,11,XSIZE,YSIZE,WY,IDG1,KALCMP)
IF (KALCMP.LE.O) GO TO 130
CALL PLOT (0.5*XSIZE,0.5*YSIZE,-3)
CALL FRAME (0.,0.,0.,HC,HCC,HCX,HCM,IDIG1,0.,XN,XNC,XNX,XNM,IDIG2
1LBLBOT,12,LBLLFT,12,LBLTOP,1,LBLRGT,1)
NCNT=0
DO 70 1=1,36
IF (ITTL(I).NE.JBL) GO TO 80
NCNT=NCNT+1
70 CONTINUE
80 NLST=36-NCNT
DO 90 I=1,NLST
90 ITTL1(I)=ITTL(I+NCNT)
NCNT1=36
DO 100 1=1,36
ii = 37 - r
IF (ITTL1(II).NE.JBL) GO TO 110
NCNT1=NCNT1-1
100 CONTINUE
110 NCNT1=NCNT1-NCNT
ORGX=((HCC*HC)-(FLOAT(NCNT1)*4.*CHRZ))12.0
DO 120 I=1,NCNT1
CALL SYMBOL (ORGX,ORGY,CHRZ,ITTL1(I),IDUM,0.,2)
ORGX=ORGX+2.0*CHRZ
120 CONTINUE
CALL PLOT (10.,2.,999)
130 HCS=FLOAT(NW)
XNS=FLOAT(NLL)
CALL ISOPLT (HC,XN,3)
RETURN
END
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
/AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
AQ
59
60
61
62
63
64
64A
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110-
AQ-2
-------
SUBROUTINE EDGMX (X,Y,N,XMX,YMX,L)
CALCULATE THE MAXIMUM POINT ALONG A LINE
SAVE
DIMENSION X(N), Y(N)
LL=N
I=N
IF (N.LE.2) GO TO 30
NGO=0
DO 10 1=2,LL
IF (Y(I).GT.Y(I-l)) GO TO 10
IF (I.EQ.LL) L=I
(I.EQ.LL) NGO=1
(I.EQ.LL) GO TO 20
(Y(I) .GT.Yd+D) L=I+1
.GT.Yd+1) >
NGO=1
IF
IF
IF
IF (Y(I)
GO TO 20
10 CONTINUE
20 CONTINUE
IF (NGO.EQ.l) GO TO 40
30 L=LL-1
XMX=X(L+1)
YMX=Y(L+1)
RETURN
40 L=MAXO(L-1,3)
X21=X(L-l)-X(L-2)
X221=X(L-l)*X(L-l)-X(L-2)*X(L-2)
X32=X(L)-X(L-1)
XL2=X(L)*X(L)
Y21=Y(L-l)-Y(L-2)
C=(Y21/X21-(Y(L)-Y(L-l))/X32)/(X221/X21-(XL2-X(L-l)*X(L-l))/X32)
B—(Y21—C*X221)/X21
A=Y(L)-B*X(L)-C*XL2
XMX=-B*0.5/C
YMX=A+B*XMX+C*XMX*XMX
IF (XMX.GE.0.999*X(L)) YMX=Y(L)
IF (YMX.EQ.Y(L)) XMX=X(L)
IF (XMX.LT.1.001*X(L-2).AND.L.GT.3) GO TO 40
L=L-1
IF (XMX.LE.X(L)) L=L-1
RETURN
END
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
AR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43-
AR-1
-------
c
SUBROUTINE ISOPLT (SAVHC,SAVNOX,IENTRY) AS 1
C
AS 2
C DRAWS A LINE PRINTER PLOT OF THE ISOPLETH AS 3
AS 4
SAVE AS 5
COMMON /NEED/ HC, XN, NL,OZ1 (20) , OZN (11, 11, 5) , MR, LS, HCS, XNS AS 6
COMMON /TITL/ ITTL(36) AS 7
COMMON /INOUT/ IN, IOUT, ITAPE, IALN, IALL, INHH, IOZC AS 8
COMMON /CALC/ NR, KR (200f 12) , A (200) , S (200) , R (200) , ITYPE (200) , AS 9
1 IA(60),JA(800),DILUT, TEMP, ERR, START, STOPP, AS 9A
2 TPRNT,TSTEP,ZENI AS 10
C COMMON /PHOTON/ JGRID (101, 42) , SPRSE (13) AS 11
COMMON /CNTRL/ SIG, SIGMA, INFO, NPTO, TSRT, DTIM, Zl, Z2, DCON, EHC, EXN, AS 12
1 FLST,TLST AS 13
COMMON /SPEC/ NS,CARB(20),RCTY(20),XNF(2),IH(20),INOX(2), AS 14
1 FINHC(20),FALHC(20),NHC,OZIN,OZAL,HCIN,HCAL,XNIN, AS 15
2 XNAL,NOZ,FENX(2),C(61),NI,KOZ(5) AS 16
C COMMON /GEAR6/ DDM1 (880) , XZP (20) , DUM2 (326) , DUM3 (972) AS 17
C COMMON /GEAR6C/ NGRID(101,2) AS 17A
COMMON /HOUR/ OZM(5) ,NGO, TM, DUMMM(5) AS 18
COMMON /SCRAT3/ OZP(20) AS ISA
COMMON /SCRATC/ ISPN AS 19
COMMON /CALCHR/ SPECIS(61) AS 1 9A
COMMON /SPECHR/ HCSPEC(20), PLSP(5), REACT (61) AS 19B
DIMENSION TVERT(52,2), TPRINT(ll), NLINE(3) AS 20
DIMENSION TV(7), SAVDAT(lOl), TV1(7) AS 21
DIMENSION JGRID(101,42), NGRID (101,2) , DUM3(101) AS 21A
C Ag 2 IB
CHARACTER*! JPLUS, JBAR, JSYMB, JBL AS 2 1C
CHARACTER*! JGRID, NGRID, NLINE AS 2 ID
CHARACTER*:? ITTL AS 21E
CHARACTER* 4 JBLANK, TV, TVERT, ISPN AS 2 IF
CHARACTER*4 SPECIS, HCSPEC, REACT, PLSP AS 21G
C AS 22
DATA JBLANK/' ' /, MAXHC/101/, MAXNOX/42/, TGRID/100 . /, AS 23
1CGRID/42./,, JPLUS/' +'/, JBAR/'I'/, JSYMB/' +'/, JBL/' '/ AS 24
DATA TV/' N ',' 0 ',' X ',' ' , ' P ' , ' P ' , ' M ' / AS 25
DATA TVERT/104*' '/ AS 26
AS 27
C EMULATE MULTIPLE ENTRY POINTS WITH COMPUTED GO TO AS 28
GO TO (10, 90, 120), IENTRY AS 29
STOP AS 30
10 CONTINUE As 31
NR1=1 AS 32
DO 20 J=l,42 AS 33
IF (J.LE.2) NGRID (1,J)=JBAR As 34
IF (J.LE.2) NGRID ( 10 1,J)= JBAR AS 35
JGRID (1,J)= JBAR AS 36
JGRID ( 10 1,J)=JBAR AS 37
20 CONTINUE As 3Q
DO 30 1=1,52 AS 39
TVERT (1,1) == JBLANK As 4 0
IF (I.LT.17.0R.I.GT.23) GO TO 30 AS 41
K=I-16 Ag 42
TVERT(I,1)=TV(K) As 43
30 CONTINUE As 44
DO 40 1=1,101 AS 45
40 SAVDAT(I)=0. AS 46
DO 50 J=l,42,3 AS 47
JGRID (1,J)=JPLUS AS 4Q
JGRID ( 10 1,J)=JPLUS AS 49
50 CONTINUE AS 5Q
C AS 51
AS-1
-------
SET NORMALIZATION FACTORS AND VERTICAL LABELS
CLOW=0.
TLOW=0.
CHIGH=XN
CSPAN=CGRID/CHIGH
THIGH=HC
DO 60 1=1,7
M-8-I
TV1(I)=(FLOAT(M)/7.)*CHIGH
60 CONTINUE
TSPAN=TGRID/THIGH
DO 70 J=l,ll
TPRINT(J)=(FLOAT(J-l)/10.)*THIGH
70 CONTINUE
CLEAR GRID
MAXHC1=MAXHC-1
DO 80 K=1,MAXNOX
DO 80 J=2,MAXHC1
JGRID(J,K)=JBLANK
IF (K.LE.2) NGRID(J,K)=JBLANK
80 CONTINUE
RETURN
ENTRY FOR SAVING INTERPOLATED POINTS
ENTRY SAVLIN
90 CONTINUE
KHC=IFIX((SAVHC-TLOW)*TSPAN+1.5)
KNOX=IFIX((SAVNOX-CLOW)*CSPAN-0.5)
KNOX=MAXNOX~KNOX
IF (KNOX.LT.l) GO TO 110
IF (KNOX.GT.MAXNOX) GO TO 110
IF (KHC.LT.l) GO TO 110
IF (KHC.GT.MAXHC1) GO TO 110
JGRID(KHCfKNOX)=JSYMB
IF (TM.EQ.1..AND.NPTO.EQ.O) DUM3(NR1)=FLOAT(KHC)
IF (TM.EQ.l.) NR1=NR1+1
IF (KHC.LT.2) GO TC 110
100 CONTINUE
110 RETURN
ENTRY FOR PLOTTING GRID
ENTRY LINPRT
120 CONTINUE
NPL=IFIX(HCS+0.1)
NLL=IFIX(XNS+0.5)
KOUNT=0
IF (NLL.EQ.O) GO TO 160
NJ=1
130 NJ=NJ+1
J=MAXNOX-NJ
IF (JGRID(3,J).EQ.J3LANK) GO TO 130
KOUNT=KOUNT+1
IF (KOUNT.GT.NLL) GO TO 150
IF (NJ.GT.MAXNOX-1) GO TO 150
NVAR=IFIX(OZP(KOUNT)*100.+0.5)
CALL CONVT (NVAR,NLINE,3)
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
AS-2
-------
DO 140 11=1,3
112=11+2
140 IF (NLINE(II) .NE.JBL) JGRID (112, J) =NLINE (II)
NJ=NJ+1
GO TO 130
150 KOUNT-KOUNT-1
160 KOUNT=KOUNT+1
NR1-NR1-1
DO 180 I=KOUNT,NR:L
NVAR=IFIX(OZP(I) *100.-i-0.5)
CALL CONVT (NVAR, NLINE, 3)
KHC=IFIX (DUM3 ( I ) +0 . 1 )
DO 170 11=2,3
170 IF (NLINE(II) .NE.JBL) NGRID (KHC, II-l) =NLINE (II)
180 CONTINUE
WRITE (IOUT,220) ( (NGRID (I, J) , 1=1, 101) , J=l, 2)
KFRST=1
DO 190 K=KFRST,MAXNOX
L=MOD((K-1),6)
IF (L.EQ.O) WRITE (IOUT,230) TVERT (K, 1) , TV1 ( I) , ( JGRID ( J, K) , J=l ,
1 HC )
IF (L.NE.O) WRITE (IOUT,240) TVERT (K, 1 ), (JGRID (J, K) , J=l, MAXHC)
190 CONTINUE
WRITE (IOUT,250) CLOW
WRITE (IOUT,260) TPRINT
WRITE (IOUT,270) ( ITTL (I) , 1=1, 36)
IF (NPTO.EQ.O) WRITE (IOUT,280) ISPN, (OZP ( I) , 1=1 , NPL)
200 RETURN
210 FORMAT (1H1/////////9X, A4 , F5 . 3, 1H+, 10 (10H +) )
220 FORMAT (1H1//////18X,1H+,10(10H +)/18X,101A1/18X,101A1)
230 FORMAT (9XfA4,F5.3,101A1)
240 FORMAT (9X,A4,5X,101A1)
250 FORMAT (13X, F5 . 3 , 1H+, 10 (10H + ) )
260 FORMAT (F21.3,10F10.2/64X,11HNMOC (PPMC)//)
270 FORMAT (46X,36A2)
280 FORMAT (1HO/20X,4HTHE ,A4,12H LINES ARE ,10F8.5/40X,10F8 5)
END
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
MAXAS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
AS
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155-
AS-3
-------
SUBROUTINE WMNMX (Z,ND1,NX,NY,ZMIN,ZMAX) AT l
AT 2
C *** RETURNS THE MINIMUM AND MAXIMUM VALUES OF AN ARRAY AT ?
C GWL/SAI DEC 77 "i A
C AI *
SAVE
RETURN
END
DIMENSION Z(ND1,1) AT 7
ZMIN = +1.E20 JT q
ZMAX = -1.E20 A* 1Q9
DO 20 J=1,NY ^ JJ
DO 10 1=1, NX £i ;;
ZU-Zd.J) ^ ]l
AT 1 5
IF (ZIJ .LT. ZMIN) ZMIN = ZIJ AT 16
IF (ZIJ .GT. ZMAX) ZMAX = ZIJ AT , -7
10 CONTINUE J; ^
20 CONTINUE a T- i o
AI 1 9
AT 20
AT 21
AT 22
AT-1
-------
SUBROUTINE CONMAP (Z,ND1,NOX,NOY,SIZX,SIZY,C,NLEV,KALCM1) AU 1
SAVE AU 2
C AU 3
C *** PURPOSE — DRAWS A CONTOUR MAP AU 4
C GW LUNDBERG/SAI JULY 87 AU 5
C AU 6
C Z THE (ORIGIN OF THE) ARRAY TO BE CONTOURED AU 7
C ND1 THE FIRST DIMENSION OF Z AU 8
C NOX THE NUMBER OF ELEMENTS OF Z TO USE IN X-DIRECTION AU 9
C NOY THE NUMBER IN THE Y-DIRECTION AU 10
C SIZX INCHES/CELL IN THE X-DIRECTION AU 11
C SIZY INCHES/CELL IN THE Y-DIRECTION AU 12
C C THE CONTOUR LEVELS TO DRAW AU 13
C NLEV MOD(lABS(NLEV),1000) IS THE NUMBER OF LEVELS AU 14
C IF NLEV<0, THE CONTOURS ARE LABELED WITH AU 15
C -NLEV/1000 DECIMAL DIGITS OF PRECISION AU 16
C IF NLEV>=1000, THE CONTOURS ARE LABELED AU 17
C NLEV/1000, NLEV/1000+1, ,NLEV/1000+NL-1 AU 18
C AS INTEGERS WHERE NL=MOD(NLEV,1000) AU 19
AU 20
C *** NOTE — MISSING DATA CELLS ARE NOT MAPPED AU 21
AU 22
DIMENSION Z(11,1),C(1) AU 23
LOGICAL NOLBL AU 24
COMMON /WCONM/ IX, JY, IDX, JDY, NBR, LOOP, NPf NTBL (1000) , NR, AU 25
1 NX,NY,XSIZ,YSIZ,XXFLG,KALCMP AU 26
COMMON /WLB1/ FACT, D 1ST, CHRSZ,NCHR,OZL AU 27
DATA NR1/1000/ Au 2Q
NR=NR1 AU 29
KALCMP=KALCM1 AU 3Q
C AU 31
C *** MOVE ARGUMENTS TO COMMON AU 32
NX = NOX AU 33
NY = NOY AU 34
XSIZ = SIZX AU 35
YSIZ = SIZY AU 3g
c
C *** SET THE NUMBER OF LEVELS REQUESTED AU 38
NC = MOD(TABS(NLEV),1000) AU 39
AU 40
C *** ASSUME NO LABELS AU 41
NOLBL = .TRUE. AU 42
AU 4 3
C *** SET LABEL SIZE JUST IN CASE AU 44
SIZLBL =0,07 AU 45
C *** SET UP LABELING PARAMETERS AS REQUESTED AU 46
IF (NLEV .GT. 0) GO TO 10 AU 47
C AU 48
NDEC = -NLEV/1000 AU 4g
IF (NDEC .EQ. 0) NDEC = -1 Au 5Q
NOLBL = .FALSE. AU 51
c G0 T0 20 AU 52
10 IF (NLEV .LT. 1000) GO TO 20 an 54
LOW = NLEV/1000 - 1 an SR
NDEC = -1 AU 56
NOLBL = .FALSE. AU 5°
P AU 58
AU 5 9
C *** FOR EACH LEVEL, LOCATE THE STARTING POINT OF EACH AU 60
C CONTOUR, THEN CALL VVCMAP TO DRAW THE LINE AU fil
20 DO 120 L=1,NC AU ^
C NORMALIZE THE CONTOUR LEVEL AU 64
AU-1
-------
30
C
C
C
C
C
C
C
C
C
C
C
40
50
C
C
60
70
C
C
C
CV = C(L)/2.0
CV = CV*2.0
*** SET UP LABELS IF REQUESTED
IF (NOLBL) GO TO 30
OZL = CV
NP = 0
*** IN THE FOLLOWING, (IX, JY) IS THE GRID POINT (NODE)
JUST HIGHER THAN CV. NBR IS ONE OF FOUR NEIGHBORING
NODES (1=WEST, 3=N, 5=E, 7=S) TO BE USED WITH (IX, JY) TO
INTERPOLATE THE COORDINATES OF THE CONTOUR. IDX AND JDY
INDICATE THE DIRECTION OF THIS NEIGHBOR.
AU
AU
•» f»
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
*** SCAN THE FOUR EDGES FOR OPEN CONTOURS. THIS SCAN CLEVERLYAU
CAPTURES EVERY OPEN CONTOUR EXACTLY ONCE An
LOOP = 0
*** SCAN BOTTOM AND TOP EDGE
DO 50 1=2, NX
IM1 - 1-1
IF (Z(IM1,1) .GE. CV .OR. Z(I,1) . LT . CV) GO TO 40
IX = I
JY = 1
IDX = -1
JDY = 0
NBR = 1
CALL WCMAP (Z,ND1,CV)
IF (Z(I,NY) .GE. CV .OR. Z(IM1,NY) .LT. CV) GO TO 50
IX = IM1
JY = NY
TDX = 1
-L U f\ J.
JDY = 0
W U X \J
NBR = 5
CALL WCMAP (Z,ND1,CV)
CONTINUE
*** SCAN RIGHT AND LEFT EDGE
DO 70 J=2,NY
JM1 = J-l
IF (Z(NX,JM1) .GE. CV .OR. Z (NX, J) . LT . CV) GO TO 60
IX = NX
JY = J
IDX = 0
JD Y = — 1
NBR = 7
CALL WCMAP (Z,ND1,CV)
IF (Z(1,J) .GE. CV .OR. Z(1,JM1) . LT . CV) GO TO 70
IX = 1
JY == JM1
IDX = 0
JDY = 1
NBR = 3
CALL WCMAP (Z,ND1,CV)
CONTINUE
*** SCAN CENTER REGION FOR CLOSED LOOPS — IT IS SUFFICIENT
TO CHECK ONLY THE WEST NEIGHBOR AT EACH NODE
LOOP = - 1
NYM1 = NY-1
AU
AU
AU
•JL ft
AU
» FT
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
AU
65
66
67
68
69
\J J
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
8 6
8 7
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
AU-2
-------
DO 110 J=2,NYM1 AU 129
DO 100 1=2,NX AU 130
IM1 = 1-1 AU 131
IF (Z(IM1,J) .GE. CV .OR. Z(I,J) .LT. CV) GO TO 100 AU 132
AU 133
C *** CHECK IF NODE ALREADY USED AU 134
NODE = 1000*1 + J AU 135
IF (NP .EQ. 0) GO TO 90 AU 136
DO 80 K=1,NP AU 137
IF (NODE .EQ. NTBL(K)) GO TO 100 AU 138
80 CONTINUE AU 139
C AU 140
C *** TAG THIS NODE TO PREVENT RETRACE AU 141
90 NP = NP+1 AU 142
IF (NP .GT. NR) GO TO 120 AU 143
NTBL(NP) = NODE AU 144
AU 145
C *** SET PARAMETERS AND DRAW LOOP AU 146
IX = I
JY = J
IDX = -:
= o
AU 147
AU 148
AU 149
AU 150
NBR = * AU 151
CALL WCMAP (Z,ND1,CV) AU 152
100 CONTINUE AU 153
110 CONTINUE AU 154
120 CONTINUE AU 155
C AU 156
RETURN AU 157
END AU 158-
AU-3
-------
SUBROUTINE WCMAP (Z,ND1,C) AV i
SAVE L
c AV 2
AV 3
C *** PURPOSE ~ TRACES AND DRAWS A CONTOUR GIVEN THE BEGINNING AV 4
C BY CONMAP AV
C GW LUNDBERG/SAI JULY 87 £v 6
AV 7
C Z THE (ORIGIN OF THE) ARRAY TO BE CONTOURED AV
C ND1 THE FIRST DIMENSION OF Z AV Q
fl
AV
C C THE CONTOUR LEVEL TO DRAW £v 10
W
DIMENSION Z(ND1,1),INX(8),JNY(8),UT(11),VT(11),TM(20),YP(20) AV 12
COMMON /WCONM/ IX, JY, IDX, JDY, NBR, LOOP, NP, NTBL (1000) ,NR, AV 13
1 NX,NY,XSIZ,YSIZ,XXFLG,KALCMP AV 14
COMMON /CNTRL/ SIG, SIGMA, INFO, NPTO, TSRT, DTIM, Zl, Z2, DCON, EHC, EXN, AV 15
1 FLST,TLST Av ,fi
DATA INX /-I, -1,0,1,1,1,0, -I/ ™ }*
DATA JNY /O, 1,1, 1,0, -!,-!,-!/ ™ ]l
C DATA FUZZ/0.003/ „. ,n
C
cv = c AV 20
C AV 21
AV 2?
C *** SAVE STARTING NODE AND CURRENT NEIGHBOR AV ->\
IXO = IX ™ J3
JYO = JY AV 24
NBRO = NBR A^ 25_
c AV 26
C *** SET THE SECOND POINT FOR INTERPOLATION AV 9fl
1X1 = IX + IDX A; 28
JY1 = JY + JDY ^ ;^
c AV 3 0
C MODE^ EiTHER P°INT MISSING — IGNORE WITH VVKURV MODE RESET AV 32
IF (Z(IXrJY) .EQ. XXFLG .OR. Z(IX1,JY1) .EQ. XXFLG) AV II
c 1 G° T° 3° AV 35
C *** INTERPOLATE FOR THE FIRST POINT AND SAVE AV 17
IF (IDX .EQ. 0) GO TO 10 £w ^Q
Y = JY AV ja
AV 1 Q
X = (Z(IXfJY)-CV)/(Z
-------
C IS TERMINATED ALTHOUGH THE SCAN CONTINUES. THE CONTOUR AV 65
C REAPPEARS WHEN BOTH NODES ARE AGAIN KNOWN. AV 66
30 NBR = NBR + 1 AV 67
IF (NBR .GT. 8) NBR = NBR - 8 AV 68
IDX = INX(NBR) AV 69
JDY = JNY(NBR) Av 70
1X1 = IX + IDX AV 71
JY1 = JY + JDY AV 72
IF (LOOP .NE. 0) GO TO 40 AV 73
C Ay -7 4
C *** CHECK FOR END OF OPEN CONTOUR AV 75
IF (1X1 .GT. NX .OR. 1X1 .LT. 1 .OR. AV 76
1 JY1 .GT. NY .OR. JY1 .LT. 1) GO TO 200 AV 77
C Ay -j 8
C *** CHECK IF POINT BELOW LEVEL AV 79
40 IF (CV .GT.. Z(IX1,JY1)) GO TO 60 AV 80
AV 81
C *** REVERSE NODES AND GO ON (UNLESS CELL IS DEGENERATE) AV 82
C IF (MOD(NBR,2) .NE. 0) GO TO 120 AV 83
C AV 84
NNBR = NBR+1 AV 85
IF (NNBR .GT. 8) NNBR = NNBR-8 AV 86
NX1 = IX -I- INX(NNBR) . AV 87
NY1 = JY + JNY(NNBR) AV 88
AV 8 9
C *** BE CAREFUL OF EDGE AV 90
IF (NX1 .GT. NX .OR. NX1 .LT. 1 .OR. AV 91
1 NY1 .GT. NY ..OR. NY1 .LT. 1) GO TO 50 AV 92
C AV 93
C *** TEST FOR DEGENERACY AV 94
IF (CV .LE. Z(NX1,NY1)) GO TO 50 AV 95
C AV 96
C *** CELL IS DEGENERATE — ESTIMATE CENTER HEIGHT AV 97
ZCEN = 0.25 * (Z(IX,JY)+Z(IX,JY1)+Z(IX1,JY1)+Z(IX1,JY)) AV 98
C AV 99
C *** PUNT IF CENTER LOW AV iQO
IF (CV .GT. ZCEN) GO TO 30 AV 1Q1
C AV 102
50 NBR = NBR +4 Av 103
ix = ixi AV 104
GO TO 30 AV Joe
C AV 107
C *** MAY BE OK — BUT CHECK FOR MISSING POINT AV 108
60 IF (Z(IX,JY) .NE. XXFLG .AND. Z(IX1,JY1) .NE. XXFLG) AV 109
1 GO TO 70 AV no
I AV 111
C *** ONE POINT MISSING — FLUSH SPLINE BUFFER TO SET AV 112
C FOR A BROKEN LINE SEGMENT IF NECESSARY AV 113
IF (MODE .EQ. -1) GO TO 180 AV 114
CALL VVKURV (DUM,DUM,2) AV 115
c G0 T0 18° AV 116
C *** LOOKS OK — INTERPOLATE FOR X AND Y AV 118
C AV 119
C *** BUT MAY BE A DIAGONAL NODE AV 120
70 IF (MOD(NBR,2) .EQ. 0) GO TO 30 AV i?1
IF (IDX .EQ. 0) GO TO 120 AV 122
Y = JY AV 123
C X = (Z(IX,JY)-CV)/
-------
IPTS=IX
DO 80 JJ=1,IX
UT(JJ)=Z(JJ, JY)
VT(JJ)=FLOAT(JJ)
80 CONTINUE
GO TO 110
90 IPTS-12-IX
DO 100 JJ=1,IPTS
UT(JJ)=Z(12-JJ,JY)
VT(JJ)=FLOAT(12-JJ)
100 CONTINUE
C
110 SX=-SIG*30.
IF (IPTS.GT.2) SX=-SIG*20./(FLOAT(IPTS-2)**2)
CALL CURV1(IPTS,UT,VT,SP1,SP2,YP,TM,SX)
IT=1
X=CURV2(CV,IPTS,UTrVT,YP,SX, IT)
C
GO TO 170
C
120 X = IX
C Y = (Z(IX,JY)-CV)/(Z(IX,JY)-Z(IX,JY1))*JDY + JY
C
C USE SPLINE FIT OF DATA
C
IF (JDY.GT.O) GO TO 140
IPTS=JY
DO 130 JJ=1,JY
UT(JJ)=Z(IX,JJ)
VT(JJ)=FLOAT(JJ)
130 CONTINUE
GO TO 160
140 IPTS=12-JY
DO 150 JJ=1,IPTS
UT(JJ)=Z(IX,12-JJ)
VT(JJ)=FLOAT(12-JJ)
150 CONTINUE
C
160 SX=-SIG*30.
IF (IPTS.GT.2) SX=-SIG*20./(FLOAT(IPTS-2)**2)
CALL CURV1(IPTS,UT,VT,SP1,SP2,YP,TM,SX)
IT=1
Y=CURV2(CV,IPTS,UT,VT,YP,SX, IT)
*** SCALE AND SEND
170 XHH=X
YHH=Y
X = (X-0.5)*XSIZ
Y = (Y-0.5)*YSIZ
WRITE (9,1111) XHH,YHH,CV
1111 FORMAT (1P,3E13.4)
CALL VVKURV (X,Y,MODE)
*** RESET MODE
MODE = 0
*** SET NODE IN NTBL SO ITS NOT RETRACED
180 IF (NBR .NE. 1) GO TO 190
NP = NP + 1
IF (NP .GT. NR) GO TO 200
NTBL(NP) = 1000*IX + JY
*** CHECK IF LOOP COMPLETE
190 IF (LOOP .EQ. 0) GO TO 30
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
AV
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
173A
173B
174
175
175A
175B
176
177
178
179
180
181
182
183
184
185
186
187
188
AV-3
-------
IF (IX .NE. IXO) GO TO 30 AV 189
IF (JY .NE. JYO) GO TO 30 AV 190
IF (NBR .NE. NBRO) GO TO 30 AV 191
C AV 192
C *** ALL DONE — FINISHED OFF THIS LINE AND RETURN AV 193
200 CALL WKURV (X,Y,1) AV 194
RETURN AV 195
END AV 196-
AV-4
-------
SUBROUTINE WKURV (XPT, YPT, MODE)
SAVE
C
C
C
C
C
r
C
c
C
r
C
C
t»
c
c
C
c
PITTED LINE BY SECTIONS
*** NOTE — THE POINTS ARE RECEIVED ONE AT A TIME
XPT
EL
MODE
NODE X COORDINATE IN INCHES FROM CURRENT PLOT ORIGIN
N°DE Y COORDINATE IN INCHES FROM CURRENT PLOT ORIGIN
<0, INITIAL POINT OF FIRST SECTION
=0, ADDITIONAL POINT
-1, FLUSH THE BUFFER — XPT,YPT FORCED
=2, FLUSH THE BUFFER — XPT,YPT IGNORED
*** NOTE — THIS CODE PROVIDES FOR BROKEN SPLINED LINES.
o~EDMODE=1 T° TERMINATE THE SUBLINE. A NEW LINE IS
STARTED WITH MODE— 1, OR A NEW SUBLINE WITH MODE=0 .
THIS FEATURE IS USED BY CONMAP FOR MISSING DATA.
LOG
NPTS T0 ZERO
™ERE
rn/ F°R A DESCRIpTION OF THESE VARIABLES
COMMON /WCONM/ IDUM (1010) , XSIZ, YSIZ, XXFLG, KALCMP
COMMON /WKRV/ NPTS, NSLP, SLP1 , SLPN, LSLP, TANGNT, Sf
1 X(32)fY(32),XP(32),YP(32)
COMMON /WLB1/ FCTR, DIST, CHRSZ, NCHR, OZLBL
COMMON /HOUR/ OZR (5) , NGG, TMr DUM (5)
COMMON /NEED/ HC( XN, NL, OZP (20) , OZN (11, 11 , 5) , MR, LS, HCS, XNS
DATA STEP/0.04/, MXPT/31/, FUZZ/0 . 05/, NPTS1/0/
DATA TANN/0./,LSLP1/0/,IFRST/1/
IF (IFRST.EQ.l) NPTS=NPTS1
IF (IFRST.EQ.l) LSLP=LSLP1
IFRST=2
*** JUMP TO APPROPRIATE CODE
IF (MODE) 10,20,60
ENTRY FOR MODE LESS THAN ZERO
10 NSECTN =1
USX=(XPT-0.5)*HC*.1/XSIZ
USY=(YPT-0.5)*XN*.1/YSIZ
TM=1.
CALL ISOPLT(USX,USY,2)
TM=2.
(XPT'YPT'3>
YSTRT = YPT
X(l) = XPT
Y(l) = YPT
NPTS =1
*** ZERO KNOWN SLOPE FLAG
KSLP =0
RETURN
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
1
2
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
23
24
25
26
27
28
30
32
3"
37
38
39
40
41
42
43
44
45
47
48
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
AW-1
-------
AW 65
AW 66
C ENTRY FOR MODE EQUAL ZERO AW 67
*********** ^ g g
AW 69
20 IF (NPTS .GT. 0) GO TO 30 AW 70
C AW 71
C *** THIS IS THE CONTINUATION OF A BROKEN LINE (SEE AW 72
C CONMAP) — SET PEN Aw 73
IF (KALCMP.GT.O) CALL WLABL (XPT,YPT,3) AW 74
GO TO 40 AW 75
C AW 76
C *** SAVE POINT (IF NOT TOO CLOSE TO LAST POINT) AW 77
C IN BUFFER — FLUSH WHEN FULL AW 78
30 IF (ABS(X(NPTS)-XPT) .LT. FUZZ .AND. AW 79
1 ABS(Y(NPTS)-YPT) .LT. FUZZ) RETURN AW 80
40 NPTS = NPTS+1 AW Q1
X(NPTS) = XPT AW 82
Y(NPTS) = YPT AW 83
IF (NPTS .LT. MXPT) RETURN Aw 84
AW 85
C *** FLUSH THE BUFFER — SUPPLY STARTING SLOPE IF AVAILABLE AW 86
NSLP = KSLP AW 87
SLP1 = TANN • AW 88
AW 8 9
CALL VVKRV1 AW 9Q
AW 91
C *** SET NUMBER OF POINTS TO INTERPOLATE AND NORMALIZED STEP SIZE AW 92
N = S/STEP - 1 AW 93
FACT = STEP/S AW 94
DIST=S AW 95
C *** SAVE THE SLOPE FOR FIRST SECTION ONLY AW 97
IF (NSECTN .EQ. 1) TAN1 = SLP1 AW 98
AW 99
C *** INITIALIZE WKRV2 (PEN ALREADY THERE) AW i0n
CALL VVKRV2( 0.,XX,YY) AW 101
AW 102
C *** PLOT THE MIDDLE INTERPOLATED POINTS AW
DO 5o I-!*
T = -FLOAT(I)*FACT AW 105
CALL VVKRV2 (T,XX,YY) AW 1Q6
USX=(XX-0.5)*HC*.1/XSIZ AW 107
USY=(YY-0.5)*XN*.1/YSIZ m 108
CALL ISOPLT(USX,USY,2) Aw 109
IF (KALCMP.LE.O) GO TO 50 AW no
CALL VVLABL (XX,YY,2) Aw
50 CONTINUE AW
AW 113
C *** GET SLOPE AT LAST POINT, SAVE, AND PLOT LAST SEGMENT AW 114
CALL VVKRV2 <-l.,XX,YY) AW
TANN = SLPN AW
USX=(XX-0.5)*HC*.1/XSIZ AW
USY=(YY-0.5)*XN*.1/YSIZ AW
CALL ISOPLT(USX,USY,2) AW ng
IF (KALCMP.GT.O) CALL WLABL (XX,YY,2) AW 12Q
AW
C *** BUMP SECTION COUNT AW
NSECTN = NSECTN + 1 Aw
AW 124
C *** MAKE THE LAST POINT THE FIRST FOR THE NEXT SECTION AW 125
X(l) = X(NPTS) A^
Yd) = Y(NPTS) ™
NPTS =1
Nt^ib L AW 128
AW-2
-------
*** FLAG FIRST SLOPE AS KNOWN
KSLP = 1
RETURN
ENTRY FOR MODE GREATER THAN ZERO
*** FLUSH THE BUFFER
*** PUNT IF ONLY FLUSHING
60 IF (MODE .EQ. 2) GO TO 70
*** FORCE FINAL POINT IF NOT ALREADY ENTERED
IF (X(NPTS) .EQ. XPT .AND. Y(NPTS) .EQ. YPT) GO TO 70
*** THERE IS ALWAYS AN EXTRA POSITION IN X AND Y
NPTS = NPTS+1
X(NPTS) = XPT
- YPT
C
C-
c
c
c
c
c
c
*** IGNORE SINGLE OR NULL POINT
— START OF FIX 7/17/37
70 IF (MODE .NE. 2) GO TO 80
IF (NPTS .EQ. 1) KSPL = 0
IF (NPTS .LE. 1) NPTS = 0
80 IF (NPTS .LE. 1) RETURN
— END OF FIX 7/17/87
*** CHECK FOR SIMPLE LINE — ONLY ONE SECTION
IF (NSECTN .GT. 1) GO TO 110
*** TWO POINT LINES TAKE SPECIAL TREATMENT
IF {NPTS .GT. 2) GO TO 90
*** TWO POINTS — DRAW
USX=(X(1)-0.5)*HC*.1/XSIZ
USY=(Y(1)-0.5)*XN*.1/YSIZ
CALL ISOPLT(USX,USY,2)
USX=(X(2)-0.5)*HC*.1/XSIZ
USY=(Y{2)-0.5)*XN*.1/YSIZ
CALL ISOPLT(USX,USY,2)
IF (KALCMP.LE.O) GO TO 160
CALL WLABL (X (1) , Y (1) , 3 )
CALL WLABL (X (2) , Y (2) , 2)
CALL WLABL (DUM,DUM,1)
AND RETURN
*** SIMPLE BUT MAY BE A LOOP
90 IF (X(NPTS) .EQ. XSTRT .AND
*** A SIMPLE SIMPLE LINE
NSLP =0
CALL VVKRV1
GO TO 130
*** SIMPLE LOOP
100 NSLP = -1
CALL VVKRV1
GO TO 130
Y(NPTS) . EQ . YSTRT) GO TO 100
132
133
134
135
136
AW 1 9 Q
AW
AW
AW
Aw
AW
AW
AW 142
AW 143
AW 144
AW 1 4 5
AW 146
"®
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
174
1-70
179
AW 170
AW
AW
AW
™
AW
aw
AW
AW
n
AW 189
AW 19°
AW 191
AW 192
182
186
1 8 7
AW-3
-------
*** COMPLEX LINE AND MAY BE LOOP
110 IF (X(NPTS) .EQ. XSTRT .AND. Y(NPTS)
*** COMPLEX OPEN LINE
NSLP = 1
SLP1 = TANN
CALL WKRV1
GO TO 130
*** COMPLEX LOOP
120 NSLP = 3
SLP1 = TANN
SLPN = TAN1
CALL WKRV1
.EQ. YSTRT) GO TO 120
*** JUST MARK THE POINT IF ARC LENGTH SMALL
130 IF (S .GT. 0.01) GO TO 140
IF (KALCMP.LE.O) GO TO 160
CALL PLOT (XSTRT,YSTRT,3)
CALL PLOT (XSTRT,YSTRT,2)
GO TO 160
*** PLOT THE FINAL SECTION
140 N = S/STEP - 1.
FACT = STEP/S
DIST = S
CALL WKRV2 (0.,XX,YY)
DO 150 1 = 1,.N
T = -I*FACT
CALL WKRV2 (T,XX,YY)
USX=(XX-0.5)*HC*.1/XSIZ
USY=(YY-0.5)*XN*.1/YSIZ
CALL ISOPLT(USX,USY,2)
IF (KALCMP.LE.O) GO TO 150
CALL VVLABL (XX,YY,2)
150 CONTINUE
CALL VVKRV2 (-l.,XXfYY)
USX=(XX-0.5)*HC*.1/XSIZ
USY=(YY-0.5)*XN*.1/YSIZ
CALL ISOPLT(USXfUSY,2)
IF (KALCMP.LE.O) GO TO 160
CALL VVLABL (XX,YY,2)
CALL VVLABL (DUM,DUM,1)
160 NPTS = 0
KSLP = 0
RETURN
END
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
AW
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242-
AW-4
-------
SUBROUTINE WLABL (X2,Y2,IPEN)
SAVE A* l
C AX 2
C *** SETS A LINE LABEL INTO A VECTOR PLOT PROVIDING THAT AX 4
C PARAMETERS IN /WLBL/ Vy I
C GW LUNDBERG/SAI AUG 87 VC c
C AX °
C X2,Y2 THE TERMINAL POINT OF THE CURRENT VECTOR £v 1
C IN INCHES FROM PRESENT PLOT ORIGIN AX Q
C IPEN =3, INITIALIZE — SET PEN TO X2,Y2 AX 10
C =2, CONTINUE — DRAW LINE WITH LABEL TO X2,Y2 AX 11
C -1, FINISH — COMPLETE LINE J£ \\
C *** NOTES — AX 13
C (1) THE VALUES FOR IPEN MAY APPEAR WHIMSICAL, BUT THEY AX 1«5
FOLLOW THE PRECEDENT SET BY SUBROUTINE PLOT
•> - •
FOR AX 17
C THE FIRST LABEL WHICH STARTS FRST INCHES FROM AX 18
C THE BEGINNING OF THE VECTOR PLOT — THIS PROVIDES FOR AX 19
C STAGGERED LABELS. ££ ^
DIMENSION XSV(100),YSV(100) ^ *\
C AX
-------
AX 63
C *** IF THERE ARE TO BE NO LABELS — PLOT THE VECTOR AND RETURN AX 64
20 IF (NCHR .GT. 0) GO TO 30 AX 65
CALL PLOT (X2,Y2,2) AX 66
RETURN AX 67
^ AX 68
C *** IF SEEKING ROOM FOR THE LABEL -- SKIP FOLLOWING AX 69
30 IF (NSV .GT. 0) GO TO 50 AX 70
C AX 71
C *** CALCULATE THIS VECTOR LENGTH AND ADD TO THE ACCUMULATED AX 72
C LENGTH.. IF A LABEL IS TO START IN THIS VECTOR, SKIP TO AX 73
C 120, ELSE PLOT THE VECTOR AND RETURN AX 74
VECSZ = SQRT {(X2-X1)**2 + (Y2-Y1) **2) AX 75
TOTSZ = TOTSZ + VECSZ AX 76
IF (TOTSZ ..GT. SKPSZ) GO TO 40 AX 77
CALL PLOT (X2,Y2,2) AX 78
XI = X2 AX 79
Y1 ~ Y2 AX 80
RETURN M 81
AX 82
C *** ITS TIME FOR A LABEL — LOCATE START AX 83
40 RATIO = (VECSZ - TOTSZ + SKPSZ) /VECSZ AX 84
X1L = XI + RATIO* (X2-X1) AX 85
Y1L = Yl + RATIO* (Y2-Y1) AX 86
AX 8 7
C *** PLOT SUBVECTOR AND REMEMBER THE END POINT AX 88
CALL PLOT
-------
ESCAPES ME
80 A = (X2-X1)**2 + (Y2-Y1)**2 ?C ,;«
B = -2*«X1L-X1)*(X2-X1) + (Y1L-Y1) MY2-Y1) ) AX 129
C = (X1L-X1)**2 + (Y1L-Y1)**2 - SZLBL*SZLBL AX 130
SQRTD = SQRT(B*B - 4*A*C) ?? "*
Tl = (-B + SQRTD)/ (2*A)
T2 = (-B - SQRTD) /(2*A) .
C *** PICK THE MINIMUM T BETWEEN 0-1 (MUST BE ONE) AX 136
IF (T2 !LT.' o!) T2 - i! ??
RATIO = Tl **
IF (T2 .LT. Tl) RATIO = T2 ^
Q AA
C *** SET LABEL END POINT ?*.
X2L = XI 4- RATIO* (X2-X1) ™
Y2L = Yl .+ RATIO* (Y2-Y1) ?C
p . AA
C *** CALCULATE LABEL ANGLE av
DX = X2L - XIL ?£
DY = Y2L - Y1L ^
ANG = ATAN2(DY,DX) ?C
Q AA
XL = XIL ^ 15°
YL = Y1L ^ 151
COSA = COS (ANG) ^
SINA = SIN (ANG) ?0
Q AX 1 b 4
C *** REVERSE EVERYTHING IF ANGLE IN QUADRANTS 2 OR 3 AX
IF (DX .GE. 0.) GO TO 90 ™
A 158
YL . Y2L AX 158
COSA = -COSA ?r;
SINA = -SINA J£
IF (DY .GE. 0.) ANG = ANG-3 . 14 15926536 AX
IF (DY .LT. 0.) ANG = ANG+3 . 14 15926536 AX 163
90 ANGD = ANG*180. /3.1415926536 ^
w
C *** LOCATE AND PLOT LABEL av
XL = XL + OFF*COSA f OFF*SINA ay
YL = YL 4- OFF*SINA - OFF*COSA ^
C *** CALL NUMBER TO PLOT THE LABEL ^
IDG=NCHR-2 AA
CALL NUMBER (XL, YL, CHRSZ , OZL, ANGD, IDG) ™
°FF THIS SEGMENT BY MEANS OF A PSUEDO REENTRY AX 174
— 0,
SKPSZ = DIST AX 175
NSV =0 AX 176
XI = X2L AX 177
Yl = Y2L AX 178
CALL PLOT (X1,Y1,3) AX. j7^
GO TO 30 AX 18°
AX 181
AX 182
<- ENTRY FOR IPEN = 1
C*******
" — """"""""""itxxKjrx*** * vr IOC
C AA -LOO
C *** PLOT THE SAVED VECTORS IF ANY av
100 IF (NSV .EQ. 0) RETURN AJ 1QO
DO 110 1=1,NSV AX 188
CALL PLOT (XSV(I),YSV(I),2) ^ ™*
AX-3
-------
c
110 CONTINUE AX 191
NSV = 0 AX 192
RETURN AX 193
AX 194
END AX 195-
AX-4
-------
SUBROUTINE WKRV1 ,v
C AY 2
AY "3
C THIS SUBROUTINE DETERMINES THE PARAMETERS NECESSARY TO AY 4
C COMPUTE AN SPLINE UNDER TENSION PASSING THROUGH A SEQUENCE AY 5
C OF PAIRS (X(l)fY(l) ,X(N),Y\
C OF THE CURVE AT (X(1),Y(1)) AND (X(N),Y(N)), RESPEC- AY 26
C TIVELY. THESE QUANTITIES ARE IN RADIANS AND MEASURED AY 27
C COUNTER CLOCKWISE FROM THE POSITIVE X-AXIS. THE POSITIVE AY 28
C SENSE OF THE CURVE IS ASSUMED TO BE THAT MOVING FROM THE AY 29
C POINT 1 TO POINT N. AY tn
C XP,YP = ARRAYS OF LENGTH AT LEAST N, AY 31
C SIGMA = THE TENSION FACTOR. THIS IS NON-ZERO AND AY 32
C INDICATES THE CURVINESS DESIRED. IF SIGMA IS VERY AY 33
C LARGE (E.G. 50.) THE RESULTING CURVE IS VERY NEARLY A AY 34
C POLYGONAL LINE. A STANDARD VALUE FOR SIGMA IS 1. AY 35
\«r
C ON OUTPUT - AY 36
C NPTS,X,Y,SLP1,SLPN, AND SIGMA ARE UNALTERED, AY 38
C XP,YP CONTAIN INFORMATION ABOUT THE CURVATURE OF THE AY ^
C CURVE AT THE GIVEN NODE, £* .1
C S = THE POLYGONAL ARCLENGTH OF THE CURVE. AY \]_
c AY 42
COMMON /WKRV/ NPTS, NSLP, SLP1, SLPN, LSLP, TANGNT, S, AY 44
1 X(32),Y(32),XP(32),YP(32) AY 45
COMMON /CNTRL/ SIG,SIGMA,INFO,NPTO,TSRT,DTIM,Zl,Z2,DCON,EHC,EXN, AY 46
1 FLST,TLST AY d-?
COMMON /EXPVAL/ EXPMAX ** '
p Al 4 o
DIMENSION TEMP(32) AY 48
c AY 4 9
TEMAX=-9999.
AY 50
N = NPTS AY 51
NM1 = N-l AY 52
NP1 = N+l AY 53
DELX1 = X(2)-X(1) AY. II
DELY1 = Y(2)-Y(1)
DELS1 = SQRT(DELX1*DELX1+DELY1*DELY1) av 1%
DX1 = DELX1/DELS1 ?* „
DY1 = DELY1/DELS1 AY ^°
C *** DETERMINE SLOPES IF NECESSARY AV f?
C CHECK IF A LOOP ~* "
IF (NSLP .LT. 0) GO TO 80 ^ *
Ai b J
AY-1
-------
c
JMP = NSLP +1 AY 64
AY 65
C *** SPECIAL HANDLING FOR TWO POINT LINES AY 66
IF (N .EQ. 2) GO TO 40 AY 67
10 GO TO (20,30,20,90),JMP Ay 68
C
AY 69
C *** USE SECOND ORDER INTERPOLATION FOR ENDPOINT SLOPES AY 70
20 DELS2 = SQRT((X(3)-X(2))**2+(Y(3)-Y(2))**2) AY 71
DELS12 = DELS1+DELS2 AY 72
Cl = -(DELS12+DELSD/DELS12/DELS1 AY 73
C2 = DELS12/DELS1/DELS2 AY 74
C3 = -DELS1/DELS12/DELS2 AY 75
SX = C1*X(1)+C2*X(2)+C3*X(3) AY 76
SY = C1*Y(1)+C2*Y(2)+C3*Y{3) . AY 77
SLP1 = ATAN2(SY,SX) AY 78
IF (NSLP .EQ. 2) GO TO 90 AY 79
C AY 80
30 DELNM1 = SQRT((X(N-2)-X(NMl))**2+(Y(N-2)-Y(NMl))**2) AY 81
DELN = SQRT((X(NM1)-X(N))**2+(Y(NM1)-Y(N))**2) AY 82
DELNN = DELNM1+DELN AY 83
Cl = (DELNN+DELN)/DELNN/DELN AY 84
C2 = -DELNN/DELN/DELNM1 AY 85
C3 = DELN/DELNN/DELNM1 AY 86
SX = C3*X(N-2)+C2*X(NMl)+Cl*X(N) AY 87
SY = C3*Y(N-2)+C2*Y(NM1)+C1*Y(N) AY 88
SLPN = ATAN2(SY,SX) AY 89
GO TO 90 AY 90
AY 91
C *** ONLY TWO POINTS SUPPLIED AY 92
40 GO TO (50,60,70,90),JMP AY 93
C AY 94
C *** NO SLOPES GIVEN — USE STRAIGHT LINE AY 95
C (ACTUALLY, THIS CASE SHOULD NEVER OCCUR) AY 96
50 XP(1) = 0. AY 97
XP(2) =0. AY 98
YP(1) = 0. AY 99
YP(2) = 0. AY 100
S = SQRT ( (X(2)-X(1))**2 + (Y(2)-Y(1))**2) AY 101
RETURN ' AY 102
C . AY 103
C *** FIRST SLOPE GIVEN AY 104
60 SLPN = ATAN2 (Y(2)-Y(1)-SLP1*(X(2)-X(1)), AY 105
1 X(2)-X(1)-SLP1MY(2)-Y<1))) AY 106
GO TO 90 AY 107
AY 108
C *** LAST SLOPE GIVEN AY 109
70 SLP1 = ATAN2 (Y(2)-Y(1)-SLPN*(X(2)-X(1)) , AY 110
1 X(2)-X(1)-SLPN*(Y(2)-Y(1))) AY 111
GO TO 90 AY 112
AY 113
C *** CLOSED LOOP — PERIODIC SPLINE — CALCULATE SLOPES AY 114
C FOR JOIN AY 115
80 DELN = SQRT((X(NM1)-X(N))**2+(Y(NM1)-Y(N))**2) AY 116
DELNN = DELSH-DELN AY 117
Cl = -DELS1/DELN/DELNN AY 118
C2 = (DELS1-DELN)/DELS1/DELN AY 119
C3 = DELN/DELNN/DELS1 AY 120
SX = C1*X(NM1)+C2*X(1)+C3*X{2) AY 121
SY = C1*Y(NM1)+C2*Y(1)+C3*Y(2) AY 122
IF (SX.EQ.O. .AND. SY.EQ.O.) SX = 1 AY 123
SLP1 = ATAN2(SY,SX) AY 124
SLPN = SLP1 AY 125
C AY 126
C *** SET BOTH SLOPES AY 127
AY-2
-------
90 SLPP1 = SLP1
c SLPPN - SLPN AY 129
C *** SET UP RIGHT HAND SIDES OF TRIDIAGONAL LINEAR SYSTEM FOR AY 131
C XP AND YP _ v
100 XP(1) = DXl-COS(SLPPl) AY. i«
YP(1) = DYl-SIN(SLPPl) av
TEMP(l) = DELS1 *A
S = DELS1
IF (N.EQ.2) GO TO 120 A*
DO 110 1-2, NM1 Av
DELX2 = X(I+1)-X(I) ?Y
DELY2 = Y(I+1)-Y(I) 7t
DELS2 = SQRT(DELX2*DELX2+DELY2*DELY2) AY
DX2 = DELX2/DELS2 av
DY2 = DELY2/DELS2 av
XP(I) = DX2-DX1 av
YP(I) = DY2-DY1 VY
TEMP (I) = DELS2 ^Y
TEMAX = AMAX1(TEMAX,TEMP(I)) av
DELX1 = DELX2 {£
DELY1 = DELY2 ^v
DELS1 = DELS2 ™
DX1 = DX2 ^
c °Y1 - DY2 AY 152
C *** ACCUMULATE POLYGONAL ARCLENGTH av
S =S+DELS1 ™
110 CONTINUE
120 XP(N) = COS (SLPPN) -DX1 AY
YP(N) = SIN (SLPPN) -DY1 ^
N^
C *** DENORMALIZE TENSION FACTOR ay
SIGMAP = ABS (SIGMA) 'FLOAT
-------
TEMPO = DIAGIN*SPDIAG AY 192
DIAG1 = DIAG2 Ay 193
140 CONTINUE AY 194
150 DIAGIN = 1./(DIAG1-SPDIAG*TEMP(NM1)) AY 195
XP(N) = DIAGIN* (XP(N)-SPDIAG*XP (NMD) AY 196
YP(N) = DIAGIN*(YP(N)-SPDIAG*YP(NM1)) AY 197
AY 198
C *** PERFORM BACK SUBSTITUTION AY 199
DO 160 1=2,N AY 200
IBAK = NP1-I AY 201
XP(IBAK) = XP{ IBAK) -TEMP (IBAK) *XP (IBAK-l-1) AY 202
YP(IBAK) = YP
-------
SUBROUTINE WKRV2 (T,XS,YS) a7 ,
SAVE ™ l
C AZ 2
AZ 3
C THIS SUBROUTINE PERFORMS THE MAPPING OF POINTS IN THE AZ 4
C INTERVAL (0.,1.) ONTO A CURVE IN THE PLANE. THE SUBROUTINE AZ 5
C WKRV1 SHOULD BE CALLED EARLIER TO DETERMINE CERTAIN AZ 6
C NECESSARY PARAMETERS. THE RESULTING CURVE HAS A PARAMETRIC AZ 7
C REPRESENTATION BOTH OF WHOSE COMPONENTS ARE SPLINES UNDER AZ 8
C TENSION AND FUNCTIONS OF THE POLYGONAL ARCLENGTH PARAMETER. AZ 9
\*
C COMMON VARIABLES AND PARAMETERS ON INPUT— AZ 11
C T = A REAL VALUE OF ABSOLUTE VALUE LESS THAN OR AZ 12
C EQUAL TO 1. TO BE MAPPED TO A POINT ON THE CURVE. THE AZ 13
C SIGN OF T IS IGNORED AND THE INTERVAL (O.,l.) IS MAPPED AZ 14
C ONTO THE ENTIRE CURVE. IF T IS NEGATIVE THIS INDICATES AZ 15
C THAT THE SUBROUTINE HAS BEEN CALLED PREVIOUSLY (WITH ALL AZ 16
C OTHER INPUT VARIABLES UNALTERED) AND THAT THIS VALUE OF AZ 17
C T EXCEEDS THE PREVIOUS VALUE IN ABSOLUTE VALUE. WITH AZ 18
C SUCH INFORMATION THE SUBROUTINE IS ABLE TO MAP THE POINT AZ 19
C MUCH MORE RAPIDLY. THUS IF THE USER SEEKS TO MAP A AZ 20
C SEQUENCE OF POINTS ONTO THE SAME CURVE, EFFICIENCY IS AZ 21
C GAINED BY ORDERING THE VALUES INCREASING IN MAGNITUDE AZ 22
C AND SETTING THE SIGNS OF ALL BUT THE FIRST, NEGATIVE, AZ 23
C NPTS = THE NUMBER OF POINTS WHICH WERE INTERPOLATED AZ 24
C TO DETERMINE THE CURVE, C^ 25
C X,Y = ARRAYS CONTAINING THE X- AND Y-COORDINATES A7 9fi
C OF THE INTERPOLATED POINTS, at 27
C XP,YP = THE ARRAYS OUTPUT FROM WKRV2 CONTAINING- A7 9P
C CURVATURE INFORMATION, £7 90
C S = THE POLYGONAL ARCLENGTH OF THE CURVE AZ 30
C SIGMA = THE TENSION FACTOR (ITS SIGN IS IGNORED). AZ 31
f* TCTT5 — 'HT7!TTl^rv¥TT-r**r»-^«_.«,___ *"ltl J 1.
C LSLP = A FLAG WHICH IF >0 REQUESTS THE SLOPE A7 39
AZ 33
W
C TANGNT = THE SLOPE REQUESTED BY LSLP
C THE PARAMETERS NPTS,, X, Y, XP, YP , S, AND SIGMA SHOULD BE INPUT AZ 35
,
C UNALTERED FROM THE OUTPUT OF WKRV1
Q '
C ON OUTPUT — AZ 37
C XS,YS = THE X- AND Y-CO
C POINT ON THE CURVE.
C
C XS,YS = THE X- AND Y-COORDINATES OF THE IMAGE A7 3Q
C POINT ON THE CURVE. "? ^
C T,NPTS,X,Y,XP,YP,S, AND SIGMA ARE UNALTERED. AZ 41
COMMON /WKRV/ NPTS, NSLP , SLP 1, SLPN, LSLP, TANGNT, S, AZ 43
1 X(32),Y(32),XP(32),YP<32) Az 44
COMMON /CNTRL/ SIG, SIGMA, INFO, NPTO, TSRT, DTIM, Zl, Z2, DCON, EHC, EXN, AZ 45
c l FLST,TLST AZ ^
N = NPTS AZ 47
c AZ 48
C *** DENORMALIZE SIGMA AZ, ^
SIGMAP = ABS (SIGMA) *FLOAT(N-1)/S *~ °
***
STRETCH UNIT INTERVAL INTO ARCLENGTH DISTANCE A7
TN = ABS (T*S)
D 1
c AZ 54
c "*
IF (T.LT.O.) GO TO 10 0
II = 2
XS = X(l) AZ 59
YS = Y(l) AZ 60
SUM =0. AZ 61
IF (T.LT.O.} RETURN AZ. !f
Q AZ 63
AZ 64
AZ-1
-------
C *** DETERMINE INTO WHICH SEGMENT TN IS MAPPED AZ 65
10 DO 30 I=IlfN AZ 66
DELX = Xd)-X(I-l) AZ 67
DELY = Y(I)-YU-l) AZ 68
DELS = SQRT(DELX*DELX+DELY*DELY) AZ 69
IF (SUM+DELS-TN) 20,40,40 AZ 70
20 SUM = SUM+DELS AZ 71
30 CONTINUE AZ 72
C AZ 73
C *** IF ABS(T) IS GREATER THAN 1., RETURN TERMINAL POINT ON AZ 74
C CURVE AZ 75
C AZ 76
XS = X(N) AZ 77
YS = Y(N) AZ 78
RETURN AZ 79
C A2 go
C *** SET UP AND PERFORM INTERPOLATION AZ 81
40 DELI = TN-SUM AZ 82
DEL2 = DELS-DELI AZ 83
EXPS1 = EXP(SIGMAP*DEL1) AZ 84
SINHD1 = .5MEXPS1-1./EXPS1) AZ 85
EXPS2 = EXP(SIGMAP*DEL2) AZ 86
SINHD2 = .5MEXPS2-1./EXPS2) AZ 87
EXPS = EXPS1*EXPS2 AZ 88
SINHS = .5MEXPS-1./EXPS) ' AZ 89
XS = (XP(I>*SINHD1+XP(I-1)*SINHD2)/SINHS+ AZ 90
1 «X(I)-XP(I))*DEL1+(X(I-1)-XP
-------
C
C
C
C
C
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 AXES (X,Y,FIRSTV, FINALV, SCALE, TSTEP, ASTEP, NDEC, ANGLE,
1 v*D , NCHAR , LABEL )
*** SAI SUBROUTINE AXES
GW LUNDBERG/SAI DEC 76
X,Y = COORDINATES IN INCHES OF AXIS LINE STARTING
POINT
FIRSTV = STARTING VALUE FOR THE AXIS
FINALV = ENDING VALUE FOR THE AXIS
SCALE = INCHES/UNIT FOR FIRSTV, FINALV, TSTEP, ASTEP
TSTEP = STEP SIZE FOR TICS
ASTEP = STEP SIZE FOR LABELED TICS
NDEC = FORMAT FOR LABELS — SEE SUBROUTINE NUMBER
ANGLE = ANGLE OF AXIS IN DEGRES FROM HORIZONTAL
IBCD = THE AXIS TITLE AS ARRAY OR HOLLERITH STRING
NCHAR = NUMBER OF CHARACTERS IN TITLE
) 0, TIC. MARKS, ANNOTATION AND TITLE PLOTTED ON
CLOCKWISE SIDE OF AXIS LINE
{ Of ON COUNTER CLOCKWISE SIDE
THIS ROUTINE WAS WRITTEN FOR A MATRIX PLOTTER -- IT DOES
NOT OPTIMIZE PEN MOVEMENTS. THE ROUTINE SHOULD BE MACHINE
INDEPENDENT
*** FOLLOWING ARE ADJUSTABLE — IF LABEL > 0, ALL TICS ARE
LABELED, IF LABEL = 0, THE LAST TIC IS NOT LABELED,
IF LABEL < 0, THE FIRST AND LAST ARE NOT LABELED
*** DEFINE VARIOUS CHARACTER SIZES
SAVE
COMMON /PLTVEC/ HCT {20} , OT (20) , NH, OHC, HCG, PLTGRD, OXN, XNG, HC1 , XN1
1 TICSIZ,DIGSIZ,CHRSIZ,IPLDEV
INTEGER IBCD (3)
CHARACTER*24 IBCD
*** STEP 1 -- DRAW AXIS AND TIC MARKS
*** MOVE PEN TO START OF AXIS
XO=X
YO=Y
CALL PLOT (XO,YO,3l
*** LOCATE THE OTHER END AND DRAW AXIS
COSA=COS (ANGLE *0 . 0174 532 94)
SINA=SIN (ANGLE*0 .017453294 )
AXLEN= (FINAL V-FIRSTV) * SCALE
X1=XO+AXLEN*COSA
Y1=YO+AXLEN*SINA
CALL PLOT (X1,Y1,2)
*** ADD THE TIC MARKS ON WRONG SIDE OF AXIS
POS=FLOAT(ISIGN(1, NCHAR) )
IF (TSTEP. EQ.O.) GO TO 20
NTIC=(FINALV-FIRSTV)/TSTEP+1 5
DO 10 J=1,NTIC
*** MOVE PEN TO START OF TIC
X1=XO+FLOAT(J-1) *TSTEP*SCALE*COSA
Y1=YO+FLOAT(J-1) *TSTEP*SCALE*SINA
CALL PLOT (X1,Y1,3)
IBBA
BA
BA
BA
Of\
BA
BA
BA
BA
RA
an
RA
±m
BA
RA
on
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
RA
Of\
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
BA
DA
BA
n A
Dn
D A
BA
BA
BA
BA
BA
BA
n TV
BA
BA
O A
BA
BA
BA
T} TV
BA
D A
BA
D A
BA
BA
BA
1
2
3
4
T
5
6
7
8
i n
X U
11
X X
1 "7
1 J
14
15
16
X w
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
^
35
35A
36
37
38
39
40
41
42
43
44
A C.
'i J
A C
-------
C *** DRAW A TIC NORMAL TO AXIS BA 64
X1=X1+TICSIZ*POS*SINA BA 65
Y1=Y1-TICSIZ*POS*COSA BA 66
CALL PLOT (X1,Y1,2) BA 67
10 CONTINUE BA 6Q
C BA 69
C *** STEP 2 — SET IN LABELED TICS ON CORRECT SIDE OF AXIS BA 70
c BA 71
BA 72
20 IF (ASTEP . EQ . 0 . ) GO TO 50 BA 73
NTIC=(FINALV-FIRSTV)/ASTEP+1.5 BA 74
NFRST=1 BA 75
NLST=NTIC BA 76
IF ( LABEL. LE.O) NLST=NLST-1 BA 77
IF ( LABEL. LT.O) NFRST=NFRST+1 BA 78
DO 30 J=NFRST,NLST BA 79
X1=XO+FLOAT(J-1)*ASTEP*SCALE*COSA BA 80
Y1=YO+FLOAT(J-1)*ASTEP*SCALE*SINA BA 81
CALL PLOT (X1,Y1,3) BA 82
C BA 83
X1=X1-TICSIZ*POS*SINA BA 84
Y1=Y1+TICSIZ*POS*COSA BA 85
CALL PLOT (X1,Y1,2) BA Q6
30 CONTINUE - BA 87
C BA 88
C *** STEP 3 ~ ANNOTATE THE TIC MARKS BA 89
c BA go
BA 9 1
C *** DETERMINE PERPENDICULAR OFFSET TO BOTTOM OF CHARACTER BA 92
OFFSET=TICSIZ+0.03 BA 93
IF (POS.NE.1.0) OFFSET=OFFSET+DIGSIZ BA 94
BA 95
C *** CALCULATE LOCATION OF FIRST CHARACTER BA qg
XO=XO-DIGSIZ*COSA BA 97
YO=YO-DIGSIZ*SINA BA 9Q
XO=XO-OFFSET*POS*SINA BA 99
YO=YO+OFFSET*POS*COSA BA 100
C *** ANNOTATE THE TIC MARKS RA
NFRST=1
NLAST=NTIC BA
IF (LABEL. LE.O) NLAST=NLAST-1 BA 105
IF (LABEL. LT.O) NFRST=NFRST+1 " BA 106
DO 40 J=NFRST,NLAST BA 1Q7
? BA 108
C *** GET FLOATING POINT VALUE OF ANNOTATION BA 1Q9
FPN=FIRSTV+FLOAT(J-1)*ASTEP BA 110
^ BA 1 1 1
C *** GET LOCATION AND PLOT FPN BA 112
X1=XO+FLOAT(J-1) *ASTEP*SCALE*COSA BA 113
Y1=YO+FLOAT(J-1) *ASTEP*SCALE*SINA BA 114
CALL NUMBER (XI, Yl , DIGSIZ, FPN, ANGLE, NDEC) BA 115
c 4° CONTINUE BA U6
C *** STEP 4 — ADD AXIS TITLE BA 118
c BA iig
BA i p n
50 IF (NCHAR.EQ.O) GO TO 60 BA I2l
C *** SET TITLE OFFSET — DISTANCE FROM AXIS TO CHARACTERS BA 122
OFFSET=TICSIZ+DIGSIZ+0.10 BA 123
IF (NCHAR.LT.O) OFFSET=OFFSET+CHRSIZ BA
C *** CALCULATE TITLE SIZE BA
TSIZ=CHRSIZ*FLOAT(IABS(NCHAR) ) BA 127
BA-2
-------
°FFSET FR°M BEGINNING OF AXIS TO FIRST CHARACTER BA 129
(AXLEN-TSIZ) BA
*** CALCULATE LOCATION OF FIRST CHARACTER AND PLOT TITLE BA 132
XO=X+OFF*COSA n_
YO=Y+OFF*SINA ?? "3
XO-XO-OFFSET*POS*SINA ^ :„
YO-YO+OFFSET*POS*COSA na ,tl
NCCAR=IABS(NCHAR) fT ""
CALL SYMBOL (XO, YC), CHRSIZ, IBCD, IDUM, ANGLE, NCCAR) BA 138
FINISHED ^A 139
60 RETURN . BA 140
END BA 141
BA 142-
BA-3
-------
SUBROUTINE FRAME (X,Y,FRSTX,FINX,SIZX,TICX,STEPX,NDECX,FRSTY,FINY
1SIZY,TICY,STEPY,NDECY,LBLBOT,NB,LBLLFT,NL,LBLTOP,NT,LBLRGT,NR)
*** PURPOSE — PREPARES AN ANNOTATED FOUR SIDED FRAME
WITH LOWER LEFT CORNER AT (X,Y)
GWL/SAI MARCH 77
SEE SUBROUTINE AXES FOR DESCRIPTION OF ARGUMENTS
SAVE
COMMON /PLTVEC/ HCT(20),OT(20),NH,OHC,HCG,PLTGRD,OXN,XNG,HCC,XNC,
1 TICZ,DIGZ,CHRZ,IPLDEV
DIMENSION LBLTOP{6),LBLRGT(6)
CHARACTER*]. LBLRGT, LBLTOP
CHARACTER*12 LBLLFT, LBLBOT
*** CALCULATE THE AXES LENGTHS
XLEN=(FINX-FRSTX)*SIZX
YLEN=(FINY-FRSTY)*SIZY
*** PLACE GRIDDED LINES ON PLOT
IF (ABS(PLTGRD).EQ.O.) GO TO 80
IF (PLTGRD.LT.0.) GO TO 50
CALL NEWPEM (2)
STINC=(STEPY/10.)*SIZY
ILP=FINY/STEPY+.005
ILP=ILP*10-1
STVAL=STINC
J=l
DO 20 1=1,ILP
IF (J.EQ.2) GO TO 10
CALL PLOT (X,STVAL,3)
CALL PLOT (XLEN,STVAL,2)
STVAL=STVAL+STINC
J=2
GO TO 20
10 CALL PLOT (XLEN,STVAL,3)
CALL PLOT (X,STVAL,. 2)
STVAL=STVAL+STINC
J=l
20 CONTINUE
STINC=(STEPX/10.)*SIZX
ILP=FINX/STEPX+.005
ILP=ILP*10-1
STVAL=STINC
J=l
DO 40 1=1,ILP
IF (J.EQ.2) GO TO 30
CALL PLOT (STVAL,Y,3)
CALL PLOT (STVAL,YLEN,2)
STVAL^STVAL+STINC
J=2
GO TO 40
30 CALL PLOT (STVAL,YLEN,3)
CALL PLOT (STVAL,Y,2)
STVAL=STVAL+STINC
J=l
40 CONTINUE
CALL NEWPEN (1)
GO TO 80
PLOT GRIDDED LINES WITH MATRIX PLOTTER
,BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
BB
1
2
3
4
5
6
7
8
9
10
11
12
13
13A
13B
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
BB-1
-------
50 IPLT=IFIX(PLTGRD) nn „
CALL NEWPEN (IPLT) Jn c/
STINC={STEPY/10.)*SIZY ^ f*
ILP=IFIX(FINY/STEPY+0.005)*10-1 nn lc
STVAL=STINC BB °°
DO 60 1=1,ILP II I1
IF (MOD(I,10).EQ.O) CALL NEWPEN (IPLT+1) nn II
CALL PLOT (X+0.01,STVAL,3) £n ™
CALL PLOT (XLEN,STVAL,2) ** .1°
IF (MOD(I,10).EQ.O) CALL NEWPEN (IPLT) nn 4i
STVAL=STVAL+STINC „ '*
60 CONTINUE BB 73
STINC=(STEPX/10.)*SIZX ^n ^l
ILP=IFIX(FINX/STEPX+0.005)*10-1 nn nl
STVAL=STINC BB 76
DO 70 1=1,ILP !? ;7
IF (MOD(I,10).EQ.O) CALL NEWPEN (IPLT+1) nn -70
CALL PLOT (STVAL,Y-0.02,3) ^ II
CALL PLOT (STVAL,Y,,3) ^ o°
CALL PLOT (STVAL,YLEN,2) ^ ",
IF (MOD(I,10).EQ.O) CALL NEWPEN (IPLT) nn oo
STVAL=STVAL+STINC BB ^3
70 CONTINUE BB 84
CALL NEWPEN (0) !? 85
80 CONTINUE BB 86
c BB 87
C *** PLOT THE FOUR SIDES WITH ANNOTATIONS nn II
) BB 90
,.,f BB 91
AXES (Y+yiiNRTjB 92
•*• •*• I
BB 9"3
CALL AXES (X+XLEN,Y,FRSTY,FINY,SIZY,TICY,STEPY,NDECY,90.,LBLRGT,-NBB 94
c 1R'~1) BB 95
RETURN BB 96
END BB 97
BB 98
BB-2
-------
SUBROUTINE OPENA
OPEN SUBROUTINE FOR OZIPM4
CHARACTER*80 IPATH
CHARACTER*! IAfIA1
OPEN INPUT AND OUTPUT FILES FOR EKMA/OZIPM4
10 CONTINUE
READ (14,100,END=99) IA, IA1, IPATH
IUNIT = 0
IF (IA .EQ. '!' .OR. IA .EQ. 'I') IUNIT = 7
IF (IA .EQ. 'o' .OR. IA .EQ. '0') IUNIT = 10
IF (IA .EQ. 'p' .OR. IA .EQ. 'P') IUNIT = 8
IF {IA .EQ. 'r' .OR. IA .EQ. 'R') IUNIT = 9
IF (IA .EQ. 'e' .OR. IA..EQ. 'E') IUNIT = 11
IF (IA .EQ. 'm' .OR. IA .EQ. 'M') IUNIT = 54
CHECK FOR CORRECT INPUT STRUCTURE
IF (IA1 .NE. '=') IUNIT = 0
IF {IUNIT .NE. 0) GO TO 20
STOP
20 CONTINUE
IF (IUNIT .NE. 54) OPEN (IUNIT, FILE = IPATH)
THE FOLLOWING LINE IS THE ONLY EXTENSION TO FORTRAN 77 STANDARDS
IN THIS SOURCE CODE. IN ORDER TO CREATE A METAFILE FOR PLOTTING
PURPOSES, THE LINE WILL NEED TO BE UNCOMMENTED AND POSSIBLY
REWRITTEN TO MEET THE SPECIFICATIONS OF YOUR COMPUTER SYSTEM
IF (IUNIT .EQ. 54) OPEN (IUNIT, FILE = IPATH, FORM = 'BINARY')
GO TO 10
99 RETURN
10-0 FORMAT (A, A, 8OA)
END
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
BC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
BC-1
-------
SUBROUTINE PLOTS (11,12,13) nn i
RETURN °" ;
END BD 3
SUBROUTINE NEWPEN (IPLT) nn 4
RETURN
BD
END
SUBROUTINE PLOT (XXZE, YYZE, IP1)
RETURN „
END Bg
SUBROUTINE SYMBOL (ORGX, ORGY, CHRZ, ITL1, IDUMr FPS1, IS1) BD 10
RETURN " ^
END BD 12
SUBROUTINE NUMBER {XL, YL, CHRSZ, OZL, ANGD, IDG) BD it
RETURN on ,,
% II
BD-1
-------
C. tfr.V~T> ACCEF,r>'O\ NO.
4. TIT L.I: AMIIi SUBTITLE
ts «;"•'<; Manual for OZIPM-4 (Ozone Isopleth Plotting
with Optional Mechanisms/Version 4): Volume 2:
Computer Code
j£. •= -EPC R f DA'
6. I'E.RFORM'NG ORGANIZATION CODE
7. AUTHOR(S)
8. PERFORMING ORGANIZATION REPORT NO
EPA-450/4-89-009b
9. PERFORMING ORGANIZATION NAME AND ADDRESS
U. S. Environmental Protection Agency
Office of Air Quality Planning and Standards
Research Triangle Park, NC 27711
10. PROGRAM ELEMENT NO.
11. CONTRACT/GRANT NO.
12. SPONSORING AGENCY NAME AND ADDRESS
13. TYPE OF REPORT AND PERIOD COVERED
Final
14. SPONSORING AGENCY CODE
15. SUPPLEMENTARY NOTES
EPA Contact: Keith Baugues
16. ABSTRACT
This document lists the OZIPM-4 program and describes modifications necessary
to run the program on several different computers.
17.
KEY WORDS AND DOCUMENT ANALYSIS
a.
DESCRIPTORS
b.lDENTIFIERS/OPEN ENDED TERMS C. COSATI Field/Group
Ozone
Photochemical modeling
VOC control strategies
18. DISTRIBUTION STATEMENT
Unlimited
19. SECURITY CLASS (This Report)
Unclassified
20. SECURITY CLASS (This page/
Unclassified
21. NO. OF PAGES
173
22. PRICE
EPA Form 2220-1 (Rev. 4-77) PREVIOUS EDI TION is OBSOLETE
-------
------- |