Isostatic initial topography - #7035
Conversation
|
A model set up with a free surface on top typically runs with initial steps of isostatic adjustment, where the velocity could be very big. This is the discussion we have in #7003. |
|
The implementation of this current has several tricky points, which are marked as the following: |
| */ | ||
| virtual | ||
| void | ||
| required_initialize() |
There was a problem hiding this comment.
This "additional" initialize step is needed, as the "Isostatic topography" needs to query the initial composition, temperature, as well as evaluate the material model after these are all initialized. These information are used to derive column-wise density below every surface point to determine how isostacy could be attained.
| void | ||
| IsostaticTopography<dim>:: | ||
| required_initialize() | ||
| { |
There was a problem hiding this comment.
During this "additional" initiation state, sample points are distributed on the surface where the column-wise isostacy is computed.
| adiabatic_conditions->parse_parameters (prm); | ||
| adiabatic_conditions->initialize (); | ||
|
|
||
| if (SimulatorAccess<dim> *sim = dynamic_cast<SimulatorAccess<dim>*>(initial_topography_model.get())) |
There was a problem hiding this comment.
This "additional" initiation is added here in the core.cc, after other related modules.
|
I am current unsure what is the best way to work through the interfaces. Also the current implementation only works in 2-d box geometry, so following PR would potentially handle the other geometries. |
|
@anne-glerum, would you take a look and tell me what you think. |
|
Hi @lhy11009 and @anne-glerum , we've been meaning to get to this for awhile, and I think it'll be a huge quality of life improvement, so it is great to see you working on it! I haven't had a thorough look through the code yet, but here are just a few questions/ideas I was having on tackling this problem.
surface_function = std::make_unique<Functions::InterpolatedTensorProductGridData>(coordinates, topography_data_table); I wonder if, to get around possible resolution issues, it might be easiest to find the topography points (or pressure profile compensation depth) and create a function like this so any possible surface point can be queried using something similar to: double topography = surface_function->value(p); |
|
@Djneu For your questions 1, 2, 3. I'll try to write more about how this works. |
|
Then, to your question 1. I also try to think about the differences between whether this is added using an initial topography or through mesh deformation. I don't really have a clear idea about how mesh deformation works. But I understand there will be a composition change due to adding initial topography. Having a positive topography creates new space on top, and this won't be consistent, except if your composition layer extends to negative depth. On the other hand, having negative initial topography is effectively cropping out the compositional layer. I learned these from playing with the world builder files with ASPECT's initial topography. This is indeed different from deforming the mesh and moving things upward and downward while preserving its original layering. It would be helpful if three of us could talk through possible alternatives to doing this in mesh deformation. My naive thought is that it might be feasible to deform the mesh once in the initiation stage. The workaround considered but not implemented yet, is to have the initial composition module initiate a second time after the "required initiation" of the isostatic topography finished. This time, update the positions of compositions using the depth in the model |
|
To your question 5 Yes, we might replace the current "topography" vector in the plugin with this data structure. This is also something we can discuss. |
|
@Djneu and @anne-glerum , my location is in California. It would be great if we could 7 or 8 pm your time (9 or 10 am PST). Potentially tomorrow? We could talk through questions we had, and the planned progress on this PR |
|
Sure, how about 8 pm our time? |
|
Yes, I'll send you a Zoom invitation soon.
…On Wed, Jul 22, 2026 at 6:44 AM Derek Neuharth ***@***.***> wrote:
*Djneu* left a comment (geodynamics/aspect#7035)
<#7035 (comment)>
Sure, how about 8 pm our time?
—
Reply to this email directly, view it on GitHub
<#7035?email_source=notifications&email_token=AG2WMFOSE4IH3E3RWZACKOT5GDAMPA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKMBUGY3DQNBWGE3KM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJLDGN5XXIZLSL5RWY2LDNM#issuecomment-5046684616>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AG2WMFKPIBU5VWRQKLKR46L5GDAMPAVCNFSNUABEKJSXA33TNF2G64TZHMYTSNJQGI2DKMR3JFZXG5LFHM2DSMZSGQZTONBYGGQXMAQ>
.
Triage notifications, keep track of coding agent tasks and review pull
requests on the go with GitHub Mobile for iOS
<https://github.com/notifications/mobile/ios/AG2WMFKRTJHBK53BPXDDWD35GDAMPA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKMBUGY3DQNBWGE3KM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJKTGN5XXIZLSL5UW64Y>
and Android
<https://github.com/notifications/mobile/android/AG2WMFNLHTMR3TEYUCHSXOL5GDAMPA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKMBUGY3DQNBWGE3KM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJLTGN5XXIZLSL5QW4ZDSN5UWI>.
Download it today!
You are receiving this because you were mentioned.Message ID:
***@***.***>
--
Haoyuan Li
Postdoctoral Researcher
Earth and Planetary Sciences, UC Davis
|
|
Haoyuan Li is inviting you to a scheduled Zoom meeting. Join Zoom Meeting
https://ucdavis.zoom.us/j/96020571647
<https://www.google.com/url?q=https://ucdavis.zoom.us/j/96020571647&sa=D&source=calendar&ust=1785167845110402&usg=AOvVaw2pH-2hH0-uIRI81TFfkXSp>
Meeting ID: 960 2057 1647
…On Wed, Jul 22, 2026 at 8:53 AM Haoyuan Li ***@***.***> wrote:
Yes, I'll send you a Zoom invitation soon.
On Wed, Jul 22, 2026 at 6:44 AM Derek Neuharth ***@***.***>
wrote:
> *Djneu* left a comment (geodynamics/aspect#7035)
> <#7035 (comment)>
>
> Sure, how about 8 pm our time?
>
> —
> Reply to this email directly, view it on GitHub
> <#7035?email_source=notifications&email_token=AG2WMFOSE4IH3E3RWZACKOT5GDAMPA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKMBUGY3DQNBWGE3KM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJLDGN5XXIZLSL5RWY2LDNM#issuecomment-5046684616>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AG2WMFKPIBU5VWRQKLKR46L5GDAMPAVCNFSNUABEKJSXA33TNF2G64TZHMYTSNJQGI2DKMR3JFZXG5LFHM2DSMZSGQZTONBYGGQXMAQ>
> .
> Triage notifications, keep track of coding agent tasks and review pull
> requests on the go with GitHub Mobile for iOS
> <https://github.com/notifications/mobile/ios/AG2WMFKRTJHBK53BPXDDWD35GDAMPA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKMBUGY3DQNBWGE3KM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJKTGN5XXIZLSL5UW64Y>
> and Android
> <https://github.com/notifications/mobile/android/AG2WMFNLHTMR3TEYUCHSXOL5GDAMPA5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKMBUGY3DQNBWGE3KM4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJLTGN5XXIZLSL5QW4ZDSN5UWI>.
> Download it today!
> You are receiving this because you were mentioned.Message ID:
> ***@***.***>
>
--
Haoyuan Li
Postdoctoral Researcher
Earth and Planetary Sciences, UC Davis
--
Haoyuan Li
Postdoctoral Researcher
Earth and Planetary Sciences, UC Davis
|
|
@Djneu Just, In case my previous message doesn't reach you. |
ae59009 to
e595208
Compare
|
This result is a little surprising. It seems to me that mesh deformation should assign constraints to the DOFs in the solving steps and therefore should deform the original layers and preserve their thickness. @anne-glerum , @Djneu. Anyway, let me know what you think. And should we first stick to what we have here? |
|
Do you see the same effect when using fields instead of particles to track composition? I'll have a look at your PR tomorrow (today we have a half day off). |
Oh yes, the results are the same; both of these are not moving with the deformation mesh. I wonder if you checked something like this for the ASCII-file plugin? Or if someone has tested these with the initial constraints on mesh deformation in generl. |
|
Hi all, @lhy11009 @anne-glerum, I'm tagging @Minerallo and @MFraters here as well since they are going to look at mesh deformation/initial topography with worldbuilder, and I think they may run into a similar issue as the non-uplifting layers here (although perhaps since worldbuilder uplifts the composition it won't be an issue depending on ordering). Should we all maybe have a discussion on some point about this? |
|
@anne-glerum @Djneu. This morning I had a discussion with Rene initially on another matter. Then I raised this question and he has a good point. Currently, material by default doesn't move with mesh deformation. It's designed so as to couple the process in Fastscape. As with erosion or sedimentation, material is either added in or taken out, and the material in the mesh remains in its original places, rather than moving with the mesh. Moreover, this is currently done by changing the advection function with a compensation term that subtracts the mesh deformation velocity from the real velocity In other words, the current implementation of mesh deformation might implicitly assume mass flow through the boundary rather than assume material movement with the mesh. I'll do a test with a boundary composition option to check whether this is the case. In the new test, I added an option for allow fixed composition on outflow boundary: For both the field and the particle method, the composition field of the continent crust is fixed at the surface. However, the bottom limit of this composition remains unmoved. This test demonstrates that the issue of not preserving the composition at the top surface arises because material is not advected with mesh deformation. |
|
Based on this understanding, I think we could proceed with this PR and handle the issue of composition elsewhere. This issue wouldn't change the calculated initial mesh deformation, which is the sole purpose here. Ideally, we could make some progress with this PR to have it merged in the Hack. Then we could include a low-pass filter and the reference point in a following PR. I could discuss with Rene again and see how we could solve the issue of composition elsewhere. @Djneu @anne-glerum, Ideally, we could touch base on this. Would 8 pm your time still be a good option? |
|
@lhy11009, I agree with that plan and thanks again for implementing this! This implementation should work in most cases, and should be close enough to significantly help things even if the compositions are thickened instead of uplifted. For the reference point, did you test a model using a traction boundary? Perhaps it won't even be an issue, but I agree if it still is needed for those cases we can always add it later. How much has this implementation helped with the initial timesteps velocity and runtime for models that need to rebound? |
|
I have tested the model with initial topography myself, and that would help a lot with the initial rebound stage. velocity-wise, this appears to lower the velocity magnitude by an order. I agree if the boundary condition changes, the situation would be different. In that case, this method would still help to bring things close to isostacy In terms of mesh deformation not preserving the composition, we can talk with Rene to think of changing how advection is currently handled. Or add an option to just change it for the initial step. For the current PR, there is still a hard-coded feature. For example, it now only works for a 2-D box model. Feel free to make some suggestions on what to extend before the PR is merged. |
e595208 to
a18ce9c
Compare
|
I did some study on mesh deformation implementation. I think that moving the material with the initial mesh deformation is not easy to achieve in the current structure. @MFraters, I'd like to know whether this will be an issue with GWB's initial topography. When you have time, feell free to give us some feedback on we have tested here too. I can see two route paths:
It would be good to discuss these possibilities. |
Hi @lhy11009, nice work! Having isostatic initial topography would be very useful. I have been calculating it externally for a while, but that is not an ideal solution. |
|
I am not sure whether the same method would work here, as in world builder you already know the amount of uplift and have applied it to the composition and temperature as an input, where as here I assume people would write it assuming a flat surface not knowing how much it would uplift. Unless we first run this script to find the deformation and then update the position of all parameters with this topographic change as an input? |
|
Hi Michael, I have looked through your PR, and I think it's a great structure to have in GWB utilities. Yes, there are slightly different ideas between the two approaches.
And the approaches I suggest are indeed not easy to achieve. If it's up to me, advecting the ALE one step would be my choice, because:
With GWB, I think the way one could pre-compute the isostatic topography, perhaps like you did, is: There is another drawback of this format of isostacy that I just realized, which are the features that don't adjust to long-wavelength isostacy in nature, basically subduction zones and LLSVPs. For these, it's very likely that an initial isostatic topography might impact things, and perhaps in a bad way. I have noticed that with a near-isostatic topography given to the slab as initial topography, the trench develops a much deeper depth in later model runs than models initiated with no topographies. For the reason mentioned above, I think after the PR here is merged, what we can do is: I. In the GWB workflow, the post-processing for isostacy is not needed; one can at least take the topography from the isostacy calculation and put it into GWB. |
|
A second thought. It just came to me that advecting the material with the mesh won't work because the mesh doesn't move in a physical way. This actually raises a question for me: would initial topography be a better interface than the initial mesh deformation? I think Michael's approach of using initial topography consistent with GWB could indeed be a better solution. |
|
I have another idea, basically the following workflow, similar to what I have for the PR originally using the initial topography: Here, initial_topography->initialize_with_EOS() would take the density computed from the material model and update the isostatic topography, similar to what I currently have for this PR. Then the initial_temperature and initial_composition could initialize for the second time, similar to Michael's workflow with the GWB, in the sense that both are informed with the updated initial topography. Okay, let's pause here a bit. Cause I really want this to be a ready solution. We'll need more inputs from everyone included in the discussion. For this purpose, I would like to arrange for a meeting on this before we wrap up the Hack. @Djneu, can you help organize this for me in your evening time? Perhaps get those who are interested, and if possible, also get Rene. |
|
Hi @lhy11009, sorry for the late reply, I had left the hackathon on the 29th and wasn't available to set up a meeting! For whether this should be in mesh deformation or geometry, I am not sure how much a difference it makes and I think we should discuss it with @anne-glerum and @gassmoeller. I agree that regardless of which is used, we would need to reinitialize temp/comp after we know the surface, and we would need to somehow feed in the new topography to each query point so the fields don't end up in the same position. I think this is the key thing we are currently missing that GWB does by default when it adds in this topography. For doing this I think we would need to know the surface after deformation. There is a postprocessor (current_surface) that has this functionality for 2D boxes, and @Minerallo has an open pull request (#7150) for extending this functionality into the mesh deformation itself. Though perhaps neither of those are needed, since you already have the change in topographies maybe you could do like current_surface.cc, and create a public function that can be queried for any topography change given an X-Y point? Though this may then limit it to only working with initial isostasy. If that works, then I think we would just need to, if mesh deformation/initial topography is active, have initial comp/temp call this function and add the topography to the depth component for every queried point when it is initialized the second time. But maybe it is best we still all set up a meeting to try to discuss the way to do this since it would require some changes to core.cc! |
a18ce9c to
c71e4c6
Compare
|
@Djneu @anne-glerum A slight change of plan and a fix to the previous issue after discussion with @tjhei and @naliboff this Monday:
The idea is that the isostatic topography will update the initial topography within the geometry model, and this information could be later used by the initial composition as long as it uses depth instead of y to assign compositions. Now, in the test, the composition is migrated with the adjustment of the topography. |
| return property[i]; | ||
|
|
||
| Assert (i+1 < property.size(), ExcInternalError()); | ||
| // Assert (i+1 < property.size(), ExcInternalError()); |
There was a problem hiding this comment.
This is a small leftover. After the isostatic adjustment, the maximal depth changes from the value the adiabatic condition initiates and could lead to issues below region with positive topography and near the bottom boundary.
|
To start the review, I think we need to first agree upon the changes to the core.cc and the inital topography interface. This change aims to allow the initial topography to initialize again after other modules (e.g. initial temperature, composition, material model), so that we can use these modules to compute the isostatic topography. |
|
@Minerallo I think this structure is also consistent with GWB's topography in that one could use both the GWB topography and the isostatic topography. Conceptually, it will still call the isostatic topography to adjust the input from GWB, with all compositional layers preserved. |
|
@Minerallo, actually, I just tested this with GWB. Did you already modify something like: to ? I haven't rebased to the main branch, but after I modify these lines in my branch, the PR here becomes very consistent with GWB. So when we have GWB prescribe the structures and composition layers, we can still have the isostacy to adjust the topography and preserve it's structures. |
Hi Haoyuan, sorry for the late reply I was in holidays in the Alpes for the last weeks ! :) |










Pull Request Checklist. Please read and check each box with an X. Delete any part not applicable. Ask on the forum if you need help with any step.
This adds an "Isostatic topography" module to the "Inital topography model".
Before your first pull request:
For all pull requests:
For new features/models or changes of existing features: