poise
Contents
poise.c
Subroutines that control the energy balance model for climate.
- Author
Russell Deitrick (deitrr)
- Date
Sep 10 2015
Functions
-
void ReadLatCellNum(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadPlanckA(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadPlanckB(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadSurfAlbedo(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadOrbitOblData(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadFileOrbitOblData(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadIceAlbedo(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadTGlobalInit(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadPCO2(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadDiffusion(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadFixIceLat(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadHeatCapAnn(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadIceDepRate(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadHadley(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadCalcAB(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadColdStart(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadAlbedoZA(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadSeaIceModel(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadMEPDiff(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadIceSheets(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadSkipSeasEnabled(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadAccuracyMode(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadElevFB(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadForceObliq(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadForceEcc(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadDiffRot(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadClimateModel(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadOLRModel(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadGeography(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadInitIceLat(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadInitIceHeight(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadHeatCapLand(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadSeaIceConduct(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadHeatCapWater(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadAlbedoLand(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadSeasOutputTime(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadAlbedoWater(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadObliqAmp(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadObliqPer(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadEccAmp(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadEccPer(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadMixingDepth(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadFrzTSeaIce(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadLandFrac(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadNuLandWater(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadLapseR(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadRefHeight(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadSpinUpTol(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadAblateFF(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadNStepInYear(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadNumYears(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadIceDt(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadReRunSeas(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void ReadMinIceSheetHeight(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, int iFile)
-
void InitializeOptionsPoise(OPTIONS *options, fnReadOption fnRead[])
-
void ReadOptionsPoise(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, SYSTEM *system, fnReadOption fnRead[], int iBody)
-
void VerifySeasOutputTime(BODY *body, CONTROL *control, OPTIONS *options, char cFile[], int iBody, int iVerbose)
-
void AssignPoiseDerivatives(BODY *body, EVOLVE *evolve, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody)
-
void NullPoiseDerivatives(BODY *body, EVOLVE *evolve, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody)
-
void VerifyPoise(BODY *body, CONTROL *control, FILES *files, OPTIONS *options, OUTPUT *output, SYSTEM *system, UPDATE *update, int iBody, int iModule)
-
void FinalizeUpdateIceMassPoise(BODY *body, UPDATE *update, int *iEqn, int iVar, int iBody, int iLat)
-
void WriteTGlobal(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteAlbedoGlobal(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteSnowball(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceCapNorthLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceCapNorthLatLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceCapNorthSea(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceCapNorthLatSea(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceCapSouthLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceCapSouthLatLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceCapSouthSea(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceCapSouthLatSea(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceBeltLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceBeltNorthLatLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceBeltSouthLatLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceBeltSea(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceBeltNorthLatSea(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceBeltSouthLatSea(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteSnowballLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteSnowballSea(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceFree(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteSkipSeas(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteTempLat(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteTempMinLat(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteTempMaxLat(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteTempMaxLand(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteTempMaxWater(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteTempLandLat(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteTempWaterLat(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteLatitude(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteAlbedoLat(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteAlbedoLandLat(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteAlbedoWaterLat(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteFluxInGlobal(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteFluxOutGlobal(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteTotIceMass(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceFlowTot(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteAreaIceCov(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceBalanceTot(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteAnnualInsol(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WritePeakInsol(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteDailyInsol(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WritePlanckB(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteSeasonalTemp(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteSeasonalFluxes(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteSeasonalIceBalance(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteFluxMerid(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteFluxIn(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteFluxOut(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteDivFlux(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceMass(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceHeight(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteBedrockH(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WritePlanckBAvg(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteDIceMassDt(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceAccum(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteIceAblate(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteDIceMassDtFlow(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteEnergyResL(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void WriteEnergyResW(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UNITS *units, UPDATE *update, int iBody, double *dTmp, char **cUnit)
-
void InitializeOutputPoise(OUTPUT *output, fnWriteOutput fnWrite[])
-
void LogPoise(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UPDATE *update, fnWriteOutput fnWrite[], FILE *fp)
-
void LogBodyPoise(BODY *body, CONTROL *control, OUTPUT *output, SYSTEM *system, UPDATE *update, fnWriteOutput fnWrite[], FILE *fp, int iBody)
-
double fdBasalFlow(BODY *body, int iBody, int iLat)
Calculates flow at base of ice sheet
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
iLat – Index of current latitude cell
- Returns:
Flow rate at base of ice sheet (velocity*height -> m^2/s)
-
void fvNoIceBelt(double *dLatIceEdgeNorth, double *dLatIceEdgeSouth, int *iLatIceEdgeNorth, int *iLatIceEdgeSouth, int *bBelt)
If a test for a belt is false, assign these values to the referenced parameters.
- Parameters:
dLatIceEdgeNorth – Northern latitude of ice edge
dLatIceEdgeSouth – Southern latitude of ice edge
iLatIceEdgeNorth – Index of northern ice edge latitude
iLatIceEdgeNorth – Index of southern ice edge latitude
bBelt – Boolean for ice belt presence
-
void fvNoIceCap(double *dLatIceEdge, int *iLatIceEdge, int *bCap)
If a test for a cap is false, assign these values to the referenced parameters.
- Parameters:
dLatIceEdge – Latitude of ice edge
iLatIceEdge – Index of ice edge latitude
bBoolean – Boolean for ice cap presence
-
double fbIceLatSea(BODY *body, int iBody, int iLat)
Is a specific latitude’s sea component covered in ice?
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
double fbIceLatLand(BODY *body, int iBody, int iLat)
Is a specific latitude’s land component covered in ice?
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
int fbIceFree(BODY *body, int iBody)
Determines if planet has no surface ice
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
- Returns:
1 for no sea or land ice free, 0 for ice
-
int fbIceFreeLand(BODY *body, int iBody)
Determines if planet has no sland ice
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
- Returns:
1 for no sea or land ice free, 0 for ice
-
int fbIceFreeSea(BODY *body, int iBody)
Determines if planet has no sea ice
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
- Returns:
1 for no sea or land ice free, 0 for ice
-
void fvSnowball(BODY *body, int iBody)
Determines if planet has entered snowball state
XXX This should really be removed or modified in order to be consistent with other ice coverage functions!!!! XXX
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
int fbSnowballLand(BODY *body, int iBody)
Is all the land on the planet covered in ice?
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
int fbSnowballSea(BODY *body, int iBody)
Are the planet’s seas all ice-covered?
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
void fvNorthIceCapLand(BODY *body, int iBody, double *dLatIceEdge, int *iLatIceEdge, int *bCap)
Determine if planet has a northern polar ice cap on land and the extent of the cap.
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
iLatIceEdge – Index of ice edge latitude
dLatIceEdge – Latitude of ice edge
bCap – 1 for northern polar ice cap, 0 for ice free north pole
-
void fvNorthIceCapSea(BODY *body, int iBody, double *dLatIceEdge, int *iLatIceEdge, int *bCap)
Determines if planet has a northern polar sea ice cap and the extent of the cap.
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
iLatIceEdge – Index of ice edge latitude
dLatIceEdge – Latitude of ice edge
bCap – 1 for northern polar ice cap, 0 for ice free north pole
-
void fvSouthIceCapLand(BODY *body, int iBody, double *dLatIceEdge, int *iLatIceEdge, int *bCap)
Determines if planet has a southern polar ice cap on land and the extent of the cap.
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
iLatIceEdge – Index of ice edge latitude
dLatIceEdge – Latitude of ice edge
bCap – 1 for northern polar ice cap, 0 for ice free north pole
-
void fvSouthIceCapSea(BODY *body, int iBody, double *dLatIceEdge, int *iLatIceEdge, int *bCap)
Determines if planet has a southern polar sea ice cap
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
iLatIceEdge – Index of ice edge latitude
dLatIceEdge – Latitude of ice edge
bCap – 1 for northern polar ice cap, 0 for ice free north pole
-
void fvIceBeltLand(BODY *body, int iBody, double *dLatIceEdgeNorth, double *dLatIceEdgeSouth, int *iLatIceEdgeNorth, int *iLatIceEdgeSouth, int *bBelt)
Determines if planet has an equatorial ice belt on land
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
iLatIceEdgeNorth – Index of northern ice edge latitude
iLatIceEdgeSouth – Index of southern ice edge latitude
dLatIceEdgeNorth – Latitude of northern ice edge
dLatIceEdgeSouth – Latitude of southern ice edge
bBelt – 1 for northern polar ice cap, 0 for ice free north pole
-
void fvIceBeltSea(BODY *body, int iBody, double *dLatIceEdgeNorth, double *dLatIceEdgeSouth, int *iLatIceEdgeNorth, int *iLatIceEdgeSouth, int *bBelt)
Determines if planet has an equatorial ice belt on sea
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
iLatIceEdgeNorth – Index of northern ice edge latitude
iLatIceEdgeSouth – Index of southern ice edge latitude
dLatIceEdgeNorth – Latitude of northern ice edge
dLatIceEdgeSouth – Latitude of southern ice edge
bBelt – 1 for northern polar ice cap, 0 for ice free north pole
-
void fvPropsAuxPoise(BODY *body, EVOLVE *evolve, IO *io, UPDATE *update, int iBody)
Standard properties function for POISE. Updates auxiliary quantities (currently just the dynamical ellipticity when DistRot is not enabled).
XXX References to other modules are forbidden in this file!
- Parameters:
body – Struct containing all body information and variables
evolve – Struct containing evolve information and variables
update – Struct containing update information and variables
iBody – Body in question
-
void fvPrecessionExplicit(BODY *body, EVOLVE *evolve, int iBody)
Calculates precession of the spin axis when DistRot is disabled
- Parameters:
body – Struct containing all body information and variables
evolve – Struct containing evolve information and variables
iBody – Body in question
-
void fvForceObliq(BODY *body, EVOLVE *evolve, int iBody)
Forces obliquity oscillation (bForceObliq = 1).
- Parameters:
body – Struct containing all body information and variables
evolve – Struct containing evolve information and variables
iBody – Body in question
-
void fvForceEcc(BODY *body, EVOLVE *evolve, int iBody)
Forces eccentricity oscillation (bForceEcc = 1).
- Parameters:
body – Struct containing all body information and variables
evolve – Struct containing evolve information and variables
iBody – Body in question
-
void fvAreaIceCovered(BODY *body, int iBody)
Calculates the fractional ice covered area of the planet
XXX This looks wrong and inconsistent with other ice outputs. This returns the fraction of latitudes that are ice-covered, not the fractional area.
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
void ForceBehaviorPoise(BODY *body, MODULE *module, EVOLVE *evolve, IO *io, SYSTEM *system, UPDATE *update, fnUpdateVariable ***fnUpdate, int iBody, int iModule)
Force behavior function for POISE. This is where the magic happens— POISE works entirely in force behavior because it needs to solve several PDEs (not well modeled with RK4). First, the EBM (climate) is run for several orbits, then the ice sheet flow. The EBM can be periodically rerun needed.
- Parameters:
body – Struct containing all body information and variables
module – Struct containing module/intermodule quantities
evolve – Struct containing evolve information and variables
io – Struct containing read/write information
system – Struct containing system-wide information
update – Struct containing update information and variables
fnUpdate – Array of function pointers to derivatives
iBody – Body in question
iModule – Module in question
-
double fdEccTrueAnomaly(double dTrueA, double dEcc)
Calculates eccentric anomaly from true anomaly
- Parameters:
dTrueA – Planet’s true anomaly
dEcc – Planet’s orbital eccentricity
- Returns:
Eccentric anomaly
-
void fvDailyInsolation(BODY *body, int iBody, int iDay)
Calculates insolation at each latitude for a single “iNday” of the year/orbit
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
iDay – Day of the year
-
void fvAnnualInsolation(BODY *body, int iBody)
Calculates insolation at each latitude over the entire year/orbit
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
void fvAlbedoAnnual(BODY *body, int iBody)
Calculates/updates the albedo at each latitude for the annual EBM
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
void fvMatrixInvertAnnual(BODY *body, int iBody)
Inverts the matrix for the annual EBM
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
void fvMatrixInvertSeasonal(BODY *body, int iBody)
Inverts the matrix for the seasonal EBM
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
void fvTempGradientAnn(BODY *body, double dDelta_x, int iBody)
Calculates the approximate temperature gradient in latitude for the annual EBM
- Parameters:
body – Struct containing all body information and variables
dDelta_x – Spacing of grid (x = sin(latitude))
iBody – Body in question
-
void fvTempGradientSea(BODY *body, double dDelta_x, int iBody)
Calculates the approximate temperature gradient in latitude for the seasonal EBM
- Parameters:
body – Struct containing all body information and variables
dDelta_x – Spacing of grid (x = sin(latitude))
iBody – Body in question
-
void fvMatrixAnnual(BODY *body, int iBody)
Calculates the backwards-Euler matrix that integrates the annual EBM. Each operation of the inverse matrix is a “time-step”.
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
void PoiseAnnual(BODY *body, int iBody)
Runs the annual EBM, called from ForceBehavior. The annual EBM runs to steady-state (global temperature change becomes very small), rather than for a set number of orbits.
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
double fdOLRhm16(BODY *body, int iBody, int iLat, int bModel)
Calculates the OLR from the Haqq-Misra+ 2016 formulae
- Parameters:
body – Struct containing all body information
iBody – Body in question
iLat – Latitude at which you want to calculate the OLR
bModel – Type of EBM (annual or seasonal)
-
double fdOLRdThm16(BODY *body, int iBody, int iLat, int bModel)
Calculates the slope of the OLR from the Haqq-Misra+ 2016 formulae
- Parameters:
body – Struct containing all body information
iBody – Body in question
iLat – Latitude at which you want to calculate the OLR
bModel – Type of EBM (annual or seasonal)
-
double fdOLRsms09(BODY *body, int iBody, int iLat, int bModel)
Calculates the OLR from the Spiegel+ 2009 formulae
- Parameters:
body – Struct containing all body information
iBody – Body in question
iLat – Latitude at which you want to calculate the OLR
bModel – Type of EBM (annual or seasonal)
-
double fdOLRdTsms09(BODY *body, int iBody, int iLat, int bModel)
Calculates the slope of the OLR from the Spiegel+ 2009 formulae
- Parameters:
body – Struct containing all body information
iBody – Body in question
iLat – Latitude at which you want to calculate the OLR
bModel – Type of EBM (annual or seasonal)
-
double fdOLRwk97(BODY *body, int iBody, int iLat, int bModel)
Calculates the OLR from the Williams & Kasting 1997 formulae
- Parameters:
body – Struct containing all body information
iBody – Body in question
iLat – Latitude at which you want to calculate the OLR
bModel – Type of EBM (annual or seasonal)
-
double fdOLRdTwk97(BODY *body, int iBody, int iLat, int bModel)
Calculates the slope of the OLR from the Williams & Kasting 1997 formulae
- Parameters:
body – Struct containing all body information
iBody – Body in question
iLat – Latitude at which you want to calculate the OLR
bModel – Type of EBM (annual or seasonal)
-
double AlbedoTOA250(double Temp, double phi, double zenith, double albsurf)
Calculates the “top-of-atmosphere” from the Haqq-Misra+ 2016 formulae at temperatures < 250 K
- Parameters:
Temp – Temperature at grid point
pCO2 – Atmospheric partial pressure of CO2
zenith – Zenith angle of host star on sky
albsurf – Base albedo quantity of surface (ice/water/land)
-
double fdAlbedoTOA350(double Temp, double phi, double zenith, double albsurf)
Calculates the “top-of-atmosphere” from the Haqq-Misra+ 2016 formulae at 250 K < temperatures < 350 K
- Parameters:
Temp – Temperature at grid point
pCO2 – Atmospheric partial pressure of CO2
zenith – Zenith angle of host star on sky
albsurf – Base albedo quantity of surface (ice/water/land)
-
double AlbedoTOA280(double Temp, double pCO2, double zenith, double albsurf)
Calculates the “top-of-atmosphere” from the Williams & Kasting 1997 formulae at temperatures < 280 K
- Parameters:
Temp – Temperature at grid point
pCO2 – Atmospheric partial pressure of CO2
zenith – Zenith angle of host star on sky
albsurf – Base albedo quantity of surface (ice/water/land)
-
double AlbedoTOA370(double Temp, double pCO2, double zenith, double albsurf)
Calculates the “top-of-atmosphere” from the Williams & Kasting 1997 formulae at 280 K < temperatures < 370 K
- Parameters:
Temp – Temperature at grid point
pCO2 – Atmospheric partial pressure of CO2
zenith – Zenith angle of host star on sky
albsurf – Base albedo quantity of surface (ice/water/land)
-
double AlbedoTaylor(double zenith)
Calculates albedo based on zenith angle (tuned to Earth)
- Parameters:
zenith – Zenith angle of each latitude in radians
- Returns:
Albedo
-
void AlbedoTOAhm16(BODY *body, double zenith, int iBody, int iLat)
Calculates the planetary albedo based on the formulae from Haqq-Misra+ 2016, accounting for temperature and surface type.
- Parameters:
body – Struct containing all body information
zenith – Zenith angle of latitude iLat
iBody – Body in question
iLat – Latitude cell in question
-
void AlbedoTOAwk97(BODY *body, double zenith, int iBody, int iLat)
Calculates the planetary albedo based on the formulae from Williams & Kasting 1997, accounting for temperature and surface type.
- Parameters:
body – Struct containing all body information
zenith – Zenith angle of latitude iLat
iBody – Body in question
iLat – Latitude cell in question
-
void AlbedoTOAsms09(BODY *body, double zenith, int iBody, int iLat)
Calculates the planetary albedo based on the formulae from Spiegel+ 2009, accounting for temperature and surface type.
- Parameters:
body – Struct containing all body information
zenith – Zenith angle of latitude iLat
iBody – Body in question
iLat – Latitude cell in question
-
void fvAlbedoSeasonal(BODY *body, int iBody, int iDay)
Calculates the planetary albedo for the seasonal EBM at iNday iDay
- Parameters:
body – Struct containing all body information
iBody – Body in question
iDay – Day of the planet’s year
-
void fvSeaIce(BODY *body, int iBody)
Modifies the ocean component to account for effects of sea ice (seasonal EBM only). This slows the EBM considerably so use with caution.
- Parameters:
body – Struc containing all body information
iBody – Body in question
-
void fvMatrixSeasonal(BODY *body, int iBody)
Calculates the backwards-Euler matrix that integrates the seasonal EBM. Each operation of the inverse matrix is a “time-step”.
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
void fvSourceFSeas(BODY *body, int iBody, int iNday)
Calculates non-matrix terms in the energy balance equation (I don’t remember why I called these “SourceF”). These terms are the OLR offset and the absorbed radiation (temperature independent quantities).
- Parameters:
body – Struct containing all body information
iBody – Body in question
iNday – Day of the planet’s year
-
void EnergyResiduals(BODY *body, int iBody, int iNday)
Calculates average energy residual or “error” over course of the year. This should be used as a check on the physics in the EBM (should be ~0).
- Parameters:
body – Struct containing all body information
iBody – Body in question
iNday – Day of the planet’s year
-
void fvFinishSeaIce(BODY *body, double dStepsize, int iBody, int iLat, int iNyear, int iNday, int iNstep)
-
void PoiseSeasonal(BODY *body, int iBody)
Runs the seasonal EBM, called from ForceBehavior. The seasonal EBM runs on a fixed time-step (of order days) to resolve the seasonal cycle. It can be said to be in “equilibrium” though not in “steady-state”.
- Parameters:
body – Struct containing all body information and variables
iBody – Body in question
-
double fdIceMassBalance(BODY *body, int iBody, int iLat)
Calculates the net balance between melting and accumulation of ice on land at a given EBM time-step
- Parameters:
body – Struct containing all body information
iBody – Body in question
iLat – Latitude cell in question
- Returns:
Net gain/loss of ice
-
void IceSheetTriDiag(BODY *body, int iBody)
Construct matrix that evolves the ice sheet flow + net balance
- Parameters:
body – Struct containing body information
iBody – Body in question
-
void PoiseIceSheets(BODY *body, EVOLVE *evolve, int iBody)
Main ice sheet routine. Integrates the ice sheets via Crank-Nicholson method in ForceBehavior in the same fashion as Huybers’ model.
- Parameters:
body – Struct containing body information
evolve – Struct containing evolution information
iBody – Body in question
poise.h
Subroutines that control the energy balance model for climate.
- Author
Russell Deitrick (deitrr)
- Date
Sep 10 2015
Defines
-
ANN
-
SEA
-
WK97
-
HM16
-
SMS09
-
ALBFIXED
-
ALBTAYLOR
-
UNIFORM3
-
MODERN
-
LFICE
-
RHOICE
-
MOCEAN
-
a1ICE
-
a2ICE
-
Q1ICE
-
Q2ICE
-
nGLEN
-
RHOSED
-
RHOH2O
-
SEDPHI
-
SEDH
-
SEDD0
-
SEDMU
-
RHOBROCK
-
BROCKTIME
-
OPTSTARTPOISE
-
OPTENDPOISE
-
OPT_LATCELLNUM
-
OPT_PLANCKA
-
OPT_PLANCKB
-
OPT_DIFFUSION
-
OPT_HEATCAPANN
-
OPT_HADLEY
-
OPT_COLDSTART
-
OPT_FIXICELAT
-
OPT_ALBEDOZA
-
OPT_JORMUNGAND
-
OPT_CALCAB
-
OPT_TGLOBALEST
-
OPT_PCO2
-
OPT_MEPDIFF
-
OPT_ICESHEETS
-
OPT_INITICELAT
-
OPT_INITICEHEIGHT
-
OPT_ICEALBEDO
-
OPT_SURFALBEDO
-
OPT_ICEDEPRATE
-
OPT_SKIPSEASENABLED
-
OPT_DIFFROT
-
OPT_SPINUPTOL
-
OPT_READORBITOBLDATA
-
OPT_FILEORBITOBLDATA
-
OPT_LANDFRAC
-
OPT_HEATCAPLAND
-
OPT_HEATCAPWATER
-
OPT_FRZTSEAICE
-
OPT_ICECONDUCT
-
OPT_MIXINGDEPTH
-
OPT_NULANDWATER
-
OPT_NSTEPINYEAR
-
OPT_NUMYEARS
-
OPT_SEAICEMODEL
-
OPT_ALBEDOLAND
-
OPT_ALBEDOWATER
-
OPT_ICEDT
-
OPT_RERUNSEAS
-
OPT_ALBEDOTYPE
-
OPT_GEOGRAPHY
-
OPT_SEASOUTPUTTIME
-
OPT_FORCEOBLIQ
-
OPT_OBLIQAMP
-
OPT_OBLIQPER
-
OPT_ACCUMODE
-
OPT_ELEVFB
-
OPT_LAPSER
-
OPT_REFHEIGHT
-
OPT_ABLATEFF
-
OPT_FORCEECC
-
OPT_ECCAMP
-
OPT_ECCPER
-
OPT_MINICEHEIGHT
-
OPT_OLRMODEL
-
OPT_CLIMATEMODEL
-
OUTSTARTPOISE
-
OUTENDPOISE
-
OUTBODYSTARTPOISE
-
OUT_TGLOBAL
-
OUT_ALBEDOGLOBAL
-
OUT_FLUXINGLOBAL
-
OUT_FLUXOUTGLOBAL
-
OUT_TOTICEMASS
-
OUT_TOTICEFLOW
-
OUT_TOTICEBALANCE
-
OUT_SKIPSEAS
-
OUT_AREAICECOV
-
OUT_LATITUDE
-
OUT_TEMPLAT
-
OUT_ALBEDOLAT
-
OUT_ANNUALINSOL
-
OUT_DAILYINSOL
-
OUT_FLUXMERID
-
OUT_FLUXIN
-
OUT_FLUXOUT
-
OUT_DIVFLUX
-
OUT_ICEMASS
-
OUT_ICEHEIGHT
-
OUT_DICEMASSDT
-
OUT_ICEFLOW
-
OUT_ENERGYRESL
-
OUT_ENERGYRESW
-
OUT_BEDROCKH
-
OUT_TEMPLANDLAT
-
OUT_TEMPWATERLAT
-
OUT_ALBEDOLANDLAT
-
OUT_ALBEDOWATERLAT
-
OUT_TEMPMINLAT
-
OUT_TEMPMAXLAT
-
OUT_SNOWBALL
-
OUT_PLANCKBAVG
-
OUT_ICEACCUM
-
OUT_ICEABLATE
-
OUT_TEMPMAXLAND
-
OUT_TEMPMAXWATER
-
OUT_PEAKINSOL
-
OUT_NORTHICECAPLAND
-
OUT_NORTHICECAPSEA
-
OUT_SOUTHICECAPLAND
-
OUT_SOUTHICECAPSEA
-
OUT_ICEBELTLAND
-
OUT_ICEBELTSEA
-
OUT_SNOWBALLLAND
-
OUT_SNOWBALLSEA
-
OUT_ICEFREE
-
OUT_NORTHICECAPLATLAND
-
OUT_NORTHICECAPLATSEA
-
OUT_SOUTHICECAPLATLAND
-
OUT_SOUTHICECAPLATSEA
-
OUT_NORTHICEBELTLATLAND
-
OUT_NORTHICEBELTLATSEA
-
OUT_SOUTHICEBELTLATLAND
-
OUT_SOUTHICEBELTLATSEA