@@ -190,7 +190,15 @@ namespace aspect
190190 if (use_adiabatic_pressure_in_creep)
191191 pressure_for_creep = this ->get_adiabatic_conditions ().pressure (in.position [i]);
192192
193- const double viscosity_diffusion
193+ const double bound_fluid_fraction
194+ = (compositional_viscosity_prefactors.needs_scaling ()
195+ ?
196+ in.composition [i][this ->introspection ().compositional_index_for_name (" bound_fluid" )]
197+ :
198+ numbers::signaling_nan<double >());
199+
200+
201+ const double viscosity_diffusion_base
194202 = (viscous_flow_law != dislocation
195203 ?
196204 diffusion_creep.compute_viscosity (pressure_for_creep, temperature_for_viscosity, j,
@@ -199,8 +207,16 @@ namespace aspect
199207 :
200208 numbers::signaling_nan<double >());
201209
210+ const double viscosity_diffusion
211+ = (viscous_flow_law != dislocation
212+ ?
213+ compositional_viscosity_prefactors.compute_viscosity (temperature_for_viscosity, pressure_for_creep, bound_fluid_fraction, viscosity_diffusion_base, j,
214+ CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::diffusion)
215+ :
216+ numbers::signaling_nan<double >());
217+
202218 // Step 1b: compute viscosity from dislocation creep law
203- const double viscosity_dislocation
219+ const double viscosity_dislocation_base
204220 = (viscous_flow_law != diffusion
205221 ?
206222 dislocation_creep.compute_viscosity (edot_ii,
@@ -212,20 +228,27 @@ namespace aspect
212228 :
213229 numbers::signaling_nan<double >());
214230
231+ const double viscosity_dislocation
232+ = (viscous_flow_law != diffusion
233+ ?
234+ compositional_viscosity_prefactors.compute_viscosity (temperature_for_viscosity, pressure_for_creep, bound_fluid_fraction, viscosity_dislocation_base, j,
235+ CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::dislocation)
236+ :
237+ numbers::signaling_nan<double >());
238+
215239 // Step 1c: select which form of viscosity to use (diffusion, dislocation, their minimum or composite, or fk), and apply
216240 // pre-exponential weakening, if required.
217241 switch (viscous_flow_law)
218242 {
219243 case diffusion:
220244 {
221- non_yielding_viscosity = compositional_viscosity_prefactors. compute_viscosity (in, viscosity_diffusion, j, i, \
222- CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::diffusion) ;
245+
246+ non_yielding_viscosity = viscosity_diffusion ;
223247 break ;
224248 }
225249 case dislocation:
226250 {
227- non_yielding_viscosity = compositional_viscosity_prefactors.compute_viscosity (in, viscosity_dislocation, j, i, \
228- CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::dislocation);
251+ non_yielding_viscosity = viscosity_dislocation;
229252 break ;
230253 }
231254 case frank_kamenetskii:
@@ -238,21 +261,13 @@ namespace aspect
238261 }
239262 case composite:
240263 {
241- const double scaled_viscosity_diffusion = compositional_viscosity_prefactors.compute_viscosity (in, viscosity_diffusion, j, i, \
242- CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::diffusion);
243- const double scaled_viscosity_dislocation = compositional_viscosity_prefactors.compute_viscosity (in, viscosity_dislocation, j, i, \
244- CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::dislocation);
245- non_yielding_viscosity = (scaled_viscosity_diffusion * scaled_viscosity_dislocation)/
246- (scaled_viscosity_diffusion + scaled_viscosity_dislocation);
264+ non_yielding_viscosity = (viscosity_diffusion * viscosity_dislocation)/
265+ (viscosity_diffusion + viscosity_dislocation);
247266 break ;
248267 }
249268 case minimum_diffusion_dislocation:
250269 {
251- const double scaled_viscosity_diffusion = compositional_viscosity_prefactors.compute_viscosity (in, viscosity_diffusion, j, i, \
252- CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::diffusion);
253- const double scaled_viscosity_dislocation = compositional_viscosity_prefactors.compute_viscosity (in, viscosity_dislocation, j, i, \
254- CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::dislocation);
255- non_yielding_viscosity = std::min (scaled_viscosity_diffusion, scaled_viscosity_dislocation);
270+ non_yielding_viscosity = std::min (viscosity_diffusion, viscosity_dislocation);
256271 break ;
257272 }
258273 default :
0 commit comments