@@ -6,7 +6,7 @@ abstract type GaussianVerticalTerm end
66struct GaussianPlume <: PlumeModel end
77
88# Solution to the gaussian plume
9- struct GaussianPlumeSolution{F<: Number ,C<: GaussianCrossTerm ,V<: GaussianVerticalTerm ,P<: PlumeRise ,S<: StabilityClass ,E<: EquationSet } <: Plume
9+ struct GaussianPlumeSolution{F<: Number ,C<: GaussianCrossTerm ,V<: GaussianVerticalTerm ,P<: PlumeRise ,S<: StabilityClass ,E<: EquationSet ,D <: ProblemDomain } <: Plume
1010 scenario:: Scenario
1111 model:: Symbol
1212 rate:: F
@@ -19,8 +19,9 @@ struct GaussianPlumeSolution{F<:Number,C<:GaussianCrossTerm,V<:GaussianVerticalT
1919 plumerise:: P
2020 stability:: Type{S}
2121 equationset:: E
22+ domain:: D
2223end
23- GaussianPlumeSolution (s,m,Q,c,ρ,u,h_eff,cross,vert,pr,stab,es) = GaussianPlumeSolution (s,m,promote (Q,c,ρ,u,h_eff)... ,cross,vert,pr,stab,es)
24+ GaussianPlumeSolution (s,m,Q,c,ρ,u,h_eff,cross,vert,pr,stab,es,dom ) = GaussianPlumeSolution (s,m,promote (Q,c,ρ,u,h_eff)... ,cross,vert,pr,stab,es,dom )
2425
2526struct SimpleCrossTerm <: GaussianCrossTerm end
2627cross_term (y, σy, :: SimpleCrossTerm ) = exp (- 0.5 * (y/ σy)^ 2 )/ (√ (2 π)* σy)
@@ -67,20 +68,23 @@ function plume(scenario::Scenario, ::Type{GaussianPlume}, eqs=DefaultSet(); h_mi
6768 c_max = m/ Qᵒ
6869 c_max = c_max/ ρₐ
6970
71+ # domain
72+ dom = ProblemDomain (0.0 , Inf , - Inf , Inf , 0.0 , Inf )
73+
7074 return GaussianPlumeSolution (
7175 scenario, # scenario::Scenario
7276 :gaussian , # model::Symbol
7377 m, # mass emission rate
7478 c_max, # max_concentration
75- ρₐ, # mass concentration to vol concentration
76- windspeed (scenario,max (hᵣ,h_min),eqs), # windspeed
79+ ρₐ, # mass concentration to vol concentration
80+ windspeed (scenario,max (hᵣ,h_min),eqs), # windspeed
7781 hᵣ, # effective_stack_height::Number
7882 SimpleCrossTerm (),
7983 SimpleVerticalTerm (),
8084 NoPlumeRise (), # plume rise model
8185 _stability (scenario), # stability class
82- eqs # equation set
83- )
86+ eqs, # equation set
87+ dom) # problem domain
8488end
8589
8690@doc doc"""
@@ -151,6 +155,9 @@ function plume(scenario::Scenario{<:AbstractSubstance,<:VerticalJet,<:Atmosphere
151155 plume = NoPlumeRise ()
152156 end
153157
158+ # domain
159+ dom = ProblemDomain (0.0 , Inf , - Inf , Inf , 0.0 , Inf )
160+
154161 return GaussianPlumeSolution (
155162 scenario, # scenario::Scenario
156163 :gaussian , # model::Symbol
@@ -163,16 +170,16 @@ function plume(scenario::Scenario{<:AbstractSubstance,<:VerticalJet,<:Atmosphere
163170 SimpleVerticalTerm (),
164171 plume, # plume rise model
165172 stab, # stability class
166- eqs # equation set
167- )
173+ eqs, # equation set
174+ dom) # problem domain
168175end
169176
170177function (g:: GaussianPlumeSolution{F,C,V,NoPlumeRise,S,E} )(x, y, z, t= 0 ) where {F,C,V,S,E}
171178 # domain check
172179 h = g. effective_stack_height
173180 if (x== 0 )&& (y== 0 )&& (z== h)
174181 return g. max_concentration
175- elseif (x ≤ 0 ) || (z < 0 )
182+ elseif _in_domain (x,y,z,g . domain) == false
176183 return zero (F)
177184 else
178185 G = g. rate
@@ -197,7 +204,7 @@ function (g::GaussianPlumeSolution{F,C,V,<:BriggsModel,S,E})(x, y, z, t=0) where
197204 h = g. effective_stack_height
198205 if (x== 0 )&& (y== 0 )&& (z== h)
199206 return g. max_concentration
200- elseif (x ≤ 0 ) || (z < 0 )
207+ elseif _in_domain (x,y,z,g . domain) == false
201208 return zero (F)
202209 else
203210 G = g. rate
0 commit comments