United States
Environmental Protection
Agency
Office of Air Quality
Planning and Standards
Research Triangle Park. NC 27711
KPA-453/R-94-058B
July 1994
AIR
JV EPA Toxic Modeling System Short-Term (TOXST)
User's Guide: Volume II
ENVIRONMENTAL
PROTECTION
\
si e\*
-------
TOXIC MODELING SYSTEM SHORT-TERM (TOXST)
USER'S GUIDE
VOLUME II
CASE STUDY AND SOURCE CODE
July 30, 1994
Prepared for:
U.S. Environmental Protection Agency
Office of Air Quality Planning and Standards
Research Triangle Park, NC 27711
-------
DISCLAIMER
This document has been reviewed by the Office of Air Quality Planning and Standards, U.S.
Environmental Protection Agency, and approved for publication. Approval does not signify
that the contents necessarily reflect the view and policies of the U.S. Environmental Protection
Agency, nor does mention of trade names or commercial products constitute endorsement or
recommendation for use.
-------
-------
ACKNOWLEDGMENTS
This document was originally based on the document, Integrated Toxic Expected Exceedance
(INTOXX) Model User's Guide, written by T. E. Stoeckenius and J. R. Pehling of Systems
Applications International, San Rafael, California. That work was funded by the U. S.
Environmental Protection Agency (EPA) under Contract 68D90006. A revision was performed
in 1992 by J.S. Dunn of Research Triangle Institute, Research Triangle Park, NC, which was
also funded by the EPA under Contract 2D1482NALX. During the revision made by Research
Triangle Institute the INTOXX model was renamed TOXST. Subsequent modifications have
been the result of efforts in 1993 by T. Grosch, D. Hlinka, and D. Sullivan of Sullivan
Environmental Consulting, Alexandria, VA under EPA contract 68D20189. The development
of this modeling system has been supervised by Dr. David E. Guinnup of the EPA.
n
-------
Appendix A
Case Study
-------
A. 1.Case Study
A case study was conducted to demonstrate the application of the TOXST model at a
representative chemical manufacturing facility (Sullivan, Grosch and Hlinka, 1993). The
process area was one small part of a major organic chemical manufacturing facility located
somewhere in the U.S.. To protect the confidentiality of the facility, the specific name of the
plant and specific components of the process area will not be described. In addition, receptor
coordinates have been changed.
A.2.Pollutants / Health Thresholds
The actual emissions from this facility's process area include four common chemicals. For the
purposes of this case study, the following pollutants were evaluated: ethyl acetate,
acetaldehyde, acetic acid, and styrene. As an example of state requirements, the Maryland
acceptable thresholds will be used, which set a compliance level for one-hour concentrations as
1/100* of the short-term emission limits (STELS), and 1/100* of the 8-hour Threshold Limit
Values (TLV) for 8-hour averages.
Table A-l summarizes the Maryland acceptable thresholds, and the ratio of the TLV for
acetaldehyde over the other chemical's TLVs (used subsequently for pre-processing emissions).
Since a wide range of factors can be used to convert STELS and TLVs to state ambient
guideline values, the exceedance displays shown in this report are shown relative to factors of
1/100* and 1/200* of the applicable STEL or TLV value.
A.3.Facility Process Area Emissions
The selected process area represents a typical industrial application of TOXST. This operation
is comprised of two major units: (1) a dedicated unit that produces intermediate products that
supply the main production unit, and (2) a production unit that is used to produce a variety of
products on a campaign basis. Figure A-l shows a simplified sketch of the two units relative
to the entire plant and the plant boundaries.
A-l
-------
TABLE A-l
TLVs, STELs, 8-Hour and 1-Hour
Concentration Thresholds For Each Pollutant
Pollutant
ETHYL
ACETATE
ACETALDE
HYDE
ACETIC
ACID
STYRENE
TLV
0*g/m*)
1,400,000
180,000
25,000
215,000
STEL
OigV)
N/A
270,000
N/A
425,000
8-Hour
Thresholds
(jigfm*)
14,000
1,800
250
2,150
f-Hour
Thresholds
Oig/tn3}
N/A
2,700
N/A
4,250
8-Hour
Acetaldehyde
Threshold/
Pollutant
Threshold
0.13
1.00
7.20
0.84
1-Hour
Acetaldehyde
Threshold/
Pollutant
Threshold
N/A
1.00
N/A
0.64
FIGURE A-1
LOCATION OF POOCESS UNITS AND
RECEPTORS ALONG PLANT BOUMXTT
Y Direction (Km)
3
2.S
t.S
0.5
a
a
0.5 t 1.9 2
X Direction (Km)
A-2
-------
This figure also shows the locations of the 36 boundary receptors that were used in the
modeling analysis.
Both units are typically operated on a three-month on and one-month off cycle1, with nearly
continuous emissions for some sources, and also batch emissions associated with both units.
The dedicated unit (Unit 1) that supplies the intermediate products always produces the same
intermediates for use in Unit 2. The operation of the production unit (Unit 2), on the other
hand, is varied to produce the range of chemical products that are manufactured by this process
area.
The operation of this process area produces emissions from the following major categories: (1)
production equipment vents, (2) breathing and working loss from chemical storage tanks, (3)
emissions during cleaning of tanks (since many tanks are not dedicated to the storage of only
one chemical), and (4) infrequent chemical spills during transfer operations. Some
simplifications were made to minimize the time required for the engineering staff of the case
study plant to define emissions data. Data were gathered based on a two-day trip to the plant.
For a study to support a permit, it would be projected that 1-2 man-weeks of engineering
support would be needed to gather the additional information required to define emissions data
beyond the resolution typically required for a routine ISCST2 model application study. Each of
the four source categories is described below:
Production Vents - Both Units 1 and 2 contain production vents that emit a variety of
chemicals, some on a continuous basis, and others on an infrequent basis, such as operating for
a one week campaign, 4-8 times per year. Sources that emit through the vents include stills
associated widi both units. Refer to Table A-2 for a listing of the operational characteristics of
each vent modeled in this study, including: (1) the annual frequency of releases, (2) the
duration of operation each batch cycle, and (3) emission rates for all four pollutants.
Breathing and Working Losses from Storage Tanks - Data were available for chemical
storage for Unit 2 only, therefore, this case study was defined to exclude storage emissions
from Unit 1. Data were available to describe the number of storage cycles per year for each
storage tank. Refer to Table A-2 for a summary of the number of storage cycles and the
emissions from each tank. It was assumed for this example that all breathing losses occur
during the daytime (when tanks are relatively warm), and that working losses occur throughout
the diurnal cycle.
For simplicity, it was assumed that the continuous sources
in Unit 1 operate three months on and one month off, and
that intermittent sources could "turn on" at any time. For
a regulatory application, however, the modeling could be
refined by doing four separate model runs, i.e. one model
run to represent each three month period for the continuous
sources, and one to represent the intermittent sources. The
results of each model run could then be merged during post
processing to estimate exceedances.
A-3
-------
Tank Cleaning - Tanks are steam cleaned for approximately four hours whenever a different
chemical will be stored. It was assumed that 3 gallons (approximately 11.4 liters) of residual
chemical on the sides of the tanks and the chemical potentially left in the bottom would be
emitted to the atmosphere.2 Emissions during the first hour are relatively low because the
temperature within the tanks will not reach maximum temperature. Most emissions would be
released during the second hour when the cleaning process reaches full temperature. The
following was assumed:
Hour
1
2
3
4
% Emissions Released
10
80
10
0
Spills - While spills during transfer operations are rare, this source also was considered as part
of the case study. To support an actual facility, the operational records could be used, or for a
new facility data representative of a similar facility could be used, to define the probability of a
range of spills. For illustrative purposes only, the following were assumed:
• Two very small spills (5 gallons each) every year.
• A small spill (10 gallons) every year.
• The duration of emissions for each spill was assumed to be 2 hours.
• It was conservatively assumed that a 3-foot diameter pool was formed during the 5 gallon
spills, and a 5-foot diameter pool during the 10 gallon spill.
• It was assumed that 50 percent of the spill volatilized during the period specified (USEPA,
1989).
• It was assumed in this illustration that acetaldehyde was spilled in each of the two spill
scenarios.
A.3.1 Composite Emissions
For the composite chemical model runs, it was assumed that the health effects were interactive
(which is consistent with the eye and respiratory irritation effects for each of these four
chemicals). The emissions for each pollutant were pre-processed to show emissions relative to
The storage capacity of the tanks ranged from 1 X 106 to 2 X
10* liters each.
A-4
-------
acetaldehyde, consistent with Section 2.3.4 of the TOXST User's Guide. In particular, the
composite annual (tons/year) emission rates relative to acetaldehyde emissions were calculated
first, based on the procedure described in Section 2.3.4 of the text3. The annual pollutant
emission rates for each source were factored by the appropriate 8-hour and 1-hour acceptable
threshold ratios shown hi Table A-l, and then were factored to represent each emission
category (start-up, routine operation, and tank cleaning). The factors for each emission
category were supplied by engineers at the example plant, and are not displayed in this guide.
The resulting composite emission rates presented in Tables A-3 and A-4 were used for the
modeling runs of the composite chemicals. The processed emission rates are substantially
higher for the 8-hour averaging period, as shown in Table A-4, since there are more chemicals
with 8-hr TLVs than those with applicable STELS.
For the interactive mode, the procedure to develop a
composite emission rate is based on consideration of the
emission rate and the threshold for each species (See
Section 2.3.4 of TOXST User's Guide). A frequency
distribution of combined concentrations then can be
displayed, since multiple thresholds can be used in TOXX if
the emissions are preprocessed in this manner.
A-5
-------
TABLE A-2
Hours of Operation and Emission Rates
For Sources of Example Facility
Source
Number of
Times Source
On Per Year
Hours of
Operation
Each Cycle
Ethyl Acetate
Emission
Rat0(T/Y)
Acetalde-
hyde
Emission
Rate(T/Y)
Acetic
Acid
Emission
Rate (T/Y)
Styrene
Emission
Rate(T/Y)
PROCESS UNIT 1
SRC 1
SRC 2
SRC 3
SRC 4
3
3
30
34
2184
2184
144
144
22.680
1.422
9.564
2.203
4.860
0.450
13.042
1.714
0.000
0.010
0.289
0.000
0.000
0.000
0.000
0.000
PROCESS UNIT 2
SRC 5
SRC 6
SRC 7
SRC 8
SRC 9
SRC 10
SRC 11
SRC 12
3
27
21
24
12
2
12
12
2184
195
264
267
267
120
264
264
0.269
15.334
0.089
1.120
27.771
2.447
7.505
0.872
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
0.000
UNIT 2 STORAGE AREA
SRC 13
SRC 14
SRC 15
SRC 16
(5 Gallon)
SRC 17
(10 Gallon)
4
4
4
2
1
66
66
66
2
2
0.105
0.105
0.105
SPILLS
0.000
0.000
0.000
0.000
0.000
0.016
0.016
0.051
0.051
0.051
0.000
0.000
0.063
0.063
0.063
0.000
0.000
A-6
-------
TABLE A-3
Hours of Operation and Emission Rates
For Sources of 1-Hour Composite Emissions
Source
Number
of Times
Source On
Per Year
Hours of
Operation
Each Cycle
StattUp
Emission
Rate (G/S)
Routine
Emission
Rat*(G/S)
Max. Tank
Cleaning
Emission
Rate (G/S)
Yearly
Emission
Rate
-------
TABLE A-4
Hours of Operation and Emission Rates
For Sources of 8-Hour Composite Emissions
Source
Number
of Tune*
Source On
Per Year
Hours 0t
Operation
Each Cycle
Startup
Emission
Rate (G/S)
Routine
Emission
Rate (G/S)
Max. Tank
Cleaning
Emission
Rate (G/S)
Yearly
Emission
Rate(T/Y)
PROCESS UNIT 1
SRC 1
SRC 2
SRC 3
SRC 4
3
3
30
34
2184
2184
144
144
0.304
0.027
0.955
0.103
0.304
0.027
0.955
0.103
N/A
N/A
N/A
N/A
7.808
0.707
16.366
2.0
PROCESS UNIT 2
SRC 5
SRC 6
SRC 7
SRC 8
SRC 9
SRC 10
SRC 11
SRC 12
SRC 13
SRC 14
SRC IS
SRC 16
(5 Gallon)
SRC 17
(10 Gallon)
3
27
21
24
12
2
12
12
2184
195
264
267
267
120
264
264
0.001
0.115
0.0011
0.044
0.356
0.334
0.081
0.010
0.001
0.092
0.001
0.040
0.285
0.334
0.078
0.009
UNIT 2 STORAGE AREA
4
4
4
2
1
66
66
66
2
2
2.555
2.555
2.555
0.017
0.017
0.017
SPILLS
1.5531
3.1062
0.5177
1.0354
N/A
0.762
N/A
0.431
0.431
N/A
N/A
N/A
0.035
1.993
0.012
1.06
3.61
0.318
0.976
0.113
9.356
9.356
9.356
N/A
N/A
0.434
0.434
0.434
0.016
0.016
N/A = Not Applicable
A-8
-------
A.4. Model Input Files
Appendix A.I documents the input files used for the ISCST2 and TOXST model runs. A total
of 17 source groups were modeled in both ISCST2 and TOXST. Five years of hourly
meteorological data (1984-1985 and 1987-1989) were used to support the analysis, however,
only the 1984ISCST2 input and output files are shown in the Appendix A example. The
TOXX results are based only on 1984 and 1985.
A.5. Results of Model Runs
The results in this section are shown for the four chemical (composite) screening-level and
TOXST model runs. The following summaries are based on assuming additive effects for the
four chemicals, using pre-processing of emission rates as shown in Section 2.3.4 of the text.
A.5.1 Screening-Level Model Runs
Typically, a conservative, screening-level analysis should be done prior to using the TOXST
model, since more extensive emissions and dispersion modeling analysis are necessary to
support TOXST applications. TOXST should then be used only if a source fails the screen.
Table A-5 compares the number of exceedances for the base case using the tiered modeling
approach developed by EPA (USEPA, 1992). Maximum 1-hour composite emission rates were
used in the initial screen. Each of the two screening approaches shows predicted maximum 1-
hour concentrations to be above the guideline values.
A.5.2 TOXST Model Runs
Since the EPA Tier 1 and Tier 2 screening approaches (see Section A.5.1) show concentrations
of the composite emissions that exceed the threshold concentration for the 1-hour averaging
period, more detailed modeling analysis through TOXST was justified in order to demonstrate
compliance.
TABLE A-5
A-9
-------
1-2
g^ to
"" en
15
o-'s;
< a
60 C
.S o
13 U
3
u. on
-I
il
8 t
w ^
*" j
•^
?» j
^3
£.|
2 u
£
1?
3 |
•5 '
|j
§
3
1
'1
15
!j
t S
•1
i!
:o
;!
i jjj
; g
:«£
rl
'1
i?
^1
i
en
8.
S
00
O
1
CM
S
O
1
Ed
1
«
\e
PI
5
,
XI
00
o
O
1
«
O
®i
?
Tf"
1
3
o
I
3
o
CO
oo
PI
3
PI
§
s
00
s
o
•
3
o
1
o
s
cs
o
1
g
o
•
oo
*
O
CO
PROCE 1
o
S
(S
o
g
x>
g
O
*
oo
't
O
CO
«s
%l
o
s
ci
o
1
XI
g
O
•
oo
xi
O
5
CO
o
s
(S
o
1
XI
g
o
8
PI
oo
3
o
0
s
(S
o
1
x>
g
0
*
00
*
o
I
0
S
o
I
g
0
8
oo
3
O
O
CO
o
S
CM
O
s
XI
g
O
8
PI
00
3
O
CO
0
s
o
1
XI
g
O
•
00
3
0
1
a
3
1
oo
o
8
PI
O
«
O
PI
U
i
I
a
vO
00
•*"
I
O
O
•
o
•n
0
i
ISTORA 1
GE 1
CM"
3
PI
°°.
1
o
o
8
o
«
o
XI
CO
xT
§
oo"
1
00
*
^
2
ft
O
O
S
I
II
SPILLS |
00
8
cT
00
1
1
oo
i
M
8
PI
XI
o
§
i
1
§
o"
I
I*
P-"
CM
•
1
j.
I .a
H
00
(N
c
o
C3
Ui
^rf
<
O,
'^ ° S
(O — *^
(N W O
egl
=«*: =«: *
-------
The number of exceedances of the 1- and 8-hour thresholds for the composite emissions are
shown for each boundary receptor in Tables A-6 through A-9, based on four modeling
approaches:
I. Maximum emissions rates / ISCST2 only (Table A-6).
n. Average emission rates / ISCST2 only (Table A-7).
IE. Previous TOXST (no emissions distributions or batch treatments (see Table A-8). The
previous version of TOXST could not simulate batch operations or multiple hourly averaging.
For this case study, emission rates were set at the maximum emission rate for each batch and
non-batch source to simulate the treatment in the previous version of TOXST. As a means of
demonstrating the benefit of the new features in TOXST relative to the preceding version of the
model, these model runs were made using the new version of TOXST, but simulating the
previous version by maintaining peak emissions rates throughout each batch and non-batch
operation. This assumption is quite conservative for the 8-hour treatments.
IV. Current version of TOXST (Table A-9).
Figures A-2 and A-3 graphically summarize the data in Tables A-6 through A-9, based on the
most affected receptors. As shown, TOXST provides the flexibility to reduce the degree of
conservatism through using emission distributions, batch operations, and the multiple-hour
features.
A-ll
-------
TABLE A-6
Average Exceedances per Year
Across All Receptors* and All Years
For Maximum Composite Emission Rates (ISCST2)
Averaging Period Thresholds
1-Hour
SOURCES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALL SOURCES
COMBINED
U5Q
Itgfaf
0.00
0.00
0.00
0.00
-
-
-
-
-
-
-
-
0.00
0.00
0.00
48.00
84.80
179.40
1-Hour
2,700
/*g/m*
0.00
0.00
0.00
0.00
.
-
.
.
.
-
-
-
0.00
0.00
0.00
21.00
48.00
97.20
8-hour
900
figfm3
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
26.80
25.20
22.60
1.00
14.40
137.60
8-hour
1,800
/«g/m3
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
3.40
2.20
2.60
0.00
1.00
76.20
* Worst-Case Receptor Selected
A-12
-------
TABLE A-7
Average Exceedances per Year
Across All Receptors* and All Years
For Average Composite Emission Rates (ISCST2)
Averaging Period Thresholds
It 1-Hour
SOURCES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALL SOURCES
COMBINED
1,350
Itgta?
0.00
0.00
0.00
0.00
-
.
.
.
.
-
-
.
0.00
0.00
0.00
0.00
0.00
0.00
1-Hoor
2,700
WS/m3
0.00
0.00
0.00
0.00
-
-
.
.
-
.
-
.
0.00
. 0.00
0.00
0.00
0.00
0.00
8-hour
900
pg/m*
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
. 0.00
0.00
0.00
0.00
0.00
: 0,00
8-hour
1,800
ftg/m3
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
• o.oo
o.bo
0.00
0.00
0.00
0.00
" Worst-Case Receptor Selected
A-13
-------
TABLE A-8
Average Exceedances per Year
Across All Receptors* and All Years
For Maximum Composite Emission Rates (Old TOXST)
Averaging Period Thresholds
It-Hour
SOURCES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALL SOURCES
COMBINED
1,350
ftsln?
0.00
0.00
0.00
0.00
-
-
-
.
-
-
-
-
0.00
0.00
0.00
0.03
0.03
0.48
1-Hour
2,700
l*g/ma
0.00
0.00
0.00
0.00
-
-
.
.
.
-
.
.
0.00
0.00 .
0.00
0.01
0.02
0.03
8-hour
900
jtg/m3
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.88.
0.80
0.72
0.00
0.00
3.12
8-hour
1,800
0g/m3
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.10
0.07
0.09
0.00
0.00
0.49
* Worst-Case Receptor Selected
A-14
-------
TABLE A-9
Average Exceedances per Year
Across All Receptors* and All Years
For Maximum Composite Emission Rates (Revised TOXST)
Averaging Period Thresholds
1
SOURCES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALL SOURCES
COMBINED
1-Hour
1,350
Itg/itf
0.00
0.00
0.00
0.00
-
.
.
.
.
.
-
-
0.00
0.00
0.00
0.02
0.01
0.03
1-Hour
2,700
/»g/ma
0.00
0.00
, 0.00
0.00
-
-
.
.
.
-
-
-
0.00
0.00
0.00
0.01
0.01
0.01
8-hour
900
pg/m3
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.06
0.06
0.06
0.00
0.00
0.23
8-hour
1,800
fig/m3
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.01
" Worst-Case Receptor Selected
A-15
-------
FIGURE A-2
COMPARISON OF PREDICTED NUMBER OF EXCEEDANCES
FOR MAXIMUM AND AVERAGE EMISSION RATE SCENARIOS
FOR 8-HOUR AVERAGING PERIOD
Number of Exceedances
•sou
200
150
100
en
Q
iO
BB?
1 A
1 H
!>
::
-if
!!
i!
is
*. o
EB
i
1 1
1 1
11 0
*M of/ml
13
Hi
fflK
/. 6
So S
>«n ai/al
Aximra BATI
L.6
»< HBBSaS
>ijio m/u >irao m/a3
;RAGE
FIGURE A-3
COMPARISON OF PREDICTED NUMBER OF EXCEEDANCES
FOR OLD CPREVIOUS} AND NEW CREFINEDD TOXST
FOR 8-HOUR AVERAGING PERIOD
Number of Exceedances
A-16
-------
A.6. Hypothetical Scenarios to Highlight Specific TOXST Features
The results that were presented in Sections A.I through A.5 were based on the actual
operations of the case study facility, with appropriate simplifications. Results in this section are
presented for hypothetical scenarios in order to more fully demonstrate the expanded features of
TOXST. For these hypothetical cases, 1-hour averaging periods were used for the first
example shown below, and 8-hour averaging is used for the subsequent two examples:
1. Assuming no tank cleaning or transfer during nighttime periods.
2. Assuming ramp-down emissions (rather than essentially uniform emissions prior to cleaning
of tanks) for the three largest batch operations in Unit #2, i.e. sources 6 and 9.
3.Assuming a hypothetical operation with two mutually exclusive groups of sources, i.e. 6 and
9.
A.6.1 No Tank Cleaning or Transfer During Nighttime Periods
The case study did not provide the opportunity to fully display the feature of TOXST to account
for different emissions on a daytime and nighttime basis. This hypothetical example better
displays the diurnal features of TOXST by using a potential mitigation option of restricting
certain operations to the daytime periods. Figure A-4 compares the standard case (with full
diurnal coverage) to the exceedances that would occur if there was no tank cleaning or transfers
during the nighttime periods (when adverse dispersion / transport conditions more typically
occur). This scenario should not be interpreted to suggest that such restrictions in operation
would necessarily be feasible at the case study facility.
The results of this hypothetical run, graphically shown in Figure A-4, indicate that the number
of exceedances of the 900 uglra? threshold are essentially reduced by a factor of two if it is
assumed that tank cleaning and tank transfer operations are performed only during the daylight
hours.
A-17
-------
FIGURE A-4
COMPARISON OF MODEL RESULTS FOR HYPOTHETICAL SCENARIO
OF NO TANC CLEANING OR TRANSFER EMISSIONS
DURIN3 NIGHTTIME HOURS TO STANDARD MODEL RUN
FOR 1-HOUR AVERAGIMS PERIOD
Number of Exceedances
s — III',',
BSTAVDASD B3HTPOTHETICAL
6.2 Ramp-Down for Major Batch Operations In Unit #2
The objective of this hypothetical scenario is to more fully display the enhanced benefits of the
new version of TOXST when there are large difference in emission rates throughout batch
operations (which was not the case for the process operations at this facility). An additional
model run was made where emissions at four sources were assumed to sharply ramp down after
initiation of the batch operation. The following provides the differing emission rates and
durations for the sources chosen for this scenario as compared to the standard model run.
A-18
-------
EMISSION RATES AND DURATIONS FOR SOURCES 1-2
USED IN THE 8-HOUR RAMP-DOWN SCENARIO
SOURCE 1
STANDARD RUN
1-2184 HOURS
0.882 G/S
SOURCE 2
0.055 G/S
RAMP-DOWN SCENARIO
HOURS 1-10
HOURS 11-60
HOURS 61-560
HOURS 561-1 184
HOURS 1185-2184
15.200 G/S
6.080 G/S
0.304 G/S
0.061 G/S
0.018 G/S
1.350 G/S
0.540 G/S
0.027 G/S
0.006 G/S
0.002 G/S
EMISSION RATES AND DURATIONS FOR SOURCES 3-4
USED IN THE 8-HOUR RAMP-DOWN SCENARIO
SOURCE 3
SOURCE 4
STANDARD RUN
1-144 HOURS
0.558 G/S
0.1 13 G/S
RAMP-DOWN SCENARIO
HOURS 1-5
HOURS 6-25
HOURS 26-60
HOURS 61-100
HOURS 101-144
19. 100 G/S
1.190 G/S
0.095 G/S
0.010 G/S
0.003 G/S
2.060 G/S
0.206 G/S
0.01 1 G/S
0.001 G/S
0.0002 G/S
The results of the hypothetical scenario for the 8-hour ramp-down emissions in comparison to
the more simplified treatment of assuming uniform emissions rates during the batch operations
are presented in Figure A-5. The results indicate that TOXST estimates of the number of
exceedances are nearly two-to-three times lower than the more simplified approach of using
constant, conservative emission rates during a batch operation.
A-19
-------
FIGURE A-S
COMPARISON OF MODEL RESULTS FOR SCBMRIO
OP RAMP-DOWN Oil S3 IONS
TO OLD TOXST MODEL RUN
FOR 8-HOUR AVERAGING PEPIOO
Number of Exceedances
SOLD TOXST •HYPOTHETICAL
A.6.3 Mutual Exclusion Scenario
TOXST is structured to provide a mutual exclusion option, where if this feature is selected,
only one source can be in operation at any given time. Since the case study facility is not
operated in a manner in which this model option could be displayed, a simplified scenario was
established to show this feature. Three of the source groups were selected from Unit #2 as a
demonstration of this feature, i.e. 3601, 3603 and 3604. As an illustration, it was assumed that
these were the only sources associated with this operation.
The results of the comparison of the hypothetical model run using the mutual exclusion option
to the standard model run without mutual exclusion are presented in Figure A-6.
A much lower number of exceedances is predicted when the mutual exclusion option is used,
even though in this particular hypothetical example the impacts were all shown to be below the
thresholds.
A-20
-------
FIGURE A-6
COMPARISON OF MODEL RESULTS FOR SCENARIO
OF MUTUAL EXCLUSION OPTION FOR SELECTED SOURCES
TO STANDARD MODEL RUN
FOR 8-HOUR AVERAGING PERIOD
Number of Exceedances
o.a
0.6
o. 4
0.2
0.65
0.41
0. 22
0.01
> 3IS If/U
>aso w/w
0.11
1
0
>13SO 09/13
I STANDARD
IHYPOTHETICAL
A.7. Sensitivity to Number of Simulations
Limited testing was done based on a set of hypothetical sources to evaluate the sensitivity of the
model output to the number of simulations. For this example, five sources, each with a 10 g/s
release were defined. Each source had the same source dimensions and were located in the
same geographic location. Each source, when "turned on" operated for 1 hour, however, the
probability of each source "turning on" varied as is shown in the table on the next page.
Figures A-7 and A-8 display the percent error as a function of frequency of "turning on" per
year and the number of simulations. "Percent error" for these purposes is defined
Source #
1
2
3
Number of Times Per
Year Source Turns On
5
10
100
A-21
-------
4
5
500
1999
relative to the "true" simulation which uses the maximum number of simulation years (1999).
Based on these illustrations, sources that emit 5-25 percent of the time could be represented by
100 simulations per year with the difference between 100 and 1999 simulations being less than
10 percent. For less frequent emitters, i.e. those that emit less than 5 percent per year, a
minimum of 200 simulations would be recommended based on these comparisons. For sources
that emit on a very infrequent basis, such as one time per year or less, it would be expected,
based on these initial tests, that more simulations would be needed to approach an accurate
representation. For example, perhaps a minimum of 500 simulations should be used in that
case. It would be recommended for applications with low probability sources that testing be
performed to confirm that a sufficient number of simulations were done to reasonably approach
the average exceedances that would be computed for a large number of simulations, e.g. 1,999.
FIGURE A-7
SENSITIVITY TO NIMBER OF SIMULATIONS
1-HOUR AVERAGING
FIGURE A-B
SENSITIVITY TO NUMBER OF SIMULATIONS
g-HXK) AVSMQIK1
CExExC*
35
ExE<1999
30
25
20
15
1
CB
\
1
i
••• " a
1
9
1
1
1
\
3
B
1 1U
' w j-jt wHit!* ES3 1 Tt
10 100 3DQ 2000
Annual hours of OMration
100 Sim Q 300 Sim B 700 Sim
A.8. Conclusions
This case study shows that the more conservative approaches of using Tier 1 or 2, or worst
A-22
-------
case emissions with a full year of meteorological data, show exceedances of the TLV/200 and
TLV/100 for the mix of pollutants evaluated. TOXST was shown to substantially reduce the
degree of conservatism relative to more simplistic treatments.
The greatest benefits of the enhanced version of TOXST for this case study were shown to be
for the multiple-hour scenarios (e.g. 8-hour averaging), and for sources that have highly
variable emission rates, e.g. batch operations, and sources that have significant differences in
operating characteristics on a daytime and nighttime basis.
For example, the simulation of the previous version of TOXST showed 3.12 exceedances per
year of the TLV / 200, while the current version showed 0.23.
The following additional observations can be made based on the case study:
It is important to recognize that in many cases it would not be necessary
to use the full features of the TOXST in order to determine compliance
of a facility with a specific short-term ambient standard. The first steps
should be to use the Tier 1 and 2 screening approaches, and then only if
necessary, evaluate compliance based on assuming maximum emission
rates along with a full year (or preferably five years) of meteorological
data. If compliance is demonstrated on this basis, there again should be
no reason to refine the emission terms. If further analysis is needed,
however, it would be recommended that the full features of the
enhanced version of TOXST be used where appropriate to more
accurately represent the operating characteristics of the sources.
Whenever the emissions variability can be characterized through
engineering analysis and TOXST, more accurate estimates would be
expected for peak exposures.
A common question concerning the use of TOXST relates to the
additional effort required to compile the model inputs that are needed
for the analysis. There are two separate considerations. First, the
ISCST2 modeling analysis that is needed to support TOXST is
comparable to the analysis that would be required to support a routine
(non-stochastic) assessment of peak exposures. Second, the emissions
data needed to support TOXST are more involved than for a non-
stochastic analysis. This is the area where additional analysis is
required. The data that serve as the basis for the existing emissions
inventory would need to be reevaluated to characterize the probabilities
and emission rates of the batch operations and the emission distributions
for non-batch sources. Based on this case study as an example, it
would appear that approximately two-weeks of engineering support
would be needed to compile source data of suitable resolution to support
A-23
-------
an actual permit preparation for a process area of the magnitude of the
case study.
TOXST is sensitive to the number of simulations if sources are being
modeled that emit on a very infrequent basis, e.g. less than five times
per year. Based on preliminary testing, it would be recommended that
a minimum of 200 simulations be used for sources that emit less than
25 percent of the year, and at least 500 simulations for sources than
emit less than 5 times per year. Fewer simulations could be used if it
could be demonstrated that the results are not adversely affected.
A-24
-------
**************** APPENDIX A Example Run ****************
Example Input and Output Files for ISCST2 and TOXST
Using the 1-Hour Composite Emissions Run As An Example
-------
**************** Examole ISCST2 Input File ****************
CO STARTING
CO TTTLEONE CASE STUDY / NORMALIZED EMISSIONS - 1984
CO MODELOPT CONC RURAL
CO AVERTIME 1
CO POLLUTID COMPOSITE
CO TERRHGTS FLAT
CO RUNORNOT RUN
CO FINISHED
SO STARTING
SO LOCATION SRC1
SO LOCATION SRC2
SO LOCATION SRC3
SO LOCATION SRC4
SO LOCATION SRC5
SO LOCATION SRC6A
SO LOCATION SRC6B
SO LOCATION SRC7
SO LOCATION SRC8
SO LOCATION SRC9
SO LOCATION SRC10
SO LOCATION SRC11
SO LOCATION SRC12
SO LOCATION SRC13
SO LOCATION SRC14
SO LOCATION SRC 15
SO LOCATION SRC16
SO LOCATION SRC17
SO SRCPARAM SRC1
SO SRCPARAM SRC2
SO SRCPARAM SRC3
SO SRCPARAM SRC4
SO SRCPARAM SRC5
SO SRCPARAM SRC6A
SO SRCPARAM SRC6B
SO SRCPARAM SRC7
SO SRCPARAM SRC8
SO SRCPARAM SRC9
SO SRCPARAM SRC10
SO SRCPARAM SRC 11
SO SRCPARAM SRC12
SO SRCPARAM SRC13
SO SRCPARAM SRC14
SO SRCPARAM SRC15
SO SRCPARAM SRC16
SO SRCPARAM SRC 17
** SOURCE GROUPS
46375
46375
46375
46375
46450
818675
818675
818675
818675
818750
46450 818750
46450 818750
46450 818750
46450 818750
46450 818750
818750
818750
818750
818750
46450
46450
46450
46465
46465
46465
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME 46465 818760
VOLUME 46465 818770
AREA 46465 818750
AREA 46465 818750
1.005.334.9614.24
1.005.334.96 14.24
1.00 5.33 4.96 14.24
1.005.334.96 14.24
1.005.334.96 10.66
0.56 5.33 4.96 10.66
0.44 5.33 4.96 10.66
1.00 5.33 4.96 10.66
1.005.334.96 10.66
1.005.334.96 10.66
1.005.334.96 10.66
1.005.334.96 10.66
1.005.334.9610.66
1.006.405.956.98
1.00 6.40 5.95 6.98
1.006.405.956.98
1.20 1.000.91
0.43 1.00 1.52
-------
SO SRCGROUP SRC1 SRC1
SO SRCGROUP SRC2 SRC2
SO SRCGROUP SRC3 SRC3
SO SRCGROUP SRC4 SRC4
SO SRCGROUP SRC5 SRC5
SO SRCGROUP SRC6 SRC6A SRC6B
SO SRCGROUP SRC7 SRC7
SO SRCGROUP SRC8 SRC8
SO SRCGROUP SRC9 SRC9
SO SRCGROUP SRC10 SRC10
SO SRCGROUP SRC11 SRC11
SO SRCGROUP SRC12 SRC12
SO SRCGROUP SRC13 SRC13
SO SRCGROUP SRC14 SRC14
SO SRCGROUP SRC 15 SRC 15
SO SRCGROUP SRC 16 SRC 16
SO SRCGROUP SRC17 SRC17
SO FINISHED
RE STARTING
RE BOUNDARY SRC1 1910
RE BOUNDARY SRC1 2000
RE BOUNDARY SRC1 2180
RE BOUNDARY SRC1 1880
RE BOUNDARY SRC1 1340
RE BOUNDARY SRC1 1085
RE BOUNDARY SRC1 930
RE BOUNDARY SRC1 825
RE BOUNDARY SRC1 780
RE BOUNDARY SRC1 750
RE BOUNDARY SRC1 750
RE BOUNDARY SRC1 780
RE BOUNDARY SRC1 825
RE BOUNDARY SRC1 690
RE BOUNDARY SRC1 480
RE BOUNDARY SRC1 380
RE BOUNDARY SRC1 310
RE BOUNDARY SRC1 260
RE BOUNDARY SRC1 250
RE BOUNDARY SRC1 240
RE BOUNDARY SRC1 225
RE BOUNDARY SRC1 230
RE BOUNDARY SRC1 250
RE BOUNDARY SRC1 270
RE BOUNDARY SRC1 300
RE BOUNDARY SRC1 350
RE BOUNDARY SRC1 460
RE BOUNDARY SRC1 575
RE BOUNDARY SRC1 575
RE BOUNDARY SRC1 580
-------
RE BOUNDARY SRC1 610
RE BOUNDARY SRC1 660
RE BOUNDARY SRC1 770
RE BOUNDARY SRC1 935
RE BOUNDARY SRC1 1230
RE BOUNDARY SRC1 1870
RE FINISHED
ME STARTING
ME INPUTFIL CMA84.BIN UNFORM
ME ANEMHGHT 6.1 METERS
ME SURFDATA 05879 1984
ME UAIRDATA 05879 1984
ME FINISHED
OU STARTING
OU RECTABLE 1 FIRST
OU TOXXFILE 1 2.07E-6 ISC8H84.TOX
OU FINISHED
-------
**************** Examole ISCST2 Outtmt FUe ****************
CO STARTING
CO TITLEONE CASE STUDY
CO MOOELOPT CONC RURAL
CO AVERTIME 1
CO POLLUTID COMPOSITE
CO TERRHGTS FLAT
CO RUNORNOT RUN
CO FINISHED
/ NORMALIZED EMISSIONS - 1984
SO STARTING
SO LOCATION SRC1
SO LOCATION SRC2
SO LOCATION SRC3
SO LOCATION SRC4
SO LOCATION SRC5
SO LOCATION SRC6A
SO LOCATION SRC6B
SO LOCATION SRC7
SO LOCATION SRC8
SO LOCATION SRC9
SO LOCATION SRC10
SO LOCATION SRC11
SO LOCATION SRC12
SO LOCATION SRC13
SO LOCATION SRC14
SO LOCATION SRC15
SO LOCATION SRC16
SO LOCATION SRC17
SO SRCPARAM SRC1
SO SRCPARAM SRC2
SO SRCPARAM SRC3
SO SRCPARAM SRC4
SO SRCPARAM SRCS
SO SRCPARAM SRC6A
SO SRCPARAM SRC6B
SO SRCPARAM SRC7
SO SRCPARAM SRC8
SO SRCPARAM SRC9
SO SRCPARAM SRC10
SO SRCPARAM SRC11
SO SRCPARAM SRC12
SO SRCPARAM SRC13
SO SRCPARAM SRC14
SO SRCPARAM SRC15
SO SRCPARAM SRC16
SO SRCPARAM SRC17
** SOURCE GROUPS
SO SRCGROUP SRC1
SO SRCGROUP SRC2
SO SRCGROUP SRC3
SO SRCGROUP SRC4
SO SRCGROUP SRCS
SO SRCGROUP SRC6
SO SRCGROUP SRC7
SO SRCGROUP SRCS
SO SRCGROUP SRC9
SO SRCGROUP SRC10
SO SRCGROUP SRC11
SO SRCGROUP SRC12
SO SRCGROUP SRC13
SO SRCGROUP SRC14
SO SRCGROUP SRC15
SO SRCGROUP SRC16
SO SRCGROUP SRC17
SO FINISHED
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
VOLUME
AREA
AREA
1.00
1.00
1.00
1.00
1.00
0.56 5
0.44 5
1.00
1.00
1.00
1.00
1.00
1.00
1.00
1.00
1.00 6
1.20
0.43
818675
818675
818675
818675
818750
818750
818750
818750
818750
818750
818750
818750
818750
818750
818760
818770
818750
818750
.33 4.96 14.24
.33 4.96 14.24
,33 4.96 14.24
.33 4.96 14.24
.33 4.96 10.66
.33 4.96 10.66
.33 4.96 10.66
.33 4.96 10.66
.33 4.96 10.66
.33 4.96 10.66
.33 4.96 10.66
.33 4.96 10.66
.33 4.96 10.66
.40 5.95 6.98
.40 5.95 6.98
.40 5.95 6.98
1.00 0.91
1.00 1.52
46375
46375
46375
46375
46450
46450
46450
46450
46450
46450
46450
46450
46450
46465
46465
46465
46465
46465
SRC1
SRC2
SRC3
SRC4
SRCS
SRC6A SRC6B
SRC7
SRCS
SRC9
SRC10
SRC11
SRC12
SRC13
SRC14
SRC15
SRC16
SRC17
-------
RE STARTING
RE BOUNDARY SRC1 1910
RE BOUNDARY SRC1 2000
RE BOUNDARY SRC1 2180
RE BOUNDARY SRC1 1880
RE BOUNDARY SRC1 1340
RE BOUNDARY SRC1 1085
RE BOUNDARY SRC1 930
RE BOUNDARY SRC1 825
RE BOUNDARY SRC1 780
RE BOUNDARY SRC1 750
RE BOUNDARY SRC1 750
RE BOUNDARY SRC1 780
RE BOUNDARY SRC1 825
RE BOUNDARY SRC1 690
RE BOUNDARY SRC1 480
RE BOUNDARY SRC1 380
RE BOUNDARY SRC1 310
RE BOUNDARY SRC1 260
RE BOUNDARY SRC1 250
RE BOUNDARY SRC1 240
RE BOUNDARY SRC1 225
RE BOUNDARY SRC1 230
RE BOUNDARY SRC1 250
RE BOUNDARY SRC1 270
RE BOUNDARY SRC1 300
RE BOUNDARY SRC1 350
RE BOUNDARY SRC1 460
RE BOUNDARY SRC1 575
RE BOUNDARY SRC1 575
RE BOUNDARY SRC1 580
RE BOUNDARY SRC1 610
RE BOUNDARY SRC1 660
RE BOUNDARY SRC1 770
RE BOUNDARY SRC1 935
RE BOUNDARY SRC1 1230
RE BOUNDARY SRC1 1870
RE FINISHED
ME STARTING
HE INPUTFIL CMA84.BIN UNFORM
ME ANEMHGHT 6.1 METERS
ME SURFDATA 05879 1984
ME UAIRDATA 05879 1984
ME FINISHED
OU STARTING
OU RECTABLE 1 FIRST
OU TOXXFILE 1 2.07E-6 ISC8H84.TOX
OU FINISHED
***********************************
*** SETUP Finishes Successfully ***
***********************************
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984 *** 09/17/93
*** *** 23:15:5
PAGE
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** MODEL SETUP OPTIONS SUMMARY ***
**Model Is Setup For Calculation of Average concentration Values.
••Model Uses RURAL Dispersion.
**Nodel Uses User-Specified Options:
1. Final Plume Rise.
2. Stack-tip Dounwash.
3. Buoyancy-induced Dispersion.
4. Calms Processing Routine.
5. Not Use Missing Data Processing Routine.
6. Default Wind Profile Exponents.
7. Default Vertical Potential Temperature Gradients.
**Model Assumes Receptors on FLAT Terrain.
**Model Assumes No FLAGPOLE Receptor Heights.
"Model Calculates 1 Short Term Average(s) of: 1-HR
**This Run Includes: 18 Source(s); 17 Source Group(s); and 36 Receptor(s)
"The Model Assumes A Pollutant Type of: COMPOS IT
**Model Set To Continue RUNning After the Setup Testing.
"Output Options Selected:
Model Outputs Tables of Highest Short Term Values by Receptor (RECTABLE Keyword)
Model Outputs External File(s) of Values for Input to TOXX Model (TOXXFILE Keyword)
**NOTE: The Following Flags May Appear Following CONC Values: c for Calm Hours
m for Missing Hours
b for Both Calm and Missing Hours
**Misc. Inputs: Anem. Hgt. (m) = 6.10 ; Decay Coef. = .0000 ; Rot. Angle = .0
Emission Units = GRAMS/SEC ; Emission Rate Unit Factor = .10000E+07
Output Units = MICROGRAMS/M**3
**Input Runstream File: ISC8H84.INP ; **0utput Print File: ISC8H84.0UT
-------
*** ISCST2 • VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
09/17/93
23:15:52
PAGE 2
VOLUME SOURCE DATA
SOURCE
ID
SRC1
SRC2
SRC3
SRC4
SRC5
SRC6A
SRC6B
SRC7
SRC8
SRC9
SRC10
SRC11
SRC12
SRC13
SRCU
SRC 15
NUMBER
PART.
CATS.
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
EMISSION RATE
(GRAMS/SEC) X
(METERS)
.10000E+01
.10000E+01
.10000E+01
.10000E+01
.10000E+01
.56000E+00
.44000E+00
.10000E+01
.10000E+01
.10000E+01
.10000E+01
.10000E+01
.10000E+01
.10000E+01
.10000E+01
.10000E+01
46375.0
46375.0
46375.0
46375.0
46450.0
46450.0
46450.0
46450.0
46450.0
46450.0
46450.0
46450.0
46450.0
46465.0
46465.0
46465.0
BASE RELEASE INIT.
Y ELEV. HEIGHT SY
(METERS) (METERS) (METERS) (METERS)
818675.0
818675.0
818675.0
818675.0
818750.0
818750.0
818750.0
818750.0
818750.0
818750.0
818750.0
818750.0
818750.0
818750.0
818760.0
818770.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
5.33
5.33
5.33
5.33
5.33
5.33
5.33
5.33
5.33
5.33
5.33
5.33
5.33
6.40
6.40
6.40
4.96
4.96
4.96
4.96
4.96
4.96
4.96
4.96
4.96
4.96
4.96
4.96
4.96
5.95
5.95
5.95
INIT. EMISSION RATE
SZ SCALAR VARY
(METERS) BY
14.24
14.24
14.24
14.24
10.66
10.66
10.66
10.66
10.66
10.66
10.66
10.66
10.66
6.98
6.98
6.98
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984 *** 09/17/93
*** *** 23:15:5;
PAGE :
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** AREA SOURCE DATA ***
NUMBER EMISSION RATE COORD (SU CORNER) BASE RELEASE WIDTH EMISSION RATE
SOURCE PART. (GRAMS/SEC X Y ELEV. HEIGHT OF AREA SCALAR VARY
ID CATS. /METER**2) (METERS) (METERS) (METERS) (METERS) (METERS) BY
SRC16 0 .12000E+01 46465.0 818750.0 .0 1.00 .91
SRC17 0 .43000E+00 46465.0 818750.0 .0 1.00 1.52
-------
ISCST2 • VERSION 92273
*** CASE STUDY / MORHALIZED EMISSIONS - 1984
MODELING OPTIONS USED: CONC RURAL FLAT
09/17/93
23:15:52
PAGE 4
GROUP ID
*** SOURCE IDs DEFINING SOURCE GROUPS ***
SOURCE IDs
SRC1
SRC2
SRC3
SRC4
SRC5
SRC6
SRC7
SRC8
SRC9
SRC10
SRC11
SRC12
SRC13
SRC14
SRC15
SRC16
SRC17
SRC1 ,
SRC2 ,
SRC3
SRC4 ,
SRC5
SRC6A ,
SRC7 ,
SRC8 ,
SRC9 ,
SRC10 ,
SRC11
SRC12 ,
SRC13 ,
SRC14 ,
SRC15 ,
SRC16 ,
SRC17 .
SRC6B
-------
BOUNDARY RECEPTORS FOR SOURCE ID: SRC1
OF SOURCE TYPE: VOLU
SEC. XCOORD YCOORD
ZFLAG
1 46706.70, 820556.00,
.0
4 47583.40, 820115.00,
.0
7 47248.90, 818993.00,
.0
10 47113.60, 818545.00,
.0
13 47007.00, 818145.00,
.0
16 46505.00, 818318.00,
.0
19 46331.60, 818429.00,
.0
22 46227.20, 818499.00,
.0
25 46093.10. 818573.00,
.0
28 45808.70, 818775.00,
.0
31 45907.70, 819067.00,
.0
34 46055.20, 819554.00,
.0
* «** CASE STUDY / NORMALIZED EMISSIONS • 1984 *
***
INC RURAL FLAT
*** BOUNDARY RECEPTOR LOCATIONS ***
(DISCRETE RECEPTORS AT 10 DEGREE SECTORS)
0: SRC1
WITH ORIGIN AT ( 46375.00, 818675.00,
:LEV ZFLAG SEC. XCOORD YCOORD
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00.
.00,
.00,
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
2
5
8
11
14
17
20
23
26
29
32
35
47059.00,
47401.50,
47187.50,
47079.80,
46818.50,
46428.80,
46292.90,
46183.50,
46030.30,
45834.70,
45950.80,
46161.40,
820555.00,
819536.00,
818818.00,
818419.00,
818147.00,
818370.00,
818450.00,
818514.00,
818614.00,
818872.00,
819181.00,
819886.00,
.00)
ZELEV ZFLAG
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
• 00.
.00,
.00,
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
.0
SEC.
3
6
9
12
15
18
21
24
27
30
33
36
XCOORD
47465.00,
47314.60,
47155.00,
47050.50,
46615.00,
46375.00,
46262.50,
46141.20,
45915.00,
45872.70,
45990.00,
46375.00,
•**
***
09/17/93
23:15:5
PAGE
YCOORD
820563
819218
818675
818285
818259
818415
818480
818540
818675
818965
819342
820545
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
ZELEV
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
-------
*** ISCST2 • VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS • 1984
09/17/93
23:15:52
PAGE 6
*** MODELING OPTIONS USED: CONC RURAL FLAT
METEOROLOGICAL DAYS SELECTED FOR PROCESSING ***
(1-YES; 0=NO)
111111
111111
111111
111111
111111
111111
111111
111111
1 1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1 1
1111
1111
1111
1111
1111
1111
1111
1111
1
t
1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1111111
1111111
111111
111111
111111
111111
111111
I 1
1 1
1
1
1
1
1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
111111
111111
11111
11111
11111
11111
11111
1111
1111
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
NOTE: METEOROLOGICAL DATA ACTUALLY PROCESSED WILL ALSO DEPEND ON WHAT IS INCLUDED IN THE DATA FILE.
*** UPPER BOUND OF FIRST THROUGH FIFTH WIND SPEED CATEGORIES ***
(METERS/SEC)
1.54, 3.09, 5.14, 8.23, 10.80,
WIND PROFILE EXPONENTS ***
STABILITY
CATEGORY
A
B
C
D
f.
f
WIND SPEED CATEGORY
1
.70000E-01
.70000E-01
.10000E+00
.15000E+00
.350006+00
.55000E+00
2
.70000E-01
.70000E-01
.10000E+00
.15000E+00
.35000E+00
.55000E+00
3
.70000E-01
.70000E-01
.10000E+00
.15000E+00
.35000E+00
.55000E+00
4
.70000E-01
.70000E-01
.10000E+00
.15000E+00
.35000E+00
.55000E+00
5
.70000E-01
.70000E-01
.10000E+00
. 15000E+00
.35000E+00
.55000E+00
6
.70000E-01
.70000E-01
.10000E+00
.15000E+00
.35000E+00
.55000E+00
*** VERTICAL POTENTIAL TEMPERATURE GRADIENTS ***
(DEGREES KELVIN PER METER)
STABILITY
CATEGORY
A
B
C
D
E
F
WIND SPEED CATEGORY
1
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.20000E-01
.35000E-01
2
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.20000E-01
.35000E-01
3
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.20000E-01
.35000E-01
4
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.20000E-01
.35000E-01
5
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.20000E-01
.35000E-01
6
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.OOOOOE+00
.20000E-01
.35000E-01
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
THE FIRST 24 HOURS OF METEOROLOGICAL DATA
FILE: CMA84.BIN
SURFACE STATION NO.: 05879
NAME: UNKNOWN
YEAR: 1984
YEAR
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
84
MONTH DAY
1 -1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
HOUR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
FLOW
VECTOR
181.0
178.0
184.0
183.0
183.0
222.0
235.0
243.0
237.0
271.0
304.0
296.0
313.0
329.0
332.0
324.0
291.0
297.0
304.0
277.0
260.0
192.0
190.0
160.0
SPEED
(M/S)
.00
.54
.00
.00
.00
2.06
2.06
2.06
2.06
4.63
3.09
3.09
2.06
2.06
2.06
4.12
2.57
2.57
1.00
3.60
2.06
1.54
1.00
2.57
FORMAT: UN FORM
UPPER AIR STATION NO.: 05879
NAME: UNKNOWN
YEAR: 1984
TEMP
(K)
268.7
268.1
267.6
267.6
267.6
267.6
266.5
268.1
273.7
277.0
280.4
282.0
284.3
284.8
285.9
285.9
284.3
281.5
279.8
278.7
275.9
274.3
274.3
272.6
STAB
CLASS
7
7
7
7
7
6
6
5
4
3
3
2
2
3
3
4
4
5
6
5
6
7
7
6
MIXING HEIGHT (M)
RURAL
645.0
645.0
645.0
645.0
645.0
645.0
645.0
89.4
182.0
274.6
367.2
459.8
552.4
645.0
645.0
645.0
645.0
637.0
627.7
618.4
609.1
599.8
590.5
581.2
URBAN
113.0
113.0
113.0
113.0
113.0
113.0
113.0
186.7
263.1
339.5
415.9
492.2
568.6
645.0
645.0
645.0
645.0
584.1
513.4
442.7
372.0
301.4
230.7
160.0
*** NOTES: STABILITY CLASS 1=A, 2=B, 3=C, 4=0, 5=E AND 6=F.
FLOW VECTOR IS DIRECTION TOWARD WHICH WIND IS BLOWING.
-------
ISCST2 - VERSION 92273 ***
CASE STUDY / NORMALIZED EMISSIONS - 1984
09/17/93
23:15:52
PAGE 8
MODELING OPTIONS USED:, CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION VALUES FOR SOURCE GROUP: SRC1
INCLUDING SOURCE(S): SRC1 ,
** CONC OF COMPOSIT IN MICROGRAMS/M**3 **
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME;
Y-COORD
820556.00,
820563.00,
819536.00,
818993.00,
818675.00,
818419.00,
818145.00,
818259.00,
818370.00,
818429.00,
818480.00,
818514.00,
818573.00,
818675.00,
818872.00,
819067.00,
819342.00,
819886.00,
(SEC.)
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
X-COORD
46706.70,
47465.00,
47401.50,
47248.90,
47155.00,
47079.80,
47007.00,
46615.00,
46428.80,
46331.60,
46262.50,
46183.50,
46093.10,
45915.00,
45834.70,
45907.70,
45990.00,
46161.40,
'H ORIGIN AT ( 46375.00,
CONC (YYMMDDHH)
104.53900 (84082024)
91.23414 (84041720)
271.28060 (84012802)
263.28920 (84042222)
288.14010 (84033021)
225.39970 (84012701)
224.51960 (84091302)
510.39940 (84060103)
740.52660 (84072522)
871.30550 (84060305)
939.40330 (84060922)
871.32480 (84021504)
718.88410 (84033104)
530.52370 (84021407)
396.61470 (84070104)
407.02590 (84071622)
241.36350 (84063021)
177.54030 (84052502)
818675.00, .00)
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
X-COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60,
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
245872.70,
45950.80,
46055.20,
46375.00,
Y-COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00,
818775.00,
818965.00,
819181.00,
819554.00,
820545.00,
CONC (YYMMDDHH)
98.72540 (84020104)
79.99493 (84042320)
228.90210 (84072120)
271.08520 (84010620)
225.65000 (84013102)
317.49330 (84040901)
360.08810 (84110305)
627.00920 (84110601)
1240.82600 (84010101)
854.84180 (84010802)
924.70780 (84010204)
780.60380 (84020205)
671.46290 (84060505)
395.46380 (84021623)
392.67590 (84060503)
376.54370 (84091122)
235.93010 (84062921)
91.84793 (84082721)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
09/17/93
23:15:5
PAGE
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION VALUES FOR SOURCE GROUP: SRC2
INCLUDING SOURCE(S): SRC2 ,
CONC OF COMPOSIT IN MICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT
(SEC.)
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
X-COORD
46706.70,
47465.00.
47401.50,
47248.90,
47155.00,
47079.80,
47007.00,
46615.00,
46428.80,
46331.60,
46262.50,
46183.50,
46093.10,
45915.00,
45834.70,
45907.70,
45990.00,
46161.40,
Y-COORD
820556.00,
820563.00,
819536.00,
818993.00,
818675.00,
818419.00,
818145.00,
818259.00,
818370.00,
818429.00,
818480.00,
818514.00,
818573.00,
818675.00,
818872.00,
819067.00,
819342.00,
819886.00,
( 46375,
CONC (YYMMDDHH)
104.53900 (84082024)
91.23414 (84041720)
271.28060 (84012802)
263.28920 (84042222)
288.14010 (84033021)
225.39970 (84012701)
224.51960 (84091302)
510.39940 (84060103)
740.52660 (84072522)
871.30550 (84060305)
939.40330 (84060922)
871.32480 (84021504)
718.88410 (84033104)
530.52370 (84021407)
396.61470 (84070104)
407.02590 (84071622)
241.36350 (84063021)
177.54030 (84052502)
00,
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.
X-COORD
47059.00
47583.40
47314.60
47187.50
47113.60
47050.50
46818.50
46505.00
46375.00
46292.90
46227.20
46141.20
46030.30
45808.70
45872.70
45950.80
46055.20
46375.00
00)
Y- COORD
, 820555.00,
, 820115.00,
, 819218.00,
, 818818.00,
, 818545.00,
, 818285.00,
, 818147.00,
, 818318.00,
, 818415.00,
, 818450.00,
, 818499.00,
, 818540.00,
, 818614.00.
, 818775.00,
, 818965.00,
, 819181.00,
, 819554.00,
, 820545.00,
CONC (YYMMDDHH)
98.72540 (84020104)
79.99493 (84042320)
228.90210 (84072120)
271.08520 (84010620)
225.65000 (84013102)
317.49330 (84040901)
360.08810 (84110305)
627.00920 (84110601)
1240.82600 (84010101)
854.84180 (84010802)
924.70780 (84010204)
780.60380 (84020205)
671,46290 (84060505)
395.46380 (84021623)
392.67590 (84060503)
376.54370 (84091122)
235.93010 (84062921)
91.84793 (84082721)
-------
*** ISCST2 • VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
09/17/93
23:15:52
PAGE 10
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION VALUES FOR SOURCE GROUP: SRC3
INCLUDING SOURCE(S): SRC3
** CONC OF COMPOSIT IN MICROGRAMS/M**3 **
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT ( 46375.00,
(SEC.) X-COORD Y-COORD CONC (YYMMDDHH)
1 46706.70, 820556.00, 104.53900 (84082024)
3 47465.00, 820563.00, 91.23414 (84041720)
5 47401.50, 819536.00, 271.28060 (84012802)
7 47248.90, 818993.00, 263.28920 (84042222)
9 47155.00, 818675.00, 288.14010 (84033021)
11 47079.80, 818419.00, 225.39970 (84012701)
13 47007.00, 818145.00, 224.51960 (84091302)
15 46615.00, 818259.00, 510.39940 (84060103)
17 46428.80, 818370.00, 740.52660 (84072522)
19 46331.60, 818429.00, 871.30550 (84060305)
21 46262.50, 818480.00, 939.40330 (84060922)
23 46183.50, 818514.00, 871.32480 (84021504)
25 46093.10, 818573.00, 718.88410 (84033104)
27 45915.00, 818675.00, 530.52370 (84021407)
29 45834.70, 818872.00, 396.61470 (84070104)
31 45907.70, 819067.00, 407.02590 (84071622)
33 45990.00, 819342.00, 241.36350 (84063021)
35 46161.40, 819886.00, 177.54030 (84052502)
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00)
X-COORD
47059
47583
47314
47187
47113
47050
46818
46505
46375
46292
46227
46141
46030
45808
45872
45950
46055
46375
.00,
•40,
.60,
.50,
.60,
.50,
.50,
.00,
.00,
.90,
.20,
.20,
•30,
.70,
.70,
.80,
.20,
.00,
Y-COORD
820555.
820115.
819218.
818818.
818545.
818285.
818147.
818318.
818415.
818450.
818499.
818540.
818614.
818775;
818965.
819181.
819554.
820545.
oo.
00,
00,
00,
00,
00,
00,
00.
00,
00.
00,
00,
00,
00,
00,
00,
00,
00,
CONC
98
79
228
271
225
317
360
627
.72540
.99493
.90210
.08520
.65000
.49330
.08810
.00920
1240.82600
854
924
780
671
395
392
376
235
91
.84180
.70780
.60380
.46290
.46380
.67590
.54370
.93010
.84793
(YYMMDDHH)
(84020104)
(84042320)
(84072120)
(84010620)
(84013102)
(84040901 )
(84110305)
(84110601)
(84010101)
(84010802)
(84010204)
(84020205)
(84060505)
(84021623)
(84060503)
(84091122)
(84062921 )
(84082721)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC* ,
** CONC OF COMPOSIT IN HICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT (
09/17/93
23:15:5
PAGE 1
VALUES FOR SOURCE GROUP: SRC4
46375,00,
(SEC.) X-COORD Y-COORD CONC (YYMMODHH)
1 46706.70, 820556.00, 104.53900 (84082024)
3 47465.00, 820563.00, 91.23414 (84041720)
5 47401.50, 819536.00, 271.28060 (84012802)
7 47248.90, 818993.00, 263.28920 (84042222)
9 47155.00, 818675.00, 288.14010 (84033021)
11 47079.80, 818419.00, 225.39970 (84012701)
13 47007.00, 818145.00, 224.51960 (84091302)
15 46615.00, 818259.00, 510.39940 (84060103)
17 46428.80, 818370.00, 740.52660 (84072522)
19 46331.60, 818429.00, 871.30550 (84060305)
21 46262.50, 818480.00, 939.40330 (84060922)
23 46183.50, 818514.00, 871.32480 (84021504)
25 46093.10, 818573.00, 718.88410 (84033104)
27 45915.00, 818675.00, 530.52370 (84021407)
29 45834.70, 818872.00, 396.61470 (84070104)
31 45907.70, 819067.00, 407.02590 (84071622)
33 45990.00, 819342.00, 241.36350 (84063021)
35 46161.40, 819886.00, 177.54030 (84052502)
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00)
X-COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60,
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
45872.70,
45950.80,
46055.20,
46375.00,
Y-COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00,
818775.00,
818965.00,
819181.00,
819554.00,
820545.00,
CONC
98.72540
79.99493
228.90210
271.08520
225.65000
317.49330
360.08810
627.00920
1240.82600
854.84180
924.70780
780.60380
671.46290
395.46380
392.67590
376.54370
235.93010
91.84793
(YYMMDDHH)
(84020104)
(84042320)
(84072120)
(84010620)
(84013102)
(84040901)
(84110305)
(84110601)
(8401 01 01)
(84010802)
(84010204)
(84020205)
(84060505)
(84021623)
(84060503)
(84091122)
(84062921)
(84082721)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
***
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC5
** CONC OF COMPOSIT IN MICROGRAMS/M»*3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT ( 46375.00,
(SEC.) X-COORD Y-CCORD CONC (YYMMDOHH)
1 46706.70, 820556.00, 122.31550 (84091123)
3 47465.00, 820563.00, 114.84610 (84041720)
5 47401.50, 819536.00, 313.85100 (84012802)
7 47248.90, 818993.00, 310.23070 (84012804)
9 47155.00, 818675.00, 372.73990 (84012707)
11 47079.80, 818419.00, 400.03780 (84032505)
13 47007.00, 818145.00, 284.25650 (84060303)
15 46615.00, 818259.00, 550.69840 (84112404)
17 46428.80, 818370.00, 833.72860 (84010101)
19 46331.60, 818429.00, 788.61630 (84010802)
21 46262.50, 818480.00, 846.25050 (84060105)
23 46183.50, 818514.00, 778.93790 (84090802)
25 46093.10, 818573.00, 705.65370 (84072205)
27 45915.00, 818675.00, 491.66350 (84080603)
29 45834.70, 818872.00, 458.20240 (84021623)
31 45907.70, 819067.00, 440.12910 (84020123)
33 45990.00, 819342.00, 284.63270 (84051103)
35 46161.40, 819886.00, 213.49990 (84071923)
09/17/93
23:15:52
PAGE 12
VALUES FOR SOURCE GROUP: SRC5
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.
X-COORD
47059.00
47583.40
47314.60
47187.50
47113.60
47050.50
46818.50
46505.00
46375.00
46292.90
46227.20
46141.20
46030.30
45808.70
45872.70
45950.80
46055.20
46375.00
00)
Y-COORD
, 820555.00,
, 820115.00,
, 819218.00,
, 818818.00,
, 818545.00,
, 818285.00,
, 818147.00,
, 818318.00,
, 818415.00,
, 818450.00,
, 818499.00,
, 818540.00,
, 818614.00,
, 818775.00,
, 818965.00,
, 819181.00,
, 819554.00,
, 820545.00,
CONC (YYMHDOHH)
127.12700 (84020104)
99.33892 (84042320)
269.65330 (84012904)
382.18620 (84041421)
411.44610 (84020401)
372.57550 (84020406)
392.08220 (84072203)
656.27900 (84090301)
796.93990 (84010122)
816.96710 (84090623)
822.78040 (84072901)
756.00820 (84030306)
611.90270 (84071624)
447.09960 (84072802)
455.14840 (84070104)
413.56510 (84071622)
217.84990 (84030319)
136.22000 (84051301)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC6A , SRC6B ,
** CONC OF COMPOSIT IN MICROCRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT ( 46375.00,
(SEC.) X-COORD Y-COORD CONC (YYMMDDHH)
1 46706.70, 820556.00, 122.31550 (84091123)
3 47465.00, 820563.00, 114.84610 (84041720)
5 47401.50, 819536.00, 313.85100 (84012802)
7 47248.90, 818993.00, 310.23070 (84012804)
9 47155.00, 818675.00, 372.73990 (84012707)
11 47079.80, 818419.00, 400.03780 (84032505)
13 47007.00, 818145.00, 284.25650 (84060303)
15 46615.00, 818259.00, 550.69840 (84112404)
17 46428.80, 818370.00, 833.72860 (84010101)
19 46331.60, 818429.00, 788.61630 (84010802)
21 46262.50, 818480.00, 846.25050 (84060105)
23 46183.50, 818514.00, 778.93790 (84090802)
25 46093.10, 818573.00, 705.65380 (84072205)
27 45915.00, 818675.00, 491.66340 (84080603)
29 45834.70, 818872.00, 458.20240 (84021623)
31 45907.70, 819067.00, 440.12910 (84020123)
33 45990.00, 819342.00, 284.63270 (84051103)
35 46161.40, 819886.00, 213.49990 (84071923)
09/17/93
23:15:5
PAGE 1
VALUES FOR SOURCE GROUP: SRC6
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00)
X-COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60,
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
45872.70,
45950.80,
46055.20,
46375.00,
Y-COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00.
818775.00,
818965.00,
819181.00,
819554.00,
820545.00,
CONC
127.12700
99.33892
269.65330
382.18620
411.44610
372.57550
392.08220
656.27900
796.93990
816.96700
822.78040
756.00830
611.90270
447.09970
455.14840
413.56510
217.84990
136.22000
(YYMHDDHH)
(84020104)
(84042320)
(84012904)
(84041421)
(84020401)
(84020406)
(84072203)
(84090301 )
(84010122)
(84090623)
(84072901 )
(84030306)
(84071624)
(84072802)
(84070104)
(84071622)
(84030319)
(84051301)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
**« MODELING OPTIONS USED: CONC RURAL FLAT
09/17/93
23:15:52
PAGE K
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION VALUES FOR SOURCE GROUP: SRC7 ***
INCLUDING^ SOURCE(S>: " SRC7
** CONC OF COMPOSIT IN MICROGRAMS/M**3 **
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME;
Y-COORD
820556.00,
820563.00,
819536.00,
818993.00,
818675.00,
818419.00,
818145.00,
818259.00,
818370.00,
818429.00,
818480.00,
818514.00,
818573.00,.
818675.00,
818872.00,
819067.00,
819342.00,
819886.00,
(SEC.)
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
X-COORD
46706.70,
47465.00,
47401.50,
47248.90,
47155.00,
47079.80,
47007.00,
46615.00,
46428.80,
46331.60,
46262.50,
46183.50,
46093.10,
45915.00,.
45834.70,
45907.70,
45990.00,
46161.40,
'H ORIGIN AT ( 46375.00,
CONC
122
114
313
310
372
400
284
550
833
788
846
778
705
491
458
440
284
213
.31550
.84610
.85100
.23070
.73990
.03780
.25650
.69840
.72860
.61630
.25050
.93790
.65370
.66350
.20240
.12910
.63270
.49990
(YYMMDDHH)
(84091123)
(84041720)
(84012802)
(84012804)
(84012707)
(84032505)
(84060303)
(84112404)
(84010101)
(84010802)
(84060105)
(84090802)
(84072205)
(84080603)
(84021623)
(84020123)
(84051103)
(84071923)
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00}
X-COORD
47059.
47583.
47314.
47187.
47113.
47050.
46818.
46505.
46375.
46292.
46227.
46141 .
46030.
45808.
45872.
45950.
46055.
46375.
00,
40,
60,
50,
60,
50,
50,
00,
00,
90,
20,
20,
30,
70,
70,
80,
20,
00,
Y-COORD
820555
820115
819218
818818
818545
818285
818147
818318
818415
818450
818499
818540
818614
818775
818965
819181
819554
820545
.00,
.00,
.00.
.00,
.00,
.00.
.00,
.00,
.00.
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
CONC
127.
99.
12700
33892
269.65330
382.
18620
411.44610
372.
392.
656.
796.
816.
822.
756.
611.
447.
455.
413.
217.
136.
57550
08220
27900
93990
96710
78040
00820
90270
09960
14840
56510
84990
22000
(YYMMDDHH)
(84020104)
(84042320)
(84012904)
(84041421)
(84020401 )
(84020406)
(84072203)
(84090301)
(84010122)
(84090623)
(84072901 )
(84030306)
(84071624)
(84072802)
(84070104)
(84071622)
(84030319)
(84051301)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS • 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
09/17/93
23:15:5
PAGE 1
THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION VALUES FOR SOURCE GROUP: SRC8
INCLUDING SOURCE(S):
SRC8
CONC OF COMPOSIT IN MICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT ( 46375.00,
(SEC.) X-COORD Y-COORD CONC (YYMMDDHH)
1 46706.70, 820556.00, 122.31550 (84091123)
3 47465.00, 820563.00, 114.84610 (84041720)
5 47401.50, 819536.00, 313.85100 (84012802)
7 47248.90, 818993.00, 310.23070 (84012804)
9 47155.00, 818675.00, 372.73990 (84012707)
11 47079.80, 818419.00, 400.03780 (84032505)
13 47007.00, 818145.00, 284.25650 (84060303)
15 46615.00, 818259.00, 550.69840 (84112404)
17 46428.80, 818370.00, 833.72860 (84010101)
19 46331.60, 818429.00, 788.61630 (84010802)
21 46262.50, 818480.00, 846.25050 (84060105)
23 46183.50, 818514.00, 778.93790 (84090802)
25 46093.10, 818573.00, 705.65370 (84072205)
27 45915:00, 818675.00, 491.66350(84080603)
29 45834.70, 818872.00, 458.20240 (84021623)
31 45907.70, 819067.00, 440.12910 (84020123)
33 45990.00, 819342.00, 284.63270 (84051103)
35 46161.40, 819886.00, 213.49990 (84071923)
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00)
X-COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60,
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
45872.70,
45950.80,
46055.20,
46375.00,
Y-COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00,
818775.00,
818965.00.
819181.00,
819554.00.
820545.00,
CONC
127.12700
99.33892
269.65330
382.18620
411.44610
372.57550
392.08220
656.27900
796.93990
816.96710
822.78040
756.00820
611.90270
447.09960
455.14840
413.56510
217.84990
136.22000
(YYMMDOHH)
(84020104)
(84042320)
(84012904)
(84041421)
(84020401 )
(84020406)
(84072203)
(84090301 )
(84010122)
(84090623)
(84072901 )
(84030306)
(84071624)
(84072802)
(84070104)
(84071622)
(84030319)
(84051301)
-------
*** ISCST2 - VERSION 92273
*** CASE STUDY / NORMALIZED EMISSIONS - 1984
09/17/93
23:15:52
PAGE 16
MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION VALUES FOR SOURCE GROUP: SRC9 ***
INCLUDING SOURCE(S): SRC9
** CONC OF COMPOSIT IN MICROGRAMS/M**3 **
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT ( 46375.00,
(SEC.) X-COORD Y-COORD CONC (YYMMDDHH)
1 46706.70, 820556.00, 122.31550 (84091123)
3 47465.00, 820563.00, 114.84610 (84041720)
5 47401.50, 819536.00, 313.85100 (84012802)
7 47248.90, 818993.00, 310.23070 (84012804)
9 47155.00, 818675.00, 372.73990 (84012707)
11 47079.80, 818419.00, 400.03780 (84032505)
13 47007.00, 818145.00. 284.25650 (84060303)
15 46615.00, 818259.00, 550.69840 (84112404)
17 46428.80, 818370.00, 833.72860 (84010101)
19 46331.60, 818429.00, 788.61630 (84010802)
21 46262.50, 818480.00, 846.25050 (84060105)
23 46183.50, 818514.00, 778.93790 (84090802)
25 46093.10, 818573.00, 705.65370 (84072205)
27 45915.00, 818675.00, 491.66350 (84080603)
29 45834.70, 818872.00, 458.20240 (84021623)
31 45907.70, 819067.00, 440.12910 (84020123)
33 45990.00, 819342.00, 284.63270 (84051103)
35 46161.40, 819886.00, 213.49990 (84071923)
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00)
X- COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60.
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
45872.70,
45950.80,
46055.20,
46375.00,
Y- COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00,
818775.00,
818965.00,
819181.00,
819554.00,
820545.00,
CONC (YYMMDDHH)
127.12700 (84020104)
99.33892 (84042320)
269.65330 (84012904)
382.18620 (84041421)
411.44610 (84020401)
372.57550 (84020406)
392.08220 (84072203)
656.27900 (84090301)
796.93990 (84010122)
816.96710 (84090623)
822.78040 (84072901)
756.00820 (84030306)
611.90270 (84071624)
447.09960 (84072802)
455.14840 (84070104)
413.56510 (84071622)
217.84990 (84030319)
136.22000 (84051301)
-------
*** ISCST2 • VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC10 ,
09/17/93
23:15:!
PAGE 1
VALUES FOR SOURCE GROUP: SRC10
CONC OF COMPOSIT IN MICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME;
(SEC.) X-COORD Y-COORD
1 46706.70, 820556.00,
3 47465.00, 820563.00,
5 47401.50, 819536.00,
7 47248.90, 818993.00,
9 47155.00, 818675.00,
11 47079.80, 818419.00,
13 47007.00, 818145.00,
15 46615.00, 818259.00,
17 46428.80, 818370.00,
19 46331.60, 818429.00,
21 46262.50, 818480.00,
23 46183.50, 818514.00,
25 46093.10, 818573.00,
27 45915.00, 818675.00,
29 45834.70, 818872.00,
31 45907.70, 819067.00,
33 45990.00, 819342.00,
35 46161.40, 819886.00,
'H ORIGIN AT ( 46375.00,
CONC (YYMMDDHH)
122.31550 (84091123)
114.84610 (84041720)
313.85100 (84012802)
310.23070 (84012804)
372.73990 (84012707)
400.03780 (84032505)
284.25650 (84060303)
550.69840 (84112404)
833.72860 (84010101)
788.61630 (84010802)
846.25050 (84060105)
778.93790 (84090802)
705.65370 (84072205)
491.66350 (84080603)
458.20240 (84021623)
440.12910 (84020123)
284.63270 (84051103)
213.49990 (84071923)
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00)
X-COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60,
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
45872.70,
45950.80,
46055.20,
46375.00,
Y-COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00,
818775.00,
818965.00,
819181.00,
819554.00,
820545.00,
CONC (YYMMDDHH)
127.12700 (84020104)
99.33892 (84042320)
269.65330 (84012904)
382.18620 (84041421)
411.44610 (84020401)
372.57550 (84020406)
392.08220 (84072203)
656.27900 (84090301)
796.93990 (84010122)
816.96710 (84090623)
822.78040 (84072901)
756.00820 (84030306)
611.90270 (84071624)
447.09960 (84072802)
455.14840 (84070104)
413.56510 (84071622)
217.84990 (84030319)
136.22000 (84051301)
-------
*** ISCST2 - VERSION 92273 *** »** CASE STUDY / NORMALIZED EMISSIONS • 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC11 ,
** CONC OF COMPOSIT IN MICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT ( 46375.00,
(SEC.) X-COORD Y-COORD CONC (YYMMDDHH)
1 46706.70, 820556.00, 122.31550 (84091123)
3 47465.00, 820563.00, 114.84610 (84041720)
5 47401.50, 819536.00, 313.85100 (84012802)
7 47248.90, 818993.00, 310.23070 (84012804)
9 47155.00. 818675.00, 372.73990 (84012707)
11 47079.80, 818419.00, 400.03780 (84032505)
13 47007.00, 818145.00. 284.25650 (84060303)
15 46615.00, 818259.00, 550.69840 (84112404)
17 46428.80, 818370.00. 833.72860 (84010101)
19 46331.60, 818429.00, 788.61630 (84010802)
21 46262.50. 818480.00, 846.25050 (84060105)
23 46183.50. 818514.00, 778.93790 (84090802)
25 46093.10, 818573.00, 705.65370 (84072205)
27 45915.00, 818675.00, 491.66350 (84080603)
29 45834.70, 818872.00, 458.20240 (84021623)
31 45907.70, 819067.00, 440.12910 (84020123)
33 45990.00, 819342.00, 284.63270 (84051103)
35 46161.40, 819886.00, 213.49990 (84071923)
09/17/93
23:15:52
PAGE 18
VALUES FOR SOURCE GROUP: SRC11
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.
X-COORD
47059.00
47583.40
47314.60
47187.50
47113.60
47050.50
46818.50
46505.00
46375.00
46292.90
46227.20
46141.20
46030.30
45808.70
45872.70
45950.80
46055.20
46375.00
00)
Y-COORD
, 820555.00,
, 820115.00,
, 819218.00,
, 818818.00,
, 818545.00,
, 818285.00,
, 818147.00,
, 818318.00,
, 818415.00,
, 818450.00,
, 818499.00,
, 818540.00,
, 818614.00,
, 818775.00,
, 818965.00,
, 819181.00,
, 819554.00,
, 820545.00,
CONC (YYMMDDHH)
127.12700 (84020104)
99.33892 (84042320)
269.65330 (84012904)
382.18620 (84041421)
411.44610 (84020401)
372.57550 (84020406)
392.08220 (84072203)
656.27900 (84090301)
796.93990 (84010122)
816.96710 (84090623)
822.78040 (84072901)
756.00820 (84030306)
611.90270 (84071624)
447.09960 (84072802)
455.14840 (84070104)
413.56510 (84071622)
217.84990 (84030319)
136.22000 (84051301)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S)r SRC12 ,
** CONC OF COMPOSIT IN MICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT < 46375.00,
(SEC.) X-COORD Y-COORD CONC (YYMMDDHH)
1 46706.70, 820556.00, 122.31550 (84091123)
3 47465.00, 820563.00, 114.84610 (84041720)
5 47401.50, 819536.00, 313.85100 (84012802)
7 47248.90, 818993.00, 310.23070 (84012804)
9 47155.00, 818675.00, 372.73990 (84012707)
11 47079.80, 818419.00, 400.03780 (84032505)
13 47007.00, 818145.00, 284.25650 (84060303)
15 46615.00, 818259.00, 550.69840 (84112404)
17 46428.80, 818370.00, 833.72860 (84010101)
19 46331.60, 818429.00, 788.61630 (84010802)
21 46262.50, 818480.00, 846.25050 (84060105)
23 46183.50, 818514.00, 778.93790 (84090802)
25 46093.10, 818573.00, 705.65370 (84072205)
27 45915.00, 818675.00, 491.66350 (84080603)
29 45834.70, 818872.00, 458.20240 (84021623)
31 45907.70, 819067.00, 440.12910 (84020123)
33 45990.00, 819342.00, 284.63270 (84051103)
35 46161.40, 819886.00, 213.49990 (84071923)
09/17/93
23:15:5;
PAGE 1'
VALUES FOR SOURCE GROUP: SRC12
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00)
X-COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60,
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
45872.70,
45950.80,
46055.20,
46375.00,
Y-COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00,
818775.00,
818965.00,
819181.00,
819554.00,
820545.00,
CONC
127.12700
99.33892
269.65330
382.18620
411.44610
372.57550
392.08220
656.27900
796.93990
816.96710
822.78040
756.00820
611.90270
447.09960
455.14840
413.56510
217.84990
136.22000
(YYMMDDHH)
(84020104)
(84042320)
(84012904)
(84041421)
(84020401 )
(84020406)
(84072203)
(84090301 )
(84010122)
(84090623)
(84072901 )
(84030306)
(84071624)
(84072802)
(84070104)
(84071622)
(84030319)
(84051301)
-------
ISCST2 - VERSION 92273 *** *** CASE STUDY / NORHALIZED EMISSIONS • 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
09/17/93
23:15:52
PAGE 20
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION VALUES FOR SOURCE GROUP: SRC13 ***
INCLUDING SOURCE(S): SRC13 ,
** CONC OF COMPOSIT IN MICROGRAMS/M**3 **
BOUNDARY
OF
(SEC.)
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
RECEPTOR
SOURCE TYP
X- COORD
46706.70,
47465.00,
47401.50,
47248.90,
47155.00,
47079.80,
47007.00,
46615.00,
46428.80,
46331.60,
46262.50,
46183.50,
46093.10,
45915.00,
45834.70,
45907.70,
45990.00,
46161.40,
ETUORK OF SOURCE ID: SRC1
: VOLUME; WITH
Y-COORD
820556.00,
820563.00,
819536.00,
818993.00,
818675.00,
818419.00,
818145.00,
818259.00,
818370.00,
818429.00,
818480.00,
818514.00,
818573.00,
818675.00,
818872.00,
819067.00,
819342.00,
819886.00.
•H ORIGIN AT ( 46375.00,
CONC
135
120
348
325
427
444
354
569
802
871
904
840
745
502
491
476
355
243
.71290
.74040
.76090
.53170
.59890
.36570
.59600
.06410
.10320
.02180
.12740
.27790
.63960
.31330
.79390
.51460
.64140
.99460
(YYMMDDHH)
(84070405)
(84041720)
(84012802)
(84012804)
(84012707)
(84032505)
(84110607)
(84022501)
(84072005)
(84072503)
(84073105)
(84021504)
(84072205)
(84080603)
(84021623)
(84060503)
(84091122)
(84071923)
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.00)
X- COORD
47059.
47583.
47314.
47187.
47113.
47050.
46818.
46505.
46375.
46292.
46227.
46141.
46030.
45808.
45872.
45950.
46055.
46375.
00,
40,
60,
50,
60,
50,
50,
00,
00,
90,
20,
20,
30,
70,
70,
80,
20,
00,
Y- COORD
820555
820115
819218
818818
818545
818285
818147
818318
818415
818450
818499
818540
818614
818775
818965
819181
819554
820545
.00,
.00.
.00,
.00,
.00,
.00,
.00,
.00,
.00.
.00,
.00,
.00,
-00.
.00.
.00.
.00.
-00,
.00.
CONC
134.30710
118.94690
307.44080
424.28390
449.49670
408.48860
442.95700
717.54940
837.67260
882.47030
868.95400
803.77340
683.2739a
478.83640
451.11170
468.81220
251.95750
144.79180
(YYMMDDHH)
(84120723)
(84012824)
(84012904)
(84041421)
(84020401 )
(84020406)
(84060103)
(84053102)
(84010407)
(84060922)
(84100403)
(84051206)
(84071624)
(84072802)
(84070104)
(84071622)
(84030319)
(84051223)
-------
*** ISCST2 • VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS • 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC14 ,
** CONC OF COMPOSIT IN MICROGRAHS/M**3
09/17/93
23:15:51
PAGE 2'
VALUES FOR SOURCE GROUP: _ .SRC14
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT (
(SEC.)
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
X-COORD
46706.70,
47465.00,
47401.50,
47248.90,
47155.00,
47079.80,
47007.00,
46615.00,
46428.80,
46331.60,
46262.50,
46183.50,
46093.10,
45915.00,
45834.70,
45907.70,
45990.00,
46161.40,
Y-COORD
820556.00,
820563.00,
819536.00,
818993.00,
818675.00,
818419.00,
818145.00,
818259.00,
818370.00,
818429.00,
818480.00,
818514.00,
818573.00,
818675.00,
818872.00,
819067.00,
819342.00,
819886.00,
46375.
CONC (YYMMDDHH)
135.73690 (84070405)
121.63410 (84041720)
346.45590 (84012802)
365.53810 (84012804)
450.98730 (84012707)
411.72290 (84040901)
370.10280 (84110607)
580.83450 (84022501)
788.45820 (84072005)
861.04700 (84072004)
886.09030 (84071501)
826.74730 (84090802)
746.73440 (84101124)
561.53930 (84080603)
457.99500 (84021623)
488.04440 (84060503)
392.66440 (84091122)
246.34160 (84071923)
00,
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
00)
X-COORD
47059.
47583.
47314.
47187.
47113.
47050.
46818.
46505.
46375.
46292.
46227.
46141.
46030.
45808.
45872.
45950.
46055.
46375.
00
40
60
50
60
50
50
00
00
90
20
20
30
70
70
80
20
00
1
t
t
1
i
g
t
1
t
r
1
I
t
I
I
t
i
I
Y-COORD
820555.
820115.
819218.
818818.
818545.
818285.
818147.
818318.
818415.
818450.
818499.
818540.
818614.
818775.
818965.
819181.
819554.
00,
00,
00,
00,
00,
00,
00,
00,
00,
00,
oo,
00,
00,
00,
oo,
oo.
oo,
820545.00,
CONC
134
111
295
425
391
373
441
704
843
865
864
791
674
476
450
453
252
145
.28650
.05690
.30550
.03450
.86900
.13290
.96490
.74180
.24810
.71150
.33920
.75290
.27970
.77170
.48300
.09120
.47640
.89650
(YYMMDDHH)
(84120723)
(84012824)
(84012904)
(84041421)
(84020401 )
(84020406)
(84060103)
(84053102)
(84020724)
(84033101)
(84072901 )
(84030306)
(84Q33104)
(84012822)
(84050405)
(84071622)
(84030319)
(84051223)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC15 ,
** CONC OF COMPOSIT IN MICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT ( 46375.00,
(SEC.) X-COORD Y-COORD CONC (YYMMDDHH)
1 46706.70, 820556.00, 135.69680 (84070405)
3 47465.00, 820563.00, 121.94590 (84041720)
5 47401.50, 819536.00, 334.20830 (84012802)
7 47248.90, 818993.00, 377.15330 (84012804)
9 47155.00, 818675.00, 449.08250 (84013102)
11 47079.80, 818419.00, 439.75160 (84040901)
13 47007.00, 818145.00, 370.96730 (84110607)
15 46615.00, 818259.00, 583.98460 (84022501)
17 46428.80, 818370.00, 773.48790 (84072005)
19 46331.60, 818429.00, 835.84830 (84010802)
21 46262.50, 818480.00, 868.76740 (84060105)
23 46183.50, 818514.00, 811.30700 (84051205)
25 46093.10, 818573.00, 741.95730 (84021503)
27 45915.00, 818675.00, 560.11240 (84060505)
29 45834.70, 818872.00, 441.63270 (84061721)
31 45907.70, 819067,00, 492.82930 (84020704)
33 45990.00, 819342.00, 415.99130 (84091122)
35 46161.40, 819886.00, 247.83530 (84071923)
09/17/93
23:15:52
PAGE 22
VALUES FOR SOURCE GROUP: SRC15
818675.00,
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
.
X-COORD
47059.00
47583.40
47314.60
47187.50
47113.60
47050.50
46818.50
46505.00
46375.00
46292.90
46227.20
46141.20
46030.30
45808.70
45872.70
45950.80
46055.20
46375.00
00)
Y-COORD
, 820555.00,
, 820115.00,
, 819218.00,
, 818818.00,
, 818545.00,
, 818285.00,
, 818147.00,
, 818318.00,
, 818415.00,
, 818450.00,
, 818499.00,
, 818540.00,
, 818614.00,
, 818775.00,
, 818965.00,
, 819181.00,
, 819554.00,
, 820545.00,
CONC (YYMMDDHH)
133.94760 (84120723)
105.11380 (84042320)
268.27160 (84012904)
381.26220 (84041421)
306.45900 (84020401)
320.30460 (84020406)
428.56850 (84060103)
691.06950 (84053102)
839.82740 (84020724)
844.70920 (84090623)
850.58840 (84020807)
775.92880 (84030106)
656.15620 (84033104)
473.30940 (84021407)
497.66780 (84050405)
464.53400 (84103022)
248.71090 (84030319)
147.00560 (84051223)
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC16 ,
** CONC OF COMPOSIT IN MICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME; WITH ORIGIN AT ( 46375.00,
09/17/93
23:15:52
PAGE 22
VALUES FOR SOURCE GROUP: SRC16 ***
(SEC.)
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
X-COORD
46706.70,
47465.00,
47401.50,
47248.90,
47155.00,
47079.80,
47007.00,
46615.00,
46428.80,
46331 .60,
46262.50,
46183.50,
46093.10,
45915.00,
45834.70,
45907.70,
45990.00,
46161.40,
Y-COORD
820556.00,
820563.00,
819536.00,
818993.00,
818675.00,
818419.00,
818145.00,
818259.00,
818370.00,
818429.00,
818480.00,
818514.00,
818573.00,
818675.00,
818872.00,
819067.00,
819342.00,
819886.00,
CONC (YYMMDDHH)
162.51520 (84070405)
141.12930 (84041720)
476.14350 (84012802)
493.55110 (84012804)
722.84230 (84012707)
752.52390 (84032505)
555.25160 (84110607)
1164.03600 (84022501)
2063.70800 (84072005)
2435.99000 (84072503)
2611.02700 (84073105)
2265.40300 (84021504)
1823.26300 (84072205)
952.57060 (84080603)
881.74790 (84021623)
850.62950 (84060503)
560.63700 (84091122)
336.93160 (84071923)
818675.00, .00)
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
X- COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60,
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
45872.70,
45950.80,
46055.20,
46375.00,
Y-COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00,
818775.00,
818965.00,
819181.00,
819554.00,
820545.00,
CONC (YYMMDDHH)
159.91720 (84120723)
139.45220 (84012824)
452.42730 (84012904)
710.17000 (84041421)
765.64270 (84020401)
665.57980 (84020406)
755.30100 (84060103)
1702.61900 (84053102)
2274.18000 (84010407)
2491.92500 (84060922)
2414.79200 (84100403)
2083.57300 (84051206)
1549.87900 (84071624)
848.41670 (84072802)
784.88650 (84070104)
819.49790 (84071622)
382.31200 (84030319)
174.99690 (84051223)
-------
*** ISCST2 • VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984
*** MODELING OPTIONS USED: CONC RURAL FLAT
*** THE 1ST HIGHEST 1-HR AVERAGE CONCENTRATION
INCLUDING SOURCE(S): SRC17 ,
** CONC OF COMPOSIT IN MICROGRAMS/M**3
BOUNDARY RECEPTOR NETWORK OF SOURCE ID: SRC1
OF SOURCE TYPE: VOLUME;
(SEC.) X-COORD Y-COORD
1 46706.70, 820556.00,
3 47465.00, 820563.00,
5 47401.50, 819536.00,
7 47248.90, 818993.00,
9 47155.00, 818675.00,
11 47079.80, 818419.00,
13 47007.00, 818145.00,
15 46615.00, 818259.00,
17 46428.80, 818370.00,
19 46331.60, 818429.00,
21 46262.50, 818480.00,
23 46183.50, 818514.00,
25 46093.10, 818573.00,
27 45915.00, 818675.00,
29 45834.70, 818872.00,
31 45907.70, 819067.00,
33 45990.00, 819342.00,
35 46161.40, 819886.00,
09/17/93
23:15:52
PAGE 24
VALUES FOR SOURCE GROUP: SRC17 ***
TH ORIGIN AT ( 46375.00,
CONC
162.77410
141.11660
476.29880
495.32100
726.26790
750.34090
558.28760
1173.52100
2067.51400
2437.62500
2605.74900
2260.39000
1822.05900
956.91630
880.15740
853.94820
565.55270
336.95000
CYYMMDDHH)
(84070405)
(84041720)
(84012802)
(84012804)
(84012707)
(84032505)
(84110607)
(84022501)
(84062606)
(84072503)
(84073105)
(84021504)
(84072205)
(84080603)
(84021623)
(84060503)
(84091122)
(84071923)
818675.00, .00)
(SEC.)
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
X-COORD
47059.00,
47583.40,
47314.60,
47187.50,
47113.60,
47050.50,
46818.50,
46505.00,
46375.00,
46292.90,
46227.20,
46141.20,
46030.30,
45808.70,
45872.70,
45950.80,
46055.20,
46375.00,
Y- COORD
820555.00,
820115.00,
819218.00,
818818.00,
818545.00,
818285.00,
818147.00,
818318.00,
818415.00,
818450.00,
818499.00,
818540.00,
818614.00,
818775.00,
818965.00,
819181.00,
819554.00,
820545.00,
CONC
159.99520
139.61020
452.54260
711.64400
762.54020
662.94760
756.84340
1704.05300
2287.15000
2488.65900
2411.86400
2079.25800
1544.66800
848.04900
777.50970
818.19780
382.11300
175.05630
(YYMMDDHH)
(84120723)
(84012824)
(84012904)
(84041421)
(84020401)
(84020406)
(84060103)
(84053102)
(84010407)
(84060922)
(84100403)
(84051206)
(84071624)
(84072802)
(84070104)
(84071622)
(84030319)
(84051223)
-------
*** ISCST2 -
*** MODELING
VERSION 92273 ***
OPTIONS USED: CONG
GROUP ID
SRC1
SRC2
SRC3
SRC4
SRCS
SRC6
SRC7
SRCS
SRC9
SRC10
SRC11
SRC12
SRC13
SRC14
SRC15
SRC16
SRC17
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
1ST HIGH
*** CASE STUDY / NORMALIZED EMISSIONS - 1984 ***
*** ***
RURAL FLAT
*** THE SUMMARY OF HIGHEST 1-HR RESULTS ***
** CONC
AVERAGE CONC
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
VALUE IS
1240.82600
1240.82600
1240.82600
1240.82600
846.25050
846.25050
846.25050
846.25050
846.25050
846.25050
846.25050
846.25050
904.12740
886.09030
868.76740
2611.02700
2605.74900
OF COMPOS IT IN MICROGRAMS/M**3
DATE
(YYMMDDHH)
ON 84010101:
ON 84010101:
ON 84010101:
ON 84010101:
ON 84060105:
ON 84060105:
ON 84060105:
ON 84060105:
ON 84060105:
ON 84060105:
ON 84060105:
ON 84060105:
ON 84073105:
ON 84071501:
ON 84060105:
ON 84073105:
ON 84073105:
09/17/93
23:15:5;
PAGE 21
**
RECEPTOR (XR, YR, ZELEV. ZFLAG) OF
AT <
AT (
AT (
AT (
AT (
AT <
AT (
AT (
AT <
AT <
AT (
AT <
AT <
AT (
AT (
AT (
AT (
46375.00,
46375.00,
46375.00,
46375.00,
46262.50,
46262.50,
46262.50,
46262.50.
46262.50,
46262.50,
46262.50,
46262.50,
46262.50,
46262.50,
46262.50,
46262.50,
46262.50,
818415.00,
818415.00,
818415.00,
818415.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
818480.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00,
.00.
.00,
.00,
.00,
.00,
.00,
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
.00)
NETWORK
TYPE GRID- ID
BD
BD
80
BD
BD
BD
BD
BD
BD
BD
BD
BD
BD
BD
BD
BD
BD
*** RECEPTOR TYPES: GC = GRIDCART
GP = GRIDPOLR
DC * DISCCART
DP - DISCPOLR
BD = BOUNDARY
-------
*** ISCST2 - VERSION 92273 *** *** CASE STUDY / NORMALIZED EMISSIONS - 1984 *** 09/17/93
*** *** 23:15:52
PAGE 26
*** 'MODELING OPTIONS USED: cone RURAL FLAT
*** Message Sunnary For ISC2 Model Execution ***
Surmary of Total Messages
A Total of 0 Fatal Error Message(s)
A Total of 0 Warning Message(s)
A Total of 902 Informational Message(s)
A Total of 902 Calm Hours Identified
******** FATAL ERROR MESSAGES ********
*** NONE ***
******** WARNING MESSAGES ********
*** NONE ***
************************************
*** ISCST2 Finishes Successfully ***
************************************
-------
**************** Fvamnle TOXST Inout File ****************
CASE STUDY OPERATIONS - 8-HOUR - 1984-1985 DIST
6, 385., 550., 900., 1350., 1800., 2700.
1,0.
THRESHOLD #1
THRESHOLD #2
THRESHOLD #3
THRESHOLD #4
THRESHOLD #5
THRESHOLD #6
COMPOSITE
200, 17, 8, 17
18, 0, 0, 1
2, 1984, 1985
ISC8H84.OUT
SOURCE 1 (371)
1, 1, 1.0000, 1, 2
1.0, 1.0
2184, 736
0.304, 0.000
0.304, 0.000
SOURCE 2 (374)
2, 2, 1.0000, 1, 2
1.0, 1.0
2184, 736
0.027, 0.000
0.027, 0.000
SOURCE 3 (378)
3,3,0.0034, 1, 1
1.0
144 .
0.955
0.955
SOURCE 4 (403)
4,4,0.0039, 1, 1
1.0
144
0.103
0.103
SOURCE 5 (414)
5, 5, 1.0000, 1, 2
1.0, 1.0
2184, 736
0.001, 0.000
o.oov^ooo
SOURCE 6 (417-418)
6,6,0.0031, 1, 5
-------
1.0, 1.0, 1.0, 1.0, 1.0
2, 190, 1, 1, 1
0.115, 0.092, 0.095, 0.762,
0.115, 0.092, 0.095, 0.762,
SOURCE 7 (419)
7,7,0.0024, 1, 2
1.0, 1.0
2, 262
0.0011, 0.0010
0.0011, 0.0010
SOURCE 8 (421)
8, 8, 0.0027, 1, 5
1.0, 1.0, 1.0, 1.0, 1.0
2, 262, 1, 1, 1
0.044, 0.040, 0.054, 0.431,
0.044, 0.040, 0.054, 0.431,
SOURCE 9 (425)
9,9,0.0014, 1, 5
1.0, 1.0, 1.0, 1.0, 1.0
2, 262, 1, 1, 1
0.356, 0.285, 0.054, 0.431,
0.356, 0.285, 0.054, 0.431,
SOURCE 10 (428)
10, 10, 0.0002, 1, 1
1.0
120
0.334
0.334
SOURCE 11 (430)
11, 11,0.0140, 1, 2
1.0, 1.0
2, 262
0.081, 0.078
" 0.081, 0.078
SOURCE 12 (431)
12, 12, 0.0140, 1, 2
1.0, 1.0
2, 262
0.010, 0.009
0.010, 0.009
SOURCE 13 (3601)
13,13,0.0050, 1, 6
1.0, 1.0, 1.0, 1.0, 1.0,
3, 48, 12, 1, 1,
2.555, 0.034, 0.645, 1.170,
2.555, 0.000, 0.645, 1.170,
SOURCE 14 (3603)
14, 14, 0.0050, 1, 6
1.0, 1.0, 1.0, 1.0, 1.0,
3, 48, 12, 1, 1,
0.095
0.095
0.054
0.054
0.054
0.054
1.0
1
9.356, 1.170
9.356, 1.170
1.0
1
-------
2.555, 0.034, 0.645, 1.170, 9.356, 1.170
2.555, 0.000, 0.645, 1.170, 9.356, 1.170
SOURCE 15 (3604)
15, 15, 0.0050, 1, 6
1.0, 1.0, 1.0, 1.0, 1.0, 1.0
3, 48, 12, 1, 1, 1
2.555, 0.034, 0.645, 1.170, 9.356, 1.170
2.555, 0.000, 0.645, 1.170, 9.356, 1.170
SOURCE 16 (5 GALLON SPILL)
16, 16, .0002283, 1, 2
1.0, 1.0
1, 1
1.5531, 0.5177
1.5531, 0.5177
SOURCE 17 (10 GALLON SPILL)
17, 17, .0001142, 1, 2
1.0, 1.0
1, 1
3.1062, 1.0354
3.1062, 1.0354
-------
-------
**************** Examole TOXST Outout File ****************
********************************** INTERMITTENT RELEASE TOXICS EXPECTED EXCEEDANCES SYSTEM **************************
TOXX, September 1993 Version
(IBM PC Compatible Version)
Sullivan Environmental Consulting, Inc.
*******************************************************************************************************************
Date and time of run: 10- 6-1993 17:34
User Input Information
Title of run
# simulations per meteorological year
# emission sources
# receptors printed per row
Averaging period (hours)
Number of source group batch operations
Only source groups combined output Yes =
Emissions mutually exclusive? Yes - 1
Representative ISCST2 output file name
Metyears of requested dispersion results
CASE STUDY OPERATIONS - 8-HOUR - 1984-1985 DIST
200
17
18
8
17
1
0
ISC8H84.0UT
1984 1985
Output only expected exceedances averaged over all meteorological
Find expected exceedances of multiple thresholds.
years.
Pollutant and Threshold Information:
Poll. Id #:
1
Pollutant Data
Pollutant Name:
COMPOSITE
Background (ug/m3):
.00
Thrs. Id #:
1
2
3
4
5
6
Health Effect Threshold Data
Health Effect Name: Threshold (ug/m3):
THRESHOLD #1
THRESHOLD #2
THRESHOLD #3
THRESHOLD #4
THRESHOLD #5
THRESHOLD #6
385.00
550.00
900.00
1350.00
1800.00
2700.00
Emission Sources Information:
Source* Group*
1 1
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
2 2
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
3 3
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
4 4
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
5 5
Source Name
SOURCE 1
1.00000 1.
> 2184
.304
.304
SOURCE 2
1.00000 1.
> 2184
.027
.027
SOURCE 3
1.00000
> 144
.955
.955
SOURCE 4
1.00000
> 144
.103
.103
SOURCE 5
00000
736
.000
.000
00000
736
.000
.000
Release Max Release
Probability Duration (hr)
1.00000000 2920
1.00000000 2920
.00340000
.00390000
144
144
1.00000000 2920
Pollutant Name
COMPOSITE
COMPOSITE
COMPOSITE
COMPOSITE
COMPOSITE
Max Emiss
Rate (g/s)
.304
.027
.955
.103
.001
Batch Number
Yes = 1 Em Cats
1 2
-------
Dist Prob: >
Dist Valid (hrs):
AM Eniss Rate:
PM Emiss Rate:
6 6
Dist Prob: >
Oist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
7 7
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
8 8
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
9 9
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
10 10
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
11 11
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
12 12
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
13 13
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
14 14
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
15 15
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Effliss Rate:
16 16
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
17 17
Dist Prob: >
Dist Valid (hrs):
AM Emiss Rate:
PM Emiss Rate:
1.00000
> 2184
.001
.001
SOURCE 6
1.00000
> 2
.115
.115
SOURCE 7
1.00000
> 2
.001
.001
SOURCE 8
1.00000
> 2
.044
.044
SOURCE 9
1.00000
> 2
.356
.356
SOURCE 10
1.00000
> 120
.334
.334
SOURCE 11
1.00000
> 2
.081
.081
SOURCE 12
1.00000
> 2
.010
.010
SOURCE 13
1.00000
> 3
2.555
2.555
SOURCE 14
1.00000
> 3
2.555
2.555
SOURCE 15
1.00000
> 3
2.555
2.555
SOURCE 16
1.00000
> 1
1.553
1.553
SOURCE 17
1.00000
> 1
3.106
3.106
1.00000
736
.000
.000
1.00000
190
.092
.092
1.00000
262
.001
.001
1.00000
262
.040
.040
1.00000
262
.285
.285
1.00000
262
.078
.078
1.00000
262
.009
.009
1.00000
48
.034
.000
1.00000
48
.034
.000
1.00000
48
.034
.000
1.00000
1
.518
.518
1.00000
1
1.035
1.035
.00310000
1.00000 1.00000
1 1
.095 .762
.095 .762
.00240000
.00270000
1.00000 1.00000
1 1
.054 .431
.054 .431
.00140000
1.00000 1.00000
1 1
.054 .431
.054 .431
.00020000
.01400000
.01400000
.00500000
1.00000 1.00000
12 1
.645 1.170
.645 1.170
.00500000
1.00000 1.00000
12 1
.645 1.170
.645 1.170
.00500000
1.00000 1.00000
12 1
.645 1.170
.645 1.170
.00022830
.00011420
195
1.00000
1
.095
.095
264
267
1.00000
1
.054
.054
267
1.00000
1
.054
.054
120
264
264
66
1.00000
1
9.356
9.356
66
1.00000
1
9.356
9.356
66
1.00000
1
9.356
9.356
2
2
COMPOSITE
COMPOSITE
COMPOSITE
COMPOSITE
COMPOSITE
COMPOSITE
COMPOSITE
COMPOSITE
1.00000
1
1.170
1.170
COMPOSITE
1.00000
1
1.170
1.170
COMPOSITE
1.00000
1
1.170
1.170
COMPOSITE
COMPOSITE
.762
.001
.431
.431
.334
.081
.010
9.356
9.356
9.356
1.553
3.106
Dispersion Model Results Data Information
-------
Oatafile Headers:
Title of dispersion model result data
Year modeled
# sources
it receptors
if averaging periods modeled 1h~~TSCST2~ "
Exex output by recptr? (0=no,1=pol,2=rect)
# radials (polar) or rows
-------
-------
"e
«
1
1
X
3
•1
1
u
1
o
i
•o
01
Co
01
m
3
3
(M
5
(M
in
0
in
**
00
in
o
in
Ov
in
I-.
O
O
in
r-.
R
00
in
>*•
N.
in
„_
§
oo
o
8
§
00
o
8
00
o
in
in
s
«
a
o
in
1
O
IA
^
f\i
00
o
o
i
00
o
0
in
$
oo
o
•o
ro
CO
o
o
(M
£
00
o
00
00
•
o
oo
»
CO
—
*•;
o
1
oo
- -
o
I
00
—
T
o
in
CO
^
o
(M
00
O
00
§
00
CM
O
00
00
rg
o
£
oo
M
0
i
oo
N.
•
0
R
eo
o
in
xr
co
~s-
o
0
VI-
in
00
00
2
O
s
00
-------
-------
?
I
•M
§
0
^^
,-
Hi
-1
OQ
<
h-
= •3
O ra
So
E o
« a
C CL
a T3 3 in
fi o u o
41 f O>»-
U Q) 1
X S «1~J
uiuog
a-3-
CD 41 CO ••
1. > «-
tl g _>
i
"2
*
„
s
e
o
in
in
o
•o
•*
R
o.
CO*
(M
in
CO
o
in
in
•*
•o
Kl
CO
ft
g
O
in
g
in
0
in
o
§
in
00
CO
•o
•O
o
in
i
o
s
in
CO
CO
CM
e
o
o
o
•o
in
CO
0
o
in
in
in
o
in
CM
CO
O
o
in
o
o
i
00
o
in
&
00
o
o
s
00
o
ru
3
CO
o
o
00
00
o
co
»
00
o
1
00
0
o
1
00
o
CO
00
o
I
CO
-
0
00
§
CO
o
IS
00
CO
0
o
s
00
o
I
00
o
R
tn
oo
00
o
o
m
in
oo
CO
0
o
in
oo
co
-------
o
I
l_
I
a>
41
-------
£5
P
o o
u o
•• o
v in
S1"
SA
9
o
I
1
X
9
V
S
•M
J*"
t
O
1C
•0
o»
in
(M
in
3
5
-*
rg
3
-------
3
-------
"8
4J
§
u
*^
(M
IU
•3 A
§
+•»
1
TO
o
u
X
g
1
o
1
„
3
s
0
1
in
o
•0
§
o
CO
•»
in
eo
o
in
in
-*
•o
fl
00
e
1
«*•
in
o
in
g
o
§
"*
in
CO*
1
5
•O
0
in
o
cS
$
oo
s
1
o
o
§
o
0
•o
in
in
o
t%j
00
0
0
in
in
in
r\j
00
o
in
o
CM
00
o
o
in
o
(NJ
00
o
i
o
s
00
o
o
s
o
(M
s
00
0
o
CO
§
00
o
00
oo
o
N.
00
o
o
CO
oo
e
I
CO
o
eo
oo
eo
o
o
CO
00
eo
oo
a
IS
CO
eo
o
o
1C
•o
00
CO
o
00
oo
0
c
in
0}
co
o
o
in
m
00
eo
o
s
CO
-------
o
s
40
O
I
00
o
o
03
3
00
o
o
in
09
O
o>
(M
3
oo
0
o
0
i
03
o
in
i
03
*
O
g
8
03
•
O
00
s
00
0
o
in
CO
O
o
1
00
o
o
03
03
0
O
in
00
CO
o
*
u
41
L.
8.
at
1
u
X
41
O.
10
O
•• "O
41 <^
lie™
•332
o °5 S
g-* «
4) .£
•o o
CO L. Q.
a o> 4i
4) U
— • 41 41
V O
a 2 t.
'I "" 3
M S £
U 0 5
2 c"8
H!
••- 1
4 "a L.
a t- <
-------
'e
01
1
1
X
s
*rf
e
Sm
1
§
U
1
O
R
•0
i
o»
§!
in
i
3
(M
fc
5
in
S
3
3
(M
1
(M
in
to
o
in
"*
00
o
in
o
in
in
^
§
in
„_
rj
eo
in
N.
in
N.
in
o
1
S
0
1
00
o
in
in
S
a
o
o
in
0
o
in
S
o
o
i
00
o
o
in
00
o
3
00
o
o
(M
3
00
0
oo
00
'
0
5
o>
00
o
o
s.
00
o
1
00
o
o
in
00
o
o
K
00
o
oo
§
00
o
0
JC.
eo
00
o
o
s
00
o
0
i
co
-
o
s
00
o
in
in
eo
00
*""
o
0
oo
-------
CO
to
w
8
-------
^•i
21
5 o
u o
§ SJ
i S<
g
0>
1
8
u
X
+rf
3
b>
J*"
i
«*
o
in
0
-------
o
s
00
o
8:
3
00
o
1
to
o
o
in
to
o
Oo
<\J
a
03
O
o
0>
i
00
o
in
i
00
o
s
CO
03
0
o
09
i
00
o
o
1
CO
o
o
o
in
CO
e>
0
09
00
O
o
in
00
00
L.
O
I
41
1
41
U
X
41
w
o
o
« 5
C -» O)
•Q CO 41
41 (M >
x -^ n
41
c
§..:
•o o
t) Z Q.
10 Ol 41
4> O
0 ^ 1.
5 « o
Us
0 41 X
U U 41
U 8 41
t. * S
s — «
j 10 U
S *» 41
T rt ^
J w ^
Z h- <
-------
"e
"*
*•
1
i
u
X
§
*•»
c
g
s
1
o
i
•0
1
o»
r«J
in
IM
S
•o
in
•*
5
-------
3
-------
§
u
%*
•f
Ul
3
£
01
1
1
u
1
X
§
0
1
i
Cl
1
1
o
3
in
o
•0
5
i
in
«'
0
in
in
•o
co
•*
0
in
o
in
g
o
i
in
CO
K
s
•O
O
in
1
o
8
in
eo
s
3
o
o
CM
eo
o
o
in
a
o
o
in
in
s
(V
eo
o
in
8
e
o
in
8
o
i
CO
o
in
eo
o
o
•o
eo
0
CM
s
CO
o
o
eo
eo
o
»•
eo
o
1
eo
o
o
g
i
co
o
in
eo
o
1
eo
o
0
eo
§
eo
o
IS
CO
CQ
o
o
in
CO
eo
o
i
co
o
c
in
eo
co
o
o
!8
eo
o
o
eo
-------
o
i
00
0
I
eo
o
g
2
eo
o
o
in
eo
o
a
a
eo
o
o
i
eo
o
in
i
eo
o
o
s
2
eo
o
e
eo
i
eo
o
o
1
eo
o
o
IS
eo
o
0
5
eo
o
o
in
eo
eo
o
*
o
01
u
oi
01
o
X
01
8
8
•• TJ
01 •-
u t-
fo o)
x^l
« .£
O •• L.
•o o
M 1- CL
-------
Ul
_J
£
4)
1
O
3
X
g
V
S
KB
1
(J
i
O
1C
i
•0
ru
46262.5
Ri
3
in
a
i
sr
i
O
10
o
•o
o
in
00
0
S
in
o
in
51
in
^
8
lA
N.
R
00
in
^
s
in
^
in
o
1
CO
o
•o
in
00
o
in
in
£
00
o
o
s
£
n
0
in
o
00
o
0
i
00
o
o
s
00
o
£
CO
o
o
(VI
00
o
00
00
o
•
o
5
00
o
o
•o
§
00
0
M
00
0
0
3
s
00
o
0
1
00
0
00
i
00
o
0
IS
00
00
0
o
fC
3
00
o
o
oo
oo
o
o
5
oo
o
in
in
oo
03
c
o
0
>*•
in
03
CO
-------
-------
II
— cj o
+* •
S.. o
V O
u coo
+* 10 v*
g
V
2
.1
o
o
u
X
4»
3
i
§
u
i
„
s
e
•*
o
t
in
O
•0
5
0>
CO
ff
in
CO
o
in
in
«J
rn
r-.
oo
0
0
o>
in
0
o
l^
I
in
00
1
o
in
1
o
S
5
CO
1
0
—
o
3
CM
CO
o
o
X)
in
8
o
o
in
in
^
\-
o
3
in
o
o
o
in
00
o
i
00
o
in
00
O
o
-o
CO
o
(M
00
O
0
co
oo
o
5
00
o
s.
CO
o
o
00
00
o
in
co
o
§
oo
0
o
co
oo
o
K
N.
co
oo
o
0
s
CO
0
i
00
o
s
eo
CO
o
o
u-i
in
oo
CO
o
o
in
co
00
-------
t-
o
&
o
«*
•o o
-------
•O
UI
111 r*
£9
M •».
S?
§§
c r«-
•*• u .
O 01
81°
8 = 8.
"•o Tg
I"?
41 4)>»
UJ L. O CO
j: t- o
8*-i"
.« «L.
$5=8
o
X-Coordinal
g
a
•w
0
o
R
<0
o>
in
(M
(M
N.'
in
s
!
7
CM
i
i
IN
1
ro
o
1
o
o
g
in
00
§
o
in
in
^
§
in
^
«
N-
sf
N.
in
o
S
00
o
•0
s
o
in
in
in
o
e
i
s
o
in
s
00
o
o
i
00
o
o
g
00
o
1
00
o
o
-------
0
o
-*
s
00
o
0
£
co
0
o
I
00
a
o
o
3
CO
o
o
1
co
o
o
i
00
o
0
in
i
00
o
s
8
00
o
CO
3
00
o
in
CO
(M
CO
00
o
Sj
CO
o
K.
00
CO
e
in
•*
CO
CO
-------
i
(••X
+*
I
•5
X
„
ts
41
4-*
'•5
u
1
„
s
§
o
!
in
0
•O
§
0
i
in
fl
o
in
in
-o
m
eo
o
•>*
o
i
in
o
in
g
O
o
g
"*
in
00
1
K
O
•O
0
in
i
o
g
in
00
00
(M
o
o
0
o
•o
in
°
CO
o
o
in
in
s
o
in
S
C9
O
in
8
o
i
00
0
1
00
o
0
1
00
o
-------
o
i
CO
o
1
00
o
o
00
o
0
00
o
1
CO
o
o
o
i
oo
o
in
i
CO
o
e
s
3
00
o
o
CO
s
CO
o
o
1
00
o
o
o>
in
3
00
o
0
N.
00
oo
o
o
in
00
CO
1
o
41
L.
8.
M
41
•g
41
0
X
41
CO
IM
§
O
•o
41 —
C in o>
"S O 4*
0*5
X 10
41
C
° -o o
a 01 4i
41 o
— am
a .8 <-
•;-^8
° N
Q.-S 41
41 4> U
U 41 X
**z
"s S a
5 Q ^
J w f
3f t- <
-------
TABLE 7
Number of exceedances within each HET category.
Alt sources combined
(Years: 1984-1985)
Rec
X-Coord
Y-Coord
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
46706.70
47059.00
47465.00
47583.40
47401.50
47314.60
47248.90
47187.50
47155.00
47113.60
47079.80
47050.50
47007.00
46818.50
46615.00
46505.00
46428.80
46375.00
46331.60
46292.90
46262.50
46227.20
46183.50
46141.20
46093.10
46030.30
45915.00
45808.70
45834.70
45872.70
45907.70
45950.80
45990.00
46055.20
46161.40
46375.00
820556.00
820555.00
820563.00
820115.00
819536.00
819218.00
818993.00
818818.00
818675.00
818545.00
818419.00
818285.00
818145.00
818147.00
818259.00
818318.00
818370.00
818415.00
818429.00
818450.00
818480.00
818499.00
818514.00
818540.00
818573.00
818614.00
818675.00
818775.00
818872.00
818965.00
819067.00
819181.00
819342.00
819554.00
819886.00
820545.00
(ug/«r3>
0.0-
385.0
1095.00
1095.00
1095.00
1095.00
1094.99
1094.99
1094.98
1094.94
1094.97
1094.98
1094.96
1094.98
1094.98
1094.95
1094.91
1094.66
1094.38
1094.38
1094.27
1094.11
1093.70
1093.17
1093.44
1093.57
1094.31
1094.70
1094.77
1094.84
1094.90
1094.89
1094.91
1094.91
1094.98
1095.00
1095.00
1095.00
385.0-
550.0
.00
.00
.00
.00
.01
.01
.02
.06
.02
.02
.02
.02
.02
.04
.06
.19
.25
.35
.43
.39
.69
1.09
.89
.75
.38
.19
.18
.11
.08
.09
.08
.09
.01
.00
.00
.00
550.0-
900.0
.00
.00
.00
.00
.00
.00
.01
.00
.00
.00
.02
.00
.00
.02
.01
.14
.26
.21
.23
.36
.45
.54
.49
.58
.26
.11
.05
.05
.01
.02
.01
.01
.01
.00
.00
.00
900.0-
1350.0
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.01
.01
.10
.07
.08
.12
.14
.18
.16
.10
.04
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
1350.0-
1800.0
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.01
.00
.01
.00
.00
.01
.01
.02
.02
.00
.01
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
1800.0
2700.0
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.01
.01
.00
.01
.00
.01
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
>2700.0
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.01
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
.00
Date and time of end: 10- 7-1993 13:57
-------
REFERENCES
CMA, 1992: Chemical Manufacturers Association, Demonstration Version - Draft - Toxic Modeling
System Short-Term (TOXST) User' Guide. Washington, DC, October, 1992.
USEPA, 1989: Hazardous Waste Treatment, Storage, and Disposal Facilities (TSDF) - Air Emissions
Models. U.S. Environmental Protection Agency, EPA-450/3-87-026, Office of Air Quality Planning and
Standards, Research Triangle Park, NC.
USEPA, 1992: A Tiered Modeling Approach for Assessing the Risks Due to Sources of Hazardous Air
Pollutants. D. E. Guinnup, U.S. Environmental Protection Agency, EPA-450/4-92-001, Office of Air
Quality Planning and Standards, Research Triangle Park, NC.
Whitmyre, O.K., L.B. Wakefield, D.A. Sullivan, and DJ. Hlinka, 1992: Evaluation of Modeling and
Risk Assessment Methods for Peak Releases of Air Toxics. Prepared for Air Dispersion Work Group
of the Chemical Manufacturers Association.
Sullivan, David A., Thomas G. Grosch, and Dennis J. Hlinka, "Case Study of TOXST Application,"
prepared by Sullivan Environmental for the Chemical Manufacturer's Association, June 1993.
-------
-------
c /**********************************************************/
c /* */
c /* TOXX (TOxics expected eXceedances system for */
c /* intermittent sources) */
c /* */
c /* Host is IBM PC Compatible running MS-DOS. */
c /* Compiler is Microsoft FORTRAN Version 5.1. */
c /* */
c /* Developed under contract for the */
c /* U.S. Environmental Protection Agency */
c /* Project manager, David E. Guinnup */
c /* */
c /* Thomas G. Grosch */
c /* September 1993 */
c /* */
c /* Based on TOXX Version 1.12, which was derived from */
c /* TOXX Version 1.00, by Jamie Pehling. */
c /* */
c / /
c==== TOXX Program Main Documentation =================================
c
c Development log:
c
c Please write clean & consistent code!!!
c
cSE
cSE
c 930930 Thomas Grosch
cSE TOXX Enhanced Model
cSE
cSE New comment lines added to this demonstration model are
cSE indicated by cSE. New code and changes made to the existing
cSE code are preceded and followed by cSE.
cSE
cSE 1. Code broken into two .FOR files. TOXX.FOR and TOXX2.FOR.
cSE 2. Re-format of output tables.
CSE 3. Addition of Batch operations option
cSE 3. Addition of Mutually Exclusive option
cSE 3. Addition of multiple hourly averaging option.
cSE 4. Addition of AM and PM emission rates option.
cSE
cSE This program is in need of a new random generator to provide
cSE random numbers for emissions that occur less frequently than
cSE once every three years (i.e. fuel/chemical spills)
c 10/5/92
c Revision of TOXX.FOR to accommodate:
c l. the complete re-coding of the Industrial Source Complex Short Term
c computer model (previously ISCST, now ISCST2 of 9/29/92) from which
c TOXX obtains its input of dispersion concentrations, and
c 2. the initiatives set forth in "A Tiered Modeling Approach For Assessing
c The Risks Due To Sources Of Hazardous Air Pollutants"
C (EPA-450/4-92-001)
c D.E. Guinnup, March 1992
c
c
c 901115 Jamie Pehling
-------
c TOXX Version 1.12
c
c Certain page banners so long that they wrapped on output
c printout have been shortened. Warning message file output
c has been adjusted so that first column of output string is
c always blank. (This adjustment was not made for errors.)
c Later (11/29/90), I fixed a format bug in the labeling of
c the max # exex of a single additive threshold.
c
c
c 900914 Jamie Pehling
c TOXX Version 1.11
c
c Elimination of variables pertaining to the original, severely
c deficient output handling scheme. Output technique altered
c so that page breaks are fixed and each exex table header
c begins on a new page.
c
c
c 900911 Jamie Pehling
c TOXX Version 1.10
c
c Modification of TOXX 1.00 to reduce array storage requirement
c for source group on/off switches. This involved the following
c modifications:
c
c --elimination of variable nRand
c --elimination of error condition #25
c --creation of array tOUAvP
c --minor restructuring of subroutine CaExEx
c --complete receding of subroutine OnOff
c
c
c 900904 Jamie Pehling
c TOXX Version 1.00
c
c Conversion of TOXXS Version 1.01 to IBM PC Compatible.
c
c
c 900101 Jamie Pehling
c TOXXS Version 1.01
c
c Conversion of TOXXS Version 1.0 to run on EPA NCC IBM 3090.
c
c
c 890811 Jamie Pehling
c TOXXS Version 1.0
c
c Conversion of ExExS Version 3.0 to handle more sources and
c source groups, plus intermittent emissions. (The current
c program is no longer suited to variable SO2 emissions stemming
c from variation in coal sulfur content. It is intended for
c simulating continuous and batch emissions of hazardous air
c pollutants)
c
c
c 890208 Thomas Stocking
c ExExS Version 3.0
c (comments paraphrased by Jamie Pehling)
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
(5-
Bug fixed in Models subroutine. Error was
to pass exex array
to metyearly output subroutine, so that cumulative results
instead of metyearly results were printed.
Array that should
have been passed is exexyr. Only the metyearly results appear
to have been affected.
(At some point a reference to the zeroeth
array was also found and eliminated.)
860722 Paulus Irpan
ExExS Version 2 . 0
element of an
Modify & add paging scheme (memory <-> disk file) for the conc-
data buffers, using a tempfile.
The runfile size is reduced significantly,
can handle infinite #conc-data where disk
The program maintains only a page of conc-
yet the program now
space is the limit;
data in memory, and
pages in & out to the tempfile (the save-data file) as needed.
This paging, using tempfile, is done only
exceed the page/buffer size.
when the # cone -data
The run-time of this version is not much more than that of Vi.O
(in-memory version) when few or no paging
is needed!
860618 Paulus Irpan, Till E. Stoeckenius
ExExS Version 1 . 0
Initial design & coding of the program.
Based on the major concepts of EXEX,FASTXX
Martin J. Hillyer, John P. Nordin, Till E.
of data to tempfile
, FXMINI programs by
Stoeckenius at SAX.
c
c TOXX Glossary:
c
c Throughout the TOXX files, the following terms and phrases
c are used interchangeably:
c
c averaging period = time between acquisition of adjacent DMR data pairs
c - period
c
c buffer = internal array containing screened dispersion model results
c * any of the arrays iPers, iRecs, and cones
c
c buffered = stored in memory (as opposed to disk or other mass storage)
c
c data page = set of acMxBf DMR data pairs
c
c data pair • an encoded id datum giving period, receptor, and source
c information, plus a corresponding chi/q value
c * data * data point
c
c DMR * dispersion model results
c
-------
c effhet » effective health effect threshold (g/m3)
c * concentration of a particular pollutant required for a
c certain health effect to appear, minus background
c concentration of that pollutant
c
c exex a expected exceedance(s)
c
c g = grains
c
c group = TOXX source group a sg
c a a set of emission sources which turn on and off at the
c same time, and which typically have identical emission rates
c for all pollutants
c
c het = health effect threshold
c a concentration of a particular pollutant required for a certain
c health effect to appear
c a threshold
c
c impacts a concentrations at receptors resulting from toxic release
c by emission sources
c
c m3 a cubic meters of atmosphere
c
c meteorological year a one calendar year's worth of DMR
c a year of dispersion data
c a calendar year
c a metyear a year
c
c normalized concentrations a chi/q values = DMR concentrations
c
c prescreened data a DMR pairs whose chi/q values passed screening by
c the preprocessor and are used as input to TOXX
c
c a = seconds
c
C screened data * DMR pairs whose chi/q values passed screening by
c TOXX and are retained for exex calculation
c
c simulation year a simulation = sampling = simyear
c
c TOXST a TOxics expected exceedances Short Term system
c
c ug a micrograms
c
c - -
c
c Subprogram flow diagram:
C •**•••-••••••*••-•*»••**—-•*•-••'"»••*»-•••—
c
c The following diagram gives an approximate sense of control flow
c among the various subroutines and functions of TOXX. Not every
c path is followed on every execution, and some subprograms are called
c more than once. Descriptions of what each subprogram does may be
c found at the start of the code for each subprogram.
c
c prog TOXX a.aa> subr Error
c aaaa> subr Getlnp xaas> subr Error
c «a»> subr ChkDat »«==> func leap
c »aa«> subr Error
-------
c ••«•> subr Setup «••*> subr SortTI
c «•••> subr Error
c ••«•> subr Warng ====» subr Error
c •*••> subr GetOta *«»> subr Datal
c »»> subr Data2
c ====> subr DoExEx ====> subr Header
cSE ====> subr CaExEx ====> subr BatPr
c ====> subr RandNo
c ====> subr TauslS
c s==a> subr WrExEx ====> subr WrTab
cSE ====> subr WrTabl
cSE ====> subr Tabline
c
c -- - -
c
c Identifier conventions:
c
c Maximum identifier length: 6 characters.
c
c-
c Upper and lower case letter usage:
c
c constants : all upper case
c
c functions, : first char lower case, all others lower case, except for
c variables any character corresponding to the first appearance of
c a new word in the identifier; ex: for a variable called
c "actual maximum buffarable", the identifier is "acMxBf"
c
c subroutines,: for subprograms coded specifically for TOXX, the
c programs convention is the same as for variables, except first
c char is uppercase; for subprograms native to Microsoft
c FORTRAN, the first char is not uppercase
c
c
c Integer variable naming conventions:
c
c Most integer variables containing some total # of things begin with
c "n": nSrc, nYear. Integer variables which serve as indexes, loop
c counters, etc., typically begin with "i": iRec, iGrp.
c
c
c Calling program/subroutine variable naming conventions:
c
c Variables are named so as to convey the most information on their
c contents that is possible in 6 characters. In subprograms,
c however, actual arguments are USUALLY assigned to formal arguments
c with names different from those used in the calling program,
c especially when subroutines make unusual use of arguments that differs
c substantially
c from usage in the calling program. Usually the identifier for a
c formal argument in a subroutine or function, when different from that
c of the corresponding actual argument, is a shortened form of the
c actual argument's identifier in the calling routine (iRec --> iR, for
c example), although sometimes a type change is used (FUPRT --> fuPrt).
c
c Variables extracted directly from common blocks via an include file
c have the same identifiers used throughout (except for subroutine
c CaExEx; see documentation in CaExEx header).
-------
c
c
c
c User input file map:
c
c Format is list-directed/free-format.
c
c Record Variable Descriptions
c
c
c
c
c
c
c
c
c
c
c
c
c
c
cSE
c
c
c
c
c
c
c
c
c
c
c
c
c
c
cSE
cSE
cSE
c
cSE
cSE
c
c
c
c
CSE
cSE
CSE
CSE
cSE
cSE
c
c
c
c
c
CSE
1 title Title of nan (A80) .
2 nHET Number of toxic pollutant health effect thresholds
whose exex are to be predicted.
hET () Numeric values of health effect thresholds (ug/m3).
In general, reducing these values will increase
run-time, since more chi/q data will pass the TOXX
screening procedure in the Data* subroutines.
nPol=l always, each net present corresponds to
a different health effect of the same pollutant.
3 nPol Number of distinct chemical pollutants present
in emissions of the sources under analysis.
Must be 1.
bkgd Background concentrations for pollutant in
area under study (ug/m3).
Note that the record numbers occupied by hName and
pName data depend on nHET and nPol. The numbers
given below reflect the current maximum allowed
value (MHET = 6).
4-9 hName 0 Health effect threshold names (A20) .
10-15 pName () Pollutant names (A20).
16
17
nSim
nSrc
lAvPer
nBat
MRecPr
lYrly
ME Em
IGP
18
19
nYear
iYear
0
# simulations to be performed for each metyear.
# TOXX emission sources.
Averaging period (hours). Restricted to 1, 2, 3,
4, 6, 8, 12, and 24 hours.
# of emission sources that are batch operations.
# of X-coordinates to print horizontally across
output tables.
Flag whether to calc & print exex for each metyear.
0 = no output by individual metyears, just for all
metyears together
1 » output exex for each metyear
0 » emissions are not mutually exclusive.
1 = mutually exclusive emissions are desired.
0 a print output tables for each source group and
all source groups combined.
1 » only print output tables for all source groups
combined.
# meteorological years (# DMR datafiles).
The calendar years for which DMR data have been
produced, in the read-in order of the DMR files.
ISCOuFn name of ISCST2 output file name.
-------
CSE
c
c
c
c
c
c
cSE
cSE
CSE
cSE
cSE
c
c
c
c
c
c
c
CSE
CSE
cSE
cSE
cSE
CSE
cSE
CSE
CSE
cSE
cSE
c
Records 20-25 are repeated for ea. of nSrc sources.
20 sName 0 Source name (A20)
21 iSrc () Source #, does not have to be ordered with respect
to source #s of other sources.-
iGrp () Source group # of which source is a member. All
sources belonging to the same TOXX source group
must follow one another. TOXX source group numbers
must increase in number as they are added to the
input file.
The values of the following three variables are the
same for all members of a source group. Hence some
information is repeated when there is more than one
source within any group.
probOn () Probability of source turning on, when off.
Batch () Switch indicating if this source is a batch
process. 1 = yes; 0 = no.
IMAX () Number of emission distributions for this source.
Maximum of 10.
22 dist (,) Probability associated emission distribution
will be selected for a non-batch process.
23 Baton (,) Time (hours) associated emission distribution
is valid for.
24 BatRate(,,,) Emission Rate for source for AM hours
25 BatRate(,,,) Emission Rate for source for PM hoursce group
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
Prescreened Dispersion Model Results Datafile Map:
These files do not contain the output of the dispersion model
used to simulate atmospheric effects. Rather, they contain.an
altered version of the DMR output, namely the output of the
ExEx preprocessor. The preprocessor performs a coarse prescreening
of the DMR data, in which all chi/q values unlikely to produce an
exceedance are dropped.
The format of this data depends on the data I/O statements/routines
you choose to use: standard FORTRAN formatted or binary I/O. TOXX
expects binary I/O, but commented-out code exists to enable a -
formatted read if desired. The ORGANIZATION of data should be
identical to that shown below in either case, however.
Record Variable Description
1 dTitle Title of DMR data file.
2 iYr The calendar year to which the modeled data
corresponds.
nS # sources, must be >= nSrc.
The value of each of the following variables should
be the same in all DMR files.
-------
c
c
c
c
c
c
c
c
c
c
c 3
c
c
c
c
c
c
c
c
c
c
c
c
c
C 4
c
c
c
c
c
c
c
c
c
c
c
c
C 5
c
c
c
f. ------
nR # receptors.
nP # averaging periods in metyear iYr; must be the
number of iAvPer's in iYr.
iTab Output table type (options are similar to those
of ITab) .
nX # receptors per ring or row in physical receptor
array
iDum () NIDDM integers not used by TOXX. Change NIDDM in
insert file if they are used in future.
pCutOf Chi/Q cut value used in prescreening of data for
metyear iYr.
rDum () NRDOM reals not used by TOXX. Change NEDOM in
insert file if they are used in the future.
Records 4-5 are repeated as many times as needed.
Each record pair must contain NPAIR data (value set
in the Data* subroutines) . The last 2 records must
be padded with Q's, so that number of data on each
line of the file is the same. TOXX expects data
for a given period and receptor to be contiguous in
the DMR files, although it may be in any order with
respect to source #.
id () Identification data. Each datum contains period,
source, and receptor information. Given a result
for averaging period # pppp, for emissions from
TOXX source # ss, taken at receptor # rrr, the
value of the integer id datum would be ppppssrrr.
Hence the respective maximum "coding" #s of periods,
sources, and receptors are 9999, 99, and 999
(Constant parameters MCPER, MCSRC, and MCREC are
defined equal to these numbers, and serve as "hard"
upper limits to "soft" constants MPER, MSRC, and
MREC, respectively. To adjust MCPER, MCSRC, and
MCREC would require some nontrivial receding . )
cone () Chi/Q normalized concentrations ( units of
( (g/m3) / (g/s) )', or (s/m3) ) corresponding
to the ID codes in the previous record.
c
c Program parameters:
c ..:•_'".
c These are constants in source code which set various limits.
c They can be changed to suit needs, as memory permits.
c Their values are set in the source code insert file TOXX.INS.
c
c IDMXBF Ideal max # DMR data that are allowed in memory.
c
c MCPER, Upper limits on MPER, MSRC, and MREC which exist because
c MCREC, of the coding of the id part of DMR data pairs^
c MCSRC . .
c
c MGRP Max source group #; since source group numbers are
c assumed to be consecutive positive integers, places
c an effective limit on the # of source groups.
c
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c-
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
MHET Max # of health effect thresholds for which exex may be
calculated, and maximum # distinct chemical pollutants
that can be processed by TOXX.
MPER Max possible # of averaging periods in a year,
equivalent to the number of averaging periods of the
shortest duration (currently 1 hour) in a. leap year.
Used to dimension the arrays of random numbers which
determine whether a source group's members are on or
off for each averaging period in a given metyear.
MREC Max # receptors.
MSIM Max # samplings in a Monte Carlo simulation for one
metyear (put another way, the max # of simyears per
metyear); limited to prevent runaways.
MSRC Max # TOXX sources.
MYEAR Max # metyears (and files) of DMR data.
NIDDM # of integral dummy parameters currently available (i.e.,
currently unused) in headers of DMR files.
NRDUM # of real dummy parameters currently available (i.e.,
currently unused) in headers of OMR files.
Memory Paging Scheme:
TOXX uses a virtual memory system coded by Paulus Irpan for ExExS
Version 2.0 to remove any core limit on the number of DMR data that
may be handled.
Data are read from the preprocessed DMR datafiles on disk into
two arrays, iDRA and cOQRA, NPAIR data at
a time. Chi/q values are accumulated for each source group and
every period and receptor. When all normalized concentration data
for a given period and receptor has been accumulated, the total
concentration is compared to the value of the variable cutoff. If
the concentration arising from at least one source group is greater
than the value of cutoff, the concentrations for each source group
are stored in the buffers, iPers, iRecs, and cones. (This procedure
is called "screening" the data, and is independent of the "pre-
screening" of data performed by the precessor, which is far less
analytical.)
When the iPers, iRecs, and cones buffers become "full" (a condition
defined conservatively by Irpan and not by the machine), the arrays
are emptied to a temporary file on disk. New raw data are read into
the buffer arrays, then new screened data is put into iPers, iRecs,
and cones, and the cycle proceeds as before. Indexes to the data
stored on disk and in memory are maintained so that all subroutines
can access the DMR data as needed.
Concise descriptions of the variables used in memory paging appear
in the insert file, TOXX.INS. Verbose descriptions of certain
variables appear below:
-------
c
C IDMXBF:
C
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c nBuf :
c
c
c nPage :
c
c
c
c
c
c
c
c
c
c
c iSavYr:
c
c
c
c
c ioPage:
c
c
Ideal maximum number of DMR data pairs that may be bufferd.
IDMXBF is limited (by programmer choice) to the max
I/O record size in the version of FORTRAN being used,
divided by the size of one DMR data pair (max I/O record
size (bytes, or whatever unit) / (size of one element
iPers () + iRecs () + cones 0, in same units), quantity minus
1. In Prime FORTRAN 77, the maximum I/O record size is
32 kbytes (1kbyte* 1024 bytes). In order to
conserve memory, iPers and iRecs have been made arrays
of 2-byte integers. The amount of memory occupied by
a single DMR data pair is then 2x 2 bytes (for one element
each of iPers and iRecs) + 4 bytes (for one element of
cones) s 8 bytes. Hence IDMXBF = (32768 bytes/ (8 bytes/
data pair)) - 1 = 4095. This is only an ideal max # in
that DMR data are saved in groups of nSG data pairs, one
for each source group. If the number of source groups
divides IDMXBF with no remainder, then IDMXBF is the
actual max # of DMR data pairs that can be stored. In
general, however, variable acMxBf is the actual max
#.
Number of DMR data pairs which successfully passed screening
and are currently buffered in memory.
Total number of data pages currently in use. Within the
Data* subroutine, typically includes only full pages that have
been saved to disk. After the last metyear has been pro-
cessed, however, nPage is updated to include the possibly
partially full final page, which is held in memory AND
saved to disk if there are too many data overall to fit in
the buffer arrays. In short, nPage = 1 if all data can fit
in memory, in which case no data is paged to disk; else nPage
= number of pages saved to tempfile on disk (of which the last
page also sits in memory).
Numerical indexes to ultimate DMR data of each metyear to
have passed the screening. The index is merely by save
sequence, and carries no information itself about whether
a metyear's data is on disk or in memory.
Index of the data page currently held in memory.
c
c Compiler- or computer-dependent Codes Sections:
C ••-»-»——— — *•-•—•"-•-•—-'——••-•*»'•-•«••••»-•*•-»—-'-•-'"•*»-»-»•-*'-»-»-'••—•»-»-«
c
c Certain items of the program may require modification when run on
c different machines or using different compilers. These items are
c listed below. Some, but not all, are delimited in the code by 'c!'
c comment lines.
c
c - I/O fileunits (parameterized in the main program).
c - The directory in which the include file is stored.
c - Date/time routines.
c - The random # generator routines RandNo and TauslS, particularly
c the binary and exclusive or function calls.
c - Lines needed for formatted DMR I/O; as program stands now,
c all this I/O is binary.
-------
c - Other code delimited by the comment symbol 'ci'.
c
c end main documentation
c
C= = = = program TOXX Ma3M==m«= = M»«s ===«======s== = ====s«====s ==== =
C
c Estimate the probability of expected exceedances of multiple hets
c from intermittent release of multiple toxics, using Monte Carlo
c simulation.
c
program TOXX
c
c Declarations, etc.
c
c Insert file.
c!
include 'toxx.ins'
ci
c Description of local variables.
c
c integer
c parameter (
c . FUHEM=10, ! HEM input fileunit
c . FUINP=11, ! user input fileunit
c . FUPRT=12, ! print fileunit (output file)
c . FDTMP=13, ! temp fileunit on disk containing saved
c . ! DMR data
c . FUDAT=14 ! 1st of DMR data fileunits
c ! (nYear integers beginning at FUDAT and
c ! ending at FDDAT+nYear-1 must not be
c ! used as fileunits; they are already
c ! used by the program as the fileunits
c ! for DMR files.)
c .)
c character
c . fn*64 ! variable for user input of user
c ! input, DMR, and print filenames
c ! (pathnames)
c integer
c . iFu, ! index to current DMR data file
c . hour, ! hour at run-time
c . min, ! minute
c . sec, ! second
c . seclOO, ! hundredth second (!)
c . year, ! year at run-time
c . month, ! month
c . day J day
c
integer
iFu, hour, min, sec, seclOO, year, month, day,
FOHEM,FUINP,FUPRT,FDTMP,FUDAT
parameter
(FDHEM=10,FUINP»11,FOPRT-12,FUTMP=i3,FODAT=14)
character
-------
fn*64
c
c Initial input of parameters.
c
c Print out a small program banner.
c
print ' (A)', '
print ' (A) ', ' | TOXX ISCST2 TOXXFILE Compatible Version)
print '(A)', '
c
c Get filenames from user, and open files for user input params,
c DMR data, and output.
c
print '(/A)', ' Enter TOXX input parameter filename. »'
read ' (A) ', fn
open (FDINP, file=fn, status='OLD'}
print '(/A)', ' Enter # of meteorological years. »'
read *, nYear
print ' (/A) ',
' Enter chi/q TOXXFILE name (1 per metyear, 1 per line). »'
do 100 iFu = FDDAT, FUDAT+nYear-1
read ' (A) ', fn
open (iFu, file=fn, form='UNFORMATTED', status='OLD')
100 continue
print '(/A)', ' Enter TOXX text output filespec. »'
read ' (A) ', fn
open (FUPRT, file=fn)
print '(/A)', ' Enter TOXX HEM output filespec. »'
read ' (A) ', fn
open (FDHEM, file=fn)
cSE
c
c--
c
c Output header.
c
c Write banner messages and date-time of run.
c Change or comment out the date-time section for other compilers.
c
print *
write (FUPRT,'(1H1//7 (3A))')
• J/VJ-Ai A /
-------
c!
c! Output run date and time, using Microsoft date and time
c! subroutines.
c!
call getDat (year, month, day)
call getTim (hour, min, sec, seclOO)
write (FOPRT, 1000)
'Date and time of run: ', month, day, year, hour, min
1000 format (/43X, A22, 12, '-', 12, '-', 14, ' ', 12, ':', 12)
c
c
c
c Initial error check.
c
c Perform error check on the maximum allowed values for # periods,
c # sources, and # receptors. These are set in TOXX.INS, but are
c constrained by the technique used to code id information for chi/q
c values (see map of DMR datafiles above).
c
if (MPER .gt. MCPER) then
call Error (fuPrt, 1, MPER, MCPER, 0., 0.)
elseif (MSRC .gt. MCSRC) then
call Error (fuPrt, 2, MSRC, MCSRC, 0., 0.)
elseif (MREC .gt. MCREC) then
call Error (fuPrt, 3, MREC, MCREC, 0., 0.)
endif
c
c Code for exex run.
c
c Input user parameters.
c
call Getlnp (FDINP, FUPRT)
c
c Input DMR datafile headers and do some simple checks.
c
call ChkDat (FCDAT, FUPRT, nP)
c
c Prepare some other params needed for the run.
c
call SetUp (FUPRT, FUTMP)
c
c Read and screen DMR datafiles.
c
call GetDta (FUDAT, FUPRT, FUTMP)
c
c Computation and output of exex.
c
call DoExEx (FUPRT, FUTMP, FUHEM, nP)
c
c End output file and program.
c
CSE
call getDat (year, month, day)
call getTim (hour, min, sec, seclOO)
write (FUPRT, 1001)
-------
'Date and time of end: ', month, day, year, hour, min
1001 format (/43X, A22, 12, '-', 12, '-', 14, ' ', 12, ':', 12.2)
cSE
endfile (FUPRT)
stop 'Ok. TOXX run finished normally.'
end
c
c end program TOXX
c
c==== subroutine Getlnp ========================================:
c
c Get user input params, set defaults, and prepare other params.
c Echo input info to printfile.
c
c Subroutine Getlnp is called by program TOXX.
c
c [[[
c
subroutine Getlnp (fulnp, fuPrt)
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . fulnp, fuPrt ! I/O fileunits
c
integer
fulnp, fuPrt
c
c Insert file .
c!
include ' toxx . ins '
c!
c Description of local variables.
c
c integer
c . i , j , ! handy indexes
c
integer
i, j
cSE character*20
cSE . tday ! contains line header for output file.
character*20
tday
c
c Getlnp output header.
c
print '(IX,A)', '> Getlnp'
-------
c
c Handling of general run params.
c
c Get general params from user input file.
c
read (fulnp,'(A80)') title
read (fulnp,*) nHET, (hET (i), i-1, nHET)
cSE nPol can only equal 1 in this version.
read (fulnp,*) nPol, bkgd
nPol=l ! hardwire # poll. to 1 incase user did not specify l.
do 30 i = 1, nHET
30 read (fulnp,' (A20)') hName (i)
do 40 i = 1, nPol
40 read (fulnp,' (A20)') pName (i)
cSE
read (fulnp,*) nSim, nSrc, iAvPer, nBat
cSE No longer read in switch for lAdd or ITab in this version.
cSE Added in the flag for source group combined output iGP
read (fulnp,*) mRecPR, lYrly, MEEm, iGP
lAdd=0 ! hardwire lAdd to 0. New output tables don't need this.
lTab=0 ! hardwire ITab to 0.
cSE
read (fulnp,*) nYear, (iYear(i), i=l, nYear)
cSE read in the name of the ISCST2 output file which contains receptor
cSE location data.
read (fulnp,'(A30)') ISCOuFn
cSE Open the ISCST2 output file.
open (l,file=ISCOuFn,form='formatted',status='old')
c
c Echo these user inputs.
c
cSE
write (fuPrt,'(4X, A46, A80/ 4X, A46, I4/ 4X, A46, 2X, I2/
4X, A46, 2X, I2/ 4X, A46, 2X, I2/ 4X, A46, 2X, I2/
4X, A46, 2X, I2/ 4X, A46, 2X, I2/ 4X, A46, 2X, A30/
4X, A46, 6(14, 3X))')
'Title of run
'# simulations per meteorological year
'# emission sources
'# receptors printed per row
'Averaging period (hours)
'Number of source group batch operations
'Output only source groups combined? Yes =
'Emissions mutually exclusive? Yes = 1
'Representative ISCST2 output file name
'Metyears of requested dispersion results
(iYear(i),,i=l, nYear)
cSE
c
c Flag user options selected.
c
c
if (lYrly .eq. 0) then
title,
nSim,
nSrc,
mRecPR,
iAvPer,
nBat,
iGP,
MEEm,
ISCOuFn,
-------
write (fuPrt, ' (SOX, A, A)')
'Output only expected exceedances averaged over all mete' ,
' orological years . '
elseif (lYrly .eq. 1) then
write (fuPrt,' (SOX, A, A)')
'Output expected exceedances yearly and averaged over al',
' 1 meteorological years . '
endif
c
cSE Modified to represent only 1 pollutant.
if (nHET .eq. 1) then
write (fuPrt, '(SOX, A)')
' Find expected exceedances of one threshold . '
else
write (fuPrt, '(SOX, A)')
' Find expected exceedances of multiple thresholds . '
endif
c
c Print title for pollutant and threshold information.
c
write (fuPrt, ' (//4X, A)')
'Pollutant and Threshold Information:'
write (fuPrt, ' (/ 4X, A, A, 4X, A, A)'}
' ..................... Pollutant Data ...................... ',
Health Effect Threshold Data
write (fuPrt, ' (4X, All, 5X, A15, 10X, A19, 4X, All, 5X, A19,
7X, A18/)')
'Poll. Id #:',
' Pollutant Name : ' ,
'Background (ug/m3):',
'Thrs. Id #:',
'Health Effect Name:',
'Threshold (ug/m3):'
c
c Print pollutant and threshold information, side by side.
c Allow for the case of one pollutant with multiple thresholds .
c
do 50 i = 1, nHET
if ( (i .eq. 1) .or. (nHET .eq. nPol) ) then
write (fuPrt, ' (4X, II, 15X, A20, 11X, F7.2, 10X, II,
15X, A20, 11X, F7.2) ')
i, pName (i) , bkgd, i, hName (i) , hET (i)
else
write (fuPrt, ' (68X, II, 15X, A20, 11X, F7.2)')
i, hName (i) , hET (i)
endif
50 continue
c
c Error check the general inputs that have been read so far.
c
if (nHET .gt. MHET) call Error (fuPrt, 4, nHET, MHET, 0., 0.)
if (nPol .gt. MHET) call Error (fuPrt, 5, nPol, MHET, 0., 0.)
if ( (nPol .gt. 1) .and. (nHET .ne. nPol) )
call Error (fuPrt, 6, nPol, nHET, 0., 0.)
c
if (nSim .gt. MSIM) call Error (fuPrt, 7, nSim, MSIM, 0., 0.)
if (nSrc .gt. MSRC) call Error (fuPrt, 8, nSrc, MSRC, 0., 0.)
if (iAvPer.gt.24)
-------
call Error (fuPrt, 9, iAvPer, 0, 0., 0.)
c
if UYrly.ne.O .and. lYrly.ne.l)
call Error (fuPrt, 13, lYrly, 0, 0., 0.)
if (nYear .gt. MYEAR)
call Error (fuPrt, 14, nYear, MYEAR, 0., 0.)
c
c - - -
c
c Handling of emission sources information.
c
write (fuPrt,'(//4X, A)') 'Emission Sources Information:'
c
c Read the emission sources information.
c
cSE
do 100 i = 1, nSrc
read (fulnp,'(A) ') sName(i)
read (fulnp,*) iSrc(i), iGrp(i), probOn(i), Batch(iGrp(i)),
iMax(iGrpU) )
timeOn(i) = 0
K=iGrp(i)
do 16 L=l,nPol
rate(K,L)=0.
16 continue
cSE
cSE Read in the probabilities that each emission distribution
cSE will be selected for non-batch processes.
read(fulnp,*) (dist(K,EmDist), EmDist=l,iMax(K))
cSE Read in the amount of time each emission category will be valid.
read{fulnp,*) (BatOn(K,EmDist), EmDist=l,iMax(K))
cSE Determine the amount of time a batch process will be on
cSE once it is turned on for each source group.
do 24 EmOist = l,iMax(K)
24 timeOn(K) = timeOn(K) + BatOn(K,EmDist)
cSE When sun = 1, AM emission rates apply; when sun =2, PM
cSE emission rates apply.
cSE AM hours: when it is usually light outside.
cSE
do 22 sun = 1, 2 ! loop on AM and PM
do 23 iPol = 1, nPol ! loop on the 1 pollutant this ver.
cSE Read in the emission rates.
read(fulnp,*) (BatRate(K,iPol,EmDist,sun),
EmDist=l,iMax(K))
do 18 EmDistal,iMax(K) ! loop on emission distributions.
cSE Determine max. emission rate for this source.
if(BatRate(K,iPol,EmDist,sun) .gt.
rate(K,iPol)) then
rate(K,iPol)=BatRate(K,iPol,EmDist,sun)
-------
end if
18 continue
23 continue
22 continue
100 continue
cSE
c
c Echo the sources information.
c
cSE
write (fuPrt, ' (T42, A, T56, A, T90, A, T105, A, T115, A)')
'Release', ' Max Release ', 'MaxEmiss', 'Batch' , 'Number'
write (fuPrt, ' (T5,A,T15,A,T24,A,T42,A,T56,A,T72,A,T90,A,T105,
A,T115,A)')
' Sourcett ' , ' Group* ' , ' Source Name ' ,
'Probability', 'Duration (hr) ' ,
'Pollutant Name', 'Rate (g/s) ' , 'Yes =1', 'Em Cats'
do 10, i = 1, nSrc
write (fuPrt,'(T7, 12, T17, 12, T24, A20,T45, F10.8, T59,
14,
T72, A20, T90, F8.3, T105, 12, T118, 12)')
iSrc (i) , iGrp (i) , sName (i) , probOn (i) , timeOn (i) ,
pName (1), rate (i,l), Batch (iGrp(i)), iMax (iGrp(i))
write(fuPrt, ' (T5,A12,T25,10f8.5) ') 'DistProb: >'
EmDist) , EmDist=l, iMax (iGrp (i) ))
write (f uPrt, ' (T5,A19,T25, 1018) ') 'Dist Valid (hrs) : >' ,
(BatOn (i, EmDist) ,EmDist=l, iMax (iGrp (i) ) )
do 15 j=l,nPol
do 15 is=l,2
if (is .eg. 1} then
tday='AM Emiss Rate:'
else
tday='PM Emiss Rate:'
end if
write(fuPrt, ' (T5,A15,T25, 10F8 .3) ' ) tday, (BatRate (i,
j, k, is), k=l, iMax (iGrp (i) ) )
15 continue
10 continue
cSE
write (fuPrt, '(A4)') '
write (fuPrt, ' (A4) ') '
c
return
end
c end subroutine Getlnp
c==== subroutine ChkDat =============i====================z==:
c
c Get and check headers of the DMR datafiles. Echo headers.
c
c Subroutine ChkDat is called by program TOXX.
c
c--
c
-------
subroutine ChkDat (fuDat, fuPrt, nP)
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . fuDat, fuPrt ! DMR data & print fileunits
c
integer
fuDat, fuPrt
c
c Insert file.
c!
include 'toxx.ins'
c!
c Description of local variables.
c
c character
c . dTitle*80 ! title of datafile
c integer
c . iYr, ! metyear modeled
c . nRO, ! # receptors from previous DMR file
c . nPer, ! # of periods in current metyear
c . nS, nR, nP, l # sources,receptors,periods
c . iTab, ! output table type
c . nX, ! # receptors per ring or row
c . iDum (NIDDM), ! NIDDM integers output by preprocessor,
c . ! for future use
c . iFl, ! index to current DMR data file
c . iFu, ! current DMR data fileunit
c . i ! handy index
c real
c . pCutOf, ! chi/q cut value used in data prescreen-
c ! ing in preprocessor, for current
c ! metyear's data
c . rDum (NRDUM) ! NRDUM reals output by preprocessor, for
c ! future use
c
character
dTitle*80
integer
iYr, nRO, nPer, nS, nR, nP, iTab, nX, iFl, iFu, NYTOX
real
pCutOf
c
c Functions.
c
c integer
c . leap ! function to determine if iYr is leap
c
integer
leap
c
c ChkDat output header.
-------
print '(IX,A)', '» ChkDat'
write (fuPrt,'(1H1///3A)')
' -- Dispersion Model',
' Results Data Information - ',
write (fuPrt,'(//4X, A)') 'Datafile Headers:
c
c Initialization.
c
nRO = -1
pMxCut = -1.
c
c Loop for each metyear (each dispersion model results file).
c
do 100 iFl = 1, nYear
c
c Fileunit for this datafile is in a unit incremental sequence
c starting from the 1st fileunit fuDat.
c
iPu = fuDat + iFl - 1
c
c Read the header data in binary form.
crti Revisions for ISCST2 of 9/10/92 are noted with crti in cols 1-4:
crti Read datafile created by ISCST2 using the TOXXFILE option.
crti The header information remains almost the same except:
crti NIDDM, number of dummy integer variables, has been changed from
crti 4 in old SISC.FOR to 3
crti the integer variable NYTOX in ISCST2 has been included. This
crti is the number of y-coordinates (or directions) in the receptor grid
crti (or radials )
crti Per ISCST2 documentation, iTab represents:
crti iTab = 1 => one polar grid
crti iTab = 2 => one Cartesian grid
crti iTab = 0 => more than one grid and/or discrete and/or boundary
receptors
crti
crti Dummy integer and real variable arrays idum and rdum apparently serve
crti no purpose and therefore are not read.
crti
crti The rest of the TOXXFILE structure is consistent with the binary file
crti created by (old) SISC.
crti
read (iFu) dTitle
crti read (iFu) iYr, nS, nR, nP, iTab, nX, (iDum (i) , i=l, NIDUM)
C ITAB = 1 => POLAR GRID
C 2 «> CARTESIAN GRID
C 0 => DISCRETE OR MIXED GRIDS
C
read (iFu) iYr, nS, nR, nP, iTab, nXTOX, NYTOX
crti nxtox » no. of x-coordinates (or distances i.e. polar rings)
crti nytox * no. of y-coordinates (or directions i.e. polar radials)
C NX * # RECEPTORS PER RING OR ROW (LINE 401, ABOVE)
crti read (iFu) pCutOf, (rDum (i), i=l, NRDUM)
read (iFu) pCutOf
nX « NXTOX
-------
c
c
c
c
C!
C!
C!
C
c
c
c
crti
crti
crti
crti
crti
crti
The following fragment should be uncommented, and the preceding
3 read statements commented, for formatted I/O.
read (iPu,'(A)') dTitle
read (iFu,*) iYr, nS, nR, nP, iTab, nX, (iDum(i), i=l, NIDDM)
read (iFu,*) pCutOf, (rDum (i),i=«l, NRDUM)
Echo this header info.
if(itab .eq. 1) then
nx = nytox
nytox = nxtox
end if
crti
3X,
write (fuPrt,'(/4X, A46, A80/ 6(4X, A46, I4/), 4X, A46,
1PE10.4)')
'Title of dispersion model result data
'Year modeled
'# sources
'# receptors
'# averaging periods modeled in ISCST2
'Exex output by recptr? (0=no,l=pol,2=rect)
'# radials (polar) or rows (rect)
'Cut-off value used in ISCST2 (g/m3)
, dTitle,
', nS,
', nR,
', nP,
', iTab,
' , NYTOX,
' , pCutOf
C
c
c
c
c
c
CSE
cSE
cSE
cSE
Error check this header info.
if (nS .It. nSrc)
call Error (fuPrt,15,iYr, nS, float(nSrc), 0.)
if (nR .gt. MREC)
call Error (fuPrt,16,iYr, nR, float(MREC), 0.)
if (nR .ne. nRO) then
if (nRO .eq. -1) then
nRO * nR
else
call Error (fuPrt, 17, iYr, nR, float (nRO), 0.)
endif
endif
Setting defrt to the cutoff value used in the preprocessor
defrt a pCutOf
Replaced the 24/iAvPer with 24 because iAvPer does
not have to be l anymore
nPer = 24/iAvPer * (365 + leap{iYr))
nPer = 24 * (365 + leap(iYr))
if (nPer .gt. MPER)
call Error {fuPrt, 18, iYr, nPer, float (MPER), 0.)
if (iYr .ne. iYear(iFl))
call Error (fuPrt, 20, iYr, iFl, float (iYear(iFl)), 0.)
-------
c
c Find the max of prescreening chi/q values used by
c preprocessor, over all DMR datafiles.
c
if (pMxCut .It. pCutOf) pMxCut - pCutOf
c
100 continue
c
c End loop over metyears.
c
c
c Assign # receptors information.
c
nRec a nR
nXRec = nX
c
c If user requests receptors table and wants to use the table style
c from the datafiles, set the table flag.
c
crti itab, from ISCST2, = 0 => discrete or mixed grids.
if {iTab .eq. 0) ITab = 9
c
return
end
c
c end subroutine ChkDat
c
c==== function leap ====================================================
c
c Determine if a year is leap or not. Returns 1 if the year is leap,
c 0 otherwise.
c
c (Written by Paulus Irpan, 860417.)
c
c Function leap is called by subroutine ChkDat.
c
integer function leap (iYear)
c
c -
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . iYear ! the International/Gregorian year (yyyy)
c
integer
iYear
c
c
c
c Test for leap.
c
c Input parameter iYear must be in international year form,
-------
if ( (mod(iYear,4).eq.O .and. mod(iYear,lOO).ne.O) .or.
(mod(iYear,400).eq.O) ) then
leap - 1
else
leap a 0
endif
c
return
end
c
c end function leap
c
c==== subroutine Setup ===«=====«=====================================
c
c Prepare input and other parameters for later use. Perform extensive
c error checking of input to TOXX program.
c
c Subroutine Setup is called by program TOXX.
c
c -
c
subroutine SetOp (fuPrt, fuTmp)
c
c - - - -
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . fuPrt, ! print fileunit
c . fuTmp ! temp fileunit on disk for saved DMR data
c
integer
fuPrt, fuTmp
c
c Insert file.
c!
include 'toxx.ins'
c!
c Description of local variables.
c
c character
c . tFile (MSRC)*98 ! temporary internal array for sorting
c integer
c . i, j, k, ! handy integer indexes
c . index (MSRC), ! index to sorted array of source group #s
c . iGO, ! previous source group #
c . recLen ! record length used for DMR data I/O
c real
c . rateSm, ! sum of rates for one pollutant over
c ! all source groups
c . minCut, ! running minimum value of array oneCut
c . oneCut (MHET) ! array of cutoff values for each
c ! individual het
character
tFile (MSRC)*98
-------
integer
i, j, k, index (MSRC), iGO, recLen
real
rateSm, minCut, oneCut (MHET)
c
c Functions.
c
c real
c . addCut ! function to calculate cutoff for
c ! additive model
c
c
c - -
c
c Initial processing and sorting.
c
print '(IX,A)', '»> SetUp'
c
c Output a header to the print fileunit.
c
write (fuPrt,'(1H1///3A)')
' Messages from Subr',
'outine Setup (may be blank) ',
c
c
c Sort sources info by source group #.
c
call SortTI (nSrc, iGrp, index)
c
c Array index now contains a tag list of the source information
c sorted by group #. Write out the source information in
c sorted order to array tFile and read it back in.
c
do 100 i = 1, nSrc
j = index(i)
write (tFile(i),'(A20,2I2,1PE20.10E1,I4,6(1PE10.5E1))')
sName(j), iSrc(j), iGrp(j), probOn(j), timeOn(j),
(rate (j,k), k=l,nPol)
100 continue
do 110 i » l, nSrc
read (tFile(i),'(A20,2I2,1PE20.10E1,I4,6(1PE10.5E1))')
sName(i), iSrc(i), iGrp(i), probOn(i), timeOn(i),
(rate (j,k), k=l,nPol)
110 continue
c
c -
c
c Indexing of source information by source group.
c
c Find and store indexes to the start of each source groups'
c info in the sorted source arrays. Store indexes in array
c iSG. The kth element of iSG contains the index, in the
c source arrays, of the start of the data for source group
c k. (If some source group with source group number 1
c does not have any source data, iSG (1) = 0. This will only
c happen for unused source group #s, i.e., those greater than
c the maximum source group number used in the user input file
-------
c and less than or equal to MGRP.)
c
c Check that the source group #s rise in increments of 1.
c
do 120 i » 1, MSRC
c All indexes are set to zero.
iSG(i) =0
120 continue
c
c Set the index of the first source group to 1.
iSG (iGrp (1)) =1
c Assign iGO as the previous source group # (which is the current
c one at this position in the program.
iGO = iGrp (1)
do 130 i = 2, nSrc
c If the current source group id # <> to the previous source group
c #, then determine if the current source group id# <> current
c source group #. If it <> then Call the Error subroutine.
if ( iGrp (i) .ne. iGO ) then
if ( iGrp (i) .ne. (iGO+1) ) then
call Error (fuPrt, 23, iGrp (i), iSrc (i),
float (iGO), 0.)
else
iSG ( iGrp (i) ) = i
iGO = iGrp (i)
endif
endif
130 continue
c
c Find the highest source group # used and error check.
c
nSG = iGrp (nSrc)
if (nSG .gt. MGRP) call Error (fuPrt, 24, nSG, MGRP, 0., 0.)
c
c - -
c
c Toxics release probability, duration, and emission rates.
c . -
c Check turn-on probabilities, toxics release durations, and actual
c emission rates for positive definiteness; warning if any value is
c zero, error if any value is negative.
c
c Also check that probabilities are less than or equal to 1.0 (error
c if not), and that durations are integral multiples of iAvPer
c (warning if not).
c -•••-.
c —,
c
c Test of first elements of source arrays.
c
if (probOn (1) .gt. 1.0)
call Error (fuPrt, 26, iSrc (1), iGrp (1), probOn (1), 0.)
if (probOn (1) .le. 0.) then
if (probOn (1) .It. 0) then
call Error (fuPrt, 27, iSrc (1), iGrp (1), probOn (1),
0.)
else
call Warng (fuPrt, 1, iSrc (1), iGrp (l), probOn (1),
0.)
-------
endif
endif
c
if (timeOn (1) .le. 0) then
if (timeOn (1) .It. 0) then
call Error (fuPrt, 28, iSrc (1), iGrp (1),
.. float (timeOn (1)), 0.)
else
call Warng (fuPrt, 2, iSrc (1) , iGrp (1),
float (timeOn (1)), 0.)
endif
endif
c
do 20 j =1, nPol
if (rate (l,j) .le. 0.) then
if (rate (l,j) .It. 0) then
call Error (fuPrt, 29, iSrc (1), iGrp (1), float
(j),
rate (l,j))
else
call Warng (fuPrt, 3, iSrc (1), iGrp (1), float (j),
rate (l,j))
endif
endif
20 continue
c
c
c -- -
c
c Test remaining elements of source arrays.
c
do 150 i = 2, nSrc
if (iGrp (i) .ne. iGrp (i-1)) then
c
c If current source group does not equal previous, run the
c slew of tests used on the first elements above.
c
if (probOn (i) .gt. 1.0)
call Error (fuPrt, 26, iSrc (i), iGrp (i), probOn (i),
0.)
if (probOn (i) .le. 0.) then
if (probOn (i) .It. 0) then
call Error (fuPrt, 27, iSrc (i), iGrp (i),
probOn (i), 0.)
else
" .- . call Warng (fuPrt, 1, iSrc (i) , iGrp (i) ,
probOn(i), 0.)
endif
endif
c
if (timeOn (i) .le. 0) then
if (timeOn (i) .It. 0) then
call Error (fuPrt, 28, iSrc (i), iGrp (i),
.^float (timeOn (i)), 0.)
else
call Warng (fuPrt, 2, iSrc (i), iGrp (i),
float (timeOn (i)), 0.)
endif
endif
-------
do 30 j * 1, nPol
if (rate (i,j) .le. 0.) then
if (rate (i,j) .It. 0) then
call Error (fuPrt, 29, iSrc (i) ,
iGrp (i),
float (j), rate(i,j))
else
call Warng (fuPrt, 3, iSrc (i), iGrp
(i),
float (j), rate(i,j))
endif
endif
30 continue
c
else
c
c If current group number is the same as previous, check
c current toxics release probabilities, durations, and
c emission rates for consistency with previous source's.
c
if ( probOn (i) .ne. probOn (i-1) )
call Error (fuPrt, 30, iSrc (i), iGrp (i),
probOn (i), float (iSrc (i-1)) )
if ( timeOn (i) .ne. timeOn (i-1) )
call Error (fuPrt, 31, iSrc (i), iGrp (i),
float (timeOn (i)), float (iSrc (i-1)) )
do 60 j * 1, nPol
if ( rate (i, j) .ne. rate (i-1, j) )
call Error (fuPrt, 32, iSrc (i), j,
rate (i,j), float (iSrc (i-D) )
60 continue
endif
150 continue
c
c -
c
c End loop over sources arrays. • ' .
c
c - -
c
c Effective health effect thresholds (i.e., hets corrected for bkgd).
c
c Compute effective health effect threshold concentrations and
c convert units to g/m3 for compatibility with the chi/q (s/m3).and
c rate (g/s) data. ..
c
c If there is only one pollutant to be analyzed (in which case there
c may be up to MHET hets but only one bkgd), allow for calculation
c of effective thresholds using the sole background concentration.
c
do 10, j = 1, nHET
if (nPol .eq. 1) then —
k - 1 '.--•-
else
le « j
endif
effHET (j) - ( hET (j) - bkgd ) * l.OE-6
if ( effHET (j) .le. 0 ) then
-------
c Check that each element of effHET () is positive.
c Nonpositive values would cause ALL DMR data to pass
c screening in Data*.
c
if ( effHET (j) .It. 0 ) then
call Error (fuPrt, 33, j, 0, hET (j), bkgd)
else
call Warng (fuPrt, 5, j, 0, hET (j), bkgd)
endif
endif
10 continue
c
c .
c
c Logical number of hets and TOXX screening cutoffs.
c
c
c No additive model is used, so exceedances of each threshold
c are individually noted. The logical number of hets is
c simply the total number.
c
logiNH = nHET
c
c Compute variable oneCut (), for each het (in both single and
c multipollutant, nonadditive (LAdd = 0) cases). Find the
c minimum of oneCut over all thresholds, cutoff.
c
minCut = 6.0e+23
do 70 j » 1, logiNH
if (nPol .eg. 1) then
k » 1
else
k = j
endif
rateSm =0.0
do 80 i = 1, nSG
80 rateSm = rateSm + rate (iSG(i), k).
oneCut (j)•= effHET (k) / rateSm
if { oneCut (j) .It. minCut ) minCut = oneCut (j)
70 continue
cutoff = minCut
c
c Check if cutoff is lower than the largest chi/q value used in
c prescreening the data (by the preprocessor). '
if (cutoff .It. pMxCut)
call Error (fuPrt, 34, 0, 0, cutoff, pMxCut)
c ..-'•-
c Miscellaneous calculations and checks.
c
c - - -
c
c Conversion of units of array timeOn from hours to iAvPer.
c
-------
c The exex calculator CaExEx works more efficiently in units of the
c averaging period. The conversion is performed here to get it out
c of the way once and for all. If a timeOn value is less than
c one averaging period, set the corresponding tOOAvP value to unity.
c
do 160 i • 1, nSrc
tOUAvP (i) > timeOn (i) / iAvPer
if (tOUAvP (i) .eq. 0) tOOAvP (i) = 1
160 continue
c
c Actual maximum data bufferable check.
c
c Calc acMxBf, the ceiling integral # DMR data pairs that can be
c stored in memory in the DMR data buffer arrays iPers, iRecs, and
c cones. Calculate the size of the I/O record needed to write
c acMxBf data pairs to disk at one time; store in recLen. Prepare
c tempfile on disk for storage of DMR data pairs in excess of acMxBf
c in number.
c!
c! (Note on the second line of code below: In general, recLen =
c! (size of one element of each of iPers, iRecs, and cones, in units
c! used to find IDMXBF) * acMxBf.
c!
c! Here the units are bytes. Each element of iPers and iRecs is 2
c! bytes, and each of cones is 4 bytes (set in insert file; if
c! element sizes in this file are changed, so too must the definition
c! of recLen
c!
acMxBf = (IDMXBF/nSG) * nSG
recLen = (2+2+4) * acMxBf
open (fuTmp, status='SCRATCH', access='DIRECT', form='UNFORMATTED'
, recl=recLen)
c
return
end
c
c end subroutine Setup
c==== subroutine SortTI ===========»====================================
c
c Sort input vector array of n integer data, in ascending order, by a
c tag insertion sort. No sorted array is actually output by subroutine
c SortTI; result is an array of subscripts of the data in the unsorted
c array, in the order in which they would appear in the sorted array.
c
c (Explicitly, this is the meaning of the output array tagLst:
c
c INDEXES OF ARRAY IND <==> indexes of a hypothetical, sorted
c version of input array arr
c
c ELEMENTS OF ARRAY IND contain the indexes of elements in the
c hypothetical, sorted version of input
C array arr IN THE ORIGINAL, UNSORTED ARRAY ARR
c
c Put one more way: tagLst is sorted tag list for original array arr.
c
c Put one last way: the value of the ith element of the hypothetical,
-------
c sorted version of array arr is arr (tagLst (i))
c
c Method is best for small and almost sorted arrays. Worst case is
c for inversely sorted arrays.
c
c Subroutine written by Paulus Irpan, SAI, 840830.)
c
c Subroutine SortTI is called by subroutine SetUp.
c
subroutine SortTI (n, arr, tagLst)
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
("••
Declarations, etc.
Description of
integer
n,
arr (n) ,
tagLst (n)
integer
n, arr(n) ,
Description of
integer
i/
j.
value
integer
i , j , valu<
passed parameters .
! # elements in ar
! the array to be
! sorted tag list
tagLst (n)
local variables .
! index of current
! array, which is
! tagLst; also, a
! variable index u
! proper position
! value of current
! array
a
ray to be tag sorted
tag sorted
of the original array
element in unsorted
to be inserted in
do- loop variable
sed to put i in its
in tagLst
element of unsorted
c
c Sort by tag insertion method.
c
c Start with l element presumed sorted (n_th data element).
c
tagLst(n) = n
c
c Then insertion sort the rest, changing the indexes only.
c
do 100 i m n-1, 1, -1
if (arr(i) .le. arr(tagLst(i+1))) then
tagLst(i) a i
else
value = arr(i)
j - i + 1
110 tagLst(j-1) « tagLst(j)
j - 3 + 1
if (j.le.n .and. arr(tagLst(j)).It.value)
-------
go to 110
tagLst(j-l)
endif
100 continue
c
return
c
c end subroutine SortTI
c
c==== subroutine GetDta ==«======«=========«===:
c
c Manage reading and screening of all DMR files.
c
c Subroutine GetDta is called by program TOXX.
c
subroutine GetDta (fuDat, fuPrt, fuTmp)
c
c Declarations/insertions.
c
c Description of passed parameters.
c
c integer
c . fuDat, ! first DMR data fileunit
c . fuPrt, ! print fileunit
c . fuTmp ! temp fileunit holding excess
c ! screened DMR data
c
integer
fuDat, fuPrt, fuTmp
c
c Insert file.
cl . '• '
include 'tbxx.ins'
c!
c Description of local variables.
c
c integer
c . iFu, ! DMR data fileunit currently being screened
c . iFl, . ! index of same
c . i ' " •". 1 handy index
c integer
c . nData ! total # DMR data pairs available for
c ! all metyears combined, before screening
c ! in TOXX
c
integer
. _iBC J.FX.. JL
integer
nData
c
c Initialization.
c
-------
print '(IX,A)', '»» GetDta'
c
c Reset data paging variables. There are so far no screened DMR
c data pairs in memory (nBuf), no screened DMR data pairs saved
c to disk or held in memory (nSave), and no data pages in memory
c or saved to disk (nPage).
nBuf = 0
nSave • 0
nPage = 0
c
c - - -
c
c Loop over DMR files (years of meteorological data).
c
c Read and screen DMR datafiles. Due to the large volume of data
c and iterations, separate data processing for the single and
c multisource cases.
c
do 100 iFl = 1, nYear
iFu * fuDat + iFl - 1
print ' (8X, A, 12, A) ',
'Message from GetDta: Now screening datafile #', iFl, '.'
c
c Extract data from datafiles.
c
if (nSG .eq. 1) then
call Data2 (iFu, fuTmp, iFl)
else
call Datal (iFu, fuTmp, iFl)
endif
c
c Remember index of last DMR data stored for this metyear.
c
iSavYr(iFl) = nSave + nBuf
100 continue
c . . -
c -Also remember the data page currently in memory (a.k.a. the old
c page), 'of which there will also be a copy on disk if it was
c .necessary to save excess data to disk.
c
ioPage = nPage
c
c — — - -
c .
c Output of data statistics.
c
write (fuPrt,'(1H1/ A, A, A)')
'Dispersion Model Results (DMR) Read/Screened',
' ................................ . .'
c
-C- Write ^-screened data by metyear, with totals.
c ..
write (fuPrt,'(/4X, A10, 5X, A12, 5X, A20, 5X, A23)')
'DMR File #', 'Year Modeled', 'Total # Data in File',
'# Saved for Calculation'
nData » 0
do 200 i » 1, nYear
nData » nData + nDatYr(i)
-------
if (i .eq. 1) then
write (fuPrt, ' (8X, II, 14X, 14, 15X, 18, 18X, 18)')
i, iYear(i), nDatYr(i), iSavYr(i)
else
write (fuPrt, ' (8X, II, 14X, 14, 15X, 18, 18X, 18)')
i, iYear(i), nDatYr(i), iSavYr(i) -iSavYr (i-1)
endif
200 continue
write (fuPrt, ' (/19X, A7, 15X, 19, 18X, 18)')
'Totals:' , nOata, nSave
c
c Write the chi/q cutoff value.
c
write (fuPrt, ' (/4X, A, A, 1PE12.6, A)')
'Lowest value any chi/q may take and still cause exceedance' ,
' of a threshold is (X/Q)min = ', cutoff, ' s/m3 . '
c
return
end
c
c end subroutine GetDta
c==== subroutine Datal =================================================
c
c Get data for the multiple source group case. Read and screen 1
c meteorological year of DMR data. Save only the DMR data pairs which
c may cause exceedance of effective thresholds.
c
c Subroutine Datal is called by subroutine GetDta.
c
c
c ................ - ......................... - ............................
c
subroutine Datal (fu, fuTmp, iYr)
c
c [[[
c
c Declarations, etc.
c
c
c
c
c
c
c
c
c
c
c
c!
Description of
integer
fu,
fuTmp,
iYr
integer
fu, fuTmp,
Insert file.
passed parameters.
! current DMR data fileunit
! temp fileunit for DMR data
! saved to disk
! index of current
iYr
DMR datafile
include ' toxx . ins '
c!
c
c
c
c
c
-------
c . (NPAIRalOO) ! # id/cone data pairs per record in
c ! the DMR datafiles, binary I/O
c
integer
NPAIR
parameter
(NPAIR=100)
c
c The following fragment should be uncommented, and the preceding
c parameter statement commented, for formatted I/O.
c
c! parameter
c! . (NPAIRslO) ! Alternative: same as above, for
c! ! formatted I/O
c
c integer
c . idRA (NPAIR), ! id data read-in array for one record
c . oneld, ! id part of current data pair
c . iPair, ! index of the current data pair
c . iP, is, iR, ! period, source, receptor # decoded from
c ! oneld
c . iPO, iRO, ! previous period, receptor #
c . i, j ! handy indexes
c real
c . totCOQ (MGRP), ! total chi over q from all sources
c ! (for current receptor and period,
c ! indexed by source group #)
c . cOQRA (NPAIR) ! chi over q read-in array for one
c ! record (s/m3)
c
integer
idRA (NPAIR), oneld, iPair, iP, is, iR, iPO, iRO, i, j
real
totCOQ (MGRP), cOQRA (NPAIR)
c
c Initialization.
c
c No data pairs are buffered yet . Set value of previous record
c variables to -1.
c
do 10 i s i, nSG
10 totCOQ (i) =0.
nDatYr(iYr) = 0
iPO = -1
iRO = -1
c
c Loop over DMR data on disk.
c
c Read 1 record of NPAIR pairs of id and chi/q data at a time.
c Return to this point each time screening of an entire record is
c complete. If FORTRAN detects an end of file, branch to label
c 199.
c
100 continue
c
read (fu, end=199) (idRA (i) , i « 1, NPAIR)
-------
read (fu, end«199) (cOQRA (i), i » 1, NPAIR)
C!
c!
C!
c!
c!
C!
C!
c
c
c
c
The following fragment should be uncommented, and the preceding
2 read statements commented, for formatted I/O.
read
read
nDatYr
(fu, *,
(fu, *,
{iYr) =
Loop over elements
end=199)
end=199)
(idRA (i), i = 1,
(COQRA (i), i = 1,
NPAIR)
NPAIR)
nDatYr (iYr} + NPAIR
of current record.
do 110 iPair = 1, NPAIR
c
c -- - - -
c
c Initial processing for current record.
c
c Decode the id part of data into a period, source, and
c receptor # (ppppssrrr = pppp ss rrr).
c
oneld - idRA (iPair)
iP m oneId/100000
iS = oneId/1000 - (oneId/100000)*100
iR = oneld - (oneId/1000)*1000
c
c
c
c Screening and saving of DMR data.
c
c If the current period and receptor (whose data has NOT yet
c been accumulated) is different from the previous ones, all
c chi/q data for the PREVIOUS period and receptor has been
c accumulated.
c
c (The following condition can be false at most MSRC
c consecutive times.)
c
if (iP.ne.iPO .or. iR.ne.iRO) then
c
c Check accumulated chi/q value of each source group. If
c none are greater than or equal to cutoff, none can cause
c exceedance, in which case DMR data for period #iPO,
c receptor #iRO will not be buffered.
c
do 210 i = 1, nSG
if (totCOQ(i) .ge. cutoff) go to 220
210 continue
go to 229
c
c The accumulated chi/q for the previous period and
c receptor is to be saved. If number of data in buffers
c is already within nSG of acMxBf, write current data
c page (i.e., save buffers' contents) to disk to make
c room. (This is because when data is buffered, nBuf
c is incremented by nSG). Update indexing variables.
c
c (Since acMxBf is in fact an integral multiple of nSG,
-------
c the condition for saving to disk could just as well be
c (nBuf .eq. acMxBf). As it stands, the condition will
c only be true when nBuf • acMxBf.)
c
220 continue
if ( (nBuf + nSG) .gt. acMxBf ) then
nPage * nPage + 1
write (fuTmp,rec=nPage) (iPers(i),i=l,acMxBf),
(iRecs(i),i=l,acMxBf),
(cones(i),i-l,acMxBf)
nSave • nSave + nBuf
nBuf = 0
endif
c
c Continuously increment pointer variable to next available
c element of buffers, nBuf, then put period iPO, receptor
c iRO, and the accumulated chi/q values into buffers by
c source group.
c
do 230 j = 1, nSG
nBuf = nBuf + 1
iPers(nBuf) = iPO
iRecs(nBuf) = iRO
cones(nBuf) * totCOQ(j)
230 continue
229 continue
c
c Whether data has been saved or not, update previous
c period and receptor variables to reflect new iP and
c iR. Also reset array containing total chi/q value,
c totCOQ.
c
iPO = iP
iRO = iR
do 240 i = 1, nSG
totCOQ(i) = 0.
240 continue
c
endif
c
c
c
c Check for zero value which indicates end of data.
c
c (The number of data is not always an integral multiple of
c NPAIR, and the last record may be padded with O's. If the
c current id datum is 0, branch to label 190.)
c
if (oneld .eq. 0) go to 190
c
c - -
c
c Accumulate the chi/q value for period #iPO, receptor #iRO,
c and source #iS, into array totCOQ. Place value into the
c element of array totCOQ () whose index corresponds to
c that of source #iS's group number in the source info arrays.
c
c (It is possible for there to be more sources in the DMR data
c than are desired in the TOXX run. If source #is is not found
c in the iSrc array, do not accumulate the current chi/q value.)
-------
do 310 i » 1, nSrc
if (IS .eq. iSrc(i)) then
totCOQUGrp(i)) = totCOQ(iGrp(i)) + cOQRA(iPair)
go to 319
endif
310 continue
319 continue
c
c - - -
c
c End loop on elements of current record.
c
110 continue
c
c
c
c End of loop processing.
c
c Read next record of data.
c
go to 100
c
c Label 190 is branched to if end of data was reached during the
c loop over elements of the current record (a 0 was found in oneld).
c Correct the variable containing the number of data in the current
c DMR file to reflect this fact.
c
190 nDatYr(iYr) = nDatYr(iYr) - NPAIR + iPair-1
c
c Label 199 is branched to if FORTRAN detects an end of file while
c reading from the DMR file on disk (i.e., the DMR file was an
c integral multiple of 100 data long, and was therefore unpadded.)
c
199 continue
c
c - - ;.—
c • • . •
c Processing for last metyear.
c
c If the last meteorological year of DMR data has just been
c screened, the following special processing is required.
c
c If more than acMxBf data have passed screening (nSave > acMxBf),
c save the last page of data, which is the one currently in
c memory, to disk. (This page will contain less than acMxBf data,
c unless the last storage of data to the buffers filled them
c exactly.)
c
c Note that if nSave is less than or equal to acMxBf, no saves to
c disk have been made, and none are made now.
c
c nSave is updated whether or not a save to disk - is performed—
c here, and nBuf is set to 0, because of the way iSavYr (iYr) is
c calculated upon returning to the GetDta subroutine. The
c calculation in GetDta works fine for every metyear except the
c last, necessitating this correction.
c
c nPage is also incremented whether or not a save to disk is done
c here. If no save is performed, it means that the screened data
-------
c do not fill the buffers, in which case nPage * 0 until now and
c must be updated to reflect the single page of screened data,
c residing entirely in memory. If a save is performed, of course
c nPage must be incremented to reflect the last page of data saved
c to disk.
c
if (iYr .eq. nYear) then ~
nSave = nSave + nBuf
nBuf s 0
nPage = nPage + 1
if (nSave .gt. acMxBf) then
write (fuTmp,rec=nPage) (iPers(i),i=l,acMxBf),
(iRecs(i) ,isl,acMxBf),
(cones(i),i=l,acMxBf)
endif
endif
c
return
end
c
c end subroutine Datal
c •
c==== subroutine Data2 ============ss===================:================
c
c Get data for the single source group case. Read and screen l
c meteorological year of DMR data. Save only the DMR data pairs which
c may cause exceedance of effective thresholds.
c
c Subroutine Data2 is called by subroutine GetDta.
c
subroutine Data2 (fu, fuTmp, iYr)
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . fu, ! current DMR data fileunit
c . fuTmp, ! temp fileunit for DMR data
c ! saved to disk
c . iYr ! index of current DMR datafile
c
integer
fu, fuTmp, iYr
c
c Insert file.
c!
include 'toxx.ins' :
c!
c Description of local variables.
c
c integer
c . NPAIR
c parameter
c . (NPAIR=100) 1 # id/cone data pairs per record in
-------
c
c
c
c
c
c
C!
C!
c!
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
! the DMR datafiles, binary I/O
integer
NPAIR
parameter
(NPAIR-100)
The following fragment should be uncommented, and the preceding
parameter statement commented, for formatted I/O.
parameter
(NPAIR*10)
integer
idRA (NPAIR),
oneld,
iPair,
iP, is, iR,
real
iPO, iRO,
i
L
tOtCOQ,
! Alternative: same as above, for
! formatted I/O
id data read-in array for one record
id part of current data pair
index of the current data pair
period, source, receptor # decoded from
oneld
previous period, receptor #
handy index
COQRA (NPAIR)
! total chi over q from all sources
! (for current receptor and period,
! indexed by source group #)
! chi over q read-in array for one
! record (s/m3)
integer
idRA (NPAIR), oneld, iPair, iP, iS, iR, iPO, iRO, i
real
totCOQ, cOQRA (NPAIR)
c
c-
c
c
c
c
c
c
Initialization.
No data pairs are buffered yet.
variables to -1.
totCOQ = 0.
nDatYr(iYr) = 0
iPO = -1
iRO = -1
Set value of previous record
c
c-
c
c
c
c
c
c
c
c
Loop over DMR data on disk.
Read 1 record of NPAIR pairs of id and chi/q data at a time.
Return to this point each time screening of an entire record is
complete. If FORTRAN detects an end of file, branch to label
199.
100 continue
read (fu, end=199) (idRA (i), i m i, NPAIR)
read (fu, end=199) (cOQRA (i), i » l, NPAIR)
-------
C!
c! The following fragment should be uncommented, and the preceding
cl 2 read statements commented, for formatted I/O.
c!
c! read (fu, *, end=199) (idRA (i), i « 1, NPAIR)
c! read (fu, *, end=199) (cOQRA (i), i - 1, NPAIR)
c!
nDatYr (iYr) = nDatYr (iYr) + NPAIR
c
c Loop over elements of current record.
c
do 110 iPair = 1, NPAIR
c
c
c
c Initial processing for current record.
c
c Decode the id part of data into a period, source, and
c receptor # (ppppssrrr = pppp ss rrr).
c
oneld s idRA (iPair)
iP * oneId/100000
iS = oneId/1000 - (oneId/100000)*100
iR m oneld - (oneId/1000)*1000
c
c
c
c Screening and saving of DMR data.
c
c If the current period and receptor (whose data has NOT yet
c been accumulated) is different from the previous ones, all
c chi/q data for the PREVIOUS period and receptor has been
c accumulated.
c
c (The following condition can be false at most MSEC
c consecutive times.)
c
if ( (iP .ne. iPO) .or. (iR .ne. iRO) ) then
c
c Check accumulated chi/q. If it is not greater than or
c equal to cutoff, it cannot cause exceedance, in which case
c DMR data for period #iPO, receptor #iRO will not be
c buffered.
c
if ( totCOQ .ge. cutoff .and. iPO .ne. -1 .and. iRO
.ne.
-1) then
c
c The accumulated chi/q for the previous period and
c receptor is to be saved. If number of data in buffers
c is already greater than or equal to acMxBf, write
c current data page (i.e., save buffers' contents) to
c disk to make room. Update indexing variables.
c
if ( nBuf .ge. acMxBf ) then
nPage » nPage + l
write (fuTmp,recanPage) (iPers(i),i=l,acMxBf),
(iRecs(i),i=l,acMxBf),
-------
(cones(i),i=l,acMxBf)
nSave = nSave + nBuf
nBuf * 0
endif
c
c Increment pointer variable to next available element
c of~buffers, nBuf, then put period iPO, receptor iRO,
c and the accumulated chi/q value into buffers.
c
nBuf s nBuf + 1
iPers (nBuf) = iPO
iRecs (nBuf) = iRO
cones (nBuf) = totCOQ
endif
c
c Whether data has been saved or not, update previous
c period and receptor variables to reflect new iP and
c iR. Also reset variable containing total chi/q value,
c totCOQ.
c
iPO » iP
iRO a iR
totCOQ = 0.
c
endif
c
c —
c
c Check for zero value which indicates end of data.
c
c (The number of data is not always an integral multiple of
c NPAIR, and the last record may be padded with O's. If the
c current id datum is 0, branch to label 190.)
c
if (oneld .eq. 0) go to 190
c
c . r T -v -
c • . •
c Accumulate the chi/q value for period #iPO, receptor #iRO,
c and source #iS, into variable totCOQ.
c
c (It is possible for there to be more sources in the DMR data
c than are desired in the TOXX run. If source #iS is not found
c in the iSrc array, do not accumulate the current chi/q value.)
c • .
. . do 210" -i-'* 1, nSrc
if (iS .eq. iSrc(i)) then
totCOQ = totCOQ + cOQRA(iPair)
go to 219
endif
210 continue
219 continue
c - '.
C '-;
C
c End loop on elements of current record.
c
110 continue
c
c - -
-------
c
c End of loop processing.
c
c Read next record of data.
c
go to 100
c " ~~
c Label 190 is branched to if end of data was reached during the
c loop over elements of the current record (a 0 was found in oneld).
c Correct the variable containing the number of data in the current
c DMR file to reflect this fact.
c
190 nDatYr(iYr) = nDatYr(iYr) - NPAIR + iPair-1
c
c Label 199 is branched to if FORTRAN detects an end of file while
c reading from the DMR file on disk (i.e., the DMR file was an
c integral multiple of 100 data long, and was therefore unpadded.)
c
199 continue
c
c -
c
c Processing for last metyear.
c
c (See the end of subroutine Datal for documentation of the
c following fragment.)
c
if (iYr .eg. nYear) then
nSave = nSave + nBuf
nBuf = 0
nPage = nPage + 1
if (nSave .gt. acMxBf) then
write (fuTmp,rec=nPage) (iPers(i),i«l,acMxBf),
(iRecs(i),i=l,acMxBf),
(cones(i),i=l,acMxBf)
endif
endif . . .
c .
return
end
c
c end subroutine Data2
c
c==== subroutine DoExEx ========================:========================
;C '•'*•".'•••'
c Manage the calculation of the expected exceedances of effective health
c effect thresholds, and the resultant output of this calculation, for
c any number of source groups.
c
c Subroutine DoExEx is called by program TOXX.
c
c- - — --- --—'-- - —,-.._-. —...
C '_.-'•
subroutine DoExEx (fuPrt, fuTmp, fuHEM, nP)
c
c
c
c Declarations, etc.
c
-------
c
c
c
c
c
c
c
c
c
c
c!
C!
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
Description of passed parameters.
integer
fuPrt,
fuTntp,
fuHEM
integer
fuPrt, fuTmp, fuHEM
Insert file.
include 'toxx.ins'
Description of local variables.
! print fileunit
! temp fileunit for DMR data
! saved to disk
1 HEM output fileunit
integer
iG,
iH,
iR,
iYr
real
xXRHGY (MREC,MHET,MGRP)
xXRHG (MREC,MHET,MGRP),
xXRHY (MREC,MHET),
xXRH (MREC,MHET),
xMaxHG (MHET,MGRP),
xMaxH (MHET)
integer
iG, iYr
index of current source group
index of current het
index of current receptor
index of current metyear
exex by receptor, by het, by
source group for one metyear
exex by receptor, by het, by
group, summed over all metyears
exex by receptor, by het, summed
over all groups, for one metyear
exex by receptor, by het, summed
over all groups and metyears
exex max by het, by group, inde-
pendent of receptor
overall exex max, by het, inde-
pendent of group and receptor
real
ICODE1 (MGRP,MHET,MREC) , rHMC (MREC,MHET)
c Initialization.
c
print '(1X,A)', ' »=>» DoExEx'
c
c Check whether any data passed screening in the Data* subroutines.
c
if (nSave .eq. 0) then
write (fuPrt,'(//A)')
' No data passed screening, thus no expected exceedances.'
return
endif
c Loop over years of meteorological data.
c
-------
c Calculate exex by metyear, and output by metyear if desired.
c Maintain running sum of exex for all metyears handled so far.
c
do 200 iYr » 1, nYear
C
c — - —
c
c Calculate exex and the maxima for current metyear. CaExEx
c must be passed the actual, rather than logical, # of hets.
c
call CaExEx (fuTmp, iYr, MREC, MHET, nRec, nHET, nSG,
ICODE1, rHMC)
c
c
c
c
c Metyearly output.
c
c Output results by metyear if desired, but not when there is
c only one metyear.
c
c
c Output results by individual source group, unless there
c is only one source group, in which case output for the
c single source group will appear as the output for all
c source groups combined.
c
do 400 iG = 1, nSG
call WrExEx (fuPrt, fuHEM, iYear{iYr),iYear
(nYear},
iGrp(iSGUG)) , lAdd, MGRP, MREC,
nXRec, MHET, nHET, logiNH,iYr,nP,
ICODEl,rHMC)
400 continue
c
c
c
c End loop over years of meteorological data.
c
200 continue
c
c - -
c
c Overall exex, all metyears combined.
c
c Calc exex by receptor, by group, averaged over all metyears. Store
c in array xXRHG. Find the maximum average exex for each het, each
c source group, independent of the receptor.
c
return
end
c
c end subroutine DoExEx
c
c==== subroutine CaExEx =======«==============»================.•
c
c Calculate exex using Monte Carlo simulation, for one metyear.
c
-------
c In order to maintain the convention of placing the insert file AFTER
c the declaration of passed parameters, mR, mH, nR, nH, nG are passed
c for array dimensioning purposes, although they in fact equal insert
c file variables MREC, MHET, nRec, nHET, and nSG, and are held in com-
c mon. The names of the insert file variables are not used to avoid
c having local dummy parameters masquerading as insert file variables;
c this would be deceptive and confusing. The names mR, mH, nR, nH, and
c nG are used throughout CaExEx for consistency.
c
c (CaExEx arrays have been specially named with suffix "MC" (Monte
c Carlo) to distinguish them clearly from DoExEx arrays with similar
c but different contents.)
c
cSE This version of subroutine CaExEx was written for Sept. 30 1993 version
cSE of TOXX. The calls to subroutine RandNo have been incorporated into a
cSE new subroutine, BatPr. The subroutine OnOff from the original version
cSE of INTOXX has been incorporated into this new subroutine.
c
c Subroutine CaExEx is called by subroutine DoExEx.
c
subroutine CaExEx (fuTemp, yr, mR, mH, nR, nH, nG, ICODE1, rHMC)
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . fuTemp, ! temp fileunit for DMR data
c ! saved to disk
c . yr, ! index of current metyear
c . mR, mH, ! max # recs, max # hets
c . nR, nH, nG ! # receptors, # hets, and # groups
c
c (In the following four array names, the 'MC' identifies each
c variable as belonging to CaExEx.)
c
c real
c .rHGMC (mR,mH,nG), ! array of exex by receptor, by net,
c ! by source group, summed over simyears;
c ! avgd. over simyears at end
c .rHMC (mR,nH), ! array of exex by receptor, by net,
c ! summed over source groups and
c ! simyears; avgd. over simyears at end
c .mxHGMC (mH,nG), ! simyear-averaged max exex by het, by
c i source group, any receptor
c .mxHMC (nH) ! simyear averaged max exex by het, any
c ' source group or receptor
c
integer
fuTemp, yr, mR, nR, nH, nG
cSE
parameter (NPAIR a 100)
CSE
-------
c
c
c
c
(In the following four array names, the
variable as belonging to CaExEx.)
real
rHMC (mR,nH)
'MC' identifies each
c
c
cl
C!
c
c
c
CSE
CSE
CSE
CSE
CSE
C
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
CSE
CSE
cSE
CSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
CSE
cSE
cSE
cSE
CSE
CSE
CSE
Insert file.
include ' toxx . ins '
Description of local
integer
compl ,
iR,
iH,
10,
iP,
iPol,
iSim,
1,
iBSav,
iESav,
iBPage ,
iEPage ,
iPage,
iBDat ,
iEDat ,
iDat ,
Recp,
scndskp
.
sendit.
SK,
variables .
! indicates that an averaging period has
! been completed when it equals YES. Will
! only equal YES when the last receptor for
! for the final hour of the averaging period
! has been processed
! current receptor
! index of current het
! current source group
! current period
! current pollutant
! index of current simulation
I handy index
! location of first datum for current
! metyear in screened DMR data
! location of last datum for current
! metyear in screened DMR data
! page containing first datum
! page containing last datum
! index of current page
! location of first datum for current
! metyear on current page
! location of last datum for current
! metyear on current page
! index of current datum on current page
! identical to iR, but is needed when multiple
! hour averaging is desired. If an averaging
! period is completed when before all skipped
! periods have been processed for a receptor,
! iR will become the last receptors when
! calculating the exceedances. Therefore it is
! necessary to have a variable that represents
! the current receptor that will be passed to
! subroutine BatPr
! similar to iSkip, except this is assign
J the value of iSkip - iPriod for use when
! an averaging period has been completed prior
! using up all the hours in iSkip
! indicates that an averaging period has been
! completed prior to processing all skipped
! periods. When this equals YES, the program
! skips over the process of getting the data
! next in line for iP, iR, and cones ()
! sent into CaExEx as YES from subroutine
! BatPr indicating that an averaging
1 period been completed prior to processing all
1 skipped periods. Becomes NO when the last
-------
cSE ! receptor has been processed through CaExEx
cSE . TK ! when SK changes from YES to NO, TK becomes YES
cSE ! to indicate that the last receptor still needs
cSE ! to be processed. When this becomes YES sendit
cSE ! also becomes NO.
c
c real
c . impSSG (MHET,MGRP), ! concentration impacts of single source
c 1 groups, by het, by group
c . impASG (MHET), ! concentration impacts of all source
c ! source groups, by het
cSE . ON, YES, ! when a variable equals 1.0, it is either
cSE ! ON or YES, respectively
cSE . OFF, NO ! when a variable equals 0.0, it is either
cSE ! OFF or NO, respectively.
real
ICODE1(MGRP,MHET,MREC)
integer
iR, iH, iG, iP, iPol, iSim, i, iBSav, iESav, iBPage, iEPage,
iPage,iBDat,iEDat,iDat, compl, Recp, SK, TK, sendit, numGps,
scndskp,BGNiR,LASTiR
real
impSSG (MHET,MGRP), impASG (MHET), ON, OFF, YES, NO
logical lastR
parameter
(ON = 1.0, OFF = 0.0, YES * 1.0, NO = 0.0)
c
c Initialization.
c
print '(IX,A)', '»»» CaExEx'
c
cSE Zero out array rHMC for cumulative years.
do 119 iH = 1, nH
do 120 iR = 1, nR
rHMC (iR,iH) = 0.
120 continue
119 continue
cSE Initialize scndskp to the number of hours in an averaging period
scndskp = iAvPer
c
c Prepare indexes to needed DMR data.
c
c Calculate the locations of the first and last data for this
c metyear within the screened DMR data for all metyrs.
c
if (yr .eq. 1) then
-------
iBSav = 1
else
iBSav » iSavYr (yr-1) + 1
endif
iBSav « iSavYr(yr)
c
c Determine which data pages contain—datum #s iBSav and iESav
c
iBPage = (iBSav + acMxBf-l) / acMxBf
iEPage = (iESav + acMxBf-l) / acMXBf
c
c Monte Carlo simulation loop.
c
c —
c
c Loop over simyears.
c
do 200 iSim = l, nSim
write (*,201) iSim
201 format ('+','***** Simulation: ',i5.5)
cSE Set iP to 0.
iP = 0
c
c Start-of-simyear initialization. No previous period, no time
c elapsed so far for any source group, all source groups off.
c
c
c
c Loop over pages of data for current metyear (#yr).
c
do 400 iPage .= iBPage, iEPage
c
c Page in data from tempfile if needed.
c
if (iPage .ne. ioPage) then
read (fuTemp,rec=iPage) (iPers(i),i=l,acMxBf),
(iRecs(i>,i=l,acMxBf),
(cones(il ,i=l,acMxBf)
ioPage = iPage
endif
c
c If the page # of the data currently in memory is between
c iBPage and iEPage, uninclusive, then the start and end of
c the data on the current page for metyear #yr are at the
c beginning and end, respectively^pf_thei DMR__data buffers.
c '.-.•'-
iB0at =1
iEDat = acMxBf
c
c If, on the other hand, the current data page # = iBPage or
c iEPage, then there is a possibility that some of the data
c on the current page does not belong to metyear #yr. In
-------
c this case a special calculation is necessary to determine
c where on the current page to start or stop reading
c screened DMR data for metyear #yr.
c
if (iPage.eq.iBPage) iBDat = iBSav - (iPage-1)*acMxBf
if (iPage.eq.iEPage) iEDat = iESav - (iPage-1)*acMxBf
c
c - - -
c
c Loop over data on current page (#iPage).
c
do 410 iDat = iBDat, iEDat, nG
cSE
cSE If the averaging period for TOXST is > 1, we have to
cSE loop through all receptors even if there are receptors
cSE that did not have an exceedance for this hour.
413 if (iAvPer.gt.l) then
if (iP.eq.O) then
lastR = .FALSE.
iP = iPers(iDat)
iR = iRecs(iDat)
LASTiR = iR
BGNiR = 1
else if (iP.eq.iPers(iDat)) then
iR = iRecs(iDat)
BGNiR = LASTiR + 1
LASTiR = iR
else if (iP.lt.iPers(iDat)) then
BGNiR * LASTiR+1
LASTiR = nR
lastR = .TRUE.
end if
else
iP « iPers(iDat)
iR = iRecs(iDat)
BGNiR ='-iR
LASTiR = iR • . '
end if
cSE
cSE Assign concent,) to the concentrations in the temp. file. These
cSE are passed to BatPr through TOXX.INS.
.do 414 I'. BGNiR, LASTiR
do 499 iG = 1, nSG
if (I .eq. LASTiR .and. .not. lastR)
then
concen(iG,I) = cones(iDat + iG -
1)
; _else
concen(iG,I) = defrt
end if
499 continue
cSE Assign variable Recp to iR. Later on in this subroutine, after
cSE the call to BatPr, iR is used in other loops
cSE which when finished result in iR assigned to the last receptor.
-------
cSE This is needed when the iAvPer > 1. If an averaging period does
cSE not have enough hours to form a complete averaging period, the
cSE program goes to statement 412 to finish up the remaining receptors
cSE for the current hour.
Recp • I
cSE If mutually exclusive emissions are desired, set the number of
cSE groups to 1. Processing of all source groups will take place
cSE in subroutine BatPr.
412 if (MEEm .eq. YES) then
numGps - 1
else
numGps = nSG
end if
do 411 iG = 1, numGps
call BatPr (iG, iP, Recp, impSSG, compl, SK,
scndskp)
cSE iR must be assigned to the original iR which was assigned to Recp
cSE prior to statement 412.
iR = Recp
411 continue
cSE If, as determined from BatPr that an averaging period has not
cSE been completed (compl = NO), the program goes to statement
cSE 410 if the iAvPer > 1.
if (compl .ne. YES .and. iAvPer .gt. 1) go to 414
cSE This next "go to" takes care of the last receptor.
if (iR .eq. nR .and. SK .eq. NO) then
compl = NO
if (TK .eq. YES) then
TK = NO
go to 451
end if
end if
if (sendit .eq. YES .and. (SK .eq. YES .or. TK .eq.
YES) .and. scndskp .It. iAvPer) go to 451
c
c
c
c Calculation of exex.
c
c
c Zero out the array impASG, which accumulates
c impacts for all source groups. It must be reset
c for each receptor-period combination.
c
do 424 iH » 1, nH
424 impASG (iH) = 0.
c
do 425 iG m i, nG
-------
do 425 iH » 1, nH
irapASG (iH) * intpASG (iH)
+ impSSG (iH.iG)
425 continue
cSE iC: Assigned to the current threshold.
ilnc=2
iPol - ^
do 440 iH = 1, nH
do 441 iG = 1, nG
if
(impSSG(iH,iG) .ge. effHET(iH))
then
445 if ((impSSG(iH,iG).It.effHET(ilnc)
.and. iH.ne.nH) .or. ilnc-l.eq.nH)
then
iC =
ilnc-l
ilnc=2
else
ilnc=ilnc+l
goto 445
end
if
ICODE1(iG,iC,iR)=ICODE1(iG,iC,iR)
+ 1
endif
441 continue
ilnc=2
if (impASG(iH).ge.effHET{iH))
then
436 if (impASG(iH).It.effHET(ilnc)
.and. iH.ne.nH .or. ilnc-l.eq.nH)
then
iC =
ilnc-l
ilnc=2
else
ilncailnc+l
go
to 436
end if
rHMC (iR, iC) =rHMC (iR, iC) +1
end if
440 continue
c End calculation of exex.
c
c - - -
c
cSE Once there has been a completed averaging period, set impSSG (,)
-------
cSE to 0.
do 450 iG * 1, nG
do 450 iPol « 1, nPol
impSSG(iPol,iG) = 0.
450 continue
cSE If SK m YES, an averaging period has been completed prior to looping
cSE through all the skipped periods. The last skipped period is the
cSE period with the hit (concentration over the cutoff value) so we
cSE must use that period. SK will only be set to YES for a period
cSE when the loop in BatPr is on the last receptor.
cSE When this occurs, iR and Keep are set to the first receptor,
cSE sendit is set to YES and the program is diverted back to statement
cSE 412. This by-passes the process of getting a new iP and iR because
cSE we still need to finish up all of the skipped periods.
451 if (SK .eq. YES) then
if (Recp .eq. nR) then
iR = 1
Recp = iR
sendit = YES
else
cSE When we are in this part and iR is set to the last receptor,
cSE we have to set SK and sendit back to NO. TK is set to YES
cSE because we still have this last receptor to go through and
cSE something needs to indicate this.
iR = iR + 1
Recp = iR
if (iR .eq. nR) then
SK = NO
TK = YES
sendit = NO
end if
end if
'• go to 412
' . end if
414. continue
if ((1-1).eq.nR.and.iAvPer.gt.1) then
iP = 0
if (lastR) go to 413
end if
410 continue
c "•'••. • • .
c End loop over data on current page (#iPage).
c
c
c
400 continue
c
_c_J Bnd__loQp_over data for current metyear (#yr) .
C ' • "
c -,- _
c
200 continue
c
c End Monte-Carlo simulations loop.
c
-------
c-
c
c
c
c—
CSE--
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
cSE
cSe
cSE-
cSE
cSE
cSE-
cSE
cSE!
return
end
end subroutine CaExEx
subroutine BatPr
Determine emission rates and ON/OFF switches for the passed source
group and receptor.
Subroutine BatPr was written for Sept. 30, 1993 version of TOXX.
Subroutine OnOff, originally called from subroutine CaExEx,
has been incorporated into this subroutine.
Subroutine BatPr is called by subroutine CaExEx.
subroutine BatPr (iG, iP, iR, impSSG, compl, SK, scndskp)
Insert file
include 'toxx.ins'
cSE!
cSE
CSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
CSE
cSE
cSE
CSE
CSE
cSE
CSE
cSE
cSE
CSE
cSE
cSE
cSE
CSE
cSE
CSE
CSE
CSE
CSE
Declarations, etc.
Description of passed
integer
iG,
iP,
iR,
Compl,
scndskp
.
SK,
. leftovr (MGRP,MREC)
_
parameters.
current source group
current period (in hours)
current receptor
indicates that an averaging period has
been completed when it equals YES. Will
only equal YES when the last receptor for
for the final hour of the averaging period
has been processed
similar to iSkip, except this is assign
the value of iSkip - iPriod for use when
an averaging period has been completed prior
using up all the hours in iSkip
when sent into CaExEx as YES from subroutine
BatPr indicates that an averaging
period been completed prior to processing all
skipped periods. Becomes NO when the last
receptor has been processed through CaExEx
When multiple averaging periods are desired,
this indicates the number of periods that are
left over from the skipped periods, (hours
that did not fit into an averaging period).
For example, say the averaging period is 3
hours, and that the number of skipped periods
is 11 hours, 11 / 3 is 3.6667. 3x3=9,
therefore 9 single hours fit evenly into three
-------
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
cSE
CSE
CSE
CSE
CSE
CSE
CSE
real
. impSSG (MHET,MGRP) ,
. tot (MGRP,MHET,MREC)
usert
3 hour averaging periods. .6667 x 3 = 2 which
is what leftovr(,) is equal to. Because all
source groups will have the same amount of
periods stored in the temporary files when
multiple hour averaging is desired, we need
only identify the value of leftovr(,) for the
first source group and first receptor
concentration impacts of single source
groups, by het (poll), by group
used when averaging period is greater than
1 to hold accumulated concentrations for
a partial averaging period (i.e. 2 hours of
a three hour averaging period) for each
source group, pollutant, and receptor.
the value of the concentration to be used
for the current period in this subroutine.
If the current period is the period that has
the hit (i.e., the last skipped period),
usert will equal cone, otherwise it will
equal the default (i.e., the cutoff value
used in ISCST2.)
cSE passed parameters
integer
compl, iG, iP, iR, iSrG, scndskp, SK, leftovr(MGRP,MREC)
real
tot(MGRP,l,MREC), impSSG(MHET.MGRP), rand(2), usert
cSE Description of
cSE
cSE integer
cSE . count,
cSE
cSE
cSE . firstR,
cSE
CSE
cSE
cSE
cSE
cSE
cSE
cSE . hr,
cSE
cSE
cSE
cSE . imark,
cSE .
CSE .
cSE .
cSE .
cSE . iPrvPr,
cSE
CSE . iPol,
CSE . iPriod,
cSE . iSkip,
cSB . iStart,
CSE
local parameters.
variable to indicate the # of source groups
that have passed through this routine for the
current period
when 1 hour averaging periods are desired,
all receptors are not put into the temporary
file, therefore it is necessary to have some-
thing indicate which receptor was the first
to enter this routine for a particular period
so that a new ON/OFF switch will not be
determined for subsequent receptors of the
same period
represents what hour the current period
is on a 24 hour clock. Used in
determining if emissions should be AM or PM
rates
used only when mutually exclusive emissions
are desired. It is set to YES when an averaging
period is completed and the source group that is
on is not equal to the last source group,
i.e., nSG
indicates what the previous period was for the
first time that a new period enters this routine
indicates the current pollutant
indicates the current skipped period
calculated number of skipped periods
indicator of where iPriod should start.
-------
CSE
CSE
CSE
CSE
CSE
CSE
cSE
CSE
CSE
CSE
cSE
cSE
CSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
cSE
CSE
CSE
CSE
cSE
cSE
cSE
CSE
cSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
CSE
j,
.
jg,
JK,
loopl ,
Prd,
PrvPd,
. BatOn (MGRP , MCAT)
. condit (MGRP)
.Edist(MGRP)
.FOn(MGRP)
.MK(MGRP)
.nxtiR(Prd)
.onTime(MGRP)
. PrvLf tO (MGRP, MREC)
.state (MGRP, 24)
.tera (MGRP)
!
!
!
!
!
1
!
!
!
!
!
!
!
!
i
!
!
!
!
!
!
!
!
!
!
i
!
!
I
!
i
I
I
I
I
I
I
I
I
I
i
!
!
!
!
!
!
!
!
!
!
;
!
!
!
!
J
!
averaging period has been completed prior
processing all skipped periods, the period
that contains the hit (when iPriod = iSkip)
has not been processed yet. The next time
we go through this loop again for the same
receptor, iStart must be equal to the next
period. See also JK
variable assigned to Edist(jg) if source
group is not batch
identical to iG when mutually exclusive
emissions are not desired. When mutually
exclusive emissions are desired jg equals one
when it is passed to this subroutine but is
assigned to a randomly chosen source group
set to whatever iPriod is equal to when an
averaging period is completed but all skipped
periods have not been processed. When this
subroutine is entered again to complete the
processing of the remaining skipped periods,
iStart will be set to JK + 1 so that the
processing can continue right after where it
left off
indicator that this subroutine has been entered
already and the code following the "if"
statement containing this variable will not be
executed again if it equals 1
the current period in hours of the year.
the previous period. This variable remains
as the previous period until a new period from
the temporary file is encountered. This is un-
like iPrvPr which becomes the current period while
processing the first receptor.
the number of hours that an emission category
stays on once on
indicates if the condition of the current
source group is on
index of the current emission category
when this is YES it indicates the this is
the first hour that the current source
group is ON since it was OFF
if tera(iG) becomes YES then this will
also become YES. However, it does not
become NO when tera(iG) becomes NO.
Indicates the same thing as tera()
when mutually exclusive emissions are desired,
it is assigned to jg to represent the source
group that is ON for a particular period
the amount of time in hours a group has
been on for a particular emission category
the number of periods left over when the
previous period entered this routine. There
is a value for each source group and each
receptor
switch indicating if the source group is
on for each hour of a day
when teraO equals YES, an averaging period
was completed prior to processing all the
skipped periods.
cSE real
-------
cSE . ON, YES, ! when a variable equals 1.0, it is either
cSE ! ON or YES, respectively
cSE . OFF, NO ! when a variable equals 0.0, it is either
cSE ! OFF or NO, respectively.
cSE . tmpy, ! used when a source group is non-batch to
cSE ! keep track of the preprocessed probabilities
cSE ! of an emission category being used
cSE .BatRate(MGRP,MHET,! emission rate for the source group, pollutant,
cSE . MCAT,2), ] emission category, and period of day (AM or PM)
cSE .dist(MGRP,MCAT), ! probability of an emission category being used.
cSE ! These values are read in for all sources but are
cSE ! only used if the source group is non-batch
cSE .randnum(2), ! random number controlling which emission category
cSE ! will be used if mutually exclusive emissions are
cSE ! desired
cSE .rndNos(MPER), ! random numbers controlling whether a source
cSE ! group turns on or not, by period
cSE .PdBRt(MGRP, ! emission rate for each source group,
cSE . MHET,24), ! and pollutant for each hour of the day
cSE local parameters
integer
count, firstR, hr, imark, iPrvPr, iPol, iPriod,
iSkip, iStart, j, jg, JK, loopl, Prd, PrvPd, x, ip, ifstsrc
integer
PrvLftO(MGRP,MREC), state(MGRP,24),
onTime(MGRP), condit(MGRP),
MK(MGRP), FOn(MGRP), tera(MGRP), nxtiR(MPER), hold(MGRP)
real
rndNos(MPER), PdBRt(MGRP,1,24), randnum(2),
tmpy, ON, OFF, YES, NO, srange, Pick
parameter (YES = 1, NO = 0, ON = 1, OFF * 0)
save loopl, count, iPrvPr, PrvPd, PrvLftO, iSkip, state, JK
cSE Assign "jg" to the incoming source group. Note: if emissions
cSE are mutually exclusive, "jg" at this point will always be 1.
jg = iG
cSE Since jg = 1 at this point, count must equal the total number
cSE of source groups for proper decision making later if MEEm are
cSE desired.
if (MEEm .eq. YES) count = nSG
cSE Determine how many periods will be left over for the current
cSE TOXX source group and receptor.
cSE When MEEm « YES, assign all leftovr() to leftovr(1) for all
cSE source groups, jg will a i.
leftovr(jg,iR) = mod(iP, iAvPer)
if (MEEm .eq. YES .and. nSG .gt. 1) then
do 2 x = 2, nSG
leftovr(x,iR) * leftovr(jg,iR)
2 continue
x - 0
end if
-------
cSB If this is the first source group and the period is not equal to the
cSE previous period, assign PrvPd to previous period, iPrvPr.
if (jg .eq. 1 .and. iP .ne. iPrvPr) PrvPd » iPrvPr
cSE If the period is the same as the previous period and all source
cSE groups have entered this subroutine once, and tera(jg) and MK(jg)
cSE are both NO (meaning that we are not currently involved with
cSE averaging periods that have not been completed) then we do not
cSE want to determine if this period is either ON or OFF because we have
cSE already done so during this routines first entry when the current
cSE period was not equal to the previous period. Go to statement 63 to
cSE by-pass the ON/OFF switching code.
if (iP .eq. iPrvPr .and. count .eq. nSG .and. tera(jg) .eq. NO
.and. MK(jg) .eq. NO) goto 63
cSE If there were skipped periods that were leftover, assign istart,
cSE which is the beginning of the loop that increments the skipped
cSE periods to the period just after the last period, to the next
cSE period. JK is an indicator of the number of periods that were
cSE looped through. We skip over the ON/OFF coding again.
if (tera(jg) .eq. YES .or. MK(jg) .eq. YES) then
MK(jg) = YES
iStart = JK + 1
goto 64
end if
cSE If count is equal to the number of source groups, reset
cSE the counter to 0 and start incrementing each time a different
cSE source group goes through. This is necessary when MEEm = NO.
if (count .eq. nSG) count = 0
count = count + 1
cSE If the averaging period is equal to 1, set firstR to iR.
if (iAvPer .eq. 1) firstR = iR
cSE The previous period indicator iPrvPr gets set to the current period.
iPrvPr = iP
cSE Determine how many periods have been skipped since the last "hit".
cSE We use PrvPd because iPrvPr is now equal to the current period.
iSkip = iP - PrvPd
cSE When this subroutine is first entered, loopl equals NO and the
cSE nested code will be executed.
if (loopl .eq. NO) then
cSE Read in emission rates and ON TIME periods for each group.
cSE Initialize rand(l).
rand(l) = -1.0
cSE Assign loopl to YES so that we don't have to go through section
-------
cSE of the subroutine again.
loopl * YES
end if
cSE Determine random numbers for all skipped periods if MEEm = NO.
cSE If MEEm = YES, a different random number will be generated to
cSE determine which source group will turn on.
cSE Due to the peculiarities of the random number generator
cSE RandNo, the number of random numbers requested from it must be
cSE even. Make sure iSkip is even and, if not, pass iSkip + 1
cSE instead of iSkip. In this case iSkip will still be used
cSE below; however, one random number returned by RandNo will not
cSE be used.
if (MEEm .eq. NO) then
if (mod(iSkip,2) .eq. 0) then
call RandNo (iSkip,rndNos)
else
call RandNo (iSkip+l,rndNos)
end if
end if
63 iStart = 1
cSE Loop through all skipped periods.
64 do 30 iPriod = iStart, iSkip
cSE Determine the current period. Prd will be a number from
cSE 1 to 8784.
Prd = PrvPd + iPriod
cSE Determine what the period would be on a 24 hour clock.
hr = mod(Prd,24)
if (hr .eq. 0) hr » 24
cSE Determine which set of emission rates to use, AM or PM.
cSE You can think of AM as hours where it is usually light outside.
if (hr .le. 6 .or. hr .ge. 19) then
sun = 2
else
sun s i
end if
cSE If the averaging period is 1 hour, and iR is the first receptor
cSE encountered for this period, go to 65 and determine if it is ON
cSE or OFF. This has to be in here because when iAvPer = 1 all
cSE receptors are not output to the temporary files. For example
cSE when there ia multiple hour averaging, all receptors are available
cSE in the temp, file for whatever period that there was a "hit", with
cSE 1 hour averaging, we don't have to be concerned with receptors that
cSE do not exceed the cutoff and iR may not start off with the first
cSE receptor.
cSE If the current period is the same as iPrvPr and all source
cSE groups that are batch have entered this routine once during
-------
cSE this period and it is not the first receptor then we want to
cSE skipped over the ON/OFF processing because we already know
cSE if it is ON or OFF for this period and group.
cSE The ".or. MEEm .eq. YES" code is included because count may
cSE be equal to 1 when MEEm » YES.
if (iAvPer .eq. 1 .and. iR .eq. firstR) then
goto 65
else if (iP .eq. iPrvPr .and. ((MEEm .eq. NO .and.
count .eq. nSG) .or. MEEm .eq. YES) .and. iR
.gt. 1) then
goto 69
end if
cSE Set nxtiR(Prd) to jg so that it is not zero.
nxtiR(Prd) * jg
cSE FOn(jg) is indicator that this is the first hour that it is on.
cSE The following section applies only to Batch processes.
65 if (condit(jg) .eq. ON .and. Batch(jg) .eq. YES) then
state(jg,hr) » ON
if (FOn(jg) .eq. NO) onTime(jg) = onTime(jg) + 1
FOn(jg) = NO
66 if (onTime(jg) .gt. BatOn(jg,Edist (jg)) .and.
Edist(jg) .It. iMax(jg)) then
Edist(jg) » Edist(jg) + 1
onTime(jg) » 1
if (BatOn(jg,Edist(jg)) .eq. 0) goto 66
else if (onTime(jg) .gt. BatOn(jg,Edist(jg))) then
condit(jg) = OFF
state(jg,hr) = OFF
end if
cSE The following section applies only for non-Batch processes.
else if (condit(jg) .eq. ON .and. Batch(jg) .eq. NO) then
state (jg,hr) = ON
if (FOn(jg) .eq. NO) onTime(jg) = onTime(jg) + 1
FOn(jg) * NO
if (onTime(jg) .gt. BatOn(jg,Edist(jg))) then
condit(jg) = OFF
state(jg,hr) = OFF
end if
end if
cSE The following determines if the processes should turn on if
cSE it is OFF.
if (condit(jg) .eq. OFF) then
state (jg,hr) = OFF
cSE IF MEEm m YES, select a random number to determine which
cSE source group should turn on.
if (MEEm .eq. YES) then
if (rand(l) .eq. -1.0) then
call RandNo (2, rand)
end if
-------
cSE We first need to choose a random number to indicate
cSE which source groups probability of turning on will
cSE be compared to a random number chosen to determine
cSE if the source group will turn on. This will prevent
cSE any bias in selecting source groups in numerical order.
cSE Here we choose a random number with the Microsoft
cSE intrinsic function RANDOM.
do ipos » l, nSG
hold(ipos) = 0
end do
ifstsrc = 0
68 call RANDOM (Pick)
cSE Now we will start comparing the random number with
cSE the first source groups range over all source groups.
cSE If the random number chosen (i.e., iPick) is less than
cSE then upper limit of the current source group range, than
cSE we will choose this source groups probability to be
cSE compared with another random.number.
do 67 isource = 1, nSG
do ipos = 1, ifstsrc
if (isource .eq. hold(ipos)) goto 67
end do
srange = float(isource)/float(nSG)
if (Pick .le. srange) then
iSrG = isource
ifstsrc = ifstsrc + 1
hold(ifstsrc) = isource
exit
end if
67 continue
if (probOn(iSGUSrG)) .It. rand(l).) then
cSE If the probability for the .chosen source group
cSE is less than the random number and we have looped
cSE through all of the source groups, reset rand(l)
cSE to -1.0 to indicate that there are no source groups
cSE on.
iSrg =0
if (ifstsrc .eq. nSG) then
rand(l) = -1.0
else
goto 68
end if
end if
cSE Assign "jg" to the source group that was selected,.
cSE Put the value of njg' into array nxtiRO to represent the
cSE source group that is ON for this particular period.
jg » iSrG
nxtiR(Prd) = jg
end if
-------
cSE Execute the next statement if mutually exclusive emissions
cSE are not desired or if they are desired and the probability
cSE of one of the source groups turning on is greater than the
cSE random number selected, (i.e., rand(D)
if ((MEEm .eq. NO .and. (probOn(iSG(jg))) .ge.
rndNos(iPriod)} .or. rand(l) .ne. -1.0} then
iSrG s 0
rand(l) * -1.0
condit(jg) = OH
FOn(jg) » YES
Edist(jg) = 1
onTime(jg) * 1
cSE For non-Batch processes, determine which emission category
cSE is to be used by comparing a random number to the probability
cSE that each emission category will be used.
if (Batch(jg) .eq. NO) then
Edist(jg) = 0
tmpy = 0.0
cSE We only need one random number,'but the random generator needs
cSE two.
call RandNo (2, randnum)
do 40 j » 1, iMax(jg)
cSE When an emission category has been selected, "exit" this do loop
if (Edist(jg) .gt. 0) exit
tmpy = tmpy + dist(jg,j)
cSE If the random number selected is less than the cumulative
cSE probability that an emission category will be used assign
cSE EdistO to that category.
if (randnum(l) .le. tmpy) -Edist(jg) =
j
40 continue
cSE The following is only executed for Batch processes. It checks
cSE to make sure that the time on (which will be 1 hour) does not
cSE exceed the total amount of time allowed on. In other words, it
cSE makes sure that it will be on for at least t hour.
else if (onTime(jg) .gt. timeOn(jg)) then
condit(jg) . OFF
state(jg,hr) = OFF
end if
end if
cSE If it is determined that the source is ON, go^to statement^ 65.
if (condit(jg) .eq. ON) goto 65
end if
cSE If we are at the last skipped period use the concentration from
cSE the temporary file if there is one for the current receptor,
-------
cSE otherwise use the default value which is equal to the cutoff
cSE used in ISCST2.
69 if (MEEm .eq. YES .and. nxtiR(prd) .eq. 0) then
x » 0
goto 71
end if
if (iPriod .eq. iSkip .and. concen(jg,iR).gt.0.0) then
usert = concentjg,iR)
else
usert = defrt
end if
if (MEEm .eq. YES) x = 0
cSE If emissions are mutually exclusive, only one source group will
cSE be operating at a time, however, we still need to track what the
cSE other source groups (if any.) "x" is used to track which source
cSE is currently being processed. When "x" equals a source group
cSE that is OFF (all but one source group), the "state" for that
cSE source group and hour will be set to OFF (zero). When it is
cSE multiplied by the emission rate, it will produce no value.
cSE when "x" equals the source group that is ON, "jg" is assigned
cSE to the source group that is ON for this period (which is really
cSE the same as "x".
71 if (MEEm .eq. YES) then
x = x + 1
if (x . eq. nxtiR(Prd) .and. nxtiR(Prd) .ne. 0) then
jg = nxtiR(Prd)
else
jg = x
state(jg,hr) = OFF
end if
end if
cSE Process for each pollutant.
cSE nPol = 1 in Sept. 30, 1993 version.
do 70 iPol = 1, nPol
cSE PdBRtO is set to the emission rate when iR is the first
cSE receptor. This way each group, pollutant and HOUR has an
cSE emission rate assigned to it. If iAvPer is 1 then each iR
cSE gets assigned.
if (iR .eq. l.and.Edist(jg).gt.O)
PdBRt(jg,iPol,hr) = BatRate(jg,iPol,Edist(jg),sun)
if (iAvPer .eq. l.and.Edist(jg).gt.O)
PdBRt(jg,iPol,hr) = BatRate(jg,iPol,Edist{jg),sun)
cSE If the previous averaging period resulted in leftover periods
cSE (periods that were not used in the completed averaging period),
cSE the number of periods for each group and receptor was assigned
cSE to PrvLftO(jg,iR). The first "if ... then" statement of the
cSE following series of "if— then ... else" statements uses those
-------
cSE leftover periods in the next averaging period.
72 if (PrvLftO(jg,iR) .gt. 0) then
cSE For the first pollutant, increment PrvLftO(jg,iR) by 1 so that
cSE it now represents the number of periods combined to form a
cSE possible complete averaging period. For example, if the averaging
cSE period desired is 3 (i.e., iAvPer = 3) and during the last period
cSE which had a hit we had 2 periods left over, we add 1 to it to
cSE give us 3 hours in THIS (the current) period. We only want to
cSE add it during the loop of the first pollutant.
if (iPol .eq. 1) PrvLftO(jg.iR) « PrvLftO(jg,iR) + 1
cSE If we now have enough hours to form a complete averaging period
cSE process impSSG(iPol,iR) for this pollutant and this receptor.
cSE First add tot(jg,iPol,iR) to the current emission and switch
cSE data, tot(jg,iPol,iR) is the accumulated concentration from the
cSE left over periods for the current source group, pollutant, and
cSE receptor, usert, PdBRt(jg,iPol,hr) and state(jg,hr) have all been
cSE updated for the current situation.
cSE Divide impSSG(,) by the number of hours that make up an averaging
cSE period (i.e., iAvPer) to produce the average impact for the single
cSE source group.
cSE Reset tot(,,) to zero.
cSE Set "compl" to YES to indicate that an averaging period has
cSE been completed for this period.
if (PrvLftO(jg,iR) .eq. iAvPer) then
impSSG(iPol,jg) = tot(jg,iPol,iR) + usert *
PdBRt(jg,iPol,hr) * state(jg,hr)
impSSG(iPol,jg) = impSSG(iPol,jg) / iAvPer
tot(jg,iPol,iR) =0.0
compl = YES
cSE When the last pollutant has been processed, check to see if
cSE this is the last receptor. If it is, we need to assign JK
cSE to the period we got up to when a complete averaging period
cSE was formed. JK will be used the next time this subroutine
cSE is entered.
cSE If iPriod is less than the number of periods skipped (which means
cSE that an averaging period has been completed prior to using up
cSE all the skipped periods) set tera(jg) and SK to YES, other-
cSE wise set tera(jg) to NO so that iStart will not be adjusted
cSE by JK on the first time around the next period.
if (iPol .eq. nPol) then
if (iR .eq. nRec) then
cSE If MEEm = YES, tera(l) must also be assigned to YES because
cSE when tera() is used to make the decision to skip the ON/OFF
cSE processing, it sees "jg" only as 1. We must make sure that
cSE it is set properly.
cSE When an averaging period is completed before using up all
cSE the hours from 1 though iSkip, scndskp is assigned to the
cSE difference between iSkip and the last iPriod used to complete
cSE the completed averaging period (i.e., scndskp = iSkip - iPriod).
cSE As always, the program will process all receptors and determine
cSE if there are any exceedances for the completed averaging period.
-------
cSE It will then start on the next averaging period beginning with
cSE the next available hour. Without scndskp, the program would
cSE check to make sure that there was enough hours in iSkip to
cSE complete an averaging period. This would be true even on the
cSE second time around in some cases because iSkip does not change.
cSE "scndskp" has to be used instead of "iSkip"
.eg. YES) tera(l) = YES
iPriod
»= YES
= iSkip - iPriod
a NO
a iAvPer
if (iPriod .It. iSkip) then
if (MEEm
JK =
tera(jg)
SK = YES
scndskp
else
tera(jg)
scndskp
end if
end if
cSE The previously left over periods have now been used; set
cSE PrvLftO(jg,iR) back to 0 and return to CaExEx to determine
cSE if the averaging period for this source group and receptor
cSE exceeds the thresholds. Return without processing the
cSE remaining skipped periods if MEEm = NO. The remaining periods
cSE will be taken care of later.
cSE If MEEm = YES, go to statement 70 to continue processing the
cSE remaining source groups before we return to subroutine CaExEx.
cSE imark is set to YES to indicate at the end of this loop that
cSE we must return to CaExEx.
then
PrvLftO(jg,iR) = 0
if (MEEm .eq. YES .and. x .ne. nSG)
imark = YES
goto 70
else
return
end if
end if
cSE If we still have not completed an averaging period, add the
cSE current calculated concentration to the accumulated concentration.
else
tot(jg,iPol,iR) = tot(jg,iPol,iR)
PdBRt(jg,iPol,hr) * state(jg,hr)
end if
usert
cSE This is the second in a series of four "if ... then ... else"
cSE statements. If there were no previously left over periods AND
cSE the current period {iPriod) is greater than the difference
cSE between the number of skipped periods and the number of
cSE hours in the desired averaging period AND then number of
cSE skipped periods minus one less then the current period
-------
is less than or equal to the number of hours in an averaging
>eriod AND there are no left over periods, then we do the
Allowing.
.odltiply the concentration (usert) by the emission
rate for this source group, pollutant, and hour, and by
the switch indicating if this source group is ON or OFF.
If it is OFF impSSG(,,) will be 0.
When we encounter the last skipped period, calculate the
average impact.
else if (PrvLftO(jg,iR) .eg. 0 .and. iPriod .gt.
(iSkip-iAvPer) .and. (iSkip-(iPriod-1) .le.
iAvper) .and. leftovr(jg,iR) .eq. 0 .and. iSkip .ge.
iAvPer .and. scndskp .ge. iAvPer) then
impSSG(iPol,jg) = impSSG(iPol,jg) + usert *
PdBrt(jg,iPol,hr) * state (jg,hr)
if (iPriod .eq. iSkip) then
impSSG(iPol,jg) = impSSG(iPol,jg) / iAvPer
compl = YES
if (iR .eq. nRec) scndskp = IAvPer
end if
cSE The following is the third of a series four "if ... then ...
cSE else" statements. The relevant code will be executed when
cSE there are no periods left over from the previous period that
cSE had a "hit" AND when the number of skipped periods is less
cSE than the averaging period (this occurs more often with larger
cSE averaging periods such as a 24 hour averaging period.)
cSE Add to tot(jg,iPol,iR) the calculated impact for this
cSE period.
cSE If it is the last skipped period AND the last pollutant,
cSE we can set PrvLftO(jg,iR) to iSkip so that the next time
cSE around we know that there are skipped periods which did
cSE not get incorporated into an averaging period.
else if (PrvLftO(jg,iR) .eq. 0 .and. (iSkip .It.
iAvPer .or. scndskp .It. iAvPer)) then
tot(jg,iPol,iR) = tot(jg,iPol,iR) + usert *
PdBRt(jg,iPol,hr) * state (jg,hr)
if (iPriod .eq. iSkip .and. iPol .eq. nPol) then
if (scndskp .It. iAvPer) then
PrvLftO(jg,iR) = scndskp
else
PrvLftO(jg,iR) = iSkip
end if
end if
cSE This is the last of four "if ... then ... else" statements.
cSE If none of the other situations occur, the following code is
cSE executed.
cSE We are only concerned with number of periods that are left
cSE over. In other words the periods that did not fit into
cSE an averaging period. The period (iPriod) that is equal to
cSE iSkip contains the concentration where a. "hit" occurred, so
cSE we must save it in tot(,,) to be use in the next round.
cSE Set PrvLftO{,) to the current number of periods left over.
else if (iPriod .gt. iSkip-leftovr(jg,iR) .or. iSkip
.It. iAvPer) then
tot(jg,iPol,iR) = tot(jg,iPol,iR) + usert *
-------
PdBRt(jg,iPol,hr) * state(jg,hr)
if (iPol.eq.nPol.and.iPriod.eg.iSkip)
PrvLftO(jg,iR)»leftovr(jg,iR)
end if
70 continue
cSE If MEEm « YES and
cSE "x" is not equal to the last source group, go back to
cSE statement 71 to work on the next source group.
if (MEEm .eq. YES .and. x .ne. nSG) goto 71
cSE If MEEm = YES and imark was set to YES, reset imark to NO,
cSE and return to CaExEx with out processing the remaining
cSE skipped periods. This will be taken care of later (after
cSE all receptors have been processed for this period.)
if (MEEm .eq. YES .and. imark .eq. YES) then
imark = NO
return
end if
cSE If the last period (iPriod) is equal to iSkip, then there is
cSE no skipped periods that were missed so we can set tera(jg) to
cSE NO. Also set MK(jg) to NO if this is the last receptor so
cSE that on the next entrance to this subroutine, iStart does
cSE not begin where JK left off.
if (iPriod .eq. iSkip) then
if (MEEm .eq. YES) tera(l) » NO
tera(jg) = NO
if (iR .eq. nRec) then
if (MEEm .eq. YES) MK(1) = NO
MK(jg) = NO
end if
end if
cSE Reset jg to the source group that is on for this period if a
cSE source group is on. Otherwise set it to the first source group.
cSE This is only done when MEEm = YES.
if (MEEm .eq. YES) then
if (nxtiR(Prd) .ne. 0) then
jg = nxtiR(Prd)
else
jg • i
end if
end if
30 continue
return
end
cSE end of subroutine BatPr
c===3 subroutine RandNo ================1================================
c
c Generate random numbers for purposes of simulating intermittent toxics
c emissions.
c
c (Written by John P. Nordin and Gary W. Lundberg, SAI.)
c
-------
c
c
c-
c
c
c-
c
c
c
c
c
c
c
c
c
c
c
c
c
Subroutine RandNo is called by subroutine OnOff.
subroutine RandNo (nRands, rands)
Declarations, etc.
Description of passed parameters.
integer
nRands
real
rands (nRands)
! number of random numbers to generate;
2 must be even
! vector of real numbers; after subroutine
! execution, contains uniformly
! distributed numbers between 0 and 1.
c
c
c
c
c
c
c
c-
c
c
c
integer
nRands
real
rands (nRands)
Local variables.
integer
i, j,
kk,
m,
kount,
remdr
Initializations.
integer r(128)
save r
data r /31215,1416,28516,13922,1804,37,854,30144,-26368,119*0/
Create the random numbers,
m « nrands/128
kount s m*l28
remdr = nrands - kount
if (m .It. 1) goto 33
do 20 i = l,m
kk » 128*(i-1)
call Tausl5(r)
do 25 j = 1,128
rands (kk+j) = (l.+float(r(j))) / 32768.
25 continue
20 continue
33 call TauslS(r)
do 30 i » 1,remdr
rands(kount+i) = (l.+float(r(i)))/3276S.
30 continue
-------
c
return
end
c
c end subroutine RandNo
c
c»ss subroutine TauslS ==«==»=»«=«============================:
c
c Help subroutine RandNo generate random numbers.
c
c (Written by John P. Nordin and Gary W. Lundberg, SAI.)
c
c Subroutine TauslS is called by subroutine RandNo.
c
c- - -
c
subroutine TauslS (s)
c
c •
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . s(128) I vector of integers
c
integer
s(128)
c
c Description of local variables.
c
c integer
c . i, nb, nn I variables used by TauslS
c
integer
i, nb, nn
c
c - - -
c
c Do it.
c
c s(9) is negative only on first call to TauslS.
c
if (s(9) .It. 0) goto 30
c
c Main recurrence overwrites s(i+128) on s(i). Two loops and a
c statement are used so that no subscript exceeds 128.
c
do 10 i » 1,16
s(i) = ieor (s(i), ieor (s(i+l), s(i+112)) )
10 continue
do 20 i = 17,127
s(i) a ieor(s(i),ieor(s(i+l) ,s(i-16)))
20 continue
8(128) - ieor(s(128),ieor(s(l) ,s(112)))
return
c
c Initializing recurrence (used only on first call):
-------
c If s is set on first call of TauslS to:
C 31215, 1416,28516,13922, 1804, 37, 854,30144, -26368,119*0;
c then after first call s(l) to s(30) should be:
C 31215, 1416,28516,13922, 1804, 37, 854,30144,27699, 824,
c 3046,28554, 3460, 388, 9346,29289,12977, 439,14752,24447,
C 21860,20839,21806,22474,16047, 4012,14559, 6241,26571, 873
c
c s(9) should be set to -26368 on machines using two's complement
c representation (prime, ibm360/370) and -26367 on those
c which uses one's complement notation (cdc7600, univac).
c When first installing on a new machine check that the result
c of the first call is as listed above.
c
30 nn = s(9)
do 40 1=9,128
nb - s(i-8)/128
s(i) = iand (32767,ieor (s(i-l),nn+nb))
nn = s(i-8)*256
40 continue
c
return
end
c
c end subroutine TauslS
c
c==== subroutine WrExEx =ssr====s====ss=====s=ss==========«===s====
c
c Write out results of exex calculation to printfile, either in
c tabular form.
c Subroutine WrExEx is called by subroutine DoExEx.
c
subroutine WrExEx (prtFil, HEMFil, yr, lyr, grp, LA, mG, mR,
nXR, mH, nH, INK, iYr, nP, ICODE1, rHMC)
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . prtFil, ! print fileunit
c . HEMFil, ! HEM output fileunit
c . yr, ! index of current metyear (yr a 0 -->
c ! do summary for all metyears)
c . grp, ! current source group # (grp =0 -->
c ! do summary for all source groups)
c . IT, ! flag to make tabular output or not,
c ! and which kind of table to prepare
c . LA, ! switch determining whether additive model used
c . mR, ! max # receptors
c . nXR, i # receptors per ring or row
c . mH, ! max # hets
c . nH, ! # hets
c . 1NH ! logical # hets
-------
c
c (In the following three array names, the 'Wr' identifies each
c variable as belonging to WrExEx.)
c
c real
c . rHWr (mR,mH), ! exex array by receptor, by het, either
c I for a single group and/or year or for
c ! all groups and/or years combined
c . mxHWr (nH) ! max exex array by het, same comment as
c ! for rHWr
c
integer
prtFil, HEMFil, yr, grp, LA, mG,
mR, nXR, mH, nH, 1NH, nP
real
ICODEl(mG,mH,mR), rHMC(mR,mH)
c
c (In the following three array names, the 'Wr' identifies each
c variable as belonging to WrExEx.)
c
c
c Description of local variables.
c
c integer
c . iH, ! index of current het
c logical
c . noExEx ! true if all elements of mxHWr are 0,
c ! false otherwise
c
logical
noExEx
c
c - — -
c
noExEx = .FALSE.
call WrTabl (prtFil,grp,nP,yr,iYr,ICODEl,rHMC)
return
end
c
c end subroutine WrExEx
c
cSE== subroutine WrTabl ===============================================
cSE called from subroutine WREXEX
subroutine WrTabl (prt,iGW,nP,yr,iYr,xXRCGY,xXTab6)
cSE Called from subroutine WrExEx
c integer
c . iH, 1 index of current het
c . iR, ! index of current receptor
c . iYr 1 current year
c real
cSE . xXRCGY (MREC,MHET) 1 exex by receptor, by cone, cut range,
-------
cSE ! by source group for one metyear.
cSE . nRGrd 1 the number of receptors modeled that
cSE ! are in the grid. The remaining
cSE i receptors will be discrete.
include
'TOXX.INS'
parameter (NPAIR=100)
integer
prt,TabNum
integer
indexX(MREC), indexY(MREC)
integer
irow, icolm
integer
nRTab, nRGrd, totRec, RStrt, iGw
integer
iR, Yr
integer
nRRA
real
xXRCGY(MGRP,MHET,MREC) ,xXTab8 (MGRP,MHET,MREC) ,
xXTabll(MGRP,MHET,MREC),
xXTabl(MREC,MHET),xXTab6(MREC,MHET),xXTab!2(MREC,MHET),
XXTab?(MREC, MHET),xXTab9(MREC,MHET),xXTablO(MREC, MHET),
coordX(MREC), coordY(MREC), DTMX(MREC), UTMY(MREC),
eH(MHET),Range(10),Direct(36)
character AreaType*9
character key*150, fmtstrg*30,LINE*9,LINE2*9
character*! PFEED*l,SWCrn,SECrn
logical Ioop2
cSE if Ioop2 is .true, then loop through to statement 64
if (Ioop2) goto 64
loop2=.TRDE.
FFEED = char(12)
SWCrn = char(200)
SECrn * char(188)
write (LINE(:),'(9(Al))') (char(196),i=l,9)
write (LINE2(:),'(9(Al))') (char(205),i=l,9)
CSE READ IN RECEPTOR LOCATION DATA.
cSE Set marker iDiscrt to 1 indicating that there was not a grid system
cSE modeled. If the scan of the ISCST2 output file indicates that
cSE a grid system was modeled, it will be changed to zero. Can only
cSE model one grid system with ISCST2 when using it with TOXX.
if (iYr.eq.l) then I only do it for the first year modeled.
-------
cSE Set iDiscrt to 1 to indicate that no grid system has been
cSE identified yet.
iDiscrt=l
05 read (1,'(alSO)',end=64) key
if (key(:19).eq.' BOUNDARY RECEPTORS') then
AreaTypes'BOUNDARY'
goto 10
else if (key(50:77).eq.'DISCRETE CARTESIAN RECEPTORS') then
AreaType='DISCART'
goto 20
else if (key(47:70).eq.'ORIGIN FOR POLAR NETWORK') then
AreaType='GRIDPOLAR'
goto 30
else if (key(47:67).eq.'X-COORDINATES OF GRID') then
AreaType='GRIDCART'
goto 40
else
goto 05 ! NO MATCH. Continue looking.
end if
goto 05
C************* BOUNDARY RECEPTORS SECTION *****************************
10 iDiscrt = 0 ! indicates a grid system was modeled.
read (1,*)
read (1,*)
do iR = 1, 36, 3
read (1,111) UTMX(iR),UTMY(iR) ,UTMX(iR+l),UTMY(iR+1),
UTMX(iR+2),UTMY (iR+2)
end do
nRGrd=36 ! FOR BOUNDARY RECEPTORS, ISCST2 MODELS FOR 36 RECEPTORS
goto 05
111 format (t6,f!0.2, tl8,f!0.2,t5l,fl0.2,tS3,f!0.2,t96,flO .2,
tl08,f!0.2)
C************** DISCRETE CARTESIAN RECEPTORS SECTION ******************
20 do i=l,3
read (1,*)
end do
21 read (1,'(lx,al50)') key
iDB=6 ! iDB is the first character to look at in the key variable
iDE=14 ! iDE is the last character to look at in the key variable
if (key(7:l2).eq.'ISCST2') then ! when key = ISCST2, stop reading
goto 24
else if (key(iDB:iDE).ne.' ') then
iR=iR+l
read (key(iDB:iDE),'(f9.1)') UTMX(iR)
iDBaiDB+11
iDE=iDE-Hl
read (key(iDB:iDE),'(f9.1)') UTMY(iR)
iDB=iDB+44
iDE=iDE+44
if (key(iDB:iDE).ne.' ') then
iRaiR+l
read (key(iDB:iDE),'(f9.1)') UTMX(iR)
iDB-iDB+11
iDE=iDE+ll
read (key(iDB:iDE),'(f9.1)') UTMY(iR)
end if
-------
end if
goto 21
cSE Set the number of discrete receptors to the number of receptors
cSE iR is equal to.
24 iiRDiscsnRDisc+iR-nRGrd
goto 05
C************ POLAR GRID RECEPTORS SECTION ****************************
30 ioiscrt = 0 ! indicates a grid system was modeled.
read (1,'(t41,f10.2,t65,f10.2)') XOrig,YOrig
do i=l,4
read (1,*)
end do
read (1,'(Ix,al50)'} key
c iOB == index of the range or direction beginning position
c IDE == index of the range or direction ending position
c iDRN == index of the range number
c iDNN == index of the direction number
iDB=5
iDE=14
iDRN=l
31 if (key(iDB:iDE).ne.' ') then
read (key(iDB:iDE),'(flO.l)') Range(iDRN)
iDRN=iDRN+l
iOBsiDB+11
iDE=iDE+ll
goto 31
end if
iDRN=iDRN-l
do i=l,4
read (1,*)
end do
iDDN=l
32 read (1,'(Ix,al50)') key
iDB=5
iDE=14
if (key(7:12).ne.'ISCST2') then ! INDICATES THERE ARE NO MORE RADIALS
33 if (key(iDB:iDE).ne.' ') then
read (key(iDB:iDE),'(flO.1)') Direct(iDDN)
iDDN=iDDN+l
iDB=iDB+ll
iDE=iDE+ll
goto 33
else
goto 32
end if
end if
iDDN=iDDN-1
c Calculate the number of receptors in the polar grid.
nRGrd = iDRN*iDDN
iR=0
do i=l,iDDN ! LOOP THROUGH THE RADIALS
-------
Convert degrees to radians
Direct (i) * (2*3 . 1415927) / (360 . 0/Direct (i) )
do j»l,iDRN I LOOP THROUGH THE RANGES
UTMX(iR) .Range (j) * sin (Direct (i) ) ! CONVERT TO CART.
COORD
if (ABS(OTMX(iR)) -It. 0.001) UTMX(iR)=0.0
UTMY(iR)*Range(j) * cos (Direct (i) ) ! CONVERT TO CART.
COORD
if (ABS(UTMy(iR)) .It. 0.001) UTMY(iR)=0.0
end do
end do
goto 05
C********** CARTESIAN GRID RECEPTORS SECTION **************************
40 iDiscrt = 0 ! indicates a grid system was modeled.
do i=l,2 ! skip over 6 lines of ISCST2 output file.
read (1,*)
end do
read (1, ' (lx,a!50) ' ) key
c iDB == index of the range or direction beginning position
c IDE == index of the range or direction ending position
c iDRN == index of the range number
c iDNN == index of the direction number
iDB=5
iDE=14
iDRN=l
41 if (key(iDB:iDE) .ne.' ') then
read (key(iDB:iDE) , ' (flO.l) ' ) Range(iDRN)
iDRN=iDRN+l
iDB=iDB+ll
iDE=iDE+ll
goto 41
end if
iDRN=iDRN-l
do i=l,4
read (1,*)
end do
iDDN=l
42 read (1, ' (Ix,al50) ' ) key
iDB=5
iDE=14
if (key(7:12) .ne. ' ISCST2' ) then ! INDICATES THERE ARE NO MORE RADIALS
43 if (key(iDB:iDE) .ne.' ') then
read (key(iDB:iDE) , ' (flO.l) ' ) Direct(iDDN)
iDDN=iDDN+l
iDB=iDB+ll
iDE=iDE+ll
goto 43
else
goto 42
end if
end if
iDDn=iDDN-l
-------
Calculate the number of receptors in the polar grid.
nRGrd « iDRN*iDDN
iR=.0
do i»l,iDDN ! LOOP THROUGH THE Y COORDINATES
do j»l,iDRN ! LOOP THROUGH THE X COORDINATES
UTMX (iR) =Range ( j )
if (ABS (UTMX (iR)) .It. 0.001) UTMX (iR) =0.0
UTMY (iR) -Direct (i)
if (ABS(UTMY(iR)) .It. 0.001) UTMY (iR) =0.0
end do
end do
goto 05
end if ! end if for if (iYr.eq.l) then
64 continue ! STANDALONE CONTINUE
close (1)
cSE Reset the counter for the new source group.
cSE nRGrd is the number of receptors in the receptor grid. This number
cSE does not include the discrete receptors.
c If there is only one source group modeled, iGW ia passed over as
c zero. We want to let iGW indicate that it is the one and only
c source group.
iGG.iGW
if (iGW.eq.O) iGW = 1
17 nRTab = nRGrd
totRec = nRGrd + nRDisc
RStrt = 1
cSE Loop through all the source groups. iGW is an indicator of the
cSE current source group. This will be used in comparison with the
cSE decoded source group number.
50 continue ! standalone continue
cSE Sort the x- and y- receptor coordinates only once and only if
cSE a grid system was modeled.
cSE IGW will be zero when only one source group is modeled.
if (iGW.eq.l.or.iGW.eq.O.and.iDiscrt.eq.O.and.iYr.eq.l) then
call SortTi2 (nRTab,UTMX,indexX)
call SortTi2 (nRTab,UTMY,indexY)
irow a Q
icolm = 0
cSE call xyTab to determine where the x- and y- coordinates go
cSE on the output table.
call xyTab (UTMX,UTMY,coordX,coordY,RStrt,nRTab,indexX,
indexY,irow,icolm)
-------
c Area of modeling domain converted into square kilometers.
if (AreaType.eq.'DISCART" .or. AreaType.eq.'GRIDCART') then
GArea = ABS(((coordX (icolm)-coordX(1)) *
(coordY(irow)-coordY(1)))/1000.0**2)
else if
(AreaType.eq.'GRIDPOLAR'.or.AreaType.eq.'DISCPOLAR')
then
GArea » (3.1415927 * (Range(iDRN)-XOrig)**2)
/1000.0**2
end if
do iH=l,logiNH
eH(iH)=effHET(iH)*10**6
end do
end if
cSE Zero out the array that contains the maximum number of exex
cSE for each threshold and array that contains the number of exex
cSE for each receptor and threshold, for this group.
75 do 110 iH = 1, logiNH
if (lYrly.eq.l) then
do iR = RStrt,nRTab
xXTabl(iR,iH) = 0.
if (iGW.eq.l) then
xXTabld(iR,iH) = 0.
xXTab!2(iR,iH) = 0.
end if
end do
end if
110 continue
do 210 iH = 1, logiNH
do 210 iR = RStrt, nRTab
xXRCGY(iGW,iH,iR) = xXRCGY(iGW,iH,iR) / nSim
xXTab6(iR,iH) = xXTabS(iR,iH) / nSim
210 continue
do 500 iH = 1, logiNH
c
cSE Fill array to be printed out in Table.
do 517 iR = RStrt, nRTab
xXTab9(iR,iH)=xXTab9(iR,iH) + xXTabS(iR,iH) ! all
grps, all yrs
xXTabll(iGW,iH,iR)=xXTabll(iGW,iH,iR)+xXRCGY(iGW,iH,iR)
xXTab!2(iR,iH)=xXTabl2(iR,iH)+xXTab6(iR,iH)
if (iDiscrt.eq.1) then
do i!nc=iH,logiNH
xXTabl(iR,iH) = xXTabl(iR,iH) +
xXRCGY(iGW,iInc,iR)
xXTab7(iR,iH) = xXTab7(iR,iH) +
xXTab6(iR,ilnc) ! all grp all yrs
xXTablO(iR,iH) = xXTabl0(iR,iH) +
xXTabS(iR,i!nc) ! all grp one year
c xXTabS () for single group, all years.
xXTab8(iGW,iH,iR) = xXTabS(iGW,
-------
+ xXRCGY(iGW,i!nc,iR)
end do
else
cSE loop on output table rows.
do 519 Y « 1, irow
if (OTMY(iR).gt.(coordY(Y)+0.02).or.UTMY(iR)
.It.(coordY(Y)-0.02)) then
goto 519
end if
do 520 X * 1, icolm
if (UTMX(iR).gt.(coordX(X)-0.02) .and.
UTMX(iR).It.(coordX(X)+0.02)) then
do i!nc=iH,logiNH
xXTabl{iR,iH) = xXTabl(iR,iH) +
xXRCGY(iGW,i!nc,iR)
xXTab7(iR,iH) = xXTabV(iR,iH) -t-
xXTabfi(iR,ilnc) ! all grp all yrs
xXTabl0(iR,iH) = xXTabl0(iR,iH)
+
xXTab6(iR,i!nc) ! all grp one year
c xXTaba {) for single group, all years.
xXTab8(iGW,iH,iR) = xXTabS(iGW,
iH,iR) + xXRCGY(iGW,ilnc,iR)
end do
EXIT
end if
520 continue
519 continue
end if
517 continue
500 continue
c*****This 500 series section prints out table for each source group
c*****for each year as they are processed if the user requests output from
c*****each year modeled and there are more than one source groups
c*****and more than one year modeled.
c If the user wants output for each year and there is more than
c one year modeled, do the 500 and 600 series.
if (lYrly.eq.l.and.nYear.gt.l) then
if (iDiscrt.ne.1.and.iGP.eq.O) then
call WrTab (500,irow,icolm,istprt,nColCR,iGW,
RStrt,nRTab,DTMY,OTMX,coordY,coordX,eH,xXTabl,
xXRCGY,xXTab?,xXTabll,fmtstrg,GArea,nP,prt,yr,TabNum)
else ! print out for discrete receptors.
if (iGP.eq.O) then
write (prt,'(al)') FFEED
TabNum=TabNum+l
-------
write (prt,'(//25X,A6,I2//)') 'TABLE ',TabNum
write (prt,9102) sName(iGW),yr
write (prt,*)
write (prt,9110) (eH(iH),iH«l,logiHH)
do iR=RStrt,nRTab
do iH=»l, logiNH
xXTabl(iR,iH)=xXTabl(iR,iH)
end do
write (prt,9100)
iR,DTMX(iR) ,OTMY(iR) , (xXTabl (iR,iH) ,iH=
1,logiNH)
end do
end if
end if
£*********************** goo SERIES *******************************
c*****This section will print out a table for each year for all source
c*****source groups combined when the current source group is equal
c*****to the last source group modeled and only if there is a total of
c*****more than one source group modeled.
if (iGW.eq.nSG.and.nSG.gt.l) then
if (iDiscrt.ne.l) then
call WrTab (600,irow,icolm,istprt,nColCR,iGW,
RStrt,nRTab,UTMY,DTMX,coordY,coordX,eH,xXTablO,
xXRCGY,xXTabl2,xXTabll,fmtstrg, GArea,nP,prt,yr,TabNum)
else
write (prt,'(al)') FFEED
TabNum=TabNum+1
write (prt,'(//25X,A6,I2//)') 'TABLE ',TabNum
write (prt,9104) yr
write (prt,*)
write (prt,9110) (eH(iH),iH=l,logiNH)
write (prt,*)
do iR m RStrt, nRTab
do iH=l,logiNH
xXTablO(iR,iH)=xXTablO(iR,iH)
end do
write (prt,9100)
iR,DTMX(iR),OTMY(iR) , (xXTablO(iR,iH),
iH=l,logiNH)
end do
end if
end if
end if ! end if for if (lYearly.eq.l) then
c Begin working on discrete receptors if there are any and they
c haven't already be processed.
if (nRec.gt.nRTab) then
RStrt = nRTab+1
nRTab * nRec
iDiscrt=l
goto 75
else
iDiscrt=0
-------
end if
c If the source group index iGW is equal to the total number of
c source groups modeled, then we have loop though all the source
c groups for the current year and can output all source groups
c combined data for the current year.
if (iGW.eq.nSG.and.iYr.eq.nYear) then
nRTab = nRGrd
RStrt * 1
iDiscrt = 0
76 if (nSG.gt.l.and.iGP.eq.O) then
if (iDiscrt.ne.l) then
call WrTab (700,irow,icolm,istprt,nColCR,iGW,
RStrt,nRTab,UTMY,DTMX,coordY,coordX,eH,xXTabl,
xXTabS,xXTab7,xXTabl1,fmtstrg,GArea,nP,prt,yr,
TabNum)
else
if (iGP.eq.O) then
do iGW2 « 1, nSG
write (prt,'(al)') FFEED
TabNum=TabNum+1
write (prt,'(//25X.A6,12//)') 'TABLE ',TabNum
if (nYear.gt.l) then
write (prt,9101)
sName(iGW2),iYear(1),
iYear(nYear)
else
write (prt,9102) sName(iGW2),yr
end if
write (prt,*)
write (prt,9110) (eH(iH),iH=l,logiNH)
write (prt,*)
do iR = RStrt, nRTab
do iH=l,logiNH
xXTabS(iGW2,iH,iR)=xXTab8(iGW2,iH,iR)/
nYear
end do
write (prt,9100)
iR,DTMX(iR),DTMY(iR),
(xXTab8(iGW2,iH,iR),iH=l,logiNH)
end do
end do
end if
end if
end if ! only do the above 700 series if nSG > 1.
if (iDiscrt.ne.l) then
call WrTab (800,irow,icolm,istprt,nColCR,iGW,
RStrt,nRTab,OTMY,DTMX,coordY,coordX,eH,xXTab7,
xXRCGY, xXTab9, xXTabl 1, fmtstrg, GArea, nP, prt, yr, TabNum)
else
write (prt,'(al)') FFEED
TabNumsTabNuin+1
write (prt,'(//25X,A6,I2//)') 'TABLE ',TabNum
if (nYear.gt.1) then
write (prt,9103) iYear(1),iYear(nYear)
-------
else
write (prt,9104) yr
end if
write (prt,*)
write (prt,9110) (eH(iH),iH=l,logiNH)
write (prt,*)
do iR = RStrt, nRTab
do iH=l,logiNH
xXTab?(iR,iH)=xXTab7(iR,iH)/nYear
end do
write (prt,9100) iR,UTMX(iR),UTMY(iR),(xXTabV(
iR,iH),iH*l,logiNH)
end do
end if
9101 format (tS,'Expected Exceedances for discrete receptors ',
'above thresholds:',/
t5,'Source: ',a20,/
t5,'Years: ',i4.4,'-',i4.4)
9102 format (tS,'Expected Exceedances for discrete receptors ',
'above thresholds:',/
tS,'Source: ',a20,/
t5,'Year: ',i4.4)
9103 format (tS,'Expected Exceedances for discrete receptors ',
'above thresholds:',/
t5,'All sources combined: ',/
t5,'Years: ',i4.4,'-',i4.4)
9104 format (t5,'Expected Exceedances for discrete receptors ',
'above thresholds:',/
tS,'All sources combined: ',/
t5,'Year: ',i4.4)
9110 format (t6,'Rec #',5x,'X-Coord',8x,'Y-Coord',t49,
6C>',f6.1,3x))
if (nRec.gt.nRTab) then
RStrt = nRTab+1
nRTab = nRec
iDiscrtsl
goto 76
else
iDiscrt=0
end if
end if
c DEALLOCATE (indexX,indexY,STAT=error)
return
9100 format (t5,i3,5x,fl0.2,5x,f!0.2,10x,6(f8.2,2x))
end
cSE== end subroutine WrTabl =====================================:=======
cSE== subroutine WrTab ================================================
cSE subroutine WrTab called by subroutine WrTabl
subroutine WrTab (LNNum,irow,icolm,istprt,nColCR,iGW,
RStrt,nRTab,UTMY,DTMX,coordY,coordX,eH,TabA,TabAA,
TabBB,TabCC,fmtstrg,GArea,nP,prt,yr,TabNum)
-------
include
'TOXX.INS'
integer
LNNum,iH,prtAlr,istprt,nCo!CR,icolm,RStrt,nRTab,
X,Y,iRl,iblnc,prt,Yr,iStrt,iEnd,TabNum
real
TabA(MREC,MHET) ,TafaAA(MGRP,MHET,MREC) ,TabCC(MGRP,MHET,MREC) ,
TabBB(MREC,MHET) ,DTMX(MREC) ,ETTMY(MREC) , coordX (MREC) ,
coordY(MREC),eH(MHET),GArea
cNOTE buff is dimensioned to 20 + 1, the 1 is for the coordY variable
cNOTE that is printed out.
character
buff(20+1)*13,fmtstrg*30,fmtstrg3*30,FFEED*!,LSpc*l,RSpc*l,
fmtstrg4*120
FFEED = char(12)
iTotGrp a 1
if (LNNum.eq.700) then
iStrtal
iEnd=nSG
else
iStrt=iGW
iEnd=iGW
end if
do 10 iG2=iStrt,iEnd
do 516 iH =1, logiNH ! loop on HET's
iTablchk=0
do 530 iR= RStrt, nRTab
if (LNNum.ne.700) then
if (TabA(iR,iH) .gt. 0.) then
iTablchk=l
exit
end if
else
if (TabAA(iG2,iH,iR) .gt. 0.) then
iTablchk=l
exit
end if
end if
530 continue
if (iTablchk .eq. 0) then
write (prt,9105) iG2, iH
goto 516
end if
TabB * 0.0
prtAlr=0 ! set # of receptors PRinTed ALReady to 0
istprt=0 ! set the Index of the STart PRinT to 0
nColCR=0 ! set the Number of COLumns before Carriage
Return 0
-------
78 if (prtAlr.lt.icolm) then
istprt=prtAlr+l
if ((icolm-prtAlf)Tlt.MRECPR) then
nColCR=icolm
prtAlr=prtAlr+ (icolm-prtAlr)
else
nColCR=nColCR+MRECPR
prtAl r =prtAl r+MRECPR
end if
call WrTHdrl
(LNNum, Yr,iH,coordX,prt,istprt,nColCR,eH,iGW,
iG2 , fmtstrg, icolm,TabNum)
do 591 Y = irow, 1, -1 ! loop on the rows in the
table
call TABLINE
(10 ,istprt,nColCR, icolm, fmtstrg, prt,LSpc,
RSpc)
do ib!nc=l,MRECPR+l
buff(iblnc) = '
end do
iRl=RStrt-l
599
c The following if statement is basically the same
c as saying if OTMY = coordY. The + - 0.02 takes
c care of any trig. calc. differences.
if (
(DTMY(iRl) .gt. (coordY (Y) +0.02)
.or.DTMY(iRl) .It. (coordY (Y) -0.02) )
) goto 599 . •
iblnc=l • ' .
write (buff (iblnc) , ' (2X, F9 . 1 , 2X) ' ) coordY (Y)
do 593 X=istprt,nColCr
iblnc=iblnc+l
do 590 iR = RStrt, nRTab
if
((UTMX(iR) .gt. (coordX(X) -0.02) .and.
OTMX(iR) .It. (coordX(X)+0.02)) .and.
(UTMY(iR) .gt. (coordY (Y) -0.02)
.and.DTMY(iR) .It. (coordY ( Y) +0 .02) ) )
then
if
( LNNum . e q . 5 0 0 . or . LNNum . eq . 6 0 0 . or .
LNNum. eq. 800) then
if
(LNNum. eq. 800) ---------------------- — -
TabA(iR, iH) =TabA(iR, iH) /nYear
TabB=TabB+TahA ( iR, iH)
write
(buff (iblnc),' (2X,F7.1)')
TabA(iR,iH)
if
-------
(TabA(iR,iH) .ge.1.0) iRxX-iRxX+1
else if (LNNum.eq.700) then
TabB-TabB+TahAA(162,iH,iR)
write
(buff(iblnc),'(2X,F7.1)')
TabAA(iG2,iH,iR)
- - if
(TabAA(iG2,iH,iR) .ge.1.0) iRxX=»
iRxX+1
end if
EXIT
end if
590 continue
593 continue
write (fmtstrg3(:),'(a8,i2,all)')
'(al,a!3,',iblnc-l,'(a9),lx,al)'
write (prt,fmtstrg3) LSpc,(buff(i),i=l,iblnc),RSpc
591 continue
call TABLING (20,istprt,nColCR,icolm,fmtstrg,prt,LSpc,
RSpc)
goto 78
end if .
if (GArea.ne.O.) write
(prt,'(//T5,A,F10.5,A)') 'Total area of grid: ',GArea,
' sq. km.'
write (prt,'(T5,A,A,13)') 'Number receptors with at least
/
i
'one exceedance: ',iRxX
write (prt,1510) TabB
if(GArea .ne. 0.) then
TabB = TabB/GArea
end if
if (GArea.ne.O.) write (prt,1517) TabB
if(nRTab .eq. 0) then
TabB =0.
else
TabB m TabB/nRTab
end if
if (GArea.ne.O.) then
TabB = TabB * GArea
write (prt,1520) TabB
else
write (prt,1520) TabB ! when BOUNDARY file
end if • .-
516 continue ! loop on HET's
1510 format (T5,'Total exceedances in above grid: ',F10.5)
1517 format (T5,'Average exceedance in above grid: ',F10.5,' per sq.'
' Jon.')
1520 format (T5,'Average exceedances per receptor in above grid: '
,F10.5, ' exceedances per receptor.')
c Write out frequency table.
NoTab=0
do 518 iR = RStrt, nRTab
if (NoTab.eq.l) goto 518
-------
if UR.eq.l) then
do 523 iR2=RStrt,nRTab
do 524 iH«l,logiNH
if (LNNum.eq.500.and.TabAA(iGW,iH,iR2).gt.O..and.
iGP.eq.O) then
NoTab=0
goto 777
else if (LNNum.eq.700.and.TabCC(iG2,iH,iR2).gt.O.
.and.iGP.eq.O)
then
NoTafa=0
goto 777
else if ((LNNum.eq.600.or.LNNum.eq.800) .and.
TabBB(iR2,iH).gt.O.) then
NoTab=0
goto 777
end if
524 continue
523 continue
NoTab=l
goto 518
777 write (prt,'(al)') FFEED
TabNum=TabNuni+1
write (prt,'(//25X,A6,I2//)') 'TABLE ',TabNum
if (LNNum.eq.500.or.LNNum.eq.600.or.nYear.eq.l) then
write (prt,'(//a,a,14,a)')
' Number of exceedances within each HET ',
'category. (Year: ',yr,')'
else
write (prt,'(//a,a,i4,al,i4,a)') ' Number of exceed',
'ances within each HET category. (Years: ',
iYear(1),'-',iYear(nYear),') '
end if
if (LNNum.eq.500) then
write (prt,'(a,a20/)') ' Source: ',sName(iGW)
else if (LNNum.eq.700) then
write (prt,'(a,a20/)') ' Source: ',sName(iG2)
else
write (prt,'(a/)') ' All sources combined'
end if
write (prt,'(t53,a)') '(ug/mA3) '
if (logiNH.eq.l) then
inHET=l
write (fmtstrg4 (:) ,' (a!20) ') '(5x,"Rec#",
5x,''X-Coord'',8x,''Y-Coord'',t53, " 0.0- " ,3x,
">",f6.1)'
write (prt,fmtstrg4) eH(inHET)
else
inHET=logiNH-l
write (fmtstrg4(:) ,'(a80,il,a23)') '(5x,"Rec#",
5x,''X-Coord'',8x,''Y-Coord'',t53,''0.0-'',3x,',
inHET,' (£6.1, "-",3x) ,">",f6.1) '
write (prt,fmtstrg4) (eH(iH),iH=l,(inHET)),
eH(logiNH)
end if
-------
write (prt,1516) (eH(iH),iH=l,logiNH)
write (prt,*)
end if ! for if (iR.eq.l)
BeloweH = 0.
do iH=l,logiNH
if (LNNum.eq.500) then
BeloweH = BeloweH + TabAAUGW, iH, iR) ! xXRCGY
else if (LNNum.eq.700) then
TabCC(iG2,iH,iR) = TabCC(iG2,iH,iR) /nYear
BeloweH = BeloweH + TabCC(iG2,iH,iR) ! xXRCGY
else if (LNNum.eq.600) then
BeloweH = BeloweH + TabBB(iR,iH) ! xXTab6
else if (LNNum.eq.800) then
TabBB(iR,iH) = TabBB(iR,iH) / nYear
BeloweH = BeloweH + TabBB(iR,iH) ! xXTab9
end if
end do
BeloweH = nP/iAvPer - BeloweH
if (LNNum.eq.500) then
write (prt,1530) iR,UTMX(iR),DTMY(iR),BeloweH,
(TabAAUGW, iH, iR) , iH=l, logiNH)
else if (LNNum.eq.700) then
write (prt,1530) iR,DTMX(iR),DTMY(iR),BeloweH,
(TabCC(iG2,iH,iR),iH=1,logiNH)
else if (LNNum.eq.600.or.LNNum.eq.800) then
write (prt,1530) iR,DTMX(iR),DTMY(iR),BeloweH,
(TabBB (iR, iH) , iH=l, logiNH)
end if
BeloweH = 0.
518 continue
10 continue ! loop on iG2
9105 format (//t5,'No Expected Exceedances for source group ',11,
', threshold ',11,'.')
1500 format (2X,F9.1,2X,32(2X.F7.1))
1516 format (t50,6(f6.1,4x))
1530 format (T5,I3,5X,F10.2,5X,F10.2,10X,7(f8.2,2X))
end
cSE== end WrTab subroutine ===========================:s=====s=:========::
cSE== subroutine WrTHdrl ======
subroutine WrTHdrl (LNNum, yr, iH, coordX, prt, istprt, nColCR,
eH, iGW, iG2, fmtstrg, icolm,TaJbNum)
include
'TOXX.INS'
integer LNNum,TabNum,yr,prt,iclm,istprt,nColCR
real coordX(MREC), eH(MHET)
character FFEED*!,VERTL*!,LINE*9,LINE2*6,fmtstrg*30,fmtstrg2*30,
srcnme*20
-------
FFEED = char(12)
VERTL = char(186)
NWCnr = char(201)
NBCnr « char(187)
SWCnr = char(200)
SECnr « char(188)
YArw » char(31)
XArw = char(16)
write (LINE(:),'(9(A1))') (char(205),i=l,9)
write (LINE2(:),'(6(A1))') (char(205),i«l,6)
write (prt,' (al) ') FPEED
cSE Increment the Table number by one for the next Table if we
c are finished printing out the previous table.
if (istprt.eq.l) TabNum * Tabnum+l
if (istprt.eq.l) then
write (prt,'(//25X,A6,I2)') 'TABLE ',TabNum
else
write (prt,'(//25X,A6,I2,A)') 'TABLE ',TabNum,
' (continued)'
end if
if (LNNum.eq.600.or.LNNum.eq.800) then
srcnme=' '
if (LNNum.eq.800.and.nYear.gt.l) then
assign 1109 to ifmt
else
assign 1110 to ifmt
end if
else if (LNNum.eq.700) then
srcnme=sname(iG2)
if {nYear.gt.l) then
assign 1112 to ifmt
else
assign 1111 to ifmt
end if
else ! when LNNum = 500
srcnme=sname(iGW)
assign 1111 to ifmt
end if
if (nYear.eq.l.or.LNNum.eq.500.or.LNNum.eq.600) then
write (prt,ifmt) pName(l), iH, eH(iH), srcnme, yr
else
write (prt,ifmt) pName(l), iH, eH(iH), srcnme,
iYear(l),
iYear(nYear)
end if
1109 format (//5X,'Average Exceedances of Pollutant: ',A20,
/5X,'Above threshold number ',11,' ( > ' ,f7.2,' ug/m3)',
/5X,'All source groups combined.',A20,
/5X,'Year: ',14.4,'-',14.4)
1110 format (//5X,'Average Exceedances of Pollutant: ',A20,
/5X,'Above threshold number ',11,' ( > ' ,f7.2,' ug/m3)',
/5X,'All source groups combined.',A20,
-------
/5X,'Year: ',14)
1111 format (//5X, 'Average Exceedances of Pollutant: ',A20,
/5X,' Above threshold number ',11,' ( > ' ,f7.2,' ug/m3) ' ,
/5X, 'For source group: ',A20,
/5X, 'Year: ',14)
1112 format (//5X, 'Average Exceedances of Pollutant: f,A20,
/5X, 'Above threshold number ',11,' ( > ' ,f7.2,' ug/m3)',
/5X, 'For source group: ',A20,
/5X,' Years: ' , 14 .4, ' -' ,14 .4)
write (prt,1210)
1210 format (//lx, ' Y- Coordinate (m)',35X, ' X-Coordinate (m) ' )
iHORZLl =nColCR-istprt+2
iHORZL2=nColCr-istprt+l
iHORZL3=nColCr- istprt+3
if (istprt .eq.l .and.nColCR.ne.icolm) then
write (fmtstrg(r) ,' (a4,I2,A8) ') ' (Al, ' ,iHORZLl, ' (A9) ,AS) '
write (prt,fmtstrg(:)) NWCnr, (LINE, i=istprt,nColCR+l) ,LINE2
write (fmtstrg2(:) ,' (a8,i2,alO) ') ' (al,13x, ' , iHORZL2,
write (prt,fmtstrg2)
VERTL, (coordX(iclm) , iclm=istprt,nColCR)
else if (nColCR. eq.icolm. and. istprt .ne.l) then
write (fmtstrg(:) , ' (al,I2,All) ') ' (' , iHORZLl, ' (A9) ,A6,A1) '
write (prt , f mtstrg ( : ) )
(LINE, i=istprt,nColCR+l) ,LINE2,NECnr
write (fmtstrg2{:) ,' (a5,i2,al9) ') ' (14x, ' , iHORZL2,
write (prt , f mts trg2 )
(coordX(iclm) ,iclm=istprt,nColCR) , VERTL
else if (istprt. eq.l. and. nColCr. eq.icolm) then
write (fmtstrg(:) ,' (A7,I2,A8) ')
' (A1,A5, ' , iHORZLl, ' (A9) ,A1) '
write (prt , fmtstrg ( : ) )
NWCnr, (LINE,i=istprt,nColCR+2) ,NECnr
write (fmtstrg2 ( : ) , ' (a8,i2,a!6) ') ' (al, 13x, ' , iHORZL2,
write (prt,fmtstrg2)
VERTL, (coordX(iclm) ,iclm=istprt,nColCR) ,
VERTL
else
write (fmtstrg(:) ,' (A1,I2,A5) ') ' (' ,iHORZL3, ' (A9) ) '
write (prt,fmtstrg(:)) (LINE, i=istprt,nColCR+2)
write (fmtstrg2 ( : ) ,' (a4,i2,alO) ') ' (14x, ' , iHORZL2,
write (prt,fmtstrg2) (coordX(iclm) , iclm=istprt,nColCR)
end if
return
end
cSE== end subroutine ==================================================
CSE== SUBROUTINE TABLING
subroutine TABLINE (LNNum,istprt,nColCR,icolm,fmtstrg,prt,LSpc,
RSpc)
integer
LNNum,iVBL,istprt,nColCR,icolm,prt
-------
character
fmtstrg*30,LINE*9,LINE2*9,LftM,RgtM
character*!
SWCrn,SECrn,LSpc,RSpc
LftM » char(199)
RgtM = char(182)
if (LNNum.eq.10) then
assign 10 to iVBL
else if (LNNum.eq.20) then
assign 20 to iVBL
end if
goto iVBL (10,20)
10 continue ! print out lines in center of table
write (LINE(:),' (9 (A!))') (char(196),i=l,9)
if (istprt.eq.l.and.nColCR.ne.icolm) then
write (prt,fmtstrg) LftM,(LINE,i=istprt,
nColCR+1) ,LINE
LSpc M char(186)
RSpc m ' '
else if (nColCr.eq.icolm.and.istprt.ne.l) then
write (prt,fmtstrg) (LINE,i=istprt,nColCR+l),
LINE,RgtM
LSpc = ' '
RSpc = char(186)
else if (istprt.eq.l.and.nColCR.eq.icolm) then
write (prt,fmtstrg) LftM,(LINE,i=istprt,
nColCR+2),RgtM
LSpc = char(186)
RSpc = char(186)
else
.write (prt,fmtstrg) (LINE,i=istprt,nColCR+2)
LSpc s ' '
RSpc = ' '
end if
return
20 continue ! print out line at bottom of table
SWCrn = char(200)
SECrn = char(188)
write (LINE2(:),'(9(A1))') (char(205),i=l,9)
if (istprt.eq.l.and.nColCR.ne.icolm) then
write (prt,fmtstrg) SWCrn,(LINE2,i=istprt,
___. nColCR+1) ,LINE2
.eise if (nColCr.eq.icolm.and.istprt.ne.l) then
write (prt,fmtstrg) (LINE2,i=istprt,nColCR+l),
LINE2,SECrn
else if (istprt.eq.l.and.nColCR.eq.icolm) then
write (prt,fmtstrg) SWCrn,(LlNE2,i=istprt,
nColCR+2),SECrn
else
-------
write (prt,fmtstrg) (LINE2,i=istprt,nColCR+2)
end if
return
end
CSE» end Subroutine • »»»»««»»•«•»»»»»«•«»»•»»«»:«»«»»
cSE== subroutine xyTab
subroutine xyTab (UTMX,UTMY,coordX,coordY,RStrt,nRTab,indexX,
indexY,irow,icolm)
include
'TOXX.INS'
integer
indexX(MREC),indexY(MREC),RStrt,nRTab,irow,icolm,iR
real
UTMX (MREC) , UTMY (MREC) ,
coordX(MREC),coordY(MREC)
cSE Determine the x coordinates for the table. The x
cSE coordinates will be for all x and y values.
do 100 iR = RStrt, nRTab
if (iR.ne.l) then
do iR2 = RStrt, (iR-1)
c if (iR.ne.iR2) then
if (UTMX(indexX(iR)).gt.(OTMX(indexX(iR2))-0.02)
.and.UTMX(indexX(iR)).It.(DTMX(indexX(iR2))
+0.02)) then
exit ! exit from this loop
else if (iR2.eq.(iR-1)) then
icolm = icolm + 1
coordX(icolm) = UTMX(indexX(iR))
exit
end if
c end if
end do
do iR2 = RStrt, (iR-1)
c if (iR.ne.iR2) then
if (UTMY(indexY(iR)).gt.(DTMY(indexY(iR2))-0.02)
.and.DTMY(indexY(iR)).It.(UTMY(indexY(iR2))
+0.02)) then
exit
else if (iR2.eq.(iR-1)) then
irow = irow + 1
coordY(irow) = UTMY(indexY(iR))
exit
end if
c end if
end do
else
icolm * icolm + l
coordX(icolm) = UTMX(indexX(iR))
irow a irow + l
coordY(irow) s UTMY {indexY(iR))
end if
-------
100 continue
return
end
cSE== end subroutine xyTab
c==== subroutine SortTI2 ===============================================
c
c Sort input vector array of n integer data, in ascending order, by a
c tag insertion sort. No sorted array is actually output by subroutine
c SortTI; result is an array of subscripts of the data in the unsorted
c array, in the order in which they would appear in the sorted array.
c
c (Explicitly, this is the meaning of the output array tagLst:
c
c INDEXES OF ARRAY IND <==> indexes of a hypothetical, sorted
c version of input array arr
c
c ELEMENTS OF ARRAY IND contain the indexes of elements in the
c hypothetical, sorted version of input
c array arr IN THE ORIGINAL, DNSORTED ARRAY ARR
c
c Put one more way: tagLst is sorted tag list for original array arr.
c
c Put one last way: the value of the ith element of the hypothetical,
c sorted version of array arr is arr (tagLst (i))
c
c Method is best for small and almost sorted arrays. Worst case is
c for inversely sorted arrays.
c
c Subroutine written by Paulus Irpan, SAI, 840830.)
c
c Subroutine SortTI is called by subroutine Setup.
c
subroutine SortTI2 (n, arr, tagLst)
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . n, I # elements in array to be tag sorted
c . arr(n), ! the array to be tag sorted
c . tagLst(n) ! sorted tag list of the original array
c
integer
n, tagLst(n)
real arr(n)
c
c Description of local variables.
c
c integer
c . i, ! index of current element in unsorted
c 1 array, which is to be inserted in
c ! tagLst; also, a do-loop variable
c . j, I variable index used to put i in its
-------
c ! proper position in tagLst
c . value ! value of current element of unsorted
c ! array
c
integer
i, J
real value
c
c Sort by tag insertion method.
c
c Start with 1 element presumed sorted (n_th data element).
c
tagLst(n) = n
c
c Then insertion sort the rest, changing the indexes only.
c
do 100 i = n-1, 1, -1
if (arr(i) .le. arr(tagLst(i+1))) then
tagLst(i) = i
else
value = arr(i)
j = i + 1
110 tagLst(j-1) = tagLst(j)
j = j + 1
if (j.le.n .and. arr(tagLst(j)).It.value)
goto 110
tagLst(j-1) = i
endif
100 continue
c
return
end
c
c end subroutine SortTI
c
c==== subroutine Warng =================================================
c
c Notify user of unusual situations which may cause problems but do not
c warrant termination of processing.
c
c Messages are output to the print fileunit and terminal. Four numeric
c parameters, 2 integer and 2 real, may be passed for display and
c clarification purposes.
c
c Subroutine Warng is called by subroutine SetUp, whenever a nonfatal
c abnormality meriting user attention arises.
c
c -
c
subroutine Warng (fu, wrCode, iParml, iPann2, rParml, rParm2)
c
c -
c
c Declarations, etc.
c
-------
c
c
c
c
c
c
c
c
c
c
c
Description of ]
integer
fu,
wrCode,
iParml ,
iParm2
real
rParml ,
rParm2
integer
fu, wrCode,
real
passed parameters.
! message target fileunit
! the warning code
! first general purpose
! second general purpose
! first general purpose
! second general purpose
iParml, iParm2
integer param
integer param
real param
real param
rParml , rParm2
c
c
c Branch to correct warning message.
c
goto ( 10, 20, 30, 40, 50 ) wrCode
c
c If warning code does not branch to any of the above line labels,
c signal an error.
c
call Error (fu, 35, wrCode, 0, 0., 0.)
c
c -
c
c Text of all warning messages.
c
c - - - -
c
c » Warning 1: probOn for iSrc (i), iGrp (i), =0.
c
10 continue
c
c Warning 1 screen output.
c
print '(/A, F6.4, A, A, /A, 12, A, 12, A, /A, A, /A, A, /A)',
' Warning: Toxic release probability probOn (=', rParml, ') ',
'for TOXX',
' source #', iParml,' (which is a member of group #',
iParm2, ') is',
' identically zero. This source will never become ',
'activated,',
' and will therefore never emit. This warning appl',
'ies to all',
' sources in this group.'
c
c Warning 1 file output.
c
write (fu, '(/A, F6.4, A, A, /A, 12, A, 12, A, /A, A, /A, A,/A) ')
' Warning: Toxic release probability probOn (=', rParml, ') f',
'or TOXX',
' source #', iParml, ' (which is a member of group #',
iParm2,') is',
' identically zero. This source will never become a',
'ctivated,',
' and will therefore never emit. This warning appli',
-------
'ies to all',
' sources in this group.'
c
c Warning 1 closing.
c
write (fu, '(/A, 12, A, A)')
' TOXX run continuing: Group #',iParm2,' has 0 probability',
' of emission.'
print '(/A, 12, A, A) ',
' TOXX run continuing: Group #',iParm2,' has 0 probability',
' of emission.'
write (fu, ' (/A) ') ' '
print ' (/A) ', '
return
c
c » Warning 2: timeOn for iSrc (i) , iGrp (i), = 0.
c
20 continue
c
c Warning 2 screen output.
c
print '(/A, 12, A, /A, 12, A, 12, A, /A, A, /A, A, /A)',
' Warning: Toxic release duration timeOn (=', int (rParml),
') for TOXX',
' source #', iParml,' (which is a member of group #',
iPann2, ') is',
' identically zero. This source will never run one',
'e',
' activated, and will therefore never emit. This wa',
'rning',
' applies to all sources in this group.'
c
c Warning 2 file output.
c
write (fu, '(/A, 12, A, /A, 12, A, 12, A, /A, A, /A, A, /A)')
' Warning: Toxic release duration timeOn (=', int (rParml),
') for TOXX',
' source #', iParml, ' (which is a member of group #',
iParm2, ') is',
' identically zero. This source will never run once',
' activated,',
' and will therefore never emit. This warning applie',
's to all',
' sources in this group.'
c
c Warning 2 closing.
c
write (fu, '(/A, 12, A, A)')
' TOXX run continuing: Group #',iParm2,' has 0 duration of,
' emission.'
print '(/A, 12, A, A)',
' TOXX run continuing: Group #',iParm2,' has 0 duration of,
' emission.'
write (fu, ' (/A) ') '
print '(/A) ', ' '
return
c
c ' -
-------
c
c » Warning 3: rate for iSrc (i), pollutant j, =0.
c
30 continue
c
c Warning 3 screen output.
c
print '(/A, F6.4, A, 12, A, /A, 12, A, II, A, /A, A, /A)',
' Warning: Emissions rate (=', rParm2, ') for TOXX source #',
iParml, ' (which is',
' a member of group #', iParm2, '), pollutant #',
int(rParml), ' is identically zero.',
' This source will never emit this pollutant. This',
' warning',
' applies to all sources in this group.'
c
c Warning 3 file output.
c
write (fu, '(/A, FS.4, A, 12, A, /A, 12, A, II, A, /A, A, /A)')
' Warning: Emissions rate (=', rParm2, ') for TOXX source #',
iParml, ' (which is',
' a member of group #', iParm2, '), pollutant #',
int(rParml), ' is identically zero.',
' This source will never emit this pollutant. This',
' warning',
' applies to all sources in this group.'
c
c Warning 3 closing.
c
write (fu, '(/A, 12, A, A, II, A)')
' TOXX run continuing: Group #', iParm2,' has 0 emissions r',
'ate for pollutant #', int (rParml), '.'
print '(/A, 12, A, A, II, A)',
' TOXX run continuing: Group #', iParm2,' has 0 emissions ',
'rate for pollutant #', int (rParml), '.'
write (fu, ' (/A)') ' '
print ' (/A) ', ' '
return -
c
c - -
c
c » Warning 4: mod (timeOn for iSrc (i) in iGrp (i) , iAvPer) A= 0.
c
40 continue
c
c Warning 4 screen output.
c
print ' (/A, 14, A, A, 12, /A, 12, A, A, /A, 12, A, A, /A, A, /A,
A, /A)',
' Warning: Toxic release duration (=', int(rParml),' hrs) fo',
'r source #', iParml,
' in group #', iParm2, ' is not evenly',
' divided by the', .
' averaging period (=', int (rParm2), ' hrs) . Rele",
'ase duration will',
' be truncated to the maximum # averaging periods 1',
'ess than duration,',
' but will be set to at least 1 averaging period. T',
'his warning',
' applies to all sources in this group.'
-------
c
c Warning 4 file output.
c
write (fu,'(/A, 14, A, A, 12, /A, 12, A, A, /A, 12, A, A, /A, A,
/A, A, /A)')
' Warning: Toxic release duration (=', int(rParml),' hrs) for',
' source #', iPannl,
' in group #', iParm2, ' is not evenly ',
'divided by the',
' averaging period (=', int (rParm2), ' hrs). Relea',
'se duration will',
' be truncated to the maximum # averaging periods le',
'ss than duration,',
' but will be set to at least 1 averaging period. Th',
'is warning',
' applies to all sources in this group.'
c
c Warning 4 closing.
c
write (fu, '(/A, A, 12, A)')
. ' TOXX run continuing: iAvPer does not divide timeOn for gro',
'up #', iParm2, '.'
print ' (/A, A, 12, A)',
' TOXX run continuing: iAvPer does not divide timeOn for gr',
'oup #', iParm2, '.'
write (fu, ' (/A) ') ''
print '(/A)', '
return
c
c » Warning 5: effHET (j) =0.
c
50 continue
c
c Warning 5 screen output.
c
print '(/A, II, A, F8.4, A, /A, F8.4, A, A, /A, 12, A, A, /A, A,
/A, A) ' , ' '- . •
' Warning: Health effect threshold #', iParml, ' (=', rParml,
' ug/m3) and the',
' corresponding background (=', rParm2, ' ug/m3) ar',
'e equal or nearly so,',
' causing effective threshold #', iParml, ' to be z',
'ero. This will',
' allow every chi/q value to pass screening, making',
' the program run',
' a long time. Consider termination and use of a 1',
'arger threshold.'
c
c Warning 5 file output.
c
write (fu, '(/A, II, A, F8.4, A, /A, F8.4, A, A, /A, II, A, A, /A,
A, /A, A)') —
' Warning: Health effect threshold #', iParml, ' (=', rParml,
' ug/m3) and the',
' corresponding background (»', rPann2, ' ug/m3) ar',
'e equal or nearly so,',
' ' causing effective threshold #', iParml, ' to be z',
'ero. This will',
-------
' allow every chi/q value to pass screening, making',
' the program run',
' a long time. Consider termination and use of a 1',
'arger threshold.'
c
c Warning 5 closing.
c
write (fu, ' (/A, II, A, A)')
' TOXX run continuing: Effective threshold #', iParml, ' is ',
'zero.'
print ' (/A, II, A, A)',
' TOXX run continuing: Effective threshold #', iParml,' is ',
'zero.'
write (fu, ' (/A) '} '
print ' (/A) ', '
return
c
end
c
c end subroutine Warng
c
c==== subroutine Error =================================================
c
c Notify user of fatal abnormalities which demand termination of
c processing.
c
c Messages are output to the print fileunit and terminal. Four numeric
c parameters, 2 integer and 2 real, are passed for display and
c clarification purposes. Not all are used for every error message.
c
c Subroutine Error is called by program TOXX and subroutines Getlnp,
c ChkDat, Setup, and Warng, whenever a condition that forces termination
c of processing occurs.
c
subroutine Error (fu, erCode, iParml, iParm2, rParml, rParm2)
c
c Declarations, etc.
c
c Description of passed parameters.
c
c integer
c . fu, ! message target fileunit
c . erCode, ! the error code
c . iParml, ! first general purpose integer param
c . iParm2 ! second general purpose integer param
c real
c . rParml, ! first general purpose real param
c . rParm2 ! second general purpose real param
c
integer
fu, erCode, iParml, iParm2
real
rParml, rParm2
-------
c
c
c Branch to correct error message.
c
goto ( 10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
110, 120, 130, 140, 150, 160, 170, 180, 190, 200,
210, 220, 230, 240, 250, 260, 270, 280, 290, 300,
310, 320, 330, 340, 350} erCode
c
c If error code does not branch, to any of the above line labels,
c terminate with an error message.
c
c -
c
c » Error ?: Invalid error code.
c
c Error ? screen output.
c
print '{/A, 12, A, A, /A)',
' Error: The value of variable erCode (= ',erCode,') is not ',
'valid.',
' No error condition matches this value.'
print ' (/A, A, /A, A, /A, A, /A, A, /A, A, /A) ',
' Solution: This error is highly unusual, and probably refle',
'cts a',
' typing error in the TOXX source code. Try to trace to th',
'e point',
' in the code which called the Error subroutine, and check t',
'he value',
' of the second parameter passed to the Error subroutine. It',
' should',
' match the number of the most appropriate error message, gi',
'ven the',
' context of the calling statement, in the subroutine Error.'
c
c Error ? file output.
c
write (fu, '(/A, 12, A, A, /A)')
'Error: The value of variable erCode (= ',erCode,') is not ',
'valid.',
' No error condition matches this value.'
write (fu, ' (/A, A, /A, A, /A, A, /A, A, /A, A, /A) ')
'Solution: This error is highly unusual, and probably reflec',
'ts a',
'typing error in the TOXX source code. Try to trace to the',
' point',
'in the code which called the Error subroutine, and check th',
'e value',
'of the second parameter passed to the Error subroutine. It ',
'should',
'match the number of the most appropriate error message, giv,
'en the',
'context of the calling statement, in the subroutine Error.'
c
c Error ? closing.
c
write (fu, '(/A)') 'TOXX run aborted: Invalid erCode.'
print ' (A) ', ' '
stop 'TOXX run aborted: Invalid erCode.'
-------
c - -
c
c Text of all error messages.
c
c
c
c » Error 1: MPER > MCPER.
c
10 continue
c
c Error 1 screen output.
c
print '(/A, IS, A, A, /A, 14, A)',
' Error: Max number of periods MPER (=', iParml, ') exceeds ',
'absolute',
ceiling value MCPER (=',iParm2, ').'
print ' (/A, A, /A, A, /A, A) ' ,
' Solution: Decrease MPER in insert file or alter data id co',
'ding in',
' preprocessor and TOXX program to allow larger MCPER. (Wa',
'rning:',
' Latter solution involves code modification and is not reco',
' amended.)'
c
c Error 1 file output.
c
write (fu, '(/A, 15, A, A, /A, 14, A)')
'Error: Max number of periods MPER (=', iParml, ') exceeds ',
'absolute',
' ceiling value MCPER (=',iParm2, ').'
write (fu, '(/A, A, /A, A, /A, A)')
'Solution: Decrease MPER in insert file or alter data id cod',
'ing in',
'preprocessor and TOXX program to allow larger MCPER. (War',
'ning:',
'Latter solution involves code modification and is not recom',
'mended.)'
c
c Error 1 closing.
c
write (fu, '(/A)') 'TOXX run aborted: MPER exceeds MCPER.'
print ' (A) ', '
stop 'TOXX run aborted: MPER exceeds MCPER.'
c
c - - -
c
c » Error 2: MSRC > MCSRC.
c
20 continue
c
c Error 2 screen output.
c
print '(/A, 15, A, A, /A, 14, A)',
' Error: Max number of sources MSRC (=', iParml, ') exceeds ',
'absolute',
' ceiling value MCSRC (=',iParm2, ').'
print ' (/A, A, /A, A, /A, A) ',
' Solution: Decrease MSRC in insert file or alter data id co',
'ding in',
' preprocessor and TOXX program to allow larger MCSRC. (Wa',
-------
'ruing:',
' Latter solution involves code modification and is not reco',
' amended.) '
c
c Error 2 file output.
c
write (fu, '(/A, IS, A, A, /A, 14, A)')
'Error: Max number of sources MSRC (=', iPannl, ') exceeds ',
'ceiling value',
' MCSRC (=',iParm2, ').'
write (fu, '(/A, A, /A, A, /A, A)')
'Solution: Decrease MSRC in insert file or alter data id cod',
'ing in',
'preprocessor and TOXX program to allow larger MCSRC. (Wa',
'rning:',
'Latter solution involves code modification and is not reco',
'mmended.)'
c
c Error 2 closing.
c
write (fu, '(/A)') 'TOXX run aborted: MSRC exceeds MCSRC.'
print ' (A) ', ' '
stop 'TOXX run aborted: MSRC exceeds MCSRC.'
c
c -
c
c » Error 3: MREC > MCREC.
c
30 continue
c
c Error 3 screen output.
c
print '(/A, 15, A, A, /A, 14, A)',
' Error: Max number of receptors MREC (=', iParml, ') exceed',
's absolute',
' ceiling value MCREC (=',iParm2, ').'
print ' (/A, A, /A, A, /A, A) ',
' Solution: Decrease MREC in insert file or alter data id co',
'ding in',
' preprocessor and TOXX program to allow larger MCREC. (Wa',
'rning:',
' Latter solution involves code modification and is not reco',
'mmended.)'
c
c Error 3 file output.
c
write (fu, '(/A, 15, A, A, /A, 14, A)')
'Error: Max number of recpetors MREC (=', iParml, ') exceeds',
' ceiling value',
MCREC (*',iParm2, ').'
write (fu, '(/A, A, /A, A, /A, A)')
'Solution: Decrease MREC in insert file or alter data id cod',
'ing in',
'preprocessor and TOXX program to allow larger MCREC. (Wa',
'rning:',
'Latter solution involves code modification and is not reco',
'mmended.)'
c
c Error 3 closing.
c
-------
write (fu, '(/A)') 'TOXX run aborted: MREC exceeds MCREC.'
print ' (A) ', '
stop 'TOXX run aborted: MREC exceeds MCREC.'
c
c
c
c » Error 4: nHET > MHET.
c
40 continue
c
c Error 4 screen output.
c
print '(/A, 14, A, A, /A, 14, A)',
' Error: Number of thresholds nHET {=', iParml, ') exceeds m',
' ax value',
MHET (=',iParm2, ').'
print ' (/A, A, /A) ',
' Solution: Decrease nHET and # threshold data in user input',
' file',
' or increase value of parameter MHET in insert file.'
c
c Error 4 file output.
c
write (fu, '(/A, 14, A, A, /A, 14, A)')
'Error: Number of thresholds nHET ( = ', iParml, ') exceeds ma',
'x value',
' MHET (=',iParm2, ').'
write (fu, ' (/A, A, /A) ')
'Solution: Decrease nHET and # threshold data in user input ',
'file',
'or increase value of parameter MHET in insert file.'
c
c Error 4 closing.
c
write (fu, '(/A)') 'TOXX run aborted: nHET exceeds MHET.'
print ' (A) ', ' '
stop 'TOXX run aborted: nHET exceeds MHET.'
c
c - - - -
c
c » Error 5: nPol > MHET.
c
50 continue
c
c Error 5 screen output.
c
print '(/A, 14, A, A, /A, 14, A)',
' Error: Number of pollutants nPol (=', iParml, ') exceeds m',
' ax value',
MHET (=',iParm2, ').'
print ' (/A, A, /A) ',
' Solution: Decrease nPol and # pollutant data in user input',
' file',
' or increase value of parameter MHET in insert file.'
c
c Error 5 file output.
c
write (fu, '(/A, 14, A, A, /A, 14, A)')
'Error: Number of pollutants nPol (=', iParml, ') exceeds ma',
'x value',
-------
' MHET (=',iParm2, ').'
write (fu, '(/A, A, /A)')
'Solution: Decrease nPol and # pollutant data in user input ',
'file',
'or increase value of parameter MHET in insert file.'
c
c Error 5 closing.
c
write (fu, '(/A)') 'TOXX run aborted: nPol exceeds MHET.'
print ' (A) ', '
stop "TOXX run aborted: nPol exceeds MHET.'
c
C T
C
c » Error 6: nPol > 1 but nPol A= nHET.
c
60 continue
c
c Error 6 screen output.
c
print '(/A, 14, A, A, /A, 14, A)',
' Error: Number of pollutants nPol (=', iParml, ') is greate',
'r than 1',
' but does not equal nHET (=',iParm2, ').'
print ' (/A, A, /A) ',
' Solution: If multiple pollutants are in fact desired, make',
' certain',
' that there is exactly one threshold for each pollutant.'
c
c Error 6 file output.
c
write (fu, '(/A, 14, A, A, /A, 14, A)')
'Error: Number of pollutants nPol ( = ', iParml, ') is greater',
' than 1',
' but does not equal nHET (=',iParm2, ').'
write (fu, ' (/A, A, /A) ')
'Solution: If multiple pollutants are in fact desired, make ',
'certain',
'that there is exactly one threshold for each pollutant.'
c
c Error 6 closing.
c
write (fu, ' (/A) ')
'TOXX run aborted: nPol greater than 1 but not equal to nHET.'
print ' (A) ' , '
stop
'TOXX run aborted: nPol greater than 1 but not equal to nHET.'
c
c - -
c
c » Error 7: nSim > MSIM.
c
70 continue
c
c Error 7 screen output.
c
print '(/A, 15, A, /A, 14, A)',
' Error: Number of Monte Carlo simulations nSim (=', iParml,
') exceeds max',
' value MSIM (=',iParm2, ').'
-------
print ' (/A, A, /A) ',
' Solution: Decrease nSim in user input file or increase val',
'ue of,
' parameter MSIM in insert file.'
c
c Error 7 file output.
c
write (fu, '(/A, 15, A, /A, 14, A)')
'Error: Number of Monte Carlo simulations nSim (=', iParml,
') exceeds max',
' value MSIM (=',iParm2, ').'
write (fu, ' (/A, A, /A) ')
'Solution: Decrease nSim in user input file or increase valu',
'e of,
'parameter MSIM in insert file.'
c
c Error 7 closing.
c
write (fu, '(/A)') 'TOXX run aborted: nSim exceeds MSIM.'
print ' (A) ', '
stop 'TOXX run aborted: nSim exceeds MSIM.'
c
c
c
c » Error 8: nSrc > MSRC.
c
80 continue
c
c Error 8 screen output.
c
print '(/A, 14, A, A, /A, 14, A)',
' Error: Number of TOXX sources nSrc (=', iParml, ') exceed',
's max value',
MSRC (=',iParm2, ').'
print ' (/A, A, /A) ',
' Solution: Decrease nSrc and # source data lines in user in',
'put file',
' or increase parameter MSRC in insert file.' .
c
c Error 8 file output.
c
write (fu, '(/A, 14, A, A, /A, 14, A)')
'Error: Number of TOXX sources nSrc (=', iParml, ') exceeds',
' max value',
MSRC (=',iParm2, '),' . .
write (fu, '(/A, A, /A)')
'Solution: Decrease nSrc and # source data lines in user inp',
'ut file',
'or increase parameter MSRC in insert file.'
c
c Error 8 closing.
c
write (fu, '(/A)') 'TOXX run aborted: nSrc exceeds MSRG,'—
print ' (A) ', ' ' -
stop 'TOXX run aborted: nSrc exceeds MSRC.'
c
c -
c
c » Error 9: iAvPer A» 1, 3, or 24.
c
-------
90 continue
c
c Error 9 screen output.
c
print ' (/A, 14, A, /A)',
' Error: Duration in hours of averaging period iAvPer (=',
iParml,
') is not one',
' of the currently allowed values 1, 3, and 24.'
print ' (/A, A, /A, A, /A, A, /A) ',
' Solution: Set iAvPer to one of the above values, or add a ',
'new value',
' to those allowed. (Warning: It is important that both the',
' preprocessor',
' and TOXX use the same averaging period, so that nPer and ',
' nP are',
' identical for every DMR file.)'
c
c Error 9 file output.
c
write (fu, '(/A, 14, A, /A)')
'Error: Duration in hours of averaging period iAvPer (=',
iParml,
') is not one',
' of the currently allowed values 1, 3, and 24.'
write (fu,' '(/A, A, /A, A, /A, A, /A)')
'Solution: Set iAvPer to one of the above values, or add a ',
'new value',
'to those allowed. (Warning: It is important that both the',
' preprocessor',
'and TOXX use the same averaging period, so that nPer and ',
'nP are',
'identical for every DMR file.)'
c
c Error 9 closing.
c
write (fu, '(/A)') 'TOXX run aborted: Invalid iAvPer.'
print ' (A) ', '
stop 'TOXX run aborted: Invalid IAvPer.'
c
c » Error 10: lAdd *» 0 or 1.
c
100 continue
c ..:-.-."
c Error 10 screen output.
c
print '(/A, 14, A, A, /A)',
' Error: Switch variable lAdd (=', iParml, ') does not equal',
' either of the ',
' allowed values 0 or 1.'
print '(/A, A, /A) ',
' Solution: Set lAdd to one of the .allowed values in user in',
'put file.-',
' (Osexex by indiv. threshold, l=exex by additive model)'
c
c Error 10 file output.
c
write (fu, '(/A, 14, A, A, /A)')
-------
'Error: Switch variable LAdd (=', iParml, ') does not equal ',
'either of the ',
' allowed values 0 or 1.'
write (fu, ' (/A, A, /A)')
'Solution: Set lAdd to one of the allowed values in user in',
'put file.',
'(0=exex by indiv. threshold, l=exex by additive model)'
c
c Error 10 closing.
c
write (fu, '(/A)') "TOXX run aborted: Invalid LAdd.'
print ' (A) ', '
stop "TOXX run aborted: Invalid lAdd.'
c
c » Error 11: lAdd = 1 and nPol = 1.
c
110 continue
c
c Error 11 screen output.
c
print '(/A, 14, A, /A, 14, A)',
' Error: Additive calculation requested (lAdd = ', iParml,
') with only',
' one pollutant (nPol = ', iParm2, ').'
print ' {/A, A, /A) ',
' Solution: Assuming nPol=l is desired, set LAdd to 0 in use',
'r input file.',
' (0=exex by indiv. threshold, l=exex by additive model)'
c
c Error 11 file output.
c
write (fu, '(/A, 14, A, /A, 14, A)')
'Error: Additive calculation requested (lAdd = ', iParml,
') with only',
' one pollutant (nPol * ', iParm2, ').'
write (fu, ' (/A, A, /A) ')
'Solution: Assuming nPol=l is desired, set LAdd to 0 in use',
'r input file.',
'(0=exex by indiv. threshold, l=exex by additive model)'
c
c Error 11 closing.
c
write (fu, ' (/A) ')
'TOXX run aborted: lAdd equals 1 with nPol also equal to l.'
print '(A)', '
stop 'TOXX run aborted:LAdd equals 1 with nPol also equal to 1.'
c
c » Error 12: ITab ** 0, 1, 2, or 9.
c
120 continue
c
c Error 12 screen output.
c
print '(/A, 14, A, A, /A)',
' Error: Switch variable ITab (=', iParml, ') does not equal',
' any of the ',
-------
' allowed values 0, 1, 2, or 9.'
print '(/A, A, /A, A, /A)',
' Solution: Set ITab to one of the allowed values in user in',
'put file.',
' (0=no exex output by receptor, l=output in polar table, 2=',
'output in',
' Cartesian table, 9=output in form specified by DMR files) .'
c
c Error 12 file output.
c
write (fu, '(/A, 14, A, A, /A)')
'Error: Switch variable ITab (=', iParml, ') does not equal',
' any of the ',
' allowed values 0, 1, 2, or 9.'
write (fu, '(/A, A, /A, A, /A)')
'Solution: Set ITab to one of the allowed values in user in',
'put file.',
'(0=no exex output by receptor, l=output in polar table, 2=',
'output in',
'Cartesian table, 9=output in form specified by DMR files).'
c
c Error 12 closing.
c
write (fu, '(/A)') 'TOXX run aborted: Invalid ITab.'
print ' (A) ', '
stop 'TOXX run aborted: Invalid ITab.'
c
c » Error 13: lYrly A= 0 or 1.
c
130 continue
c
c Error 13 screen output.
c
print '(/A, 12, A, A, /A)',
' Error: Switch variable lYrly ( = ', iParml, ') does not equa',
'1 either of the ',
' allowed values 0 or 1.'
print ' (/A, A, /A, A, /A) ',
' Solution: Set lYrly to one of the allowed values in user i',
'nput file.',
' (Osoutput by individual years and all years combined, l=ou',
'tput only',
' by all years combined).'
c
c Error 13 file output.
c
write (fu, '(/A, 12, A, A, /A)')
'Error: Switch variable lYrly (=', iParml, ') does not equal',
' either of the ',
' allowed values 0 or l.'
write (fu, '(/A, A, /A, A, /A)')
'Solution: Set lYrly to one of the allowed values in user in',
'put file.',
'(Osoutput by individual years and all years combined, l=out',
'put only',
'by all years combined).'
-------
c Error 13 closing.
c
write (fu, '(/A)') 'TOXX run aborted: Invalid lYrly.'
print ' (A) ', '
stop 'TOXX run aborted: Invalid lYrly.'
c
c -
c
c » Error 14: nYear > MYEAR.
c
140 continue
c
c Error 14 screen output.
c
print '{/A, 12, A, /A, II, A)',
' Error: Number of meteorological years nYear (=', iParml,
') exceeds max',
' value MYEAR (=',iParm2, ').'
print ' (/A, A, /A) ' ,
' Solution: Decrease nYear and # year data lines in user inp',
'ut file,', .
' or increase value of parameter MYEAR in insert file.'
c
c Error 14 file output.
c
write (fu, '(/A, 12, A, A, /A, II, A)')
'Error: Number of meteorological years nYear (=', iParml, ')',
' exceeds max',
' value MYEAR (=',iParm2, ').'
write (fu, ' (/A, A, /A) ')
'Solution: Decrease nYear and # year data lines in user inpu',
't file,',
'or increase value of parameter MYEAR in insert file.'
c
c Error 14 closing.
c
write (fu, '(/A)') 'TOXX run aborted: nYear exceeds MYEAR.'
print ' (A) ', ' '
stop 'TOXX run aborted: nYear exceeds MJfEAR.'
c
c
c
c » Error IS: nS in DMR file for year iYr < nSrc.
c
150 continue
c
c Error 15 screen output.
c
print '(/A, 12, A, A, 14, /A, 12, A, A)',
' Error: Number of sources nS (=', iParm2, ') from DMR file ',
'for year ', iParml,
' is less than number of sources nSrc (=', int(rParml),
') from user input file.'
print ' (/A, A, /A, A, /A) ',
' Solution: Decrease nSrc in user input file or use only DMR',
' files with',
' nS greater than or equal to nSrc. TOXX may not use sourc',
'es not present',
' in DMR files.'
-------
c Error 15 file output.
c
write (fu, '(/A, 12, A, A, 14, /A, 12, A, A)')
'Error: Number of sources nS (=»', iPann2, ') from DMR file f,
'or year ', iParml,
' is less than number of sources nSrc (=', int (rParml),
') from user input file.'
write (fu, '(/A, A, /A, A, /A)')
'Solution: Decrease nSrc in user input file or use only DMR ',
'files with',
'nS greater than or equal to nSrc. TOXX may not use source',
's not present',
'in DMR files.'
c
c Error 15 closing.
c
write (fu, '(/A) ')
'TOXX run aborted: nS in a DMR file is less than nSrc.'
print ' (A) ', '
stop 'TOXX run aborted: nS in a DMR file is less than nSrc.'
c
c » Error 16: nR in DMR file for year iYr > MREC.
c
160 continue
c
c Error 16 screen output.
c
print '(/A, 13, A, A, 14, /A, 13, A)',
' Error: Number of receptors nR (=', iParm2, ') from DMR fil',
'e for year ', iParml,
' exceeds max value MREC (=', int (rParml), ').'
print '(/A) ',
' Solution: Increase MREC in insert file.'
c
c Error 16 file output.
c •
write (fu, '(/A, 13, A, A, 14, /A, 13, A, A, /A)')
'Error: Number of receptors nR {=', iParm2, '} from DMR file',
' for year ', iParml,
' exceeds max value MREC ( = ', int (rParml), ').'
write (fu, ' (/A) ')
'Solution: Increase MREC in insert file.'
c
c Error 16 closing.
c
write (fu, ' (/A) ')
'TOXX run aborted: nR in a DMR file exceeds MREC.'
print ' (A) ', ' '
stop 'TOXX run aborted: nR in a DMR file exceeds MREC.'
c
c » Error 17: nR in DMR file for year iYr "*»' nR for previous year.
c
170 continue
c
c Error 17 screen output.
c
-------
print '(/A, 13, A, A, 14, /A, 13, A)',
' Error: Number of receptors nR (=', iParm2, ') from DMR til',
'e for year ', iParml,
' differs from that for previous year (nRO = ',
int (rParml), ').'
print ' (/A) ',
-- . - ' Solution: Make certain nR is the same in all DMR files.'
c
c Error 17 file output.
c
write (fu, '(/A, 13, A, A, 14, /A, 13, A)')
'Error: Number of receptors nR (=', iParm2, ') from DMR file',
' for year ', iParml,
' differs from that for previous year (nRO = ',
int (rParml), ') .'
write (fu, ' (/A) ')
'Solution: Make certain nR is the same in all DMR files.'
c
c Error 17 closing.
c
write (fu, ' (/A) ')
'TOXX run aborted: nR varies among DMR files.'
print ' (A) ', '
stop 'TOXX run aborted: nR varies among DMR files.'
c
c—
c
c » Error 18: nPer for year iYr > MPER.
c
180 continue
c
c Error 18 screen output.
c
print '(/A, 14, A, A, 14, /A, 14, A)',
' Error: Number of periods nPer (=', iParm2, ') calculated ',
'for year ', iParml,
' exceeds maximum value MPER (= ', int (rParml), '}.'
print ' (/A, A, /A, A) ' ,
' Solution: This most likely results from an illegal value o',
'f iAvPer.',
' Make certain iAvPer is not less than the minimum allowed',
' value of l.'
c
c Error 18 file output.
. c
. write (fu, '(/A, 14, A, A, 14, /A, 14, A)')
'Error: Number of periods nPer { = ', iParm2, ') calculated f,
'or year ', iParml,
' exceeds maximum value MPER (= ', int (rParml), ').'
write (fu, ' (/A, A, /A, A) ')
'Solution: This most likely results from an illegal value of,
' iAvPer.',
__. ^Make certain iAvPer is not less than the minimum allowed va',
V .. 'lue of 1.'
c
c Error 18 closing.
c
write (fu, '(/A)')
'TOXX run aborted: nPer from a DMR file exceeds MPER.'
print ' (A)', ' '
-------
stop 'TOXX run aborted: nPer from a DMR file exceeds MPER.'
c
c- —
c
c » Error 19: nP in DMR file for year iYr "= nPer calc frm iAvPer,
c iYr.
c
190 continue
c
c Error 19 screen output.
c
print '{/A, 14, A, A, 14, A, /A, 14, A, A, /A, 12, A)',
' Error: Number of periods nP ( = ', iParm2, ') from DMR file ',
'for year iYr (=', iParml, ')',
' differs from nPer (=', int (rParml), ') calculated ',
'for same year using',
' the user-input averaging period, iAvPer (=',
int (rParm2), ').'
print ' (/A, A, /A, A, /A) ',
' Solution: nPer is calculated as ((24/iAvPer) * Leap(iYr)).',
' Make certain',
' that the preprocessor used the same averaging period as TO',
'XXS, and that',
' nP is equal to nPer in each DMR file.'
c
c Error 19 file output.
c
write (fu, ' (/A, 14, A, A, 14, A, /A, 14, A, A, /A, 12, A)')
'Error: Number of periods nP (=', iParm2, ') from DMR file f' ,
'or year iYr (=', iParml, ')',
' differs from nPer (=', int (rParml), ') calculated ',
'for same year using',
' the user-input averaging period, iAvPer (=',
int (rParm2), ').'
write (fu, '(/A, A, /A, A, /A)')
'Solution: nPer is calculated as ((24/iAvPer) * Leap(iYr)).',
' Make certain',
'that the preprocessor used the same averaging period as TO',
'XXS, and that',
'nP is equal to nPer in each DMR file.'
c
c Error 19 closing.
c
write (fu, '(/A, A) ')
'TOXX run aborted: nP in a DMR file *= nPer calculated fr',
'om same.'
print ' (A) ' , '
stop 'TOXX run aborted: nP in a DMR file ** nPer from same.'
c
c -
c
c » Error 20: iYr read from DMR file *= corres. iYear from userinp.
c
200 continue
c
c Error 2O screen output.
c
print '(/A, 14, A, II, A, /A, II, A, 14, A, /A)',
' Error: Year iYr (=', iParml, ') read from DMR file #',
iParm2, ' differs from',
-------
' corresponding year iYear (', iParm2, ') (=',
int(rParml), ') read from',
' user input file.'
print ' (/A, A, /A) ',
' Solution: Make certain iYr in each DMR file always equals ',
'the',
' corresponding entry~in array iYear.' ~
c
c Error 20 file output.
c
write (fu, '(/A, 14, A, II, A, /A, II, A, 14, A, /A)')
'Error: Year iYr (=', iParml, ') read from DMR file #',
iParm2, ' differs from ',
' corresponding year iYear (', iParm2, ') (=',
int(rParml), ') read from',
' user input file.'
write (fu, ' (/A, A, /A) ')
'Solution: Make certain iYr in each DMR file always equals t',
'he',
'corresponding entry in array iYear.'
c
c Error 20 closing.
c
write (fu, ' (/A) ')
'TOXX run aborted: iYr in a DMR file *= iYear from user.'
print ' (A) ', '
stop 'TOXX run aborted: iYr in a DMR file A= iYear from user.'
c
c --
c
c » Error 21: Output form from DMR file requested but iTab invalid.
c
210 continue
c
c Error 21 screen output.
c
print '(/A, II, A, /A, 14, A, 14, A)',
' Error: Output format from-DMR file requested (ITab = ',
int (rParml),- '}, but iTab', '
' value (=', iParm2, .') from DMR file for year ',
iParml, ' is invalid.'
print ' (/A, A, /A) ',
' Solution: Assuming !Tab=9 is desired, set iTab to the same',
' legal value',
' (0, 1, or 2) in every DMR. file.'
c . ..- •'•"••'.'••
c Error 21 file output.
c
write (fu, '(/A, II, A, /A, 14, A, 14, A)')
'Error: Output format from DMR file requested (ITab = ',
int (rParml), '), but iTab',
' value (=', iParm2, ') from DMR file for year ',
iParml, 'is invalid.^!
write (fu, ' (/A, A)') . -
'Solution: Assuming lTab=9 is desired, set iTab to the same ',
'legal value',
'{0, 1, or 2) in every DMR file.'
c
c Error 21 closing.
c
-------
write (fu, ' (/A) ')
'TOXX run aborted: Output option from DMR file invalid.'
print ' (A)', ' '
stop 'TQXX run aborted: Output option from DMR file invalid.'
c
c - -- -
c " "
c » Error 22: nX in DMR file for year iYr > MRECPR.
c
C THIS ERROR CONDITION HAS BEEN ELIMINATED.
C
220 continue
c
c - -
c
c » Error 23: Group number differs from previous by > 1.
c
230 continue
c
c Error 23 screen output.
c
print ' (/A, 12, A, 12, A, /A, 12, A, A, /A, A)',
' Error: Group number (=', iParml, ') for source #', iParm2,
' differs from',
' previous group number (=', int(rParml), ') by more ',
'than ^ after',
' source information sorted in ascending order by gro',
'up number.'
print ' (/A, A, /A, A, /A) ',
' Solution: Enforce restriction that group numbers must, aft',
'er sorting',
' in ascending order, form a sequence of consecutive integer',
's beginning',
' with 1.'
c
c Error 23 file output.
c . . -
write (fu, '(/A, 12, A, 12, A, /A. 12, A, A, /A)')
'Error: Group number (=',' iParml, '} for source #', iParm2,
'differs from',
' previous group number {=', int(rParml), ') by more t',
'nan 1 after',
'source information sorted in ascending order by group number.'
write (fu, '(/A, A, /A, A, /A)')
'Solution: Enforce restriction that group numbers must, afte',
. . .'r sorting', '"••". .
'in ascending order, form a sequence of consecutive integers',
' beginning',
'with 1.'
c
c Error 23 closing.
c
write (fu, ' (/A)-'-jL-
'TOXX run aborted: Group numbers not consecutive.'
print ' (A) ', ' '
stop 'TOXX run aborted: Group numbers not consecutive.'
c
c - - - -
c
C » Error 24: nSG > MGRP.
-------
c
240 continue
c
c Error 24 screen output.
c
print '(/A, 14, A, /A, 14, A)',
' Error: Calculated number of TOXX source groups nSG {=',
iParml, ') exceeds max value',
MSRP (=', iParm2, ').'
print ' (/A, A, /A, A, /A) ',
' Solution: Decrease number of source groups used in user in',
'put file',
' or increase parameter MSRP in insert file. (Warning: Incr',
'easing MGRP',
' may make TOXX program too large to fit in memory.)'
c
c Error 24 file output.
c
write (fu, '(/A, 14, A, /A, 14, A)')
' Error: Calculated number of TOXX source groups nSG (=',
iParml, ') exceeds max value',
MGRP {=', iParm2, ').'
write (fu, '(/A, A, /A, A, /A)')
'Solution: Decrease number of source groups used in user inp',
'ut file',
'or increase parameter MGRP in insert file. (Warning: Incre',
'asing MGRP',
'may make TOXX program too large to fit in memory.)'
c
c Error 24 closing.
c
write (fu, '(/A)') 'TOXX run aborted: nSG exceeds MGRP.'
print ' (A) ' , '
stop 'TOXX run aborted: nSG exceeds MGRP.'
c
c
c
c » Error 25: nRand > MPER.
c
C THIS ERROR CONDITION HAS BEEN ELIMINATED.
c
250 continue
c
c - -
c
c » Error 26: probOn for iSrc (i), iGrp (i) > 1.0.
c
260 continue
c
c Error 26 screen output.
c
print '{/A, F7.4, A, A, /A, 12, A, 12, A, /A)',
' Error: Toxic release probability probOn (=', rParml, ') fo',
'r TOXX',
' source #', iParml, ' (which is a member of group #',
iParm2,') is not ',
' equal to 1.0. No probability may exceed 1.0.'
print ' (/A, A, /A) ',
' Solution: Make certain the release probability for every a',
'ource group',
-------
' is a fraction between 0 and 1.0, inclusive.'
c
c Error 26 file output.
c
write (fu, '(/A, F7.4, A, A, /A, 12, A, 12, A, /A}')
'Error: Toxic release probability probOn (»', rParml, ') for',
' TOXX',
' source #', iParml, ' (which is a member of group #',
iPann2,') is not ',
' equal to 1.0. No probability may exceed 1.0.'
write (fu, ' (/A, A, /A) ')
'Solution: Make certain the release probability for every so',
'urce group',
' is a fraction between 0 and 1.0, inclusive.'
c
c Error 26 closing.
c
write (fu, ' (/A)')
'TOXX run aborted: Probability for a source exceeds 1.0.'
print ' (A) ', '
stop 'TOXX run aborted: Probability for a source exceeds 1.0.'
c
c - -
c
c » Error 27: probOn (i) for iSrc (i) (member of iGrp (i)) < 0.
c
270 continue
c
c Error 27 screen output.
c
print '(/A, F7.4, A, A, /A, 12, A, 12, A, /A)',
' Error: Toxic release probability probOn (=', rParml, ') fo',
'r TOXX',
' source #', iParml, ' (which is a member of group #',
iParm2,') is less',
' than zero.'
print ' (/A, A, /A) ' ,
' Solution: Make certain the release probability for every s',
'ource group',
' is positive definite.'
c
c Error 27 file output.
c
write (fu, '(/A, F7.4, A, A, /A, 12, A, 12, A, /A)')
'Error: Toxic release probability probOn ( = ', rParml, '} for',
' TOXX',
' source #', iParml, ' (which is a member of group #',
iParm2,') is less',
' than zero.'
write (fu, ' (/A, A, /A)')
'Solution: Make certain the release probability for every so',
'urce group',
'is positive definite.'
c
c Error 27 closing.
c
write (fu, ' (/A) ')
'TOXX run aborted: Probability for a source is less than 0.'
print ' (A) ', '
stop 'TOXX run aborted: Probability for a source is less than 0.'
-------
c
c - — -
c
c » Error 28: timeOn (i) for iSrc (i) (member of iGrp (i)) < 0 hrs.
c
280 continue
c— —
c Error 28 screen output.
c
print '(/A, 14, A, A, /A, 12, A, 12, A, /A)',
' Error: Toxic release duration timeOn (=', int (rParml), ' ',
'hrs) for TOXX',
' source #', iParml, ' (which is a member of group #',
iParm2,') is',
' less than zero hours.'
print ' (/A, A, /A) ',
' Solution: Make certain the release duration for every sour',
'ce group',
' is positive definite.'
c
c Error 28 file output.
c
write (fu, '(/A, 14, A, A, /A, 12, A, 12, A, /A)')
'Error: Toxic release duration timeOn (=', int (rParml), ' h',
'rs) for TOXX',
' source #', iParml, ' (which is a member of group #',
iParm2,') is',
' less than zero hours.'
write (fu, ' (/A, A, /A)')
'Solution: Make certain the release duration for every sourc',
'e group',
'is positive definite.'
c
c Error 28 closing.
c
write (fu, ' (/A) ')
. . 'TOXX run aborted: Duration for a source is less than 0 hrs.'
print ' (A) ', '
• . stop
. 'TOXX run aborted: Duration for a source is less than 0 hrs.'
c
c
c
c » Error 29: rate (i,j) (iSrc (i), iGrp (i), pollutant j) < 0 g/s.
c
290 continue
c .
c Error 29 screen output.
c
print '(/A, F8.3, A, 12, A, /A, 12, A, II, A, /A)',
' Error: Emissions rate (=', rParm2, ' g/s) for source #',
iParml, ' (which is',
. ' a member of group #', iParm2, '), pollutant #',
. . int(rParml), ' is less',
' than zero grams per second.'
print ' (/A, A, /A) ',
' Solution: Make certain the emissions rate for every source',
' group',
' is positive definite.'
-------
c Error 29 file output.
c
write (fu, '(/A, F8.3, A, 12, A, /A, 12, A, II, A, /A)')
'Error: Emissions rate (a', rParm2, ') for source #', iParml,
' (which is',
' a member of group #', iParm2, '), pollutant #',
int(rParml), ' is less',
' than zero grams per second.'
write (fu, '(/A, A, /A)')
'Solution: Make certain the emissions rate for every source ',
'group',
'is positive definite.'
c
c Error 29 closing.
c
write (fu, ' (/A) ')
.'TOXX run aborted: Emis. rate for one source, pollutant < 0 g/s'
print ' (A) ', '
stop
.'TOXX run aborted: Emis. rate for one source, pollutant < 0 g/s'
c
c - -
c
c » Error 30: probOn for iSrc (i), iGrp (i) *= probOn (i-1) in same
c source group
c
300 continue
c
c Error 30 screen output.
c
print '(/A, F6.4, A, A, 12, A, /A, 12, A, 12, A, /A)',
' Error: Toxic release probability (=', rParml, ') for sour',
'ce #', iParml, ',',
' group #', iParm2, ' differs from that of source #',
int (rParm2), ', the prior',
' source in the same group.'
print ' (/A, A, /A) ',
' Solution: Within a single source group, all toxic release ',
'probabilities',
' must be the same. Make certain this is the case.'
c
c Error 30 file output.
c
write (fu, '(/A, F6.4, A, A, 12, A, /A, 12, A, 12, A, /A)')
'Error: Toxic release probability (=', rParml, ') for sour',
'ce #', iParml, ',',
' group #', iParm2, ' differs from that of source #',
int (rParm2), ', the prior',
' source in the same group.'
write (fu, ' (/A, A, /A) ')
'Solution: Within a single source group, all toxic release p',
'robabilities',
'must be the same. Make certain this is the case.'
c
c Error 30 closing.
c
write (fu, ' (/A)')
'TOXX run aborted: probOn varies within a source group.'
print ' (A)', ' '
stop 'TOXX run aborted: probOn varies within a source group.'
-------
c
c -
c
c » Error 31: timeOn for iSrc (i) , iGrp (i) *= timeOn (i-1) in same
c source group
c
310 continue
c
c Error 31 screen output.
c
print '(/A, 12, A, A, 12, /A, 12, A, A, /A, 12, A, A)',
' Error: Toxic release duration (=', int (rParml), ' hrs) f,
'or source #', iParml,
' (which is a member of group #', iParm2, ') differs ',
'from that ',
' of source #', int (rParm2), ', the prior source in ',
' the same group.'
print ' (/A, A, /A) ',
' Solution: Within a single source group, all toxic release ',
'durations',
' must be the same. Make certain this is the case.'
c
c Error 31 file output.
c
write (fu, '(/A, 12, A, A, 12, /A, 12, A, A, /A, 12, A, A)')'
'Error: Toxic release duration ( = ', int (rParml), ' hrs) fo',
'r source #', iParml,
' (which is a member of group #', iParm2, ') differs f' ,
'rom that ',
' of source #', int (rParm2), ', the prior source in t',
'he same group.'
write (fu, '(/A, A, /A)')
'Solution: Within a single source group, all toxic release d',
'urations',
'must be the same. Make certain this is the case.'
c
c Error 31 closing.
c
write (fu, ' (/A) ')
"TOXX run aborted: timeOn varies within a source group.'
print ' (A) ', '
stop 'TOXX run aborted: timeOn varies within a source group.'
c
c
c
c » Error 32: rate for iSrc (i) , pollutant j A= rate for same pol-
c lutant, iSrc (i-l), same source group
c
320 continue
c
c Error 32 screen output.
c
print '(/A, F8.4, A, 12, A, 12, /A, 12, A, A, /A)',
' Error: Emissions rate {=', rParml, ' g/s) for source #',
iParml, ', pollutant #', iParm2,
' differs from that of source #', int (rParm2), ', th',
'e prior',
' source in the same group.'
print ' (/A, A, /A)',
' Solution: Within a single source group, all emissions rate',
-------
'a for a given',
' pollutant must be the same. Make certain this is the case.'
c
c Error 32 file output.
c
write (fu, '(/A, F8.4, A, 12, A, 12, /A, 12, A, A, /A)')
'Error: Emissions rate (=', rParml, ' g/s) for source #'",
iParml, ', pollutant #', iParm2,
' differs from that of source #', int (rPann2), ', th',
'e prior',
' source in the same group.'
write (fu, ' (/A, A, /A)'}
' Solution: Within a single source group, all emissions rate',
's for a given',
' pollutant must be the same. Make certain this is the case.'
c
c Error 32 closing.
c
write (fu, ' (/A) '}
'TOXX run aborted: Rate for a pollutant varies w/i a group.'
print ' (A) ', '
stop 'TOXX run aborted: Rate for a pollutant varies w/i a group.'
c
c -
c
c » Error 33: hET (j) < bkgd (k) , resulting in effHET (j) < 0.
c
330 continue
c
c Error 33 screen output.
c
print '(/A, II, A, F8.4, A, /A, F8.4, A, A, /A)',
' Error: Health effect threshold #', iParml, ' (=', rParml,
' ug/m3) is less than',
' corresponding background (=', rParm2, ' ug/m3), res',
'ulting in an',
' effective threshold less than zero grams per m3 .'
print ' (/A, A, /A) ',
' Solution: Use only thresholds that are greater than the co',
'rrespending',
' backgrounds.'
c
c Error 33 file output.
c
write (fu, '(/A, II, A, F8.4, A, /A, F8.4, A, A, /A) ')
'Error: Health effect threshold #', iParml, ' (=', rParml,
' ug/m3) is less than',
' corresponding background ( = ', rParm2, ' ug/m3), resu',
'Iting in an',
' effective threshold less than zero grams per m3.'
write (fu, ' (/A, A, /A) '}
'Solution: Use only thresholds that are greater than the cor',
'responding',
'backgrounds.'
c
c Error 33 closing.
c
write (fu, ' (/A)')
'TOXX run aborted: Health effect threshold < background.'
print ' (A) ', ' '
-------
stop "TOXX run aborted: Health effect threshold < background.'
c
c » Error 34: cutoff < pMxCut.
c
340 continue
c
c Error 34 screen output.
c
print '(/A, A, /A, 1PE10.4, A, A, /A, 1PE10.4, A, A, /A)',
' Error: Cutoff for normalized concentrations calculated in ',
'TOXX program',
' (*', rParml, ' s/m3) is less than maximum cutoff va',
'lue used by',
' preprocessor pMxCut { = ', rParm2, ' s/m3). This may',
' result in TOXX',
' not detecting some exceedances.'
print ' (/A, A, /A, A, /A, A, /A, A) ',
' Solution: The variable cutoff is used in the TOXX screeni',
'ng of DMR',
' data. It is formulated so that only DMR data that cannot ',
'possibly',
' cause exceedance are dropped. If TOXX cutoff is less tha',
'n the cutoff ,
' used by the preprocessor, the preprocessor cutoff should b',
'e reduced.'
c
c Error 34 file output.
c
write (fu, '(/A, A, /A, 1PE10.4, A, A, /A, 1PE10.4, A, A, /A)')
'Error: Cutoff for normalized concentrations calculated in T',
'OXXS program',
' (=', rParml, ' s/m3) is less than maximum cutoff val',
'ue used by',
' preprocessor pMxCut ( = ', rParm2, ' s/m3). This may ',
'result in TOXX',
' not detecting some exceedances.'
write (fu, '(/A, A, /A, A, /A, A, /A, A)')
'Solution: The variable cutoff is used in the TOXX screenin',
'g of DMR',
'data. It is formulated so that only DMR data that cannot p',
'possibly',
'cause exceedance are dropped. If TOXX cutoff is less than',
' the cutoff,
'used by the preprocessor, the preprocessor cutoff should be',
' reduced.'
c
c Error 34 closing.
c
write (fu, ' (/A) ')
'TOXX run aborted: TOXX cutoff less than pMxCut.'
print ' (A) ', ' '
stop 'TOXX run aborted: TOXX cutoff less than pMxCut.'
c
c » Error 35: Invalid warning code.
c
350 continue
-------
c
c Error 35 screen output.
c
print '(/A, 12, A, A, /A)',
' Error: The value of variable wrCode (= ',iParml,') is not ',
'valid.',
' No warning condition matches this value.'
print ' (/A, A, /A, A, /A, A, /A, A, /A, A, /A) ',
' Solution: This error is highly unusual, and probably refle',
'cts a',
' typing error in the TOXX source code. Try to trace to th',
'e point',
' in the code which called the Warng subroutine, and check t',
' he value',
' of the second parameter passed to the Warng subroutine. I',
't should',
' match the number of the most appropriate warning message, ',
'given the',
' context of the calling statement, in subroutine Warng.'
c
c Error 35 file output.
c
write (fu, '(/A, 12, A, A, /A)')
'Error: The value of variable wrCode (= ',iParml,') is not V,
'alid.',
' No warning condition matches this value.'
write (fu, '(/A, A, /A, A, /A, A, /A, A, /A, A, /A)')
'Solution: This error is highly unusual, and probably reflec',
'ts a',
'typing error in the TOXX source code. Try to trace to the',
' point',
'in the code which called the Warng subroutine, and check th',
'e value',
'of the second parameter passed to the Warng subroutine. It',
' should',
'match the number of the most appropriate warning message, g',
'iven the',
'context of the calling statement, in subroutine Warng.'
c
c Error 35 closing.
c
write (fu, '(/A)') 'TOXX run aborted.'
print ' (A) ', ' '
stop 'TOXX run aborted.'
c
end
c
c end subroutine Error
c
-------
TECHNICAL REPORT DATA
(Please read Instructions OH reverse before completing)
1. REPORT NO.
EPA-453/R-94-058B
3. REOPIENr S ACCESSION NO.
4. TTTLE AND SUBTITLE
Toxic Modeling System Short-Term (TOXST) User's Guide:
Volume II
S. REPORT DATE
July 1994
6. PERFORMING ORGANIZATION CODE
7. AUTHORS)
8. PERFORMING ORGANIZATION REPORT NO.
9. PERFORMING ORGANIZATION NAME AND ADDRESS
Sullivan Environmental Consulting, Inc.
1900 Elkin St, Suite 200
Alexandria, VA 22308
10. PROGRAM ELEMENT NO.
11. CONTRACT/GRANT NO.
68D20189
12. SPONSORING AGENCY NAME AND ADDRESS
13. TYPE OF REPORT AND PERIOD COVERED
U.S. Environmental. Protection Agency
Office of Air Quality Planning and Standards
Emission Standards Division
Research Triangle-Park, NC 27711
14. SPONSORING AGENCY CODE
IS. SUPPLEMENTARY NOTES
EPA project manager: David E. Guinnup
16. ABSTRACT
This document describes the Toxic Modeling System Short-Term (TOXST) and provides instructions
on its implementation. TOXST is a personal-computer-based model that has been developed in
conjunction with the release of the EPA's Industrial Source Complex Dispersion Model (EPA, 1992) and
the publication of the EPA's "A Tiered Modeling Approach for Assessing the Risks Due to Sources of
Hazardous Air Pollution," (EPA-450/4-92-001). The purpose of TOXST is to assist in the evaluation of
acute health hazards that may result from short-term exposure to air pollutants. This document represents
a revision of the earlier version of. TOXST which incorporates additional options for simulating complex
intermittent sources of industrial .pollution.
17.
KEY WORDS AND DOCUMENT ANALYSIS
DESCRIPTORS
b. IDENTIFIERS/OPEN ENDED TERMS
c. COSATI Field/Group
Air Pollution
Atmospheric Dispersion Modeling
Air Toxics
Risk Assessment
18. DISTRIBUTION STATEMENT
Release Unlimited
19. SECURTTY CLASS (Report)
Unclassified
21. NO. OF PAGES
20. SECURITY CLASS (Page)
Unclassified—
22. PRICE
EPA Form 2220-1 (Rev. 4-77) PREVIOUS EDITION IS OBSOLETE
-------
------- |