Downwards transport of solutes, litter and humus with percolation water.
26{
27
28
29
30
31 if ( have_water_table &&
32 cbm::flt_greater_zero( infiltration))
33 {
34 ldndc_kassert( h_wl > 0.0);
35
36 accumulated_n_nh4_infiltration_leach_sl[0] -= nh4_an_sl[0] + sc_.coated_nh4_sl[0];
37 accumulated_n_nh3_infiltration_leach_sl[0] -= sc_.nh3_liq_sl[0];
38 accumulated_n_no_infiltration_leach_sl[0] -= an_no_liq_sl[0];
39 accumulated_n_n2o_infiltration_leach_sl[0] -= an_n2o_liq_sl[0];
40 accumulated_n_urea_infiltration_leach_sl[0] -= sc_.urea_sl[0];
41 accumulated_n_no3_infiltration_leach_sl[0] -= no3_an_sl[0];
42 accumulated_n_don_infiltration_leach_sl[0] -= don_an_sl[0];
43
44 double const leach_fact_sbl( cbm::bound_max( infiltration / h_wl, 0.99));
45 LEACH_DOWN( sb_.ch4_sbl[0], ch4_liq_sl[0], leach_fact_sbl);
46 LEACH_DOWN( sb_.o2_sbl[0], o2_liq_sl[0], leach_fact_sbl);
47 LEACH_DOWN( sb_.nh4_sbl[0], nh4_an_sl[0], leach_fact_sbl);
48 LEACH_DOWN( sb_.coated_nh4_sbl[0], sc_.coated_nh4_sl[0], leach_fact_sbl);
49 LEACH_DOWN( sb_.nh3_sbl[0], sc_.nh3_liq_sl[0], leach_fact_sbl);
50 LEACH_DOWN( sb_.no_sbl[0], an_no_liq_sl[0], leach_fact_sbl);
51 LEACH_DOWN( sb_.n2o_sbl[0], an_n2o_liq_sl[0], leach_fact_sbl);
52 LEACH_DOWN( sb_.urea_sbl[0], sc_.urea_sl[0], leach_fact_sbl);
53 LEACH_DOWN( sb_.no3_sbl[0], no3_an_sl[0], leach_fact_sbl);
54 LEACH_DOWN( sb_.don_sbl[0], don_an_sl[0], leach_fact_sbl);
55 LEACH_DOWN( sb_.doc_sbl[0], sc_.doc_sl[0], leach_fact_sbl);
56 LEACH_DOWN( sb_.co2_sbl[0], co2_liq_sl[0], leach_fact_sbl);
57 LEACH_DOWN( sb_.so4_sbl[0], sc_.so4_sl[0], leach_fact_sbl);
58 LEACH_DOWN( sb_.ni_sbl[0], sc_.ni_sl[0], leach_fact_sbl);
59 LEACH_DOWN( sb_.ui_sbl[0], sc_.ui_sl[0], leach_fact_sbl);
60 if ( have_radon_diffusion)
61 {
62 LEACH_DOWN( sb_.radon_sbl[0], radon_liq_sl[0], leach_fact_sbl);
63 }
64
65 accumulated_n_nh4_infiltration_leach_sl[0] += nh4_an_sl[0] + sc_.coated_nh4_sl[0];
66 accumulated_n_nh3_infiltration_leach_sl[0] += sc_.nh3_liq_sl[0];
67 accumulated_n_no_infiltration_leach_sl[0] += an_no_liq_sl[0];
68 accumulated_n_n2o_infiltration_leach_sl[0] += an_n2o_liq_sl[0];
69 accumulated_n_urea_infiltration_leach_sl[0] += sc_.urea_sl[0];
70 accumulated_n_no3_infiltration_leach_sl[0] += no3_an_sl[0];
71 accumulated_n_don_infiltration_leach_sl[0] += don_an_sl[0];
72
73 for (size_t sbl = 1; sbl < sb_.surfacebulk_layer_cnt(); ++sbl)
74 {
75 size_t const sbl_plus( sbl - 1);
76 LEACH_DOWN( sb_.ch4_sbl[sbl], sb_.ch4_sbl[sbl_plus], leach_fact_sbl);
77 LEACH_DOWN( sb_.o2_sbl[sbl], sb_.o2_sbl[sbl_plus], leach_fact_sbl);
78 LEACH_DOWN( sb_.nh4_sbl[sbl], sb_.nh4_sbl[sbl_plus], leach_fact_sbl);
79 LEACH_DOWN( sb_.coated_nh4_sbl[sbl], sb_.coated_nh4_sbl[sbl_plus], leach_fact_sbl);
80 LEACH_DOWN( sb_.nh3_sbl[sbl], sb_.nh3_sbl[sbl_plus], leach_fact_sbl);
81 LEACH_DOWN( sb_.no_sbl[sbl], sb_.no_sbl[sbl_plus], leach_fact_sbl);
82 LEACH_DOWN( sb_.n2o_sbl[sbl], sb_.n2o_sbl[sbl_plus], leach_fact_sbl);
83 LEACH_DOWN( sb_.urea_sbl[sbl], sb_.urea_sbl[sbl_plus], leach_fact_sbl);
84 LEACH_DOWN( sb_.no3_sbl[sbl], sb_.no3_sbl[sbl_plus], leach_fact_sbl);
85 LEACH_DOWN( sb_.don_sbl[sbl], sb_.don_sbl[sbl_plus], leach_fact_sbl);
86 LEACH_DOWN( sb_.doc_sbl[sbl], sb_.doc_sbl[sbl_plus], leach_fact_sbl);
87 LEACH_DOWN( sb_.co2_sbl[sbl], sb_.co2_sbl[sbl_plus], leach_fact_sbl);
88 LEACH_DOWN( sb_.so4_sbl[sbl], sb_.so4_sbl[sbl_plus], leach_fact_sbl);
89 LEACH_DOWN( sb_.ni_sbl[sbl], sb_.ni_sbl[sbl_plus], leach_fact_sbl);
90 if ( have_radon_diffusion)
91 {
92 LEACH_DOWN( sb_.radon_sbl[sbl], sb_.radon_sbl[sbl_plus], leach_fact_sbl);
93 }
94 }
95 }
96
97
98
99
100
101 if ( cbm::flt_greater_zero( waterflux_sl[0]) &&
102 cbm::flt_greater_zero( v_water_sl[0]))
103 {
104 size_t const sl( 0);
105 size_t const sl_plus( 1);
106
107 double const leach_fact( cbm::bound_min( 0.0, waterflux_sl[sl] / v_water_sl[sl]));
108
109 double const leach_fact_nh4( cbm::bound_max( leach_fact * sipar_.RETNH4(), 0.9999));
110 double const leach_fact_no3( cbm::bound_max( leach_fact * sipar_.RETNO3(), 0.9999));
111 double const leach_fact_doc( cbm::bound_max( leach_fact * sipar_.RETDOC(), 0.9999));
112 double const leach_fact_mic( cbm::bound_max( leach_fact * sipar_.METRX_RET_MICROBES(), 0.9999));
113 double const leach_fact_lit( cbm::bound_max( leach_fact * sipar_.METRX_RET_LITTER(), 0.9999));
114 double const leach_fact_hum( cbm::bound_max( leach_fact * sipar_.METRX_RET_HUMUS(), 0.9999));
115 double const leach_fact_dissolved_gases( cbm::bound_max( leach_fact, 0.9999));
116
117 if ( spinup_.spinup_stage( this->lclock()))
118 {
119 spinup_.loose_lit_1[sl] += leach_fact_lit;
120 spinup_.loose_lit_2[sl] += leach_fact_lit;
121 spinup_.loose_lit_3[sl] += leach_fact_lit;
122
123 spinup_.loose_aorg[sl] += leach_fact_mic;
124
125 spinup_.decompose_hum_1[sl] += leach_fact_hum;
126 spinup_.decompose_hum_2[sl] += leach_fact_hum;
127 spinup_.decompose_hum_3[sl] += leach_fact_hum;
128
129 spinup_.c_to_lit_1[sl_plus] += sc_.C_lit1_sl[sl] * leach_fact_lit;
130 spinup_.c_to_lit_2[sl_plus] += sc_.C_lit2_sl[sl] * leach_fact_lit;
131 spinup_.c_to_lit_3[sl_plus] += sc_.C_lit3_sl[sl] * leach_fact_lit;
132
133 spinup_.c_to_aorg[sl_plus] += sc_.C_aorg_sl[sl] * leach_fact_mic;
134
135 spinup_.c_to_humus_1_sl[sl_plus] += c_humus_1_sl[sl] * leach_fact_hum;
136 spinup_.c_to_humus_2_sl[sl_plus] += c_humus_2_sl[sl] * leach_fact_hum;
137 spinup_.c_to_humus_3_sl[sl_plus] += c_humus_3_sl[sl] * leach_fact_hum;
138 }
139
140 accumulated_n_aorg_leaching_sl[sl] += sc_.N_aorg_sl[sl] * leach_fact_mic;
141 LEACH_DOWN( sc_.C_aorg_sl[sl], sc_.C_aorg_sl[sl_plus], leach_fact_mic);
142 LEACH_DOWN( sc_.N_aorg_sl[sl], sc_.N_aorg_sl[sl_plus], leach_fact_mic);
143
144 transport_.leach_down_epsilon( sc_.C_micro1_sl[sl], sc_.C_micro1_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro1_sl[sl]));
145 transport_.leach_down_epsilon( sc_.C_micro2_sl[sl], sc_.C_micro2_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro2_sl[sl]));
146 transport_.leach_down_epsilon( sc_.C_micro3_sl[sl], sc_.C_micro3_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro3_sl[sl]));
147
148 if( n_micro_1_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]) )
149 {
150 accumulated_n_micro_leaching_sl[sl] += ( n_micro_1_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]) ) * leach_fact_mic;
151 }
152 if( n_micro_2_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]) )
153 {
154 accumulated_n_micro_leaching_sl[sl] += ( n_micro_2_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]) ) * leach_fact_mic;
155 }
156 if( n_micro_3_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]) )
157 {
158 accumulated_n_micro_leaching_sl[sl] += ( n_micro_3_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]) ) * leach_fact_mic;
159 }
160 transport_.leach_down_epsilon( n_micro_1_sl[sl], n_micro_1_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]));
161 transport_.leach_down_epsilon( n_micro_2_sl[sl], n_micro_2_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]));
162 transport_.leach_down_epsilon( n_micro_3_sl[sl], n_micro_3_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]));
163
164 LEACH_DOWN( sc_.C_lit1_sl[sl], sc_.C_lit1_sl[sl_plus], leach_fact_lit);
165 LEACH_DOWN( sc_.C_lit2_sl[sl], sc_.C_lit2_sl[sl_plus], leach_fact_lit);
166 LEACH_DOWN( sc_.C_lit3_sl[sl], sc_.C_lit3_sl[sl_plus], leach_fact_lit);
167
168 accumulated_n_litter_leaching_sl[sl] += (sc_.N_lit1_sl[sl] + sc_.N_lit2_sl[sl] + sc_.N_lit3_sl[sl]) * leach_fact_lit;
169 LEACH_DOWN( sc_.N_lit1_sl[sl], sc_.N_lit1_sl[sl_plus], leach_fact_lit);
170 LEACH_DOWN( sc_.N_lit2_sl[sl], sc_.N_lit2_sl[sl_plus], leach_fact_lit);
171 LEACH_DOWN( sc_.N_lit3_sl[sl], sc_.N_lit3_sl[sl_plus], leach_fact_lit);
172
173 LEACH_DOWN( c_humus_1_sl[sl], c_humus_1_sl[sl_plus], leach_fact_hum);
174 LEACH_DOWN( c_humus_2_sl[sl], c_humus_2_sl[sl_plus], leach_fact_hum);
175 LEACH_DOWN( c_humus_3_sl[sl], c_humus_3_sl[sl_plus], leach_fact_hum);
176
177 accumulated_n_humus_1_leaching_sl[sl] += n_humus_1_sl[sl] * leach_fact_hum;
178 accumulated_n_humus_2_leaching_sl[sl] += n_humus_2_sl[sl] * leach_fact_hum;
179 accumulated_n_humus_3_leaching_sl[sl] += n_humus_3_sl[sl] * leach_fact_hum;
180 LEACH_DOWN( n_humus_1_sl[sl], n_humus_1_sl[sl_plus], leach_fact_hum);
181 LEACH_DOWN( n_humus_2_sl[sl], n_humus_2_sl[sl_plus], leach_fact_hum);
182 LEACH_DOWN( n_humus_3_sl[sl], n_humus_3_sl[sl_plus], leach_fact_hum);
183
184 accumulated_n_nh4_leaching_sl[sl] += (nh4_ae_sl[sl] + nh4_an_sl[sl] + sc_.coated_nh4_sl[sl]) * leach_fact_nh4;
185 accumulated_n_nh3_leaching_sl[sl] += sc_.nh3_liq_sl[sl] * leach_fact_doc;
186 accumulated_n_urea_leaching_sl[sl] += sc_.urea_sl[sl] * leach_fact_doc;
187 LEACH_DOWN( nh4_ae_sl[sl], nh4_ae_sl[sl_plus], leach_fact_nh4);
188 LEACH_DOWN( nh4_an_sl[sl], nh4_an_sl[sl_plus], leach_fact_nh4);
189 LEACH_DOWN( sc_.coated_nh4_sl[sl], sc_.coated_nh4_sl[sl_plus], leach_fact_nh4);
190 LEACH_DOWN( sc_.nh3_liq_sl[sl], sc_.nh3_liq_sl[sl_plus], leach_fact_doc);
191 LEACH_DOWN( sc_.urea_sl[sl], sc_.urea_sl[sl_plus], leach_fact_doc);
192
193 sc_.accumulated_n_no3_leaching_sl[sl] += (no3_ae_sl[sl] + no3_an_sl[sl]) * leach_fact_no3;
194 LEACH_DOWN( no3_ae_sl[sl], no3_ae_sl[sl_plus], leach_fact_no3);
195 LEACH_DOWN( no3_an_sl[sl], no3_an_sl[sl_plus], leach_fact_no3);
196
197 accumulated_n_don_leaching_sl[sl] += (don_ae_sl[sl] + don_an_sl[sl]) * leach_fact_doc;
198 LEACH_DOWN( don_ae_sl[sl], don_ae_sl[sl_plus], leach_fact_doc);
199 LEACH_DOWN( don_an_sl[sl], don_an_sl[sl_plus], leach_fact_doc);
200 LEACH_DOWN( sc_.doc_sl[sl], sc_.doc_sl[sl_plus], leach_fact_doc);
201 LEACH_DOWN( sc_.an_doc_sl[sl], sc_.an_doc_sl[sl_plus], leach_fact_doc);
202 LEACH_DOWN( ae_acetate_sl[sl], ae_acetate_sl[sl_plus], leach_fact_doc);
203 LEACH_DOWN( an_acetate_sl[sl], an_acetate_sl[sl_plus], leach_fact_doc);
204
205 accumulated_n_no_leaching_sl[sl] += (no_liq_sl[sl]+an_no_liq_sl[sl]) * leach_fact_dissolved_gases;
206 accumulated_n_n2o_leaching_sl[sl] += (n2o_liq_sl[sl]+an_n2o_liq_sl[sl]) * leach_fact_dissolved_gases;
207 LEACH_DOWN( no_liq_sl[sl], no_liq_sl[sl_plus], leach_fact_dissolved_gases);
208 LEACH_DOWN( an_no_liq_sl[sl], an_no_liq_sl[sl_plus], leach_fact_dissolved_gases);
209 LEACH_DOWN( n2o_liq_sl[sl], n2o_liq_sl[sl_plus], leach_fact_dissolved_gases);
210 LEACH_DOWN( an_n2o_liq_sl[sl], an_n2o_liq_sl[sl_plus], leach_fact_dissolved_gases);
211
212 LEACH_DOWN( ch4_liq_sl[sl], ch4_liq_sl[sl_plus], leach_fact_dissolved_gases);
213 LEACH_DOWN( co2_liq_sl[sl], co2_liq_sl[sl_plus], leach_fact_dissolved_gases);
214 LEACH_DOWN( o2_liq_sl[sl], o2_liq_sl[sl_plus], leach_fact_dissolved_gases);
215
216 LEACH_DOWN( sc_.so4_sl[sl], sc_.so4_sl[sl_plus], leach_fact_no3);
217 LEACH_DOWN( sc_.ni_sl[sl], sc_.ni_sl[sl_plus], leach_fact_doc);
218 LEACH_DOWN( sc_.ui_sl[sl], sc_.ui_sl[sl_plus], leach_fact_doc);
219
220 if ( have_radon_diffusion)
221 {
222 LEACH_DOWN( radon_liq_sl[sl], radon_liq_sl[sl_plus], leach_fact_dissolved_gases);
223 }
224 }
225
226 for( size_t sl = 1; sl < sl_.soil_layer_cnt()-1; ++sl)
227 {
228 if ( cbm::flt_equal_zero( v_water_sl[sl]) ||
229 cbm::flt_equal_zero( waterflux_sl[sl]))
230 {
231 continue;
232 }
233
234 size_t sl_plus( sl + 1);
235 if ( cbm::flt_less( waterflux_sl[sl], 0.0))
236 {
237 sl_plus = sl - 1;
238 }
239
240
241 double const leach_fact( std::abs( waterflux_sl[sl] / v_water_sl[sl]));
242
243 double const leach_fact_nh4( cbm::bound_max( leach_fact * sipar_.RETNH4(), 0.9999));
244 double const leach_fact_no3( cbm::bound_max( leach_fact * sipar_.RETNO3(), 0.9999));
245 double const leach_fact_doc( cbm::bound_max( leach_fact * sipar_.RETDOC(), 0.9999));
246 double const leach_fact_mic( cbm::bound_max( leach_fact * sipar_.METRX_RET_MICROBES(), 0.9999));
247 double const leach_fact_lit( cbm::bound_max( leach_fact * sipar_.METRX_RET_LITTER(), 0.9999));
248 double const leach_fact_hum( cbm::bound_max( leach_fact * sipar_.METRX_RET_HUMUS(), 0.9999));
249 double const leach_fact_dissolved_gases( cbm::bound_max( leach_fact, 0.9999));
250
251 if ( spinup_.spinup_stage( this->lclock()))
252 {
253 spinup_.loose_lit_1[sl] += leach_fact_lit;
254 spinup_.loose_lit_2[sl] += leach_fact_lit;
255 spinup_.loose_lit_3[sl] += leach_fact_lit;
256
257 spinup_.loose_aorg[sl] += leach_fact_mic;
258
259 spinup_.decompose_hum_1[sl] += leach_fact_hum;
260 spinup_.decompose_hum_2[sl] += leach_fact_hum;
261 spinup_.decompose_hum_3[sl] += leach_fact_hum;
262
263 spinup_.c_to_lit_1[sl_plus] += sc_.C_lit1_sl[sl] * leach_fact_lit;
264 spinup_.c_to_lit_2[sl_plus] += sc_.C_lit2_sl[sl] * leach_fact_lit;
265 spinup_.c_to_lit_3[sl_plus] += sc_.C_lit3_sl[sl] * leach_fact_lit;
266
267 spinup_.c_to_aorg[sl_plus] += sc_.C_aorg_sl[sl] * leach_fact_mic;
268
269 spinup_.c_to_humus_1_sl[sl_plus] += c_humus_1_sl[sl] * leach_fact_hum;
270 spinup_.c_to_humus_2_sl[sl_plus] += c_humus_2_sl[sl] * leach_fact_hum;
271 spinup_.c_to_humus_3_sl[sl_plus] += c_humus_3_sl[sl] * leach_fact_hum;
272 }
273
274 accumulated_n_aorg_leaching_sl[sl] += sc_.N_aorg_sl[sl] * leach_fact_mic;
275 LEACH_DOWN( sc_.C_aorg_sl[sl], sc_.C_aorg_sl[sl_plus], leach_fact_mic);
276 LEACH_DOWN( sc_.N_aorg_sl[sl], sc_.N_aorg_sl[sl_plus], leach_fact_mic);
277
278 LEACH_DOWN_EPSILON( sc_.C_micro1_sl[sl], sc_.C_micro1_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro1_sl[sl]));
279 LEACH_DOWN_EPSILON( sc_.C_micro2_sl[sl], sc_.C_micro2_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro2_sl[sl]));
280 LEACH_DOWN_EPSILON( sc_.C_micro3_sl[sl], sc_.C_micro3_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro3_sl[sl]));
281
282 if( n_micro_1_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]) )
283 {
284 accumulated_n_micro_leaching_sl[sl] += ( n_micro_1_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]) ) * leach_fact_mic;
285 }
286 if( n_micro_2_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]) )
287 {
288 accumulated_n_micro_leaching_sl[sl] += ( n_micro_2_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]) ) * leach_fact_mic;
289 }
290 if( n_micro_3_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]) )
291 {
292 accumulated_n_micro_leaching_sl[sl] += ( n_micro_3_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]) ) * leach_fact_mic;
293 }
294 LEACH_DOWN_EPSILON( n_micro_1_sl[sl], n_micro_1_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]));
295 LEACH_DOWN_EPSILON( n_micro_2_sl[sl], n_micro_2_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]));
296 LEACH_DOWN_EPSILON( n_micro_3_sl[sl], n_micro_3_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]));
297
298 LEACH_DOWN( sc_.C_lit1_sl[sl], sc_.C_lit1_sl[sl_plus], leach_fact_lit);
299 LEACH_DOWN( sc_.C_lit2_sl[sl], sc_.C_lit2_sl[sl_plus], leach_fact_lit);
300 LEACH_DOWN( sc_.C_lit3_sl[sl], sc_.C_lit3_sl[sl_plus], leach_fact_lit);
301
302 accumulated_n_litter_leaching_sl[sl] += (sc_.N_lit1_sl[sl]+sc_.N_lit2_sl[sl]+sc_.N_lit3_sl[sl]) * leach_fact_lit;
303 LEACH_DOWN( sc_.N_lit1_sl[sl], sc_.N_lit1_sl[sl_plus], leach_fact_lit);
304 LEACH_DOWN( sc_.N_lit2_sl[sl], sc_.N_lit2_sl[sl_plus], leach_fact_lit);
305 LEACH_DOWN( sc_.N_lit3_sl[sl], sc_.N_lit3_sl[sl_plus], leach_fact_lit);
306
307 LEACH_DOWN( c_humus_1_sl[sl], c_humus_1_sl[sl_plus], leach_fact_hum);
308 LEACH_DOWN( c_humus_2_sl[sl], c_humus_2_sl[sl_plus], leach_fact_hum);
309 LEACH_DOWN( c_humus_3_sl[sl], c_humus_3_sl[sl_plus], leach_fact_hum);
310
311 accumulated_n_humus_1_leaching_sl[sl] += n_humus_1_sl[sl] * leach_fact_hum;
312 accumulated_n_humus_2_leaching_sl[sl] += n_humus_2_sl[sl] * leach_fact_hum;
313 accumulated_n_humus_3_leaching_sl[sl] += n_humus_3_sl[sl] * leach_fact_hum;
314 LEACH_DOWN( n_humus_1_sl[sl], n_humus_1_sl[sl_plus], leach_fact_hum);
315 LEACH_DOWN( n_humus_2_sl[sl], n_humus_2_sl[sl_plus], leach_fact_hum);
316 LEACH_DOWN( n_humus_3_sl[sl], n_humus_3_sl[sl_plus], leach_fact_hum);
317
318 accumulated_n_nh4_leaching_sl[sl] += (nh4_ae_sl[sl] + nh4_an_sl[sl] + sc_.coated_nh4_sl[sl]) * leach_fact_nh4;
319 accumulated_n_nh3_leaching_sl[sl] += sc_.nh3_liq_sl[sl] * leach_fact_doc;
320 accumulated_n_urea_leaching_sl[sl] += sc_.urea_sl[sl] * leach_fact_doc;
321 LEACH_DOWN( nh4_ae_sl[sl], nh4_ae_sl[sl_plus], leach_fact_nh4);
322 LEACH_DOWN( nh4_an_sl[sl], nh4_an_sl[sl_plus], leach_fact_nh4);
323 LEACH_DOWN( sc_.coated_nh4_sl[sl], sc_.coated_nh4_sl[sl_plus], leach_fact_nh4);
324 LEACH_DOWN( sc_.nh3_liq_sl[sl], sc_.nh3_liq_sl[sl_plus], leach_fact_doc);
325 LEACH_DOWN( sc_.urea_sl[sl], sc_.urea_sl[sl_plus], leach_fact_doc);
326
327 sc_.accumulated_n_no3_leaching_sl[sl] += (no3_ae_sl[sl]+no3_an_sl[sl]) * leach_fact_no3;
328 LEACH_DOWN( no3_ae_sl[sl], no3_ae_sl[sl_plus], leach_fact_no3);
329 LEACH_DOWN( no3_an_sl[sl], no3_an_sl[sl_plus], leach_fact_no3);
330
331 accumulated_n_don_leaching_sl[sl] += (don_ae_sl[sl] + don_an_sl[sl]) * leach_fact_doc;
332 LEACH_DOWN( don_ae_sl[sl], don_ae_sl[sl_plus], leach_fact_doc);
333 LEACH_DOWN( don_an_sl[sl], don_an_sl[sl_plus], leach_fact_doc);
334 LEACH_DOWN( sc_.doc_sl[sl], sc_.doc_sl[sl_plus], leach_fact_doc);
335 LEACH_DOWN( sc_.an_doc_sl[sl], sc_.an_doc_sl[sl_plus], leach_fact_doc);
336 LEACH_DOWN( ae_acetate_sl[sl], ae_acetate_sl[sl_plus], leach_fact_doc);
337 LEACH_DOWN( an_acetate_sl[sl], an_acetate_sl[sl_plus], leach_fact_doc);
338
339 accumulated_n_no_leaching_sl[sl] += (no_liq_sl[sl]+an_no_liq_sl[sl]) * leach_fact_dissolved_gases;
340 accumulated_n_n2o_leaching_sl[sl] += (n2o_liq_sl[sl]+an_n2o_liq_sl[sl]) * leach_fact_dissolved_gases;
341 LEACH_DOWN( no_liq_sl[sl], no_liq_sl[sl_plus], leach_fact_dissolved_gases);
342 LEACH_DOWN( an_no_liq_sl[sl], an_no_liq_sl[sl_plus], leach_fact_dissolved_gases);
343 LEACH_DOWN( n2o_liq_sl[sl], n2o_liq_sl[sl_plus], leach_fact_dissolved_gases);
344 LEACH_DOWN( an_n2o_liq_sl[sl], an_n2o_liq_sl[sl_plus], leach_fact_dissolved_gases);
345
346 LEACH_DOWN( ch4_liq_sl[sl], ch4_liq_sl[sl_plus], leach_fact_dissolved_gases);
347 LEACH_DOWN( co2_liq_sl[sl], co2_liq_sl[sl_plus], leach_fact_dissolved_gases);
348 LEACH_DOWN( o2_liq_sl[sl], o2_liq_sl[sl_plus], leach_fact_dissolved_gases);
349
350 LEACH_DOWN( sc_.so4_sl[sl], sc_.so4_sl[sl_plus], leach_fact_no3);
351 LEACH_DOWN( sc_.ni_sl[sl], sc_.ni_sl[sl_plus], leach_fact_doc);
352 LEACH_DOWN( sc_.ui_sl[sl], sc_.ui_sl[sl_plus], leach_fact_doc);
353
354 if ( have_radon_diffusion)
355 {
356 LEACH_DOWN( radon_liq_sl[sl], radon_liq_sl[sl_plus], leach_fact_dissolved_gases);
357 }
358 }
359
360 size_t sl( sl_.soil_layer_cnt()-1);
361
362 if ( cbm::flt_greater_zero( v_water_sl[sl]))
363 {
364 if ( cbm::flt_greater_zero( waterflux_sl[sl]))
365 {
366 double dummy_out( 0.0);
367
368 double const leach_fact( waterflux_sl[sl] / v_water_sl[sl]);
369
370 double const leach_fact_nh4( cbm::bound_max( leach_fact * sipar_.RETNH4(), 0.9999));
371 double const leach_fact_no3( cbm::bound_max( leach_fact * sipar_.RETNO3(), 0.9999));
372 double const leach_fact_doc( cbm::bound_max( leach_fact * sipar_.RETDOC(), 0.9999));
373 double const leach_fact_mic( cbm::bound_max( leach_fact * sipar_.METRX_RET_MICROBES(), 0.9999));
374 double const leach_fact_lit( cbm::bound_max( leach_fact * sipar_.METRX_RET_LITTER(), 0.9999));
375 double const leach_fact_hum( cbm::bound_max( leach_fact * sipar_.METRX_RET_HUMUS(), 0.9999));
376 double const leach_fact_dissolved_gases( cbm::bound_max( leach_fact, 0.9999));
377
378 if ( spinup_.spinup_stage( this->lclock()))
379 {
380 spinup_.loose_lit_1[sl] += leach_fact_lit;
381 spinup_.loose_lit_2[sl] += leach_fact_lit;
382 spinup_.loose_lit_3[sl] += leach_fact_lit;
383
384 spinup_.loose_aorg[sl] += leach_fact_mic;
385
386 spinup_.decompose_hum_1[sl] += leach_fact_hum;
387 spinup_.decompose_hum_2[sl] += leach_fact_hum;
388 spinup_.decompose_hum_3[sl] += leach_fact_hum;
389 }
390
391 accumulated_n_aorg_leaching_sl[sl] += sc_.N_aorg_sl[sl] * leach_fact_mic;
392 LEACH_DOWN( sc_.C_aorg_sl[sl], sc_.accumulated_doc_leach, leach_fact_mic);
393 LEACH_DOWN( sc_.N_aorg_sl[sl], sc_.accumulated_don_leach, leach_fact_mic);
394
395 LEACH_DOWN_EPSILON( sc_.C_micro1_sl[sl], sc_.accumulated_doc_leach, leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro1_sl[sl]));
396 LEACH_DOWN_EPSILON( sc_.C_micro2_sl[sl], sc_.accumulated_doc_leach, leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro2_sl[sl]));
397 LEACH_DOWN_EPSILON( sc_.C_micro3_sl[sl], sc_.accumulated_doc_leach, leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro3_sl[sl]));
398
399 if( n_micro_1_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]) )
400 {
401 accumulated_n_micro_leaching_sl[sl] += ( n_micro_1_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]) ) * leach_fact_mic;
402 }
403 if( n_micro_2_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]) )
404 {
405 accumulated_n_micro_leaching_sl[sl] += ( n_micro_2_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]) ) * leach_fact_mic;
406 }
407 if( n_micro_3_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]) )
408 {
409 accumulated_n_micro_leaching_sl[sl] += ( n_micro_3_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]) ) * leach_fact_mic;
410 }
411 LEACH_DOWN_EPSILON( n_micro_1_sl[sl], sc_.accumulated_don_leach, leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]));
412 LEACH_DOWN_EPSILON( n_micro_2_sl[sl], sc_.accumulated_don_leach, leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]));
413 LEACH_DOWN_EPSILON( n_micro_3_sl[sl], sc_.accumulated_don_leach, leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]));
414
415 LEACH_DOWN( sc_.C_lit1_sl[sl], sc_.accumulated_doc_leach, leach_fact_lit);
416 LEACH_DOWN( sc_.C_lit2_sl[sl], sc_.accumulated_doc_leach, leach_fact_lit);
417 LEACH_DOWN( sc_.C_lit3_sl[sl], sc_.accumulated_doc_leach, leach_fact_lit);
418
419 accumulated_n_litter_leaching_sl[sl] += (sc_.N_lit1_sl[sl]+sc_.N_lit2_sl[sl]+sc_.N_lit3_sl[sl]) * leach_fact_lit;
420 LEACH_DOWN( sc_.N_lit1_sl[sl], sc_.accumulated_don_leach, leach_fact_lit);
421 LEACH_DOWN( sc_.N_lit2_sl[sl], sc_.accumulated_don_leach, leach_fact_lit);
422 LEACH_DOWN( sc_.N_lit3_sl[sl], sc_.accumulated_don_leach, leach_fact_lit);
423
424 LEACH_DOWN( c_humus_1_sl[sl], sc_.accumulated_doc_leach, leach_fact_hum);
425 LEACH_DOWN( c_humus_2_sl[sl], sc_.accumulated_doc_leach, leach_fact_hum);
426 LEACH_DOWN( c_humus_3_sl[sl], sc_.accumulated_doc_leach, leach_fact_hum);
427
428 accumulated_n_humus_1_leaching_sl[sl] += n_humus_1_sl[sl] * leach_fact_hum;
429 accumulated_n_humus_2_leaching_sl[sl] += n_humus_2_sl[sl] * leach_fact_hum;
430 accumulated_n_humus_3_leaching_sl[sl] += n_humus_3_sl[sl] * leach_fact_hum;
431 LEACH_DOWN( n_humus_1_sl[sl], sc_.accumulated_don_leach, leach_fact_hum);
432 LEACH_DOWN( n_humus_2_sl[sl], sc_.accumulated_don_leach, leach_fact_hum);
433 LEACH_DOWN( n_humus_2_sl[sl], sc_.accumulated_don_leach, leach_fact_hum);
434
435 accumulated_n_nh4_leaching_sl[sl] += (nh4_ae_sl[sl] + nh4_an_sl[sl] + sc_.coated_nh4_sl[sl]) * leach_fact_nh4;
436 accumulated_n_nh3_leaching_sl[sl] += sc_.nh3_liq_sl[sl] * leach_fact_doc;
437 accumulated_n_urea_leaching_sl[sl] += sc_.urea_sl[sl] * leach_fact_doc;
438 LEACH_DOWN( nh4_ae_sl[sl], sc_.accumulated_nh4_leach, leach_fact_nh4);
439 LEACH_DOWN( nh4_an_sl[sl], sc_.accumulated_nh4_leach, leach_fact_nh4);
440 LEACH_DOWN( sc_.coated_nh4_sl[sl], sc_.accumulated_nh4_leach, leach_fact_nh4);
441 LEACH_DOWN( sc_.nh3_liq_sl[sl], day_leach_nh3, leach_fact_doc);
442 LEACH_DOWN( sc_.urea_sl[sl], day_leach_urea, leach_fact_doc);
443
444 sc_.accumulated_n_no3_leaching_sl[sl] += (no3_ae_sl[sl]+no3_an_sl[sl]) * leach_fact_no3;
445 LEACH_DOWN( no3_ae_sl[sl], sc_.accumulated_no3_leach, leach_fact_no3);
446 LEACH_DOWN( no3_an_sl[sl], sc_.accumulated_no3_leach, leach_fact_no3);
447
448 accumulated_n_don_leaching_sl[sl] += (don_ae_sl[sl] + don_an_sl[sl]) * leach_fact_doc;
449 LEACH_DOWN( don_ae_sl[sl], sc_.accumulated_don_leach, leach_fact_doc);
450 LEACH_DOWN( don_an_sl[sl], sc_.accumulated_don_leach, leach_fact_doc);
451 LEACH_DOWN( sc_.doc_sl[sl], sc_.accumulated_doc_leach, leach_fact_doc);
452 LEACH_DOWN( sc_.an_doc_sl[sl], sc_.accumulated_doc_leach, leach_fact_doc);
453 LEACH_DOWN( ae_acetate_sl[sl], sc_.accumulated_doc_leach, leach_fact_doc);
454 LEACH_DOWN( an_acetate_sl[sl], sc_.accumulated_doc_leach, leach_fact_doc);
455
456 accumulated_n_no_leaching_sl[sl] += (no_liq_sl[sl]+an_no_liq_sl[sl]) * leach_fact_dissolved_gases;
457 accumulated_n_n2o_leaching_sl[sl] += (n2o_liq_sl[sl]+an_n2o_liq_sl[sl]) * leach_fact_dissolved_gases;
458 LEACH_DOWN( no_liq_sl[sl], day_leach_no, leach_fact_dissolved_gases);
459 LEACH_DOWN( an_no_liq_sl[sl], day_leach_no, leach_fact_dissolved_gases);
460 LEACH_DOWN( n2o_liq_sl[sl], day_leach_n2o, leach_fact_dissolved_gases);
461 LEACH_DOWN( an_n2o_liq_sl[sl], day_leach_n2o, leach_fact_dissolved_gases);
462 LEACH_DOWN( o2_liq_sl[sl], day_leach_o2, leach_fact_dissolved_gases);
463
464 LEACH_DOWN( ch4_liq_sl[sl], subdaily_ch4_leach[subdaily_time_step_], leach_fact_dissolved_gases);
465 LEACH_DOWN( co2_liq_sl[sl], subdaily_co2_leach[subdaily_time_step_], leach_fact_dissolved_gases);
466
467 LEACH_DOWN( sc_.so4_sl[sl], sc_.accumulated_so4_leach, leach_fact_no3);
468 LEACH_DOWN( sc_.ni_sl[sl], dummy_out, leach_fact_doc);
469 LEACH_DOWN( sc_.ui_sl[sl], dummy_out, leach_fact_doc);
470
471 if ( have_radon_diffusion)
472 {
473 LEACH_DOWN( radon_liq_sl[sl], day_leach_radon, leach_fact_dissolved_gases);
474 }
475 }
476 else if ( cbm::flt_less( waterflux_sl[sl], 0.0))
477 {
478 size_t sl_plus( sl - 1);
479
480 double const leach_fact( -1.0 * waterflux_sl[sl] / v_water_sl[sl]);
481
482 double const leach_fact_nh4( cbm::bound_max( leach_fact * sipar_.RETNH4(), 0.9999));
483 double const leach_fact_no3( cbm::bound_max( leach_fact * sipar_.RETNO3(), 0.9999));
484 double const leach_fact_doc( cbm::bound_max( leach_fact * sipar_.RETDOC(), 0.9999));
485 double const leach_fact_mic( cbm::bound_max( leach_fact * sipar_.METRX_RET_MICROBES(), 0.9999));
486 double const leach_fact_lit( cbm::bound_max( leach_fact * sipar_.METRX_RET_LITTER(), 0.9999));
487 double const leach_fact_hum( cbm::bound_max( leach_fact * sipar_.METRX_RET_HUMUS(), 0.9999));
488 double const leach_fact_dissolved_gases( cbm::bound_max( leach_fact, 0.9999));
489
490 if ( spinup_.spinup_stage( this->lclock()))
491 {
492 spinup_.loose_lit_1[sl] += leach_fact_lit;
493 spinup_.loose_lit_2[sl] += leach_fact_lit;
494 spinup_.loose_lit_3[sl] += leach_fact_lit;
495
496 spinup_.loose_aorg[sl] += leach_fact_mic;
497
498 spinup_.decompose_hum_1[sl] += leach_fact_hum;
499 spinup_.decompose_hum_2[sl] += leach_fact_hum;
500 spinup_.decompose_hum_3[sl] += leach_fact_hum;
501
502 spinup_.c_to_lit_1[sl_plus] += sc_.C_lit1_sl[sl] * leach_fact_lit;
503 spinup_.c_to_lit_2[sl_plus] += sc_.C_lit2_sl[sl] * leach_fact_lit;
504 spinup_.c_to_lit_3[sl_plus] += sc_.C_lit3_sl[sl] * leach_fact_lit;
505
506 spinup_.c_to_aorg[sl_plus] += sc_.C_aorg_sl[sl] * leach_fact_mic;
507
508 spinup_.c_to_humus_1_sl[sl_plus] += c_humus_1_sl[sl] * leach_fact_hum;
509 spinup_.c_to_humus_2_sl[sl_plus] += c_humus_2_sl[sl] * leach_fact_hum;
510 spinup_.c_to_humus_3_sl[sl_plus] += c_humus_3_sl[sl] * leach_fact_hum;
511 }
512
513 accumulated_n_aorg_leaching_sl[sl] += sc_.N_aorg_sl[sl] * leach_fact_mic;
514 LEACH_DOWN( sc_.C_aorg_sl[sl], sc_.C_aorg_sl[sl_plus], leach_fact_mic);
515 LEACH_DOWN( sc_.N_aorg_sl[sl], sc_.N_aorg_sl[sl_plus], leach_fact_mic);
516
517 LEACH_DOWN_EPSILON( sc_.C_micro1_sl[sl], sc_.C_micro1_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro1_sl[sl]));
518 LEACH_DOWN_EPSILON( sc_.C_micro2_sl[sl], sc_.C_micro2_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro2_sl[sl]));
519 LEACH_DOWN_EPSILON( sc_.C_micro3_sl[sl], sc_.C_micro3_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_c_decay_max( sc_.C_micro3_sl[sl]));
520
521 if( n_micro_1_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]) )
522 {
523 accumulated_n_micro_leaching_sl[sl] += ( n_micro_1_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]) ) * leach_fact_mic;
524 }
525 if( n_micro_2_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]) )
526 {
527 accumulated_n_micro_leaching_sl[sl] += ( n_micro_2_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]) ) * leach_fact_mic;
528 }
529 if( n_micro_3_sl[sl] > MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]) )
530 {
531 accumulated_n_micro_leaching_sl[sl] += ( n_micro_3_sl[sl] - MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]) ) * leach_fact_mic;
532 }
533 LEACH_DOWN_EPSILON( n_micro_1_sl[sl], n_micro_1_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_1_sl[sl]));
534 LEACH_DOWN_EPSILON( n_micro_2_sl[sl], n_micro_1_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_2_sl[sl]));
535 LEACH_DOWN_EPSILON( n_micro_3_sl[sl], n_micro_1_sl[sl_plus], leach_fact_mic, MeTrX_get_micro_n_decay_max( n_micro_3_sl[sl]));
536
537 LEACH_DOWN( sc_.C_lit1_sl[sl], sc_.C_lit1_sl[sl_plus], leach_fact_lit);
538 LEACH_DOWN( sc_.C_lit2_sl[sl], sc_.C_lit2_sl[sl_plus], leach_fact_lit);
539 LEACH_DOWN( sc_.C_lit3_sl[sl], sc_.C_lit3_sl[sl_plus], leach_fact_lit);
540
541 accumulated_n_litter_leaching_sl[sl] += (sc_.N_lit1_sl[sl]+sc_.N_lit2_sl[sl]+sc_.N_lit3_sl[sl]) * leach_fact_lit;
542 LEACH_DOWN( sc_.N_lit1_sl[sl], sc_.N_lit1_sl[sl_plus], leach_fact_lit);
543 LEACH_DOWN( sc_.N_lit2_sl[sl], sc_.N_lit2_sl[sl_plus], leach_fact_lit);
544 LEACH_DOWN( sc_.N_lit3_sl[sl], sc_.N_lit3_sl[sl_plus], leach_fact_lit);
545
546 LEACH_DOWN( c_humus_1_sl[sl], c_humus_1_sl[sl_plus], leach_fact_hum);
547 LEACH_DOWN( c_humus_2_sl[sl], c_humus_2_sl[sl_plus], leach_fact_hum);
548 LEACH_DOWN( c_humus_3_sl[sl], c_humus_3_sl[sl_plus], leach_fact_hum);
549
550 accumulated_n_humus_1_leaching_sl[sl] += n_humus_1_sl[sl] * leach_fact_hum;
551 accumulated_n_humus_2_leaching_sl[sl] += n_humus_2_sl[sl] * leach_fact_hum;
552 accumulated_n_humus_3_leaching_sl[sl] += n_humus_3_sl[sl] * leach_fact_hum;
553 LEACH_DOWN( n_humus_1_sl[sl], n_humus_1_sl[sl_plus], leach_fact_hum);
554 LEACH_DOWN( n_humus_2_sl[sl], n_humus_2_sl[sl_plus], leach_fact_hum);
555 LEACH_DOWN( n_humus_2_sl[sl], n_humus_3_sl[sl_plus], leach_fact_hum);
556
557 accumulated_n_nh4_leaching_sl[sl] += (nh4_ae_sl[sl] + nh4_an_sl[sl] + sc_.coated_nh4_sl[sl]) * leach_fact_nh4;
558 accumulated_n_nh3_leaching_sl[sl] += sc_.nh3_liq_sl[sl] * leach_fact_doc;
559 accumulated_n_urea_leaching_sl[sl] += sc_.urea_sl[sl] * leach_fact_doc;
560 LEACH_DOWN( nh4_ae_sl[sl], nh4_ae_sl[sl_plus], leach_fact_nh4);
561 LEACH_DOWN( nh4_an_sl[sl], nh4_an_sl[sl_plus], leach_fact_nh4);
562 LEACH_DOWN( sc_.coated_nh4_sl[sl], sc_.coated_nh4_sl[sl_plus], leach_fact_nh4);
563 LEACH_DOWN( sc_.nh3_liq_sl[sl], sc_.nh3_liq_sl[sl_plus], leach_fact_doc);
564 LEACH_DOWN( sc_.urea_sl[sl], sc_.urea_sl[sl_plus], leach_fact_doc);
565
566 sc_.accumulated_n_no3_leaching_sl[sl] += (no3_ae_sl[sl]+no3_an_sl[sl]) * leach_fact_no3;
567 LEACH_DOWN( no3_ae_sl[sl], no3_ae_sl[sl_plus], leach_fact_no3);
568 LEACH_DOWN( no3_an_sl[sl], no3_an_sl[sl_plus], leach_fact_no3);
569
570 accumulated_n_don_leaching_sl[sl] += (don_ae_sl[sl] + don_an_sl[sl]) * leach_fact_doc;
571 LEACH_DOWN( don_ae_sl[sl], don_ae_sl[sl_plus], leach_fact_doc);
572 LEACH_DOWN( don_an_sl[sl], don_an_sl[sl_plus], leach_fact_doc);
573 LEACH_DOWN( sc_.doc_sl[sl], sc_.doc_sl[sl_plus], leach_fact_doc);
574 LEACH_DOWN( sc_.an_doc_sl[sl], sc_.an_doc_sl[sl_plus], leach_fact_doc);
575 LEACH_DOWN( ae_acetate_sl[sl], ae_acetate_sl[sl_plus], leach_fact_doc);
576 LEACH_DOWN( an_acetate_sl[sl], an_acetate_sl[sl_plus], leach_fact_doc);
577
578 accumulated_n_no_leaching_sl[sl] += (no_liq_sl[sl]+an_no_liq_sl[sl]) * leach_fact_dissolved_gases;
579 accumulated_n_n2o_leaching_sl[sl] += (n2o_liq_sl[sl]+an_n2o_liq_sl[sl]) * leach_fact_dissolved_gases;
580 LEACH_DOWN( no_liq_sl[sl], no_liq_sl[sl_plus], leach_fact_dissolved_gases);
581 LEACH_DOWN( an_no_liq_sl[sl], an_no_liq_sl[sl_plus], leach_fact_dissolved_gases);
582 LEACH_DOWN( n2o_liq_sl[sl], n2o_liq_sl[sl_plus], leach_fact_dissolved_gases);
583 LEACH_DOWN( an_n2o_liq_sl[sl], an_n2o_liq_sl[sl_plus], leach_fact_dissolved_gases);
584 LEACH_DOWN( o2_liq_sl[sl], o2_liq_sl[sl_plus], leach_fact_dissolved_gases);
585
586 LEACH_DOWN( ch4_liq_sl[sl], ch4_liq_sl[sl_plus], leach_fact_dissolved_gases);
587 LEACH_DOWN( co2_liq_sl[sl], co2_liq_sl[sl_plus], leach_fact_dissolved_gases);
588
589 LEACH_DOWN( sc_.so4_sl[sl], sc_.so4_sl[sl_plus], leach_fact_no3);
590 LEACH_DOWN( sc_.ni_sl[sl], sc_.ni_sl[sl_plus], leach_fact_doc);
591 LEACH_DOWN( sc_.ui_sl[sl], sc_.ui_sl[sl_plus], leach_fact_doc);
592
593 if ( have_radon_diffusion)
594 {
595 LEACH_DOWN( radon_liq_sl[sl], radon_liq_sl[sl_plus], leach_fact_dissolved_gases);
596 }
597 }
598 }
599}