Plastic strain in reactive fluid transport rheology

Dear all,

I used the material model “reactive fluid transport “ based on the cookbook example developed by Daniel Douglas (Simplified Subduction Model with Parameterized Solid-Fluid Reactions — ASPECT 3.1.0-pre).

The base model is visco-plastic

I wish to track the plastic strain through time, as it is done in the classical visco-plastic rheology

I define a compositional field “plastic_strain” and define a Strain weakening mechanism so that the plastic strain is computed

The model run perfectly but the plastic strain is zero

It seems that when “reactive fluid transport” material model is used, even if the base model is visco-plastic, the plastic strain is not computed. I saw this message in the log
“Skipping plastic_strain composition solve because RHS is zero.”

Could you please let me know how to fix this problem

I attached hereafter two prm files
-one with a simple extension test with only visco-plastic rheology (plastic strain is well computed)
-one with the same parameters except the use of “reactive fluid transport” rheology (plastic strain is not computed)

Thank you for your feedbacks

Frédéric


-prm with a simple extension test with only visco-plastic rheology (plastic strain is well computed)

set Dimension = 2
set Use years in output instead of seconds = true
set Output directory = strain-VP-iterated
set End time = 0.5e6 #years

set Nonlinear solver scheme = iterated Advection and Stokes
set Nonlinear solver tolerance = 1e-1 # normaly 1e-5
set Max nonlinear iterations = 5 # 100 normaly

set Adiabatic surface temperature = 1600
#set Use operator splitting = true

subsection Geometry model
set Model name = box
subsection Box
set X repetitions = 4
set Y repetitions = 2
set X extent = 100e3
set Y extent = 50e3
end
end

subsection Mesh deformation
set Mesh deformation boundary indicators = top: free surface
subsection Free surface
set Surface velocity projection = vertical
end
set Additional tangential mesh velocity boundary indicators = left, right
end

set Pressure normalization = no

subsection Gravity model
set Model name = vertical
subsection Vertical
set Magnitude = 10.0
end
end

subsection Initial temperature model
set Model name = function
subsection Function
set Variable names = x,y,t
set Function constants = Ttop=273, Tbot=1473, ysize=50e3
set Function expression = Ttop+(Tbot-Ttop)*(ysize-y)/ysize
end
end

subsection Boundary temperature model
set Fixed temperature boundary indicators = top, bottom
set List of model names = function
subsection Function
set Function constants = Ttop=273, Tbot=1473, ysize=50e3
set Function expression = (y>ysize/2 ? Ttop : Tbot)
end
end

subsection Boundary velocity model
set Prescribed velocity boundary indicators = bottom y: function, left x: function, right x: function
subsection Function
set Variable names = x,y
set Function constants = v=0.06, xsize=100e3, ysize=50e3
set Function expression = (x<xsize/2 ? -v : v); (y<ysize/2 ? ysize/xsizev : -ysize/xsizev)
end
end

subsection Compositional fields
set Number of fields = 4
set Names of fields = peridotite, porosity, plastic_strain, seed
set Compositional field methods = field, field, field, field
end

subsection Initial composition model
set List of model names = function
subsection Function
set Variable names = x,y
set Function constants = xsize=100e3, ypos=30e3, rad=5e3, x1=40e3,x2=60e3,y1=5e3
set Function expression = 0; if(x>x1 && x<x2 && y<y1, 0.00, 0);0; if((x-xsize/2)^2+(y-ypos)^2<rad^2, 1, 0)
end
end

subsection Boundary composition model
set Fixed composition boundary indicators = top, bottom, left, right
set List of model names = initial composition
end

subsection Heating model
set List of model names = compositional heating

subsection Compositional heating
set Use compositional field for heat production averaging = 0
set Compositional heating values = 0.0
end
end

subsection Material model
set Model name = visco plastic
set Material averaging = harmonic average only viscosity

