atmesc
Contents
atmesc.c
Subroutines that control the integration of the atmospheric escape model.
- Author
Rodrigo Luger (rodluger@gmail.com)
- Date
May 12 2015
- Description
This module defines differential equations controlling the evolution of planetary atmospheres under intense extreme ultraviolet (XUV) stellar irradiation. The atmesc module implements energy-limited and diffusion-limited escape for hydrogen/helium atmospheres and water vapor atmospheres following :cite:`Luger2015`, :cite:`LugerBarnes2015`, and :cite:`LehmerCatling17`.
Functions
-
void BodyCopyAtmEsc(BODY *dest, BODY *src, int foo, int iNumBodies, int iBody)
Create a copy of the body at index
iBody
. Used during integration of the differential equations.- Parameters:
dest – The body copy
src – The original body instance
foo – Who knows!?
iNumBodies – Number of bodies
iBody – Current body index
-
void ReadFXUV(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the XUV flux from the input file.
-
void ReadThermTemp(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the thermospheric temperature for the :cite:`LehmerCatling17` atmospheric escape model.
-
void ReadFlowTemp(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the temperature of the hydro flow for the Luger+Barnes escape model.
-
void ReadAtmGasConst(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the atmospheric gas constant the Lehmer and Catling (2017) atmospheric escape model.
-
void ReadJeansTime(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the Jeans time, the time at which the flow transitions from hydrodynamic to ballistic.
-
void ReadPresXUV(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the effective XUV absorption pressure for the Lehmner and Catling (2017) model.
-
void ReadWaterLossModel(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the water loss model for the Luger and Barnes (2015) atmospheric escape model.
-
void ReadAtmXAbsEffH2OModel(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the XUV absorption efficiency model for the Luger and Barnes (2015) atmospheric escape model.
-
void ReadPlanetRadiusModel(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the planet radius model.
-
void ReadInstantO2Sink(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the parameter that controls surface O2 sinks for the Luger and Barnes (2015) model.
-
void ReadStopWaterLossInHZ(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the parameter that controls water loss once planet reaches HZ.
-
void ReadBondiLimited(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the parameter that controls whether or not to limit envelope mass loss at the Bondi limit
-
void ReadEnergyLimited(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the parameter that controls whether or not to use energy-limited escape for H envelope mass loss
-
void ReadRRLimited(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the parameter that controls whether or not to use radiation/recombination-limited escape
-
void ReadAtmEscAuto(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the parameter that controls whether or not to let atmesc determine which escape regime the planet is in
-
void ReadXFrac(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the planet’s effective XUV radius.
-
void ReadAtmXAbsEffH(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the XUV absorption efficiency for hydrogen.
-
void ReadMinKTide(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Minimum value for KTide
-
void ReadAtmXAbsEffH2O(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the XUV absorption efficiency for water.
-
void ReadOxygenMass(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the planet’s initial atmospheric oxygen mass (Luger and Barnes 2015 model).
-
void ReadOxygenMantleMass(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the planet’s initial mantle oxygen mass (Luger and Barnes 2015 model).
-
void ReadHaltMinSurfaceWaterMass(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the parameter that controls whether the code halts when the planet is desiccated.
-
void ReadHaltMinEnvelopeMass(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
Read the parameter that controls whether the code halts when the planet’s envelope is fully evaporated.
-
void InitializeOptionsAtmEsc(OPTIONS *options, fnReadOption fnRead[])
Initialize the user options for the atmospheric escape model.
- Parameters:
options – A pointer to the OPTIONS instance
fnRead – Array of pointers to the functions that read in the options
-
void ReadOptionsAtmEsc(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, fnReadOption fnRead[], int iBody)
Loops through the input files and reads all user options for the atmospheric escape model.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the integration CONTROL instance
files – A pointer to the array of input FILES
options – A pointer to the OPTIONS instance
system – A pointer to the SYSTEM instance
fnRead – Array of pointers to the functions that read in the options
iBody – The current BODY number
-
void VerifySurfaceWaterMass(BODY *body, OPTIONS *options, UPDATE *update, double dAge, int iBody)
Initializes the differential equation matrix for the surface water mass.
-
void VerifyOxygenMass(BODY *body, OPTIONS *options, UPDATE *update, double dAge, int iBody)
Initializes the differential equation matrix for the atmospheric oxygen mass.
-
void VerifyOxygenMantleMass(BODY *body, OPTIONS *options, UPDATE *update, double dAge, int iBody)
Initializes the differential equation matrix for the mantle oxygen mass.
-
void VerifyEnvelopeMass(BODY *body, OPTIONS *options, UPDATE *update, double dAge, int iBody)
Initializes the differential equation matrix for the gaseous envelope mass.
-
void VerifyMassAtmEsc(BODY *body, OPTIONS *options, UPDATE *update, double dAge, int iBody)
Initializes the differential equation matrix for the planet mass.
-
void VerifyRadiusAtmEsc(BODY *body, CONTROL *control, OPTIONS *options, UPDATE *update, double dAge, int iBody)
Initializes the differential equation matrix for the planet radius.
-
void EnvelopeLost(BODY *body, EVOLVE *evolve, IO *io, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody)
-
void ForceBehaviorEnvelopeEscape(BODY *body, MODULE *module, EVOLVE *evolve, IO *io, SYSTEM *system, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody, int iModule)
If necessary, change how the code handle hydrogen envelope escape
- Parameters:
body – A pointer to the current BODY instance
module – A pointer to the MODULE instance
evolve – A pointer to the EVOLVE instance
io – A pointer to the IO instance
system – A pointer to the SYSTEM instance
update – A pointer to the UPDATE instance
fnUpdate – A triple-pointer to the function that updates each variable
iBody – The current BODY number
iModule – The current MODULE number
-
void ForceBehaviorWaterEscape(BODY *body, MODULE *module, EVOLVE *evolve, IO *io, SYSTEM *system, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody, int iModule)
If necessary, change how the code handle hwater loss
- Parameters:
body – A pointer to the current BODY instance
module – A pointer to the MODULE instance
evolve – A pointer to the EVOLVE instance
io – A pointer to the IO instance
system – A pointer to the SYSTEM instance
update – A pointer to the UPDATE instance
fnUpdate – A triple-pointer to the function that updates each variable
iBody – The current BODY number
iModule – The current MODULE number
-
void fnForceBehaviorAtmEsc(BODY *body, MODULE *module, EVOLVE *evolve, IO *io, SYSTEM *system, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody, int iModule)
This function is run during every step of the integrator to perform checks and force certain non-diffeq behavior.
- Parameters:
body – A pointer to the current BODY instance
module – A pointer to the MODULE instance
evolve – A pointer to the EVOLVE instance
io – A pointer to the IO instance
system – A pointer to the SYSTEM instance
update – A pointer to the UPDATE instance
fnUpdate – A triple-pointer to the function that updates each variable
iBody – The current BODY number
iModule – The current MODULE number
-
void fnPropsAuxAtmEsc(BODY *body, EVOLVE *evolve, IO *io, UPDATE *update, int iBody)
Initializes several helper variables and properties used in the integration.
-
void AssignAtmEscDerivatives(BODY *body, EVOLVE *evolve, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody)
Assigns functions returning the time-derivatives of each variable to the magical matrix of function pointers.
-
void NullAtmEscDerivatives(BODY *body, EVOLVE *evolve, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody)
Assigns null functions to the magical matrix of function pointers for variables that will not get updated.
-
void VerifyAtmEsc(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, OUTPUT *output, SYSTEM *system, UPDATE *update, int iBody, int iModule)
Verify all the inputs for the atmospheric escape module.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the CONTROL instance
files – A pointer to the FILES instance
options – A pointer to the OPTIONS instance
output – A pointer to the OUTPUT instance
system – A pointer to the SYSTEM instance
update – A pointer to the UPDATE instance
iBody – The current BODY number
iModule – The current MODULE number
-
void InitializeUpdateAtmEsc(BODY *body, UPDATE *update, int iBody)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateEccAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateSurfaceWaterMassAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateOxygenMassAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateOxygenMantleMassAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateEnvelopeMassAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateMassAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateOblAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateRotAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateSemiAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
void FinalizeUpdateRadiusAtmEsc(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iFoo)
Internal housekeeping function that determines which variables get updated every time step.
-
int fbHaltSurfaceDesiccated(BODY *body, EVOLVE *evolve, HALT *halt, IO *io, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody)
Checks for surface desiccation and halts if necessary.
-
int fbHaltEnvelopeGone(BODY *body, EVOLVE *evolve, HALT *halt, IO *io, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody)
Checks for envelope evaporation and halts if necessary.
-
void VerifyHaltAtmEsc(BODY *body, CONTROL *control, OPTIONS *options, int iBody, int *iHalt)
Check whether the user wants to halt on certain conditions.
-
void WriteSurfaceWaterMass(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the surface water mass.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteHEscapeRegime(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the H escape regime
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteOxygenMass(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the atmospheric oxygen mass.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteKTide(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs Ktide, the gravitational enhancement of mass loss.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteOxygenMantleMass(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the mantle oxygen mass.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WritePlanetRadius(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the planet radius.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteEnvelopeMass(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the envelope mass.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteRGLimit(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the semi-major axis corresponding to the current runaway greenhouse limit.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteOxygenMixingRatio(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the oxygen mixing ratio at the base of the hydrodynamic wind.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteOxygenEta(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the oxygen eta parameter from Luger and Barnes (2015).
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteAtmXAbsEffH2O(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the XUV absorption efficiency for water.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WritePlanetRadXUV(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the planet’s radius in the XUV.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteDEnvMassDt(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the atmospheric mass loss rate.
Warning
This routine is currently broken.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteThermTemp(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the thermospheric temperature.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteFlowTemp(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the temperature of the flow.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WritePresSurf(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the surface pressure.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WritePresXUV(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the pressure at the XUV absorption radius.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteJeansTime(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the time at which the flow transitioned to Jeans escape.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteScaleHeight(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the atmospheric scale height.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteAtmGasConst(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the gas constant.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteRadSolid(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the planet’s solid radius.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteRocheRadius(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the planet’s Roche radius.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteBondiRadius(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the planet’s Bondi radius.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteFXUV(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the XUV flux received by the planet.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteRRCriticalFlux(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the critical XUV flux that separates the radiation/recombination-limited and energy-limited H envelope escape regimes
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteCrossoverMass(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the crossover mass.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteWaterEscapeRegime(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the Water escape regime
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteFXUVCRITDRAG(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the XUV flux received by the planet.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteHREFFLUX(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the Hydrogen Reference Flux
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteHDiffLimFlux(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the H flux if it was diffusion limited (or the true flux in the diffusion limited regime)
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteHRefODragMod(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Modifier for H Ref Flux to include oxygen drag at a snapshot in time
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteMolecOxygenMixingRatio(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the molecular oxygen mixing ratio.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void WriteWaterAtmMixingRatio(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char cUnit[])
Logs the water mixing ratio.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
units – A pointer to the current UNITS instance
update – A pointer to the current UPDATE instance
iBody – The current body Number
dTmp – Temporary variable used for unit conversions
cUnit – The unit for this variable
-
void InitializeOutputAtmEsc(OUTPUT *output, fnWriteOutput fnWrite[])
Set up stuff to be logged for atmesc.
- Parameters:
output – A pointer to the current OUTPUT instance
fnWrite – A pointer to the function that does the logging
-
void LogOptionsAtmEsc(CONTROL *control, FILE *fp)
Log the global atmesc options.
Warning
This routine currently does nothing!
- Parameters:
control – A pointer to the current CONTROL instance
fp – A FILE pointer
-
void LogAtmEsc(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UPDATE *update, fnWriteOutput fnWrite[], FILE *fp)
Log the global atmesc parameters.
Warning
This routine currently does nothing!
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
update – A pointer to the current UPDATE instance
fnWrite – A pointer to the function doing the logging
fp – A FILE pointer
-
void LogBodyAtmEsc(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UPDATE *update, fnWriteOutput fnWrite[], FILE *fp, int iBody)
Log the body-specific atmesc parameters.
- Parameters:
body – A pointer to the current BODY instance
control – A pointer to the current CONTROL instance
output – A pointer to the current OUTPUT instance
system – A pointer to the current SYSTEM instance
update – A pointer to the current UPDATE instance
fnWrite – A pointer to the function doing the logging
fp – A FILE pointer
iBody – The current BODY number
-
void AddModuleAtmEsc(CONTROL *control, MODULE *module, int iBody, int iModule)
Adds atmesc to the current array of MODULEs.
-
double fdDSurfaceWaterMassDt(BODY *body, SYSTEM *system, int *iaBody)
The rate of change of the surface water mass.
-
double fdDOxygenMassDt(BODY *body, SYSTEM *system, int *iaBody)
The rate of change of the oxygen mass in the atmosphere.
-
double fdDOxygenMantleMassDt(BODY *body, SYSTEM *system, int *iaBody)
The rate of change of the oxygen mass in the mantle.
-
double fdDEnvelopeMassDt(BODY *body, SYSTEM *system, int *iaBody)
The rate of change of the envelope mass given energy-limited escape.
-
double fdDEnvelopeMassDtBondiLimited(BODY *body, SYSTEM *system, int *iaBody)
The rate of change of the envelope mass given Bondi-limited escape.
-
double fdDEnvelopeMassDtRRLimited(BODY *body, SYSTEM *system, int *iaBody)
The rate of change of the envelope mass given raditation/recombination-limited escape.
-
double fdSurfEnFluxAtmEsc(BODY *body, SYSTEM *system, UPDATE *update, int iBody, int iFoo)
This function does nothing in atmesc.
-
double fdPlanetRadius(BODY *body, SYSTEM *system, int *iaBody)
Returns the planet radius at the current time.
-
int fbDoesWaterEscape(BODY *body, EVOLVE *evolve, IO *io, int iBody)
Computes whether or not water is escaping.
-
double fdAtomicOxygenMixingRatio(double dSurfaceWaterMass, double dOxygenMass)
Computes the atomic oxygen mixing ratio in the hydrodynamic flow.
- Parameters:
dSurfaceWaterMass – The amount of water in the atmosphere
dOxygenMass – The amount of oxygen in the atmosphere
-
double fdMolecOxygenMixingRatio(double dSurfaceWaterMass, double dOxygenMass)
Computes the molecular oxygen mixing ratio in atmosphere. ASSUMING PURE WATER/OXYGEN ATMOSPHERE
- Parameters:
dSurfaceWaterMass – The amount of water in the atmosphere
dOxygenMass – The amount of oxygen in the atmosphere
-
double fdWaterAtmMixingRatio(double dSurfaceWaterMass, double dOxygenMass)
Computes the water mixing ratio in atmosphere. ASSUMING PURE WATER/OXYGEN ATMOSPHERE
- Parameters:
dSurfaceWaterMass – The amount of water in the atmosphere
dOxygenMass – The amount of oxygen in the atmosphere
-
double fdHZRG14(BODY *body, int iBody)
Performs a simple log-linear fit to the Kopparapu et al. (2014) mass-dependent runaway greenhouse limit.
Warning
Something is wrong with this linear fit in the first 5 Myr or so, as it diverges.
- Parameters:
dLuminosity – The stellar luminosity
dTeff – The stellar effective temperature
dEcc – The planet’s eccentricity — RB: Why is ecc passed?
dPlanetMass – The planet mass
-
double fdXUVEfficiencyBolmont2016(double dFXUV)
Computes the XUV absorption efficiency for a water vapor atmosphere based on a fit to the figure in Bolmont et al. (2017).
- Parameters:
dFXUV – The XUV flux incident on the planet.
-
void fvLinearFit(double *x, double *y, int iLen, double *daCoeffs)
Performs a really simple linear least-squares fit on data.
- Parameters:
x – The independent coordinates
y – The dependent coordinates
iLen – The length of the arrays
daCoeffs – The slope and the intercept of the fit
-
double fdEqH2AtmosphereSoundSpeed(double dTemp, double dRad, double dSemi)
Calculate sound speed of a diatomic H (H2) isothermal gaseous atmosphere in which the temperature is set by the local equilibrium temperature.
- Parameters:
dTemp – double stellar effective temperature
dRad – double stellar radius
dSemi – double planetary semi-major axis
- Returns:
sound speed
-
double fdRocheRadius(BODY *body, int iBody)
Calculate the Roche radius assuming body 0 is the host star using Eqn. 8 from Luger et al. (2015)
- Parameters:
body – BODY struct
iBody – int body indentifier
- Returns:
Body’s Roche radius
-
double fdBondiRadius(BODY *body, int iBody)
Calculate the Bondi radius assuming body 0 is the host star and that the planetary atmosphere at the Bondi radius is diatomic H2 at the blackbody equilibrium temperature set by thermal emission from the host star adapting equation. Adapted from equations 2 and 4 from Owen & Wu (2016)
- Parameters:
body – BODY struct
iBody – int body indentifier
- Returns:
Body’s Bondi radius
-
int fbRRCriticalFlux(BODY *body, int iBody)
Calculate the whether or not incident XUV flux exceeds critical flux between the radiation/recombination-limited and energy-limited H envelope escape regimes following Luger+2015 Eqn. 13
- Parameters:
body – BODY struct
iBody – int body indentifier
- Returns:
whether or not the flux is radiation/recombination-limited
-
double fdRRCriticalFlux(BODY *body, int iBody)
Calculate the critical flux between the radiation/recombination-limited and energy-limited H envelope escape regimes following Luger+2015 Eqn. A23-25
- Parameters:
body – BODY struct
iBody – int body indentifier
- Returns:
critical flux between radiation/recombination and Energy-limited regimes
-
int fbBondiCriticalDmDt(BODY *body, int iBody)
Estimate if mass loss is Bondi-limited, i.e. is planet in Roche lobe overflow
- Parameters:
body – BODY struct
iBody – int body indentifier
- Returns:
whether or not the flux is Bondi-limited
-
void fvAtmEscRegimeChangeOutput(int iRegimeOld, int iRegimeNew, double dTime)
Determine correct print statement to identify atmospheric escape regime change string
- Parameters:
iRegimeOld – int previoius atmospheric escape regime
iRegimeNew – int new atmospheric escape regime
dTime – double time when regime change occurs
- Returns:
None
atmesc.h
Subroutines that control the integration of the atmospheric escape model.
- Author
Rodrigo Luger (rodluger@gmail.com)
- Date
May 12 2015
Defines
-
TOMASS
Mass of one terrestrial ocean in kg (TO)
-
TOHMASS
Hydrogen mass in one TO
-
ATMESC_LB15
Flag: Luger and Barnes (2015) atmospheric escape formulae
-
ATMESC_LBEXACT
Flag: Luger and Barnes (2015) atmospheric escape formulae w/ updated \ oxygen mixing ratio calculations
-
ATMESC_TIAN
Flag: Tian (2015) atmospheric escape formulae flag \
-
ATMESC_ELIM
Flag: Energy-limited escape
-
ATMESC_DIFFLIM
Flag: Diffusion-limited escape
-
ATMESC_BONDILIM
Flag: Bondi-limited escape
-
ATMESC_RRLIM
Flag: Radiation/recombination-limited escape
-
ATMESC_BALLISTIC
Flag: Ballistic escape regime
-
ATMESC_NONE
Flag: No atmospheric escape
-
ATMESC_LOP12
Flag: Lopez (2012) gaseous planet radius model
-
ATMESC_PROXCENB
Flag: Proxima Centauri b gaseous planet radius model
-
ATMESC_LEHMER17
Flag: Lehmer & Catling (2017) planet radius model
-
ATMESC_BOL16
Flag: Bolmont (2016) XUV absorption efficiency model
-
ATMESC_LS2016
Schaefer et al (2016) atmospheric escape model
-
QOH
Atomic mass ratio oxygen/hydrogen
-
OPTSTARTATMESC
Start of AtmEsc options
-
OPTENDATMESC
End of AtmEsc options
-
OPT_HALTDESICCATED
Halt if desiccated?
-
OPT_XFRAC
X-ray absorption radius as a fraction of planet radius
-
OPT_ATMXABSEFFH
Hydrogen Absorption efficiency (epsilon)
-
OPT_HALTENVELOPEGONE
Halt if evaporated?
-
OPT_OXYGENMASS
Initial oxygen mass
-
OPT_WATERLOSSMODEL
Oxygen buildup / water loss model
-
OPT_PLANETRADIUSMODEL
Gaseous planet radius model (for atmesc)
-
OPT_INSTANTO2SINK
Gaseous planet radius model (for atmesc) \
-
OPT_ATMXABSEFFH2O
Water Absorption efficiency (epsilon)
-
OPT_OXYGENMANTLEMASS
Initial oxygen mass in mantle
-
OPT_THERMTEMP
thermosphere temperature
-
OPT_PRESXUV
Pressure at bottom of thermosphere
-
OPT_ATMGASCONST
Atmospheric Gas Constant
-
OPT_FXUV
The value of the XUV flux
-
OPT_ATMXABSEFFH2OMODEL
Model for time evolution of epsilon for H2O
-
OPT_JEANSTIME
Time at which flow becomes ballistic (Jeans escape)
-
OPT_FLOWTEMP
Flow temperature
-
OPT_BONDILIMITED
Whether or not to use Bondi-limited escape \
-
OPT_ENERGYLIMITED
Whether or not to use energy-limited escape
-
OPT_RRLIMITED
Whether or not to use radiation/recombination-limited escape
-
OPT_ATMESCAUTO
Whether or not to let atmesc determine escape regime
-
OPT_STOPWATERLOSSINHZ
Stop water loss once planet reaches HZ?
-
OPT_MINKTIDE
Minimum KTide value