Setting cohesion linear increase with depth

Hi, I’m trying to test some 2D spherical viscoplastic models where cohesions increase with depth. I’ve originally tried manipulating the viscoplastic phase transitions to achieve this but because of how they are computed the increase isn’t truly linear, it ends up logarithmically curved. I’m not sure if this would work as a compositional field setup (at least I haven’t gotten it to work that way) or as an input file. The plot shows what I’ve been able to do for increasing with depth, but is there a better way to do this?
Thanks, Erin

Hi Erin,

Do you have a parameterization in mind where the cohesion varies linearly (or in some other manner) as a function of depth, or are you looking for a step-wise increase?

In either case, I think it would be straightforward to introduce a feature that modifies the cohesion as a function of depth (or continuous or piece-wise). This could be a new addition to the main branch or a plugin if it is a fairly specific use-case.


Hey John,
For these tests I’m looking to have the cohesion increase from a surface value to a higher value at 60 km depth and play around with the slope of that increase for a quasi-plate, half space cooling parameterization, so not a step wise increase (which I have done before). If making a plugin or new feature for it is the best way, I can do that.

Hi Erin,

In that case, I think adding a feature that modifies the cohesion as a function of pressure or depth makes the most sense.

This could be in done in the drucker_prager rheology model, either by modifying the cohesion in one of the existing functions, or adding a new function that does this before the yield stress is computed.

Let us know how we can help with this!


Hi again,
I’ve been working on this and I have an implementation for the cohesions with depth that I wrote into the code that works. I’m now rewriting this as a plugin that is a modified drucker prager rheology (copied the and modified it for the When I compile I’m getting an error that says “error: incomplete type is not allowed” that is referring to when I use “this->get_geometry_model().depth(position)” to get the depth. I didn’t see this error when I compiled it in the aspect source code. If I compile without referencing the get_geometry_model().depth() and instead just set the depth to a double, the plugin compiles fine. I’m assuming that it’s maybe something that needs to be added to the #include lines at the top of the file but I’m not sure what.

Hi Erin,

Great to hear that you have a working implementation.

For the issue described, does your plugin have the geometry model interface in the list of includes??
#include <aspect/geometry_model/interface.h>

For example, this line is in the depth_dependent material model, which also retrieves depth in the same manner.


Hi John,
Awesome, that’s what I was missing. I added that include and now it compiles just fine, thanks!!