subsection Visco Plastic
set Densities = 3300 # kg/m3
set Thermal diffusivities = 1e-6
set Heat capacities = 1000
set Thermal expansivities = 0

set Viscous flow law                           = dislocation

set Prefactors for dislocation creep          = 2.7e-18, 1,1,1,  1e-15
set Activation energies for dislocation creep = 480e3,0,0,0,480e3
set Activation volumes for dislocation creep  = 1.1e-5,0,0,0,1.1e-5
set Stress exponents for dislocation creep    = 3.5,1,1,1,3.5

set Angles of internal friction                = 10.0, 10.,10, 1, 9.0 # degrees
set Cohesions                                  = 10e6 # Pa

set Minimum viscosity                          = 1e19 # Pa s
set Maximum viscosity                          = 1e25 # Pa s
set Strain weakening mechanism =    plastic weakening with plastic strain only
set Start plasticity strain weakening intervals  = 0.1
set End plasticity strain weakening intervals  = 1
set Cohesion strain weakening factors            =  0.25
set Friction strain weakening factors            = 0.25

end
end

subsection Mesh refinement
set Initial global refinement = 2 # normally 4
set Initial adaptive refinement = 2
set Time steps between mesh refinement = 1
set Strategy = composition, strain rate
set Refinement criteria merge operation = max
set Refinement criteria scaling factors = 1, 2
end

subsection Melt settings
#set Include melt transport = true
end

subsection Postprocess
set List of postprocessors = visualization
subsection Visualization
set Time between graphical output = 1
set Output mesh velocity = true
set List of output variables = material properties, strain rate, heating
subsection Material properties
set List of material properties = density, viscosity
end
end
end


-prm with the same parameters except the use of “reactive fluid transport” rheology (plastic strain is not computed)

set Dimension = 2
set Use years in output instead of seconds = true
set Output directory = strain-ReactiveFluidTransport-iterated
set End time = 0.5e6 #years

set Nonlinear solver scheme = iterated Advection and Stokes
set Nonlinear solver tolerance = 1e-1 # normaly 1e-5
set Max nonlinear iterations = 5 # 100 normaly

set Adiabatic surface temperature = 1600
#set Use operator splitting = true

subsection Geometry model
set Model name = box
subsection Box
set X repetitions = 4
set Y repetitions = 2
set X extent = 100e3
set Y extent = 50e3
end
end

subsection Mesh deformation
set Mesh deformation boundary indicators = top: free surface
subsection Free surface
set Surface velocity projection = vertical
end
set Additional tangential mesh velocity boundary indicators = left, right
end

set Pressure normalization = no

subsection Gravity model
set Model name = vertical
subsection Vertical
set Magnitude = 10.0
end
end

subsection Initial temperature model
set Model name = function
subsection Function
set Variable names = x,y,t
set Function constants = Ttop=273, Tbot=1473, ysize=50e3
set Function expression = Ttop+(Tbot-Ttop)*(ysize-y)/ysize
end
end

subsection Boundary temperature model
set Fixed temperature boundary indicators = top, bottom
set List of model names = function
subsection Function
set Function constants = Ttop=273, Tbot=1473, ysize=50e3
set Function expression = (y>ysize/2 ? Ttop : Tbot)
end
end

subsection Boundary velocity model
set Prescribed velocity boundary indicators = bottom y: function, left x: function, right x: function
subsection Function
set Variable names = x,y
set Function constants = v=0.06, xsize=100e3, ysize=50e3
set Function expression = (x<xsize/2 ? -v : v); (y<ysize/2 ? ysize/xsizev : -ysize/xsizev)
end
end

subsection Compositional fields
set Number of fields = 4
set Names of fields = peridotite, porosity, plastic_strain, seed
set Compositional field methods = field, field, field, field
end

subsection Initial composition model
set List of model names = function
subsection Function
set Variable names = x,y
set Function constants = xsize=100e3, ypos=30e3, rad=5e3, x1=40e3,x2=60e3,y1=5e3
set Function expression = 0; if(x>x1 && x<x2 && y<y1, 0.00, 0);0; if((x-xsize/2)^2+(y-ypos)^2<rad^2, 1, 0)
end
end

subsection Boundary composition model
set Fixed composition boundary indicators = top, bottom, left, right
set List of model names = initial composition
end

subsection Heating model
set List of model names = compositional heating

subsection Compositional heating
set Use compositional field for heat production averaging = 0
set Compositional heating values = 0.0
end
end

subsection Material model
set Model name = reactive fluid transport
set Material averaging = harmonic average
subsection Reactive Fluid Transport Model
set Base model = visco plastic
set Reference fluid density = 3200 # density of water
set Shear to bulk viscosity ratio = 0.1
set Reference fluid viscosity = 1.
set Reference permeability = 1e-6
set Exponential fluid weakening factor = 5
set Fluid compressibility = 0
set Fluid reaction time scale for operator splitting = 5e4
set Fluid-solid reaction scheme = katz2003
subsection Katz 2003 model
set A1 = 941.32
set A2 = 1.3463e-7
set A3 = -5.3158e-18
end
end
subsection Visco Plastic
set Densities = 3300 # kg/m3
set Thermal diffusivities = 1e-6
set Heat capacities = 1000
set Thermal expansivities = 0

set Viscous flow law                           = dislocation

set Prefactors for dislocation creep          = 2.7e-18, 1,1,1,  1e-15
set Activation energies for dislocation creep = 480e3
set Activation volumes for dislocation creep  = 1.1e-5
set Stress exponents for dislocation creep    = 3.5

set Angles of internal friction                = 10.0, 10.,10, 1, 9.0 # degrees
set Cohesions                                  = 10e6 # Pa

set Minimum viscosity                          = 1e19 # Pa s
set Maximum viscosity                          = 1e25 # Pa s
set Strain weakening mechanism =    plastic weakening with plastic strain only
set Start plasticity strain weakening intervals  = 0.1
set End plasticity strain weakening intervals  = 1
set Cohesion strain weakening factors            =  0.25
set Friction strain weakening factors            = 0.25

end
end

subsection Mesh refinement
set Initial global refinement = 2 # normally 4
set Initial adaptive refinement = 2
set Time steps between mesh refinement = 1
set Strategy = composition, strain rate
set Refinement criteria merge operation = max
set Refinement criteria scaling factors = 1, 2
end

subsection Melt settings
#set Include melt transport = true
end

subsection Postprocess
set List of postprocessors = visualization
subsection Visualization
set Time between graphical output = 1
set Output mesh velocity = true
set List of output variables = material properties, strain rate, heating, melt fraction #, melt material properties
subsection Material properties
set List of material properties = density, viscosity
end
end
end

Dear Frédéric

Thanks for posting on the forum and happy to see that this cookbook example might be of use to some people!! I haven’t personally tried running a model with the Reactive Fluid Transport Model while tracking plastic_strain, but I think that this should work. From looking at your .prm file, I suspect that the reason it is saying that the plastic_strain is 0 is because you are beginning with a plastic_strain that is equal to 0 everywhere:

subsection Compositional fields
  set Number of fields = 4
  set Names of fields = peridotite, porosity, plastic_strain, seed
  set Compositional field methods = field, field, field, field
end

subsection Initial composition model
  set List of model names = function
  subsection Function
    set Variable names = x,y
    set Function constants = xsize=100e3, ypos=30e3, rad=5e3, x1=40e3,x2=60e3,y1=5e3
    set Function expression = 0; if(x>x1 && x<x2 && y<y1, 0.00, 0);0; if((x-xsize/2)^2+(y-ypos)^2<rad^2, 1, 0)
  end
end

If defining an initial plastic_strain does not help to overcome the issue, I would try outputting named additional outputs:

