Skip to content

Commit 80fee92

Browse files
Klencki+ 2025 AM loss prescription (#1425)
* klencki AM loss * changelog * fixed changelog to have an mm change, since this is technically a breaking change * added old macleod-linear AM options to depracted list * what's new * typos * new yaml
1 parent 1662b87 commit 80fee92

File tree

10 files changed

+72
-41
lines changed

10 files changed

+72
-41
lines changed

compas_python_utils/preprocessing/compasConfigDefault.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
##~!!~## COMPAS option values
2-
##~!!~## File Created Mon Aug 18 13:37:46 2025 by COMPAS v03.23.02
2+
##~!!~## File Created Tue Aug 19 15:39:23 2025 by COMPAS v03.25.00
33
##~!!~##
44
##~!!~## The default COMPAS YAML file (``compasConfigDefault.yaml``), as distributed, has
55
##~!!~## all COMPAS option entries commented so that the COMPAS default value for the
@@ -149,8 +149,8 @@ numericalChoices:
149149
# --critical-mass-ratio-white-dwarf-non-degenerate-accretor: 0.000000 # Default: 0.000000
150150
# --mass-transfer-fa: 0.500000 # Default: 0.500000 # Only if using mass-transfer-accretion-efficiency-prescription = 'FIXED'
151151
# --mass-transfer-jloss: 1.000000 # Default: 1.000000 # Only if using mass-transfer-angular-momentum-loss-prescription = 'FIXED'
152-
# --mass-transfer-jloss-macleod-linear-fraction-degen: 0.500000 # Default: 0.500000
153-
# --mass-transfer-jloss-macleod-linear-fraction-non-degen: 0.500000 # Default: 0.500000
152+
# --mass-transfer-jloss-linear-fraction-degen: 0.500000 # Default: 0.500000
153+
# --mass-transfer-jloss-linear-fraction-non-degen: 0.500000 # Default: 0.500000
154154
# --mass-transfer-thermal-limit-C: 10.000000 # Default: 10.000000
155155
# --zeta-adiabatic-arbitrary: 10000.00 # Default: 10000.00
156156
# --zeta-main-sequence: 2.000000 # Default: 2.000000
@@ -263,7 +263,7 @@ stringChoices:
263263
# --case-BB-stability-prescription: 'ALWAYS_STABLE' # Default: 'ALWAYS_STABLE' # Options: ['ALWAYS_UNSTABLE','TREAT_AS_OTHER_MT','ALWAYS_STABLE_ONTO_NSBH','ALWAYS_STABLE']
264264
# --critical-mass-ratio-prescription: 'NONE' # Default: 'NONE' # Options: ['HURLEY_HJELLMING_WEBBINK','GE','GE_IC','CLAEYS','NONE']
265265
# --stellar-zeta-prescription: 'SOBERMAN' # Default: 'SOBERMAN' # Options: ['ARBITRARY','HURLEY','SOBERMAN']
266-
# --mass-transfer-angular-momentum-loss-prescription: 'ISOTROPIC' # Default: 'ISOTROPIC' # Options: ['ARBITRARY','MACLEOD_LINEAR','CIRCUMBINARY','ISOTROPIC','JEANS']
266+
# --mass-transfer-angular-momentum-loss-prescription: 'ISOTROPIC' # Default: 'ISOTROPIC' # Options: ['ARBITRARY','KLENCKI_LINEAR','MACLEOD_LINEAR','CIRCUMBINARY','ISOTROPIC','JEANS']
267267
# --mass-transfer-accretion-efficiency-prescription: 'THERMAL' # Default: 'THERMAL' # Options: ['FIXED','THERMAL']
268268
# --mass-transfer-rejuvenation-prescription: 'STARTRACK' # Default: 'STARTRACK' # Options: ['STARTRACK','HURLEY']
269269
# --mass-transfer-thermal-limit-accretor-multiplier: 'CFACTOR' # Default: 'CFACTOR' # Options: ['ROCHELOBE','CFACTOR']
@@ -273,7 +273,7 @@ stringChoices:
273273
# --common-envelope-formalism: 'ENERGY' # Default: 'ENERGY' # Options: ['TWO_STAGE','ENERGY']
274274
# --common-envelope-lambda-prescription: 'LAMBDA_NANJING' # Default: 'LAMBDA_NANJING' # Options: ['LAMBDA_DEWI','LAMBDA_KRUCKOW','LAMBDA_NANJING','LAMBDA_LOVERIDGE','LAMBDA_FIXED'] # Xu & Li 2010
275275
# --common-envelope-mass-accretion-prescription: 'ZERO' # Default: 'ZERO' # Options: ['CHEVALIER','MACLEOD','UNIFORM','CONSTANT','ZERO']
276-
# --common-envelope-second-stage-gamma-prescription: 'ISOTROPIC' # Default: 'ISOTROPIC' # Options: ['ARBITRARY','MACLEOD_LINEAR','CIRCUMBINARY','ISOTROPIC','JEANS']
276+
# --common-envelope-second-stage-gamma-prescription: 'ISOTROPIC' # Default: 'ISOTROPIC' # Options: ['ARBITRARY','KLENCKI_LINEAR','MACLEOD_LINEAR','CIRCUMBINARY','ISOTROPIC','JEANS']
277277

278278
### TIDES
279279
# --tides-prescription: 'NONE' # Default: 'NONE' # Options: ['KAPIL2025','PERFECT','NONE']

online-docs/pages/User guide/Program options/program-options-list-defaults.rst

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ Default = THERMAL
892892

893893
**--mass-transfer-angular-momentum-loss-prescription** |br|
894894
Mass Transfer Angular Momentum Loss prescription. |br|
895-
Options: { JEANS, ISOTROPIC, CIRCUMBINARY, MACLEOD_LINEAR, ARBITRARY } |br|
895+
Options: { JEANS, ISOTROPIC, CIRCUMBINARY, KLENCKI_LINEAR, MACLEOD_LINEAR, ARBITRARY } |br|
896896
Default = ISOTROPIC
897897

898898
**--mass-transfer-fa** |br|
@@ -905,14 +905,14 @@ Specific angular momentum with which the non-accreted system leaves the system.
905905
Used when ``--mass-transfer-angular-momentum-loss-prescription = ARBITRARY``, ignored otherwise. |br|
906906
Default = 1.0
907907

908-
**--mass-transfer-jloss-macleod-linear-fraction-degen** |br|
908+
**--mass-transfer-jloss-linear-fraction-degen** |br|
909909
Specific angular momentum interpolation fraction for degenerate accretors, linear between 0 and 1 corresponding to the accretor and L2 point. |br|
910-
Used when ``--mass-transfer-angular-momentum-loss-prescription = MACLEOD_LINEAR``, ignored otherwise. |br|
910+
Used when ``--mass-transfer-angular-momentum-loss-prescription = KLENCKI_LINEAR`` or ``MACLEOD_LINEAR``, ignored otherwise. |br|
911911
Default = 0.5
912912

913-
**--mass-transfer-jloss-macleod-linear-fraction-non-degen** |br|
913+
**--mass-transfer-jloss-linear-fraction-non-degen** |br|
914914
Specific angular momentum interpolation fraction for non-degenerate accretors, linear between 0 and 1 corresponding to the accretor and L2 point. |br|
915-
Used when ``--mass-transfer-angular-momentum-loss-prescription = MACLEOD_LINEAR``, ignored otherwise. |br|
915+
Used when ``--mass-transfer-angular-momentum-loss-prescription = KLENCKI_LINEAR`` or ``MACLEOD_LINEAR``, ignored otherwise. |br|
916916
Default = 0.5
917917

918918
**--mass-transfer-rejuvenation-prescription** |br|
@@ -1550,7 +1550,7 @@ Go to :ref:`the top of this page <options-props-top>` for the full alphabetical
15501550
--critical-mass-ratio-helium-HG-non-degenerate-accretor, --critical-mass-ratio-helium-MS-degenerate-accretor, --critical-mass-ratio-helium-MS-non-degenerate-accretor,
15511551
--critical-mass-ratio-helium-giant-degenerate-accretor, --critical-mass-ratio-helium-giant-non-degenerate-accretor, --critical-mass-ratio-white-dwarf-degenerate-accretor,
15521552
--critical-mass-ratio-white-dwarf-non-degenerate-accretor, --eddington-accretion-factor, --mass-transfer, --use-mass-transfer, --mass-transfer-accretion-efficiency-prescription,
1553-
--mass-transfer-angular-momentum-loss-prescription, --mass-transfer-fa, --mass-transfer-jloss, --mass-transfer-jloss-macleod-linear-fraction-degen, --mass-transfer-jloss-macleod-linear-fraction-non-degen,
1553+
--mass-transfer-angular-momentum-loss-prescription, --mass-transfer-fa, --mass-transfer-jloss, --mass-transfer-jloss-linear-fraction-degen, --mass-transfer-jloss-linear-fraction-non-degen,
15541554
--mass-transfer-rejuvenation-prescription, --mass-transfer-thermal-limit-accretor, --mass-transfer-thermal-limit-accretor-multiplier, --mass-transfer-thermal-limit-C, --retain-core-mass-during-caseA-mass-transfer,
15551555
--stellar-zeta-prescription, --zeta-adiabatic-arbitrary, --zeta-main-sequence, --zeta-radiative-giant-star
15561556

online-docs/pages/whats-new.rst

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@ What's new
33

44
Following is a brief list of important updates to the COMPAS code. A complete record of changes can be found in the file ``changelog.h``.
55

6+
**03.25.00 August 19, 2025**
7+
8+
* Added KLENCKI_LINEAR AM loss, which is linear in the specific AM gamma instead of the orbital separation (as in MACLEOD_LINEAR).
9+
10+
This is based on the variations explored in Klencki+ 2025, and is very similar in construction to the MACLEOD_LINEAR option,
11+
with both requiring an interpolation fraction f set by the user. Therefore, the following options are deprecated:
12+
13+
* ``--mass-transfer-jloss-macleod-linear-fraction-degen`` in favor of ``--mass-transfer-jloss-linear-fraction-degen``
14+
* ``--mass-transfer-jloss-macleod-linear-fraction-non-degen`` in favor of ``--mass-transfer-jloss-linear-fraction-non-degen``
15+
16+
and the replacement options apply for both MACLEOD_LINEAR and KLENCKI_LINEAR.
17+
618
**03.24.00 August 19, 2025**
719

820
* Updated Maltsev remnant mass prescription to include the 3 variants described in Willcox+ 2025 (bimodality paper).

src/BaseBinaryStar.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1861,18 +1861,32 @@ double BaseBinaryStar::CalculateGammaAngularMomentumLoss_Static(const double p_D
18611861
} break;
18621862

18631863
case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::MACLEOD_LINEAR : { // linear interpolation on separation between accretor and L2 point
1864-
// interpolate in separation between a_acc and a_L2, both normalized to units of separation a
1864+
// Interpolate linearly in separation between a_acc and a_L2, both normalized to units of separation a
18651865
double q = p_AccretorMass / p_DonorMass;
18661866
double qPlus1 = 1.0 + q;
18671867
double aL2 = std::sqrt(M_SQRT2); // roughly, coincides with CIRCUMBINARY_RING def above
18681868
double aAcc = 1.0 / qPlus1;
18691869
double fMacleod = p_IsAccretorDegenerate
1870-
? OPTIONS->MassTransferJlossMacLeodLinearFractionDegen()
1871-
: OPTIONS->MassTransferJlossMacLeodLinearFractionNonDegen();
1870+
? OPTIONS->MassTransferJlossLinearFractionDegen()
1871+
: OPTIONS->MassTransferJlossLinearFractionNonDegen();
18721872
double aGamma = aAcc + (aL2 - aAcc) * fMacleod;
18731873
gamma = aGamma * aGamma * qPlus1 * qPlus1 / q;
18741874
} break;
18751875

1876+
case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::KLENCKI_LINEAR : { // linear interpolation on separation between accretor and L2 point
1877+
// Interpolate linearly in specific AM loss parameter gamma
1878+
double q = p_AccretorMass / p_DonorMass;
1879+
double qPlus1 = 1.0 + q;
1880+
double qPlus1SquaredByQ = qPlus1 * qPlus1 / q;
1881+
double aL2 = std::sqrt(M_SQRT2); // roughly, coincides with CIRCUMBINARY_RING def above
1882+
double aAcc = 1.0 / qPlus1;
1883+
double gammaL2 = aL2 * aL2 * qPlus1SquaredByQ;
1884+
double gammaAcc = aAcc * aAcc * qPlus1SquaredByQ;
1885+
double fKlencki = p_IsAccretorDegenerate
1886+
? OPTIONS->MassTransferJlossLinearFractionDegen()
1887+
: OPTIONS->MassTransferJlossLinearFractionNonDegen();
1888+
gamma = gammaAcc + (gammaL2 - gammaAcc) * fKlencki;
1889+
} break;
18761890
default: // unknown prescription
18771891
// the only way this can happen is if someone added an MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION
18781892
// and it isn't accounted for in this code. We should not default here, with or without a warning.

src/LogTypedefs.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -936,8 +936,8 @@ enum class PROGRAM_OPTION: int {
936936

937937
MT_FRACTION_ACCRETED,
938938
MT_JLOSS,
939-
MT_JLOSS_MACLEOD_LINEAR_FRACTION_DEGEN,
940-
MT_JLOSS_MACLEOD_LINEAR_FRACTION_NON_DEGEN,
939+
MT_JLOSS_LINEAR_FRACTION_DEGEN,
940+
MT_JLOSS_LINEAR_FRACTION_NON_DEGEN,
941941
MT_REJUVENATION_PRESCRIPTION,
942942
MT_THERMALLY_LIMITED_VARIATION,
943943

@@ -1166,8 +1166,8 @@ const COMPASUnorderedMap<PROGRAM_OPTION, std::string> PROGRAM_OPTION_LABEL = {
11661166

11671167
{ PROGRAM_OPTION::MT_FRACTION_ACCRETED, "MT_FRACTION_ACCRETED" },
11681168
{ PROGRAM_OPTION::MT_JLOSS, "MT_JLOSS" },
1169-
{ PROGRAM_OPTION::MT_JLOSS_MACLEOD_LINEAR_FRACTION_DEGEN, "MT_JLOSS_MACLEOD_LINEAR_FRACTION_DEGEN" },
1170-
{ PROGRAM_OPTION::MT_JLOSS_MACLEOD_LINEAR_FRACTION_NON_DEGEN, "MT_JLOSS_MACLEOD_LINEAR_FRACTION_NON_DEGEN" },
1169+
{ PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_DEGEN, "MT_JLOSS_LINEAR_FRACTION_DEGEN" },
1170+
{ PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_NON_DEGEN, "MT_JLOSS_LINEAR_FRACTION_NON_DEGEN" },
11711171
{ PROGRAM_OPTION::MT_REJUVENATION_PRESCRIPTION, "MT_REJUVENATION_PRESCRIPTION" },
11721172
{ PROGRAM_OPTION::MT_THERMALLY_LIMITED_VARIATION, "MT_THERMALLY_LIMITED_VARIATION" },
11731173

@@ -1757,8 +1757,8 @@ const std::map<PROGRAM_OPTION, PROPERTY_DETAILS> PROGRAM_OPTION_DETAIL = {
17571757

17581758
{ PROGRAM_OPTION::MT_FRACTION_ACCRETED, { TYPENAME::DOUBLE, "PO_MT_Fraction_Accreted", "-", 24, 15}},
17591759
{ PROGRAM_OPTION::MT_JLOSS, { TYPENAME::DOUBLE, "PO_MT_JLoss", "-", 24, 15}},
1760-
{ PROGRAM_OPTION::MT_JLOSS_MACLEOD_LINEAR_FRACTION_DEGEN, { TYPENAME::DOUBLE, "PO_MT_JLoss_Macleod_Linear_Frac_Degen", "-", 24, 15}},
1761-
{ PROGRAM_OPTION::MT_JLOSS_MACLEOD_LINEAR_FRACTION_NON_DEGEN, { TYPENAME::DOUBLE, "PO_MT_JLoss_Macleod_Linear_Frac_Non_Degen", "-", 24, 15}},
1760+
{ PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_DEGEN, { TYPENAME::DOUBLE, "PO_MT_JLoss_Linear_Frac_Degen", "-", 24, 15}},
1761+
{ PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_NON_DEGEN, { TYPENAME::DOUBLE, "PO_MT_JLoss_Linear_Frac_Non_Degen", "-", 24, 15}},
17621762
{ PROGRAM_OPTION::MT_REJUVENATION_PRESCRIPTION, { TYPENAME::INT, "PO_MT_Rejuvenation_Prscrptn", "-", 4, 1 }},
17631763
{ PROGRAM_OPTION::MT_THERMALLY_LIMITED_VARIATION, { TYPENAME::INT, "PO_MT_Thermally_Lmtd_Variation", "-", 4, 1 }},
17641764

src/Options.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,8 @@ void Options::OptionValues::Initialise() {
483483

484484
// Mass transfer angular momentum loss prescription options
485485
m_MassTransferJloss = 1.0;
486-
m_MassTransferJlossMacLeodLinearFractionDegen = 0.5;
487-
m_MassTransferJlossMacLeodLinearFractionNonDegen = 0.5;
486+
m_MassTransferJlossLinearFractionDegen = 0.5;
487+
m_MassTransferJlossLinearFractionNonDegen = 0.5;
488488

489489
m_MassTransferAngularMomentumLossPrescription.type = MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::ISOTROPIC_RE_EMISSION;
490490
m_MassTransferAngularMomentumLossPrescription.typeString = MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION_LABEL.at(m_MassTransferAngularMomentumLossPrescription.type);
@@ -1491,14 +1491,14 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt
14911491
("Fraction of specific angular momentum which non-accreted matter removes from the system (default = " + std::to_string(p_Options->m_MassTransferJloss) + ")").c_str()
14921492
)
14931493
(
1494-
"mass-transfer-jloss-macleod-linear-fraction-degen",
1495-
po::value<double>(&p_Options->m_MassTransferJlossMacLeodLinearFractionDegen)->default_value(p_Options->m_MassTransferJlossMacLeodLinearFractionDegen),
1496-
("Interpolation fraction for jloss prescription for degenerate accretors, requires --mass-transfer-angular-momentum-loss-prescription=MACLEOD_LINEAR. 0 is gamma_acc, 1 is gamma_L2 (default = " + std::to_string(p_Options->m_MassTransferJlossMacLeodLinearFractionDegen) + ")").c_str()
1494+
"mass-transfer-jloss-linear-fraction-degen",
1495+
po::value<double>(&p_Options->m_MassTransferJlossLinearFractionDegen)->default_value(p_Options->m_MassTransferJlossLinearFractionDegen),
1496+
("Interpolation fraction for jloss prescription for degenerate accretors, requires --mass-transfer-angular-momentum-loss-prescription=MACLEOD_LINEAR or KLENCKI_LINEAR. 0 is gamma_acc, 1 is gamma_L2 (default = " + std::to_string(p_Options->m_MassTransferJlossLinearFractionDegen) + ")").c_str()
14971497
)
14981498
(
1499-
"mass-transfer-jloss-macleod-linear-fraction-non-degen",
1500-
po::value<double>(&p_Options->m_MassTransferJlossMacLeodLinearFractionNonDegen)->default_value(p_Options->m_MassTransferJlossMacLeodLinearFractionNonDegen),
1501-
("Interpolation fraction for jloss prescription for non-degenerate accretors, requires --mass-transfer-angular-momentum-loss-prescription=MACLEOD_LINEAR. 0 is gamma_acc, 1 is gamma_L2 (default = " + std::to_string(p_Options->m_MassTransferJlossMacLeodLinearFractionNonDegen) + ")").c_str()
1499+
"mass-transfer-jloss-linear-fraction-non-degen",
1500+
po::value<double>(&p_Options->m_MassTransferJlossLinearFractionNonDegen)->default_value(p_Options->m_MassTransferJlossLinearFractionNonDegen),
1501+
("Interpolation fraction for jloss prescription for non-degenerate accretors, requires --mass-transfer-angular-momentum-loss-prescription=MACLEOD_LINEAR or KLENCKI_LINEAR. 0 is gamma_acc, 1 is gamma_L2 (default = " + std::to_string(p_Options->m_MassTransferJlossLinearFractionNonDegen) + ")").c_str()
15021502
)
15031503
(
15041504
"mass-transfer-thermal-limit-C",
@@ -5045,8 +5045,8 @@ COMPAS_VARIABLE Options::OptionValue(const T_ANY_PROPERTY p_Property) const {
50455045

50465046
case PROGRAM_OPTION::MT_FRACTION_ACCRETED : value = MassTransferFractionAccreted(); break;
50475047
case PROGRAM_OPTION::MT_JLOSS : value = MassTransferJloss(); break;
5048-
case PROGRAM_OPTION::MT_JLOSS_MACLEOD_LINEAR_FRACTION_DEGEN : value = MassTransferJlossMacLeodLinearFractionDegen(); break;
5049-
case PROGRAM_OPTION::MT_JLOSS_MACLEOD_LINEAR_FRACTION_NON_DEGEN : value = MassTransferJlossMacLeodLinearFractionNonDegen(); break;
5048+
case PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_DEGEN : value = MassTransferJlossLinearFractionDegen(); break;
5049+
case PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_NON_DEGEN : value = MassTransferJlossLinearFractionNonDegen(); break;
50505050
case PROGRAM_OPTION::MT_REJUVENATION_PRESCRIPTION : value = static_cast<int>(MassTransferRejuvenationPrescription()); break;
50515051
case PROGRAM_OPTION::MT_THERMALLY_LIMITED_VARIATION : value = static_cast<int>(MassTransferThermallyLimitedVariation()); break;
50525052

0 commit comments

Comments
 (0)