Hi experts,
I am currently attempting to implement the simulation of volatile substances (such as water) movement in the mantle using ASPECT. Specifically, I aim to simulate long-term (approximately 1 billion years) water migration in the mantle using compressible viscoplastic materials in a 2D annular domain (360°, with realistic Earth’s inner and outer radii). After reviewing relevant literature (links provided at the end), I have developed some thoughts on this problem and am eager to know if my approach is feasible or if it has any flaws.
a. Basic Concept
Similar to the referenced literature, I plan to use a particle-based method to simulate the material field. Specifically, there will be a mantle rock composition field and a water content field (expressed as mass fraction). Each mantle rock particle has a maximum water capacity, which is obtained via lookup tables based on its composition (C), pressure (p), and temperature (T).
As the mantle flows, the maximum water capacity of each particle changes. If the current water content of a particle exceeds its maximum capacity, the excess water should migrate.
b. Assumptions for Water Migration
The excess water is assumed to move in the direction of buoyancy (i.e., opposite to gravity, referred to as “upward” hereafter) with a velocity sufficiently large (relative to the mantle velocity) that it continues moving until the excess water is either reabsorbed by other rocks or exits the model through the surface boundary (analogous to volcanic eruptions).
c. Implementation Details
I will add a water migration process to the particle advection step (within advance_timestep()
), specifically after exchanging ghost particles.
This migration process will be implemented using a global array of structs, where each struct corresponds one-to-one with each cell in ASPECT via an ID. Each struct records:
- The ID of the cell
- The coordinates of the cell’s center
- The ID of the adjacent cell above (as defined earlier)
- The mass of water to be migrated from this cell
- The remaining capacity for additional water in this cell
This array will be sorted by coordinates to ensure a traversal order from bottom to top.
The implementation steps are:
- Create the global array: Traverse all cells and their particles to populate the structs with initial data.
- Update the array: Traverse the sorted array to redistribute excess water according to the assumptions above.
- Update particles: Based on the updated array, adjust the water content of particles in each cell. Specifically, if a cell receives additional water in step 2, this water is distributed among its particles.
d. Supplementary Notes
- The water content field records water as a percentage (%), while the global array uses absolute mass. Conversion between these requires each particle’s mass, which is assumed to be the total cell mass divided by the number of particles in that cell.
- In adaptive meshes, a cell might have two cells above it. In this case, water migrating from the lower cell is evenly distributed between the two upper cells.
- For particle creation/deletion:
- Newly created particles have no initial water content.
- When particles are deleted, their water content is redistributed among remaining particles in the same cell.
My Questions
- Will this approach accurately capture long-term large-scale water migration in the mantle, such as water from the surface being transported into the lower mantle via long-term subduction?
- In adaptive meshes, will varying numbers of particles in cells of different refinement levels significantly affect water content calculations?
- Once implemented, what validation methods would best test the accuracy of this model?
Thank you for taking the time to read this. I welcome any feedback or suggestions you may have.