subsection Visualization
  set Time between graphical output = 1
  set Output mesh velocity = true
  set List of output variables = material properties, strain rate, heating, named additional outputs

This will tell you where in the model that there is actually plastic yielding occurring, perhaps the model is not actually yielding anywhere?

I hope this helps!
Cheers,
Daniel

Hi Daniel
thank you for your prompt answer

I tried these two solutions but it is not working
I think that simply the plastic strain is not calculated
If I use ViscoPlastic instead of Reactive Fluid Transport (for materail model), plastic strain is calculated.

So I guess that in Reactive Fluid Transport rheology, the call to strain dependant module (or something like that) is not done

Any guess?

Frédéric

Dear all and in particular aspect developers/experts

Do you have any ideas if it is possible to track plastic strain (or total strain) in reactive fluid transport Material Model?

Many thanks for your help

Best

Frédéric

@fgueyd - Sorry for not chiming into this discussion earlier.

I’m not entirely sure what the issue is with your setup, but I did run a quick test where viscous strain weakening was added an existing test (reactive_fluid_transport_zero_solubility.prm) that uses the reactive fluid transport material model with the visco plastic material model as the base model.

Viscous strain does accumulate in this model after 1 time step.

A few questions and requests:

  1. Using the attached PRM as a template, can you try replacing plastic strain with viscous strain in your model and see if it accumulates?
  2. Can you confirm that plastic yielding is occurring in your model?
  3. This should not be an issue due to internal logic within the code, but it might be worth specifying the field type for each composition you are tracking (see also attached PRM).
  4. Develop a small test case, perhaps building on the attached PRM, where yielding should occur and you know exactly how much plastic strain should develop in each time step? This can be done by setting Minimum strain rate equal to the Reference strain rate.

Cheers,
John
reactive_fluid_transport_zero_solubility_viscous_strain.prm (4.7 KB)

Hi everyone,

I suspect the problem is the following: Frédéric, you use the katz2003 fluid reaction scheme, and checking what that scheme does, it sets all reaction_terms to zero (that’s what happens when katz2003_model.calculate_reaction_rate_outputs(in, out) is called in line 216). The corresponding line in katz2003_mantle_melting.cc is here. However, these reaction_terms also determine how the finite strain changes in the strain dependent rheology. But since the evaluate() function of the base model is called first (this is where the viscoplastic model fills the reaction_terms) and then katz2003_model.calculate_reaction_rate_outputs is called afterwards, it would overwrite these terms, setting them to zero instead. This would explain why you do not see any change in the plastic strain.

So I suspect you could fix your problem by modifying katz2003_mantle_melting.cc so that it no longer sets all reaction_terms to zero.

Best,
Juliane

dear all
thank your very much for your inputs. Now it is working
@jbnaliboff : your test indeed worked but not with katz2003
@jdannberg : perfect, it is working perfectly. I was looking at this .cc file but I am not familiar with c++

Best
Frédéric

@fgueyd - I opened a pull request with the suggested fix from @jdannberg.

A quick test (see attached) confirmed plastic strain now accumulates, but it would be great to see if the branch works for your model (would you mind testing this?).

Cheers,
John

viscoplastic_melt_fraction_plastic_strain.prm (4.4 KB)

@jbnaliboff I am testing it. It is working but it seems that the melting (e.g porosity) is occuring in the same way as previously (e.g. without the modification proposed by @jdannberg). I am conducing further tests to understand this. I will let you know
Cheers
Frédéric

@fgueyd - am testing it. It is working but it seems that the melting (e.g porosity) is occuring in the same way as previously (e.g. without the modification proposed by @jdannberg).

Yes, I found one other place that needed a similar conditional check, can you check the updated PR now? Note that these change introduced some additional complications to consider (see discussion in PR), and this may take a bit of time to merge and fully test. Please proceed with caution when using these changes until the PR is fully merged and tested.

thank you John. I will check the PR and test it