Open djbower opened 3 months ago
Some permeability laws:
static PetscScalar GetPermeabilityBlakeKozenyCarman( PetscScalar grainsize, PetscScalar porosity, PetscScalar constant )
{
/* Abe (1995) Eq. 42a. Also see McKenzie (1984) */
PetscScalar kp;
kp = PetscPowScalar( grainsize, 2.0 ) * PetscPowScalar( porosity, 3.0 ) / PetscPowScalar( 1.0-porosity, 2.0 );
kp *= constant;
return kp;
}
static PetscScalar GetPermeabilityRumpfGupte( PetscScalar grainsize, PetscScalar porosity, PetscScalar constant )
{
/* Abe (1995) Eq. 42b. Also see McKenzie (1984) */
PetscScalar kp;
kp = PetscPowScalar( grainsize, 2.0 ) * PetscPowScalar( porosity, 5.5 );
kp *= constant;
return kp;
}
static PetscScalar GetPermeabilityRudge( PetscScalar grainsize, PetscScalar porosity, PetscScalar constant )
{
/* Rudge (2018) Eq. 7.4, large permeability for 0.1 < porosity < 0.3 */
PetscScalar kp;
kp = PetscPowScalar( grainsize, 2.0 ) * PetscPowScalar( porosity, 3.0 );
kp *= constant;
return kp;
}
The gravitational separation flux quantifies the energy transport due to melt-solid separation.
In the original C-version of Spider the flux is coded in terms of entropy (code given below), but in Aragog this should be converted to temperature, with additional care taken to ensure correct signs for radial derivatives and gravity (which could be different between the C version and Aragog). As part of this effort, permeability laws could also be encapsulated into their own class structure. A temperature form of the gravitational flux can be found in the original work of Abe (1993), as well as subsequent papers (1995, 1997).
There is a placeholder property to implement this energy flux in
solver.py
(def gravitational_separation_flux
):Original C code snippet, and other functions (such as the permeability laws) can be found in the C code: