@@ -190,42 +190,54 @@ 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
194- = (viscous_flow_law != dislocation
193+ const double bound_fluid_fraction
194+ = (this -> introspection (). compositional_name_exists ( " bound_fluid " )
195195 ?
196- diffusion_creep.compute_viscosity (pressure_for_creep, temperature_for_viscosity, j,
197- phase_function_values,
198- n_phase_transitions_per_composition)
196+ in.composition [i][this ->introspection ().compositional_index_for_name (" bound_fluid" )]
199197 :
200198 numbers::signaling_nan<double >());
201199
200+ double viscosity_diffusion = numbers::signaling_nan<double >();
201+ if (viscous_flow_law != dislocation)
202+ {
203+ const double viscosity_diffusion_base = diffusion_creep.compute_viscosity (pressure_for_creep, temperature_for_viscosity, j,
204+ phase_function_values,
205+ n_phase_transitions_per_composition);
206+ viscosity_diffusion = compositional_viscosity_prefactors.compute_viscosity (temperature_for_viscosity, pressure_for_creep, bound_fluid_fraction, viscosity_diffusion_base, j,
207+ CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::diffusion);
208+
209+ }
210+
202211 // Step 1b: compute viscosity from dislocation creep law
203- const double viscosity_dislocation
204- = (viscous_flow_law != diffusion
205- ?
206- dislocation_creep.compute_viscosity (edot_ii,
207- pressure_for_creep,
208- temperature_for_viscosity,
209- j,
210- phase_function_values,
211- n_phase_transitions_per_composition)
212- :
213- numbers::signaling_nan<double >());
212+ double viscosity_dislocation = numbers::signaling_nan<double >();
213+ if (viscous_flow_law != diffusion)
214+ {
215+ const double viscosity_dislocation_base = dislocation_creep.compute_viscosity (edot_ii,
216+ pressure_for_creep,
217+ temperature_for_viscosity,
218+ j,
219+ phase_function_values,
220+ n_phase_transitions_per_composition);
221+
222+ viscosity_dislocation = compositional_viscosity_prefactors.compute_viscosity (temperature_for_viscosity, pressure_for_creep, bound_fluid_fraction, viscosity_dislocation_base, j,
223+ CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::dislocation);
224+
225+ }
226+
214227
215228 // Step 1c: select which form of viscosity to use (diffusion, dislocation, their minimum or composite, or fk), and apply
216229 // pre-exponential weakening, if required.
217230 switch (viscous_flow_law)
218231 {
219232 case diffusion:
220233 {
221- non_yielding_viscosity = compositional_viscosity_prefactors. compute_viscosity (in, viscosity_diffusion, j, i, \
222- CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::diffusion) ;
234+
235+ non_yielding_viscosity = viscosity_diffusion ;
223236 break ;
224237 }
225238 case dislocation:
226239 {
227- non_yielding_viscosity = compositional_viscosity_prefactors.compute_viscosity (in, viscosity_dislocation, j, i, \
228- CompositionalViscosityPrefactors<dim>::ModifiedFlowLaws::dislocation);
240+ non_yielding_viscosity = viscosity_dislocation;
229241 break ;
230242 }
231243 case frank_kamenetskii:
@@ -238,21 +250,13 @@ namespace aspect
238250 }
239251 case composite:
240252 {
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);
253+ non_yielding_viscosity = (viscosity_diffusion * viscosity_dislocation)/
254+ (viscosity_diffusion + viscosity_dislocation);
247255 break ;
248256 }
249257 case minimum_diffusion_dislocation:
250258 {
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);
259+ non_yielding_viscosity = std::min (viscosity_diffusion, viscosity_dislocation);
256260 break ;
257261 }
258262 default :
0 commit comments