A question of boundary velocity model

Hi all,

I recently wrote a boundary velocity plugin to calculate the left/right boundary velocity (Geometry: Box) for a compressed domain under the condition of a constant background strain rate (bg, manually input parameter). Since I assume that the boundary velocities have only x-component, i.e., the velocity V_y equals to zero. And the simple calculation formula is: V_x = bg \cdot L , where L is the extents of x-axis. The units of V_x obtained according to this formula is m/s.

However, when ‘set Use years in output instead of seconds = true’, the unit of velocity should be m/yr, which means that the unit should be converted from m/s to m/yr. In my opinion, the direct way is to modify the formula mentioned above to: V_x = bg \cdot L \cdot {yrs}, where yrs is year_in_seconds. But strangly, from the result, yrs should not appear in the formula.

Does this mean that when years are used as the unit of time, the velocity value returned through Tensor<1,dim> boundary_velocity(const tpes::boundary_id boundary_indicator, const Point &position) is automatically converted to m/yr ? Is it because of MKS? If so, it is better to document that, and it would be better to provide more examples of how to write boundary velocity plugins, because not all formulas are analytical, as provided in benchmarks, e.g., benchmarks/burstedde.

Best,

Xie

Hi Xie,

When 'set Use years in output instead of seconds = true’, the boundary velocity should indeed be in m/yr. That is, ASPECT assumes that what you put in the input file is in m/yr. An example can be found in cookbooks/continental_extension/continental_extension.prm. Internally, ASPECT works with SI units, so what is returned by the boundary_velocity/function plugin is in m/s. I hope that answers your question. What do you see in the results that is not correct?

Cheers,
Anne

Hi Anne,

Thanks for replying. I think my first post misled you, I override the boundary_velocity () and update() function to calculate what i need. I realize that when 'set Use years in output instead of seconds = true’, the boundary velociy is in m/yr. The point is that the unit of the product of strain rate (Unit: 1/s) and extents (Units: m) is m/s. I take it for granted that m/s should be converted to m/yr to satisfy 'set Use years in output instead of seconds = true’, that is, V_x (m/s) \cdot yrs, but the results show that multiplying yrs is redundant. The new velocity computed by the update() is automatically converted to m/yr after returning to boundary_velocity(). I hope i make myself clear.

Best,

Xie

Hi Xie,

Thank you for the clarification. As ASPECT internally works with SI units, so in this case m/s, the function boundary_velocity in your plugin should return a velocity in m/s. The set Use years in output instead of seconds = true is only relevant for output (e.g. the velocity in the vtk files that ASPECT outputs), and some of the inputs, like the function plugin for the velocity prescribed on the boundaries. But if you’re not reading anything in and just use the strainrate, which is in 1/s, there is no need to convert to yrs, because ASPECT needs m/s. Hope that’s clear!

Anne