@@ -1446,34 +1446,37 @@ double fdAtmEscXi(BODY *body, int iBody) {
1446
1446
return dXi ;
1447
1447
}
1448
1448
1449
- double fdKTide (BODY * body , IO * io , int iBody ) {
1449
+ double fdKTide (BODY * body , IO * io , int iNumBodies , int iBody ) {
1450
1450
double dKTide ;
1451
1451
1452
1452
// For stars and circumbinary planets, assume no Ktide enhancement
1453
1453
if (body [iBody ].bBinary && body [iBody ].iBodyType == 0 ) {
1454
1454
dKTide = 1.0 ;
1455
1455
} else {
1456
- if (body [iBody ].dAtmEscXi > 1 ) {
1457
- dKTide = (1 - 3 / (2 * body [iBody ].dAtmEscXi ) +
1458
- 1 / (2 * pow (body [iBody ].dAtmEscXi , 3 )));
1459
- if (dKTide < body [iBody ].dMinKTide ) {
1460
- dKTide = body [iBody ].dMinKTide ;
1456
+ if (iNumBodies > 1 ) {
1457
+ if (body [iBody ].dAtmEscXi > 1 ) {
1458
+ dKTide = (1 - 3 / (2 * body [iBody ].dAtmEscXi ) +
1459
+ 1 / (2 * pow (body [iBody ].dAtmEscXi , 3 )));
1460
+ if (dKTide < body [iBody ].dMinKTide ) {
1461
+ dKTide = body [iBody ].dMinKTide ;
1462
+ }
1463
+ } else {
1464
+ if (!io -> baRocheMessage [iBody ] && io -> iVerbose >= VERBINPUT &&
1465
+ (!body [iBody ].bUseBondiLimited && !body [iBody ].bAtmEscAuto )) {
1466
+ fprintf (stderr ,
1467
+ "WARNING: Roche lobe radius is larger than %s's XUV radius. "
1468
+ "Evolution may not be accurate.\n" ,
1469
+ body [iBody ].cName );
1470
+ fprintf (stderr , "Consider setting bUseBondiLimited = 1 or bAtmEscAuto "
1471
+ "= 1 to limit envelope mass loss.\n" );
1472
+ io -> baRocheMessage [iBody ] = 1 ;
1473
+ }
1474
+ // Fix dKTide to prevent infs when in Roche Lobe overflow
1475
+ dKTide = 1.0 ;
1461
1476
}
1462
1477
} else {
1463
- if (!io -> baRocheMessage [iBody ] && io -> iVerbose >= VERBINPUT &&
1464
- (!body [iBody ].bUseBondiLimited && !body [iBody ].bAtmEscAuto )) {
1465
- fprintf (stderr ,
1466
- "WARNING: Roche lobe radius is larger than %s's XUV radius. "
1467
- "Evolution may not be accurate.\n" ,
1468
- body [iBody ].cName );
1469
- fprintf (stderr , "Consider setting bUseBondiLimited = 1 or bAtmEscAuto "
1470
- "= 1 to limit envelope mass loss.\n" );
1471
- io -> baRocheMessage [iBody ] = 1 ;
1472
- }
1473
- // Fix dKTide to prevent infs when in Roche Lobe overflow
1474
1478
dKTide = 1.0 ;
1475
1479
}
1476
- // body[iBody].dKTide = 1.0;
1477
1480
}
1478
1481
1479
1482
return dKTide ;
@@ -1728,7 +1731,7 @@ void fnPropsAuxAtmEsc(BODY *body, EVOLVE *evolve, IO *io, UPDATE *update,
1728
1731
body [iBody ].dBondiRadius = fdBondiRadius (body , iBody );
1729
1732
body [iBody ].dRocheRadius = fdRocheRadius (body , evolve -> iNumBodies , iBody );
1730
1733
body [iBody ].dAtmEscXi = fdAtmEscXi (body , iBody );
1731
- body [iBody ].dKTide = fdKTide (body , io , iBody );
1734
+ body [iBody ].dKTide = fdKTide (body , io , evolve -> iNumBodies , iBody );
1732
1735
1733
1736
// The XUV flux
1734
1737
if (body [iBody ].bCalcFXUV ) {
@@ -3424,11 +3427,15 @@ Modifier for H Ref Flux to include oxygen drag at a snapshot in time
3424
3427
void WriteHRefODragMod (BODY * body , CONTROL * control , OUTPUT * output ,
3425
3428
SYSTEM * system , UNITS * units , UPDATE * update , int iBody ,
3426
3429
double * dTmp , char cUnit []) {
3427
- double rat = (body [iBody ].dCrossoverMass / ATOMMASS - QOH ) /
3428
- (body [iBody ].dCrossoverMass / ATOMMASS - 1. );
3429
- double XO = fdAtomicOxygenMixingRatio (body [iBody ].dSurfaceWaterMass ,
3430
- body [iBody ].dOxygenMass );
3431
- * dTmp = pow (1. + (XO / (1. - XO )) * QOH * rat , -1 );
3430
+ if (body [iBody ].dCrossoverMass / ATOMMASS - 1. != 0 ) {
3431
+ double rat = (body [iBody ].dCrossoverMass / ATOMMASS - QOH ) /
3432
+ (body [iBody ].dCrossoverMass / ATOMMASS - 1. );
3433
+ double XO = fdAtomicOxygenMixingRatio (body [iBody ].dSurfaceWaterMass ,
3434
+ body [iBody ].dOxygenMass );
3435
+ * dTmp = pow (1. + (XO / (1. - XO )) * QOH * rat , -1 );
3436
+ } else {
3437
+ * dTmp = -1 ;
3438
+ }
3432
3439
strcpy (cUnit , "" );
3433
3440
}
3434
3441
0 commit comments