Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/ISSUE_TEMPLATE/feature-request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: Feature request
about: I want to request a new feature
title: ''
labels: feature-request
assignees: ''

---

**Describe the new feature you'd like**
A clear and concise description of what you want to happen. E.g. "I love how this package can evolve populations, but I think a great improvement would be for it to also do my taxes."

**Any suggestions for how to implement this**
Is there a particular way you would implement this? How could this integrate into the existing code?

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
9 changes: 0 additions & 9 deletions .github/ISSUE_TEMPLATE/general_issue.md

This file was deleted.

17 changes: 17 additions & 0 deletions .github/ISSUE_TEMPLATE/new-prescription.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: New physics prescription
about: I want to request/suggest a new physics prescription
title: ''
labels: new-prescription
assignees: ''

---

**Describe the new physics prescription you want to add**
TODO

**Link to the publication this is based on**
TODO

**Is this a new option for an existing flag? Or would require a new setting?**
TODO
10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/question.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: Question
about: I want to ask a question about COSMIC
title: ''
labels: question
assignees: ''

---

Use this issue to ask any questions about how functions work, how best to use the package for your project or anything else you need help with! Wherever possible please include code examples to make it easier to help you!
41 changes: 35 additions & 6 deletions .github/ISSUE_TEMPLATE/unexpected-stellar-evolutionary-behavior.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,48 @@
---
name: Unexpected Stellar Evolutionary Behavior
about: Way to systematically track weird evoltuionary behavior and things tried to
resolve that behavior for better history tracking.
title: "[Unexpected Evolutionary Behavior]"
about: I want to report some weird evolutionary behavior and things tried to resolve that behavior for better history tracking.
title: ""
labels: Unexpected Evolutionary Behavior
assignees: ''

---

# CSV file with Initial Conditions and BSE flags creating this behavior
# Checklist
- [ ] Attached CSV file with initial conditions and BSE flags for reproducing this behavior
- [ ] Included code that produces the BPP/BCM arrays
- [ ] Written description of weird behavior
- [ ] Explained expected outcome
- [ ] Listed flags you have tried to turn on and off that you think relate to the evolutionary behavior
- [ ] Attached a plot if applicable

# CSV file

Attach file with initC file here. You can save this like
```python
# create CSV file
initC.to_csv('weird_behavior.csv', index=False)

# now attach it to this issue!
```

# Code that produces the BPP and BCM arrays

# Description of Weird Behavior
```python
# your code here
```

# Description

Add a description of the weird behavior you've seen

# Flags you have tried to turn on and off that you think relate to the evolutionary behavior
# Expect outcome

How do you think this system _should_ evolve?

# Flags

Which flag have you tried to turn on and off that you think relate to the evolutionary behavior?

# Plot (if applicable)

Plot goes here
7 changes: 6 additions & 1 deletion changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,11 @@ See the discussed changes in our previous releases here: https://github.com/COSM
- Bug fix [[#725](https://github.com/COSMIC-PopSynth/COSMIC/issues/725)]: set ``tb=sep=0`` for cases where AIC caused a WD to explode and leave behind no remnant (``evolve_type==9``)
- Bug fix [[#724](https://github.com/COSMIC-PopSynth/COSMIC/issues/724)]: remove bug where ``kstar=15`` was assigned its previous epoch mass after merging during a CE and the merger product goes SN

## 3.7.2
## 3.7.2-3.7.3

Issues with PyPi, unreleased.

## 3.7.4
This release contains _several_ fixes to how CO core masses/remnant masses are handled. It also adds a new PISN prescription, windflag and LBV winds flag.

- Fixes:
Expand All @@ -88,6 +92,7 @@ This release contains _several_ fixes to how CO core masses/remnant masses are h
- Update ``mc = mt`` for **ALL** remnants instead of just for certain flags
- Only apply conversion from baryonic to gravitational mass once. Previous code **APPLIED IT TWICE!!** for core-collapse BHs! Create subroutine ``baryonic_to_gravitational_mass``, which is called throughout
- Ensure stellar type changes during hrdiag are logged to the bpp before SN occurs
- Add check after CE for whether a SN occurs right at the end

- Additions/changes:
- Linearly grow the core mass of HeMS stars from 0 to the value at the start of HeHG and check for core-collapse for all He stars (not just HeHG and HeGB)
Expand Down
2 changes: 1 addition & 1 deletion src/cosmic/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.7.2"
__version__ = "3.7.4"
12 changes: 8 additions & 4 deletions src/cosmic/evolve.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,8 @@ def evolve(self, initialbinarytable, pool=None, bpp_columns=None, bcm_columns=No
are logged in the initial conditions table so you can keep track of which systems had their
timesteps modified. Avoid overlapping mass ranges for different modifiers as this will result
in multiple modifiers being applied in the overlap region.
NOTE: these modifiers are only applied to columns which aren't present in the initialbinarytable
that is passed in (i.e. they only modify values provided by a BSEDict or params.ini file)

**kwargs:
There are three ways to tell evolve and thus the fortran
Expand Down Expand Up @@ -250,6 +252,8 @@ def evolve(self, initialbinarytable, pool=None, bpp_columns=None, bcm_columns=No
if bcm_columns is None:
bcm_columns = BCM_COLUMNS

columns_in_passed_initC = set(initialbinarytable.columns)

# There are three ways to tell evolve and thus the fortran
# what you want all the flags and other BSE specific
# parameters to be
Expand Down Expand Up @@ -383,7 +387,8 @@ def evolve(self, initialbinarytable, pool=None, bpp_columns=None, bcm_columns=No
initialbinarytable = initialbinarytable.assign(fprimc_array=initialbinarytable[FPRIMC_COLUMNS].values.tolist())

# update timesteps based on mass modifier
if dt_mass_modifiers:
mass_modifier_cols = set(['pts1', 'pts2', 'pts3']).difference(columns_in_passed_initC)
if dt_mass_modifiers and len(mass_modifier_cols) != 0:
# warn the user if their mass ranges overlap
for i in range(len(dt_mass_modifiers)):
for j in range(i + 1, len(dt_mass_modifiers)):
Expand All @@ -405,9 +410,8 @@ def evolve(self, initialbinarytable, pool=None, bpp_columns=None, bcm_columns=No
raise ValueError(f"Timestep modifiers must be positive. You passed {mod} for the "
f"mass range {m_low} to {m_high}.")
mask = (initialbinarytable['mass_1'] >= m_low) & (initialbinarytable['mass_1'] < m_high)
initialbinarytable.loc[mask, 'pts1'] *= mod
initialbinarytable.loc[mask, 'pts2'] *= mod
initialbinarytable.loc[mask, 'pts3'] *= mod
for col in mass_modifier_cols:
initialbinarytable.loc[mask, col] *= mod

# need to ensure that the order of parameters that we pass to BSE
# is correct
Expand Down
163 changes: 135 additions & 28 deletions src/cosmic/src/evolv2.f
Original file line number Diff line number Diff line change
Expand Up @@ -2495,36 +2495,143 @@ SUBROUTINE evolv2(kstar,mass,tb,ecc,z,tphysf,
formation(j1) = formation(j2)
endif

* Calculate stellar properties for both stars
do 117, k = 1,2
m0 = mass0(k)
mt = mass(k)
mc = massc(k)
kw = kstar(k)
CALL star(kw,m0,mt,tm,tn,tscls,lums,GB,zpars)
CALL hrdiag(m0,aj(k),mt,tm,tn,tscls,lums,GB,zpars,
& rm,lum,kw,mc,rc,me,re,k2,bhspin(k),k)

*
* Check for a supernova and correct the semi-major axis if so.
*
if((kw.ne.kstar(k).and.kstar(k).le.12.and.
& (kw.eq.13.or.kw.eq.14
& .or.(kw.eq.15.and.pisn_track(k).eq.7))))then
dms(k) = mass(k) - mt
if(formation(k).ne.11) formation(k) = 1
if(kw.eq.13.and.ecsn.gt.0.d0)then
if(kstar(k).le.6)then
if(mass0(k).le.zpars(5))then
if(sigma.gt.0.d0.and.sigmadiv.gt.0.d0)then
sigma = -sigmahold/sigmadiv
elseif(sigma.gt.0.d0.and.sigmadiv.lt.0.d0)then
sigma = sigmadiv
endif
formation(k) = 2
endif
elseif(kstar(k).ge.7.and.kstar(k).le.9)then
if(mass(k).gt.ecsn_mlow.and.mass(k).le.ecsn)then
if(sigma.gt.0.d0.and.sigmadiv.gt.0.d0)then
sigma = -sigmahold/sigmadiv
elseif(sigma.gt.0.d0.and.sigmadiv.lt.0.d0)then
sigma = sigmadiv
endif
formation(k) = 2
endif
elseif(formation(k).eq.11)then
if(sigma.gt.0.d0.and.sigmadiv.gt.0.d0)then
sigma = -sigmahold/sigmadiv
elseif(sigma.gt.0.d0.and.sigmadiv.lt.0.d0)then
sigma = sigmadiv
endif
formation(k) = 5
elseif(kstar(k).ge.10.or.kstar(k).eq.12)then
if(sigma.gt.0.d0.and.sigmadiv.gt.0.d0)then
sigma = -sigmahold/sigmadiv
elseif(sigma.gt.0.d0.and.sigmadiv.lt.0.d0)then
sigma = sigmadiv
endif
formation(k) = 4
endif
endif

evolve_type = 14.d0 + FLOAT(k)
teff1 = 1000.d0*((1130.d0*lumin(1)/
& (rad(1)**2.d0))**(1.d0/4.d0))
teff2 = 1000.d0*((1130.d0*lumin(2)/
& (rad(2)**2.d0))**(1.d0/4.d0))
if(B_0(1).eq.0.d0)then !PK.
b01_bcm = 0.d0
elseif(B_0(1).gt.0.d0.and.B(1).eq.0.d0)then
b01_bcm = B_0(1)
else
b01_bcm = B(1)
endif
if(B_0(2).eq.0.d0)then
b02_bcm = 0.d0
elseif(B_0(2).gt.0.d0.and.B(2).eq.0.d0)then
b02_bcm = B_0(2)
else
b02_bcm = B(2)
endif

* Check if PISN occurred, and if so overwrite formation
if(pisn_track(1).ne.0) formation(1) = pisn_track(1)
if(pisn_track(2).ne.0) formation(2) = pisn_track(2)

CALL writetab(bpp_ind,tphys,evolve_type,
& mass(1),mass(2),kstar(1),kstar(2),
& sep,tb,ecc,rrl1,rrl2,
& aj(1),aj(2),tms(1),tms(2),
& mc_he(1),mc_he(2),mc_co(1),mc_co(2),
& rad(1),rad(2),
& mass0(1),mass0(2),lumin(1),lumin(2),
& teff1,teff2,radc(1),radc(2),
& menv(1),menv(2),renv(1),renv(2),
& ospin(1),ospin(2),b01_bcm,b02_bcm,
& bacc(1),bacc(2),tacc(1),tacc(2),epoch(1),
& epoch(2),bhspin(1),bhspin(2),
& deltam1_bcm,deltam2_bcm,formation(1),
& formation(2),binstate,mergertype,z,'bpp')
CALL kick(kw,mass(k),mc_co(k),mt,mass(3-k),ecc,sep,jorb,vk,
& k,rad(3-k),fallback,sigmahold,kick_info,
& disrupt,bkick)
sigma = sigmahold

! check if kick caused a merger
if(mass(3-k).lt.0.d0)then
if(kstar(3-k).lt.0.d0) mt = mt-mass(3-k)
if(kw.eq.13.and.mt.gt.mxns) kw = 14
CALL CONCATKSTARS(kstar(j1), kstar(j2), mergertype)
kstar(k) = kw
mass(k) = mt
epoch(k) = tphys - age
kstar(3-k) = 15
mass(3-k) = 0.d0
coel = .true.
binstate = 1
endif

if(ecc.gt.1.d0)then
tb = -1d0
sep = -1d0
oorb = -1d0
else
tb = (sep/aursun)*SQRT(sep/(aursun*(mt+mass(3-k))))
oorb = twopi/tb
endif
endif

mass0(k) = m0
mass(k) = mt
massc(k) = mc
kstar(k) = kw
rad(k) = rm
lumin(k) = lum
radc(k) = rc
menv(k) = me
renv(k) = re


117 continue

*
evolve_type = 8.0


mc = massc(1)
rc = radc(1)
CALL star(kstar(1),mass0(1),mass(1),tm,tn,tscls,lums,GB,zpars)
CALL hrdiag(mass0(1),aj(1),mass(1),tm,tn,tscls,lums,GB,zpars,
& rm,lum,kstar(1),mc,rc,me,re,k2,bhspin(1),1)

rad(1) = rm
lumin(1) = lum
massc(1) = mc
radc(1) = rc
menv(1) = me
renv(1) = re


mc = massc(2)
rc = radc(2)
CALL star(kstar(2),mass0(2),mass(2),tm,tn,tscls,lums,GB,zpars)
CALL hrdiag(mass0(2),aj(2),mass(2),tm,tn,tscls,lums,GB,zpars,
& rm,lum,kstar(2),mc,rc,me,re,k2,bhspin(2),2)

rad(2) = rm
lumin(2) = lum
massc(2) = mc
radc(2) = rc
menv(2) = me
renv(2) = re


mass1_bpp = mass(1)
mass2_bpp = mass(2)
Expand Down