diff --git a/.github/workflows/compas-compile-ci.yml b/.github/workflows/compas-compile-ci.yml index 8dcab67c5..b20f8a166 100644 --- a/.github/workflows/compas-compile-ci.yml +++ b/.github/workflows/compas-compile-ci.yml @@ -70,18 +70,18 @@ jobs: echo "Running pytest suite..." cd ${GITHUB_WORKSPACE} export COMPAS_ROOT_DIR=${GITHUB_WORKSPACE} - + if command -v jupyter-kernelspec &> /dev/null; then echo "Available Jupyter kernels:" jupyter-kernelspec list fi - + pytest --cov=compas_python_utils/ py_tests/ -m 'not webtest' pytest --cov=compas_python_utils/ --cov-append py_tests/ -m webtest - + echo "Test artifacts:" ls py_tests/test_artifacts/ 2>/dev/null || echo "No test artifacts found" - + coverage html coverage-badge -o coverage_badge.svg -f echo "All tests completed successfully!" diff --git a/.github/workflows/dockerhub-ci.yml b/.github/workflows/dockerhub-ci.yml index cf5e637a6..dce2961b3 100755 --- a/.github/workflows/dockerhub-ci.yml +++ b/.github/workflows/dockerhub-ci.yml @@ -60,4 +60,4 @@ jobs: ghcr.io/${{ env.REPO_LC }}:${{ env.COMPAS_VERSION }} ghcr.io/${{ env.REPO_LC }}:latest cache-from: type=gha - cache-to: type=gha,mode=max \ No newline at end of file + cache-to: type=gha,mode=max diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f0cd96e62..059fcfb6b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,13 @@ default_language_version: python: python3 repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace + exclude: '\.(md|bib)$' + - repo: https://github.com/codespell-project/codespell rev: v2.2.4 hooks: diff --git a/Dockerfile b/Dockerfile index 5fe5e92fc..a12dd7899 100755 --- a/Dockerfile +++ b/Dockerfile @@ -30,4 +30,4 @@ ENV COMPAS_ROOT_DIR /app/COMPAS RUN cd src && make DOCKER_BUILD=1 -j $(nproc) # Run COMPAS -# CMD [ "python", "src/pythonSubmitDefault.py" ] \ No newline at end of file +# CMD [ "python", "src/pythonSubmitDefault.py" ] diff --git a/compas_matlab_utils/BSEDetailedOutput.m b/compas_matlab_utils/BSEDetailedOutput.m index ae57fb826..49dc3c941 100644 --- a/compas_matlab_utils/BSEDetailedOutput.m +++ b/compas_matlab_utils/BSEDetailedOutput.m @@ -1,15 +1,15 @@ function BSEDetailedOutput(file) % Carries out some basic analysis and makes plots for a single BSE run % -% USAGE: +% USAGE: % BSEDetailedOutput(file) % % INPUTS: % file: name of detailed output file in COMPAS h5 format % -% examples: +% examples: % BSEDetailedOutput('~/Work/COMPAS/src/COMPAS_Output/Detailed_Output/BSE_Detailed_Output_0.h5') -% +% time=h5read(file,'/Time'); MThistory=h5read(file,'/MT_History'); @@ -46,8 +46,8 @@ function BSEDetailedOutput(file) ' ', num2str(mass2(1)), ' ', num2str(type2(1)), ' ', num2str(a(1)), ' ', num2str(e(1))]); for(i=2:length(time)), if(rec(i)==4), %only print records at end of timestep - prev=find(rec(1:i-1)==4, 1, 'last'); %previous timestep index - if(MThistory(i)~=0),% & MThistory(i)~=MThistory(i-1)), + prev=find(rec(1:i-1)==4, 1, 'last'); %previous timestep index + if(MThistory(i)~=0),% & MThistory(i)~=MThistory(i-1)), switch (MThistory(i)), case 1, MTstring='Stable MT from 1 TO 2'; case 2, MTstring='Stable MT from 2 TO 1';... case 3, MTstring='CE from 1 to 2'; case 4, MTstring='CE from 2 to 1'; case 5, MTstring='CE Double Core'; ... case 6, MTstring='CE merger'; end; @@ -67,7 +67,7 @@ function BSEDetailedOutput(file) end; end; if((type1(i)==13 || type1(i)==14) && (type2(i)==13 || type2(i)==14) ), - Msunkg=1.98892e30; c=299792458; G=6.67428e-11; Rsun = 695500000; + Msunkg=1.98892e30; c=299792458; G=6.67428e-11; Rsun = 695500000; beta=64/5*G^3*mass1(i)*mass2(i)*(mass1(i)+mass2(i))*Msunkg^3/c^5; T0=(a(i)*Rsun)^4/4/beta; Tdelay=T0*(1-e(i)^2).^(7/2).*(1+0.27*e(i)^10 + 0.33*e(i)^20 + 0.2*e(i)^1000)/3.15e7/1e6; disp([num2str(time(i)+Tdelay), ' GW merger in ', num2str(Tdelay,'%.0f'), ' Myr ', num2str(mass1(i)), ' ', num2str(type1(i)),... diff --git a/compas_matlab_utils/ComparisonPlots.m b/compas_matlab_utils/ComparisonPlots.m index ebe6176bd..8a35458eb 100644 --- a/compas_matlab_utils/ComparisonPlots.m +++ b/compas_matlab_utils/ComparisonPlots.m @@ -1,7 +1,7 @@ function ComparisonPlots(filename1, name1, filename2, name2) % Carries out some basic analysis and makes plots comparing two COMPAS runs % -% USAGE: +% USAGE: % ComparisonPlots(filename1, name1, filename2, name2) % % INPUTS: @@ -9,16 +9,16 @@ function ComparisonPlots(filename1, name1, filename2, name2) % name1: name of data set 1 for plot legends % filename2: name of population synthesis input file 2 in COMPAS h5 format % name2: name of data set 2 for plot legends -% -% the last two arguments are optional; as single output can be plotted +% +% the last two arguments are optional; as single output can be plotted % by running ComparisonPlots(filename1, name1) % -% example: +% example: % ComparisonPlots('~/Work/COMPASresults/runs/Zsolaralpha1-031803.h5', 'Default', ... % '~/Work/COMPASresults/runs/Zsolar2stage-031803.h5', '2 stage') % % Warning: --switch-log must be used for all runs to be analysed -% It is recommended, but not required, to use the same random seed for the +% It is recommended, but not required, to use the same random seed for the % runs being compared in order to compare individual binary evolution @@ -31,7 +31,7 @@ function ComparisonPlots(filename1, name1, filename2, name2) %Plot DCO mass distribution, BNS P-e distribution, chirp mass vs period %at DCO formation, BH mass vs secondary core mass for 2->1 CEs leading %to merging BBH formation - figure(1); clf(1); figure(2); clf(2); figure(3); clf(3); figure(4); clf(4); figure(5); clf(5); + figure(1); clf(1); figure(2); clf(2); figure(3); clf(3); figure(4); clf(4); figure(5); clf(5); [BNS,NSBH,BBH,BNSCE,NSBHCE,BBHCE,CEBBH1]=DCOplot(filename1, name1, 1, 'r', 40); fprintf('\nDCOs:\t\t#Merging DNS\t#Merging NSBH\t#Merging BBH\t%% BNS via CE\t%% NSBH via CE\t%% BBH via CE\t%% BBH via CE with BH primary\n'); fprintf('%s:\t%d\t\t%d\t\t%d\t\t%.0f\t\t%.0f\t\t%.0f\t\t%.0f\n', ... @@ -42,16 +42,16 @@ function ComparisonPlots(filename1, name1, filename2, name2) name2, BNS, NSBH, BBH, BNSCE/BNS*100, NSBHCE/NSBH*100, BBHCE/BBH*100, CEBBH1/BBH*100); end; figure(1), hold off; figure(2), hold off; figure(3), hold off; figure(4), hold off; - figure(1), set(gca,'FontSize',20), xlabel('$M_1$ (M$_\odot$)', 'Interpreter', 'latex'), + figure(1), set(gca,'FontSize',20), xlabel('$M_1$ (M$_\odot$)', 'Interpreter', 'latex'), ylabel('$M_2$ (M$_\odot$)', 'Interpreter', 'latex'), title('Merging DCO masses'); legend; figure(2), set(gca,'FontSize',20), xlabel('$\log_{10}$ (Orbital period/hr)', 'Interpreter', 'latex'); ylabel('Eccentricity'), title('DNS at formation'); legend; - figure(3), set(gca,'FontSize',20), xlabel('Chirp Mass (M$_\odot$)', 'Interpreter', 'latex'), + figure(3), set(gca,'FontSize',20), xlabel('Chirp Mass (M$_\odot$)', 'Interpreter', 'latex'), ylabel('$\log_{10} (P_\mathrm{orb}/\mathrm{d})$', 'Interpreter', 'latex'), title('Merging BBH at formation'); legend; - figure(4), set(gca,'FontSize',20); xlabel('$M_1$ (M$_\odot$)', 'Interpreter', 'latex'), + figure(4), set(gca,'FontSize',20); xlabel('$M_1$ (M$_\odot$)', 'Interpreter', 'latex'), ylabel('$M_{\textrm{core},2}$ (M$_\odot$)', 'Interpreter', 'latex'), title('CE from 2->1 en route to merging BBH'), legend; - figure(5), set(gca,'FontSize',20); xlabel('$q \equiv M_2/M_1$', 'Interpreter', 'latex'), - ylabel('CDF'), title('CDF of merging BBH'), legend; + figure(5), set(gca,'FontSize',20); xlabel('$q \equiv M_2/M_1$', 'Interpreter', 'latex'), + ylabel('CDF'), title('CDF of merging BBH'), legend; fignumber=6; %Plot BH HMXBs @@ -85,7 +85,7 @@ function ComparisonPlots(filename1, name1, filename2, name2) fprintf('%s:\t%d\t\t%d\t\t%f\n', name2, LMXBcount, NSLMXBcount, meanduration); end; figure(fignumber), hold off; set(gca,'FontSize', 20); legend; title('LMXB on first MT onto CO'); - xlabel('Compact object mass (M$_\odot$)', 'Interpreter', 'latex'), ylabel('Companion mass (M$_\odot$)', 'Interpreter', 'latex'); + xlabel('Compact object mass (M$_\odot$)', 'Interpreter', 'latex'), ylabel('Companion mass (M$_\odot$)', 'Interpreter', 'latex'); fignumber=fignumber+1; %Plot DWDs (just as a sanity check) @@ -95,7 +95,7 @@ function ComparisonPlots(filename1, name1, filename2, name2) DWDplot(filename2, name2, fignumber, 'b', 'g', 5); end; figure(fignumber); hold off; axis([-3 5 -3 5]); set(gca,'FontSize',20); title('Double White Dwarfs'); legend; - xlabel('$log_{10}(M*a) [M_\odot * R_\odot]$ @ ZAMS', 'Interpreter', 'latex'); + xlabel('$log_{10}(M*a) [M_\odot * R_\odot]$ @ ZAMS', 'Interpreter', 'latex'); ylabel('$log_{10}(M*a) [M_\odot * R_\odot]$ @ end', 'Interpreter', 'latex'); @@ -154,7 +154,7 @@ function ComparisonPlots(filename1, name1, filename2, name2) fprintf('Of these, stripped by winds, no RLOF:\t%d\t\t%d\n', strippedwindscount1, strippedwindscount2); fprintf('Of these, # stripped by RLOF:\t\t%d\t\t%d\n', strippedRLOFcount1, strippedRLOFcount2); fprintf('Of these, previous CE:\t\t\t%d\t\t%d\n', strippedCEcount1, strippedCEcount2); - fprintf('Or double-core CE simultaneous with SN:\t%d\t\t%d\n', CESNcount1, CESNcount2); + fprintf('Or double-core CE simultaneous with SN:\t%d\t\t%d\n', CESNcount1, CESNcount2); end; end %end of ComparisonPlots @@ -200,18 +200,18 @@ function ComparisonPlots(filename1, name1, filename2, name2) %Merging DCO mass distribution figure(fignumber), hold on; scatter(mass1(mergingDCO & isCE & OKCE), mass2(mergingDCO & isCE & OKCE), point, ... - 'filled', colour, 'DisplayName', ['CE, ', name]); + 'filled', colour, 'DisplayName', ['CE, ', name]); scatter(mass1(mergingDCO & ~isCE), mass2(mergingDCO & ~isCE), point, colour, 'DisplayName', ['Stable, ', name]); %P-e of Galactic DNS at formation P=2*pi*(a*AU).^(3/2)./sqrt(G*Msunkg*(mass1+mass2))/3600; %orbital period at DCO, in hours - figure(fignumber+1), hold on; + figure(fignumber+1), hold on; scatter(log10(P(BNS & isCE & OKCE)), e(BNS & isCE & OKCE), point, 'filled', colour, ... 'DisplayName', ['CE, ', name]); hold on; scatter(log10(P(BNS & ~isCE)), e(BNS & ~isCE), point, colour, 'DisplayName', ['Stable, ', name]); %Chirp mass vs period at BBH formation figure(fignumber+2), hold on; scatter(chirpmass(mergingDCO & isCE & OKCE), log10(P(mergingDCO & isCE & OKCE)/24), point, ... - 'filled', colour, 'DisplayName', ['CE, ', name]); + 'filled', colour, 'DisplayName', ['CE, ', name]); scatter(chirpmass(mergingDCO & ~isCE), log10(P(mergingDCO & ~isCE)/24), point, colour, 'DisplayName', ['Stable, ', name]); %Masses at the time of CE figure(fignumber+3), hold on; @@ -241,11 +241,11 @@ function HMXBplot(file, name, fignumberHMXB, colour, point) %if this is zero (no such systems), can ignore this possibility, focus on the other one if(sum(relevantbinaryFrom1)>0) fprintf('Number of HMXBs with second-born BH is non-zero (%d), please check\n', sum(relevantbinaryFrom1)); end; relevantbinaryFrom2=(isinRLOF2RLOF & ~wasinRLOF1RLOF & ~wasinRLOF2RLOF & star2RLOF==1 & M2RLOF>15 & star1RLOF==14); - MBH=[M1RLOF(relevantbinaryFrom2); M2RLOF(relevantbinaryFrom1)]; + MBH=[M1RLOF(relevantbinaryFrom2); M2RLOF(relevantbinaryFrom1)]; MO=[M2RLOF(relevantbinaryFrom2); M1RLOF(relevantbinaryFrom1)]; - %this misses binaries in which the companion overflows its RL shortly after - %evolving onto the HG; - %Now check the binaries at the time of the switch onto the HG, are they + %this misses binaries in which the companion overflows its RL shortly after + %evolving onto the HG; + %Now check the binaries at the time of the switch onto the HG, are they %at least 80% RL filling at that point, if so, include them M1Switch=h5read(file,'/BSE_Switch_Log/Mass(1)'); M2Switch=h5read(file,'/BSE_Switch_Log/Mass(2)'); @@ -283,9 +283,9 @@ function BeXRBplot(file, name, fignumberBeXRB, colour, point) seedCE=h5read(file,'/BSE_Common_Envelopes/SEED'); timeCE=h5read(file,'/BSE_Common_Envelopes/Time'); [experiencedRLOF,indexRLOF]=ismember(seedSN,seedRLOF); - precededbyRLOF=false(size(indexRLOF)); + precededbyRLOF=false(size(indexRLOF)); for(i=1:length(indexRLOF)), if(experiencedRLOF(i)), precededbyRLOF(i)=(timeRLOF(indexRLOF(i))3 & ~unboundSN & experiencedRLOF & precededbyRLOF; %haven't checked direction of RLOF figure(fignumberBeXRB), scatter(MCPSN(relevantbinary & isCE), timeSN(relevantbinary & isCE), ... @@ -326,11 +326,11 @@ function BeXRBplot(file, name, fignumberBeXRB, colour, point) duration=timeRLOF(indexlistlast)-timeRLOF(indexlist); meanduration=mean(duration); [isCE,CEIndex]=ismember(uniqueseeds,seedCE); %doesn't check if CE happened before or after - precededbyCE=false(size(indexlist)); + precededbyCE=false(size(indexlist)); for(i=1:length(indexlist)), if(isCE(i)), precededbyCE(i)=(timeCE(CEIndex(i)) < timeRLOF(indexlist(i))); end; end; figure(fignumberLMXB), hold on; scatter(MCO(precededbyCE), Mcomp(precededbyCE), point, 'filled', colour, 'DisplayName', ['CE, ', name]); - scatter(MCO(~precededbyCE), Mcomp(~precededbyCE), point, colour, 'DisplayName', ['Stable, ', name]); + scatter(MCO(~precededbyCE), Mcomp(~precededbyCE), point, colour, 'DisplayName', ['Stable, ', name]); end %end of LMXBplot @@ -386,18 +386,18 @@ function DWDplot(file, name, fignumberDWD, colourNMT, colourMT, point) seedCE=h5read(file,'/BSE_Common_Envelopes/SEED'); timeCE=h5read(file,'/BSE_Common_Envelopes/Time'); seedAll=h5read(file, '/BSE_System_Parameters/SEED'); - [isCE,indexCE]=ismember(seedSN,seedCE); + [isCE,indexCE]=ismember(seedSN,seedCE); [isCE,lastindexCE]=ismember(seedSN,seedCE,'legacy'); %last index of CE seed matching given SN seed (for binaries with 2+ CE events) - simultaneouswithCE = false(size(indexCE)); - simultaneouswithCE(isCE) = (timeCE(indexCE(isCE)) == timeSN(isCE)) | (timeCE(lastindexCE(isCE)) == timeSN(isCE)); + simultaneouswithCE = false(size(indexCE)); + simultaneouswithCE(isCE) = (timeCE(indexCE(isCE)) == timeSN(isCE)) | (timeCE(lastindexCE(isCE)) == timeSN(isCE)); %Note: could (very rarely) miss a coincidence if >2 CE events and only intermediate CE matches SN in time - precedingCE = false(size(indexCE)); - precedingCE(isCE) = (timeCE(indexCE(isCE)) < timeSN(isCE)); + precedingCE = false(size(indexCE)); + precedingCE(isCE) = (timeCE(indexCE(isCE)) < timeSN(isCE)); [experiencedRLOF,indexRLOF]=ismember(seedSN,seedRLOF); [experiencedRLOF,lastindexRLOF]=ismember(seedSN,seedRLOF, 'legacy'); - simultaneouswithRLOF = false(size(indexRLOF)); + simultaneouswithRLOF = false(size(indexRLOF)); simultaneouswithRLOF(experiencedRLOF) = (timeRLOF(indexRLOF(experiencedRLOF)) == timeSN(experiencedRLOF) ... - | timeRLOF(lastindexRLOF(experiencedRLOF)) == timeSN(experiencedRLOF)); + | timeRLOF(lastindexRLOF(experiencedRLOF)) == timeSN(experiencedRLOF)); %Note: could miss a coincidence if >2 RLOF events and only intermediate RLOF matches SN in time binariescount=length(seedAll); SNcount=length(seedSN); @@ -422,6 +422,3 @@ function DWDplot(file, name, fignumberDWD, colourNMT, colourMT, point) strippedCEcount=sum(IsStrippedSN & HadRLOFSN & precedingCE & SNtypeSN~=2 & SNtypeSN~=32); CESNcount=sum(IsStrippedSN & HadRLOFSN & simultaneouswithCE & SNtypeSN~=2 & SNtypeSN~=32); end %end of SNstats - - - diff --git a/compas_matlab_utils/CosmicHistoryIntegrator.m b/compas_matlab_utils/CosmicHistoryIntegrator.m index 6d261a440..72d7e6e83 100644 --- a/compas_matlab_utils/CosmicHistoryIntegrator.m +++ b/compas_matlab_utils/CosmicHistoryIntegrator.m @@ -5,10 +5,10 @@ RdetectionsByRedshiftByBinary, RdetectionsByRedshiftByMtByEta, RdetectionsPerfectDetectorByRedshiftByBinary]=... CosmicHistoryIntegrator(filename, noisefile, zlistformation, zmaxdetection, Msimulated, makeplots, data) % Integrator for the binary black hole merger rate over cosmic history -% COMPAS (Compact Object Mergers: Population Astrophysics and Statistics) +% COMPAS (Compact Object Mergers: Population Astrophysics and Statistics) % software package % -% USAGE: +% USAGE: % [SFR, Zlist, Mtlist, etalist, FormationRateByRedshiftByBinary, ... % FormationRateByRedshiftByZ, FormationRateByRedshiftByMtByEta, MergerRateByRedshiftByBinary,... % MergerRateByRedshiftByZ, MergerRateByRedshiftByMtByEta, zlistdetection, pdetectionByRedshiftByMtByEta, ... @@ -17,7 +17,7 @@ % CosmicHistoryIntegrator(filename, noisefile, zlistformation, zmaxdetection, Msimulated, Msimulated [,makeplots, data]) % % INPUTS: -% filename: name of population synthesis input file +% filename: name of population synthesis input file % should be in COMPAS output h5 format % noisefile: file containing noise PSD (first column frequency, second PSD) % zlistformation: vector of redshifts at which the formation rate is @@ -26,12 +26,12 @@ % Msimulated: total star forming mass represented by the simulation (for % normalisation) % makeplots: if set to 1, generates a set of useful plots (default = 0) -% data: if provided, this contains a list of simulated binaries as a matrix, -% with each row containing a binary and the columns containing M1, M2, Z and +% data: if provided, this contains a list of simulated binaries as a matrix, +% with each row containing a binary and the columns containing M1, M2, Z and % tdelay in that order; the filename is then ignored % -% OUTPUTS: -% SFR is a vector of size length(zlistformation) containing the star formation rate +% OUTPUTS: +% SFR is a vector of size length(zlistformation) containing the star formation rate % (solar masses per Mpc^3 of comoving volume per year of source time) % Zlist is a vector of metallicities, taken from the COMPAS run input file % Mtlist is a list of total mass bins @@ -39,46 +39,46 @@ % FormationRateByRedshiftByBinary is a matrix of size length(zformationlist) X length(M1) % which contains a formation rate of merging double compact objects just % like this binary, in units of formed DCOs per Mpc^3 of comoving volume per year of source time -% FormationRateByRedshiftByZ is a matrix of size length(zformationlist) X length(Zlist) -% which contains the formation rate of merging double compact objects in the given redshift +% FormationRateByRedshiftByZ is a matrix of size length(zformationlist) X length(Zlist) +% which contains the formation rate of merging double compact objects in the given redshift % and metallicity bin, in units of formed DCOs per Mpc^3 of comoving volume per % year of source time -% FormationRateByRedshiftByMtByEta is a matrix of size length(zformationlist) -% X length(Mtlist) X length(etalist) which contains a formation rate of merging double compact objects -% in the given redshift, total mass and eta bin, in units of formed DCOs per Mpc^3 +% FormationRateByRedshiftByMtByEta is a matrix of size length(zformationlist) +% X length(Mtlist) X length(etalist) which contains a formation rate of merging double compact objects +% in the given redshift, total mass and eta bin, in units of formed DCOs per Mpc^3 % of comoving volume per year of source time % MergerRateByRedshiftByBinary is a matrix of size length(zformationlist) X length(M1) % which contains the merger rate of merging double compact objects just % like this binary, in units of mergers per Mpc^3 of comoving volume per year of source time -% MergerRateByRedshiftByZ is a matrix of size length(zformationlist) X length(Zlist) -% which contains a merger rate of double compact objects in the given redshift +% MergerRateByRedshiftByZ is a matrix of size length(zformationlist) X length(Zlist) +% which contains a merger rate of double compact objects in the given redshift % and metallicity bin, in units of mergers per Mpc^3 of comoving volume per % year of source time -% MergerRateByRedshiftByMtByEta is a matrix of size length(zformationlist) -% X length(Mtlist) X length(etalist) which contains a merger rate of double compact objects -% in the given redshift, total mass and eta bin, in units of mergers per Mpc^3 +% MergerRateByRedshiftByMtByEta is a matrix of size length(zformationlist) +% X length(Mtlist) X length(etalist) which contains a merger rate of double compact objects +% in the given redshift, total mass and eta bin, in units of mergers per Mpc^3 % of comoving volume per year of source time % zlistdetection is a vector of redshifts at which detection rates are % computed (a subset of zlistformation going up to zmaxdetection) % pdetectionByRedshiftByMtByEta is a matrix of size length(zlistdetection) X length(Mtlist) X length(etalist) % containing the probability that a binary of a given mass and mass ratio % is detectable for a given merger redshift -% DetectableMergerRateByRedshiftByBinary is a matrix of size -% length(zlistdetection) X length(M1), containing the intrinsic rate of mergers of +% DetectableMergerRateByRedshiftByBinary is a matrix of size +% length(zlistdetection) X length(M1), containing the intrinsic rate of mergers of % binaries just like this one per Mpc^3 of comoving % volume per year of source time -% DetectableMergerRateByRedshiftByMtByEta is a matrix of size +% DetectableMergerRateByRedshiftByMtByEta is a matrix of size % length(zlistdetection) X length(Mtlist) X length(etalist) containing the detection rate per year of observer time % from a given redshift bin and total mass and symmetric mass ratio pixel -% RdetectionsByRedshiftByBinary is a matrix of the same size as -% DetectableMergerRateByRedshiftByBinary containing the detection rate +% RdetectionsByRedshiftByBinary is a matrix of the same size as +% DetectableMergerRateByRedshiftByBinary containing the detection rate % for binaries just like this one per year of observer time % from a given redshift bin -% RdetectionsByRedshiftByMtByEta is a matrix of the same size as -% DetectableMergerRateByRedshiftByMtByEta containing the detection rate per +% RdetectionsByRedshiftByMtByEta is a matrix of the same size as +% DetectableMergerRateByRedshiftByMtByEta containing the detection rate per % year of observer time from a given redshift bin and total mass and symmetric mass ratio pixel % RdetectionsPerfectDetectorByRedshiftByBinary is a matrix of the same size -% as RdetectionsByRedshiftByBinary containing the detection rate per year +% as RdetectionsByRedshiftByBinary containing the detection rate per year % of observer time from a given redshift bin for binaries just like this one % assuming an imaginary perfectly sensitive detector @@ -93,7 +93,7 @@ % CosmicHistoryIntegrator('~/Work/COMPASresults/runs/Zdistalpha1-031803.h5', '~/Work/Rai/psd-O4-2023_06_v1-L.txt', zlist, 1.5, 90e6, 1); % figure(10), semilogy(zlist, sum(MergerRateByRedshiftByZ,2)*1e9,'LineWidth',3), set(gca,'FontSize',20), % xlabel('Redshift z'), ylabel('Merger rate of DCO per Gpc^3 per yr') -% +% %define constants @@ -111,26 +111,26 @@ if (nargin<5), makeplots=0; end; if (nargin<7), %load COMPAS data - [M1,M2,Z,Tdelay]=DataRead(filename); + [M1,M2,Z,Tdelay]=DataRead(filename); else - if(size(data,2)~=4), + if(size(data,2)~=4), error('The data must have 4 columns: M1, M2, Z, Tdelay'); end; M1=data(:,1); M2=data(:,2); Z=data(:,3); Tdelay=data(:,4); %maxNS=0.0; %pretend all are BBH if reading from file end; - + %cosmology calculator -[tL,Dl,dVc]=Cosmology(zlistformation); +[tL,Dl,dVc]=Cosmology(zlistformation); %metallicity-specific SFR -[SFR,Zlist,Zweight]=Metallicity(zlistformation,min(Z),max(Z)); +[SFR,Zlist,Zweight]=Metallicity(zlistformation,min(Z),max(Z)); -%Consider the contribution of every simulated binary to the merger rate -%in every redshift bin by considering when it would have to be formed to -%merge at that redshift and normalizing by the relevant +%Consider the contribution of every simulated binary to the merger rate +%in every redshift bin by considering when it would have to be formed to +%merge at that redshift and normalizing by the relevant %metallicity-specific star formation rate dz=zlistformation(2)-zlistformation(1); etalist=0.01:0.01:0.25; @@ -170,7 +170,7 @@ end; zlistdetection=zlistformation(1:find(zlistformation<=zmaxdetection,1,"last")); - + %detection probability pdetectionByRedshiftByMtByEta=... DetectionProbability(zlistdetection,Mtlist,etalist,noisefile,Dl); @@ -186,7 +186,7 @@ MergerRateByRedshiftByBinary(1:length(zlistdetection),:).*pdetectionByRedshiftByBinary; %Detections per unit observer time in each Mt and eta bin RdetectionsByRedshiftByMtByEta=... - DetectableMergerRateByRedshiftByMtByEta.*transpose(dVc(1:length(zlistdetection)))./(1+zlistdetection'); + DetectableMergerRateByRedshiftByMtByEta.*transpose(dVc(1:length(zlistdetection)))./(1+zlistdetection'); %Detections per unit observer time by binary RdetectionsByRedshiftByBinary=... DetectableMergerRateByRedshiftByBinary.*transpose(dVc(1:length(zlistdetection)))./(1+zlistdetection'); @@ -210,9 +210,9 @@ %Select only double compact object mergers of interest, and return the %component masses, metallicities, and star formation to merger delay times function [M1,M2,Z,Tdelay]=DataRead(file) - if(exist(file, 'file')~=2), + if(exist(file, 'file')~=2), error('Input file does not exist'); - end; + end; type1=h5read(file,'/BSE_Double_Compact_Objects/Stellar_Type(1)'); type2=h5read(file,'/BSE_Double_Compact_Objects/Stellar_Type(2)'); mass1=h5read(file,'/BSE_Double_Compact_Objects/Mass(1)'); @@ -255,7 +255,7 @@ global yr %zmax=10; dz=0.001; zvec=0:dz:zmax; Nz=length(zvec); dz=zvec(2)-zvec(1); - + %Planck cosmology OmegaM=0.236+0.046; %2012arXiv1212.5226H OmegaL=0.718; @@ -275,9 +275,9 @@ %Compute the weight of each star-forming metallicity as a function of redshift function [SFR,Zvec,Zweight]=Metallicity(zvec,minZ,maxZ) - %M_/odot per Mpc^3 per year -- Neijssel+ 2019 preferred model + %M_/odot per Mpc^3 per year -- Neijssel+ 2019 preferred model %would be SFR=0.015*(1+zvec).^2.7./(1+((1+zvec)/2.9).^5.6) in Madau & Dickinson, 2014, (15) - SFR=0.01*(1+zvec).^2.77./(1+((1+zvec)/2.9).^4.7); + SFR=0.01*(1+zvec).^2.77./(1+((1+zvec)/2.9).^4.7); if(maxZ>minZ), Zmean=0.035.*10.^(-0.23*zvec); Zmu=log(Zmean)-0.39^2/2; @@ -308,7 +308,7 @@ %Compute detection rates per year of observer time and per year of source time %per Mpc^3 of comoving volume as a function of total mass and eta -%Compute the detection probability as a function of detection redshift, +%Compute the detection probability as a function of detection redshift, %total mass and eta function [pdetection]=... DetectionProbability(zlistdetection,Mtlist,etalist,noisefile,Dl) @@ -371,13 +371,13 @@ end; %Compute detection probability as a function of the ratio of SNRopt to SNRthreshold - SNRratio=0.01:0.01:100; %for convenience, no chance of detection below 1/max(Thetas)~1/sqrt(2) + SNRratio=0.01:0.01:100; %for convenience, no chance of detection below 1/max(Thetas)~1/sqrt(2) %find indices of first values larger than SNRthreshold/SNRopt in Thetas - idx=discretize(1./SNRratio, Thetas); + idx=discretize(1./SNRratio, Thetas); pdetect=1-idx/Ntheta; pdetect(isnan(pdetect))=0; - SNRtothreshold=SNRopt/8; %should really be 10 for network, + SNRtothreshold=SNRopt/8; %should really be 10 for network, % but 8 matches Reed's calculations more closely according to Michael Fulgoni pdetection=zeros(length(zlistdetection),length(Mtlist),length(etalist)); pdetection=pdetect(max(min(ceil(SNRtothreshold*100),length(pdetect)),1)); @@ -406,17 +406,17 @@ function MakePlots(M1,M2,Z,Tdelay,zlistformation,Zlist,SFR,Zweight,... colormap jet; scatter(log10(M1),log10(M2),20,log(Z)/log(10),'filled'); set(gca, 'FontSize', 20); %for labels - H=colorbar; H.Label.String='log_{10} metallicity'; + H=colorbar; H.Label.String='log_{10} metallicity'; xlabel('log_{10}(M_1/M_o)'), ylabel('log_{10}(M_2/M_o)'); - + figure(3); colormap jet; scatter(M1+M2,log10(Tdelay/1e6),20,log10(Z),'filled'); set(gca, 'FontSize', 20); %for labels - H=colorbar; H.Label.String='log_{10} metallicity'; + H=colorbar; H.Label.String='log_{10} metallicity'; xlabel('Total DCO mass [M_o]'), ylabel('log_{10}(Tdelay/Myr)'); - + figure(fignumber+3), clf(fignumber+3); plot(zvec, SFR*1e9, 'LineWidth', 3); hold on; plot(zvec, SFR'.*sum(Zweight(:,Zlist<=0.001),2)./sum(Zweight,2)*1e9, 'LineWidth', 1); @@ -440,6 +440,3 @@ function MakePlots(M1,M2,Z,Tdelay,zlistformation,Zlist,SFR,Zweight,... end %end of MakePlots - - - diff --git a/compas_matlab_utils/IMRSAWaveform.m b/compas_matlab_utils/IMRSAWaveform.m index 09f145edd..83eb04120 100644 --- a/compas_matlab_utils/IMRSAWaveform.m +++ b/compas_matlab_utils/IMRSAWaveform.m @@ -1,24 +1,24 @@ function [h, Aeff, psiEff] = IMRSAWaveform (fVec, totalMass, eta, chi, startPhase, ... - startTime, dEff, fLower) + startTime, dEff, fLower) % -% IMRSAWaveform: Generate the parametrised frequency domain BBH coalescence +% IMRSAWaveform: Generate the parametrised frequency domain BBH coalescence % waveforms proposed in the paper P. Ajith et al (2009) % -% usage: [h, Aeff, psiEff] = IMRSAWaveform (f, totalMass, eta, chi, startPhase, +% usage: [h, Aeff, psiEff] = IMRSAWaveform (f, totalMass, eta, chi, startPhase, % startTime, dEff, fLower) -% +% % fVec : a vector of frequencies at which the waveform is generated % totalMass : total mass of the binary (in solar masses) -% eta : symmetric mass ratio -% chi : spin parameter +% eta : symmetric mass ratio +% chi : spin parameter % startPhase : start phase of the waveform (in radian) % startTime : start time of the waveform (in seconds) % dEff : effective distance (in Mpc) % fLower : low-frequency cutoff (Hz) % % h : waveform in Fourier domain (complex vector) -% Aeff : amplitude in the Fourier domain -% psiEff : phase in the Fourier domain +% Aeff : amplitude in the Fourier domain +% psiEff : phase in the Fourier domain % % P. Ajith, 30.06.2010 % @@ -37,7 +37,7 @@ mergPower = -2/3; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % compute the phenomenological parameters + % compute the phenomenological parameters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% psi0 = 3./(128*eta); @@ -46,52 +46,52 @@ psi2 = 3715./756. + ... -9.2091e+02*eta^1 + 4.9213e+02*eta^1*chi^1 + 1.3503e+02*eta^1*chi^2 + ... 6.7419e+03*eta^2 + -1.0534e+03*eta^2*chi^1 + ... - -1.3397e+04*eta^3 ; - + -1.3397e+04*eta^3 ; + psi3 = -16.*pi + 113.*chi/3. + ... 1.7022e+04*eta^1 + -9.5659e+03*eta^1*chi^1 + -2.1821e+03*eta^1*chi^2 + ... -1.2137e+05*eta^2 + 2.0752e+04*eta^2*chi^1 + ... - 2.3859e+05*eta^3 ; - + 2.3859e+05*eta^3 ; + psi4 = 15293365./508032. - 405.*chi^2/8. + ... -1.2544e+05*eta^1 + 7.5066e+04*eta^1*chi^1 + 1.3382e+04*eta^1*chi^2 + ... 8.7354e+05*eta^2 + -1.6573e+05*eta^2*chi^1 + ... - -1.6936e+06*eta^3 ; - + -1.6936e+06*eta^3 ; + psi5 = 0.; psi6 = -8.8977e+05*eta^1 + 6.3102e+05*eta^1*chi^1 + 5.0676e+04*eta^1*chi^2 + ... 5.9808e+06*eta^2 + -1.4148e+06*eta^2*chi^1 + ... - -1.1280e+07*eta^3 ; - + -1.1280e+07*eta^3 ; + psi7 = 8.6960e+05*eta^1 + -6.7098e+05*eta^1*chi^1 + -3.0082e+04*eta^1*chi^2 + ... -5.8379e+06*eta^2 + 1.5145e+06*eta^2*chi^1 + ... - 1.0891e+07*eta^3 ; - + 1.0891e+07*eta^3 ; + psi8 = -3.6600e+05*eta^1 + 3.0670e+05*eta^1*chi^1 + 6.3176e+02*eta^1*chi^2 + ... 2.4265e+06*eta^2 + -7.2180e+05*eta^2*chi^1 + ... - -4.5524e+06*eta^3 ; - + -4.5524e+06*eta^3 ; + f1 = 1. - 4.4547*(1.-chi).^0.217 + 3.521*(1.-chi).^0.26 + ... 6.4365e-01*eta^1 + 8.2696e-01*eta^1*chi^1 + -2.7063e-01*eta^1*chi^2 + ... -5.8218e-02*eta^2 + -3.9346e+00*eta^2*chi^1 + ... - -7.0916e+00*eta^3 ; - + -7.0916e+00*eta^3 ; + f2 = (1. - 0.63*(1.-chi)^0.3)/2. + ... 1.4690e-01*eta^1 + -1.2281e-01*eta^1*chi^1 + -2.6091e-02*eta^1*chi^2 + ... -2.4900e-02*eta^2 + 1.7013e-01*eta^2*chi^1 + ... - 2.3252e+00*eta^3 ; - + 2.3252e+00*eta^3 ; + sigma = (1. - 0.63*(1.-chi)^0.3)*(1.-chi)^0.45/4. + ... -4.0979e-01*eta^1 + -3.5226e-02*eta^1*chi^1 + 1.0082e-01*eta^1*chi^2 + ... 1.8286e+00*eta^2 + -2.0169e-02*eta^2*chi^1 + ... - -2.8698e+00*eta^3 ; - + -2.8698e+00*eta^3 ; + f3 = 3.2361e-01 + 4.8935e-02*chi^1 + 1.3463e-02*chi^2 + ... -1.3313e-01*eta^1 + -8.1719e-02*eta^1*chi^1 + 1.4512e-01*eta^1*chi^2 + ... -2.7140e-01*eta^2 + 1.2788e-01*eta^2*chi^1 + ... - 4.9220e+00*eta^3 ; - + 4.9220e+00*eta^3 ; + f3 = f3/piM; f1 = f1/piM; f2 = f2/piM; @@ -108,7 +108,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % now generate the waveforms + % now generate the waveforms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PN corrections to the inspiral amplitude @@ -116,10 +116,10 @@ alpha3 = (27./8. - 11.*eta/6.)*chi; % correction to the merger power law - epsilon_1 = 1.4547*chi - 1.8897; + epsilon_1 = 1.4547*chi - 1.8897; epsilon_2 = -1.8153*chi + 1.6557; - % normalisation constants for the merger and ring down amplitude + % normalisation constants for the merger and ring down amplitude vMerg = power(pi*M*f1, 1./3.); vRing = power(pi*M*f2, 1./3.); w1 = 1. + alpha2*power(vMerg,2.) + alpha3*power(vMerg,3.); @@ -127,7 +127,7 @@ w2 = w1*(pi*sigma/2.)*power(f2/f1, mergPower)*(1. ... + epsilon_1*vRing + epsilon_2*vRing*vRing); - % amplitude scale + % amplitude scale C = M^(5/6)*(f1)^(-7/6)*sqrt(5*eta/24)/(d*pi^(2/3)); Aeff = zeros(size(fVec)); @@ -137,17 +137,17 @@ mergIdx = find(fVec >= f1 & fVec < f2); ringIdx = find(fVec >= f2 & fVec <= f3); outOfBand = find(fVec < fLower | fVec > f3); - + v = power(pi*M*fVec, 1./3.); - % effective amplitude - inspiral, merger and ring down + % effective amplitude - inspiral, merger and ring down fNorm = fVec/f1; pnCorr = 1 + alpha2*power(v(inspIdx),2.) + alpha3*power(v(inspIdx),3.); Aeff(inspIdx) = power(fNorm(inspIdx), -7./6.).*pnCorr; Aeff(mergIdx) = w1*power(fNorm(mergIdx), mergPower).*(1. ... + epsilon_1*v(mergIdx) + epsilon_2*power(v(mergIdx),2)); - + Lorentzian = sigma./(power(fVec(ringIdx)-f2, 2.) + sigma.*sigma/4.); Aeff(ringIdx) = w2*Lorentzian/(2*pi); @@ -155,5 +155,4 @@ psiEff = shft*fVec + phi + psi0*v.^-5.*(1 + psi2*v.^2 + psi3*v.^3 + ... psi4*v.^4 + psi5*v.^5 + psi6*v.^6 + psi7*v.^7 + psi8*v.^8); - h = Aeff.*exp(1i*(-psiEff)); - + h = Aeff.*exp(1i*(-psiEff)); diff --git a/compas_matlab_utils/SSEDetailedOutput.m b/compas_matlab_utils/SSEDetailedOutput.m index eff5affa7..203a03331 100644 --- a/compas_matlab_utils/SSEDetailedOutput.m +++ b/compas_matlab_utils/SSEDetailedOutput.m @@ -1,7 +1,7 @@ function SSEDetailedOutput(filename, nfiles) % Carries out some basic analysis and makes plots for a single SSE run % -% USAGE: +% USAGE: % SSEDetailedOutput(filename [, nfiles]) % % INPUTS: @@ -10,10 +10,10 @@ function SSEDetailedOutput(filename, nfiles) % the files are all assumed to start with filename, followed by numbers % 0...nfiles-1, followed by .h5 % -% examples: +% examples: % SSEDetailedOutput('~/Work/COMPAS/src/COMPAS_Output/Detailed_Output/SSE_Detailed_Output_0.h5') % SSEDetailedOutput('~/Work/COMPAS/src/COMPAS_Output/Detailed_Output/SSE_Detailed_Output_', 5) -% +% if(nargin==1) %parse one file @@ -53,17 +53,17 @@ function SSEDetailedOutput(filename, nfiles) hold off; set(gca,'FontSize',20); xlabel('Time, Myr'); ylabel('Radius, Rsun'), legend('MS','HG','FGB','CHeB','EAGB','TPAGB') -%for(i=2:length(radius)), %remove points where radius is less than the radius at previous time +%for(i=2:length(radius)), %remove points where radius is less than the radius at previous time % if(~isempty(find(radius(1:i-1)>=radius(i)))), % envMass(i)=0; convEnvMass(i)=0; radius(i)=0; % end; %end; %goodindices=type>1 & type<=6 & radius>0; -%figure(2); +%figure(2); %subplot(2,1,1), scatter(radius(goodindices), envMass(goodindices)-convEnvMass(goodindices), 20, 'b', 'filled'); hold on; %scatter(radius(goodindices), convEnvMass(goodindices), 20, 'm', 'filled'); hold on; -%scatter(radius(goodindices), mass(goodindices)-envMass(goodindices), 20, 'y', 'filled'); -%scatter(radius(goodindices), mass(goodindices), 20, 'k', 'filled'); +%scatter(radius(goodindices), mass(goodindices)-envMass(goodindices), 20, 'y', 'filled'); +%scatter(radius(goodindices), mass(goodindices), 20, 'k', 'filled'); %hold off; %set(gca,'FontSize',20); xlabel('Radius, Rsun'); ylabel('Mass, Msun'), legend('Radiative intershell','Convective Envelope','Core', 'Total') %subplot(2,1,2); scatter(radius(goodindices), binding(goodindices), 20, 'm', 'filled') @@ -85,7 +85,7 @@ function SSEDetailedOutput(filename, nfiles) if(nargin==2), for (k=0:nfiles-1), -file=[filename,int2str(k),'.h5']; +file=[filename,int2str(k),'.h5']; time=h5read(file,'/Time'); Z=h5read(file,'/Metallicity@ZAMS'); mass=h5read(file,'/Mass'); @@ -101,7 +101,7 @@ function SSEDetailedOutput(filename, nfiles) binding(i)=0; radius(i)=0; end; end; -figure(k+1), +figure(k+1), scatter(radius(type==1),log10(binding(type==1)),20,'filled'); hold on; scatter(radius(type==2),log10(binding(type==2)),20,'filled'); scatter(radius(type==3),log10(binding(type==3)),20,'filled'); diff --git a/compas_python_utils/cosmic_integration/ClassCOMPAS.py b/compas_python_utils/cosmic_integration/ClassCOMPAS.py index 4a24dd15e..59d021ab0 100644 --- a/compas_python_utils/cosmic_integration/ClassCOMPAS.py +++ b/compas_python_utils/cosmic_integration/ClassCOMPAS.py @@ -80,7 +80,7 @@ def setCOMPASDCOmask( # By default, we mask for BHBHs that merge within a Hubble time, assuming # the pessimistic CEE prescription (HG donors cannot survive a CEE) and # not allowing immediate RLOF post-CEE - + stellar_type_1, stellar_type_2, hubble_flag, dco_seeds = \ self.get_COMPAS_variables("BSE_Double_Compact_Objects", ["Stellar_Type(1)", "Stellar_Type(2)", "Merges_Hubble_Time", "SEED"]) dco_seeds = dco_seeds.flatten() @@ -88,7 +88,7 @@ def setCOMPASDCOmask( if types == "CHE_BHBH" or types == "NON_CHE_BHBH": stellar_type_1_zams, stellar_type_2_zams, che_ms_1, che_ms_2, sys_seeds = \ self.get_COMPAS_variables("BSE_System_Parameters", ["Stellar_Type@ZAMS(1)", "Stellar_Type@ZAMS(2)", "CH_on_MS(1)", "CH_on_MS(2)", "SEED"]) - + che_mask = np.logical_and.reduce((stellar_type_1_zams == 16, stellar_type_2_zams == 16, che_ms_1 == True, che_ms_2 == True)) che_seeds = sys_seeds[()][che_mask] @@ -101,7 +101,7 @@ def setCOMPASDCOmask( type_masks = { "all": np.repeat(True, len(dco_seeds)), "BHBH": np.logical_and(stellar_type_1 == 14, stellar_type_2 == 14), - "NSNS": np.logical_and(stellar_type_1 == 13, stellar_type_2 == 13), + "NSNS": np.logical_and(stellar_type_1 == 13, stellar_type_2 == 13), "WDWD": np.logical_and(np.isin(stellar_type_1,[10,11,12]),np.isin(stellar_type_2,[10,11,12])), "BHNS": np.logical_or(np.logical_and(stellar_type_1 == 13, stellar_type_2 == 14),np.logical_and(stellar_type_1 == 14, stellar_type_2 == 13)), "NSWD": np.logical_or(np.logical_and(np.isin(stellar_type_1,[10,11,12]),stellar_type_2 == 13), @@ -176,7 +176,7 @@ def setGridAndMassEvolved(self): Data.close() def setCOMPASData(self): - + primary_masses, secondary_masses, formation_times, coalescence_times, dco_seeds = \ self.get_COMPAS_variables("BSE_Double_Compact_Objects", ["Mass(1)", "Mass(2)", "Time", "Coalescence_Time", "SEED"]) # Raise an error if DCO table is empty @@ -227,7 +227,7 @@ def recalculateTrueSolarMassEvolved(self, Mlower, Mupper, binaryFraction): ) def get_COMPAS_variables(self, hdf5_file, var_names): - """ + """ Get a variable or variables from a COMPAS file Args: diff --git a/compas_python_utils/cosmic_integration/ClassCosmicIntegrator.py b/compas_python_utils/cosmic_integration/ClassCosmicIntegrator.py index 86fa1cbba..50c0a6664 100644 --- a/compas_python_utils/cosmic_integration/ClassCosmicIntegrator.py +++ b/compas_python_utils/cosmic_integration/ClassCosmicIntegrator.py @@ -11,7 +11,7 @@ class CosmicIntegrator(object): """ - The cosmological integrator calculates the rate + The cosmological integrator calculates the rate an object given the SFR that went into it at birth The entire class consists of several subclasses and their instances @@ -32,7 +32,7 @@ class CosmicIntegrator(object): Each class lives in a separate file (except cosmo which is inbuilt library astropy) - + """ def __init__(self, pathCOMPAS=None, Cosmology='WMAP',hubbleConstant = 67.8,\ @@ -58,7 +58,7 @@ def __init__(self, pathCOMPAS=None, Cosmology='WMAP',hubbleConstant = 67.8,\ self.cosmology = get_cosmology(**cosmo_kwargs) self.redshiftFirstSFR = redshiftFirstSFR self.ageFirstSFR = self.cosmology.age(self.redshiftFirstSFR).value - + #These are the redshifts shells we integrate over self.minRedshift = minRedshift self.maxRedshift = maxRedshift @@ -100,7 +100,7 @@ def __init__(self, pathCOMPAS=None, Cosmology='WMAP',hubbleConstant = 67.8,\ ##################################################### if self.verbose: print("Creating instance MSSFR class User has to still set grid") - self.MSSFR = ClassMSSFR.MSSFR(metallicityGrid=None, cosmo=self.cosmology) + self.MSSFR = ClassMSSFR.MSSFR(metallicityGrid=None, cosmo=self.cosmology) #additionally needed for sensitivity self.GWdetector_sensitivity = GWdetector_sensitivity @@ -122,13 +122,13 @@ def __init__(self, pathCOMPAS=None, Cosmology='WMAP',hubbleConstant = 67.8,\ self.PerSystemPerRedshift_redshiftBirth = None # dN Gpc-3 per year at z=redshift. #each row is redshift merger self.PerSystemPerRedshift_ratesIntrinsic = None - # dN per year in detector from shell + # dN per year in detector from shell self.PerSystemPerRedshift_ratesObserved = None self.RedshiftTabulated = RedshiftTabulated self.RedshiftTabulatedResolution = RedshiftTabulatedResolution - self.redshiftAgeTable = None - + self.redshiftAgeTable = None + def createConcentricRedshiftShells(self): if self.verbose: @@ -141,16 +141,16 @@ def createConcentricRedshiftShells(self): self.nrRedshiftBins+1) #The bin edges in redshift #Central value of each redshift bin, this is the value used in cosmic Int self.Shell_dz = np.diff(redshiftEdges) - self.Shell_centerRedshift = 0.5*(redshiftEdges[:-1] + redshiftEdges[1:]) + self.Shell_centerRedshift = 0.5*(redshiftEdges[:-1] + redshiftEdges[1:]) #Corresponding luminosity Distances [Mpc] self.Shell_luminosityDistance = \ - [x.value for x in self.cosmology.luminosity_distance(self.Shell_centerRedshift)] + [x.value for x in self.cosmology.luminosity_distance(self.Shell_centerRedshift)] #cosmology.comoving volume is in units of Mpc^-3 - #The line below translates this to Gpc^-3 (times 1e-9) + #The line below translates this to Gpc^-3 (times 1e-9) #and gives me the spehrical volume of each redshift bin. comovEdges = [x.value*1e-9 for x in self.cosmology.comoving_volume(redshiftEdges)] - #The difference between the spherical volumes gives me + #The difference between the spherical volumes gives me #the shell volume of each redshift we are looking at self.Shell_volume = np.diff(comovEdges) @@ -161,9 +161,9 @@ def setAgeBirthSystems(self): self.PerSystemPerRedshift_ageBirth = np.zeros(shape=(int(self.nrRedshiftBins),\ len(self.COMPAS.delayTimes))) - #the age of the universe at the birth of the system is the + #the age of the universe at the birth of the system is the #age of the universe at merger minus the delay time. - #for the age of the universe in a redshift shell + #for the age of the universe in a redshift shell #we use the center redshift value for nrz, redshift in enumerate(self.Shell_centerRedshift): ageUniverseAtMergerGyr = self.cosmology.age(redshift) @@ -192,9 +192,9 @@ def setRedshiftBirthSystems(self): for nrR, row in enumerate(self.PerSystemPerRedshift_ageBirth): maskUnphysical = (row == -1) #born before first SFR maskPhysical = np.logical_not(maskUnphysical) - + if self.RedshiftTabulated: - #find indices in precalculated table + #find indices in precalculated table inds = np.digitize(row[maskPhysical], self.redshiftAgeTable[:,1]) redshifts = self.redshiftAgeTable[inds,0] else: @@ -212,15 +212,15 @@ def setRedshiftBirthSystems(self): self.PerSystemPerRedshift_redshiftBirth[nrR][maskUnphysical] = -1 self.PerSystemPerRedshift_redshiftBirth[nrR][maskPhysical] = redshifts - def setBirthTimesAnd2Darrays(self): + def setBirthTimesAnd2Darrays(self): if self.COMPAS.delayTimes is not None: if self.verbose: print("creating 2D arrays with birth ages and redshift") - - + + #from the COMPAS data we need the birth ages of each system - #in our integral, only if we actually have data. + #in our integral, only if we actually have data. #Introduced this because you might want an empty class (without data) #for testing and explaining code in notebooks :D @@ -233,9 +233,9 @@ def setBirthTimesAnd2Darrays(self): # dN Gpc-3 per year at z=redshift. #each row is redshift merger self.PerSystemPerRedshift_ratesIntrinsic = np.zeros(shape=(int(self.nrRedshiftBins),\ len(self.COMPAS.delayTimes))) - # dN per year in detector from shell + # dN per year in detector from shell self.PerSystemPerRedshift_ratesObserved = np.zeros(shape=(int(self.nrRedshiftBins),\ - len(self.COMPAS.delayTimes))) + len(self.COMPAS.delayTimes))) else: print() print("cannot set 2D-array of rates") @@ -262,7 +262,6 @@ def cosmologicalIntegration(self): sensitivity=self.GWdetector_sensitivity) NrMergersInShell = np.multiply(RatesZ,self.Shell_volume[nr]) # intrinsic rate per system per shell NrMergersInShell = NrMergersInShell * (1./(1.+self.Shell_centerRedshift[nr])) # rate observer frame per system per shell - self.PerSystemPerRedshift_ratesObserved[nr][maskZ] = np.multiply(NrMergersInShell,probObservingZ) # observed dN per year prob between 0-1 + self.PerSystemPerRedshift_ratesObserved[nr][maskZ] = np.multiply(NrMergersInShell,probObservingZ) # observed dN per year prob between 0-1 if np.sum(self.PerSystemPerRedshift_ratesObserved[-1]) != 0 : print("The detected rate of the outermost redshift shell is nonzero, did we integrate far enough?") - diff --git a/compas_python_utils/cosmic_integration/ClassMSSFR.py b/compas_python_utils/cosmic_integration/ClassMSSFR.py index d5dc32766..e2d976220 100644 --- a/compas_python_utils/cosmic_integration/ClassMSSFR.py +++ b/compas_python_utils/cosmic_integration/ClassMSSFR.py @@ -15,8 +15,8 @@ class MSSFR(object): It combines a - MZ -relation : galaxy stellar mass - metallicity relatiion - This translates a metallicity to a - a galaxy stellar mass which has the same + This translates a metallicity to a + a galaxy stellar mass which has the same average metallicity. - SFR-prescription : Star formation rate prescription. Amount of solar mass that goes into forming @@ -26,24 +26,24 @@ class MSSFR(object): The entire GSMF is the mass in all stars in all galaxies. Hence the fraction of the GSMF - is the fraction of the stellar mass in all galaxies at that time. + is the fraction of the stellar mass in all galaxies at that time. We assume that the average cosmic SFR spreads evenly among all the galaxy stellar mass. Meaning a galaxy with a stellar mass twice that of another galaxy, has twice the SFR. Hence this method does not include local star burts (SMC/LMC for example) - + The overall idea. Given a metallicity bin with upper and lower bound. Translate this to a galaxy stellar mass bin with upper and lower bound using - a MZ-relation. Then find the fraction of the GSMF density function that is taken by - this glaxy stellar mass bin. We assumed that the fraction of the stellar mass is + a MZ-relation. Then find the fraction of the GSMF density function that is taken by + this glaxy stellar mass bin. We assumed that the fraction of the stellar mass is proportional to the fraction of the SFR. Hence we multiply this fraction by the SFR. - Note that because we take "cosmological averages" this method does not take into + Note that because we take "cosmological averages" this method does not take into account galaxy specific metallicity distributions. Alternatively we can also directly use a metallicity density/probability function and calculate the fraction occupied by the metallicity bin in this distribution. This - is the logNormal distribution, which is still multiplied by the SFR and a + is the logNormal distribution, which is still multiplied by the SFR and a 'cosmological average'. """ @@ -58,8 +58,8 @@ def __init__(self, verbose=False,\ #With regards to metallicity binning the integral self.metallicityGrid = metallicityGrid - self.metallicityBinEdges = None - self.binInLogSpace = binInLogSpace + self.metallicityBinEdges = None + self.binInLogSpace = binInLogSpace #lower limit is not zero to avoid divide by zero error self.metallicityLowerLimit = metallicityLowerLimit self.metallicityUpperLimit = metallicityUpperLimit @@ -83,7 +83,7 @@ def __init__(self, verbose=False,\ #If you use MZ and GSMF relations self.GSMFprescription = None - # Current Options = Panter et al. (2004) Single, + # Current Options = Panter et al. (2004) Single, # Furlong et al. (2015) Single, # Furlong et al. (2015) Double self.ZMprescription = None @@ -92,14 +92,14 @@ def __init__(self, verbose=False,\ # Langer et al. +offset (2006) - #if you use a logNormal + #if you use a logNormal self.logNormalPrescription = None self.customLogNormal = [None, None, None] #[Z0, alpha, sigma] #Current Options = Phenomenological # SFR prescriptions - self.SFRprescription = None + self.SFRprescription = None self.customSFR = [None, None, None, None] #[a,b,c,d] see function customSFR #Current Options = Madau et al. (2014) # Madau et al. (2017) @@ -118,8 +118,8 @@ def __init__(self, verbose=False,\ #Have not defined a cosmology jet use a default self.cosmology = WMAP9 #as cosmo - - + + def calculateMetallicityBinEdges(self): """Calculates the bins used in the Riemann sum over metallicities @@ -132,7 +132,7 @@ def calculateMetallicityBinEdges(self): #convert to "normal" numbers. else: b= (self.metallicityGrid[1:] - self.metallicityGrid[:-1])/2. \ - + self.metallicityGrid[:-1] + + self.metallicityGrid[:-1] self.metallicityBinEdges = np.zeros(len(b)+2) @@ -145,7 +145,7 @@ def calculateMetallicityBinEdges(self): - + @@ -155,7 +155,7 @@ def calculateMetallicityBinEdges(self): def LogOH12vsLogZZsun(self, value, inValue='logOH12'): """ - This function translates between + This function translates between logOH12 = number density of oxygen to hyrdogen logZZsun = metallicity mass fraction in solar units @@ -187,33 +187,33 @@ def returnFractionMZ_GSMF(self, Zlower, Zupper, redshift): Returns the fraction of the SFR. It combines a - MZ -relation : galaxy stellar mass - metallicity relatiion - This translates a metallicity to a - a galaxy stellar mass which has the same + This translates a metallicity to a + a galaxy stellar mass which has the same average metallicity. - GSMF function : Galaxy stellar mass function A density function of the distribution of galaxy stellar masses. The entire GSMF is the mass in all stars in all galaxies. Hence the fraction of the GSMF is the fraction of the stellar - mass in all galaxies at that time. We assume that the + mass in all galaxies at that time. We assume that the average cosmic SFR spreads evenly among all the galaxy stellar mass. Meaning a galaxy with a stellar mass twice that of another galaxy, has twice the SFR. Hence this method does not include local star burts (SMC/LMC for example) - + The overall idea. Given a metallicity bin with upper and lower bound. Translate this to a galaxy stellar mass bin with upper and lower bound using - a MZ-relation. Then find the fraction of the GSMF density function that is taken by - this glaxy stellar mass bin. We assumed that the fraction of the stellar mass is + a MZ-relation. Then find the fraction of the GSMF density function that is taken by + this glaxy stellar mass bin. We assumed that the fraction of the stellar mass is proportional to the fraction of the SFR. Hence we multiply this fraction by the SFR. - Note that because we take "cosmological averages" this method does not take into + Note that because we take "cosmological averages" this method does not take into account galaxy specific metallicity distributions. """ z = np.copy(redshift) #found that the mask z>4 overwrites input #these prescriptions work in metallicities of unit solar - Zupper_Zsun = Zupper/ self.solarMetallicity - Zlower_Zsun = Zlower/ self.solarMetallicity + Zupper_Zsun = Zupper/ self.solarMetallicity + Zlower_Zsun = Zlower/ self.solarMetallicity #Not compressed coding but easier to read @@ -226,7 +226,7 @@ def returnFractionMZ_GSMF(self, Zlower, Zupper, redshift): Mlower = 10**self.Langer2005ZM(Zlower_Zsun, z) elif self.ZMprescription == 'Langer et al. +offset (2006)': Mupper = 10**self.Langer2005OffsetZM(Zupper_Zsun, z) - Mlower = 10**self.Langer2005OffsetZM(Zlower_Zsun, z) + Mlower = 10**self.Langer2005OffsetZM(Zlower_Zsun, z) elif self.ZMprescription == 'Savaglio2005Bisector': print("Danger Savaglio2005Bisector not fully working not tested") Mupper = 10**self.Sava2005BisectorZM(Zupper_Zsun, z) @@ -235,13 +235,13 @@ def returnFractionMZ_GSMF(self, Zlower, Zupper, redshift): print("Danger Savaglio2005Bisector not fully working turnover in function") Mupper = 10**self.Savaglio2005ZM(Zupper_Zsun, z) Mlower = 10**self.Savaglio2005ZM(Zlower_Zsun, z) - else: + else: raise ValueError("The mass-metallicity prescription is not recognised.\n"+\ "Current (trusted) options are:\n"+\ "Ma et al. (2016), Langer et al. (2006),"+\ "Langer et al. +offset (2006)\n"+\ "Apologies but I will now break") - + #To integrate the schechter function we need to know #- alpha which governs the power law slope #- phi for the normalization (in case of the double schechter) @@ -289,7 +289,7 @@ def returnFractionMZ_GSMF(self, Zlower, Zupper, redshift): # # # GSMF Schechter functions # # # - ##################################################### + ##################################################### def lineairFitSingleSchechterFurlong(self, z): try: @@ -297,14 +297,14 @@ def lineairFitSingleSchechterFurlong(self, z): except: z = np.array([z]) nr = 1 - + fitlogMc = np.array([11.14, 11.11, 11.06, 10.91, 10.78, 10.60]) fitphi1 = np.array([0.84, 0.84, 0.74, 0.45, 0.22, 0.12])*10**(-3) fita1 = np.array([-1.43, -1.45, -1.48, -1.57, -1.66, -1.74]) - + fitredshifts = np.array([0.1, 0.5, 1.0, 2.0, 3.0, 4.0]) - + fitvalues = [fitlogMc, fitphi1, fita1] thresholds = [0.0, 0.5, 1.0, 2.0, 3.0, 10000000] r = [] @@ -324,7 +324,7 @@ def lineairFitSingleSchechterFurlong(self, z): interpolatedValue = values[nrz] + np.multiply(dz, dydz[nrz]) yvalues[mask] = interpolatedValue r.append(yvalues) - + logMc, phi1, a1 = r #Ignoring phi fit since we do not use the implicit SFR values phi1 = np.ones(len(a1)) @@ -343,16 +343,16 @@ def lineairFitDoubleSchechterFurlong(self, z): z = np.array([z]) nr = 1 - + fitredshifts = np.array([0.1, 0.5, 1.0, 2.0, 3.0, 4.0]) fitlogMc = np.array([10.95, 10.88, 10.74, 10.44, 10.19, 10.00]) fitphi1 = np.array([1.45, 1.61, 1.51, 1.06, 0.63, 0.24])*10**-3 fita1 = np.array([-1.31, -1.24, -0.98, -0.25, 0.23, 0.43]) fitphi2 = np.array([0.0, 0.08, 0.48, 0.8, 0.61, 0.43])*10**-3 fita2 = np.array([-2.22, -1.79, -1.62, -1.58, -1.64, -1.69]) - + ratioPhi1Phi2 = np.divide(fitphi2, fitphi1) #Do it in this order because phi2 is zero - + fitvalues = [fitlogMc, fitphi1, fita1, fitphi2, fita2, ratioPhi1Phi2] thresholds = [0.0, 0.5, 1.0, 2.0, 3.0, 10000000] r = [] @@ -399,7 +399,7 @@ def PanterSingleRedshiftIndependent(self,z): #http://iopscience.iop.org/article/10.1086/500363/meta #Note that this is redshift independent! logMc = np.log10(7.64*(10**10)) - phi = 7.8* (10**(-3)) + phi = 7.8* (10**(-3)) alpha = -1.16 return np.ones(len(z))*logMc, np.ones(len(z))*phi, np.ones(len(z))*alpha @@ -408,7 +408,7 @@ def PanterSingleRedshiftIndependent(self,z): # ZM - relations (inverse of papers) # # MZ-relations outside class bottom file # # # - ##################################################### + ##################################################### def Ma2015ZM(self, ZZSun, z): logM = ((np.log10(ZZSun) -7.95 + self.logOH12sun -0.93*\ (np.exp(-0.43*z)) )/0.35 +10.) @@ -416,7 +416,7 @@ def Ma2015ZM(self, ZZSun, z): def Langer2005ZM(self, ZZsun, z): Mstar = 7.64*10**10 - logM = np.log10((((ZZsun*(10**(0.3*z)))**2)*Mstar)) + logM = np.log10((((ZZsun*(10**(0.3*z)))**2)*Mstar)) return logM def Langer2005OffsetZM(self, ZZsun, z): @@ -438,7 +438,7 @@ def Savaglio2005ZM(self, ZZsun, z): logOH12 = self.LogOH12vsLogZZsun(logZZsun, inValue='logZZsun') a = -0.09649 b = -0.4030*logTh + 2.5315 - c = -7.5903 -logOH12 + 5.1733*logTh - 0.3944*logTh*logTh + c = -7.5903 -logOH12 + 5.1733*logTh - 0.3944*logTh*logTh d = b*b - 4*a*c mask1 = d<0. mask2 = np.logical_not(mask1) @@ -508,23 +508,23 @@ def SFR_Neijssel(self, z): fingerspitzengefuhl Cosmic integration paper """ SFR = 0.01 * ((1+z)**2.77) / (1 + ((1+z)/2.9)**4.7) * 1e9 #[1e9 for GPc-3] - return SFR # [Msun yr-1 Gpc-3] in comoving volume + return SFR # [Msun yr-1 Gpc-3] in comoving volume def SFR_Custom(self, z): """ Custom SFR same functional form as Madau et al """ - a = self.customSFR[0] - b = self.customSFR[1] - c = self.customSFR[2] - d = self.customSFR[3] + a = self.customSFR[0] + b = self.customSFR[1] + c = self.customSFR[2] + d = self.customSFR[3] SFR = a * ((1+z)**b) / (1 + ((1+z)/c)**d) * 1e9 #[1e9 for GPc-3] return SFR # [Msun yr-1 Gpc-3] in comoving volume ################################################# # # # MZ - relations # # # - ################################################# + ################################################# def Tremmonti2004MZ(self, logM, z): #z=0.1 validity 8.5 < logM < 11.5 @@ -609,7 +609,7 @@ def returnFractionLogNormal(self, Zlower, Zupper, redshift): CDFUpper = 0.5 + 0.5 * scipy.special.erf(Xupper) Xlower = (np.log(Zlower) - mu)/float(np.sqrt(2)*sigma) CDFLower = 0.5 + 0.5 * scipy.special.erf(Xlower) - fraction = CDFUpper - CDFLower + fraction = CDFUpper - CDFLower return fraction @@ -629,7 +629,7 @@ def returnMSSFR(self, metallicity=None, agesBirth=None, redshiftBirth=None): #independent of metallicity so we can do all at once SFR = np.zeros(len(agesBirth)) SFR[mask] = self.returnSFR(redshiftBirth[mask], agesBirth[mask]) - #The calculation of the fraction is done such that it does + #The calculation of the fraction is done such that it does #a single metallicity bin at the time fractions = np.zeros(len(agesBirth)) @@ -655,7 +655,7 @@ def printSFRoptions(self): print(""" Default instance: - self.SFRprescription = None + self.SFRprescription = None pass string Current Options = 'Madau et al. (2014)' @@ -667,8 +667,8 @@ def printSFRoptions(self): If you use Custom SFR also set the constants you want to use - self.customSFR = [a,b,c,d] - + self.customSFR = [a,b,c,d] + which are used in a Madau et al like formula (see source code) """) @@ -698,7 +698,7 @@ def printGSMFoptions(self): Default instance self.GSMFprescription = None - Current Options = Panter et al. (2004) Single, + Current Options = Panter et al. (2004) Single, Furlong et al. (2015) Single, Furlong et al. (2015) Double """) @@ -708,7 +708,7 @@ def printLogNormaloptions(self): print(""" - If you use Log normal + If you use Log normal i.e. self.Zprescription = 'logNormal' Default instance @@ -716,9 +716,8 @@ def printLogNormaloptions(self): Current Options = 'Neijssel Phenomenological' 'Custom Phenomenological' - If you use Custom Phenomenological remember to - additionally set + If you use Custom Phenomenological remember to + additionally set self.customLogNormal = [Z0, alpha, sigma] """) - diff --git a/compas_python_utils/cosmic_integration/FastCosmicIntegration.py b/compas_python_utils/cosmic_integration/FastCosmicIntegration.py index 0f0818248..643b270b7 100644 --- a/compas_python_utils/cosmic_integration/FastCosmicIntegration.py +++ b/compas_python_utils/cosmic_integration/FastCosmicIntegration.py @@ -25,7 +25,7 @@ def calculate_redshift_related_params(max_redshift=10.0, max_redshift_detection=1.0, redshift_step=0.001, z_first_SF = 10.0, cosmology=None): - """ + """ Given limits on the redshift, create an array of redshifts, times, distances and volumes Args: @@ -86,12 +86,12 @@ def find_sfr(redshifts, a = 0.01, b =2.77, c = 2.90, d = 4.70): def find_metallicity_distribution(redshifts, min_logZ_COMPAS, max_logZ_COMPAS, mu0=0.035, muz=-0.23, sigma_0=0.39, sigma_z=0.0, alpha =0.0, min_logZ =-12.0, max_logZ =0.0, step_logZ = 0.01): - + """ Calculate the distribution of metallicities at different redshifts using a log skew normal distribution - the log-normal distribution is a special case of this log skew normal distribution distribution, and is retrieved by setting - the skewness to zero (alpha = 0). - Based on the method in Neijssel+19. Default values of mu0=0.035, muz=-0.23, sigma_0=0.39, sigma_z=0.0, alpha =0.0, + the log-normal distribution is a special case of this log skew normal distribution distribution, and is retrieved by setting + the skewness to zero (alpha = 0). + Based on the method in Neijssel+19. Default values of mu0=0.035, muz=-0.23, sigma_0=0.39, sigma_z=0.0, alpha =0.0, retrieve the dP/dZ distribution used in Neijssel+19. See van Son+2022 for skewed log normal distribution. NOTE: This assumes that metallicities in COMPAS are drawn from a flat in log distribution! @@ -101,8 +101,8 @@ def find_metallicity_distribution(redshifts, min_logZ_COMPAS, max_logZ_COMPAS, redshift_step --> [float] step used in redshift calculation min_logZ_COMPAS --> [float] Minimum logZ value that COMPAS samples max_logZ_COMPAS --> [float] Maximum logZ value that COMPAS samples - - mu0 = 0.035 --> [float] location (mean in normal) at redshift 0 + + mu0 = 0.035 --> [float] location (mean in normal) at redshift 0 muz = -0.23 --> [float] redshift scaling/evolution of the location (alpha in Neijssel+19) sigma_0 = 0.39 --> [float] Scale (variance in normal) at redshift 0 (sigma in Neijssel+19) sigma_z = 0.00 --> [float] redshift scaling of the scale (variance in normal, 0 in Neijssel+19) @@ -116,19 +116,19 @@ def find_metallicity_distribution(redshifts, min_logZ_COMPAS, max_logZ_COMPAS, dPdlogZ --> [2D float array] Probability of getting a particular logZ at a certain redshift metallicities --> [list of floats] Metallicities at which dPdlogZ is evaluated p_draw_metallicity --> float Probability of drawing a certain metallicity in COMPAS (float because assuming uniform) - """ + """ ################################## # Log-Linear redshift dependence of sigma sigma = sigma_0* 10**(sigma_z*redshifts) - + ################################## # Follow Langer & Norman 2006 in assuming that mean metallicities evolve in z as: - mean_metallicities = mu0 * 10**(muz * redshifts) - + mean_metallicities = mu0 * 10**(muz * redshifts) + # Now we re-write the expected value of the log-skew-normal to retrieve mu beta = alpha/(np.sqrt(1 + (alpha)**2)) - PHI = NormDist.cdf(beta * sigma) - mu_metallicities = np.log(mean_metallicities/2. * 1./(np.exp(0.5*sigma**2) * PHI ) ) + PHI = NormDist.cdf(beta * sigma) + mu_metallicities = np.log(mean_metallicities/2. * 1./(np.exp(0.5*sigma**2) * PHI ) ) ################################## # create a range of metallicities (the x-values, or random variables) @@ -148,7 +148,7 @@ def find_metallicity_distribution(redshifts, min_logZ_COMPAS, max_logZ_COMPAS, ################################## # assume a flat in log distribution in sampled metallicity to find probability of drawing Z in COMPAS p_draw_metallicity = 1 / (max_logZ_COMPAS - min_logZ_COMPAS) - + return dPdlogZ, metallicities, p_draw_metallicity @@ -329,9 +329,9 @@ def find_detection_rate(path, dco_type="BHBH", merger_output_filename=None, weig max_redshift=10.0, max_redshift_detection=1.0, redshift_step=0.001, z_first_SF = 10, use_sampled_mass_ranges=True, m1_min=5 * u.Msun, m1_max=150 * u.Msun, m2_min=0.1 * u.Msun, fbin=0.7, aSF = 0.01, bSF = 2.77, cSF = 2.90, dSF = 4.70, - mu0=0.035, muz=-0.23, sigma0=0.39,sigmaz=0., alpha=0.0, + mu0=0.035, muz=-0.23, sigma0=0.39,sigmaz=0., alpha=0.0, min_logZ=-12.0, max_logZ=0.0, step_logZ=0.01, - sensitivity="O1", snr_threshold=8, + sensitivity="O1", snr_threshold=8, Mc_max=300.0, Mc_step=0.1, eta_max=0.25, eta_step=0.01, snr_max=1000.0, snr_step=0.1, cosmology=None): """ @@ -413,7 +413,7 @@ def find_detection_rate(path, dco_type="BHBH", merger_output_filename=None, weig assert snr_step < snr_max, "SNR step size must be less than maximum SNR" nonnegative_args = [(max_redshift, "max_redshift"), (max_redshift_detection, "max_redshift_detection"), (m1_min.value, "m1_min"), (m1_max.value, "m1_max"), - (m2_min.value, "m2_min"), (mu0, "mu0"), (sigma0, "sigma0"), + (m2_min.value, "m2_min"), (mu0, "mu0"), (sigma0, "sigma0"), (step_logZ, "step_logZ"), (snr_threshold, "snr_threshold"), (Mc_max, "Mc_max"), (Mc_step, "Mc_step"), (eta_max, "eta_max"), (eta_step, "eta_step"), (snr_max, "snr_max"), (snr_step, "snr_step")] @@ -508,7 +508,7 @@ def find_detection_rate(path, dco_type="BHBH", merger_output_filename=None, weig detection_rate = merger_rate[:, :n_redshifts_detection] * detection_probability \ * shell_volumes[:n_redshifts_detection] / (1 + redshifts[:n_redshifts_detection]) - + if(merger_output_filename!=None): # Store merger rates in an output text file if specified with open(path+merger_output_filename, 'w') as output: output.write('Mass1atMerger \t Mass2atMerger \t MergerRedshift \t MergerRate \n') @@ -536,8 +536,8 @@ def append_rates(path, detection_rate, formation_rate, merger_rate, redshifts, C n_redshifts_detection --> [int] Number of redshifts in list that should be used to calculate detection rates maxz --> [float] Maximum redshhift up to where we would like to store the data - sensitivity --> [string] Which detector sensitivity you used to calculate rates - dco_type --> [string] Which DCO type you used to calculate rates + sensitivity --> [string] Which detector sensitivity you used to calculate rates + dco_type --> [string] Which DCO type you used to calculate rates mu0 --> [float] metallicity dist: expected value at redshift 0 muz --> [float] metallicity dist: redshift evolution of expected value sigma0 --> [float] metallicity dist: width at redshift 0 @@ -588,13 +588,13 @@ def append_rates(path, detection_rate, formation_rate, merger_rate, redshifts, C fine_binsize = np.diff(redshifts)[0] #Assunming your redshift bins are equally spaced!! print('fine_binsize', fine_binsize) #Assuming your crude redshift bin is made up of an integer number of fine z-bins!!! - i_per_crude_bin = redshift_binsize/fine_binsize + i_per_crude_bin = redshift_binsize/fine_binsize i_per_crude_bin = int(i_per_crude_bin) ################### # convert crude redshift bins to volumnes and ensure all volumes are in Gpc^3 crude_volumes = cosmology.comoving_volume(redshift_bins).to(u.Gpc**3).value - # split volumes into shells + # split volumes into shells crude_shell_volumes = np.diff(crude_volumes) ################### @@ -609,7 +609,7 @@ def append_rates(path, detection_rate, formation_rate, merger_rate, redshifts, C # The number of merging DCO systems that need a weight N_dco = len(merger_rate[:,0]) - + #################### # binned_merger_rate will be the (observed) weights, binned by redshhift binned_merger_rate = np.zeros( (N_dco, len(redshift_bins)-1) )# create an empty list to fill @@ -628,8 +628,8 @@ def append_rates(path, detection_rate, formation_rate, merger_rate, redshifts, C save_redshifts = redshift_bins save_merger_rate = binned_merger_rate save_detection_rate = binned_detection_rate - else: - # To avoid huge filesizes, we don't really want All the data, + else: + # To avoid huge filesizes, we don't really want All the data, # so we're going to save up to some redshift z_index = np.digitize(maxz, redshifts) -1 @@ -736,7 +736,7 @@ def plot_rates(save_dir, formation_rate, merger_rate, detection_rate, redshifts, total_formation_rate = np.sum(formation_rate, axis=0) total_merger_rate = np.sum(merger_rate, axis=0) total_detection_rate = np.sum(detection_rate, axis=0) - + # and across redshifts cumulative_detection_rate = np.cumsum(total_detection_rate) detection_rate_by_binary = np.sum(detection_rate, axis=1) @@ -777,13 +777,13 @@ def plot_rates(save_dir, formation_rate, merger_rate, detection_rate, redshifts, #Plotvalues # Add text upper left corner - axes[0,0].text(0.05, 0.8, "mu0=%s \nmuz=%s \nsigma0=%s \nsigmaz=%s \nalpha=%s"%(mu0,muz,sigma0,sigmaz,alpha), transform=axes[0,0].transAxes, size = fs) + axes[0,0].text(0.05, 0.8, "mu0=%s \nmuz=%s \nsigma0=%s \nsigmaz=%s \nalpha=%s"%(mu0,muz,sigma0,sigmaz,alpha), transform=axes[0,0].transAxes, size = fs) for ax in axes.flatten(): ax.tick_params(labelsize=0.9*fs) # Save and show :) - plt.savefig(save_dir +'Rate_Info'+"mu0%s_muz%s_alpha%s_sigma0%s_sigmaz%s"%(mu0,muz,alpha,sigma0, sigmaz)+'.png', bbox_inches='tight') + plt.savefig(save_dir +'Rate_Info'+"mu0%s_muz%s_alpha%s_sigma0%s_sigmaz%s"%(mu0,muz,alpha,sigma0, sigmaz)+'.png', bbox_inches='tight') if show_plot: plt.show() else: @@ -797,7 +797,7 @@ def parse_cli_args(): parser = argparse.ArgumentParser() parser.add_argument("--path", dest='path', help="Path to the COMPAS file that contains the output", type=str, default="COMPAS_Output.h5") - + # For what DCO would you like the rate? options: ALL, BHBH, BHNS NSNS, WDWD parser.add_argument("--dco_type", dest='dco_type', help="Which DCO type you used to calculate rates, one of: ['all', 'BHBH', 'NSNS', 'WDWD', 'BHNS', 'NSWD', 'WDBH'] ", @@ -806,12 +806,12 @@ def parse_cli_args(): help="Name of column w AIS sampling weights, i.e. 'mixture_weight'(leave as None for unweighted samples) ", type=str, default=None) parser.add_argument("--keep_pessimistic_CEE", dest='remove_pessimistic_CEE', - help="keep_pessimistic_CEE will set remove_pessimistic_CEE to false. The default behaviour (remove_pessimistic_CEE == True), will mask binaries that experience a CEE while on the HG", + help="keep_pessimistic_CEE will set remove_pessimistic_CEE to false. The default behaviour (remove_pessimistic_CEE == True), will mask binaries that experience a CEE while on the HG", action='store_false', default=True) parser.add_argument("--keepRLOF_postCE", dest='remove_RLOF_after_CEE', - help="keepRLOF_postCE will set remove_RLOF_after_CEE to false. The default behaviour (remove_RLOF_after_CEE == True), will mask binaries that have immediate RLOF after a CCE", + help="keepRLOF_postCE will set remove_RLOF_after_CEE to false. The default behaviour (remove_RLOF_after_CEE == True), will mask binaries that have immediate RLOF after a CCE", action='store_false', default=True) - + # Options for the redshift evolution and detector sensitivity parser.add_argument("--maxz", dest='max_redshift', help="Maximum redshift to use in array", type=float, default=10) parser.add_argument("--zSF", dest='z_first_SF', help="redshift of first star formation", type=float, default=10) @@ -854,7 +854,7 @@ def parse_cli_args(): parser.add_argument("--delete", dest='delete_rates', help="Delete the rate group from your hdf5 output file (groupname based on dP/dZ parameters)", action='store_true', default=False) - parser.add_argument("--cosmology_name", dest='cosmology_name', help="Cosmology that is used for cosmic integration using the astropy.cosmology class: one of ['Planck13', 'Planck15', 'Planck18', 'WMAP1', 'WMAP3', 'WMAP5', 'WMAP9']", + parser.add_argument("--cosmology_name", dest='cosmology_name', help="Cosmology that is used for cosmic integration using the astropy.cosmology class: one of ['Planck13', 'Planck15', 'Planck18', 'WMAP1', 'WMAP3', 'WMAP5', 'WMAP9']", type=str, default="Planck18") args = parser.parse_args() @@ -874,7 +874,7 @@ def set_cosmology(cosmology_name="Planck18"): def main(): # Define command line options for the most commonly varied options args = parse_cli_args() - + cosmology = get_cosmology(args.cosmology_name) @@ -941,7 +941,7 @@ def main(): ################################################################## -### +### ### Run it! ### ################################################################## diff --git a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/__init__.py b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/__init__.py index 8476506a1..91d0b8897 100644 --- a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/__init__.py +++ b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/__init__.py @@ -1 +1 @@ -from .detection_matrix import DetectionMatrix # noqa: F401 \ No newline at end of file +from .detection_matrix import DetectionMatrix # noqa: F401 diff --git a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/binary_population.py b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/binary_population.py index cb8b23d28..ba20e521a 100644 --- a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/binary_population.py +++ b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/binary_population.py @@ -304,7 +304,7 @@ def generate_mock_population( ): if filename == "": filename = "dco_mock_population.h5" - + if m1_min is None or m1_max is None or m2_min is None: raise ValueError("m1_min, m1_max, and m2_min must be provided to generate_mock_population") diff --git a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/gpu_utils.py b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/gpu_utils.py index 865c30533..0318f114c 100644 --- a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/gpu_utils.py +++ b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/gpu_utils.py @@ -10,4 +10,4 @@ xp = cp else: - xp = np \ No newline at end of file + xp = np diff --git a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/io.py b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/io.py index 32115f59a..37a323d3f 100644 --- a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/io.py +++ b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/io.py @@ -81,4 +81,4 @@ def decode_from_hdf5(item): output = bool(item) else: output = item - return output \ No newline at end of file + return output diff --git a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/stellar_type.py b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/stellar_type.py index dcc7737ee..2cc77857a 100644 --- a/compas_python_utils/cosmic_integration/binned_cosmic_integrator/stellar_type.py +++ b/compas_python_utils/cosmic_integration/binned_cosmic_integrator/stellar_type.py @@ -29,4 +29,3 @@ class STELLAR_TYPE(Enum): STELLAR_TYPE.CARBON_OXYGEN_WHITE_DWARF, STELLAR_TYPE.HELIUM_WHITE_DWARF, STELLAR_TYPE.OXYGEN_NEON_WHITE_DWARF] - diff --git a/compas_python_utils/cosmic_integration/cosmology.py b/compas_python_utils/cosmic_integration/cosmology.py index 8b54c6d2f..a69e668d8 100644 --- a/compas_python_utils/cosmic_integration/cosmology.py +++ b/compas_python_utils/cosmic_integration/cosmology.py @@ -67,4 +67,3 @@ def set_cosmology(cosmology: COSMO_TYPE = None): _set_default_cosmology() if cosmology is None: cosmology = DEFAULT_COSMOLOGY - diff --git a/compas_python_utils/cosmic_integration/selection_effects.py b/compas_python_utils/cosmic_integration/selection_effects.py index bcd1ebd15..19d0225e0 100644 --- a/compas_python_utils/cosmic_integration/selection_effects.py +++ b/compas_python_utils/cosmic_integration/selection_effects.py @@ -69,28 +69,28 @@ def detection_probability(m1, m2, redshift, distance, snr_threshold,sensitivity= def SNRinterpolator(sensitivity='design'): """ Returns an Interpolator class instance for a given sensitivity - + This function is a convenience function to generate the interpolator with 'SNR_Grid_IMRPhenomPv2_FD_all_noise.hdf5' and 'SimNoisePSDaLIGODesignSensitivityP1200087'. - + Parameters ---------- sensitivity : str Which detector sensitivity PSD to use. Options are 'design' and 'O1' - + Returns ------- out : Interpolator Interpolator class instance - + Notes ----- The interpolator is only initialized once and then stored in a module level global variable to be reused. """ path = os.path.dirname(os.path.abspath(__file__)) - + if sensitivity == 'design': hdfDatasetName = 'SimNoisePSDaLIGODesignSensitivityP1200087' elif sensitivity == 'O1': diff --git a/compas_python_utils/cosmic_integration/totalMassEvolvedPerZ.py b/compas_python_utils/cosmic_integration/totalMassEvolvedPerZ.py index 78907e88d..005a42181 100644 --- a/compas_python_utils/cosmic_integration/totalMassEvolvedPerZ.py +++ b/compas_python_utils/cosmic_integration/totalMassEvolvedPerZ.py @@ -74,11 +74,11 @@ def get_COMPAS_fraction(m1_low, m1_upp, m2_low, f_bin=None, IMF breakpoints and slopes """ fbinary_bin_edges = [m1, 0.08, 0.5, 1, 10, m4] - + def get_binary_fraction(mass): binaryFractions = [0.1, 0.225, 0.5, 0.8, 1.0] for i in range(len(fbinary_bin_edges) - 1): - if mass < fbinary_bin_edges[0]: + if mass < fbinary_bin_edges[0]: # Mass below lowest binary fraction bin edge (shouldn't happen) return binaryFractions[0] if fbinary_bin_edges[i] <= mass < fbinary_bin_edges[i + 1]: @@ -90,9 +90,9 @@ def get_binary_fraction(mass): def integrand_full(mass, f_bin): local_f_bin = get_binary_fraction(mass) if f_bin is None else f_bin expected_q = quad(lambda q: q * mass_ratio_pdf_function(q), 0, 1)[0] - # mass of single stars = (1 - f_bin) * m1 - # mass of binaries = f_bin * (1 + ) * m1 - expected_mass_all_stellar_sys =(1 + local_f_bin * expected_q) * mass * IMF(mass, m1, m2, m3, m4, a12, a23, a34) + # mass of single stars = (1 - f_bin) * m1 + # mass of binaries = f_bin * (1 + ) * m1 + expected_mass_all_stellar_sys =(1 + local_f_bin * expected_q) * mass * IMF(mass, m1, m2, m3, m4, a12, a23, a34) return expected_mass_all_stellar_sys def integrand_compas(mass, f_bin): @@ -102,7 +102,7 @@ def integrand_compas(mass, f_bin): q_min = m2_low / mass if q_min >= 1: return 0 # No valid secondaries - # Integrate (1 + q)P(q) dq over q from q_min to 1, + # Integrate (1 + q)P(q) dq over q from q_min to 1, # we get p(q)dq: p_qdq = quad(mass_ratio_pdf_function, q_min, 1)[0] # and q P(q) dq (= expected_q) @@ -164,7 +164,7 @@ def totalMassEvolvedPerZ(path, Mlower, Mupper, m2_low, binaryFraction, mass_rati # get the mass evolved for each metallicity bin and convert to a total mass using the fraction MassEvolvedPerZ = retrieveMassEvolvedPerZ(path) - totalMassEvolvedPerMetallicity = MassEvolvedPerZ / fraction + totalMassEvolvedPerMetallicity = MassEvolvedPerZ / fraction return multiplicationFactor, totalMassEvolvedPerMetallicity @@ -230,12 +230,12 @@ def draw_samples_from_kroupa_imf( def analytical_star_forming_mass_per_binary_using_kroupa_imf( m1_min, m1_max, m2_min, fbin=1.0, imf_mass_bounds=(0.01, 0.08, 0.5, 200.0)): """ - Takes: + Takes: m1_min, m1_max, m2_min: COMPAS mass ranges [Msun] fbin: binary fraction (if None, use piecewise constant fbin(m1)) imf_mass_bounds: Kroupa IMF mass bounds [Msun] Computes: - N_bin_in_COMPAS + N_bin_in_COMPAS average_stellar_mass_sys = M_sys,Univ / N_sys,Univ (blue) M_sf_Univ_per_N_binary_COMPAS = average_stellar_mass_sys / N_bin_in_COMPAS @@ -245,7 +245,7 @@ def analytical_star_forming_mass_per_binary_using_kroupa_imf( Flat mass ratio: P(q)=U(0,1) => P(m2>m2_min | m1) = 1 - m2_min/m1 (for m1 >= m2_min) """ # ------------------------- - # Kroupa IMF + # Kroupa IMF # ------------------------- m1, m2, m3, m4 = imf_mass_bounds continuity_constants = [1.0 / (m2 * m3), 1.0 / m3, 1.0] @@ -344,4 +344,3 @@ def int_power(lo, hi, power): M_sf_Univ_per_N_binary_COMPAS = average_stellar_mass_sys / N_bin_in_COMPAS return M_sf_Univ_per_N_binary_COMPAS - diff --git a/compas_python_utils/detailed_evolution_plotter/plot_detailed_evolution.py b/compas_python_utils/detailed_evolution_plotter/plot_detailed_evolution.py index 27a94ed75..deac1598c 100644 --- a/compas_python_utils/detailed_evolution_plotter/plot_detailed_evolution.py +++ b/compas_python_utils/detailed_evolution_plotter/plot_detailed_evolution.py @@ -1,5 +1,5 @@ ################################################################### -# # +# # # Plot the detailed evolution of a COMPAS run # # # ################################################################### @@ -24,7 +24,7 @@ def main(): parser.add_argument('--outdir', type=str, default='.', help='Path to the directory to save the figures') parser.add_argument('--dont-show', action='store_false', help='Dont show the plots') args = parser.parse_args() - + run_main_plotter(args.data_path, outdir=args.outdir, show=args.dont_show, use_latex=True) @@ -131,7 +131,7 @@ def makeDetailedPlots(Data=None, events=None, outdir='.', show=True, use_latex=T if outdir is not None: safe_save_figure(fig, f'{outdir}/detailedEvolutionPlot.png', bbox_inches='tight', pad_inches=0, format='png') - + return fig @@ -267,7 +267,7 @@ def plotHertzsprungRussell(ax=None, Data=None, events=None, mask=None, use_latex ax.set_yscale('log') # Get the default x and y limits - xlim = ax.get_xlim() + xlim = ax.get_xlim() ylim = ax.get_ylim() # Add lines of const radii @@ -287,12 +287,12 @@ def get_L(t): # assumes K logymin = np.log10(ylim[0]) logymax = np.log10(ylim[1]) logyrange = logymax - logymin - + logLbot = logymin + 0.1 * logyrange # place labels some fraction of the y-axis up the plot - Lbot = 10**logLbot - Trgt = xlim[0] * 2 - + Lbot = 10**logLbot + Trgt = xlim[0] * 2 + Tbot = np.sqrt(np.sqrt(Lbot / (R * R))) * 6e3 # K Lrgt = get_L(Trgt / 6e3) alpha = 0.4 @@ -343,7 +343,7 @@ def plotVanDenHeuvel(events=None, outdir='.', use_latex=True): axs[ii].yaxis.set_label_position("right") plt.subplots_adjust(hspace=0) - if (ii == 0) or (ii == num_events - 1): + if (ii == 0) or (ii == num_events - 1): if use_latex: pltString = "$t$ = {:.1f} Myr, $a$ = {:.1f} $R_\odot$ \n $M_1$ = {:.1f} $M_\odot$, $M_2$ = {:.1f} $M_\odot$ \n" + \ events[ii].eventString @@ -404,13 +404,13 @@ def space_out(original_vals, min_separation=None): """ This function takes a sorted array of floats (in this case, event times) and spaces them out from each other to have a minimum separation min_separation. - + The purpose of this is so that the event letters don't overlap on the plot. - Idea of this function: for each pair which is too close, subtract off - some amount (nudge) from the lower, add the same amount to the upper, - and do this over the whole range. For big clumps, the middle ones won't move - (+/- will cancel out), but as the outer ones move away, the inner ones will + Idea of this function: for each pair which is too close, subtract off + some amount (nudge) from the lower, add the same amount to the upper, + and do this over the whole range. For big clumps, the middle ones won't move + (+/- will cancel out), but as the outer ones move away, the inner ones will have room to stretch out. """ @@ -429,9 +429,9 @@ def space_out(original_vals, min_separation=None): ########################################################### -### +### ### Evolutionary Events -### +### ########################################################### @@ -713,9 +713,9 @@ def addEvent(self, ii, eventClass, use_latex=True, **kwargs): ########################################################### -### +### ### Printing events -### +### ########################################################### diff --git a/compas_python_utils/detailed_evolution_plotter/plot_to_json.py b/compas_python_utils/detailed_evolution_plotter/plot_to_json.py index e9d64c83f..f2c156b2b 100644 --- a/compas_python_utils/detailed_evolution_plotter/plot_to_json.py +++ b/compas_python_utils/detailed_evolution_plotter/plot_to_json.py @@ -389,11 +389,10 @@ def get_plot_json(data_path): Returns ------- str - JSON string containing + JSON string containing """ detailed_fig, _, events = run_main_plotter(data_path, outdir=None, show=False) axes = detailed_fig.get_axes() plots_data = get_plot_data([('mass_plot', axes[0]), ('length_plot', axes[1]), ('hr_plot', axes[3])]) events_data = get_events_data(events) return json.dumps({**plots_data, **events_data}, cls=NumpyEncoder) - \ No newline at end of file diff --git a/compas_python_utils/h5copy.py b/compas_python_utils/h5copy.py index cf158b37b..e7e6100ac 100644 --- a/compas_python_utils/h5copy.py +++ b/compas_python_utils/h5copy.py @@ -1,6 +1,6 @@ ''' -h5copy.py +h5copy.py This program copies HDF5 file(s) to a designated output HDF5 file. If the output file is an existing HDF5 file, the user can specify whether the existing content should be erased @@ -55,8 +55,8 @@ list of input groups to be excluded (default is all groups will be copied) -Note: if the -x option is specified, it should be specified at the end of the options - list (i.e. the list of input files can't follow the -x option or the list of input +Note: if the -x option is specified, it should be specified at the end of the options + list (i.e. the list of input files can't follow the -x option or the list of input files will be subsumed by the list of groups to be excluded) @@ -95,8 +95,8 @@ datasets within the group) will only be copied if the number of datasets in the input file group matches the number of datasets in the output file group. If there is a mismatch a warning will be issued and the group will not be copied (but the file copy will continue, - just as though the group had been excluded) - + just as though the group had been excluded) + (b) if a dataset in an input file does not exist in the output file, the dataset will be created, otherwise the data copied will be appended to the existing dataset. @@ -115,17 +115,17 @@ The commandline option '-r' specifies whether recursion is enabled for directory processing, and if it is, to what depth: - if the -r option is not present, recursion is not enabled and only files in the specified working + if the -r option is not present, recursion is not enabled and only files in the specified working directory will be candidates for copying if -r is present with no 'depth' value, recursion is enabled and the depth is not limited - that - is, all files in the specified working directory, and all files in all directories below the + is, all files in the specified working directory, and all files in all directories below the specified working directory, will be candidates for copying - + if -r is present with a specified 'depth' value, recursion is enabled and the depth is limited to - the depth specified - that is, all files in the specified working directory, and all files in all + the depth specified - that is, all files in the specified working directory, and all files in all directories 'depth' levels below the specified working directory, will be candidates for copying - + Input filename filter --------------------- @@ -170,7 +170,7 @@ is just a brain dump of my reading/research over the past week or so, and it could very well be based on my misunderstanding of what I have read - so uf anyone notices something I've misunderstood please let me know so I can improve the code.) - + Data in HDF5 files are arranged in groups and datasets. @@ -190,55 +190,55 @@ creation, and the entire dataset created in one go. That doesn't work for COMPAS - even though we know the number of systems being evolved, we don't know the number of entries we'll have in each of the output log files (and therefore the HDF5 datasests if we're logging to HDF5 files). So, we enable chunking. - + Chunking can improve, or degrade, performance depending upon how it is implemented - mostly related to the chunk size chosen. - + Datasets are stored inside an HDF5 file as a number of chunks - the chunks are not guaranteed (not even likely) to be contiguous in the file or on the storage media (HDD, SSD etc.). Chunks are mapped/indexed -in the HDF5 file using a B-tree, and the size of the B-tree, and therefore the traversal time, depends +in the HDF5 file using a B-tree, and the size of the B-tree, and therefore the traversal time, depends directly upon the number of chunks allocated for a dataset - so the access time for a chunk increases as the number of chunks in the dataset increases. So many small chunks will degrade performance. - + Chunks are the unit of IO for HDF5 files - all IO to HDF5 is performed on the basis of chunks. This means that whenever dataset values are accessed (read or written (i.e. changed)), if the value is not already in memory, the entire chunk containing the value must be read from, or written to, the storage media - even -if the dataset value being accessed is the only value in the chunk. So few large chunks could cause +if the dataset value being accessed is the only value in the chunk. So few large chunks could cause empty, "wasted", space in the HDF5 files (at the end of datasets) - but they could also adversely affect performance by causing unnecessary IO traffic (although probably not much in the way we access data in COMPAS files). - + HDF5 files implement a chunk cache on a per-dataset basis. The default size of the chunk cache is 1MB, and its maximum size is 32MB. The purpose of the chunk cache is to reduce storage media IO - even with SSDs, memory access is way faster than storage media access, so the more of the file data that can be kept in memory and maipulated there, the better. Assuming the datatype of a particular dataset is DOUBLE, and therefore consumes 8 bytes of storage space, at its maximum size the chunk cache for that dataset could hold -4,000,000 values - so a single chuck with 4,000,000 values, two chunks with 2,000,000 values, four with +4,000,000 values - so a single chuck with 4,000,000 values, two chunks with 2,000,000 values, four with 1,000,000, and so on. Caching a single chunk defeats the purpose of the cache, so chunk sizes somewhat less that 4,000,000 would be most appropriate if the chunk cache is to be utilised. Chunks too big to fit in the cache simply bypass the cache and are read from, or written to, the storage media directly. - + However, the chunk cache is really only useful for random access of the dataset. Most, if not all, of the access in the COMPAS context (including post-creation analyses) is serial - the COMPAS code writes the datasets from top to bottom, and later analyses (generally) read the datasets the same way. Caching the -chunks for serial access just introduces overhead that costs memory (not much, to be sure: up to 32MB per +chunks for serial access just introduces overhead that costs memory (not much, to be sure: up to 32MB per open dataset), and degrades performance (albeit it a tiny bit). For that reason I disable the chunk cache in COMPAS - so all IO to/from an HDF5 file in COMPAS is directly to/from the storage media. (To be clear, -post-creation analysis software can disable the cache or not when accessing HDF5 files created by COMPAS - +post-creation analysis software can disable the cache or not when accessing HDF5 files created by COMPAS - disabling the cache here does not affect how other software accesses the files post-creation). - + So many small chunks is not so good, and neither is just a few very large chunks. So what's the optimum chunk size? It depends upon several things, and probably the most important of those are the final size of the dataset and the access pattern. - -As mentioned above, we tend to access datasets serially, and generally from to to bottom, so larger chunks -would seem appropriate, but not so large that we generate HDF5 files with lots of unused space. However, + +As mentioned above, we tend to access datasets serially, and generally from to to bottom, so larger chunks +would seem appropriate, but not so large that we generate HDF5 files with lots of unused space. However, disk space, even SSD space, is cheap, so trading space against performance is probably a good trade. - + Also as mentioned above, we don't know the final size of (most of) the datasets when creating the HDF5 in COMPAS - though we do know the number of systems being generated, which allows us to determine an upper bound for at least some of the datasets (though not for groups such as BSE_RLOF). - + One thing we need to keep in mind is that when we create the HDF5 file we write each dataset of a group in the same iteration - this is analogous to writing a single record in (e.g.) a CSV log file (the HDF5 group corresponds to the CSV file, and the HDF5 datasets in the group correspond to the columns in the @@ -246,15 +246,15 @@ output files) we do as many IOs to the HDF5 file as there are datasets in the group (columns in the file). We are not bound to reading or writing a single chunk at a time - but we are bound to reading or writing an integral multiple of whole chunks at a time. - + We want to reduce the number of storage media accesses when writing (or later reading) the HDF5 files, so larger chunk sizes are appropriate, but not so large that we create excessively large HDF5 files that have lots of unused space (bearing in mind the trade-off mentioned above), especially when were evolving just a few systems (rather than millions). - + To really optimise IO performance for HDF5 files we'd choose chunk sizes that are close to multiples of storage media block sizes, but I chose not to go down that rathole... - + Based on everything written above, and some tests, I've chosen a default chunk size of 100,000 (dataset entries) for all datasets (HDF5_DEFAULT_CHUNK_SIZE in constants.h) for the COMPAS C++ code. This clearly trades performance against storage space. For the (current) default logfile record specifications, per-binary @@ -262,12 +262,12 @@ HDF5 output file, but the performance gain, especially for post-creation analyses, is significant. Ensuring the number of systems evolved is an integral multiple of this fixed chunk size will minimise storage space waste. -I have chosen a minimum chunk size of 1000 (HDF5_MINIMUM_CHUNK_SIZE in constants.h) for the COMPAS C++ code. -If the number of systems being evolved is >= HDF5_MINIMUM_CHUNK_SIZE the chunk size used will be the value of -the hdf5-chunk-size program option (either HDF5_DEFAULT_CHUNK_SIZE or a value specified by the user), but if +I have chosen a minimum chunk size of 1000 (HDF5_MINIMUM_CHUNK_SIZE in constants.h) for the COMPAS C++ code. +If the number of systems being evolved is >= HDF5_MINIMUM_CHUNK_SIZE the chunk size used will be the value of +the hdf5-chunk-size program option (either HDF5_DEFAULT_CHUNK_SIZE or a value specified by the user), but if the number of systems being evolved is < HDF5_MINIMUM_CHUNK_SIZE the chunk size used will be HDF5_MINIMUM_CHUNK_SIZE. This is just so we don't waste too much storage space when running small tests - and if they are that small -performance is probably not going to be much of an issue, so no real trade-off against storage space. +performance is probably not going to be much of an issue, so no real trade-off against storage space. The chunk size chosen for the COMPAS C++ code determines the chunk size of the logfiles produced by the COMPAS C++ code. If those files are only ever given to this program as input files, their chunk size only matters @@ -282,7 +282,7 @@ the buffer to the file when the buffer fills (or a partial buffer upon file close if the buffer is not full). This IO buffering is not HDF5 or filesystem buffering - this is a an internal implementation here to improve performance. The IO buffer size is also an option (both here and in t he COMPAS C++ code). - + Users should bear in mind that the combination of HDF5 chunk size and HDF5 IO buffer size affect performance, storage space, and memory usage - so they may need to experiment to find a balance that suits their needs. @@ -340,7 +340,7 @@ def copyHDF5File(path, outFile, chunkSize = CHUNK_SIZE, bufferSize = IO_BUFFER_S ok = False # result outFname = os.path.abspath(outFile.filename) # fully-qualified output filename - + try: with h5.File(path, 'r') as srcFile: # open the input HDF5 file @@ -356,7 +356,7 @@ def copyHDF5File(path, outFile, chunkSize = CHUNK_SIZE, bufferSize = IO_BUFFER_S for srcGroupName in srcGroupNames: # for each source group if srcGroupName in excludeList: continue # skip it if required - + srcGroup = srcFile[srcGroupName] # source group try: @@ -366,7 +366,7 @@ def copyHDF5File(path, outFile, chunkSize = CHUNK_SIZE, bufferSize = IO_BUFFER_S destDatasetNames = list(destGroup.keys()) # list of datasets in destGroup in output file if len(destDatasetNames) > 0 and (len(destDatasetNames) != len(srcDatasetNames)): # destination group not empty and not same size as source - # print a warning that the group will noyt be copied, but continue + # print a warning that the group will noyt be copied, but continue # (just as though this group is an excluded group) print('Dataset count mismatch between source and destination for group', srcGroupName, 'in files', srcFname, 'and', outFname) print('WARNING: Group', srcGroupName, 'from file', srcFname, 'not copied to', outFname) @@ -458,14 +458,14 @@ def copyHDF5File(path, outFile, chunkSize = CHUNK_SIZE, bufferSize = IO_BUFFER_S # Processes file and directories in directory specified by 'path' parameter # Recursion is controlled by 'recursive' and 'depth' parameters -def processDirectory(path, - outFile, - recursive = 0, - fileFilter = '*.h5', - stopOnError = False, - depth = 0, - chunkSize = CHUNK_SIZE, - bufferSize = IO_BUFFER_SIZE, +def processDirectory(path, + outFile, + recursive = 0, + fileFilter = '*.h5', + stopOnError = False, + depth = 0, + chunkSize = CHUNK_SIZE, + bufferSize = IO_BUFFER_SIZE, excludeList = ''): ok = True # result @@ -479,9 +479,9 @@ def processDirectory(path, for filename in filenames: # for each filename if fnmatch(filename, fileFilter): # filename matches filter? - ok = copyHDF5File(absDirpath + '/' + filename, - outFile, - chunkSize = chunkSize, + ok = copyHDF5File(absDirpath + '/' + filename, + outFile, + chunkSize = chunkSize, bufferSize = bufferSize, excludeList = excludeList) # yes - copy the file @@ -493,13 +493,13 @@ def processDirectory(path, depth += 1 # increment recursion depth for dirname in dirnames: # for each directory - processDirectory(absDirpath + '/' + dirname, - outFile, - recursive = recursive, - fileFilter = fileFilter, - stopOnError = stopOnError, - depth = depth, - chunkSize = chunkSize, + processDirectory(absDirpath + '/' + dirname, + outFile, + recursive = recursive, + fileFilter = fileFilter, + stopOnError = stopOnError, + depth = depth, + chunkSize = chunkSize, bufferSize = bufferSize, excludeList = excludeList) # process the directory @@ -596,22 +596,22 @@ def main(): if os.path.exists(thisFullPath): # path exists? if os.path.isfile(thisFullPath): # yes - is it a file? if fnmatch(thisPath, fileFilter): # yes - filename matches filter? - ok = copyHDF5File(thisFullPath, - outFile, - chunkSize = args.chunk_size, - bufferSize = args.buffer_size, + ok = copyHDF5File(thisFullPath, + outFile, + chunkSize = args.chunk_size, + bufferSize = args.buffer_size, excludeList = excludeList) # yes - copy it else: # no - does not match filter print('Warning:', thisPath, 'does not match file filter (', fileFilter, '): ignored') # show warning elif os.path.isdir(thisFullPath): # not a file - directory? # yes - process directory - ok = processDirectory(thisFullPath, - outFile, - recursive = args.recursion_depth, - fileFilter = fileFilter, - stopOnError = args.stop_on_error, - chunkSize = args.chunk_size, - bufferSize = args.buffer_size, + ok = processDirectory(thisFullPath, + outFile, + recursive = args.recursion_depth, + fileFilter = fileFilter, + stopOnError = args.stop_on_error, + chunkSize = args.chunk_size, + bufferSize = args.buffer_size, excludeList = excludeList) else: # not a file or directory print('Warning:', thisFullPath, 'is not a file or a directory: ignored') # show warning @@ -629,4 +629,4 @@ def main(): print('Error:', str(e)) # announce error if __name__ == "__main__": - main() + main() diff --git a/compas_python_utils/h5sample.py b/compas_python_utils/h5sample.py index 578bf59ab..aecb1b2af 100644 --- a/compas_python_utils/h5sample.py +++ b/compas_python_utils/h5sample.py @@ -195,4 +195,4 @@ def main(): # pragma: no cover if __name__ == "__main__": # pragma: no cover - main() \ No newline at end of file + main() diff --git a/compas_python_utils/h5view.py b/compas_python_utils/h5view.py index 2b7eb6a99..9e19307a7 100644 --- a/compas_python_utils/h5view.py +++ b/compas_python_utils/h5view.py @@ -1,6 +1,6 @@ ''' -h5view.py +h5view.py This program displays summary, header and content information for specified COMPAS HDF5 file(s). It's fairly rudimetary - the HDF5 package provide h5dump and h5ls which have far more options @@ -49,7 +49,7 @@ Displays summary, header and content information for specified COMPAS HDF5 file(s). If none of --summary [-S], --headers [-H], or --contents [-C] are specified, --summary is assumed. -If any of --summary [-S], --headers [-H], or --contents [-C] are specified, then only the +If any of --summary [-S], --headers [-H], or --contents [-C] are specified, then only the option(s) specified are actioned. @@ -113,7 +113,7 @@ def getDataType(dType = ''): dataType = 'UNKNOWN' - + if dType == 'uint8' : dataType = 'BOOL' elif dType == 'uint16' : dataType = 'UNSIGNED_SHORT_INT' elif dType == 'uint32' : dataType = 'UNSIGNED_INT' @@ -121,9 +121,9 @@ def getDataType(dType = ''): elif dType == 'int16' : dataType = 'SHORT_INT' elif dType == 'int32' : dataType = 'INT' elif dType == 'int64' : dataType = 'LONG_INT' - elif dType == 'float32': dataType = 'FLOAT' + elif dType == 'float32': dataType = 'FLOAT' elif dType == 'float64': dataType = 'DOUBLE' - elif dType[0:2] == '|S': + elif dType[0:2] == '|S': strLen = int(dType[2:len(dType)]) - 1 # strip null terminator dataType = 'STRING(' + str(strLen) + ')' @@ -143,7 +143,7 @@ def getDataType(dType = ''): def printSummary(h5name = None, h5file = None, excludeList = ''): ok = True # result - + try: mtime = os.path.getmtime(h5name) # time file last modified @@ -158,7 +158,7 @@ def printSummary(h5name = None, h5file = None, excludeList = ''): print('\nFile size :', strFileSize.strip(), 'GB') print('Last modified:', lastModified) - # get widths for columns to be displayed - it's a bit more work, + # get widths for columns to be displayed - it's a bit more work, # and a bit redundant, but it is neater... (and we don't have thousands of files...) maxFilenameLen = -1 maxColumns = -1 @@ -248,13 +248,13 @@ def printSummary(h5name = None, h5file = None, excludeList = ''): # - column (dataset) name # - actual number of entries in the column (dataset) # - the COMPAS data type of the column (dataset) -# - the units for the column (dataset) (except for the Run_Deatils file - +# - the units for the column (dataset) (except for the Run_Deatils file - # columns (datasets) in the Run-Details file have no units) def printHeaders(h5name = None, h5file = None, excludeList = ''): ok = True # result - + try: print('\n\nHeaders for HDF5 file', h5name) @@ -427,7 +427,7 @@ def printHeaders(h5name = None, h5file = None, excludeList = ''): def printContents(h5name = None, h5file = None, excludeList = '', count = sys.maxsize, seeds = []): ok = True # result - + if count == 0: return ok # nothing to do try: @@ -444,19 +444,19 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma columns = list(h5file.keys()) hdr = '' - for column in columns: + for column in columns: if hdr == '': hdr += column # add value to hdr (first value) else : hdr += ', ' + column # add value to hdr (subsequent values) - print(hdr) - + print(hdr) + rows = len(h5file[columns[0]]) rowsPrinted = 0 - for idx in range(rows): + for idx in range(rows): printIt = True - index = rows - idx - 1 if count < 0 else idx # correct index - head or tail of file + index = rows - idx - 1 if count < 0 else idx # correct index - head or tail of file row = '' for column in h5file.keys(): @@ -475,7 +475,7 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma if dataType[0:6] == 'STRING': # string? if value[0:1] == "'": value = value[1:] # yes - strip leading quote if present if value[len(value)-1:len(value)] == "'": value = value[:-1] # strip trailing quote if present - value = value.strip() # strip leading and trailing blanks + value = value.strip() # strip leading and trailing blanks if row == '': row += str(value) # add value to output row (first value) else : row += ', ' + str(value) # add value to outputrow (subsequent values) @@ -504,17 +504,17 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma columns = list(h5file[Run_Details_Filename].keys()) hdr = '' - for column in columns: + for column in columns: if hdr == '': hdr += column # add value to hdr (first value) else : hdr += ', ' + column # add value to hdr (subsequent values) - print(hdr) - + print(hdr) + rows = len(h5file[Run_Details_Filename][columns[0]]) rowsPrinted = 0 for idx in range(rows): - index = rows - idx - 1 if count < 0 else idx # correct index - head or tail of file + index = rows - idx - 1 if count < 0 else idx # correct index - head or tail of file row = '' for column in h5file[Run_Details_Filename].keys(): @@ -529,7 +529,7 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma if dataType[0:6] == 'STRING': # string? if value[0:1] == "'": value = value[1:] # yes - strip leading quote if present if value[len(value)-1:len(value)] == "'": value = value[:-1] # strip trailing quote if present - value = value.strip() # strip leading and trailing blanks + value = value.strip() # strip leading and trailing blanks if row == '': row += str(value) # add value to output row (first value) else : row += ', ' + str(value) # add value to outputrow (subsequent values) @@ -542,7 +542,7 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma print() - + # do remaining files (groups) for group in h5file.keys(): if group in excludeList: continue # skip if excludedd @@ -557,19 +557,19 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma columns = list(h5file[group].keys()) hdr = '' - for column in columns: + for column in columns: if hdr == '': hdr += column # add value to hdr (first value) else : hdr += ', ' + column # add value to hdr (subsequent values) - print(hdr) - + print(hdr) + rows = len(h5file[group][columns[0]]) rowsPrinted = 0 - for idx in range(rows): + for idx in range(rows): printIt = True - index = rows - idx - 1 if count < 0 else idx # correct index - head or tail of file + index = rows - idx - 1 if count < 0 else idx # correct index - head or tail of file row = '' for column in h5file[group].keys(): @@ -588,7 +588,7 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma if dataType[0:6] == 'STRING': # string? if value[0:1] == "'": value = value[1:] # yes - strip leading quote if present if value[len(value)-1:len(value)] == "'": value = value[:-1] # strip trailing quote if present - value = value.strip() # strip leading and trailing blanks + value = value.strip() # strip leading and trailing blanks if row == '': row += str(value) # add value to output row (first value) else : row += ', ' + str(value) # add value to outputrow (subsequent values) @@ -603,7 +603,7 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma print() print('\n') - + except Exception as e: # error occurred accessing the input file print('printContents: Error accessing HDF5 file', h5name, ':', str(e)) ok = False @@ -625,7 +625,7 @@ def printContents(h5name = None, h5file = None, excludeList = '', count = sys.ma def viewHDF5File(path, excludeList = '', summary = True, headers = False, count = sys.maxsize, seeds = []): ok = True # result - + try: with h5.File(path, 'r') as srcFile: # open the input HDF5 file @@ -653,14 +653,14 @@ def viewHDF5File(path, excludeList = '', summary = True, headers = False, count # Processes file and directories in directory specified by 'path' parameter # Recursion is controlled by 'recursive' and 'depth' parameters -def processDirectory(path, - recursive = 0, - fileFilter = '*.h5', - stopOnError = False, - depth = 0, +def processDirectory(path, + recursive = 0, + fileFilter = '*.h5', + stopOnError = False, + depth = 0, excludeList = '', - summary = True, - headers = False, + summary = True, + headers = False, count = sys.maxsize, seeds = []): @@ -675,7 +675,7 @@ def processDirectory(path, for filename in filenames: # for each filename if fnmatch(filename, fileFilter): # filename matches filter? - ok = viewHDF5File(absDirpath + '/' + filename, + ok = viewHDF5File(absDirpath + '/' + filename, excludeList = excludeList, summary = summary, headers = headers, @@ -690,11 +690,11 @@ def processDirectory(path, depth += 1 # increment recursion depth for dirname in dirnames: # for each directory - processDirectory(absDirpath + '/' + dirname, - recursive = recursive, - fileFilter = fileFilter, - stopOnError = stopOnError, - depth = depth, + processDirectory(absDirpath + '/' + dirname, + recursive = recursive, + fileFilter = fileFilter, + stopOnError = stopOnError, + depth = depth, excludeList = excludeList, summary = summary, headers = headers, @@ -742,23 +742,23 @@ def main(): if os.path.exists(thisFullPath): # path exists? if os.path.isfile(thisFullPath): # yes - is it a file? if fnmatch(thisPath, fileFilter): # yes - filename matches filter? - ok = viewHDF5File(thisFullPath, + ok = viewHDF5File(thisFullPath, excludeList = excludeList, - summary = args.summary, - headers = args.headers, + summary = args.summary, + headers = args.headers, count = args.contents, seeds = args.seed_list) # yes - view it else: # no - does not match filter print('Warning:', thisPath, 'does not match file filter (', fileFilter, '): ignored') # show warning elif os.path.isdir(thisFullPath): # not a file - directory? # yes - process directory - ok = processDirectory(thisFullPath, - recursive = args.recursion_depth, - fileFilter = fileFilter, - stopOnError = args.stop_on_error, + ok = processDirectory(thisFullPath, + recursive = args.recursion_depth, + fileFilter = fileFilter, + stopOnError = args.stop_on_error, excludeList = excludeList, - summary = args.summary, - headers = args.headers, + summary = args.summary, + headers = args.headers, count = args.contents, seeds = args.seed_list) else: # not a file or directory diff --git a/compas_python_utils/preprocessing/COMPAS_Output_Definitions.txt b/compas_python_utils/preprocessing/COMPAS_Output_Definitions.txt index 9b4007167..6391efc4a 100644 --- a/compas_python_utils/preprocessing/COMPAS_Output_Definitions.txt +++ b/compas_python_utils/preprocessing/COMPAS_Output_Definitions.txt @@ -81,4 +81,4 @@ BSE_BE_Binaries_Rec ={} # set th # BSE Detailed Output -BSE_Detailed_Rec={} # set the specification to empty - nothing will be printed (file will not be created) \ No newline at end of file +BSE_Detailed_Rec={} # set the specification to empty - nothing will be printed (file will not be created) diff --git a/compas_python_utils/preprocessing/SSE_Grid.txt b/compas_python_utils/preprocessing/SSE_Grid.txt index 6bb0f0204..2995a27fd 100644 --- a/compas_python_utils/preprocessing/SSE_Grid.txt +++ b/compas_python_utils/preprocessing/SSE_Grid.txt @@ -1,10 +1,10 @@ ---initial-mass 36.32588335986214 --kick-magnitude-random 0.22624909470693577 --metallicity 0.0142 ---initial-mass 5.606575612328568 --kick-magnitude-random 0.3689824639824618 --metallicity 0.0142 ---initial-mass 11.20691874884929 --kick-magnitude-random 0.3792907803464646 --metallicity 0.0142 ---initial-mass 5.059278281829125 --kick-magnitude-random 0.6770037129805918 --metallicity 0.0142 ---initial-mass 6.990165346854218 --kick-magnitude-random 0.486502081144464 --metallicity 0.0142 ---initial-mass 20.112545900751257 --kick-magnitude-random 0.17673562339298687 --metallicity 0.0142 ---initial-mass 16.554960129185865 --kick-magnitude-random 0.12963901371350428 --metallicity 0.0142 ---initial-mass 19.16010622218186 --kick-magnitude-random 0.8774916458475752 --metallicity 0.0142 ---initial-mass 7.212376129897965 --kick-magnitude-random 0.5009827094374167 --metallicity 0.0142 ---initial-mass 17.67092839103423 --kick-magnitude-random 0.4027250560739488 --metallicity 0.0142 +--initial-mass 36.32588335986214 --kick-magnitude-random 0.22624909470693577 --metallicity 0.0142 +--initial-mass 5.606575612328568 --kick-magnitude-random 0.3689824639824618 --metallicity 0.0142 +--initial-mass 11.20691874884929 --kick-magnitude-random 0.3792907803464646 --metallicity 0.0142 +--initial-mass 5.059278281829125 --kick-magnitude-random 0.6770037129805918 --metallicity 0.0142 +--initial-mass 6.990165346854218 --kick-magnitude-random 0.486502081144464 --metallicity 0.0142 +--initial-mass 20.112545900751257 --kick-magnitude-random 0.17673562339298687 --metallicity 0.0142 +--initial-mass 16.554960129185865 --kick-magnitude-random 0.12963901371350428 --metallicity 0.0142 +--initial-mass 19.16010622218186 --kick-magnitude-random 0.8774916458475752 --metallicity 0.0142 +--initial-mass 7.212376129897965 --kick-magnitude-random 0.5009827094374167 --metallicity 0.0142 +--initial-mass 17.67092839103423 --kick-magnitude-random 0.4027250560739488 --metallicity 0.0142 diff --git a/compas_python_utils/preprocessing/compasConfigDefault.yaml b/compas_python_utils/preprocessing/compasConfigDefault.yaml index f01e21860..6c7c0b856 100644 --- a/compas_python_utils/preprocessing/compasConfigDefault.yaml +++ b/compas_python_utils/preprocessing/compasConfigDefault.yaml @@ -293,7 +293,7 @@ stringChoices: # --pulsar-birth-spin-period-distribution: 'NORMAL' # Default: 'NORMAL' # Options: ['NORMAL','UNIFORM'] # --remnant-mass-prescription: 'MULLERMANDEL' # Default: 'MULLERMANDEL' # Options: ['MALTSEV2024','SCHNEIDER2020ALT','SCHNEIDER2020','MULLERMANDEL','MULLER2016','FRYER2022','FRYER2012','BELCZYNSKI2002','HURLEY2000'] - ### LOGFILES AND OUTPUTS + ### LOGFILES AND OUTPUTS # --logfile-type: 'HDF5' # Default: 'HDF5' # Options: ['TXT','TSV','CSV','HDF5'] # --logfile-name-prefix: '' # Default: '' # --logfile-definitions: '' # Default: '' @@ -309,7 +309,7 @@ stringChoices: # --output-path: '.' # Default: '.' -listChoices: +listChoices: # --log-classes: { } # Default: { } # --debug-classes: { } # Default: { } diff --git a/compas_python_utils/preprocessing/runSubmit.py b/compas_python_utils/preprocessing/runSubmit.py index 68ed4c00d..76555b074 100644 --- a/compas_python_utils/preprocessing/runSubmit.py +++ b/compas_python_utils/preprocessing/runSubmit.py @@ -84,7 +84,7 @@ def __init__(self, config_file=DEFAULT_CONFIG_FILE, grid_filename=None, if (compas_logs_output_override is None): self.stringChoices['--output-path'] = os.getcwd() # names the directory to be created and in which log files are created. Default in COMPAS is "COMPAS_Output" - self.stringChoices['--output-container'] = output_directory + self.stringChoices['--output-container'] = output_directory else: self.stringChoices['--output-path'] = compas_logs_output_override self.stringChoices['--output-container'] = output_directory diff --git a/compas_python_utils/preprocessing/sampleMoeDiStefano.py b/compas_python_utils/preprocessing/sampleMoeDiStefano.py index caa751884..b234b1aba 100644 --- a/compas_python_utils/preprocessing/sampleMoeDiStefano.py +++ b/compas_python_utils/preprocessing/sampleMoeDiStefano.py @@ -1,27 +1,27 @@ """ -Sampler for the correlated parameter distributions of -primary mass, mass ratio, period, and eccentricity -(M1, q, P, e) of isolated singles, binaries, and higher +Sampler for the correlated parameter distributions of +primary mass, mass ratio, period, and eccentricity +(M1, q, P, e) of isolated singles, binaries, and higher order systems on the Main Sequence, following Moe & DiStefano 2017. -This script is modified from the original IDL script +This script is modified from the original IDL script by Max Moe, converted into python by Mads Sorensen, and adapted for COMPAS by Reinhold Willcox. See: https://arxiv.org/abs/1808.06488 -The output of this script is a grid file suitable for +The output of this script is a grid file suitable for COMPAS input of parameters for single stars, isolated binaries, and the inner binary of higher order systems. -The properties of the outer components of higher order +The properties of the outer components of higher order systems are not calculated, but they can be understood to be stable since they come directly from the observations, -which must necessarily only include stable systems +which must necessarily only include stable systems (and not, e.g, chaotic triples). -Due to the correlated nature of these parameters, it is not +Due to the correlated nature of these parameters, it is not straightforward to supply alternative constraints, e.g including only short period systems. Thus the only free -parameters are the maximum and minimum total mass, +parameters are the maximum and minimum total mass, and the number of systems sampled. To change these, set them within the `if __name__ == "__main__":` function at the bottom of this file. @@ -99,73 +99,73 @@ def createParameterDistributionsAndSampler(testing=False): # 0.8 < M1 < 40 (where we have statistics corrected for selection effects) M1v = np.power(10, (np.linspace(0,1,101)*(np.log10(40.)-np.log10(0.8))+np.log10(0.8))) - + # 0.15 < log P < 8.0 logPv = np.linspace(0,157,158)*0.05+0.15 - + # 0.10 < q < 1.00 qv = np.linspace(0.1,1,91) - + # 0.0001 < e < 0.9901 # set minimum to non-zero value to avoid numerical errors ev = np.linspace(0,0.99,100)+0.0001 - + # Note that companions outside this parameter space (e.g., q < 0.1, # log P (days) > 8.0) are not constrained in M+D16 and therefore # not considered. - - + + # Number of elements within each respective vector numM1 = 101 numlogP = 158 numq = 91 nume = 100 - - + + # Distribution functions - define here, but evaluate within for loops. - + # Frequency of companions with q > 0.1 per decade of orbital period. # Bottom panel in Fig. 36 of M+D16 flogP_sq = np.zeros([numlogP,numM1]) - - + + # Given M1 and P, the cumulative distribution of mass ratios q cumqdist = np.zeros([numq,numlogP,numM1]) - + # Given M1 and P, the cumulative distribution of eccentricities e cumedist = np.zeros([nume,numlogP,numM1]) - + # Given M1 and P, the probability that the companion # is a member of the inner binary (currently an approximation). # 100% for log P < 1.5, decreases with increasing P probbin = np.zeros([numlogP,numM1]) - - + + # Given M1, the cumulative period distribution of the inner binary # Normalized so that max(cumPbindist) = total binary frac. (NOT unity) cumPbindist = np.zeros([numlogP,numM1]) - - + + # Slope alpha of period distribution across intermediate periods # 2.7 - DlogP < log P < 2.7 + DlogP, see Section 9.3 and Eqn. 23. # Slightly updated from version 1. alpha = 0.018 DlogP = 0.7 - - + + # Heaviside function for twins with 0.95 < q < 1.00 H = qv*0. ind = np.where(qv >= 0.95) H[ind] = 1.0 H = H/idl_tabulate(qv,H) #normalize so that integral is unity - - + + # Relevant indices with respect to mass ratio indlq = np.where(qv >= 0.3) indsq = np.where(qv < 0.3) indq0p3 = np.min(indlq) - - + + # Loop through primary mass for i in range(0, numM1): myM1 = M1v[i] @@ -174,18 +174,18 @@ def createParameterDistributionsAndSampler(testing=False): logPtwin = 8.-myM1 # Eqn. 7a if (myM1 >= 6.5): logPtwin = 1.5 # Eqn. 7b - + # Frequency of companions with q > 0.3 at different orbital periods # and dependent on M1 only section 9.3 (slightly modified since v1) flogPle1 = 0.020 + 0.04*np.log10(myM1) + 0.07*np.log10(myM1)*np.log10(myM1) # Eqn. 20 flogPeq2p7 = 0.039 + 0.07*np.log10(myM1) + 0.01*np.log10(myM1)*np.log10(myM1) # Eqn. 21 flogPeq5p5 = 0.078 - 0.05*np.log10(myM1) + 0.04*np.log10(myM1)*np.log10(myM1) # Eqn. 22 - + # Loop through orbital period P for j in range(0, numlogP): mylogP = logPv[j] - - + + # Given M1 and P, set excess twin fraction section 9.1 and Eqn. 5 if (mylogP <= 1.): Ftwin = FtwinlogPle1 @@ -193,14 +193,14 @@ def createParameterDistributionsAndSampler(testing=False): Ftwin = FtwinlogPle1*(1.- (mylogP-1)/(logPtwin-1.)) if (mylogP >= logPtwin): Ftwin = 0. - - + + # Power-law slope gamma_largeq for M1 < 1.2 Msun and various P Eqn. 9 if (mylogP <= 5.0): gl_1p2 = -0.5 else: #(mylogP > 5.0): gl_1p2 = -0.5-0.3*(mylogP-5.0) - + # Power-law slope gamma_largeq for M1 = 3.5 Msun and various P Eqn. 10 if (mylogP <= 1.0): gl_3p5 = -0.5 @@ -210,7 +210,7 @@ def createParameterDistributionsAndSampler(testing=False): gl_3p5 = -1.2-0.4*(mylogP-4.5) else: #(mylogP > 6.5): gl_3p5 = -2.0 - + # Power-law slope gamma_largeq for M1 > 6 Msun and various P Eqn. 11 if (mylogP <= 1.0): gl_6 = -0.5 @@ -220,7 +220,7 @@ def createParameterDistributionsAndSampler(testing=False): gl_6 = -1.4-0.3*(mylogP-2.) else: #(mylogP > 4.0): gl_6 = -2.0 - + # Given P, interpolate gamma_largeq w/ respect to M1 at myM1 if (myM1 <= 1.2): gl = gl_1p2 @@ -232,11 +232,11 @@ def createParameterDistributionsAndSampler(testing=False): gl = np.interp(np.log10(myM1), np.log10([3.5,6.0]), [gl_3p5,gl_6]) else: #(myM1 > 6.0): gl = gl_6 - - + + # Power-law slope gamma_smallq for M1 < 1.2 Msun and all P Eqn. 13 gs_1p2 = 0.3 - + # Power-law slope gamma_smallq for M1 = 3.5 Msun and various P Eqn. 14 if (mylogP <= 2.5): gs_3p5 = 0.2 @@ -244,7 +244,7 @@ def createParameterDistributionsAndSampler(testing=False): gs_3p5 = 0.2-0.3*(mylogP-2.5) else: #(mylogP > 5.5): gs_3p5 =-0.7-0.2*(mylogP-5.5) - + # Power-law slope gamma_smallq for M1 > 6 Msun and various P Eqn. 15 if (mylogP <= 1.0): gs_6 = 0.1 @@ -254,7 +254,7 @@ def createParameterDistributionsAndSampler(testing=False): gs_6 =-0.2-0.50*(mylogP-3.) else: #(mylogP > 5.6): gs_6 =-1.5 - + # Given P, interpolate gamma_smallq w/ respect to M1 at myM1 if (myM1 <= 1.2): gs = gs_1p2 @@ -264,8 +264,8 @@ def createParameterDistributionsAndSampler(testing=False): gs = np.interp(np.log10(myM1),np.log10([3.5,6.0]),[gs_3p5,gs_6]) else: #(myM1 > 6.0): gs = gs_6 - - + + # Given Ftwin, gamma_smallq, and gamma_largeq at the specified M1 & P, # tabulate the cumulative mass ratio distribution across 0.1 < q < 1.0 fq = np.power(qv,gl) # slope across 0.3 < q < 1.0 @@ -275,13 +275,13 @@ def createParameterDistributionsAndSampler(testing=False): cumfq = np.cumsum(fq)-fq[0] # cumulative distribution cumfq = cumfq/np.max(cumfq) # normalize cumfq(q=1.0) = 1 cumqdist[:,j,i] = cumfq # save to grid - - + + # Given M1 and P, q_factor is the ratio of all binaries 0.1 < q < 1.0 # to those with 0.3 < q < 1.0 q_factor = idl_tabulate(qv,fq) - - + + # Given M1 & P, calculate power-law slope eta of eccentricity dist. if (mylogP >= 0.7): # For log P > 0.7 use fits in Section 9.2. @@ -293,8 +293,8 @@ def createParameterDistributionsAndSampler(testing=False): # For log P < 0.7, set eta to fitted values at log P = 0.7 eta_3 = -2.9 eta_7 = -0.1 - - + + # Given P, interpolate eta with respect to M1 at myM1 if (myM1 <= 3.): eta = eta_3 @@ -302,8 +302,8 @@ def createParameterDistributionsAndSampler(testing=False): eta = np.interp(np.log10(myM1),np.log10([3.,7.]),[eta_3, eta_7]) else: #(myM1 > 7.): eta = eta_7 - - + + # Given eta at the specified M1 and P, tabulate eccentricity distribution if (np.power(10,mylogP) <= 2.): # For P < 2 days, assume all systems are close to circular @@ -320,12 +320,12 @@ def createParameterDistributionsAndSampler(testing=False): ind = np.where((ev >= 0.8*e_max)&(ev <= 1.0*e_max)) ind_cont = np.min(ind)-1 fe[ind] = np.interp(ev[ind],[0.8*e_max,1.0*e_max],[fe[ind_cont],0.]) - + cumfe = np.cumsum(fe)-fe[0] # cumulative distribution cumfe = cumfe/np.max(cumfe) # normalize cumfe(e=e_max) = 1 cumedist[:,j,i] = cumfe # save to grid - - + + # Given constants alpha and DlogP and # M1 dependent values flogPle1, flogPeq2p7, and flogPeq5p5, # calculate frequency flogP of companions with q > 0.3 per decade @@ -340,12 +340,12 @@ def createParameterDistributionsAndSampler(testing=False): flogP = flogPeq2p7+alpha*DlogP+(mylogP-2.7-DlogP)/(2.8-DlogP)*(flogPeq5p5-flogPeq2p7-alpha*DlogP) else: #(mylogP > 5.5): flogP = flogPeq5p5*np.exp(-0.3*(mylogP-5.5)) - - + + # Convert frequency of companions with q > 0.3 to frequency of # companions with q > 0.1 according to q_factor save to grid flogP_sq[j,i] = flogP*q_factor - + # Calculate prob. that a companion to M1 with period P is the # inner binary. Currently this is an approximation. # 100% for log P < 1.5 @@ -359,13 +359,13 @@ def createParameterDistributionsAndSampler(testing=False): probbin[j,i] = 1.0 - 0.11* np.power(mylogP-1.5, 1.43) *np.power(myM1/10, 0.56) if (probbin[j,i] <= 0.): probbin[j,i] = 0. - + # Given M1, calculate cumulative binary period distribution mycumPbindist = np.cumsum(flogP_sq[:,i]*probbin[:,i]) - flogP_sq[0,i]*probbin[0,i] # Normalize so that max(cumPbindist) = total binary star fraction (NOT 1) mycumPbindist = mycumPbindist/np.max(mycumPbindist)*idl_tabulate(logPv,flogP_sq[:,i]*probbin[:,i]) cumPbindist[:,i] = mycumPbindist # save to grid - + """ # @@ -375,13 +375,13 @@ def createParameterDistributionsAndSampler(testing=False): # single stars and binaries from the grids of distributions # """ - - + + # Create vector for PRIMARY mass function, which is the mass distribution # of single stars and primaries in binaries. # This is NOT the IMF, which is the mass distribution of single stars, # primaries in binaries, and secondaries in binaries. - + # Full primary mass vector across 0.08 < M1 < 150 if testing: nPoints = 1000 @@ -404,19 +404,19 @@ def createParameterDistributionsAndSampler(testing=False): # Cumulative primary mass distribution function cumfM1 = np.cumsum(fM1)-fM1[0] cumfM1 = cumfM1/np.max(cumfM1) - + # Define sampler function def parameterSampler(M1min=5.0): # Minimum primary mass to generate (must be >0.080 Msun) - + # Value of primary mass CDF where M1 = M1min cumf_M1min = np.interp(M1min,M1,cumfM1) - + # Select primary M1 > M1min from primary mass function myM1 = np.interp(cumf_M1min+(1.0-cumf_M1min)*np.random.rand(),cumfM1,M1) - + # Find index of M1v that is closest to myM1. # For M1 = 40 - 150 Msun, adopt binary statistics of M1 = 40 Msun. # For M1 = 0.08 - 0.8 Msun, adopt P and e dist of M1 = 0.8Msun, @@ -425,35 +425,35 @@ def parameterSampler(M1min=5.0): # and truncate the q distribution so that q > q_min = 0.08/M1 indM1 = np.where(abs(myM1-M1v) == min(abs(myM1-M1v))) indM1 = indM1[0] - - + + # Given M1, determine cumulative binary period distribution mycumPbindist =(cumPbindist[:,indM1]).flatten() # If M1 < 0.8 Msun, rescale to appropriate binary star fraction if (myM1 <= 0.8): mycumPbindist = mycumPbindist*np.interp(np.log10(myM1),np.log10([0.08,0.8]),[0.0,1.0]) - - + + # Given M1, determine the binary star fraction mybinfrac = np.max(mycumPbindist) - - + + # Generate random number myrand between 0 and 1 myrand = np.random.rand() - - + + # If random number < binary star fraction, generate a binary if (myrand < mybinfrac): # Given myrand, select P and corresponding index in logPv mylogP = np.interp(myrand,mycumPbindist,logPv) indlogP = np.where(abs(mylogP-logPv) == min(abs(mylogP-logPv))) indlogP = indlogP[0] - - + + # Given M1 & P, select e from eccentricity distribution mye = np.interp(np.random.rand(),cumedist[:,indlogP,indM1].flatten(),ev) - - + + # Given M1 & P, determine mass ratio distribution. # If M1 < 0.8 Msun, truncate q distribution and consider # only mass ratios q > q_min = 0.08 / M1 @@ -468,23 +468,23 @@ def parameterSampler(M1min=5.0): # Set probability = 0 where q < q_min indq = np.where(qv <= q_min) mycumqdist[indq] = 0.0 - + # Given M1 & P, select q from cumulative mass ratio distribution myq = np.interp(np.random.rand(),mycumqdist,qv) - - + + # Print M1, q, P & e to file myM2 = myq*myM1 myP = np.power(10, mylogP) - + else: # If instead random number > binary star fraction, generate single star - + # Set dummy variables so that the single star is really run in a wide binary myM2 = 0.1 myP = 1e8 # very wide mye = 0 - + return myM1, myM2, myP, mye return parameterSampler @@ -507,7 +507,7 @@ def createParameterGridfile(gridname, nSamples, m1Min=5, m1Max=100, testing=Fals # Need to explicitly toss samples > m1Max if m1 > m1Max: continue # don't include in overall count - nEntries += 1 + nEntries += 1 fwrite.write('--initial-mass-1 {} --initial-mass-2 {} --orbital-period {} --eccentricity {}\n'.format(m1, m2, P, e)) diff --git a/compas_python_utils/preprocessing/stroopwafelInterface.py b/compas_python_utils/preprocessing/stroopwafelInterface.py index c52ce4d78..1e49ba430 100644 --- a/compas_python_utils/preprocessing/stroopwafelInterface.py +++ b/compas_python_utils/preprocessing/stroopwafelInterface.py @@ -13,13 +13,13 @@ # TODO add in functionality for alternative runSubmit names and locations ####################################################### -### +### ### For User Instructions, see 'docs/sampling.md' -### +### ####################################################### -### Include options from local runSubmit + compasConfigDefault files +### Include options from local runSubmit + compasConfigDefault files userunSubmit = False #If false, use stroopwafel defaults ### Set default stroopwafel inputs - these are overwritten by any command-line arguments @@ -29,7 +29,7 @@ output_folder = 'output/' # Location of output folder (relative to cwd) # Note: overrides runSubmit + compasConfigDefault.yaml value random_seed_base = 0 # The initial random seed to increment from # Note: overrides runSubmit + compasConfigDefault.yaml value -num_cores = 4 # Number of cores to parallelize over +num_cores = 4 # Number of cores to parallelize over num_per_core = 250 # Number of binaries per batch mc_only = True # Exclude adaptive importance sampling (currently not implemented, leave set to True) run_on_hpc = False # Run on slurm based cluster HPC @@ -41,7 +41,7 @@ def create_dimensions(): """ This Function that will create all the dimensions for stroopwafel, a dimension is basically one of the variables you want to sample Invoke the Dimension class to create objects for each variable. Look at the Dimension class definition in classes.py for more. - It takes the name of the dimension, its max and min value. + It takes the name of the dimension, its max and min value. The Sampler class will tell how to sample this dimension. Similarly, prior tells it how it calculates the prior. You can find more of these in their respective modules OUT: As Output, this should return a list containing all the instances of Dimension class. @@ -60,11 +60,11 @@ def create_dimensions(): def update_properties(locations, dimensions): """ - This function is not mandatory, it is required only if you have some dependent variable. + This function is not mandatory, it is required only if you have some dependent variable. For example, if you want to sample Mass_1 and q, then Mass_2 is a dependent variable which is product of the two. Similarly, you can assume that Metallicity_2 will always be equal to Metallicity_1 IN: - locations (list(Location)) : A list containing objects of Location class in classes.py. + locations (list(Location)) : A list containing objects of Location class in classes.py. You can play with them and update whatever fields you like or add more in the property (which is a dictionary) OUT: Not Required """ @@ -98,7 +98,7 @@ def configure_code_run(batch): This function tells stroopwafel what program to run, along with its arguments. IN: batch(dict): This is a dictionary which stores some information about one of the runs. It has an number key which stores the unique id of the run - It also has a subprocess which will run under the key process. Rest, it depends on the user. User is free to store any information they might need later + It also has a subprocess which will run under the key process. Rest, it depends on the user. User is free to store any information they might need later for each batch run in this dictionary. For example, here I have stored the 'output_container' and 'grid_filename' so that I can read them during discovery of interesting systems below OUT: compas_args (list(String)) : This defines what will run. It should point to the executable file along with the arguments. @@ -123,7 +123,7 @@ def interesting_systems(batch): batch (dict): As input you will be given the current batch which just finished its execution. You can take in all the keys you defined in the configure_code_run method above OUT: Number of interesting systems - In the below example, I define all the NSs as interesting, so I read the files, get the SEED from the system_params file and define the key is_hit in the end for all interesting systems + In the below example, I define all the NSs as interesting, so I read the files, get the SEED from the system_params file and define the key is_hit in the end for all interesting systems """ try: folder = os.path.join(output_folder, batch['output_container']) @@ -289,4 +289,4 @@ def main(): if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/misc/cicd-scripts/centos-dependencies b/misc/cicd-scripts/centos-dependencies index 6c552cd3b..372f51ca5 100644 --- a/misc/cicd-scripts/centos-dependencies +++ b/misc/cicd-scripts/centos-dependencies @@ -9,4 +9,4 @@ yum -y install boost boost-thread boost-devel yum -y install gsl yum -y install gsl-devel yum -y install hdf5 -yum -y group install "Development Tools" \ No newline at end of file +yum -y group install "Development Tools" diff --git a/misc/examples/Tutorials/DataAnalysis.py b/misc/examples/Tutorials/DataAnalysis.py index 09c64ad64..3bcb11fdc 100644 --- a/misc/examples/Tutorials/DataAnalysis.py +++ b/misc/examples/Tutorials/DataAnalysis.py @@ -45,7 +45,7 @@ import matplotlib.pyplot as plt #for plotting # Import COMPAS specific scripts -compasRootDir = os.environ['COMPAS_ROOT_DIR'] +compasRootDir = os.environ['COMPAS_ROOT_DIR'] sys.path.append(compasRootDir + 'postProcessing/PythonScripts') from compasUtils import printCompasDetails, getEventHistory, getEventStrings @@ -73,7 +73,7 @@ Data = h5.File(pathToData) print(list(Data.keys())) -# The output above represents the event categories available from the particular run. If you used the output produced in the previous tutorial, you should see `['BSE_Common_Envelopes', 'BSE_Double_Compact_Objects', 'BSE_RLOF', 'BSE_Supernovae', 'BSE_System_Parameters', 'Run_Details']`. Note that for smaller runs which do not produce any of a particular type of output, the output category will not be created. +# The output above represents the event categories available from the particular run. If you used the output produced in the previous tutorial, you should see `['BSE_Common_Envelopes', 'BSE_Double_Compact_Objects', 'BSE_RLOF', 'BSE_Supernovae', 'BSE_System_Parameters', 'Run_Details']`. Note that for smaller runs which do not produce any of a particular type of output, the output category will not be created. # # Brief description of the categories: # - 'BSE_System_Parameters': Initial state of the binary @@ -95,7 +95,7 @@ print(SPs.keys()) -# One of the most important parameters in the COMPAS output is the system seed. The seed represents the unique identifier to a specific system in a simulation. It is also used as the seed value in random number generation, which is useful when trying to reproduce a given system identically. +# One of the most important parameters in the COMPAS output is the system seed. The seed represents the unique identifier to a specific system in a simulation. It is also used as the seed value in random number generation, which is useful when trying to reproduce a given system identically. # # If we want to view, say, the random seeds in the system parameters file, we run @@ -136,15 +136,15 @@ # A useful function that builds off of `getEventHistory` is `getEventStrings`, which collects the event information into a succinct string, which may be easier to read (once you get used to the syntax). # # The syntax for the event strings takes the following convention: -# +# # - For MT events: # - P>S, P, < is RLOF (1->2 or 1<-2) or = for CEE # # - For SN events: -# - P\*SR for star1 the SN progenitor, or +# - P\*SR for star1 the SN progenitor, or # - R\*SP for star2 the SN progenitor, -# - where P is progenitor type, R is remnant type, +# - where P is progenitor type, R is remnant type, # S is state (I for intact, U for unbound) # # Event strings for the same seed are ordered chronologically and separated by the undesrcore character `_` @@ -158,7 +158,7 @@ # # 2. Slicing the data # -# Since the random seed is unique and constant for a given binary, the properties and events of the binary system can be recovered by looking at its seed across different output categories. +# Since the random seed is unique and constant for a given binary, the properties and events of the binary system can be recovered by looking at its seed across different output categories. # # Here we introduce the basics of manipulating the data using the seeds. We provide an example on how we get the initial parameters of systems that ended up forming double compact objects. # @@ -170,15 +170,15 @@ def calculateTotalMassesNaive(pathData=None): Data = h5.File(pathToData) - + totalMasses = [] - + # Retrieve the categories SPs = Data['BSE_System_Parameters'] DCs = Data['BSE_Double_Compact_Objects'] - - # For syntax see section 1 - + + # For syntax see section 1 + # Extract parameters of interest seedsDC = DCs['SEED'][()] seedsSP = SPs['SEED'][()] @@ -205,14 +205,14 @@ def calculateTotalMassesNaive(pathData=None): end = time.time() timeDiffNaive = end-start -print('%s seconds, using for loops.' %(timeDiffNaive)) +print('%s seconds, using for loops.' %(timeDiffNaive)) # - # # Optimizing the above loop # # ## 0 - Use built-in numpy routines -# Numpy arrays can make use of a powerful library of optimization tools which allow the user to bypass computationally heavy for loops. +# Numpy arrays can make use of a powerful library of optimization tools which allow the user to bypass computationally heavy for loops. # # For example, we can speed up the calculation of the element-wise sum of two arrays with: @@ -221,19 +221,19 @@ def calculateTotalMassesNaive(pathData=None): m1Zams = SPs['Mass@ZAMS(1)'][()] m2Zams = SPs['Mass@ZAMS(2)'][()] - + mTotalAllSystems = np.add(m1Zams, m2Zams) # - # ## 1 - Use boolean masks in a single file -# Where previously we put the condition in an if statement nested within a for loop, now we again make use of boolean masks to filter out the undesired elements. +# Where previously we put the condition in an if statement nested within a for loop, now we again make use of boolean masks to filter out the undesired elements. # # The boolean array must have the same length as the input array. # + # Create a boolean array from the total mass array which is True -# if the total mass of the corresponding system is less than 40. +# if the total mass of the corresponding system is less than 40. maskMTotLessThan40 = (mTotalAllSystems <= 40) # - @@ -243,7 +243,7 @@ def calculateTotalMassesNaive(pathData=None): # seeds of systems with total mass below 40 seedsMtotBelow40 = seedsSP[maskMTotLessThan40] -# Note that this works because the order of the two columns (seeds and total masses) are the same. +# Note that this works because the order of the two columns (seeds and total masses) are the same. # # For example, the total mass of the third system entry corresponds to the seed at the third system entry. @@ -253,11 +253,11 @@ def calculateTotalMassesNaive(pathData=None): # # Before we continue it is useful to understand how the COMPAS-popsynth printing works. # -# Each simulated system will be initialized only once and so will have only one line in the `BSE_System_Parameters` file. However, lines in `BSE_RLOF` are created whenever a system goes through a mass transfer event, which might happen multiple times for a single system, or potentially not at all. Similarly, in the `BSE_Supernovae` file, you will find at most two lines per system, but possibly none. `BSE_Double_Compact_Objects` lines are printed only when the final system is intact and composed of either Neutron Stars or Black Holes, which is a rare event that happens at most once per system. +# Each simulated system will be initialized only once and so will have only one line in the `BSE_System_Parameters` file. However, lines in `BSE_RLOF` are created whenever a system goes through a mass transfer event, which might happen multiple times for a single system, or potentially not at all. Similarly, in the `BSE_Supernovae` file, you will find at most two lines per system, but possibly none. `BSE_Double_Compact_Objects` lines are printed only when the final system is intact and composed of either Neutron Stars or Black Holes, which is a rare event that happens at most once per system. # # For this reason, it is in general not the case that the system on line $n$ of one file corresponds will match the system on line $n$ of another file. # -# In order to match systems across files, we need to extract the seeds of desired systems from one file, and apply them as a mask in the other file. +# In order to match systems across files, we need to extract the seeds of desired systems from one file, and apply them as a mask in the other file. # + # Example: calculate the primary ZAMS mass of systems which become DCOs (Double Compact Objects) @@ -283,25 +283,25 @@ def calculateTotalMassesNaive(pathData=None): def calculateTotalMassesOptimized(pathData=None): Data = h5.File(pathToData) - + totalMasses = [] - + # Retrieve the categories SPs = Data['BSE_System_Parameters'] DCs = Data['BSE_Double_Compact_Objects'] - - # For syntax see section 1 - + + # For syntax see section 1 + # Extract parameters of interest seedsDC = DCs['SEED'][()] seedsSP = SPs['SEED'][()] m1Zams = SPs['Mass@ZAMS(1)'][()] m2Zams = SPs['Mass@ZAMS(2)'][()] - + mZamsTot = np.add(m1Zams, m2Zams) maskSeedsBecameDCO = np.in1d(seedsSP, seedsDC) mZamsTotOfDCOs = mZamsTot[maskSeedsBecameDCO] - + Data.close() return mZamsTotOfDCOs @@ -317,12 +317,12 @@ def calculateTotalMassesOptimized(pathData=None): nrDCOs = len(seedsDC) print('Compare') -print('%s seconds, using For Loops.' %(timeDiffNaive)) -print('%s seconds, using Optimizations.' %(timeDiffOptimized)) +print('%s seconds, using For Loops.' %(timeDiffNaive)) +print('%s seconds, using Optimizations.' %(timeDiffOptimized)) print('Using %s DCO systems' %(nrDCOs)) # - -# *Note:* The time difference will depend heavily on the number of systems under investigation, as well as the number of bypassed For Loops. If you used the path to the pre-generated tutorial data set (with few, intentionally specified systems), you should see very little improvement. +# *Note:* The time difference will depend heavily on the number of systems under investigation, as well as the number of bypassed For Loops. If you used the path to the pre-generated tutorial data set (with few, intentionally specified systems), you should see very little improvement. # Test that the two arrays are in fact identical print(np.array_equal(mTotOld, mTotNew)) @@ -334,9 +334,9 @@ def calculateTotalMassesOptimized(pathData=None): def calculateTotalMassesDNS(pathToData=None): Data = h5.File(pathToData) - + totalMasses = [] - + SPs = Data['BSE_System_Parameters'] DCs = Data['BSE_Double_Compact_Objects'] @@ -346,17 +346,17 @@ def calculateTotalMassesDNS(pathToData=None): dcMaskDNS = (stype1 == 13) & (stype2 == 13) seedsDNS = seedsDC[dcMaskDNS] - + # Get info from ZAMS seedsSP = SPs['SEED'][()] m1Zams = SPs['Mass@ZAMS(1)'][()] m2Zams = SPs['Mass@ZAMS(2)'][()] - - mZamsTot = np.add(m1Zams, m2Zams) - + + mZamsTot = np.add(m1Zams, m2Zams) + spMaskDNS = np.in1d(seedsSP, seedsDNS) mZamsTotDNS = mZamsTot[spMaskDNS] - + Data.close() return mZamsTotDNS @@ -370,8 +370,8 @@ def calculateTotalMassesDNS(pathToData=None): # calculate number of DNS systems nrDNSs = len(mTotDNS) - -print('%s seconds for all %s DNS systems.' %(timeDiffDNS, nrDNSs)) + +print('%s seconds for all %s DNS systems.' %(timeDiffDNS, nrDNSs)) # - # The `printCompasDetails` function can also optionally take a mask as argument. This is especially useful for those output categories which have multiple events for a single seed. Using both seeds and mask inputs can help to extract a specific type of event from several for the given seeds. @@ -390,7 +390,7 @@ def calculateTotalMassesDNS(pathToData=None): # ## Example 2 # -# The previous example uses the fact that both SystemParameters and DoubleCompactObjects only print at most one line per system. However, as mentioned above, events such as supernovae or common envelopes might happen multiple times to a given system, and as a result there would be multiple occurrences of a given seed in the relevant file. +# The previous example uses the fact that both SystemParameters and DoubleCompactObjects only print at most one line per system. However, as mentioned above, events such as supernovae or common envelopes might happen multiple times to a given system, and as a result there would be multiple occurrences of a given seed in the relevant file. # # To account for this, we will need to modify the previous method. Consider again the 4 seeds of the previous example. Both 2 and 4 formed a DCO and hence both stars in these binaries went SN. Seeds 1 and 3 are low mass stars hence they did not go SN. (Note that we do not specify the companion masses for any of these systems, but for simplicity we assume that the companions to 1 and 3 are also sufficiently low mass to not produce a supernova). The SN file prints one line per SN and therefore seeds 2 and 4 appear twice each. # @@ -418,7 +418,7 @@ def calculateTotalMassesDNS(pathToData=None): # Determine which seeds experienced at least 1 CCSN maskCCSN = snType == 1 -seedsCCSN, countsCCSN = np.unique(seedsSN[maskCCSN], return_counts=True) +seedsCCSN, countsCCSN = np.unique(seedsSN[maskCCSN], return_counts=True) # Seeds with 2 CCSNe will have a countsCCSN value of 2 seedsDoubleCCSN = seedsCCSN[countsCCSN == 2] @@ -435,7 +435,7 @@ def calculateTotalMassesDNS(pathToData=None): # # 3. Visualizing the data # -# Although math is the fundamental basis of physics and astrophysics, we cannot always easily convert numbers and equations into a coherent picture. Plotting is therefore a vital tool in bridging the gap between raw data and a deeper scientific understanding. +# Although math is the fundamental basis of physics and astrophysics, we cannot always easily convert numbers and equations into a coherent picture. Plotting is therefore a vital tool in bridging the gap between raw data and a deeper scientific understanding. # # *Disclaimer:* # @@ -496,7 +496,7 @@ def calculateTotalMassesDNS(pathToData=None): ax2.set_ylabel('CDF values', rotation=270, labelpad=15) ax2.grid(False) -# Scatter plot +# Scatter plot ax3 = axes[1] ax3.scatter(m1, m2) ax3.set_xlabel(r'M1 [$M_\odot$]', fontsize=smallfontsize) diff --git a/misc/examples/Tutorials/Overview.py b/misc/examples/Tutorials/Overview.py index 7c2d586f6..a8cfa4a88 100644 --- a/misc/examples/Tutorials/Overview.py +++ b/misc/examples/Tutorials/Overview.py @@ -19,7 +19,7 @@ # ## Introduction # -# Welcome to the post-processing documentation of the COMPAS code. In here, you will find scripts used to manipulate the data and calculate rates/weights/samples to place the results of the simulation into a scientific context. +# Welcome to the post-processing documentation of the COMPAS code. In here, you will find scripts used to manipulate the data and calculate rates/weights/samples to place the results of the simulation into a scientific context. # # We provide a series of jupyter/ipython notebooks and 'raw' python scripts. The notebooks show how to call the python scripts and the involved syntax. All notebooks are made into html pages for easy reading and indexing of available material. # @@ -44,6 +44,6 @@ # ### [Basic Data Analysis in Python:](DataAnalysis.ipynb) # Slicing, binning, plotting # -# +# # ### [Implementing Cosmic Integration:](CosmicIntegration.ipynb) # Merger rates, redshift, MSSFR diff --git a/misc/examples/Tutorials/README.txt b/misc/examples/Tutorials/README.txt index c85fe2603..ab953165a 100644 --- a/misc/examples/Tutorials/README.txt +++ b/misc/examples/Tutorials/README.txt @@ -10,22 +10,22 @@ Started 19th July 2019 This folder contains a series of scripts and notebooks -to help/guide a user in handling of the data from a -COMPAS simulation. This is a collaborative effort and +to help/guide a user in handling of the data from a +COMPAS simulation. This is a collaborative effort and no single person should claim authorship. -The post-processing is done with a combination of -python scripts and ipython notebooks. Numpy +The post-processing is done with a combination of +python scripts and ipython notebooks. Numpy will drop support for python 2.X. Hence the python scripts -and the notebooks will be in python 3.X. +and the notebooks will be in python 3.X. Notes etc are in ipython notebook, they are mirrored by their htmls allowing for linked pages in a web environment. The plain python scripts are also in the respective folders. -I.e. the scripts related to h5 files are in the h5 folder +I.e. the scripts related to h5 files are in the h5 folder -You can either read through the htmls made with an example data-set +You can either read through the htmls made with an example data-set starting by opening the overview.html Alternatively you can navigate to this directory and type: @@ -35,7 +35,4 @@ Open the notebook of interest and set the path to your personal COMPASOutput.h5 and run the notebooks on your own data. -Good luck.... - - - +Good luck.... diff --git a/misc/examples/Tutorials/WorkingWithHDF5.py b/misc/examples/Tutorials/WorkingWithHDF5.py index c63d9666c..bf1c2505a 100644 --- a/misc/examples/Tutorials/WorkingWithHDF5.py +++ b/misc/examples/Tutorials/WorkingWithHDF5.py @@ -15,7 +15,7 @@ # # Introduction # -# COMPAS simulations produce all output by default in the form of an [HDF5 file](https://www.hdfgroup.org/solutions/hdf5/), which is a compact and memory efficient, but non-human-readable data file format. In order to interact with these output files, we use the python module `h5py`. +# COMPAS simulations produce all output by default in the form of an [HDF5 file](https://www.hdfgroup.org/solutions/hdf5/), which is a compact and memory efficient, but non-human-readable data file format. In order to interact with these output files, we use the python module `h5py`. # # Within each file are a variety of HDF5 Groups, representing a specific common event in binary evolution, e.g Roche-Lobe Overflow or Supernovae. These are described throughout the post-processing jupyter notebooks. @@ -23,16 +23,16 @@ # # ### [1) Producing HDF5 output ](#1.-Producing-HDF5-output) # How to run default COMPAS and produce a simple output file. -# +# # ### [2) Reading HDF5 files ](#2.-Reading-HDF5-files) # The basics and syntax of loading an HDF5 file. -# +# # ### [3) Rewriting HDF5 files ](#3.-Rewriting-HDF5-files) # How to rewrite/reduce the HDF5 data. -# ### For the following sections, you will need to have the following python packages installed. +# ### For the following sections, you will need to have the following python packages installed. # ### `numpy, h5py, pandas` # @@ -41,7 +41,7 @@ import h5py as h5 #for handling data format # Import COMPAS root and python script directories -compasRootDir = os.environ['COMPAS_ROOT_DIR'] +compasRootDir = os.environ['COMPAS_ROOT_DIR'] tutorialDir = compasRootDir + '/postProcessing/Tutorial/' # Import COMPAS specific scripts @@ -76,7 +76,7 @@ # # ## Here we show the basic h5 file syntax for how to load and close the file, and extract/inspect the data. # -# While working with this notebook, feel free to change the data file used to see how it affects the output. For the purpose of consistency and ensuring that our examples work properly, the default data file `'COMPAS_Output_tutorial.h5'` has been pre-run using precisely chosen input parameters, specified in `'tutorial_grid.txt'`. +# While working with this notebook, feel free to change the data file used to see how it affects the output. For the purpose of consistency and ensuring that our examples work properly, the default data file `'COMPAS_Output_tutorial.h5'` has been pre-run using precisely chosen input parameters, specified in `'tutorial_grid.txt'`. # # If the default data file is accidentally deleted, it can be reconstructed by running: # @@ -87,7 +87,7 @@ # + # Set the appropriate path to the data file -pathToH5 = tutorialDir + 'COMPAS_Tutorial_Output.h5' +pathToH5 = tutorialDir + 'COMPAS_Tutorial_Output.h5' Data = h5.File(pathToH5) # - @@ -119,7 +119,7 @@ # ## Closing the Data # # Accessing a single h5file from multiple scripts is not always possible. -# With notebooks, sometimes closing the notebook is not enough to have it +# With notebooks, sometimes closing the notebook is not enough to have it # close the h5data. Therefore we recommend to close the h5file explicitly after # the calculations are done # @@ -136,14 +136,14 @@ # ## Here we show how you can reduce your data. You need to decide: # # ### - Which data categories (or HDF5 groups) you want to include -# ### - Which seeds and parameters from each data category. +# ### - Which seeds and parameters from each data category. # ## Load the Data # + # Set the appropriate paths to the input and output data files pathToDataInput = pathToH5 # use the output from the run above -pathToDataOutput = tutorialDir + '/COMPAS_Output/COMPAS_Output_reduced.h5' +pathToDataOutput = tutorialDir + '/COMPAS_Output/COMPAS_Output_reduced.h5' Data = h5.File(pathToDataInput) print("The main files I have at my disposal are:\n",list(Data.keys())) @@ -157,15 +157,15 @@ # ### Hypothetical Example # -# Suppose you are studying Double Neutron Star systems, and you want to know the initial parameters of both components. Suppose you are separately curious about the eccentricity of systems following a Supernova that leaves the binary intact, and you want to use the same COMPAS run to save on CPU*hours. +# Suppose you are studying Double Neutron Star systems, and you want to know the initial parameters of both components. Suppose you are separately curious about the eccentricity of systems following a Supernova that leaves the binary intact, and you want to use the same COMPAS run to save on CPU*hours. # -# To be safe, you should probably keep the entire BSE_System_Parameters file, which contains all of the initial system settings. +# To be safe, you should probably keep the entire BSE_System_Parameters file, which contains all of the initial system settings. # # To get information about only Double Neutron Stars, you will need to create a mask for them from the BSE_Double_Compact_Objects file. # -# Information on post-SN eccentricity and whether or not the system disrupted is found in the BSE_Supernovae file. +# Information on post-SN eccentricity and whether or not the system disrupted is found in the BSE_Supernovae file. # -# You will not need any other files. You will also want to grab the system 'SEED's column from any file, since that is the unique identifier of the binaries. +# You will not need any other files. You will also want to grab the system 'SEED's column from any file, since that is the unique identifier of the binaries. # + ### For each data category, give a list of parameters you want to include @@ -206,7 +206,7 @@ -### Create seedsOfInterest dictionary +### Create seedsOfInterest dictionary seedsOfInterest = {'BSE_System_Parameters': seedsSP, 'BSE_Double_Compact_Objects': seedsDNS, 'BSE_Supernovae': seedsIntact diff --git a/misc/examples/methods_paper_plots/detailed_evolution/Grid_demo.txt b/misc/examples/methods_paper_plots/detailed_evolution/Grid_demo.txt index 0cc4b8a0b..e976d3eec 100644 --- a/misc/examples/methods_paper_plots/detailed_evolution/Grid_demo.txt +++ b/misc/examples/methods_paper_plots/detailed_evolution/Grid_demo.txt @@ -1,2 +1,2 @@ ---initial-mass-1 35.0 --initial-mass-2 31.0 --metallicity 0.001 --eccentricity 0.000000e+00 --semi-major-axis 3.5 --kick-magnitude-1 0 --kick-magnitude-2 0 ---initial-mass-1 35.0 --initial-mass-2 31.0 --metallicity 0.001 --eccentricity 0.000000e+00 --semi-major-axis 3.6 --kick-magnitude-1 0 --kick-magnitude-2 0 +--initial-mass-1 35.0 --initial-mass-2 31.0 --metallicity 0.001 --eccentricity 0.000000e+00 --semi-major-axis 3.5 --kick-magnitude-1 0 --kick-magnitude-2 0 +--initial-mass-1 35.0 --initial-mass-2 31.0 --metallicity 0.001 --eccentricity 0.000000e+00 --semi-major-axis 3.6 --kick-magnitude-1 0 --kick-magnitude-2 0 diff --git a/misc/examples/methods_paper_plots/detailed_evolution/example_bbh_compas_config.yaml b/misc/examples/methods_paper_plots/detailed_evolution/example_bbh_compas_config.yaml index f0a4a60ae..4d50d185a 100644 --- a/misc/examples/methods_paper_plots/detailed_evolution/example_bbh_compas_config.yaml +++ b/misc/examples/methods_paper_plots/detailed_evolution/example_bbh_compas_config.yaml @@ -5,26 +5,26 @@ booleanChoices: --debug-to-file: False --detailed-output: True # WARNING! this creates a data heavy file --enable-warnings: False # option to enable/disable warning messages - --errors-to-file: False + --errors-to-file: False --evolve-unbound-systems: False --population-data-printing: False --print-bool-as-string: False - --quiet: False + --quiet: False --rlof-printing: True --store-input-files: True - --switch-log: False + --switch-log: False ### STELLAR PROPERTIES - --check-photon-tiring-limit: False + --check-photon-tiring-limit: False --use-mass-loss: True ### BINARY PROPERTIES - --allow-touching-at-birth: False # record binaries that have stars touching at birth in output files - ### MASS TRANSFER + --allow-touching-at-birth: False # record binaries that have stars touching at birth in output files + ### MASS TRANSFER --angular-momentum-conservation-during-circularisation: False - --allow-rlof-at-birth: True # allow binaries that have one or both stars in RLOF at birth to evolve, particularly useful in the context of CHE binaries. + --allow-rlof-at-birth: True # allow binaries that have one or both stars in RLOF at birth to evolve, particularly useful in the context of CHE binaries. --circularise-binary-during-mass-transfer: True --hmxr-binaries: False - --mass-transfer: True - --retain-core-mass-during-caseA-mass-transfer: False + --mass-transfer: True + --retain-core-mass-during-caseA-mass-transfer: False ### COMMON ENVELOPE --common-envelope-allow-immediate-RLOF-post-CE-survive: False --common-envelope-allow-main-sequence-survive: True # Allow main sequence stars to survive CE. Was previously False by default @@ -51,7 +51,7 @@ numericalChoices: --logfile-rlof-parameters-record-types: -1 --logfile-supernovae-record-types: -1 --logfile-system-parameters-record-types: -1 - --grid-lines-to-process: + --grid-lines-to-process: --grid-start-line: 0 --hdf5-chunk-size: 100000 --hdf5-buffer-size: 1 @@ -61,7 +61,7 @@ numericalChoices: --number-of-systems: 10 # number of systems per batch --timestep-multiplier: 1 # optional multiplier relative to default time step duration ### STELLAR PROPERTIES - --cool-wind-mass-loss-multiplier: 1.0 + --cool-wind-mass-loss-multiplier: 1.0 --initial-mass: # initial mass for SSE --initial-mass-min: 5.0 # use 5.0 for DCOs [Msol] --initial-mass-max: 150.0 # stellar tracks extrapolated above 50 Msol (Hurley+2000) [Msol] @@ -82,13 +82,13 @@ numericalChoices: --eccentricity-max: 1.0 --initial-mass-1: # primary initial mass for BSE --initial-mass-2: # secondary initial mass for BSE - --mass-ratio: + --mass-ratio: --mass-ratio-min: 0.01 --mass-ratio-max: 1.0 --minimum-secondary-mass: 0.1 # Brown dwarf limit [Msol] --orbital-period: # orbital period for BSE --orbital-period-min: 1.1 # [days] - --orbital-period-max: 1000 # [days] + --orbital-period-max: 1000 # [days] --semi-major-axis: # semi-major axis for BSE --semi-major-axis-min: 0.01 # [AU] --semi-major-axis-max: 1000.0 # [AU] @@ -121,16 +121,16 @@ numericalChoices: --common-envelope-alpha: 1.0 --common-envelope-alpha-thermal: 1.0 # lambda = alpha_th*lambda_b + (1-alpha_th)*lambda_g --common-envelope-lambda: 0.1 # Only if using 'LAMBDA_FIXED' - --common-envelope-lambda-multiplier: 1.0 # Multiply common envelope lambda by some constant + --common-envelope-lambda-multiplier: 1.0 # Multiply common envelope lambda by some constant --common-envelope-mass-accretion-constant: 0 --common-envelope-mass-accretion-max: 0.10 # For 'MACLEOD+2014' [Msol] - --common-envelope-mass-accretion-min: 0.04 # For 'MACLEOD+2014' [Msol] + --common-envelope-mass-accretion-min: 0.04 # For 'MACLEOD+2014' [Msol] --common-envelope-recombination-energy-density: 1.5E13 - --common-envelope-slope-kruckow: -0.83333333333 + --common-envelope-slope-kruckow: -0.83333333333 --maximum-mass-donor-nandez-ivanova: 2.0 ### SUPERNOVAE, KICKS AND REMNANTS - --eddington-accretion-factor: 1 # multiplication Factor for eddington accretion onto NS&BH - --fix-dimensionless-kick-magnitude: -1.0 + --eddington-accretion-factor: 1 # multiplication Factor for eddington accretion onto NS&BH + --fix-dimensionless-kick-magnitude: -1.0 --fryer-22-fmix: 0.5 # parameter describing mixing growth time when using the 'FRYER2022' remnant mass prescription --fryer-22-mcrit: 5.75 # critical mass for BH formation when using the 'FRYER2022' remnant mass prescription --kick-direction-power: 0.0 @@ -157,7 +157,7 @@ numericalChoices: --muller-mandel-kick-multiplier-BH: 200.0 # scaling prefactor for BH kicks when using the 'MULLERMANDEL' kick magnitude distribution --muller-mandel-kick-multiplier-NS: 400.0 # scaling prefactor for NS kicks when using the 'MULLERMANDEL' kick magnitude distribution --muller-mandel-sigma-kick: 0.3 # kick scatter when using the 'MULLERMANDEL' kick magnitude distribution - --neutrino-mass-loss-BH-formation-value: 0.1 + --neutrino-mass-loss-BH-formation-value: 0.1 --pisn-lower-limit: 60.0 # Minimum core mass for PISN [Msol] --pisn-upper-limit: 135.0 # Maximum core mass for PISN [Msol] --ppi-lower-limit: 35.0 # Minimum core mass for PPI [Msol] @@ -174,10 +174,10 @@ numericalChoices: stringChoices: ### LOGISTICS --grid: 'Grid_demo.txt' # grid file name (e.g. 'mygrid.txt') - --mode: 'BSE' # evolving single stars (SSE) or binaries (BSE) - --notes: - --notes-hdrs: - --output-container: + --mode: 'BSE' # evolving single stars (SSE) or binaries (BSE) + --notes: + --notes-hdrs: + --output-container: ### STELLAR PROPERTIES --chemically-homogeneous-evolution: 'PESSIMISTIC' # chemically homogeneous evolution. Options are 'NONE', 'OPTIMISTIC' and 'PESSIMISTIC' --envelope-state-prescription: 'LEGACY' @@ -191,19 +191,19 @@ stringChoices: --mass-ratio-distribution: 'FLAT' --orbital-period-distribution: 'FLATINLOG' --rotational-velocity-distribution: 'ZERO' - --semi-major-axis-distribution: 'FLATINLOG' + --semi-major-axis-distribution: 'FLATINLOG' ### MASS TRANSFER - --case-BB-stability-prescription: 'ALWAYS_STABLE' + --case-BB-stability-prescription: 'ALWAYS_STABLE' --critical-mass-ratio-prescription: 'NONE' - --stellar-zeta-prescription: 'SOBERMAN' + --stellar-zeta-prescription: 'SOBERMAN' --mass-transfer-angular-momentum-loss-prescription: 'ISOTROPIC' --mass-transfer-accretion-efficiency-prescription: 'THERMAL' --mass-transfer-rejuvenation-prescription: 'STARTRACK' --mass-transfer-thermal-limit-accretor: 'CFACTOR' ### COMMON ENVELOPE - --common-envelope-formalism: 'ENERGY' - --common-envelope-lambda-prescription: 'LAMBDA_NANJING' # Xu & Li 2010 - --common-envelope-mass-accretion-prescription: 'ZERO' + --common-envelope-formalism: 'ENERGY' + --common-envelope-lambda-prescription: 'LAMBDA_NANJING' # Xu & Li 2010 + --common-envelope-mass-accretion-prescription: 'ZERO' ### SUPERNOVAE, KICKS AND REMNANTS --black-hole-kicks: 'FALLBACK' --fryer-supernova-engine: 'DELAYED' @@ -213,12 +213,12 @@ stringChoices: --neutrino-mass-loss-BH-formation: "FIXED_MASS" # "FIXED_FRACTION" --pulsar-birth-magnetic-field-distribution: 'ZERO' --pulsar-birth-spin-period-distribution: "ZERO" - --remnant-mass-prescription: 'FRYER2012' - ### LOGFILES AND OUTPUTS + --remnant-mass-prescription: 'FRYER2012' + ### LOGFILES AND OUTPUTS # set the logfile names here # # set to None (e.g. logfile_BSE_supernovae = None) to use the default filename - # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename + # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename # set to empty string (e.g. logfile_BSE_supernovae = '""') to disable logging for that file (the file will not be created) # # We don't really need the 'BSE' or 'SSE' prefixes any more - they were put there because @@ -226,26 +226,25 @@ stringChoices: # created by a COMPAS run - especially the detailed output files. Now that the output # files are created inside a containing folder for each run there is really no need for # the prefixes - and if we don't have the prefixes we can share some of the options - # (e.g. specifying the supernovae filename doesn't need to have separate options for + # (e.g. specifying the supernovae filename doesn't need to have separate options for # SSE and BSE - we really just need one (we only ever run in one mode or the other)) # # For now though, I'll leave them as is - we can change this when (if) we decide to # drop the prefixes --logfile-type: 'HDF5' - --logfile-name-prefix: + --logfile-name-prefix: --logfile-definitions: --logfile-common-envelopes: - --logfile-detailed-output: - --logfile-double-compact-objects: - --logfile-pulsar-evolution: - --logfile-rlof-parameters: + --logfile-detailed-output: + --logfile-double-compact-objects: + --logfile-pulsar-evolution: + --logfile-rlof-parameters: --logfile-supernovae: --logfile-switch-log: --logfile-system-parameters: --output-path: ## listChoices -listChoices: +listChoices: --log-classes: [] --debug-classes: [] - diff --git a/misc/examples/methods_paper_plots/detailed_evolution/run.sh b/misc/examples/methods_paper_plots/detailed_evolution/run.sh index cba9656ff..b8feb2ab6 100644 --- a/misc/examples/methods_paper_plots/detailed_evolution/run.sh +++ b/misc/examples/methods_paper_plots/detailed_evolution/run.sh @@ -5,5 +5,3 @@ echo "Generating detailed evolution plot" compas_plot_detailed_evolution "./COMPAS_Output/Detailed_Output/BSE_Detailed_Output_0.h5" --dont-show >> example_bbh.log echo "Out files:" ls -l - - diff --git a/misc/examples/methods_paper_plots/detailed_evolution/runSubmitDemo.py b/misc/examples/methods_paper_plots/detailed_evolution/runSubmitDemo.py index 42b2ac5c6..fa333c765 100644 --- a/misc/examples/methods_paper_plots/detailed_evolution/runSubmitDemo.py +++ b/misc/examples/methods_paper_plots/detailed_evolution/runSubmitDemo.py @@ -21,28 +21,28 @@ def __init__(self, config_file='compasConfigDefault.yaml', grid_filename=None, r # if COMPAS_EXECUTABLE_PATH is not set (== None) we assume this is an # interactive run with python3 # if COMPAS_EXECUTABLE_PATH is set (!= None) we assume this is a run - # inside a docker container - we have different directories inside a + # inside a docker container - we have different directories inside a # docker container (src, obj, bin), and the COMPAS executable resides # in the bin directory (rather than the src directory) - + # Load yaml file with options with open(config_file) as file: # The FullLoader parameter handles the conversion from YAML # scalar values to Python the dictionary format config = yaml.load(file, Loader=yaml.FullLoader) - + self.booleanChoices = config['booleanChoices'] self.numericalChoices = config['numericalChoices'] self.stringChoices = config['stringChoices'] self.listChoices = config['listChoices'] - + if self.booleanChoices is None: self.booleanChoices = {} if self.numericalChoices is None: self.numericalChoices = {} if self.stringChoices is None: self.stringChoices = {} if self.listChoices is None: self.listChoices = {} compas_executable_override = os.environ.get('COMPAS_EXECUTABLE_PATH') - print('compas_executable_override', compas_executable_override) + print('compas_executable_override', compas_executable_override) if (compas_executable_override is None): # Make sure you have set and exported the COMPAS_ROOT_DIR environment variable @@ -52,7 +52,7 @@ def __init__(self, config_file='compasConfigDefault.yaml', grid_filename=None, r self.compas_executable = compas_executable_override # If random_seed_filename is specified, overwrite the random seed from the yaml file - if os.path.isfile(random_seed_filename): + if os.path.isfile(random_seed_filename): self.numericalChoices['--random-seed'] = int(np.loadtxt(random_seed_filename)) # If grid is specified in pythonProgramOptions(), ignore the values from yaml file @@ -75,22 +75,22 @@ def __init__(self, config_file='compasConfigDefault.yaml', grid_filename=None, r # if COMPAS_LOGS_OUTPUT_DIR_PATH is not set (== None) the current working directory # is used as the value for the --output-path option compas_logs_output_override = os.environ.get('COMPAS_LOGS_OUTPUT_DIR_PATH') - + if (compas_logs_output_override is None): self.stringChoices['--output-path'] = os.getcwd() self.stringChoices['--output-container'] = output_directory # names the directory to be created and in which log files are created. Default in COMPAS is "COMPAS_Output" else: self.stringChoices['--output-path'] = compas_logs_output_override - self.stringChoices['--output-container'] = output_directory - - + self.stringChoices['--output-container'] = output_directory + + # environment variable COMPAS_INPUT_DIR_PATH is used primarily for docker runs # if COMPAS_INPUT_DIR_PATH is set (!= None) it is prepended to input filenames # (such as grid_filename and logfile_definitions) # if COMPAS_INPUT_DIR_PATH is not set (== None) the current working directory # is prepended to input filenames compas_input_path_override = os.environ.get('COMPAS_INPUT_DIR_PATH') - + if self.grid_filename != None: if compas_input_path_override == None: self.grid_filename = os.getcwd() + '/' + self.grid_filename @@ -109,41 +109,41 @@ def __init__(self, config_file='compasConfigDefault.yaml', grid_filename=None, r self.logfile_definitions = compas_input_path_override + '/' + self.logfile_definitions self.makeCommandString() - + def makeCommandString(self): """ - This function generates a dictionary mapping COMPAS options to their specified + This function generates a dictionary mapping COMPAS options to their specified values (or empty strings for boolean options). These are then combined into a string that can be run directly as a terminal command, or passed to the stroopwafel interface - where some of them may be overwritten. Options not to be included in the command + where some of them may be overwritten. Options not to be included in the command line should be set to pythons None (except booleans, which should be set to False) """ ### Collect all options into a dictionary mapping option name to option value - self.command = {'compas_executable' : self.compas_executable} + self.command = {'compas_executable' : self.compas_executable} for boolKey, boolVal in self.booleanChoices.items(): if boolVal is True: - self.command.update({boolKey: ''}) + self.command.update({boolKey: ''}) else: - self.command.update({boolKey: 'FALSE'}) - + self.command.update({boolKey: 'FALSE'}) + for numKey, numVal in self.numericalChoices.items(): if not numVal == None: - self.command.update({numKey : str(numVal)}) - + self.command.update({numKey : str(numVal)}) + for strKey, strVal in self.stringChoices.items(): if not strVal == None: self.command.update({strKey: strVal}) - + for listKey, listVal in self.listChoices.items(): if listVal: self.command.update({listKey : ' '.join(map(str, listVal))}) - + # Ensure the Compas executable is first, and not repeated. # Options are non-ordered. self.shellCommand = self.command['compas_executable'] - del self.command['compas_executable'] + del self.command['compas_executable'] for key, val in self.command.items(): self.shellCommand += ' ' + key + ' ' + val diff --git a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/COMPAS_Output_Definitions.txt b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/COMPAS_Output_Definitions.txt index 3568ba7e0..dc9ef8847 100644 --- a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/COMPAS_Output_Definitions.txt +++ b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/COMPAS_Output_Definitions.txt @@ -30,4 +30,3 @@ BSE_DCO_Rec += { STAR_1_PROPERTY::MASS_TRANSFER_DONOR_HISTORY, STAR_2_PROPERTY::MASS_TRANSFER_DONOR_HISTORY, } - diff --git a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/Fig16_pythonSubmit.py b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/Fig16_pythonSubmit.py index fa5c40100..0876f62e2 100644 --- a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/Fig16_pythonSubmit.py +++ b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/Fig16_pythonSubmit.py @@ -22,7 +22,7 @@ class pythonProgramOptions: # if COMPAS_EXECUTABLE_PATH is not set (== None) we assume this is an # interactive run with python3 # if COMPAS_EXECUTABLE_PATH is set (!= None) we assume this is a run - # inside a docker container - we have different directories inside a + # inside a docker container - we have different directories inside a # docker container (src, obj, bin), and the COMPAS executable resides # in the bin directory (rather than the src directory) compas_executable_override = os.environ.get('COMPAS_EXECUTABLE_PATH') @@ -82,7 +82,7 @@ class pythonProgramOptions: if grid_filename != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(grid_filename) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required grid_filename = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -95,7 +95,7 @@ class pythonProgramOptions: if logfile_definitions != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(grid_filename) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required logfile_definitions = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -292,7 +292,7 @@ class pythonProgramOptions: # set the logfile names here # # set to None (e.g. logfile_BSE_supernovae = None) to use the default filename - # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename + # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename # set to empty string (e.g. logfile_BSE_supernovae = '""') to disable logging for that file (the file will not be created) # # We don't really need the 'BSE' or 'SSE' prefixes any more - they were put there because @@ -300,7 +300,7 @@ class pythonProgramOptions: # created by a COMPAS run - especially the detailed output files. Now that the output # files are created inside a containing folder for each run there is really no need for # the prefixes - and if we don't have the prefixes we can share some of the options - # (e.g. specifying the supernovae filename doesn't need to have separate options for + # (e.g. specifying the supernovae filename doesn't need to have separate options for # SSE and BSE - we really just need one (we only ever run in one mode or the other)) # # For now though, I'll leave them as is - we can change this when (if) we decide to @@ -681,10 +681,10 @@ def listCommands(self): def generateCommandLineOptionsDict(self): """ - This function generates a dictionary mapping COMPAS options to their specified + This function generates a dictionary mapping COMPAS options to their specified values (or empty strings for boolean options). These can be combined into a string and run directly as a terminal command, or passed to the stroopwafel interface - where some of them may be overwritten. Options not to be included in the command + where some of them may be overwritten. Options not to be included in the command line should be set to pythons None (except booleans, which should be set to False) Parameters diff --git a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/README.md b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/README.md index 3535d3266..55bef24fb 100644 --- a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/README.md +++ b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/README.md @@ -17,4 +17,3 @@ The data can be reproduced by running version `02.21.00` of COMPAS, ```:::bash python FastCosmicIntegration.py --mu0 0.035 --muz -0.23 --sigma0 0.39 --sigmaz 0.0 --alpha 0.0 --weight mixture_weight --zstep 0.01 --sens O3 --m1min 10. --aSF 0.01 --bSF 2.77 --cSF 2.9 --dSF 4.7 ``` - diff --git a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/make_fig_16.py b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/make_fig_16.py index ac84f309d..d5b305aeb 100644 --- a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/make_fig_16.py +++ b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/make_fig_16.py @@ -24,7 +24,7 @@ # # # **** -# ## Data +# ## Data # The data used for this figure is publicly available at: https://zenodo.org/record/5655483 # # This data set contains the output of 10,000,000 binaries evolved using COMPAS 02.21.00, using adaptive importance sampling (STROOPWAFEL, Broekgaarden et al. 2019), sampling from a metallicity uniform in $\log(Z) \in [10^{-4},0.03]$. More details can be found in `Run_Details.txt`. @@ -41,7 +41,7 @@ # # # ```:::bash -# python FastCosmicIntegration.py --mu0 0.035 --muz -0.23 --sigma0 0.39 --sigmaz 0.0 --alpha 0.0 --weight mixture_weight --zstep 0.01 --sens O3 --m1min 10. --aSF 0.01 --bSF 2.77 --cSF 2.9 --dSF 4.7 +# python FastCosmicIntegration.py --mu0 0.035 --muz -0.23 --sigma0 0.39 --sigmaz 0.0 --alpha 0.0 --weight mixture_weight --zstep 0.01 --sens O3 --m1min 10. --aSF 0.01 --bSF 2.77 --cSF 2.9 --dSF 4.7 # ``` # # @@ -60,7 +60,7 @@ import matplotlib.pyplot as plt from scipy import stats -import sys +import sys ###################################### fileLoc = '/Users/lieke/Downloads/output/' @@ -98,9 +98,9 @@ rate_key = 'Rates_mu00.035_muz-0.23_alpha0.0_sigma00.39_sigmaz0.0' ################################################ ## Read merger rate related data -DCO_mask = File[rate_key]['DCOmask'][()] # Mask from DCO to merging BBH +DCO_mask = File[rate_key]['DCOmask'][()] # Mask from DCO to merging BBH redshifts = File[rate_key]['redshifts'][()] # Redshifts at which the rates were calculated -O1_detection_rate = File[rate_key]['detection_rateO3'][()] # detection rate for O1 sensitivity +O1_detection_rate = File[rate_key]['detection_rateO3'][()] # detection rate for O1 sensitivity # Read the DCO masses, Select only merging BBHs Mass1 = File['BSE_Double_Compact_Objects']['Mass(1)'][DCO_mask] @@ -120,7 +120,7 @@ ###################################### def Mchirp(m1, m2): chirp_mass = np.divide(np.power(np.multiply(m1, m2), 3./5.), np.power(np.add(m1, m2), 1./5.)) - return chirp_mass + return chirp_mass # Calculate the chrip mass Mchirp = Mchirp(M_moreMassive, M_lessMassive) @@ -153,14 +153,14 @@ def Mchirp(m1, m2): # - ################################# -# Nice little progressbar script +# Nice little progressbar script # to know how far you are with bootstrapping def progressbar(it, prefix="", size=60, file=sys.stdout): count = len(it) def show(j): x = int(size*j/count) file.write("%s[%s%s] %i/%i\r" % (prefix, "#"*x, "."*(size-x), j, count)) - file.flush() + file.flush() show(0) for i, item in enumerate(it): yield item @@ -178,15 +178,15 @@ def show(j): ######################## -# Plot the Histogram +# Plot the Histogram hist, bin_edge = np.histogram(x_vals, weights = Weights, bins = Bins) -ax.bar(center_bins, hist/binwidth, width= binwidth, color='white', fill=False, edgecolor=colors,lw = 1.) +ax.bar(center_bins, hist/binwidth, width= binwidth, color='white', fill=False, edgecolor=colors,lw = 1.) ######################## # Add the KDE kernel = stats.gaussian_kde(x_vals, bw_method=0.1, weights=Weights) # plot the KDE at these x-ticks -x_KDE = np.arange(0,40,0.5) +x_KDE = np.arange(0,40,0.5) center_KDEbins = (x_KDE[:-1] + x_KDE[1:])/2. # Re-normalise the KDE y_vals = kernel(center_KDEbins)*sum(hist) @@ -201,7 +201,7 @@ def show(j): if bootstrap: indices = np.arange(len(x_vals)) hist_vals = np.zeros((bootstraps, len(x_KDE))) #center_bins - + for b in progressbar( range(len(hist_vals)), "Bootstrapping: "): boot_index = np.random.choice(indices, size=len(indices), replace=True) @@ -213,11 +213,11 @@ def show(j): # calculate 1- and 2- sigma percentiles percentiles = np.percentile(hist_vals, [15.89, 84.1, 2.27, 97.725], axis=0) median = np.percentile(hist_vals, [50], axis=0) - + ax.fill_between(x_KDE, percentiles[0],percentiles[1], alpha=0.4, color=colors, zorder = 11) # 1-sigma - ax.fill_between(x_KDE, percentiles[2], percentiles[3],alpha=0.2, color=colors, zorder = 10) # 2-sgima + ax.fill_between(x_KDE, percentiles[2], percentiles[3],alpha=0.2, color=colors, zorder = 10) # 2-sgima + - ######################################### # plot values ax.set_xlim(0,40) @@ -232,5 +232,3 @@ def show(j): # - - - diff --git a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/stroopwafel_interface.py b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/stroopwafel_interface.py index 57605915b..f32dd8be8 100644 --- a/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/stroopwafel_interface.py +++ b/misc/examples/methods_paper_plots/fig_16_Chirpmass_distribution/stroopwafel_interface.py @@ -13,13 +13,13 @@ # TODO add in functionality for alternative pythonSubmit names and locations ####################################################### -### +### ### For User Instructions, see 'docs/sampling.md' -### +### ####################################################### -### Include options from local pythonSubmit file +### Include options from local pythonSubmit file usePythonSubmit = True #If false, use stroopwafel defaults ### Set default stroopwafel inputs - these are overwritten by any command-line arguments @@ -29,7 +29,7 @@ output_folder = '../../output' # Location of output folder (relative to cwd) # Note: overrides pythonSubmit value random_seed_base = 0 # The initial random seed to increment from # Note: overrides pythonSubmit value -num_cores = 50 # Number of cores to parallelize over +num_cores = 50 # Number of cores to parallelize over num_per_core = int(1e4) # Number of binaries per batch mc_only = False # Exclude adaptive importance sampling (currently not implemented, leave set to True) run_on_hpc = True # Run on slurm based cluster HPC @@ -46,7 +46,7 @@ def create_dimensions(): """ This Function that will create all the dimensions for stroopwafel, a dimension is basically one of the variables you want to sample Invoke the Dimension class to create objects for each variable. Look at the Dimension class definition in classes.py for more. - It takes the name of the dimension, its max and min value. + It takes the name of the dimension, its max and min value. The Sampler class will tell how to sample this dimension. Similarly, prior tells it how it calculates the prior. You can find more of these in their respective modules OUT: As Output, this should return a list containing all the instances of Dimension class. @@ -64,11 +64,11 @@ def create_dimensions(): def update_properties(locations, dimensions): """ - This function is not mandatory, it is required only if you have some dependent variable. + This function is not mandatory, it is required only if you have some dependent variable. For example, if you want to sample Mass_1 and q, then Mass_2 is a dependent variable which is product of the two. Similarly, you can assume that Metallicity_2 will always be equal to Metallicity_1 IN: - locations (list(Location)) : A list containing objects of Location class in classes.py. + locations (list(Location)) : A list containing objects of Location class in classes.py. You can play with them and update whatever fields you like or add more in the property (which is a dictionary) OUT: Not Required """ @@ -102,7 +102,7 @@ def configure_code_run(batch): This function tells stroopwafel what program to run, along with its arguments. IN: batch(dict): This is a dictionary which stores some information about one of the runs. It has an number key which stores the unique id of the run - It also has a subprocess which will run under the key process. Rest, it depends on the user. User is free to store any information they might need later + It also has a subprocess which will run under the key process. Rest, it depends on the user. User is free to store any information they might need later for each batch run in this dictionary. For example, here I have stored the 'output_container' and 'grid_filename' so that I can read them during discovery of interesting systems below OUT: compas_args (list(String)) : This defines what will run. It should point to the executable file along with the arguments. @@ -127,7 +127,7 @@ def interesting_systems(batch): batch (dict): As input you will be given the current batch which just finished its execution. You can take in all the keys you defined in the configure_code_run method above OUT: Number of interesting systems - In the below example, I define all the NSs as interesting, so I read the files, get the SEED from the system_params file and define the key is_hit in the end for all interesting systems + In the below example, I define all the NSs as interesting, so I read the files, get the SEED from the system_params file and define the key is_hit in the end for all interesting systems """ try: folder = os.path.join(output_folder, batch['output_container']) @@ -154,7 +154,7 @@ def interesting_systems(batch): st1 = double_compact_objects['Stellar_Type(1)'][:] st2 = double_compact_objects['Stellar_Type(2)'][:] - merger_flag = double_compact_objects['Merges_Hubble_Time'][:] + merger_flag = double_compact_objects['Merges_Hubble_Time'][:] dco_seeds = double_compact_objects['SEED'][:] #Generally, this is the line you would want to change. @@ -248,9 +248,9 @@ def rejected_systems(locations, dimensions): if __name__ == '__main__': - # STEP 1 : Import and assign input parameters for stroopwafel + # STEP 1 : Import and assign input parameters for stroopwafel parser=argparse.ArgumentParser() - parser.add_argument('--num_systems', help = 'Total number of systems', type = int, default = num_systems) + parser.add_argument('--num_systems', help = 'Total number of systems', type = int, default = num_systems) parser.add_argument('--num_cores', help = 'Number of cores to run in parallel', type = int, default = num_cores) parser.add_argument('--num_per_core', help = 'Number of systems to generate in one core', type = int, default = num_per_core) parser.add_argument('--debug', help = 'If debug of COMPAS is to be printed', type = bool, default = debug) @@ -273,7 +273,7 @@ def rejected_systems(locations, dimensions): # Set commandOptions defaults - these are Compas option arguments commandOptions = dict() - commandOptions.update({'--output-path' : output_folder}) + commandOptions.update({'--output-path' : output_folder}) # Over-ride with pythonSubmit parameters, if desired if usePythonSubmit: @@ -295,7 +295,7 @@ def rejected_systems(locations, dimensions): except: print("Invalid pythonSubmit file, using default stroopwafel options") usePythonSubmit = False - + print("Output folder is: ", output_folder) if os.path.exists(output_folder): @@ -328,4 +328,3 @@ def rejected_systems(locations, dimensions): end_time = time.time() print ("Total running time = %d seconds" %(end_time - start_time)) - diff --git a/misc/examples/methods_paper_plots/fig_5_HR_diagram/README.md b/misc/examples/methods_paper_plots/fig_5_HR_diagram/README.md index ffd710f71..33df417d2 100644 --- a/misc/examples/methods_paper_plots/fig_5_HR_diagram/README.md +++ b/misc/examples/methods_paper_plots/fig_5_HR_diagram/README.md @@ -9,4 +9,4 @@ This folder contains everything you need to reproduce (or edit!) the HRD from th For reference, the changes from the *default* pythonSubmit.py are just: - use detailed output -- use smaller time steps (to get smoother lines for the plot) \ No newline at end of file +- use smaller time steps (to get smoother lines for the plot) diff --git a/misc/examples/methods_paper_plots/fig_5_HR_diagram/grid.txt b/misc/examples/methods_paper_plots/fig_5_HR_diagram/grid.txt index 036a780ff..864668e63 100644 --- a/misc/examples/methods_paper_plots/fig_5_HR_diagram/grid.txt +++ b/misc/examples/methods_paper_plots/fig_5_HR_diagram/grid.txt @@ -1,48 +1,48 @@ ---initial-mass-1 0.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.65 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.8 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.3 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.6 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.2 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.2 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.2 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.3 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 26 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 33 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 45 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 65 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 90 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 115 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 150 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.65 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.8 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.3 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.6 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.2 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.2 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.2 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.3 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 26 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 33 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 45 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 65 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 90 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 115 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 150 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.65 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.8 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.3 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.6 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.2 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.2 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.2 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.3 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 26 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 33 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 45 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 65 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 90 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 115 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 150 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.65 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.8 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.3 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.6 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.2 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.2 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.2 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.3 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 26 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 33 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 45 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 65 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 90 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 115 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 150 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 diff --git a/misc/examples/methods_paper_plots/fig_5_HR_diagram/make_fig_5.py b/misc/examples/methods_paper_plots/fig_5_HR_diagram/make_fig_5.py index a07d175e3..18240c1a1 100644 --- a/misc/examples/methods_paper_plots/fig_5_HR_diagram/make_fig_5.py +++ b/misc/examples/methods_paper_plots/fig_5_HR_diagram/make_fig_5.py @@ -90,44 +90,44 @@ def plot_HRD(folder_name, file_numbers, ---------- folder_name : `string` The name of the folder containing the COMPAS output - + file_numbers : `array of ints` Which individual detailed output files to plot - + fig : `figure`, optional Matplotlib figure to, by default None - + ax : `axis`, optional Matplotlib axis to use, by default None - + show : `bool`, optional Whether to immediately show the plot or just return it, by default True - + lines : `bool`, optional Whether to use lines or scatter points, by default True - + label_loc : `'start' or 'end'`, optional Location of mass labels ("), by default "start" - + max_ev_time : `float`, optional The maximum evolution time of the star to plot, by default 13700.0 - + stellar_type_range : `array of ints`, optional Which stellar types to plot, by default range(1, 13) - + stellar_type_list : `bool`, optional Whether to include an annotation of the list of stellar types, by default True - + LBV_regime : `bool`, optional Whether to shade the LBV regime, by default True - + LBV_loc : `tuple`, optional Location of LBV regime annotation (ignored if ``LBV_regime`` is False), by default (0.77, 0.93) - + plot_R_lines : `bool`, optional Whether to plot lines of constant radii, by default True """ - + # if either figure or axis is not provided, create a new one if fig is None or ax is None: fig, ax = plt.subplots(1, figsize=(10, 14)) @@ -142,23 +142,23 @@ def plot_HRD(folder_name, file_numbers, "Stellar_Type(1)", "Metallicity@ZAMS(1)", "Mass(1)"]) - + # mask items past the maximum evolution time time_limit = time <= max_ev_time log_T_eff = np.log10(T_eff[time_limit]) log_L = np.log10(L[time_limit]) stellar_type = stellar_type[time_limit] - + # combine main sequence stellar types for convenience stellar_type[stellar_type == 0] = 1 - + # annotate each track with its mass if label_loc == "start": ax.annotate("{0:1.1f}".format(m_1[0]) + r"${\rm M_\odot}$ ", (log_T_eff[np.isin(stellar_type, stellar_type_range)][0], log_L[np.isin(stellar_type, stellar_type_range)][0]), ha="right", va="center", fontsize=fs*0.7, zorder=6, bbox=dict(fc="w", ec="w", alpha=0.5, boxstyle="round,pad=0.")) elif label_loc == "end": - ax.annotate("{0:1.1f}".format(m_1[0]) + r"${\rm M_\odot}$ ", (log_T_eff[np.isin(stellar_type, stellar_type_range)][-1], + ax.annotate("{0:1.1f}".format(m_1[0]) + r"${\rm M_\odot}$ ", (log_T_eff[np.isin(stellar_type, stellar_type_range)][-1], log_L[np.isin(stellar_type, stellar_type_range)][-1]), ha="right", va="center", fontsize=fs*0.7) @@ -167,11 +167,11 @@ def plot_HRD(folder_name, file_numbers, for st in stellar_type_range: # get all matching points type_mask = stellar_type == st - + # if they are none of this stellar type then keep going if len(log_T_eff[type_mask]) == 0: continue - + # avoid plotting WD cooling tracks if st in [10, 11, 12]: # mark the star as having reached WD and plot only a single point @@ -185,17 +185,17 @@ def plot_HRD(folder_name, file_numbers, # otherwise just plot a line else: ax.plot(log_T_eff[type_mask], log_L[type_mask], color=stellar_types[st]["colour"], lw=2) - + # plot a point at the end of the track if it doesn't reach WD if not reaches_WD: final_mask = np.isin(stellar_type, stellar_type_range) ax.scatter(log_T_eff[final_mask][-1], log_L[final_mask][-1], s=10, color=stellar_types[stellar_type[final_mask][-1]]["colour"], zorder=5) - + # annotate the plot with the metallicity ax.annotate(r"$Z = {0}$".format(np.round(Z[0], 4)), xy=(0.02, 0.98), xycoords="axes fraction", color="black", fontsize=fs*0.7, va="top") - + # annotate plot with labels for stellar types if stellar_type_list: for i, st in enumerate(stellar_type_range): @@ -211,48 +211,48 @@ def plot_HRD(folder_name, file_numbers, ax.set_xlim(xlims[0], 3.2) xlims = ax.get_xlim() ylims = ax.get_ylim() - + # if the user wants some constant radii in the background if plot_R_lines: # create a range of temperatures and luminosities (and use Astropy units) T_eff = np.logspace(xlims[0], xlims[1], 1000) * u.K Lum = np.logspace(-2, 8, 1000) * u.Lsun - + # turn these into a grid L, T = np.meshgrid(Lum, T_eff) - + # compute the radius for this grid and convert to solar radii R = get_R_from_L_T(L, T) - + # make a contour plot of these values cont = ax.contour(np.log10(T_eff.value), np.log10(Lum.value), np.log10(R.to(u.Rsun).value), levels=[-3, -2, -1, 0, 1, 2, 3], colors="grey", zorder=1, linewidths=0.5, linestyles="dotted") - + # format the labels nicely with solar radii def fmt(x): if x < 0: return "{}".format(10**(x)) + r"$\,{\rm R_{\odot}}$" else: return "{}".format(int(np.round(10**(x)))) + r"$\,{\rm R_{\odot}}$" - + # manually place the labels for the original plot (leave it auto otherwise) if stellar_type_range == range(1, 13): manual = [(5, -1.5), (4.5, -1), (4.0, -0.5), (3.5, -0.5), (3.3, 1.0), (3.3, 2.5), (3.3, 4.5)] else: manual = None - + # label the lines ax.clabel(cont, fmt=fmt, use_clabeltext=True, rightside_up=False, manual=manual, fontsize=0.5*fs) - + # if the user wants to shade the LBV regime if LBV_regime: # make some fairly reasonable temperature range T_eff_range = np.logspace(3, 6, 1000) - + # plot a line at the HD limit and fill the area ax.plot(np.log10(T_eff_range), np.log10(LBV_limit(T_eff_range).value), color="grey", linestyle="dotted") ax.fill_between(np.log10(T_eff_range), np.log10(LBV_limit(T_eff_range).value), 9, color="black", lw=2, alpha=0.03) - + # annotate the regime with a custom location ax.annotate("LBV Regime", xy=LBV_loc, xycoords="axes fraction", ha="center", va="center", fontsize=fs*0.7, color="grey", zorder=10) @@ -263,7 +263,7 @@ def fmt(x): # show the figure if they want it if show: plt.show() - + # return created figure return fig, ax @@ -286,7 +286,7 @@ def fmt(x): for ax_thing in ax.flatten(): ax_thing.set_ylim(ylims) ax_thing.set_yticks([-1, 0, 1, 2, 3, 4, 5, 6, 7]) - + # save the plot as a PDF (bbox_inches=tight makes sure nothing gets cut off) plt.savefig("hrd.pdf", format="pdf", bbox_inches="tight") diff --git a/misc/examples/methods_paper_plots/fig_5_HR_diagram/pythonSubmit.py b/misc/examples/methods_paper_plots/fig_5_HR_diagram/pythonSubmit.py index 7196c9979..96181d926 100755 --- a/misc/examples/methods_paper_plots/fig_5_HR_diagram/pythonSubmit.py +++ b/misc/examples/methods_paper_plots/fig_5_HR_diagram/pythonSubmit.py @@ -6,7 +6,7 @@ from subprocess import call #### DISCLAIMER: This script uses the `pythonSubmit.py` format -#### that has been replaced by the `runSubmit.py` and +#### that has been replaced by the `runSubmit.py` and #### `compasConfigDefault.yaml` combo as of v02.25.10. #### The `pythonSubmit.py` format will eventually become deprecated. @@ -26,13 +26,13 @@ class pythonProgramOptions: # if COMPAS_EXECUTABLE_PATH is not set (== None) we assume this is an # interactive run with python3 # if COMPAS_EXECUTABLE_PATH is set (!= None) we assume this is a run - # inside a docker container - we have different directories inside a + # inside a docker container - we have different directories inside a # docker container (src, obj, bin), and the COMPAS executable resides # in the bin directory (rather than the src directory) compas_executable_override = os.environ.get('COMPAS_EXECUTABLE_PATH') if (compas_executable_override is None): - + # we should fix this one day - we should not assume that the COMPAS executable # is in the 'src' directory. The standard is to put the object files created # by the compile into the 'obj' directory, and the executable files created by @@ -45,7 +45,7 @@ class pythonProgramOptions: compas_root_dir = os.environ.get('COMPAS_ROOT_DIR') assert compas_root_dir is not None, "Unable to locate the COMPAS executable: check that the environment variable COMPAS_ROOT_DIR is set correctly, and the COMPAS executable exists." - # construct path to executable + # construct path to executable # # ideally we wouldn't have the 'src' directory name (or any other directory name) # prepended to the executable name - if we just execute the executable name on its @@ -112,7 +112,7 @@ class pythonProgramOptions: if grid_filename != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(grid_filename) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required grid_filename = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -125,7 +125,7 @@ class pythonProgramOptions: if logfile_definitions != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(logfile_definitions) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required logfile_definitions = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -318,7 +318,7 @@ class pythonProgramOptions: # set the logfile names here # # set to None (e.g. logfile_BSE_supernovae = None) to use the default filename - # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename + # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename # set to empty string (e.g. logfile_BSE_supernovae = '""') to disable logging for that file (the file will not be created) # # We don't really need the 'BSE' or 'SSE' prefixes any more - they were put there because @@ -326,7 +326,7 @@ class pythonProgramOptions: # created by a COMPAS run - especially the detailed output files. Now that the output # files are created inside a containing folder for each run there is really no need for # the prefixes - and if we don't have the prefixes we can share some of the options - # (e.g. specifying the supernovae filename doesn't need to have separate options for + # (e.g. specifying the supernovae filename doesn't need to have separate options for # SSE and BSE - we really just need one (we only ever run in one mode or the other)) # # For now though, I'll leave them as is - we can change this when (if) we decide to @@ -707,10 +707,10 @@ def listCommands(self): def generateCommandLineOptionsDict(self): """ - This function generates a dictionary mapping COMPAS options to their specified + This function generates a dictionary mapping COMPAS options to their specified values (or empty strings for boolean options). These can be combined into a string and run directly as a terminal command, or passed to the stroopwafel interface - where some of them may be overwritten. Options not to be included in the command + where some of them may be overwritten. Options not to be included in the command line should be set to pythons None (except booleans, which should be set to False) Parameters @@ -808,4 +808,3 @@ def cleanStringParameter(str_param): #-- Run execute COMPAS shell string print(shellCommand) call(shellCommand,shell=True) - diff --git a/misc/examples/methods_paper_plots/fig_6_max_R/README.md b/misc/examples/methods_paper_plots/fig_6_max_R/README.md index a7c6794b7..3681ee754 100644 --- a/misc/examples/methods_paper_plots/fig_6_max_R/README.md +++ b/misc/examples/methods_paper_plots/fig_6_max_R/README.md @@ -9,4 +9,4 @@ This folder contains everything you need to reproduce (or edit!) the maximum rad For reference, the changes from the *default* pythonSubmit.py are just: - use detailed output -- use smaller time steps (to get smoother lines for the plot) \ No newline at end of file +- use smaller time steps (to get smoother lines for the plot) diff --git a/misc/examples/methods_paper_plots/fig_6_max_R/grid.txt b/misc/examples/methods_paper_plots/fig_6_max_R/grid.txt index 14f29beb1..0667872d4 100644 --- a/misc/examples/methods_paper_plots/fig_6_max_R/grid.txt +++ b/misc/examples/methods_paper_plots/fig_6_max_R/grid.txt @@ -1,1000 +1,1000 @@ ---initial-mass-1 0.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.506 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.512 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.517 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.523 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.529 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.535 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.542 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.548 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.554 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.561 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.567 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.574 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.58 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.587 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.594 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.6 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.607 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.614 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.621 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.628 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.636 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.643 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.65 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.658 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.665 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.673 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.681 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.689 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.697 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.705 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.713 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.721 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.729 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.737 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.746 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.755 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.763 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.772 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.781 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.79 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.799 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.808 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.817 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.827 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.836 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.846 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.856 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.865 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.875 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.885 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.896 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.906 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.916 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.927 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.938 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.948 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.959 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.97 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.981 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.993 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.004 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.016 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.027 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.039 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.051 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.063 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.075 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.088 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.1 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.113 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.126 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.139 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.152 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.165 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.178 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.192 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.206 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.219 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.234 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.248 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.262 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.277 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.291 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.306 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.321 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.336 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.352 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.367 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.383 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.399 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.415 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.431 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.448 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.464 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.481 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.498 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.515 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.533 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.55 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.568 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.586 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.604 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.623 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.642 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.66 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.679 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.699 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.718 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.738 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.758 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.778 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.799 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.819 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.84 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.861 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.883 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.904 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.926 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.949 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.971 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.994 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.017 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.04 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.063 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.087 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.111 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.135 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.16 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.184 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.21 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.235 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.261 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.287 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.313 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.34 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.366 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.394 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.421 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.449 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.477 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.506 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.534 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.564 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.593 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.623 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.653 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.684 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.714 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.746 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.777 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.809 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.841 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.874 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.907 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.94 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.974 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.008 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.043 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.078 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.113 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.149 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.185 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.222 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.259 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.297 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.334 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.373 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.412 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.451 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.49 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.531 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.571 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.612 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.654 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.696 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.738 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.781 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.825 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.869 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.913 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.958 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.004 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.05 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.096 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.143 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.191 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.239 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.288 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.337 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.387 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.437 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.488 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.54 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.592 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.645 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.698 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.752 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.807 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.862 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.918 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.975 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.032 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.09 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.148 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.207 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.267 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.328 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.389 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.451 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.514 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.577 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.641 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.706 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.772 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.838 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.905 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.973 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.042 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.111 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.181 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.252 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.324 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.397 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.471 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.545 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.62 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.696 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.773 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.851 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.93 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.01 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.09 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.172 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.254 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.338 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.422 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.507 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.594 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.681 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.769 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.858 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.949 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.04 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.133 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.226 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.321 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.416 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.513 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.611 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.71 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.81 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.911 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.014 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.117 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.222 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.328 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.435 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.544 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.654 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.765 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.877 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.99 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.105 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.221 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.339 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.458 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.578 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.7 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.823 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.947 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.073 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.2 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.329 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.459 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.591 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.724 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.859 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.995 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.133 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.273 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.414 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.556 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.701 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.847 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.994 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.144 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.295 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.448 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.602 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.759 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.917 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.077 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.239 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.402 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.568 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.735 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.905 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.076 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.25 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.425 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.602 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.782 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.963 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.146 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.332 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.52 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.71 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.902 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.096 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.293 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.492 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.693 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.896 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.102 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.31 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.52 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.733 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.949 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 19.166 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 19.387 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 19.61 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 19.835 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 20.063 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 20.294 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 20.527 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 20.763 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.002 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.243 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.487 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.734 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.984 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 22.237 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 22.493 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 22.751 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 23.013 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 23.277 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 23.545 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 23.816 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 24.089 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 24.366 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 24.646 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 24.93 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 25.216 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 25.506 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 25.799 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 26.096 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 26.396 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 26.699 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 27.006 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 27.317 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 27.631 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 27.948 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 28.27 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 28.595 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 28.923 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 29.256 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 29.592 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 29.933 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 30.277 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 30.625 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 30.977 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 31.333 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 31.693 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 32.057 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 32.426 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 32.799 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 33.176 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 33.557 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 33.943 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 34.333 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 34.728 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 35.127 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 35.531 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 35.939 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 36.352 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 36.77 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 37.193 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 37.621 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 38.053 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 38.491 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 38.933 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 39.381 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 39.833 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 40.291 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 40.755 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 41.223 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 41.697 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 42.176 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 42.661 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 43.152 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 43.648 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 44.149 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 44.657 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 45.17 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 45.69 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 46.215 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 46.746 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 47.284 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 47.827 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 48.377 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 48.933 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 49.496 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 50.065 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 50.64 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 51.222 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 51.811 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 52.407 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 53.009 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 53.619 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 54.235 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 54.859 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 55.489 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 56.127 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 56.772 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 57.425 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 58.085 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 58.753 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 59.428 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 60.112 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 60.803 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 61.502 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 62.209 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 62.924 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 63.647 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 64.379 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 65.119 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 65.867 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 66.625 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 67.391 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 68.165 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 68.949 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 69.742 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 70.543 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 71.354 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 72.175 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 73.004 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 73.844 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 74.692 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 75.551 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 76.42 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 77.298 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 78.187 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 79.086 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 79.995 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 80.914 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 81.845 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 82.786 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 83.737 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 84.7 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 85.674 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 86.658 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 87.655 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 88.662 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 89.682 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 90.713 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 91.755 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 92.81 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 93.877 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 94.956 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 96.048 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 97.152 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 98.269 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 99.399 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 100.541 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 101.697 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 102.866 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 104.049 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 105.245 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 106.455 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 107.679 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 108.917 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 110.169 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 111.435 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 112.716 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 114.012 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 115.323 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 116.649 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 117.99 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 119.346 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 120.718 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 122.106 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 123.509 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 124.929 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 126.366 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 127.818 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 129.288 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 130.774 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 132.277 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 133.798 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 135.336 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 136.892 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 138.466 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 140.057 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 141.668 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 143.296 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 144.944 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 146.61 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 148.295 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 150.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.506 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.512 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.517 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.523 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.529 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.535 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.542 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.548 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.554 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.561 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.567 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.574 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.58 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.587 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.594 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.6 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.607 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.614 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.621 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.628 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.636 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.643 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.65 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.658 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.665 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.673 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.681 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.689 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.697 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.705 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.713 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.721 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.729 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.737 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.746 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.755 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.763 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.772 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.781 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.79 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.799 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.808 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.817 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.827 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.836 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.846 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.856 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.865 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.875 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.885 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.896 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.906 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.916 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.927 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.938 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.948 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.959 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.97 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.981 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 0.993 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.004 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.016 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.027 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.039 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.051 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.063 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.075 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.088 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.1 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.113 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.126 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.139 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.152 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.165 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.178 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.192 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.206 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.219 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.234 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.248 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.262 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.277 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.291 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.306 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.321 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.336 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.352 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.367 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.383 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.399 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.415 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.431 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.448 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.464 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.481 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.498 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.515 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.533 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.55 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.568 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.586 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.604 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.623 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.642 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.66 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.679 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.699 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.718 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.738 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.758 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.778 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.799 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.819 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.84 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.861 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.883 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.904 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.926 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.949 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.971 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 1.994 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.017 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.04 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.063 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.087 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.111 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.135 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.16 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.184 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.21 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.235 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.261 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.287 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.313 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.34 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.366 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.394 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.421 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.449 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.477 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.506 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.534 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.564 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.593 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.623 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.653 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.684 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.714 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.746 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.777 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.809 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.841 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.874 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.907 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.94 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 2.974 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.008 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.043 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.078 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.113 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.149 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.185 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.222 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.259 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.297 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.334 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.373 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.412 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.451 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.49 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.531 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.571 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.612 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.654 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.696 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.738 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.781 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.825 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.869 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.913 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 3.958 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.004 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.05 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.096 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.143 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.191 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.239 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.288 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.337 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.387 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.437 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.488 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.54 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.592 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.645 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.698 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.752 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.807 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.862 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.918 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 4.975 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.032 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.09 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.148 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.207 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.267 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.328 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.389 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.451 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.514 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.577 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.641 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.706 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.772 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.838 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.905 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 5.973 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.042 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.111 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.181 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.252 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.324 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.397 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.471 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.545 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.62 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.696 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.773 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.851 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 6.93 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.01 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.09 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.172 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.254 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.338 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.422 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.507 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.594 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.681 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.769 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.858 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 7.949 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.04 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.133 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.226 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.321 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.416 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.513 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.611 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.71 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.81 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 8.911 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.014 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.117 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.222 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.328 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.435 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.544 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.654 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.765 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.877 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 9.99 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.105 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.221 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.339 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.458 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.578 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.7 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.823 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 10.947 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.073 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.2 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.329 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.459 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.591 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.724 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.859 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 11.995 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.133 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.273 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.414 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.556 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.701 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.847 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 12.994 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.144 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.295 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.448 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.602 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.759 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 13.917 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.077 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.239 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.402 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.568 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.735 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 14.905 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.076 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.25 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.425 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.602 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.782 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 15.963 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.146 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.332 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.52 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.71 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 16.902 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.096 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.293 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.492 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.693 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 17.896 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.102 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.31 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.52 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.733 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 18.949 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 19.166 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 19.387 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 19.61 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 19.835 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 20.063 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 20.294 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 20.527 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 20.763 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.002 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.243 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.487 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.734 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 21.984 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 22.237 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 22.493 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 22.751 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 23.013 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 23.277 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 23.545 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 23.816 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 24.089 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 24.366 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 24.646 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 24.93 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 25.216 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 25.506 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 25.799 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 26.096 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 26.396 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 26.699 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 27.006 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 27.317 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 27.631 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 27.948 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 28.27 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 28.595 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 28.923 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 29.256 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 29.592 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 29.933 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 30.277 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 30.625 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 30.977 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 31.333 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 31.693 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 32.057 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 32.426 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 32.799 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 33.176 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 33.557 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 33.943 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 34.333 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 34.728 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 35.127 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 35.531 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 35.939 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 36.352 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 36.77 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 37.193 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 37.621 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 38.053 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 38.491 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 38.933 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 39.381 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 39.833 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 40.291 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 40.755 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 41.223 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 41.697 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 42.176 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 42.661 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 43.152 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 43.648 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 44.149 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 44.657 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 45.17 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 45.69 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 46.215 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 46.746 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 47.284 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 47.827 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 48.377 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 48.933 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 49.496 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 50.065 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 50.64 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 51.222 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 51.811 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 52.407 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 53.009 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 53.619 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 54.235 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 54.859 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 55.489 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 56.127 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 56.772 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 57.425 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 58.085 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 58.753 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 59.428 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 60.112 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 60.803 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 61.502 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 62.209 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 62.924 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 63.647 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 64.379 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 65.119 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 65.867 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 66.625 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 67.391 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 68.165 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 68.949 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 69.742 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 70.543 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 71.354 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 72.175 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 73.004 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 73.844 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 74.692 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 75.551 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 76.42 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 77.298 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 78.187 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 79.086 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 79.995 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 80.914 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 81.845 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 82.786 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 83.737 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 84.7 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 85.674 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 86.658 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 87.655 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 88.662 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 89.682 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 90.713 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 91.755 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 92.81 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 93.877 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 94.956 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 96.048 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 97.152 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 98.269 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 99.399 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 100.541 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 101.697 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 102.866 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 104.049 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 105.245 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 106.455 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 107.679 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 108.917 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 110.169 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 111.435 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 112.716 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 114.012 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 115.323 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 116.649 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 117.99 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 119.346 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 120.718 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 122.106 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 123.509 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 124.929 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 126.366 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 127.818 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 129.288 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 130.774 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 132.277 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 133.798 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 135.336 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 136.892 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 138.466 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 140.057 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 141.668 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 143.296 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 144.944 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 146.61 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 148.295 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 ---initial-mass-1 150.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.5 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.506 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.512 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.517 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.523 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.529 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.535 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.542 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.548 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.554 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.561 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.567 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.574 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.58 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.587 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.594 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.6 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.607 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.614 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.621 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.628 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.636 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.643 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.65 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.658 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.665 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.673 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.681 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.689 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.697 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.705 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.713 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.721 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.729 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.737 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.746 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.755 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.763 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.772 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.781 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.79 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.799 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.808 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.817 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.827 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.836 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.846 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.856 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.865 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.875 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.885 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.896 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.906 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.916 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.927 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.938 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.948 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.959 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.97 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.981 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.993 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.004 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.016 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.027 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.039 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.051 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.063 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.075 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.088 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.1 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.113 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.126 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.139 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.152 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.165 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.178 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.192 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.206 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.219 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.234 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.248 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.262 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.277 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.291 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.306 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.321 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.336 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.352 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.367 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.383 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.399 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.415 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.431 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.448 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.464 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.481 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.498 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.515 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.533 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.55 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.568 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.586 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.604 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.623 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.642 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.66 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.679 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.699 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.718 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.738 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.758 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.778 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.799 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.819 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.84 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.861 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.883 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.904 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.926 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.949 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.971 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.994 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.017 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.04 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.063 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.087 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.111 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.135 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.16 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.184 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.21 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.235 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.261 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.287 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.313 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.34 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.366 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.394 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.421 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.449 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.477 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.506 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.534 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.564 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.593 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.623 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.653 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.684 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.714 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.746 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.777 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.809 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.841 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.874 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.907 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.94 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.974 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.008 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.043 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.078 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.113 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.149 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.185 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.222 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.259 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.297 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.334 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.373 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.412 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.451 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.49 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.531 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.571 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.612 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.654 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.696 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.738 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.781 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.825 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.869 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.913 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.958 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.004 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.05 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.096 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.143 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.191 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.239 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.288 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.337 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.387 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.437 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.488 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.54 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.592 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.645 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.698 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.752 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.807 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.862 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.918 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.975 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.032 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.09 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.148 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.207 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.267 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.328 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.389 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.451 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.514 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.577 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.641 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.706 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.772 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.838 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.905 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.973 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.042 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.111 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.181 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.252 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.324 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.397 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.471 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.545 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.62 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.696 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.773 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.851 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.93 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.01 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.09 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.172 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.254 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.338 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.422 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.507 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.594 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.681 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.769 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.858 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.949 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.04 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.133 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.226 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.321 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.416 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.513 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.611 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.71 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.81 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.911 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.014 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.117 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.222 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.328 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.435 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.544 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.654 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.765 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.877 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.99 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.105 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.221 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.339 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.458 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.578 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.7 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.823 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.947 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.073 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.2 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.329 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.459 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.591 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.724 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.859 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.995 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.133 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.273 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.414 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.556 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.701 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.847 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.994 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.144 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.295 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.448 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.602 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.759 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.917 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.077 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.239 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.402 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.568 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.735 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.905 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.076 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.25 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.425 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.602 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.782 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.963 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.146 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.332 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.52 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.71 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.902 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.096 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.293 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.492 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.693 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.896 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.102 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.31 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.52 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.733 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.949 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 19.166 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 19.387 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 19.61 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 19.835 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 20.063 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 20.294 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 20.527 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 20.763 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.002 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.243 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.487 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.734 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.984 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 22.237 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 22.493 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 22.751 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 23.013 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 23.277 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 23.545 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 23.816 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 24.089 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 24.366 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 24.646 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 24.93 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 25.216 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 25.506 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 25.799 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 26.096 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 26.396 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 26.699 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 27.006 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 27.317 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 27.631 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 27.948 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 28.27 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 28.595 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 28.923 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 29.256 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 29.592 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 29.933 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 30.277 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 30.625 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 30.977 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 31.333 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 31.693 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 32.057 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 32.426 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 32.799 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 33.176 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 33.557 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 33.943 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 34.333 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 34.728 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 35.127 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 35.531 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 35.939 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 36.352 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 36.77 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 37.193 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 37.621 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 38.053 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 38.491 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 38.933 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 39.381 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 39.833 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 40.291 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 40.755 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 41.223 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 41.697 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 42.176 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 42.661 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 43.152 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 43.648 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 44.149 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 44.657 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 45.17 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 45.69 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 46.215 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 46.746 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 47.284 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 47.827 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 48.377 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 48.933 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 49.496 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 50.065 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 50.64 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 51.222 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 51.811 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 52.407 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 53.009 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 53.619 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 54.235 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 54.859 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 55.489 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 56.127 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 56.772 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 57.425 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 58.085 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 58.753 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 59.428 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 60.112 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 60.803 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 61.502 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 62.209 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 62.924 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 63.647 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 64.379 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 65.119 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 65.867 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 66.625 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 67.391 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 68.165 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 68.949 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 69.742 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 70.543 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 71.354 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 72.175 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 73.004 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 73.844 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 74.692 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 75.551 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 76.42 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 77.298 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 78.187 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 79.086 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 79.995 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 80.914 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 81.845 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 82.786 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 83.737 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 84.7 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 85.674 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 86.658 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 87.655 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 88.662 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 89.682 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 90.713 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 91.755 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 92.81 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 93.877 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 94.956 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 96.048 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 97.152 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 98.269 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 99.399 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 100.541 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 101.697 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 102.866 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 104.049 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 105.245 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 106.455 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 107.679 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 108.917 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 110.169 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 111.435 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 112.716 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 114.012 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 115.323 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 116.649 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 117.99 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 119.346 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 120.718 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 122.106 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 123.509 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 124.929 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 126.366 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 127.818 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 129.288 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 130.774 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 132.277 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 133.798 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 135.336 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 136.892 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 138.466 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 140.057 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 141.668 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 143.296 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 144.944 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 146.61 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 148.295 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 150.0 --initial-mass-2 0.1 --metallicity 0.0142 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.5 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.506 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.512 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.517 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.523 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.529 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.535 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.542 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.548 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.554 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.561 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.567 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.574 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.58 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.587 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.594 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.6 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.607 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.614 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.621 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.628 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.636 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.643 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.65 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.658 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.665 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.673 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.681 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.689 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.697 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.705 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.713 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.721 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.729 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.737 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.746 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.755 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.763 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.772 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.781 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.79 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.799 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.808 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.817 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.827 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.836 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.846 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.856 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.865 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.875 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.885 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.896 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.906 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.916 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.927 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.938 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.948 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.959 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.97 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.981 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 0.993 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.004 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.016 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.027 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.039 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.051 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.063 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.075 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.088 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.1 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.113 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.126 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.139 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.152 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.165 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.178 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.192 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.206 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.219 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.234 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.248 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.262 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.277 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.291 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.306 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.321 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.336 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.352 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.367 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.383 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.399 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.415 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.431 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.448 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.464 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.481 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.498 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.515 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.533 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.55 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.568 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.586 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.604 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.623 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.642 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.66 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.679 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.699 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.718 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.738 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.758 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.778 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.799 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.819 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.84 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.861 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.883 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.904 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.926 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.949 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.971 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 1.994 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.017 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.04 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.063 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.087 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.111 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.135 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.16 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.184 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.21 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.235 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.261 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.287 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.313 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.34 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.366 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.394 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.421 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.449 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.477 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.506 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.534 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.564 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.593 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.623 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.653 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.684 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.714 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.746 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.777 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.809 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.841 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.874 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.907 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.94 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 2.974 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.008 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.043 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.078 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.113 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.149 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.185 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.222 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.259 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.297 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.334 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.373 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.412 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.451 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.49 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.531 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.571 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.612 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.654 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.696 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.738 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.781 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.825 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.869 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.913 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 3.958 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.004 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.05 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.096 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.143 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.191 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.239 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.288 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.337 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.387 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.437 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.488 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.54 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.592 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.645 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.698 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.752 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.807 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.862 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.918 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 4.975 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.032 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.09 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.148 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.207 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.267 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.328 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.389 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.451 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.514 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.577 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.641 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.706 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.772 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.838 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.905 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 5.973 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.042 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.111 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.181 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.252 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.324 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.397 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.471 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.545 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.62 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.696 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.773 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.851 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 6.93 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.01 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.09 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.172 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.254 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.338 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.422 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.507 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.594 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.681 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.769 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.858 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 7.949 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.04 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.133 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.226 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.321 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.416 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.513 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.611 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.71 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.81 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 8.911 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.014 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.117 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.222 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.328 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.435 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.544 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.654 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.765 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.877 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 9.99 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.105 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.221 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.339 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.458 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.578 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.7 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.823 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 10.947 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.073 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.2 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.329 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.459 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.591 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.724 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.859 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 11.995 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.133 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.273 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.414 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.556 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.701 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.847 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 12.994 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.144 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.295 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.448 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.602 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.759 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 13.917 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.077 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.239 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.402 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.568 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.735 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 14.905 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.076 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.25 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.425 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.602 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.782 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 15.963 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.146 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.332 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.52 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.71 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 16.902 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.096 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.293 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.492 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.693 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 17.896 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.102 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.31 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.52 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.733 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 18.949 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 19.166 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 19.387 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 19.61 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 19.835 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 20.063 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 20.294 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 20.527 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 20.763 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.002 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.243 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.487 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.734 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 21.984 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 22.237 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 22.493 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 22.751 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 23.013 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 23.277 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 23.545 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 23.816 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 24.089 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 24.366 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 24.646 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 24.93 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 25.216 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 25.506 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 25.799 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 26.096 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 26.396 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 26.699 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 27.006 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 27.317 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 27.631 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 27.948 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 28.27 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 28.595 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 28.923 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 29.256 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 29.592 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 29.933 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 30.277 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 30.625 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 30.977 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 31.333 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 31.693 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 32.057 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 32.426 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 32.799 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 33.176 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 33.557 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 33.943 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 34.333 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 34.728 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 35.127 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 35.531 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 35.939 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 36.352 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 36.77 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 37.193 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 37.621 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 38.053 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 38.491 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 38.933 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 39.381 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 39.833 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 40.291 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 40.755 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 41.223 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 41.697 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 42.176 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 42.661 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 43.152 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 43.648 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 44.149 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 44.657 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 45.17 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 45.69 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 46.215 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 46.746 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 47.284 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 47.827 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 48.377 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 48.933 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 49.496 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 50.065 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 50.64 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 51.222 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 51.811 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 52.407 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 53.009 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 53.619 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 54.235 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 54.859 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 55.489 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 56.127 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 56.772 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 57.425 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 58.085 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 58.753 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 59.428 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 60.112 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 60.803 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 61.502 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 62.209 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 62.924 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 63.647 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 64.379 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 65.119 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 65.867 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 66.625 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 67.391 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 68.165 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 68.949 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 69.742 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 70.543 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 71.354 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 72.175 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 73.004 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 73.844 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 74.692 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 75.551 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 76.42 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 77.298 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 78.187 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 79.086 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 79.995 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 80.914 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 81.845 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 82.786 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 83.737 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 84.7 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 85.674 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 86.658 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 87.655 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 88.662 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 89.682 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 90.713 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 91.755 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 92.81 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 93.877 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 94.956 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 96.048 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 97.152 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 98.269 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 99.399 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 100.541 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 101.697 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 102.866 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 104.049 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 105.245 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 106.455 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 107.679 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 108.917 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 110.169 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 111.435 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 112.716 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 114.012 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 115.323 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 116.649 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 117.99 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 119.346 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 120.718 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 122.106 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 123.509 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 124.929 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 126.366 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 127.818 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 129.288 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 130.774 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 132.277 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 133.798 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 135.336 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 136.892 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 138.466 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 140.057 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 141.668 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 143.296 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 144.944 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 146.61 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 148.295 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 +--initial-mass-1 150.0 --initial-mass-2 0.1 --metallicity 0.001 --eccentricity 0.0 --semi-major-axis 1e+20 diff --git a/misc/examples/methods_paper_plots/fig_6_max_R/make_fig_6.py b/misc/examples/methods_paper_plots/fig_6_max_R/make_fig_6.py index f88bbe90b..536f04d74 100644 --- a/misc/examples/methods_paper_plots/fig_6_max_R/make_fig_6.py +++ b/misc/examples/methods_paper_plots/fig_6_max_R/make_fig_6.py @@ -67,28 +67,28 @@ def gather_maximum_radius_data(folder, files, max_ev_time=13700.0): "Time", "Stellar_Type(1)", "Radius(1)"]) - + # change MS < 0.7 to just MS stellar_type[stellar_type == 0] = 1 # store the mass masses[i] = m_1[0] - + # limit evolution time time_limit = time < max_ev_time stellar_type = stellar_type[time_limit] radius = radius[time_limit] - + # find maximum radius for each stellar type for st in range(1, len(stellar_types)): radius_at_st = radius[stellar_type == st] if len(radius_at_st) > 0: maximum_radius[st - 1][i] = np.max(radius_at_st) - + # store ZAMS radius if st == 1: R_ZAMS[i] = radius_at_st[0] - + return masses, maximum_radius, R_ZAMS @@ -119,7 +119,7 @@ def plot_max_R(masses, R_ZAMS, max_R, Z, mass_label_list, mass_label_loc=0.35, zloc=(0.98, 0.02), stellar_type_list=True, fig=None, ax=None, show=True): """ plot the maximum radius of each stellar type - + Parameters ---------- masses : `float/array` @@ -148,13 +148,13 @@ def plot_max_R(masses, R_ZAMS, max_R, Z, mass_label_list, fig : `figure`, optional Matplotlib figure to, by default None - + ax : `axis`, optional Matplotlib axis to use, by default None - + show : `bool`, optional Whether to immediately show the plot or just return it, by default True - + """ if fig is None or ax is None: fig, ax = plt.subplots(1, figsize=(10, 8)) @@ -164,14 +164,14 @@ def plot_max_R(masses, R_ZAMS, max_R, Z, mass_label_list, # work out the top of the maximum radius plot top = np.maximum(np.maximum(max_R[3], max_R[4]), max_R[5]) - + # fill the areas of case A,B,C mass transfer mask = masses > mass_label_list[0][0] ax.fill_between(masses[mask], np.zeros(len(R_ZAMS))[mask], top[mask], color="white", zorder=2) ax.fill_between(masses[mask], R_ZAMS[mask], max_R[0][mask], color=stellar_types[1]["colour"], alpha=0.1, zorder=3) ax.fill_between(masses[mask], max_R[0][mask], max_R[3][mask], color=stellar_types[2]["colour"], alpha=0.1, zorder=3) - ax.fill_between(masses[mask], max_R[3][mask], top[mask], color=stellar_types[4]["colour"], alpha=0.1, zorder=3) - + ax.fill_between(masses[mask], max_R[3][mask], top[mask], color=stellar_types[4]["colour"], alpha=0.1, zorder=3) + # plot each maximum radius track for st in range(1, 7): # for most of them only plot the line when it is above its predecessor @@ -180,7 +180,7 @@ def plot_max_R(masses, R_ZAMS, max_R, Z, mass_label_list, # but for Helium stars plot everything else: mask = np.repeat(True, len(max_R[st - 1])) - + ax.plot(masses[mask], max_R[st - 1][mask], color=stellar_types[st]["colour"], label=stellar_types[st]["short"], lw=2, zorder=5) ax.set_xscale("log") @@ -262,7 +262,7 @@ def plot_max_R(masses, R_ZAMS, max_R, Z, mass_label_list, np.max([axes[0].get_ylim()[1], axes[1].get_ylim()[1]])) for ax in axes: ax.set_ylim(ylims) - + # hide the yaxis stuff for the right panel axes[1].set_axisbelow(False) axes[1].tick_params(axis="y", which="both", left=True, right=True, direction="in") diff --git a/misc/examples/methods_paper_plots/fig_6_max_R/pythonSubmit.py b/misc/examples/methods_paper_plots/fig_6_max_R/pythonSubmit.py index 0fab27648..76799df2d 100644 --- a/misc/examples/methods_paper_plots/fig_6_max_R/pythonSubmit.py +++ b/misc/examples/methods_paper_plots/fig_6_max_R/pythonSubmit.py @@ -6,7 +6,7 @@ from subprocess import call #### DISCLAIMER: This script uses the `pythonSubmit.py` format -#### that has been replaced by the `runSubmit.py` and +#### that has been replaced by the `runSubmit.py` and #### `compasConfigDefault.yaml` combo as of v02.25.10. #### The `pythonSubmit.py` format will eventually become deprecated. @@ -26,13 +26,13 @@ class pythonProgramOptions: # if COMPAS_EXECUTABLE_PATH is not set (== None) we assume this is an # interactive run with python3 # if COMPAS_EXECUTABLE_PATH is set (!= None) we assume this is a run - # inside a docker container - we have different directories inside a + # inside a docker container - we have different directories inside a # docker container (src, obj, bin), and the COMPAS executable resides # in the bin directory (rather than the src directory) compas_executable_override = os.environ.get('COMPAS_EXECUTABLE_PATH') if (compas_executable_override is None): - + # we should fix this one day - we should not assume that the COMPAS executable # is in the 'src' directory. The standard is to put the object files created # by the compile into the 'obj' directory, and the executable files created by @@ -45,7 +45,7 @@ class pythonProgramOptions: compas_root_dir = os.environ.get('COMPAS_ROOT_DIR') assert compas_root_dir is not None, "Unable to locate the COMPAS executable: check that the environment variable COMPAS_ROOT_DIR is set correctly, and the COMPAS executable exists." - # construct path to executable + # construct path to executable # # ideally we wouldn't have the 'src' directory name (or any other directory name) # prepended to the executable name - if we just execute the executable name on its @@ -112,7 +112,7 @@ class pythonProgramOptions: if grid_filename != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(grid_filename) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required grid_filename = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -125,7 +125,7 @@ class pythonProgramOptions: if logfile_definitions != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(logfile_definitions) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required logfile_definitions = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -318,7 +318,7 @@ class pythonProgramOptions: # set the logfile names here # # set to None (e.g. logfile_BSE_supernovae = None) to use the default filename - # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename + # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename # set to empty string (e.g. logfile_BSE_supernovae = '""') to disable logging for that file (the file will not be created) # # We don't really need the 'BSE' or 'SSE' prefixes any more - they were put there because @@ -326,7 +326,7 @@ class pythonProgramOptions: # created by a COMPAS run - especially the detailed output files. Now that the output # files are created inside a containing folder for each run there is really no need for # the prefixes - and if we don't have the prefixes we can share some of the options - # (e.g. specifying the supernovae filename doesn't need to have separate options for + # (e.g. specifying the supernovae filename doesn't need to have separate options for # SSE and BSE - we really just need one (we only ever run in one mode or the other)) # # For now though, I'll leave them as is - we can change this when (if) we decide to @@ -707,10 +707,10 @@ def listCommands(self): def generateCommandLineOptionsDict(self): """ - This function generates a dictionary mapping COMPAS options to their specified + This function generates a dictionary mapping COMPAS options to their specified values (or empty strings for boolean options). These can be combined into a string and run directly as a terminal command, or passed to the stroopwafel interface - where some of them may be overwritten. Options not to be included in the command + where some of them may be overwritten. Options not to be included in the command line should be set to pythons None (except booleans, which should be set to False) Parameters @@ -808,4 +808,3 @@ def cleanStringParameter(str_param): #-- Run execute COMPAS shell string print(shellCommand) call(shellCommand,shell=True) - diff --git a/misc/examples/methods_paper_plots/fig_7_MS_lifetime/README.md b/misc/examples/methods_paper_plots/fig_7_MS_lifetime/README.md index aebdd501d..bd9558583 100644 --- a/misc/examples/methods_paper_plots/fig_7_MS_lifetime/README.md +++ b/misc/examples/methods_paper_plots/fig_7_MS_lifetime/README.md @@ -2,4 +2,4 @@ This folder contains everything you need to reproduce (or edit!) the main sequence plot from the methods paper. This one is a little simpler than some of the other plots as it comes directly from the fitting formulae in Hurley+00 and hence can be created without running COMPAS. -Therefore all you need to do is open `make_fig_7.ipynb` in Jupyter Lab/notebook and run the whole thing to create the figure (and learn how to change it). \ No newline at end of file +Therefore all you need to do is open `make_fig_7.ipynb` in Jupyter Lab/notebook and run the whole thing to create the figure (and learn how to change it). diff --git a/misc/examples/methods_paper_plots/fig_7_MS_lifetime/make_fig_7.py b/misc/examples/methods_paper_plots/fig_7_MS_lifetime/make_fig_7.py index 076654dd9..ceb3a1c1e 100644 --- a/misc/examples/methods_paper_plots/fig_7_MS_lifetime/make_fig_7.py +++ b/misc/examples/methods_paper_plots/fig_7_MS_lifetime/make_fig_7.py @@ -43,7 +43,7 @@ def t_MS(m, Z): """ Get the main sequence lifetime of a star with mass m and metallicity Z using Hurley+2000 """ - + def tBGB(m, Z): zeta = np.log10(Z / 0.02) @@ -53,7 +53,7 @@ def tBGB(m, Z): a4 = 4.141960e-2 + 4.564888e-2 * zeta + 2.958542e-2 * zeta**2 + 5.571483e-3 * zeta**3 a5 = 3.426349e-1 return (a1 + a2 * m**4 + a3 * m**(5.5) + m**7) / (a4 * m**2 + a5 * m**7) - + def mu_t(m, Z): zeta = np.log10(Z / 0.02) @@ -64,11 +64,11 @@ def mu_t(m, Z): a10 = 8.073972e-1 return np.maximum(0.5, 1.0 - 0.01 * np.maximum(a6 / m**a7, a8 + a9 / m**a10)) - + def x_t(Z): zeta = np.log10(Z / 0.02) return np.maximum(0.95, np.minimum(0.95 - 0.03 * (zeta + 0.30103), 0.99)) - + tbgb = tBGB(m, Z) return np.maximum(mu_t(m, Z) * tbgb, x_t(Z) * tbgb) diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/MM20_grid.txt b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/MM20_grid.txt index 54ae10657..9cbe4eeb2 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/MM20_grid.txt +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/MM20_grid.txt @@ -1,5000 +1,5000 @@ ---initial-mass 0.1 --metallicity 0.01416 ---initial-mass 0.1022 --metallicity 0.01416 ---initial-mass 0.1045 --metallicity 0.01416 ---initial-mass 0.1068 --metallicity 0.01416 ---initial-mass 0.1092 --metallicity 0.01416 ---initial-mass 0.1116 --metallicity 0.01416 ---initial-mass 0.1141 --metallicity 0.01416 ---initial-mass 0.1167 --metallicity 0.01416 ---initial-mass 0.1193 --metallicity 0.01416 ---initial-mass 0.1219 --metallicity 0.01416 ---initial-mass 0.1246 --metallicity 0.01416 ---initial-mass 0.1274 --metallicity 0.01416 ---initial-mass 0.1302 --metallicity 0.01416 ---initial-mass 0.1331 --metallicity 0.01416 ---initial-mass 0.1361 --metallicity 0.01416 ---initial-mass 0.1391 --metallicity 0.01416 ---initial-mass 0.1422 --metallicity 0.01416 ---initial-mass 0.1454 --metallicity 0.01416 ---initial-mass 0.1486 --metallicity 0.01416 ---initial-mass 0.152 --metallicity 0.01416 ---initial-mass 0.1553 --metallicity 0.01416 ---initial-mass 0.1588 --metallicity 0.01416 ---initial-mass 0.1623 --metallicity 0.01416 ---initial-mass 0.1659 --metallicity 0.01416 ---initial-mass 0.1696 --metallicity 0.01416 ---initial-mass 0.1734 --metallicity 0.01416 ---initial-mass 0.1773 --metallicity 0.01416 ---initial-mass 0.1812 --metallicity 0.01416 ---initial-mass 0.1853 --metallicity 0.01416 ---initial-mass 0.1894 --metallicity 0.01416 ---initial-mass 0.1936 --metallicity 0.01416 ---initial-mass 0.1979 --metallicity 0.01416 ---initial-mass 0.2023 --metallicity 0.01416 ---initial-mass 0.2068 --metallicity 0.01416 ---initial-mass 0.2114 --metallicity 0.01416 ---initial-mass 0.2161 --metallicity 0.01416 ---initial-mass 0.2209 --metallicity 0.01416 ---initial-mass 0.2259 --metallicity 0.01416 ---initial-mass 0.2309 --metallicity 0.01416 ---initial-mass 0.236 --metallicity 0.01416 ---initial-mass 0.2413 --metallicity 0.01416 ---initial-mass 0.2467 --metallicity 0.01416 ---initial-mass 0.2521 --metallicity 0.01416 ---initial-mass 0.2578 --metallicity 0.01416 ---initial-mass 0.2635 --metallicity 0.01416 ---initial-mass 0.2694 --metallicity 0.01416 ---initial-mass 0.2754 --metallicity 0.01416 ---initial-mass 0.2815 --metallicity 0.01416 ---initial-mass 0.2878 --metallicity 0.01416 ---initial-mass 0.2942 --metallicity 0.01416 ---initial-mass 0.3007 --metallicity 0.01416 ---initial-mass 0.3074 --metallicity 0.01416 ---initial-mass 0.3143 --metallicity 0.01416 ---initial-mass 0.3213 --metallicity 0.01416 ---initial-mass 0.3284 --metallicity 0.01416 ---initial-mass 0.3357 --metallicity 0.01416 ---initial-mass 0.3432 --metallicity 0.01416 ---initial-mass 0.3508 --metallicity 0.01416 ---initial-mass 0.3586 --metallicity 0.01416 ---initial-mass 0.3666 --metallicity 0.01416 ---initial-mass 0.3748 --metallicity 0.01416 ---initial-mass 0.3831 --metallicity 0.01416 ---initial-mass 0.3917 --metallicity 0.01416 ---initial-mass 0.4004 --metallicity 0.01416 ---initial-mass 0.4093 --metallicity 0.01416 ---initial-mass 0.4184 --metallicity 0.01416 ---initial-mass 0.4277 --metallicity 0.01416 ---initial-mass 0.4373 --metallicity 0.01416 ---initial-mass 0.447 --metallicity 0.01416 ---initial-mass 0.4569 --metallicity 0.01416 ---initial-mass 0.4671 --metallicity 0.01416 ---initial-mass 0.4775 --metallicity 0.01416 ---initial-mass 0.4882 --metallicity 0.01416 ---initial-mass 0.499 --metallicity 0.01416 ---initial-mass 0.5101 --metallicity 0.01416 ---initial-mass 0.5215 --metallicity 0.01416 ---initial-mass 0.5331 --metallicity 0.01416 ---initial-mass 0.545 --metallicity 0.01416 ---initial-mass 0.5571 --metallicity 0.01416 ---initial-mass 0.5695 --metallicity 0.01416 ---initial-mass 0.5822 --metallicity 0.01416 ---initial-mass 0.5951 --metallicity 0.01416 ---initial-mass 0.6084 --metallicity 0.01416 ---initial-mass 0.6219 --metallicity 0.01416 ---initial-mass 0.6358 --metallicity 0.01416 ---initial-mass 0.6499 --metallicity 0.01416 ---initial-mass 0.6644 --metallicity 0.01416 ---initial-mass 0.6792 --metallicity 0.01416 ---initial-mass 0.6943 --metallicity 0.01416 ---initial-mass 0.7098 --metallicity 0.01416 ---initial-mass 0.7256 --metallicity 0.01416 ---initial-mass 0.7417 --metallicity 0.01416 ---initial-mass 0.7583 --metallicity 0.01416 ---initial-mass 0.7751 --metallicity 0.01416 ---initial-mass 0.7924 --metallicity 0.01416 ---initial-mass 0.81 --metallicity 0.01416 ---initial-mass 0.8281 --metallicity 0.01416 ---initial-mass 0.8465 --metallicity 0.01416 ---initial-mass 0.8654 --metallicity 0.01416 ---initial-mass 0.8846 --metallicity 0.01416 ---initial-mass 0.9043 --metallicity 0.01416 ---initial-mass 0.9245 --metallicity 0.01416 ---initial-mass 0.945 --metallicity 0.01416 ---initial-mass 0.9661 --metallicity 0.01416 ---initial-mass 0.9876 --metallicity 0.01416 ---initial-mass 1.0096 --metallicity 0.01416 ---initial-mass 1.0321 --metallicity 0.01416 ---initial-mass 1.055 --metallicity 0.01416 ---initial-mass 1.0785 --metallicity 0.01416 ---initial-mass 1.1025 --metallicity 0.01416 ---initial-mass 1.1271 --metallicity 0.01416 ---initial-mass 1.1522 --metallicity 0.01416 ---initial-mass 1.1778 --metallicity 0.01416 ---initial-mass 1.2041 --metallicity 0.01416 ---initial-mass 1.2309 --metallicity 0.01416 ---initial-mass 1.2583 --metallicity 0.01416 ---initial-mass 1.2863 --metallicity 0.01416 ---initial-mass 1.3149 --metallicity 0.01416 ---initial-mass 1.3442 --metallicity 0.01416 ---initial-mass 1.3741 --metallicity 0.01416 ---initial-mass 1.4047 --metallicity 0.01416 ---initial-mass 1.436 --metallicity 0.01416 ---initial-mass 1.468 --metallicity 0.01416 ---initial-mass 1.5007 --metallicity 0.01416 ---initial-mass 1.5341 --metallicity 0.01416 ---initial-mass 1.5682 --metallicity 0.01416 ---initial-mass 1.6031 --metallicity 0.01416 ---initial-mass 1.6388 --metallicity 0.01416 ---initial-mass 1.6753 --metallicity 0.01416 ---initial-mass 1.7126 --metallicity 0.01416 ---initial-mass 1.7508 --metallicity 0.01416 ---initial-mass 1.7897 --metallicity 0.01416 ---initial-mass 1.8296 --metallicity 0.01416 ---initial-mass 1.8703 --metallicity 0.01416 ---initial-mass 1.912 --metallicity 0.01416 ---initial-mass 1.9545 --metallicity 0.01416 ---initial-mass 1.998 --metallicity 0.01416 ---initial-mass 2.0425 --metallicity 0.01416 ---initial-mass 2.088 --metallicity 0.01416 ---initial-mass 2.1345 --metallicity 0.01416 ---initial-mass 2.182 --metallicity 0.01416 ---initial-mass 2.2306 --metallicity 0.01416 ---initial-mass 2.2803 --metallicity 0.01416 ---initial-mass 2.331 --metallicity 0.01416 ---initial-mass 2.3829 --metallicity 0.01416 ---initial-mass 2.436 --metallicity 0.01416 ---initial-mass 2.4902 --metallicity 0.01416 ---initial-mass 2.5457 --metallicity 0.01416 ---initial-mass 2.6023 --metallicity 0.01416 ---initial-mass 2.6603 --metallicity 0.01416 ---initial-mass 2.7195 --metallicity 0.01416 ---initial-mass 2.7801 --metallicity 0.01416 ---initial-mass 2.842 --metallicity 0.01416 ---initial-mass 2.9052 --metallicity 0.01416 ---initial-mass 2.9699 --metallicity 0.01416 ---initial-mass 3.036 --metallicity 0.01416 ---initial-mass 3.1036 --metallicity 0.01416 ---initial-mass 3.1727 --metallicity 0.01416 ---initial-mass 3.2434 --metallicity 0.01416 ---initial-mass 3.3156 --metallicity 0.01416 ---initial-mass 3.3894 --metallicity 0.01416 ---initial-mass 3.4649 --metallicity 0.01416 ---initial-mass 3.542 --metallicity 0.01416 ---initial-mass 3.6209 --metallicity 0.01416 ---initial-mass 3.7015 --metallicity 0.01416 ---initial-mass 3.7839 --metallicity 0.01416 ---initial-mass 3.8681 --metallicity 0.01416 ---initial-mass 3.9543 --metallicity 0.01416 ---initial-mass 4.0423 --metallicity 0.01416 ---initial-mass 4.1323 --metallicity 0.01416 ---initial-mass 4.2243 --metallicity 0.01416 ---initial-mass 4.3184 --metallicity 0.01416 ---initial-mass 4.4145 --metallicity 0.01416 ---initial-mass 4.5128 --metallicity 0.01416 ---initial-mass 4.6133 --metallicity 0.01416 ---initial-mass 4.716 --metallicity 0.01416 ---initial-mass 4.821 --metallicity 0.01416 ---initial-mass 4.9283 --metallicity 0.01416 ---initial-mass 5.038 --metallicity 0.01416 ---initial-mass 5.1502 --metallicity 0.01416 ---initial-mass 5.2649 --metallicity 0.01416 ---initial-mass 5.3821 --metallicity 0.01416 ---initial-mass 5.5019 --metallicity 0.01416 ---initial-mass 5.6244 --metallicity 0.01416 ---initial-mass 5.7496 --metallicity 0.01416 ---initial-mass 5.8777 --metallicity 0.01416 ---initial-mass 6.0085 --metallicity 0.01416 ---initial-mass 6.1423 --metallicity 0.01416 ---initial-mass 6.2791 --metallicity 0.01416 ---initial-mass 6.4189 --metallicity 0.01416 ---initial-mass 6.5618 --metallicity 0.01416 ---initial-mass 6.7079 --metallicity 0.01416 ---initial-mass 6.8572 --metallicity 0.01416 ---initial-mass 7.0099 --metallicity 0.01416 ---initial-mass 7.1659 --metallicity 0.01416 ---initial-mass 7.3255 --metallicity 0.01416 ---initial-mass 7.4886 --metallicity 0.01416 ---initial-mass 7.6553 --metallicity 0.01416 ---initial-mass 7.8258 --metallicity 0.01416 ---initial-mass 8.0 --metallicity 0.01416 ---initial-mass 8.0 --metallicity 0.01416 ---initial-mass 8.0032 --metallicity 0.01416 ---initial-mass 8.0064 --metallicity 0.01416 ---initial-mass 8.0096 --metallicity 0.01416 ---initial-mass 8.0128 --metallicity 0.01416 ---initial-mass 8.016 --metallicity 0.01416 ---initial-mass 8.0191 --metallicity 0.01416 ---initial-mass 8.0223 --metallicity 0.01416 ---initial-mass 8.0255 --metallicity 0.01416 ---initial-mass 8.0287 --metallicity 0.01416 ---initial-mass 8.0319 --metallicity 0.01416 ---initial-mass 8.0351 --metallicity 0.01416 ---initial-mass 8.0383 --metallicity 0.01416 ---initial-mass 8.0415 --metallicity 0.01416 ---initial-mass 8.0448 --metallicity 0.01416 ---initial-mass 8.048 --metallicity 0.01416 ---initial-mass 8.0512 --metallicity 0.01416 ---initial-mass 8.0544 --metallicity 0.01416 ---initial-mass 8.0576 --metallicity 0.01416 ---initial-mass 8.0608 --metallicity 0.01416 ---initial-mass 8.064 --metallicity 0.01416 ---initial-mass 8.0672 --metallicity 0.01416 ---initial-mass 8.0704 --metallicity 0.01416 ---initial-mass 8.0737 --metallicity 0.01416 ---initial-mass 8.0769 --metallicity 0.01416 ---initial-mass 8.0801 --metallicity 0.01416 ---initial-mass 8.0833 --metallicity 0.01416 ---initial-mass 8.0865 --metallicity 0.01416 ---initial-mass 8.0898 --metallicity 0.01416 ---initial-mass 8.093 --metallicity 0.01416 ---initial-mass 8.0962 --metallicity 0.01416 ---initial-mass 8.0994 --metallicity 0.01416 ---initial-mass 8.1027 --metallicity 0.01416 ---initial-mass 8.1059 --metallicity 0.01416 ---initial-mass 8.1091 --metallicity 0.01416 ---initial-mass 8.1124 --metallicity 0.01416 ---initial-mass 8.1156 --metallicity 0.01416 ---initial-mass 8.1188 --metallicity 0.01416 ---initial-mass 8.1221 --metallicity 0.01416 ---initial-mass 8.1253 --metallicity 0.01416 ---initial-mass 8.1285 --metallicity 0.01416 ---initial-mass 8.1318 --metallicity 0.01416 ---initial-mass 8.135 --metallicity 0.01416 ---initial-mass 8.1383 --metallicity 0.01416 ---initial-mass 8.1415 --metallicity 0.01416 ---initial-mass 8.1447 --metallicity 0.01416 ---initial-mass 8.148 --metallicity 0.01416 ---initial-mass 8.1512 --metallicity 0.01416 ---initial-mass 8.1545 --metallicity 0.01416 ---initial-mass 8.1577 --metallicity 0.01416 ---initial-mass 8.161 --metallicity 0.01416 ---initial-mass 8.1642 --metallicity 0.01416 ---initial-mass 8.1675 --metallicity 0.01416 ---initial-mass 8.1707 --metallicity 0.01416 ---initial-mass 8.174 --metallicity 0.01416 ---initial-mass 8.1773 --metallicity 0.01416 ---initial-mass 8.1805 --metallicity 0.01416 ---initial-mass 8.1838 --metallicity 0.01416 ---initial-mass 8.187 --metallicity 0.01416 ---initial-mass 8.1903 --metallicity 0.01416 ---initial-mass 8.1936 --metallicity 0.01416 ---initial-mass 8.1968 --metallicity 0.01416 ---initial-mass 8.2001 --metallicity 0.01416 ---initial-mass 8.2034 --metallicity 0.01416 ---initial-mass 8.2066 --metallicity 0.01416 ---initial-mass 8.2099 --metallicity 0.01416 ---initial-mass 8.2132 --metallicity 0.01416 ---initial-mass 8.2165 --metallicity 0.01416 ---initial-mass 8.2197 --metallicity 0.01416 ---initial-mass 8.223 --metallicity 0.01416 ---initial-mass 8.2263 --metallicity 0.01416 ---initial-mass 8.2296 --metallicity 0.01416 ---initial-mass 8.2328 --metallicity 0.01416 ---initial-mass 8.2361 --metallicity 0.01416 ---initial-mass 8.2394 --metallicity 0.01416 ---initial-mass 8.2427 --metallicity 0.01416 ---initial-mass 8.246 --metallicity 0.01416 ---initial-mass 8.2493 --metallicity 0.01416 ---initial-mass 8.2526 --metallicity 0.01416 ---initial-mass 8.2558 --metallicity 0.01416 ---initial-mass 8.2591 --metallicity 0.01416 ---initial-mass 8.2624 --metallicity 0.01416 ---initial-mass 8.2657 --metallicity 0.01416 ---initial-mass 8.269 --metallicity 0.01416 ---initial-mass 8.2723 --metallicity 0.01416 ---initial-mass 8.2756 --metallicity 0.01416 ---initial-mass 8.2789 --metallicity 0.01416 ---initial-mass 8.2822 --metallicity 0.01416 ---initial-mass 8.2855 --metallicity 0.01416 ---initial-mass 8.2888 --metallicity 0.01416 ---initial-mass 8.2921 --metallicity 0.01416 ---initial-mass 8.2954 --metallicity 0.01416 ---initial-mass 8.2987 --metallicity 0.01416 ---initial-mass 8.302 --metallicity 0.01416 ---initial-mass 8.3053 --metallicity 0.01416 ---initial-mass 8.3086 --metallicity 0.01416 ---initial-mass 8.312 --metallicity 0.01416 ---initial-mass 8.3153 --metallicity 0.01416 ---initial-mass 8.3186 --metallicity 0.01416 ---initial-mass 8.3219 --metallicity 0.01416 ---initial-mass 8.3252 --metallicity 0.01416 ---initial-mass 8.3285 --metallicity 0.01416 ---initial-mass 8.3319 --metallicity 0.01416 ---initial-mass 8.3352 --metallicity 0.01416 ---initial-mass 8.3385 --metallicity 0.01416 ---initial-mass 8.3418 --metallicity 0.01416 ---initial-mass 8.3451 --metallicity 0.01416 ---initial-mass 8.3485 --metallicity 0.01416 ---initial-mass 8.3518 --metallicity 0.01416 ---initial-mass 8.3551 --metallicity 0.01416 ---initial-mass 8.3585 --metallicity 0.01416 ---initial-mass 8.3618 --metallicity 0.01416 ---initial-mass 8.3651 --metallicity 0.01416 ---initial-mass 8.3685 --metallicity 0.01416 ---initial-mass 8.3718 --metallicity 0.01416 ---initial-mass 8.3751 --metallicity 0.01416 ---initial-mass 8.3785 --metallicity 0.01416 ---initial-mass 8.3818 --metallicity 0.01416 ---initial-mass 8.3851 --metallicity 0.01416 ---initial-mass 8.3885 --metallicity 0.01416 ---initial-mass 8.3918 --metallicity 0.01416 ---initial-mass 8.3952 --metallicity 0.01416 ---initial-mass 8.3985 --metallicity 0.01416 ---initial-mass 8.4019 --metallicity 0.01416 ---initial-mass 8.4052 --metallicity 0.01416 ---initial-mass 8.4086 --metallicity 0.01416 ---initial-mass 8.4119 --metallicity 0.01416 ---initial-mass 8.4153 --metallicity 0.01416 ---initial-mass 8.4186 --metallicity 0.01416 ---initial-mass 8.422 --metallicity 0.01416 ---initial-mass 8.4253 --metallicity 0.01416 ---initial-mass 8.4287 --metallicity 0.01416 ---initial-mass 8.4321 --metallicity 0.01416 ---initial-mass 8.4354 --metallicity 0.01416 ---initial-mass 8.4388 --metallicity 0.01416 ---initial-mass 8.4421 --metallicity 0.01416 ---initial-mass 8.4455 --metallicity 0.01416 ---initial-mass 8.4489 --metallicity 0.01416 ---initial-mass 8.4522 --metallicity 0.01416 ---initial-mass 8.4556 --metallicity 0.01416 ---initial-mass 8.459 --metallicity 0.01416 ---initial-mass 8.4623 --metallicity 0.01416 ---initial-mass 8.4657 --metallicity 0.01416 ---initial-mass 8.4691 --metallicity 0.01416 ---initial-mass 8.4725 --metallicity 0.01416 ---initial-mass 8.4758 --metallicity 0.01416 ---initial-mass 8.4792 --metallicity 0.01416 ---initial-mass 8.4826 --metallicity 0.01416 ---initial-mass 8.486 --metallicity 0.01416 ---initial-mass 8.4894 --metallicity 0.01416 ---initial-mass 8.4927 --metallicity 0.01416 ---initial-mass 8.4961 --metallicity 0.01416 ---initial-mass 8.4995 --metallicity 0.01416 ---initial-mass 8.5029 --metallicity 0.01416 ---initial-mass 8.5063 --metallicity 0.01416 ---initial-mass 8.5097 --metallicity 0.01416 ---initial-mass 8.5131 --metallicity 0.01416 ---initial-mass 8.5165 --metallicity 0.01416 ---initial-mass 8.5199 --metallicity 0.01416 ---initial-mass 8.5233 --metallicity 0.01416 ---initial-mass 8.5267 --metallicity 0.01416 ---initial-mass 8.5301 --metallicity 0.01416 ---initial-mass 8.5335 --metallicity 0.01416 ---initial-mass 8.5369 --metallicity 0.01416 ---initial-mass 8.5403 --metallicity 0.01416 ---initial-mass 8.5437 --metallicity 0.01416 ---initial-mass 8.5471 --metallicity 0.01416 ---initial-mass 8.5505 --metallicity 0.01416 ---initial-mass 8.5539 --metallicity 0.01416 ---initial-mass 8.5573 --metallicity 0.01416 ---initial-mass 8.5607 --metallicity 0.01416 ---initial-mass 8.5641 --metallicity 0.01416 ---initial-mass 8.5675 --metallicity 0.01416 ---initial-mass 8.5709 --metallicity 0.01416 ---initial-mass 8.5744 --metallicity 0.01416 ---initial-mass 8.5778 --metallicity 0.01416 ---initial-mass 8.5812 --metallicity 0.01416 ---initial-mass 8.5846 --metallicity 0.01416 ---initial-mass 8.588 --metallicity 0.01416 ---initial-mass 8.5915 --metallicity 0.01416 ---initial-mass 8.5949 --metallicity 0.01416 ---initial-mass 8.5983 --metallicity 0.01416 ---initial-mass 8.6017 --metallicity 0.01416 ---initial-mass 8.6052 --metallicity 0.01416 ---initial-mass 8.6086 --metallicity 0.01416 ---initial-mass 8.612 --metallicity 0.01416 ---initial-mass 8.6155 --metallicity 0.01416 ---initial-mass 8.6189 --metallicity 0.01416 ---initial-mass 8.6223 --metallicity 0.01416 ---initial-mass 8.6258 --metallicity 0.01416 ---initial-mass 8.6292 --metallicity 0.01416 ---initial-mass 8.6326 --metallicity 0.01416 ---initial-mass 8.6361 --metallicity 0.01416 ---initial-mass 8.6395 --metallicity 0.01416 ---initial-mass 8.643 --metallicity 0.01416 ---initial-mass 8.6464 --metallicity 0.01416 ---initial-mass 8.6499 --metallicity 0.01416 ---initial-mass 8.6533 --metallicity 0.01416 ---initial-mass 8.6568 --metallicity 0.01416 ---initial-mass 8.6602 --metallicity 0.01416 ---initial-mass 8.6637 --metallicity 0.01416 ---initial-mass 8.6671 --metallicity 0.01416 ---initial-mass 8.6706 --metallicity 0.01416 ---initial-mass 8.674 --metallicity 0.01416 ---initial-mass 8.6775 --metallicity 0.01416 ---initial-mass 8.6809 --metallicity 0.01416 ---initial-mass 8.6844 --metallicity 0.01416 ---initial-mass 8.6879 --metallicity 0.01416 ---initial-mass 8.6913 --metallicity 0.01416 ---initial-mass 8.6948 --metallicity 0.01416 ---initial-mass 8.6982 --metallicity 0.01416 ---initial-mass 8.7017 --metallicity 0.01416 ---initial-mass 8.7052 --metallicity 0.01416 ---initial-mass 8.7086 --metallicity 0.01416 ---initial-mass 8.7121 --metallicity 0.01416 ---initial-mass 8.7156 --metallicity 0.01416 ---initial-mass 8.7191 --metallicity 0.01416 ---initial-mass 8.7225 --metallicity 0.01416 ---initial-mass 8.726 --metallicity 0.01416 ---initial-mass 8.7295 --metallicity 0.01416 ---initial-mass 8.733 --metallicity 0.01416 ---initial-mass 8.7365 --metallicity 0.01416 ---initial-mass 8.7399 --metallicity 0.01416 ---initial-mass 8.7434 --metallicity 0.01416 ---initial-mass 8.7469 --metallicity 0.01416 ---initial-mass 8.7504 --metallicity 0.01416 ---initial-mass 8.7539 --metallicity 0.01416 ---initial-mass 8.7574 --metallicity 0.01416 ---initial-mass 8.7609 --metallicity 0.01416 ---initial-mass 8.7643 --metallicity 0.01416 ---initial-mass 8.7678 --metallicity 0.01416 ---initial-mass 8.7713 --metallicity 0.01416 ---initial-mass 8.7748 --metallicity 0.01416 ---initial-mass 8.7783 --metallicity 0.01416 ---initial-mass 8.7818 --metallicity 0.01416 ---initial-mass 8.7853 --metallicity 0.01416 ---initial-mass 8.7888 --metallicity 0.01416 ---initial-mass 8.7923 --metallicity 0.01416 ---initial-mass 8.7958 --metallicity 0.01416 ---initial-mass 8.7993 --metallicity 0.01416 ---initial-mass 8.8028 --metallicity 0.01416 ---initial-mass 8.8064 --metallicity 0.01416 ---initial-mass 8.8099 --metallicity 0.01416 ---initial-mass 8.8134 --metallicity 0.01416 ---initial-mass 8.8169 --metallicity 0.01416 ---initial-mass 8.8204 --metallicity 0.01416 ---initial-mass 8.8239 --metallicity 0.01416 ---initial-mass 8.8274 --metallicity 0.01416 ---initial-mass 8.831 --metallicity 0.01416 ---initial-mass 8.8345 --metallicity 0.01416 ---initial-mass 8.838 --metallicity 0.01416 ---initial-mass 8.8415 --metallicity 0.01416 ---initial-mass 8.845 --metallicity 0.01416 ---initial-mass 8.8486 --metallicity 0.01416 ---initial-mass 8.8521 --metallicity 0.01416 ---initial-mass 8.8556 --metallicity 0.01416 ---initial-mass 8.8592 --metallicity 0.01416 ---initial-mass 8.8627 --metallicity 0.01416 ---initial-mass 8.8662 --metallicity 0.01416 ---initial-mass 8.8697 --metallicity 0.01416 ---initial-mass 8.8733 --metallicity 0.01416 ---initial-mass 8.8768 --metallicity 0.01416 ---initial-mass 8.8804 --metallicity 0.01416 ---initial-mass 8.8839 --metallicity 0.01416 ---initial-mass 8.8874 --metallicity 0.01416 ---initial-mass 8.891 --metallicity 0.01416 ---initial-mass 8.8945 --metallicity 0.01416 ---initial-mass 8.8981 --metallicity 0.01416 ---initial-mass 8.9016 --metallicity 0.01416 ---initial-mass 8.9052 --metallicity 0.01416 ---initial-mass 8.9087 --metallicity 0.01416 ---initial-mass 8.9123 --metallicity 0.01416 ---initial-mass 8.9158 --metallicity 0.01416 ---initial-mass 8.9194 --metallicity 0.01416 ---initial-mass 8.9229 --metallicity 0.01416 ---initial-mass 8.9265 --metallicity 0.01416 ---initial-mass 8.93 --metallicity 0.01416 ---initial-mass 8.9336 --metallicity 0.01416 ---initial-mass 8.9372 --metallicity 0.01416 ---initial-mass 8.9407 --metallicity 0.01416 ---initial-mass 8.9443 --metallicity 0.01416 ---initial-mass 8.9478 --metallicity 0.01416 ---initial-mass 8.9514 --metallicity 0.01416 ---initial-mass 8.955 --metallicity 0.01416 ---initial-mass 8.9585 --metallicity 0.01416 ---initial-mass 8.9621 --metallicity 0.01416 ---initial-mass 8.9657 --metallicity 0.01416 ---initial-mass 8.9693 --metallicity 0.01416 ---initial-mass 8.9728 --metallicity 0.01416 ---initial-mass 8.9764 --metallicity 0.01416 ---initial-mass 8.98 --metallicity 0.01416 ---initial-mass 8.9836 --metallicity 0.01416 ---initial-mass 8.9872 --metallicity 0.01416 ---initial-mass 8.9907 --metallicity 0.01416 ---initial-mass 8.9943 --metallicity 0.01416 ---initial-mass 8.9979 --metallicity 0.01416 ---initial-mass 9.0015 --metallicity 0.01416 ---initial-mass 9.0051 --metallicity 0.01416 ---initial-mass 9.0087 --metallicity 0.01416 ---initial-mass 9.0123 --metallicity 0.01416 ---initial-mass 9.0158 --metallicity 0.01416 ---initial-mass 9.0194 --metallicity 0.01416 ---initial-mass 9.023 --metallicity 0.01416 ---initial-mass 9.0266 --metallicity 0.01416 ---initial-mass 9.0302 --metallicity 0.01416 ---initial-mass 9.0338 --metallicity 0.01416 ---initial-mass 9.0374 --metallicity 0.01416 ---initial-mass 9.041 --metallicity 0.01416 ---initial-mass 9.0446 --metallicity 0.01416 ---initial-mass 9.0482 --metallicity 0.01416 ---initial-mass 9.0518 --metallicity 0.01416 ---initial-mass 9.0555 --metallicity 0.01416 ---initial-mass 9.0591 --metallicity 0.01416 ---initial-mass 9.0627 --metallicity 0.01416 ---initial-mass 9.0663 --metallicity 0.01416 ---initial-mass 9.0699 --metallicity 0.01416 ---initial-mass 9.0735 --metallicity 0.01416 ---initial-mass 9.0771 --metallicity 0.01416 ---initial-mass 9.0807 --metallicity 0.01416 ---initial-mass 9.0844 --metallicity 0.01416 ---initial-mass 9.088 --metallicity 0.01416 ---initial-mass 9.0916 --metallicity 0.01416 ---initial-mass 9.0952 --metallicity 0.01416 ---initial-mass 9.0989 --metallicity 0.01416 ---initial-mass 9.1025 --metallicity 0.01416 ---initial-mass 9.1061 --metallicity 0.01416 ---initial-mass 9.1097 --metallicity 0.01416 ---initial-mass 9.1134 --metallicity 0.01416 ---initial-mass 9.117 --metallicity 0.01416 ---initial-mass 9.1206 --metallicity 0.01416 ---initial-mass 9.1243 --metallicity 0.01416 ---initial-mass 9.1279 --metallicity 0.01416 ---initial-mass 9.1315 --metallicity 0.01416 ---initial-mass 9.1352 --metallicity 0.01416 ---initial-mass 9.1388 --metallicity 0.01416 ---initial-mass 9.1425 --metallicity 0.01416 ---initial-mass 9.1461 --metallicity 0.01416 ---initial-mass 9.1498 --metallicity 0.01416 ---initial-mass 9.1534 --metallicity 0.01416 ---initial-mass 9.1571 --metallicity 0.01416 ---initial-mass 9.1607 --metallicity 0.01416 ---initial-mass 9.1644 --metallicity 0.01416 ---initial-mass 9.168 --metallicity 0.01416 ---initial-mass 9.1717 --metallicity 0.01416 ---initial-mass 9.1753 --metallicity 0.01416 ---initial-mass 9.179 --metallicity 0.01416 ---initial-mass 9.1826 --metallicity 0.01416 ---initial-mass 9.1863 --metallicity 0.01416 ---initial-mass 9.1899 --metallicity 0.01416 ---initial-mass 9.1936 --metallicity 0.01416 ---initial-mass 9.1973 --metallicity 0.01416 ---initial-mass 9.2009 --metallicity 0.01416 ---initial-mass 9.2046 --metallicity 0.01416 ---initial-mass 9.2083 --metallicity 0.01416 ---initial-mass 9.2119 --metallicity 0.01416 ---initial-mass 9.2156 --metallicity 0.01416 ---initial-mass 9.2193 --metallicity 0.01416 ---initial-mass 9.223 --metallicity 0.01416 ---initial-mass 9.2266 --metallicity 0.01416 ---initial-mass 9.2303 --metallicity 0.01416 ---initial-mass 9.234 --metallicity 0.01416 ---initial-mass 9.2377 --metallicity 0.01416 ---initial-mass 9.2414 --metallicity 0.01416 ---initial-mass 9.245 --metallicity 0.01416 ---initial-mass 9.2487 --metallicity 0.01416 ---initial-mass 9.2524 --metallicity 0.01416 ---initial-mass 9.2561 --metallicity 0.01416 ---initial-mass 9.2598 --metallicity 0.01416 ---initial-mass 9.2635 --metallicity 0.01416 ---initial-mass 9.2672 --metallicity 0.01416 ---initial-mass 9.2709 --metallicity 0.01416 ---initial-mass 9.2746 --metallicity 0.01416 ---initial-mass 9.2783 --metallicity 0.01416 ---initial-mass 9.282 --metallicity 0.01416 ---initial-mass 9.2857 --metallicity 0.01416 ---initial-mass 9.2894 --metallicity 0.01416 ---initial-mass 9.2931 --metallicity 0.01416 ---initial-mass 9.2968 --metallicity 0.01416 ---initial-mass 9.3005 --metallicity 0.01416 ---initial-mass 9.3042 --metallicity 0.01416 ---initial-mass 9.3079 --metallicity 0.01416 ---initial-mass 9.3116 --metallicity 0.01416 ---initial-mass 9.3153 --metallicity 0.01416 ---initial-mass 9.319 --metallicity 0.01416 ---initial-mass 9.3227 --metallicity 0.01416 ---initial-mass 9.3264 --metallicity 0.01416 ---initial-mass 9.3302 --metallicity 0.01416 ---initial-mass 9.3339 --metallicity 0.01416 ---initial-mass 9.3376 --metallicity 0.01416 ---initial-mass 9.3413 --metallicity 0.01416 ---initial-mass 9.345 --metallicity 0.01416 ---initial-mass 9.3488 --metallicity 0.01416 ---initial-mass 9.3525 --metallicity 0.01416 ---initial-mass 9.3562 --metallicity 0.01416 ---initial-mass 9.36 --metallicity 0.01416 ---initial-mass 9.3637 --metallicity 0.01416 ---initial-mass 9.3674 --metallicity 0.01416 ---initial-mass 9.3711 --metallicity 0.01416 ---initial-mass 9.3749 --metallicity 0.01416 ---initial-mass 9.3786 --metallicity 0.01416 ---initial-mass 9.3824 --metallicity 0.01416 ---initial-mass 9.3861 --metallicity 0.01416 ---initial-mass 9.3898 --metallicity 0.01416 ---initial-mass 9.3936 --metallicity 0.01416 ---initial-mass 9.3973 --metallicity 0.01416 ---initial-mass 9.4011 --metallicity 0.01416 ---initial-mass 9.4048 --metallicity 0.01416 ---initial-mass 9.4086 --metallicity 0.01416 ---initial-mass 9.4123 --metallicity 0.01416 ---initial-mass 9.4161 --metallicity 0.01416 ---initial-mass 9.4198 --metallicity 0.01416 ---initial-mass 9.4236 --metallicity 0.01416 ---initial-mass 9.4273 --metallicity 0.01416 ---initial-mass 9.4311 --metallicity 0.01416 ---initial-mass 9.4348 --metallicity 0.01416 ---initial-mass 9.4386 --metallicity 0.01416 ---initial-mass 9.4424 --metallicity 0.01416 ---initial-mass 9.4461 --metallicity 0.01416 ---initial-mass 9.4499 --metallicity 0.01416 ---initial-mass 9.4537 --metallicity 0.01416 ---initial-mass 9.4574 --metallicity 0.01416 ---initial-mass 9.4612 --metallicity 0.01416 ---initial-mass 9.465 --metallicity 0.01416 ---initial-mass 9.4687 --metallicity 0.01416 ---initial-mass 9.4725 --metallicity 0.01416 ---initial-mass 9.4763 --metallicity 0.01416 ---initial-mass 9.4801 --metallicity 0.01416 ---initial-mass 9.4838 --metallicity 0.01416 ---initial-mass 9.4876 --metallicity 0.01416 ---initial-mass 9.4914 --metallicity 0.01416 ---initial-mass 9.4952 --metallicity 0.01416 ---initial-mass 9.499 --metallicity 0.01416 ---initial-mass 9.5028 --metallicity 0.01416 ---initial-mass 9.5065 --metallicity 0.01416 ---initial-mass 9.5103 --metallicity 0.01416 ---initial-mass 9.5141 --metallicity 0.01416 ---initial-mass 9.5179 --metallicity 0.01416 ---initial-mass 9.5217 --metallicity 0.01416 ---initial-mass 9.5255 --metallicity 0.01416 ---initial-mass 9.5293 --metallicity 0.01416 ---initial-mass 9.5331 --metallicity 0.01416 ---initial-mass 9.5369 --metallicity 0.01416 ---initial-mass 9.5407 --metallicity 0.01416 ---initial-mass 9.5445 --metallicity 0.01416 ---initial-mass 9.5483 --metallicity 0.01416 ---initial-mass 9.5521 --metallicity 0.01416 ---initial-mass 9.5559 --metallicity 0.01416 ---initial-mass 9.5597 --metallicity 0.01416 ---initial-mass 9.5635 --metallicity 0.01416 ---initial-mass 9.5674 --metallicity 0.01416 ---initial-mass 9.5712 --metallicity 0.01416 ---initial-mass 9.575 --metallicity 0.01416 ---initial-mass 9.5788 --metallicity 0.01416 ---initial-mass 9.5826 --metallicity 0.01416 ---initial-mass 9.5864 --metallicity 0.01416 ---initial-mass 9.5903 --metallicity 0.01416 ---initial-mass 9.5941 --metallicity 0.01416 ---initial-mass 9.5979 --metallicity 0.01416 ---initial-mass 9.6017 --metallicity 0.01416 ---initial-mass 9.6056 --metallicity 0.01416 ---initial-mass 9.6094 --metallicity 0.01416 ---initial-mass 9.6132 --metallicity 0.01416 ---initial-mass 9.617 --metallicity 0.01416 ---initial-mass 9.6209 --metallicity 0.01416 ---initial-mass 9.6247 --metallicity 0.01416 ---initial-mass 9.6285 --metallicity 0.01416 ---initial-mass 9.6324 --metallicity 0.01416 ---initial-mass 9.6362 --metallicity 0.01416 ---initial-mass 9.6401 --metallicity 0.01416 ---initial-mass 9.6439 --metallicity 0.01416 ---initial-mass 9.6477 --metallicity 0.01416 ---initial-mass 9.6516 --metallicity 0.01416 ---initial-mass 9.6554 --metallicity 0.01416 ---initial-mass 9.6593 --metallicity 0.01416 ---initial-mass 9.6631 --metallicity 0.01416 ---initial-mass 9.667 --metallicity 0.01416 ---initial-mass 9.6708 --metallicity 0.01416 ---initial-mass 9.6747 --metallicity 0.01416 ---initial-mass 9.6785 --metallicity 0.01416 ---initial-mass 9.6824 --metallicity 0.01416 ---initial-mass 9.6863 --metallicity 0.01416 ---initial-mass 9.6901 --metallicity 0.01416 ---initial-mass 9.694 --metallicity 0.01416 ---initial-mass 9.6979 --metallicity 0.01416 ---initial-mass 9.7017 --metallicity 0.01416 ---initial-mass 9.7056 --metallicity 0.01416 ---initial-mass 9.7095 --metallicity 0.01416 ---initial-mass 9.7133 --metallicity 0.01416 ---initial-mass 9.7172 --metallicity 0.01416 ---initial-mass 9.7211 --metallicity 0.01416 ---initial-mass 9.7249 --metallicity 0.01416 ---initial-mass 9.7288 --metallicity 0.01416 ---initial-mass 9.7327 --metallicity 0.01416 ---initial-mass 9.7366 --metallicity 0.01416 ---initial-mass 9.7405 --metallicity 0.01416 ---initial-mass 9.7443 --metallicity 0.01416 ---initial-mass 9.7482 --metallicity 0.01416 ---initial-mass 9.7521 --metallicity 0.01416 ---initial-mass 9.756 --metallicity 0.01416 ---initial-mass 9.7599 --metallicity 0.01416 ---initial-mass 9.7638 --metallicity 0.01416 ---initial-mass 9.7677 --metallicity 0.01416 ---initial-mass 9.7716 --metallicity 0.01416 ---initial-mass 9.7754 --metallicity 0.01416 ---initial-mass 9.7793 --metallicity 0.01416 ---initial-mass 9.7832 --metallicity 0.01416 ---initial-mass 9.7871 --metallicity 0.01416 ---initial-mass 9.791 --metallicity 0.01416 ---initial-mass 9.7949 --metallicity 0.01416 ---initial-mass 9.7988 --metallicity 0.01416 ---initial-mass 9.8028 --metallicity 0.01416 ---initial-mass 9.8067 --metallicity 0.01416 ---initial-mass 9.8106 --metallicity 0.01416 ---initial-mass 9.8145 --metallicity 0.01416 ---initial-mass 9.8184 --metallicity 0.01416 ---initial-mass 9.8223 --metallicity 0.01416 ---initial-mass 9.8262 --metallicity 0.01416 ---initial-mass 9.8301 --metallicity 0.01416 ---initial-mass 9.8341 --metallicity 0.01416 ---initial-mass 9.838 --metallicity 0.01416 ---initial-mass 9.8419 --metallicity 0.01416 ---initial-mass 9.8458 --metallicity 0.01416 ---initial-mass 9.8497 --metallicity 0.01416 ---initial-mass 9.8537 --metallicity 0.01416 ---initial-mass 9.8576 --metallicity 0.01416 ---initial-mass 9.8615 --metallicity 0.01416 ---initial-mass 9.8655 --metallicity 0.01416 ---initial-mass 9.8694 --metallicity 0.01416 ---initial-mass 9.8733 --metallicity 0.01416 ---initial-mass 9.8773 --metallicity 0.01416 ---initial-mass 9.8812 --metallicity 0.01416 ---initial-mass 9.8851 --metallicity 0.01416 ---initial-mass 9.8891 --metallicity 0.01416 ---initial-mass 9.893 --metallicity 0.01416 ---initial-mass 9.8969 --metallicity 0.01416 ---initial-mass 9.9009 --metallicity 0.01416 ---initial-mass 9.9048 --metallicity 0.01416 ---initial-mass 9.9088 --metallicity 0.01416 ---initial-mass 9.9127 --metallicity 0.01416 ---initial-mass 9.9167 --metallicity 0.01416 ---initial-mass 9.9206 --metallicity 0.01416 ---initial-mass 9.9246 --metallicity 0.01416 ---initial-mass 9.9285 --metallicity 0.01416 ---initial-mass 9.9325 --metallicity 0.01416 ---initial-mass 9.9365 --metallicity 0.01416 ---initial-mass 9.9404 --metallicity 0.01416 ---initial-mass 9.9444 --metallicity 0.01416 ---initial-mass 9.9484 --metallicity 0.01416 ---initial-mass 9.9523 --metallicity 0.01416 ---initial-mass 9.9563 --metallicity 0.01416 ---initial-mass 9.9603 --metallicity 0.01416 ---initial-mass 9.9642 --metallicity 0.01416 ---initial-mass 9.9682 --metallicity 0.01416 ---initial-mass 9.9722 --metallicity 0.01416 ---initial-mass 9.9761 --metallicity 0.01416 ---initial-mass 9.9801 --metallicity 0.01416 ---initial-mass 9.9841 --metallicity 0.01416 ---initial-mass 9.9881 --metallicity 0.01416 ---initial-mass 9.9921 --metallicity 0.01416 ---initial-mass 9.996 --metallicity 0.01416 ---initial-mass 10.0 --metallicity 0.01416 ---initial-mass 10.004 --metallicity 0.01416 ---initial-mass 10.008 --metallicity 0.01416 ---initial-mass 10.012 --metallicity 0.01416 ---initial-mass 10.016 --metallicity 0.01416 ---initial-mass 10.02 --metallicity 0.01416 ---initial-mass 10.024 --metallicity 0.01416 ---initial-mass 10.028 --metallicity 0.01416 ---initial-mass 10.0319 --metallicity 0.01416 ---initial-mass 10.0359 --metallicity 0.01416 ---initial-mass 10.0399 --metallicity 0.01416 ---initial-mass 10.0439 --metallicity 0.01416 ---initial-mass 10.0479 --metallicity 0.01416 ---initial-mass 10.052 --metallicity 0.01416 ---initial-mass 10.056 --metallicity 0.01416 ---initial-mass 10.06 --metallicity 0.01416 ---initial-mass 10.064 --metallicity 0.01416 ---initial-mass 10.068 --metallicity 0.01416 ---initial-mass 10.072 --metallicity 0.01416 ---initial-mass 10.076 --metallicity 0.01416 ---initial-mass 10.08 --metallicity 0.01416 ---initial-mass 10.084 --metallicity 0.01416 ---initial-mass 10.0881 --metallicity 0.01416 ---initial-mass 10.0921 --metallicity 0.01416 ---initial-mass 10.0961 --metallicity 0.01416 ---initial-mass 10.1001 --metallicity 0.01416 ---initial-mass 10.1042 --metallicity 0.01416 ---initial-mass 10.1082 --metallicity 0.01416 ---initial-mass 10.1122 --metallicity 0.01416 ---initial-mass 10.1162 --metallicity 0.01416 ---initial-mass 10.1203 --metallicity 0.01416 ---initial-mass 10.1243 --metallicity 0.01416 ---initial-mass 10.1283 --metallicity 0.01416 ---initial-mass 10.1324 --metallicity 0.01416 ---initial-mass 10.1364 --metallicity 0.01416 ---initial-mass 10.1405 --metallicity 0.01416 ---initial-mass 10.1445 --metallicity 0.01416 ---initial-mass 10.1485 --metallicity 0.01416 ---initial-mass 10.1526 --metallicity 0.01416 ---initial-mass 10.1566 --metallicity 0.01416 ---initial-mass 10.1607 --metallicity 0.01416 ---initial-mass 10.1647 --metallicity 0.01416 ---initial-mass 10.1688 --metallicity 0.01416 ---initial-mass 10.1728 --metallicity 0.01416 ---initial-mass 10.1769 --metallicity 0.01416 ---initial-mass 10.1809 --metallicity 0.01416 ---initial-mass 10.185 --metallicity 0.01416 ---initial-mass 10.1891 --metallicity 0.01416 ---initial-mass 10.1931 --metallicity 0.01416 ---initial-mass 10.1972 --metallicity 0.01416 ---initial-mass 10.2013 --metallicity 0.01416 ---initial-mass 10.2053 --metallicity 0.01416 ---initial-mass 10.2094 --metallicity 0.01416 ---initial-mass 10.2135 --metallicity 0.01416 ---initial-mass 10.2175 --metallicity 0.01416 ---initial-mass 10.2216 --metallicity 0.01416 ---initial-mass 10.2257 --metallicity 0.01416 ---initial-mass 10.2297 --metallicity 0.01416 ---initial-mass 10.2338 --metallicity 0.01416 ---initial-mass 10.2379 --metallicity 0.01416 ---initial-mass 10.242 --metallicity 0.01416 ---initial-mass 10.2461 --metallicity 0.01416 ---initial-mass 10.2501 --metallicity 0.01416 ---initial-mass 10.2542 --metallicity 0.01416 ---initial-mass 10.2583 --metallicity 0.01416 ---initial-mass 10.2624 --metallicity 0.01416 ---initial-mass 10.2665 --metallicity 0.01416 ---initial-mass 10.2706 --metallicity 0.01416 ---initial-mass 10.2747 --metallicity 0.01416 ---initial-mass 10.2788 --metallicity 0.01416 ---initial-mass 10.2829 --metallicity 0.01416 ---initial-mass 10.287 --metallicity 0.01416 ---initial-mass 10.2911 --metallicity 0.01416 ---initial-mass 10.2952 --metallicity 0.01416 ---initial-mass 10.2993 --metallicity 0.01416 ---initial-mass 10.3034 --metallicity 0.01416 ---initial-mass 10.3075 --metallicity 0.01416 ---initial-mass 10.3116 --metallicity 0.01416 ---initial-mass 10.3157 --metallicity 0.01416 ---initial-mass 10.3198 --metallicity 0.01416 ---initial-mass 10.3239 --metallicity 0.01416 ---initial-mass 10.328 --metallicity 0.01416 ---initial-mass 10.3322 --metallicity 0.01416 ---initial-mass 10.3363 --metallicity 0.01416 ---initial-mass 10.3404 --metallicity 0.01416 ---initial-mass 10.3445 --metallicity 0.01416 ---initial-mass 10.3486 --metallicity 0.01416 ---initial-mass 10.3528 --metallicity 0.01416 ---initial-mass 10.3569 --metallicity 0.01416 ---initial-mass 10.361 --metallicity 0.01416 ---initial-mass 10.3652 --metallicity 0.01416 ---initial-mass 10.3693 --metallicity 0.01416 ---initial-mass 10.3734 --metallicity 0.01416 ---initial-mass 10.3776 --metallicity 0.01416 ---initial-mass 10.3817 --metallicity 0.01416 ---initial-mass 10.3858 --metallicity 0.01416 ---initial-mass 10.39 --metallicity 0.01416 ---initial-mass 10.3941 --metallicity 0.01416 ---initial-mass 10.3982 --metallicity 0.01416 ---initial-mass 10.4024 --metallicity 0.01416 ---initial-mass 10.4065 --metallicity 0.01416 ---initial-mass 10.4107 --metallicity 0.01416 ---initial-mass 10.4148 --metallicity 0.01416 ---initial-mass 10.419 --metallicity 0.01416 ---initial-mass 10.4231 --metallicity 0.01416 ---initial-mass 10.4273 --metallicity 0.01416 ---initial-mass 10.4314 --metallicity 0.01416 ---initial-mass 10.4356 --metallicity 0.01416 ---initial-mass 10.4398 --metallicity 0.01416 ---initial-mass 10.4439 --metallicity 0.01416 ---initial-mass 10.4481 --metallicity 0.01416 ---initial-mass 10.4523 --metallicity 0.01416 ---initial-mass 10.4564 --metallicity 0.01416 ---initial-mass 10.4606 --metallicity 0.01416 ---initial-mass 10.4648 --metallicity 0.01416 ---initial-mass 10.4689 --metallicity 0.01416 ---initial-mass 10.4731 --metallicity 0.01416 ---initial-mass 10.4773 --metallicity 0.01416 ---initial-mass 10.4814 --metallicity 0.01416 ---initial-mass 10.4856 --metallicity 0.01416 ---initial-mass 10.4898 --metallicity 0.01416 ---initial-mass 10.494 --metallicity 0.01416 ---initial-mass 10.4982 --metallicity 0.01416 ---initial-mass 10.5024 --metallicity 0.01416 ---initial-mass 10.5065 --metallicity 0.01416 ---initial-mass 10.5107 --metallicity 0.01416 ---initial-mass 10.5149 --metallicity 0.01416 ---initial-mass 10.5191 --metallicity 0.01416 ---initial-mass 10.5233 --metallicity 0.01416 ---initial-mass 10.5275 --metallicity 0.01416 ---initial-mass 10.5317 --metallicity 0.01416 ---initial-mass 10.5359 --metallicity 0.01416 ---initial-mass 10.5401 --metallicity 0.01416 ---initial-mass 10.5443 --metallicity 0.01416 ---initial-mass 10.5485 --metallicity 0.01416 ---initial-mass 10.5527 --metallicity 0.01416 ---initial-mass 10.5569 --metallicity 0.01416 ---initial-mass 10.5611 --metallicity 0.01416 ---initial-mass 10.5653 --metallicity 0.01416 ---initial-mass 10.5695 --metallicity 0.01416 ---initial-mass 10.5737 --metallicity 0.01416 ---initial-mass 10.578 --metallicity 0.01416 ---initial-mass 10.5822 --metallicity 0.01416 ---initial-mass 10.5864 --metallicity 0.01416 ---initial-mass 10.5906 --metallicity 0.01416 ---initial-mass 10.5948 --metallicity 0.01416 ---initial-mass 10.599 --metallicity 0.01416 ---initial-mass 10.6033 --metallicity 0.01416 ---initial-mass 10.6075 --metallicity 0.01416 ---initial-mass 10.6117 --metallicity 0.01416 ---initial-mass 10.616 --metallicity 0.01416 ---initial-mass 10.6202 --metallicity 0.01416 ---initial-mass 10.6244 --metallicity 0.01416 ---initial-mass 10.6287 --metallicity 0.01416 ---initial-mass 10.6329 --metallicity 0.01416 ---initial-mass 10.6371 --metallicity 0.01416 ---initial-mass 10.6414 --metallicity 0.01416 ---initial-mass 10.6456 --metallicity 0.01416 ---initial-mass 10.6498 --metallicity 0.01416 ---initial-mass 10.6541 --metallicity 0.01416 ---initial-mass 10.6583 --metallicity 0.01416 ---initial-mass 10.6626 --metallicity 0.01416 ---initial-mass 10.6668 --metallicity 0.01416 ---initial-mass 10.6711 --metallicity 0.01416 ---initial-mass 10.6753 --metallicity 0.01416 ---initial-mass 10.6796 --metallicity 0.01416 ---initial-mass 10.6839 --metallicity 0.01416 ---initial-mass 10.6881 --metallicity 0.01416 ---initial-mass 10.6924 --metallicity 0.01416 ---initial-mass 10.6966 --metallicity 0.01416 ---initial-mass 10.7009 --metallicity 0.01416 ---initial-mass 10.7052 --metallicity 0.01416 ---initial-mass 10.7094 --metallicity 0.01416 ---initial-mass 10.7137 --metallicity 0.01416 ---initial-mass 10.718 --metallicity 0.01416 ---initial-mass 10.7222 --metallicity 0.01416 ---initial-mass 10.7265 --metallicity 0.01416 ---initial-mass 10.7308 --metallicity 0.01416 ---initial-mass 10.7351 --metallicity 0.01416 ---initial-mass 10.7393 --metallicity 0.01416 ---initial-mass 10.7436 --metallicity 0.01416 ---initial-mass 10.7479 --metallicity 0.01416 ---initial-mass 10.7522 --metallicity 0.01416 ---initial-mass 10.7565 --metallicity 0.01416 ---initial-mass 10.7608 --metallicity 0.01416 ---initial-mass 10.765 --metallicity 0.01416 ---initial-mass 10.7693 --metallicity 0.01416 ---initial-mass 10.7736 --metallicity 0.01416 ---initial-mass 10.7779 --metallicity 0.01416 ---initial-mass 10.7822 --metallicity 0.01416 ---initial-mass 10.7865 --metallicity 0.01416 ---initial-mass 10.7908 --metallicity 0.01416 ---initial-mass 10.7951 --metallicity 0.01416 ---initial-mass 10.7994 --metallicity 0.01416 ---initial-mass 10.8037 --metallicity 0.01416 ---initial-mass 10.808 --metallicity 0.01416 ---initial-mass 10.8123 --metallicity 0.01416 ---initial-mass 10.8166 --metallicity 0.01416 ---initial-mass 10.821 --metallicity 0.01416 ---initial-mass 10.8253 --metallicity 0.01416 ---initial-mass 10.8296 --metallicity 0.01416 ---initial-mass 10.8339 --metallicity 0.01416 ---initial-mass 10.8382 --metallicity 0.01416 ---initial-mass 10.8425 --metallicity 0.01416 ---initial-mass 10.8469 --metallicity 0.01416 ---initial-mass 10.8512 --metallicity 0.01416 ---initial-mass 10.8555 --metallicity 0.01416 ---initial-mass 10.8598 --metallicity 0.01416 ---initial-mass 10.8642 --metallicity 0.01416 ---initial-mass 10.8685 --metallicity 0.01416 ---initial-mass 10.8728 --metallicity 0.01416 ---initial-mass 10.8772 --metallicity 0.01416 ---initial-mass 10.8815 --metallicity 0.01416 ---initial-mass 10.8858 --metallicity 0.01416 ---initial-mass 10.8902 --metallicity 0.01416 ---initial-mass 10.8945 --metallicity 0.01416 ---initial-mass 10.8989 --metallicity 0.01416 ---initial-mass 10.9032 --metallicity 0.01416 ---initial-mass 10.9075 --metallicity 0.01416 ---initial-mass 10.9119 --metallicity 0.01416 ---initial-mass 10.9162 --metallicity 0.01416 ---initial-mass 10.9206 --metallicity 0.01416 ---initial-mass 10.9249 --metallicity 0.01416 ---initial-mass 10.9293 --metallicity 0.01416 ---initial-mass 10.9336 --metallicity 0.01416 ---initial-mass 10.938 --metallicity 0.01416 ---initial-mass 10.9424 --metallicity 0.01416 ---initial-mass 10.9467 --metallicity 0.01416 ---initial-mass 10.9511 --metallicity 0.01416 ---initial-mass 10.9555 --metallicity 0.01416 ---initial-mass 10.9598 --metallicity 0.01416 ---initial-mass 10.9642 --metallicity 0.01416 ---initial-mass 10.9686 --metallicity 0.01416 ---initial-mass 10.9729 --metallicity 0.01416 ---initial-mass 10.9773 --metallicity 0.01416 ---initial-mass 10.9817 --metallicity 0.01416 ---initial-mass 10.9861 --metallicity 0.01416 ---initial-mass 10.9904 --metallicity 0.01416 ---initial-mass 10.9948 --metallicity 0.01416 ---initial-mass 10.9992 --metallicity 0.01416 ---initial-mass 11.0036 --metallicity 0.01416 ---initial-mass 11.008 --metallicity 0.01416 ---initial-mass 11.0124 --metallicity 0.01416 ---initial-mass 11.0167 --metallicity 0.01416 ---initial-mass 11.0211 --metallicity 0.01416 ---initial-mass 11.0255 --metallicity 0.01416 ---initial-mass 11.0299 --metallicity 0.01416 ---initial-mass 11.0343 --metallicity 0.01416 ---initial-mass 11.0387 --metallicity 0.01416 ---initial-mass 11.0431 --metallicity 0.01416 ---initial-mass 11.0475 --metallicity 0.01416 ---initial-mass 11.0519 --metallicity 0.01416 ---initial-mass 11.0563 --metallicity 0.01416 ---initial-mass 11.0607 --metallicity 0.01416 ---initial-mass 11.0651 --metallicity 0.01416 ---initial-mass 11.0695 --metallicity 0.01416 ---initial-mass 11.074 --metallicity 0.01416 ---initial-mass 11.0784 --metallicity 0.01416 ---initial-mass 11.0828 --metallicity 0.01416 ---initial-mass 11.0872 --metallicity 0.01416 ---initial-mass 11.0916 --metallicity 0.01416 ---initial-mass 11.096 --metallicity 0.01416 ---initial-mass 11.1005 --metallicity 0.01416 ---initial-mass 11.1049 --metallicity 0.01416 ---initial-mass 11.1093 --metallicity 0.01416 ---initial-mass 11.1137 --metallicity 0.01416 ---initial-mass 11.1182 --metallicity 0.01416 ---initial-mass 11.1226 --metallicity 0.01416 ---initial-mass 11.127 --metallicity 0.01416 ---initial-mass 11.1315 --metallicity 0.01416 ---initial-mass 11.1359 --metallicity 0.01416 ---initial-mass 11.1403 --metallicity 0.01416 ---initial-mass 11.1448 --metallicity 0.01416 ---initial-mass 11.1492 --metallicity 0.01416 ---initial-mass 11.1537 --metallicity 0.01416 ---initial-mass 11.1581 --metallicity 0.01416 ---initial-mass 11.1626 --metallicity 0.01416 ---initial-mass 11.167 --metallicity 0.01416 ---initial-mass 11.1715 --metallicity 0.01416 ---initial-mass 11.1759 --metallicity 0.01416 ---initial-mass 11.1804 --metallicity 0.01416 ---initial-mass 11.1848 --metallicity 0.01416 ---initial-mass 11.1893 --metallicity 0.01416 ---initial-mass 11.1937 --metallicity 0.01416 ---initial-mass 11.1982 --metallicity 0.01416 ---initial-mass 11.2027 --metallicity 0.01416 ---initial-mass 11.2071 --metallicity 0.01416 ---initial-mass 11.2116 --metallicity 0.01416 ---initial-mass 11.2161 --metallicity 0.01416 ---initial-mass 11.2205 --metallicity 0.01416 ---initial-mass 11.225 --metallicity 0.01416 ---initial-mass 11.2295 --metallicity 0.01416 ---initial-mass 11.234 --metallicity 0.01416 ---initial-mass 11.2384 --metallicity 0.01416 ---initial-mass 11.2429 --metallicity 0.01416 ---initial-mass 11.2474 --metallicity 0.01416 ---initial-mass 11.2519 --metallicity 0.01416 ---initial-mass 11.2564 --metallicity 0.01416 ---initial-mass 11.2609 --metallicity 0.01416 ---initial-mass 11.2653 --metallicity 0.01416 ---initial-mass 11.2698 --metallicity 0.01416 ---initial-mass 11.2743 --metallicity 0.01416 ---initial-mass 11.2788 --metallicity 0.01416 ---initial-mass 11.2833 --metallicity 0.01416 ---initial-mass 11.2878 --metallicity 0.01416 ---initial-mass 11.2923 --metallicity 0.01416 ---initial-mass 11.2968 --metallicity 0.01416 ---initial-mass 11.3013 --metallicity 0.01416 ---initial-mass 11.3058 --metallicity 0.01416 ---initial-mass 11.3103 --metallicity 0.01416 ---initial-mass 11.3148 --metallicity 0.01416 ---initial-mass 11.3193 --metallicity 0.01416 ---initial-mass 11.3238 --metallicity 0.01416 ---initial-mass 11.3284 --metallicity 0.01416 ---initial-mass 11.3329 --metallicity 0.01416 ---initial-mass 11.3374 --metallicity 0.01416 ---initial-mass 11.3419 --metallicity 0.01416 ---initial-mass 11.3464 --metallicity 0.01416 ---initial-mass 11.351 --metallicity 0.01416 ---initial-mass 11.3555 --metallicity 0.01416 ---initial-mass 11.36 --metallicity 0.01416 ---initial-mass 11.3645 --metallicity 0.01416 ---initial-mass 11.3691 --metallicity 0.01416 ---initial-mass 11.3736 --metallicity 0.01416 ---initial-mass 11.3781 --metallicity 0.01416 ---initial-mass 11.3827 --metallicity 0.01416 ---initial-mass 11.3872 --metallicity 0.01416 ---initial-mass 11.3917 --metallicity 0.01416 ---initial-mass 11.3963 --metallicity 0.01416 ---initial-mass 11.4008 --metallicity 0.01416 ---initial-mass 11.4054 --metallicity 0.01416 ---initial-mass 11.4099 --metallicity 0.01416 ---initial-mass 11.4145 --metallicity 0.01416 ---initial-mass 11.419 --metallicity 0.01416 ---initial-mass 11.4236 --metallicity 0.01416 ---initial-mass 11.4281 --metallicity 0.01416 ---initial-mass 11.4327 --metallicity 0.01416 ---initial-mass 11.4372 --metallicity 0.01416 ---initial-mass 11.4418 --metallicity 0.01416 ---initial-mass 11.4463 --metallicity 0.01416 ---initial-mass 11.4509 --metallicity 0.01416 ---initial-mass 11.4555 --metallicity 0.01416 ---initial-mass 11.46 --metallicity 0.01416 ---initial-mass 11.4646 --metallicity 0.01416 ---initial-mass 11.4692 --metallicity 0.01416 ---initial-mass 11.4737 --metallicity 0.01416 ---initial-mass 11.4783 --metallicity 0.01416 ---initial-mass 11.4829 --metallicity 0.01416 ---initial-mass 11.4875 --metallicity 0.01416 ---initial-mass 11.492 --metallicity 0.01416 ---initial-mass 11.4966 --metallicity 0.01416 ---initial-mass 11.5012 --metallicity 0.01416 ---initial-mass 11.5058 --metallicity 0.01416 ---initial-mass 11.5104 --metallicity 0.01416 ---initial-mass 11.515 --metallicity 0.01416 ---initial-mass 11.5195 --metallicity 0.01416 ---initial-mass 11.5241 --metallicity 0.01416 ---initial-mass 11.5287 --metallicity 0.01416 ---initial-mass 11.5333 --metallicity 0.01416 ---initial-mass 11.5379 --metallicity 0.01416 ---initial-mass 11.5425 --metallicity 0.01416 ---initial-mass 11.5471 --metallicity 0.01416 ---initial-mass 11.5517 --metallicity 0.01416 ---initial-mass 11.5563 --metallicity 0.01416 ---initial-mass 11.5609 --metallicity 0.01416 ---initial-mass 11.5655 --metallicity 0.01416 ---initial-mass 11.5701 --metallicity 0.01416 ---initial-mass 11.5748 --metallicity 0.01416 ---initial-mass 11.5794 --metallicity 0.01416 ---initial-mass 11.584 --metallicity 0.01416 ---initial-mass 11.5886 --metallicity 0.01416 ---initial-mass 11.5932 --metallicity 0.01416 ---initial-mass 11.5978 --metallicity 0.01416 ---initial-mass 11.6025 --metallicity 0.01416 ---initial-mass 11.6071 --metallicity 0.01416 ---initial-mass 11.6117 --metallicity 0.01416 ---initial-mass 11.6163 --metallicity 0.01416 ---initial-mass 11.621 --metallicity 0.01416 ---initial-mass 11.6256 --metallicity 0.01416 ---initial-mass 11.6302 --metallicity 0.01416 ---initial-mass 11.6349 --metallicity 0.01416 ---initial-mass 11.6395 --metallicity 0.01416 ---initial-mass 11.6442 --metallicity 0.01416 ---initial-mass 11.6488 --metallicity 0.01416 ---initial-mass 11.6534 --metallicity 0.01416 ---initial-mass 11.6581 --metallicity 0.01416 ---initial-mass 11.6627 --metallicity 0.01416 ---initial-mass 11.6674 --metallicity 0.01416 ---initial-mass 11.672 --metallicity 0.01416 ---initial-mass 11.6767 --metallicity 0.01416 ---initial-mass 11.6813 --metallicity 0.01416 ---initial-mass 11.686 --metallicity 0.01416 ---initial-mass 11.6906 --metallicity 0.01416 ---initial-mass 11.6953 --metallicity 0.01416 ---initial-mass 11.7 --metallicity 0.01416 ---initial-mass 11.7046 --metallicity 0.01416 ---initial-mass 11.7093 --metallicity 0.01416 ---initial-mass 11.714 --metallicity 0.01416 ---initial-mass 11.7186 --metallicity 0.01416 ---initial-mass 11.7233 --metallicity 0.01416 ---initial-mass 11.728 --metallicity 0.01416 ---initial-mass 11.7326 --metallicity 0.01416 ---initial-mass 11.7373 --metallicity 0.01416 ---initial-mass 11.742 --metallicity 0.01416 ---initial-mass 11.7467 --metallicity 0.01416 ---initial-mass 11.7514 --metallicity 0.01416 ---initial-mass 11.756 --metallicity 0.01416 ---initial-mass 11.7607 --metallicity 0.01416 ---initial-mass 11.7654 --metallicity 0.01416 ---initial-mass 11.7701 --metallicity 0.01416 ---initial-mass 11.7748 --metallicity 0.01416 ---initial-mass 11.7795 --metallicity 0.01416 ---initial-mass 11.7842 --metallicity 0.01416 ---initial-mass 11.7889 --metallicity 0.01416 ---initial-mass 11.7936 --metallicity 0.01416 ---initial-mass 11.7983 --metallicity 0.01416 ---initial-mass 11.803 --metallicity 0.01416 ---initial-mass 11.8077 --metallicity 0.01416 ---initial-mass 11.8124 --metallicity 0.01416 ---initial-mass 11.8171 --metallicity 0.01416 ---initial-mass 11.8218 --metallicity 0.01416 ---initial-mass 11.8265 --metallicity 0.01416 ---initial-mass 11.8312 --metallicity 0.01416 ---initial-mass 11.8359 --metallicity 0.01416 ---initial-mass 11.8407 --metallicity 0.01416 ---initial-mass 11.8454 --metallicity 0.01416 ---initial-mass 11.8501 --metallicity 0.01416 ---initial-mass 11.8548 --metallicity 0.01416 ---initial-mass 11.8596 --metallicity 0.01416 ---initial-mass 11.8643 --metallicity 0.01416 ---initial-mass 11.869 --metallicity 0.01416 ---initial-mass 11.8737 --metallicity 0.01416 ---initial-mass 11.8785 --metallicity 0.01416 ---initial-mass 11.8832 --metallicity 0.01416 ---initial-mass 11.8879 --metallicity 0.01416 ---initial-mass 11.8927 --metallicity 0.01416 ---initial-mass 11.8974 --metallicity 0.01416 ---initial-mass 11.9022 --metallicity 0.01416 ---initial-mass 11.9069 --metallicity 0.01416 ---initial-mass 11.9117 --metallicity 0.01416 ---initial-mass 11.9164 --metallicity 0.01416 ---initial-mass 11.9211 --metallicity 0.01416 ---initial-mass 11.9259 --metallicity 0.01416 ---initial-mass 11.9307 --metallicity 0.01416 ---initial-mass 11.9354 --metallicity 0.01416 ---initial-mass 11.9402 --metallicity 0.01416 ---initial-mass 11.9449 --metallicity 0.01416 ---initial-mass 11.9497 --metallicity 0.01416 ---initial-mass 11.9544 --metallicity 0.01416 ---initial-mass 11.9592 --metallicity 0.01416 ---initial-mass 11.964 --metallicity 0.01416 ---initial-mass 11.9687 --metallicity 0.01416 ---initial-mass 11.9735 --metallicity 0.01416 ---initial-mass 11.9783 --metallicity 0.01416 ---initial-mass 11.9831 --metallicity 0.01416 ---initial-mass 11.9878 --metallicity 0.01416 ---initial-mass 11.9926 --metallicity 0.01416 ---initial-mass 11.9974 --metallicity 0.01416 ---initial-mass 12.0022 --metallicity 0.01416 ---initial-mass 12.007 --metallicity 0.01416 ---initial-mass 12.0117 --metallicity 0.01416 ---initial-mass 12.0165 --metallicity 0.01416 ---initial-mass 12.0213 --metallicity 0.01416 ---initial-mass 12.0261 --metallicity 0.01416 ---initial-mass 12.0309 --metallicity 0.01416 ---initial-mass 12.0357 --metallicity 0.01416 ---initial-mass 12.0405 --metallicity 0.01416 ---initial-mass 12.0453 --metallicity 0.01416 ---initial-mass 12.0501 --metallicity 0.01416 ---initial-mass 12.0549 --metallicity 0.01416 ---initial-mass 12.0597 --metallicity 0.01416 ---initial-mass 12.0645 --metallicity 0.01416 ---initial-mass 12.0693 --metallicity 0.01416 ---initial-mass 12.0741 --metallicity 0.01416 ---initial-mass 12.0789 --metallicity 0.01416 ---initial-mass 12.0838 --metallicity 0.01416 ---initial-mass 12.0886 --metallicity 0.01416 ---initial-mass 12.0934 --metallicity 0.01416 ---initial-mass 12.0982 --metallicity 0.01416 ---initial-mass 12.103 --metallicity 0.01416 ---initial-mass 12.1079 --metallicity 0.01416 ---initial-mass 12.1127 --metallicity 0.01416 ---initial-mass 12.1175 --metallicity 0.01416 ---initial-mass 12.1223 --metallicity 0.01416 ---initial-mass 12.1272 --metallicity 0.01416 ---initial-mass 12.132 --metallicity 0.01416 ---initial-mass 12.1368 --metallicity 0.01416 ---initial-mass 12.1417 --metallicity 0.01416 ---initial-mass 12.1465 --metallicity 0.01416 ---initial-mass 12.1514 --metallicity 0.01416 ---initial-mass 12.1562 --metallicity 0.01416 ---initial-mass 12.161 --metallicity 0.01416 ---initial-mass 12.1659 --metallicity 0.01416 ---initial-mass 12.1707 --metallicity 0.01416 ---initial-mass 12.1756 --metallicity 0.01416 ---initial-mass 12.1804 --metallicity 0.01416 ---initial-mass 12.1853 --metallicity 0.01416 ---initial-mass 12.1902 --metallicity 0.01416 ---initial-mass 12.195 --metallicity 0.01416 ---initial-mass 12.1999 --metallicity 0.01416 ---initial-mass 12.2047 --metallicity 0.01416 ---initial-mass 12.2096 --metallicity 0.01416 ---initial-mass 12.2145 --metallicity 0.01416 ---initial-mass 12.2193 --metallicity 0.01416 ---initial-mass 12.2242 --metallicity 0.01416 ---initial-mass 12.2291 --metallicity 0.01416 ---initial-mass 12.2339 --metallicity 0.01416 ---initial-mass 12.2388 --metallicity 0.01416 ---initial-mass 12.2437 --metallicity 0.01416 ---initial-mass 12.2486 --metallicity 0.01416 ---initial-mass 12.2535 --metallicity 0.01416 ---initial-mass 12.2583 --metallicity 0.01416 ---initial-mass 12.2632 --metallicity 0.01416 ---initial-mass 12.2681 --metallicity 0.01416 ---initial-mass 12.273 --metallicity 0.01416 ---initial-mass 12.2779 --metallicity 0.01416 ---initial-mass 12.2828 --metallicity 0.01416 ---initial-mass 12.2877 --metallicity 0.01416 ---initial-mass 12.2926 --metallicity 0.01416 ---initial-mass 12.2975 --metallicity 0.01416 ---initial-mass 12.3024 --metallicity 0.01416 ---initial-mass 12.3073 --metallicity 0.01416 ---initial-mass 12.3122 --metallicity 0.01416 ---initial-mass 12.3171 --metallicity 0.01416 ---initial-mass 12.322 --metallicity 0.01416 ---initial-mass 12.3269 --metallicity 0.01416 ---initial-mass 12.3318 --metallicity 0.01416 ---initial-mass 12.3368 --metallicity 0.01416 ---initial-mass 12.3417 --metallicity 0.01416 ---initial-mass 12.3466 --metallicity 0.01416 ---initial-mass 12.3515 --metallicity 0.01416 ---initial-mass 12.3564 --metallicity 0.01416 ---initial-mass 12.3614 --metallicity 0.01416 ---initial-mass 12.3663 --metallicity 0.01416 ---initial-mass 12.3712 --metallicity 0.01416 ---initial-mass 12.3761 --metallicity 0.01416 ---initial-mass 12.3811 --metallicity 0.01416 ---initial-mass 12.386 --metallicity 0.01416 ---initial-mass 12.3909 --metallicity 0.01416 ---initial-mass 12.3959 --metallicity 0.01416 ---initial-mass 12.4008 --metallicity 0.01416 ---initial-mass 12.4058 --metallicity 0.01416 ---initial-mass 12.4107 --metallicity 0.01416 ---initial-mass 12.4157 --metallicity 0.01416 ---initial-mass 12.4206 --metallicity 0.01416 ---initial-mass 12.4256 --metallicity 0.01416 ---initial-mass 12.4305 --metallicity 0.01416 ---initial-mass 12.4355 --metallicity 0.01416 ---initial-mass 12.4404 --metallicity 0.01416 ---initial-mass 12.4454 --metallicity 0.01416 ---initial-mass 12.4503 --metallicity 0.01416 ---initial-mass 12.4553 --metallicity 0.01416 ---initial-mass 12.4603 --metallicity 0.01416 ---initial-mass 12.4652 --metallicity 0.01416 ---initial-mass 12.4702 --metallicity 0.01416 ---initial-mass 12.4752 --metallicity 0.01416 ---initial-mass 12.4801 --metallicity 0.01416 ---initial-mass 12.4851 --metallicity 0.01416 ---initial-mass 12.4901 --metallicity 0.01416 ---initial-mass 12.4951 --metallicity 0.01416 ---initial-mass 12.5 --metallicity 0.01416 ---initial-mass 12.505 --metallicity 0.01416 ---initial-mass 12.51 --metallicity 0.01416 ---initial-mass 12.515 --metallicity 0.01416 ---initial-mass 12.52 --metallicity 0.01416 ---initial-mass 12.525 --metallicity 0.01416 ---initial-mass 12.53 --metallicity 0.01416 ---initial-mass 12.535 --metallicity 0.01416 ---initial-mass 12.54 --metallicity 0.01416 ---initial-mass 12.545 --metallicity 0.01416 ---initial-mass 12.55 --metallicity 0.01416 ---initial-mass 12.555 --metallicity 0.01416 ---initial-mass 12.56 --metallicity 0.01416 ---initial-mass 12.565 --metallicity 0.01416 ---initial-mass 12.57 --metallicity 0.01416 ---initial-mass 12.575 --metallicity 0.01416 ---initial-mass 12.58 --metallicity 0.01416 ---initial-mass 12.585 --metallicity 0.01416 ---initial-mass 12.59 --metallicity 0.01416 ---initial-mass 12.595 --metallicity 0.01416 ---initial-mass 12.6001 --metallicity 0.01416 ---initial-mass 12.6051 --metallicity 0.01416 ---initial-mass 12.6101 --metallicity 0.01416 ---initial-mass 12.6151 --metallicity 0.01416 ---initial-mass 12.6202 --metallicity 0.01416 ---initial-mass 12.6252 --metallicity 0.01416 ---initial-mass 12.6302 --metallicity 0.01416 ---initial-mass 12.6353 --metallicity 0.01416 ---initial-mass 12.6403 --metallicity 0.01416 ---initial-mass 12.6453 --metallicity 0.01416 ---initial-mass 12.6504 --metallicity 0.01416 ---initial-mass 12.6554 --metallicity 0.01416 ---initial-mass 12.6605 --metallicity 0.01416 ---initial-mass 12.6655 --metallicity 0.01416 ---initial-mass 12.6706 --metallicity 0.01416 ---initial-mass 12.6756 --metallicity 0.01416 ---initial-mass 12.6807 --metallicity 0.01416 ---initial-mass 12.6857 --metallicity 0.01416 ---initial-mass 12.6908 --metallicity 0.01416 ---initial-mass 12.6958 --metallicity 0.01416 ---initial-mass 12.7009 --metallicity 0.01416 ---initial-mass 12.7059 --metallicity 0.01416 ---initial-mass 12.711 --metallicity 0.01416 ---initial-mass 12.7161 --metallicity 0.01416 ---initial-mass 12.7211 --metallicity 0.01416 ---initial-mass 12.7262 --metallicity 0.01416 ---initial-mass 12.7313 --metallicity 0.01416 ---initial-mass 12.7364 --metallicity 0.01416 ---initial-mass 12.7414 --metallicity 0.01416 ---initial-mass 12.7465 --metallicity 0.01416 ---initial-mass 12.7516 --metallicity 0.01416 ---initial-mass 12.7567 --metallicity 0.01416 ---initial-mass 12.7618 --metallicity 0.01416 ---initial-mass 12.7668 --metallicity 0.01416 ---initial-mass 12.7719 --metallicity 0.01416 ---initial-mass 12.777 --metallicity 0.01416 ---initial-mass 12.7821 --metallicity 0.01416 ---initial-mass 12.7872 --metallicity 0.01416 ---initial-mass 12.7923 --metallicity 0.01416 ---initial-mass 12.7974 --metallicity 0.01416 ---initial-mass 12.8025 --metallicity 0.01416 ---initial-mass 12.8076 --metallicity 0.01416 ---initial-mass 12.8127 --metallicity 0.01416 ---initial-mass 12.8178 --metallicity 0.01416 ---initial-mass 12.8229 --metallicity 0.01416 ---initial-mass 12.828 --metallicity 0.01416 ---initial-mass 12.8331 --metallicity 0.01416 ---initial-mass 12.8383 --metallicity 0.01416 ---initial-mass 12.8434 --metallicity 0.01416 ---initial-mass 12.8485 --metallicity 0.01416 ---initial-mass 12.8536 --metallicity 0.01416 ---initial-mass 12.8587 --metallicity 0.01416 ---initial-mass 12.8639 --metallicity 0.01416 ---initial-mass 12.869 --metallicity 0.01416 ---initial-mass 12.8741 --metallicity 0.01416 ---initial-mass 12.8793 --metallicity 0.01416 ---initial-mass 12.8844 --metallicity 0.01416 ---initial-mass 12.8895 --metallicity 0.01416 ---initial-mass 12.8947 --metallicity 0.01416 ---initial-mass 12.8998 --metallicity 0.01416 ---initial-mass 12.9049 --metallicity 0.01416 ---initial-mass 12.9101 --metallicity 0.01416 ---initial-mass 12.9152 --metallicity 0.01416 ---initial-mass 12.9204 --metallicity 0.01416 ---initial-mass 12.9255 --metallicity 0.01416 ---initial-mass 12.9307 --metallicity 0.01416 ---initial-mass 12.9358 --metallicity 0.01416 ---initial-mass 12.941 --metallicity 0.01416 ---initial-mass 12.9461 --metallicity 0.01416 ---initial-mass 12.9513 --metallicity 0.01416 ---initial-mass 12.9565 --metallicity 0.01416 ---initial-mass 12.9616 --metallicity 0.01416 ---initial-mass 12.9668 --metallicity 0.01416 ---initial-mass 12.972 --metallicity 0.01416 ---initial-mass 12.9771 --metallicity 0.01416 ---initial-mass 12.9823 --metallicity 0.01416 ---initial-mass 12.9875 --metallicity 0.01416 ---initial-mass 12.9927 --metallicity 0.01416 ---initial-mass 12.9978 --metallicity 0.01416 ---initial-mass 13.003 --metallicity 0.01416 ---initial-mass 13.0082 --metallicity 0.01416 ---initial-mass 13.0134 --metallicity 0.01416 ---initial-mass 13.0186 --metallicity 0.01416 ---initial-mass 13.0238 --metallicity 0.01416 ---initial-mass 13.0289 --metallicity 0.01416 ---initial-mass 13.0341 --metallicity 0.01416 ---initial-mass 13.0393 --metallicity 0.01416 ---initial-mass 13.0445 --metallicity 0.01416 ---initial-mass 13.0497 --metallicity 0.01416 ---initial-mass 13.0549 --metallicity 0.01416 ---initial-mass 13.0601 --metallicity 0.01416 ---initial-mass 13.0653 --metallicity 0.01416 ---initial-mass 13.0705 --metallicity 0.01416 ---initial-mass 13.0758 --metallicity 0.01416 ---initial-mass 13.081 --metallicity 0.01416 ---initial-mass 13.0862 --metallicity 0.01416 ---initial-mass 13.0914 --metallicity 0.01416 ---initial-mass 13.0966 --metallicity 0.01416 ---initial-mass 13.1018 --metallicity 0.01416 ---initial-mass 13.1071 --metallicity 0.01416 ---initial-mass 13.1123 --metallicity 0.01416 ---initial-mass 13.1175 --metallicity 0.01416 ---initial-mass 13.1227 --metallicity 0.01416 ---initial-mass 13.128 --metallicity 0.01416 ---initial-mass 13.1332 --metallicity 0.01416 ---initial-mass 13.1384 --metallicity 0.01416 ---initial-mass 13.1437 --metallicity 0.01416 ---initial-mass 13.1489 --metallicity 0.01416 ---initial-mass 13.1541 --metallicity 0.01416 ---initial-mass 13.1594 --metallicity 0.01416 ---initial-mass 13.1646 --metallicity 0.01416 ---initial-mass 13.1699 --metallicity 0.01416 ---initial-mass 13.1751 --metallicity 0.01416 ---initial-mass 13.1804 --metallicity 0.01416 ---initial-mass 13.1856 --metallicity 0.01416 ---initial-mass 13.1909 --metallicity 0.01416 ---initial-mass 13.1961 --metallicity 0.01416 ---initial-mass 13.2014 --metallicity 0.01416 ---initial-mass 13.2067 --metallicity 0.01416 ---initial-mass 13.2119 --metallicity 0.01416 ---initial-mass 13.2172 --metallicity 0.01416 ---initial-mass 13.2225 --metallicity 0.01416 ---initial-mass 13.2277 --metallicity 0.01416 ---initial-mass 13.233 --metallicity 0.01416 ---initial-mass 13.2383 --metallicity 0.01416 ---initial-mass 13.2436 --metallicity 0.01416 ---initial-mass 13.2488 --metallicity 0.01416 ---initial-mass 13.2541 --metallicity 0.01416 ---initial-mass 13.2594 --metallicity 0.01416 ---initial-mass 13.2647 --metallicity 0.01416 ---initial-mass 13.27 --metallicity 0.01416 ---initial-mass 13.2753 --metallicity 0.01416 ---initial-mass 13.2805 --metallicity 0.01416 ---initial-mass 13.2858 --metallicity 0.01416 ---initial-mass 13.2911 --metallicity 0.01416 ---initial-mass 13.2964 --metallicity 0.01416 ---initial-mass 13.3017 --metallicity 0.01416 ---initial-mass 13.307 --metallicity 0.01416 ---initial-mass 13.3123 --metallicity 0.01416 ---initial-mass 13.3176 --metallicity 0.01416 ---initial-mass 13.323 --metallicity 0.01416 ---initial-mass 13.3283 --metallicity 0.01416 ---initial-mass 13.3336 --metallicity 0.01416 ---initial-mass 13.3389 --metallicity 0.01416 ---initial-mass 13.3442 --metallicity 0.01416 ---initial-mass 13.3495 --metallicity 0.01416 ---initial-mass 13.3548 --metallicity 0.01416 ---initial-mass 13.3602 --metallicity 0.01416 ---initial-mass 13.3655 --metallicity 0.01416 ---initial-mass 13.3708 --metallicity 0.01416 ---initial-mass 13.3761 --metallicity 0.01416 ---initial-mass 13.3815 --metallicity 0.01416 ---initial-mass 13.3868 --metallicity 0.01416 ---initial-mass 13.3921 --metallicity 0.01416 ---initial-mass 13.3975 --metallicity 0.01416 ---initial-mass 13.4028 --metallicity 0.01416 ---initial-mass 13.4082 --metallicity 0.01416 ---initial-mass 13.4135 --metallicity 0.01416 ---initial-mass 13.4189 --metallicity 0.01416 ---initial-mass 13.4242 --metallicity 0.01416 ---initial-mass 13.4296 --metallicity 0.01416 ---initial-mass 13.4349 --metallicity 0.01416 ---initial-mass 13.4403 --metallicity 0.01416 ---initial-mass 13.4456 --metallicity 0.01416 ---initial-mass 13.451 --metallicity 0.01416 ---initial-mass 13.4563 --metallicity 0.01416 ---initial-mass 13.4617 --metallicity 0.01416 ---initial-mass 13.4671 --metallicity 0.01416 ---initial-mass 13.4724 --metallicity 0.01416 ---initial-mass 13.4778 --metallicity 0.01416 ---initial-mass 13.4832 --metallicity 0.01416 ---initial-mass 13.4885 --metallicity 0.01416 ---initial-mass 13.4939 --metallicity 0.01416 ---initial-mass 13.4993 --metallicity 0.01416 ---initial-mass 13.5047 --metallicity 0.01416 ---initial-mass 13.5101 --metallicity 0.01416 ---initial-mass 13.5154 --metallicity 0.01416 ---initial-mass 13.5208 --metallicity 0.01416 ---initial-mass 13.5262 --metallicity 0.01416 ---initial-mass 13.5316 --metallicity 0.01416 ---initial-mass 13.537 --metallicity 0.01416 ---initial-mass 13.5424 --metallicity 0.01416 ---initial-mass 13.5478 --metallicity 0.01416 ---initial-mass 13.5532 --metallicity 0.01416 ---initial-mass 13.5586 --metallicity 0.01416 ---initial-mass 13.564 --metallicity 0.01416 ---initial-mass 13.5694 --metallicity 0.01416 ---initial-mass 13.5748 --metallicity 0.01416 ---initial-mass 13.5802 --metallicity 0.01416 ---initial-mass 13.5856 --metallicity 0.01416 ---initial-mass 13.5911 --metallicity 0.01416 ---initial-mass 13.5965 --metallicity 0.01416 ---initial-mass 13.6019 --metallicity 0.01416 ---initial-mass 13.6073 --metallicity 0.01416 ---initial-mass 13.6127 --metallicity 0.01416 ---initial-mass 13.6182 --metallicity 0.01416 ---initial-mass 13.6236 --metallicity 0.01416 ---initial-mass 13.629 --metallicity 0.01416 ---initial-mass 13.6344 --metallicity 0.01416 ---initial-mass 13.6399 --metallicity 0.01416 ---initial-mass 13.6453 --metallicity 0.01416 ---initial-mass 13.6508 --metallicity 0.01416 ---initial-mass 13.6562 --metallicity 0.01416 ---initial-mass 13.6616 --metallicity 0.01416 ---initial-mass 13.6671 --metallicity 0.01416 ---initial-mass 13.6725 --metallicity 0.01416 ---initial-mass 13.678 --metallicity 0.01416 ---initial-mass 13.6834 --metallicity 0.01416 ---initial-mass 13.6889 --metallicity 0.01416 ---initial-mass 13.6943 --metallicity 0.01416 ---initial-mass 13.6998 --metallicity 0.01416 ---initial-mass 13.7053 --metallicity 0.01416 ---initial-mass 13.7107 --metallicity 0.01416 ---initial-mass 13.7162 --metallicity 0.01416 ---initial-mass 13.7217 --metallicity 0.01416 ---initial-mass 13.7271 --metallicity 0.01416 ---initial-mass 13.7326 --metallicity 0.01416 ---initial-mass 13.7381 --metallicity 0.01416 ---initial-mass 13.7435 --metallicity 0.01416 ---initial-mass 13.749 --metallicity 0.01416 ---initial-mass 13.7545 --metallicity 0.01416 ---initial-mass 13.76 --metallicity 0.01416 ---initial-mass 13.7655 --metallicity 0.01416 ---initial-mass 13.771 --metallicity 0.01416 ---initial-mass 13.7764 --metallicity 0.01416 ---initial-mass 13.7819 --metallicity 0.01416 ---initial-mass 13.7874 --metallicity 0.01416 ---initial-mass 13.7929 --metallicity 0.01416 ---initial-mass 13.7984 --metallicity 0.01416 ---initial-mass 13.8039 --metallicity 0.01416 ---initial-mass 13.8094 --metallicity 0.01416 ---initial-mass 13.8149 --metallicity 0.01416 ---initial-mass 13.8204 --metallicity 0.01416 ---initial-mass 13.8259 --metallicity 0.01416 ---initial-mass 13.8314 --metallicity 0.01416 ---initial-mass 13.837 --metallicity 0.01416 ---initial-mass 13.8425 --metallicity 0.01416 ---initial-mass 13.848 --metallicity 0.01416 ---initial-mass 13.8535 --metallicity 0.01416 ---initial-mass 13.859 --metallicity 0.01416 ---initial-mass 13.8646 --metallicity 0.01416 ---initial-mass 13.8701 --metallicity 0.01416 ---initial-mass 13.8756 --metallicity 0.01416 ---initial-mass 13.8811 --metallicity 0.01416 ---initial-mass 13.8867 --metallicity 0.01416 ---initial-mass 13.8922 --metallicity 0.01416 ---initial-mass 13.8977 --metallicity 0.01416 ---initial-mass 13.9033 --metallicity 0.01416 ---initial-mass 13.9088 --metallicity 0.01416 ---initial-mass 13.9144 --metallicity 0.01416 ---initial-mass 13.9199 --metallicity 0.01416 ---initial-mass 13.9255 --metallicity 0.01416 ---initial-mass 13.931 --metallicity 0.01416 ---initial-mass 13.9366 --metallicity 0.01416 ---initial-mass 13.9421 --metallicity 0.01416 ---initial-mass 13.9477 --metallicity 0.01416 ---initial-mass 13.9532 --metallicity 0.01416 ---initial-mass 13.9588 --metallicity 0.01416 ---initial-mass 13.9644 --metallicity 0.01416 ---initial-mass 13.9699 --metallicity 0.01416 ---initial-mass 13.9755 --metallicity 0.01416 ---initial-mass 13.9811 --metallicity 0.01416 ---initial-mass 13.9866 --metallicity 0.01416 ---initial-mass 13.9922 --metallicity 0.01416 ---initial-mass 13.9978 --metallicity 0.01416 ---initial-mass 14.0034 --metallicity 0.01416 ---initial-mass 14.0089 --metallicity 0.01416 ---initial-mass 14.0145 --metallicity 0.01416 ---initial-mass 14.0201 --metallicity 0.01416 ---initial-mass 14.0257 --metallicity 0.01416 ---initial-mass 14.0313 --metallicity 0.01416 ---initial-mass 14.0369 --metallicity 0.01416 ---initial-mass 14.0425 --metallicity 0.01416 ---initial-mass 14.0481 --metallicity 0.01416 ---initial-mass 14.0537 --metallicity 0.01416 ---initial-mass 14.0593 --metallicity 0.01416 ---initial-mass 14.0649 --metallicity 0.01416 ---initial-mass 14.0705 --metallicity 0.01416 ---initial-mass 14.0761 --metallicity 0.01416 ---initial-mass 14.0817 --metallicity 0.01416 ---initial-mass 14.0873 --metallicity 0.01416 ---initial-mass 14.0929 --metallicity 0.01416 ---initial-mass 14.0985 --metallicity 0.01416 ---initial-mass 14.1042 --metallicity 0.01416 ---initial-mass 14.1098 --metallicity 0.01416 ---initial-mass 14.1154 --metallicity 0.01416 ---initial-mass 14.121 --metallicity 0.01416 ---initial-mass 14.1267 --metallicity 0.01416 ---initial-mass 14.1323 --metallicity 0.01416 ---initial-mass 14.1379 --metallicity 0.01416 ---initial-mass 14.1436 --metallicity 0.01416 ---initial-mass 14.1492 --metallicity 0.01416 ---initial-mass 14.1548 --metallicity 0.01416 ---initial-mass 14.1605 --metallicity 0.01416 ---initial-mass 14.1661 --metallicity 0.01416 ---initial-mass 14.1718 --metallicity 0.01416 ---initial-mass 14.1774 --metallicity 0.01416 ---initial-mass 14.1831 --metallicity 0.01416 ---initial-mass 14.1887 --metallicity 0.01416 ---initial-mass 14.1944 --metallicity 0.01416 ---initial-mass 14.2 --metallicity 0.01416 ---initial-mass 14.2057 --metallicity 0.01416 ---initial-mass 14.2113 --metallicity 0.01416 ---initial-mass 14.217 --metallicity 0.01416 ---initial-mass 14.2227 --metallicity 0.01416 ---initial-mass 14.2283 --metallicity 0.01416 ---initial-mass 14.234 --metallicity 0.01416 ---initial-mass 14.2397 --metallicity 0.01416 ---initial-mass 14.2454 --metallicity 0.01416 ---initial-mass 14.251 --metallicity 0.01416 ---initial-mass 14.2567 --metallicity 0.01416 ---initial-mass 14.2624 --metallicity 0.01416 ---initial-mass 14.2681 --metallicity 0.01416 ---initial-mass 14.2738 --metallicity 0.01416 ---initial-mass 14.2795 --metallicity 0.01416 ---initial-mass 14.2852 --metallicity 0.01416 ---initial-mass 14.2909 --metallicity 0.01416 ---initial-mass 14.2965 --metallicity 0.01416 ---initial-mass 14.3022 --metallicity 0.01416 ---initial-mass 14.3079 --metallicity 0.01416 ---initial-mass 14.3136 --metallicity 0.01416 ---initial-mass 14.3194 --metallicity 0.01416 ---initial-mass 14.3251 --metallicity 0.01416 ---initial-mass 14.3308 --metallicity 0.01416 ---initial-mass 14.3365 --metallicity 0.01416 ---initial-mass 14.3422 --metallicity 0.01416 ---initial-mass 14.3479 --metallicity 0.01416 ---initial-mass 14.3536 --metallicity 0.01416 ---initial-mass 14.3593 --metallicity 0.01416 ---initial-mass 14.3651 --metallicity 0.01416 ---initial-mass 14.3708 --metallicity 0.01416 ---initial-mass 14.3765 --metallicity 0.01416 ---initial-mass 14.3823 --metallicity 0.01416 ---initial-mass 14.388 --metallicity 0.01416 ---initial-mass 14.3937 --metallicity 0.01416 ---initial-mass 14.3995 --metallicity 0.01416 ---initial-mass 14.4052 --metallicity 0.01416 ---initial-mass 14.4109 --metallicity 0.01416 ---initial-mass 14.4167 --metallicity 0.01416 ---initial-mass 14.4224 --metallicity 0.01416 ---initial-mass 14.4282 --metallicity 0.01416 ---initial-mass 14.4339 --metallicity 0.01416 ---initial-mass 14.4397 --metallicity 0.01416 ---initial-mass 14.4454 --metallicity 0.01416 ---initial-mass 14.4512 --metallicity 0.01416 ---initial-mass 14.457 --metallicity 0.01416 ---initial-mass 14.4627 --metallicity 0.01416 ---initial-mass 14.4685 --metallicity 0.01416 ---initial-mass 14.4742 --metallicity 0.01416 ---initial-mass 14.48 --metallicity 0.01416 ---initial-mass 14.4858 --metallicity 0.01416 ---initial-mass 14.4916 --metallicity 0.01416 ---initial-mass 14.4973 --metallicity 0.01416 ---initial-mass 14.5031 --metallicity 0.01416 ---initial-mass 14.5089 --metallicity 0.01416 ---initial-mass 14.5147 --metallicity 0.01416 ---initial-mass 14.5205 --metallicity 0.01416 ---initial-mass 14.5262 --metallicity 0.01416 ---initial-mass 14.532 --metallicity 0.01416 ---initial-mass 14.5378 --metallicity 0.01416 ---initial-mass 14.5436 --metallicity 0.01416 ---initial-mass 14.5494 --metallicity 0.01416 ---initial-mass 14.5552 --metallicity 0.01416 ---initial-mass 14.561 --metallicity 0.01416 ---initial-mass 14.5668 --metallicity 0.01416 ---initial-mass 14.5726 --metallicity 0.01416 ---initial-mass 14.5784 --metallicity 0.01416 ---initial-mass 14.5842 --metallicity 0.01416 ---initial-mass 14.5901 --metallicity 0.01416 ---initial-mass 14.5959 --metallicity 0.01416 ---initial-mass 14.6017 --metallicity 0.01416 ---initial-mass 14.6075 --metallicity 0.01416 ---initial-mass 14.6133 --metallicity 0.01416 ---initial-mass 14.6192 --metallicity 0.01416 ---initial-mass 14.625 --metallicity 0.01416 ---initial-mass 14.6308 --metallicity 0.01416 ---initial-mass 14.6366 --metallicity 0.01416 ---initial-mass 14.6425 --metallicity 0.01416 ---initial-mass 14.6483 --metallicity 0.01416 ---initial-mass 14.6541 --metallicity 0.01416 ---initial-mass 14.66 --metallicity 0.01416 ---initial-mass 14.6658 --metallicity 0.01416 ---initial-mass 14.6717 --metallicity 0.01416 ---initial-mass 14.6775 --metallicity 0.01416 ---initial-mass 14.6834 --metallicity 0.01416 ---initial-mass 14.6892 --metallicity 0.01416 ---initial-mass 14.6951 --metallicity 0.01416 ---initial-mass 14.7009 --metallicity 0.01416 ---initial-mass 14.7068 --metallicity 0.01416 ---initial-mass 14.7127 --metallicity 0.01416 ---initial-mass 14.7185 --metallicity 0.01416 ---initial-mass 14.7244 --metallicity 0.01416 ---initial-mass 14.7303 --metallicity 0.01416 ---initial-mass 14.7361 --metallicity 0.01416 ---initial-mass 14.742 --metallicity 0.01416 ---initial-mass 14.7479 --metallicity 0.01416 ---initial-mass 14.7538 --metallicity 0.01416 ---initial-mass 14.7596 --metallicity 0.01416 ---initial-mass 14.7655 --metallicity 0.01416 ---initial-mass 14.7714 --metallicity 0.01416 ---initial-mass 14.7773 --metallicity 0.01416 ---initial-mass 14.7832 --metallicity 0.01416 ---initial-mass 14.7891 --metallicity 0.01416 ---initial-mass 14.795 --metallicity 0.01416 ---initial-mass 14.8009 --metallicity 0.01416 ---initial-mass 14.8068 --metallicity 0.01416 ---initial-mass 14.8127 --metallicity 0.01416 ---initial-mass 14.8186 --metallicity 0.01416 ---initial-mass 14.8245 --metallicity 0.01416 ---initial-mass 14.8304 --metallicity 0.01416 ---initial-mass 14.8363 --metallicity 0.01416 ---initial-mass 14.8422 --metallicity 0.01416 ---initial-mass 14.8481 --metallicity 0.01416 ---initial-mass 14.854 --metallicity 0.01416 ---initial-mass 14.86 --metallicity 0.01416 ---initial-mass 14.8659 --metallicity 0.01416 ---initial-mass 14.8718 --metallicity 0.01416 ---initial-mass 14.8777 --metallicity 0.01416 ---initial-mass 14.8837 --metallicity 0.01416 ---initial-mass 14.8896 --metallicity 0.01416 ---initial-mass 14.8955 --metallicity 0.01416 ---initial-mass 14.9015 --metallicity 0.01416 ---initial-mass 14.9074 --metallicity 0.01416 ---initial-mass 14.9133 --metallicity 0.01416 ---initial-mass 14.9193 --metallicity 0.01416 ---initial-mass 14.9252 --metallicity 0.01416 ---initial-mass 14.9312 --metallicity 0.01416 ---initial-mass 14.9371 --metallicity 0.01416 ---initial-mass 14.9431 --metallicity 0.01416 ---initial-mass 14.949 --metallicity 0.01416 ---initial-mass 14.955 --metallicity 0.01416 ---initial-mass 14.961 --metallicity 0.01416 ---initial-mass 14.9669 --metallicity 0.01416 ---initial-mass 14.9729 --metallicity 0.01416 ---initial-mass 14.9789 --metallicity 0.01416 ---initial-mass 14.9848 --metallicity 0.01416 ---initial-mass 14.9908 --metallicity 0.01416 ---initial-mass 14.9968 --metallicity 0.01416 ---initial-mass 15.0027 --metallicity 0.01416 ---initial-mass 15.0087 --metallicity 0.01416 ---initial-mass 15.0147 --metallicity 0.01416 ---initial-mass 15.0207 --metallicity 0.01416 ---initial-mass 15.0267 --metallicity 0.01416 ---initial-mass 15.0327 --metallicity 0.01416 ---initial-mass 15.0387 --metallicity 0.01416 ---initial-mass 15.0447 --metallicity 0.01416 ---initial-mass 15.0506 --metallicity 0.01416 ---initial-mass 15.0566 --metallicity 0.01416 ---initial-mass 15.0626 --metallicity 0.01416 ---initial-mass 15.0687 --metallicity 0.01416 ---initial-mass 15.0747 --metallicity 0.01416 ---initial-mass 15.0807 --metallicity 0.01416 ---initial-mass 15.0867 --metallicity 0.01416 ---initial-mass 15.0927 --metallicity 0.01416 ---initial-mass 15.0987 --metallicity 0.01416 ---initial-mass 15.1047 --metallicity 0.01416 ---initial-mass 15.1107 --metallicity 0.01416 ---initial-mass 15.1168 --metallicity 0.01416 ---initial-mass 15.1228 --metallicity 0.01416 ---initial-mass 15.1288 --metallicity 0.01416 ---initial-mass 15.1348 --metallicity 0.01416 ---initial-mass 15.1409 --metallicity 0.01416 ---initial-mass 15.1469 --metallicity 0.01416 ---initial-mass 15.1529 --metallicity 0.01416 ---initial-mass 15.159 --metallicity 0.01416 ---initial-mass 15.165 --metallicity 0.01416 ---initial-mass 15.1711 --metallicity 0.01416 ---initial-mass 15.1771 --metallicity 0.01416 ---initial-mass 15.1832 --metallicity 0.01416 ---initial-mass 15.1892 --metallicity 0.01416 ---initial-mass 15.1953 --metallicity 0.01416 ---initial-mass 15.2013 --metallicity 0.01416 ---initial-mass 15.2074 --metallicity 0.01416 ---initial-mass 15.2135 --metallicity 0.01416 ---initial-mass 15.2195 --metallicity 0.01416 ---initial-mass 15.2256 --metallicity 0.01416 ---initial-mass 15.2316 --metallicity 0.01416 ---initial-mass 15.2377 --metallicity 0.01416 ---initial-mass 15.2438 --metallicity 0.01416 ---initial-mass 15.2499 --metallicity 0.01416 ---initial-mass 15.2559 --metallicity 0.01416 ---initial-mass 15.262 --metallicity 0.01416 ---initial-mass 15.2681 --metallicity 0.01416 ---initial-mass 15.2742 --metallicity 0.01416 ---initial-mass 15.2803 --metallicity 0.01416 ---initial-mass 15.2864 --metallicity 0.01416 ---initial-mass 15.2925 --metallicity 0.01416 ---initial-mass 15.2986 --metallicity 0.01416 ---initial-mass 15.3047 --metallicity 0.01416 ---initial-mass 15.3108 --metallicity 0.01416 ---initial-mass 15.3169 --metallicity 0.01416 ---initial-mass 15.323 --metallicity 0.01416 ---initial-mass 15.3291 --metallicity 0.01416 ---initial-mass 15.3352 --metallicity 0.01416 ---initial-mass 15.3413 --metallicity 0.01416 ---initial-mass 15.3474 --metallicity 0.01416 ---initial-mass 15.3535 --metallicity 0.01416 ---initial-mass 15.3596 --metallicity 0.01416 ---initial-mass 15.3658 --metallicity 0.01416 ---initial-mass 15.3719 --metallicity 0.01416 ---initial-mass 15.378 --metallicity 0.01416 ---initial-mass 15.3841 --metallicity 0.01416 ---initial-mass 15.3903 --metallicity 0.01416 ---initial-mass 15.3964 --metallicity 0.01416 ---initial-mass 15.4025 --metallicity 0.01416 ---initial-mass 15.4087 --metallicity 0.01416 ---initial-mass 15.4148 --metallicity 0.01416 ---initial-mass 15.421 --metallicity 0.01416 ---initial-mass 15.4271 --metallicity 0.01416 ---initial-mass 15.4333 --metallicity 0.01416 ---initial-mass 15.4394 --metallicity 0.01416 ---initial-mass 15.4456 --metallicity 0.01416 ---initial-mass 15.4517 --metallicity 0.01416 ---initial-mass 15.4579 --metallicity 0.01416 ---initial-mass 15.464 --metallicity 0.01416 ---initial-mass 15.4702 --metallicity 0.01416 ---initial-mass 15.4764 --metallicity 0.01416 ---initial-mass 15.4825 --metallicity 0.01416 ---initial-mass 15.4887 --metallicity 0.01416 ---initial-mass 15.4949 --metallicity 0.01416 ---initial-mass 15.5011 --metallicity 0.01416 ---initial-mass 15.5072 --metallicity 0.01416 ---initial-mass 15.5134 --metallicity 0.01416 ---initial-mass 15.5196 --metallicity 0.01416 ---initial-mass 15.5258 --metallicity 0.01416 ---initial-mass 15.532 --metallicity 0.01416 ---initial-mass 15.5382 --metallicity 0.01416 ---initial-mass 15.5444 --metallicity 0.01416 ---initial-mass 15.5505 --metallicity 0.01416 ---initial-mass 15.5567 --metallicity 0.01416 ---initial-mass 15.5629 --metallicity 0.01416 ---initial-mass 15.5692 --metallicity 0.01416 ---initial-mass 15.5754 --metallicity 0.01416 ---initial-mass 15.5816 --metallicity 0.01416 ---initial-mass 15.5878 --metallicity 0.01416 ---initial-mass 15.594 --metallicity 0.01416 ---initial-mass 15.6002 --metallicity 0.01416 ---initial-mass 15.6064 --metallicity 0.01416 ---initial-mass 15.6126 --metallicity 0.01416 ---initial-mass 15.6189 --metallicity 0.01416 ---initial-mass 15.6251 --metallicity 0.01416 ---initial-mass 15.6313 --metallicity 0.01416 ---initial-mass 15.6375 --metallicity 0.01416 ---initial-mass 15.6438 --metallicity 0.01416 ---initial-mass 15.65 --metallicity 0.01416 ---initial-mass 15.6562 --metallicity 0.01416 ---initial-mass 15.6625 --metallicity 0.01416 ---initial-mass 15.6687 --metallicity 0.01416 ---initial-mass 15.675 --metallicity 0.01416 ---initial-mass 15.6812 --metallicity 0.01416 ---initial-mass 15.6875 --metallicity 0.01416 ---initial-mass 15.6937 --metallicity 0.01416 ---initial-mass 15.7 --metallicity 0.01416 ---initial-mass 15.7062 --metallicity 0.01416 ---initial-mass 15.7125 --metallicity 0.01416 ---initial-mass 15.7188 --metallicity 0.01416 ---initial-mass 15.725 --metallicity 0.01416 ---initial-mass 15.7313 --metallicity 0.01416 ---initial-mass 15.7376 --metallicity 0.01416 ---initial-mass 15.7438 --metallicity 0.01416 ---initial-mass 15.7501 --metallicity 0.01416 ---initial-mass 15.7564 --metallicity 0.01416 ---initial-mass 15.7627 --metallicity 0.01416 ---initial-mass 15.7689 --metallicity 0.01416 ---initial-mass 15.7752 --metallicity 0.01416 ---initial-mass 15.7815 --metallicity 0.01416 ---initial-mass 15.7878 --metallicity 0.01416 ---initial-mass 15.7941 --metallicity 0.01416 ---initial-mass 15.8004 --metallicity 0.01416 ---initial-mass 15.8067 --metallicity 0.01416 ---initial-mass 15.813 --metallicity 0.01416 ---initial-mass 15.8193 --metallicity 0.01416 ---initial-mass 15.8256 --metallicity 0.01416 ---initial-mass 15.8319 --metallicity 0.01416 ---initial-mass 15.8382 --metallicity 0.01416 ---initial-mass 15.8445 --metallicity 0.01416 ---initial-mass 15.8508 --metallicity 0.01416 ---initial-mass 15.8572 --metallicity 0.01416 ---initial-mass 15.8635 --metallicity 0.01416 ---initial-mass 15.8698 --metallicity 0.01416 ---initial-mass 15.8761 --metallicity 0.01416 ---initial-mass 15.8825 --metallicity 0.01416 ---initial-mass 15.8888 --metallicity 0.01416 ---initial-mass 15.8951 --metallicity 0.01416 ---initial-mass 15.9015 --metallicity 0.01416 ---initial-mass 15.9078 --metallicity 0.01416 ---initial-mass 15.9141 --metallicity 0.01416 ---initial-mass 15.9205 --metallicity 0.01416 ---initial-mass 15.9268 --metallicity 0.01416 ---initial-mass 15.9332 --metallicity 0.01416 ---initial-mass 15.9395 --metallicity 0.01416 ---initial-mass 15.9459 --metallicity 0.01416 ---initial-mass 15.9522 --metallicity 0.01416 ---initial-mass 15.9586 --metallicity 0.01416 ---initial-mass 15.9649 --metallicity 0.01416 ---initial-mass 15.9713 --metallicity 0.01416 ---initial-mass 15.9777 --metallicity 0.01416 ---initial-mass 15.984 --metallicity 0.01416 ---initial-mass 15.9904 --metallicity 0.01416 ---initial-mass 15.9968 --metallicity 0.01416 ---initial-mass 16.0032 --metallicity 0.01416 ---initial-mass 16.0095 --metallicity 0.01416 ---initial-mass 16.0159 --metallicity 0.01416 ---initial-mass 16.0223 --metallicity 0.01416 ---initial-mass 16.0287 --metallicity 0.01416 ---initial-mass 16.0351 --metallicity 0.01416 ---initial-mass 16.0415 --metallicity 0.01416 ---initial-mass 16.0479 --metallicity 0.01416 ---initial-mass 16.0543 --metallicity 0.01416 ---initial-mass 16.0607 --metallicity 0.01416 ---initial-mass 16.0671 --metallicity 0.01416 ---initial-mass 16.0735 --metallicity 0.01416 ---initial-mass 16.0799 --metallicity 0.01416 ---initial-mass 16.0863 --metallicity 0.01416 ---initial-mass 16.0927 --metallicity 0.01416 ---initial-mass 16.0991 --metallicity 0.01416 ---initial-mass 16.1055 --metallicity 0.01416 ---initial-mass 16.1119 --metallicity 0.01416 ---initial-mass 16.1184 --metallicity 0.01416 ---initial-mass 16.1248 --metallicity 0.01416 ---initial-mass 16.1312 --metallicity 0.01416 ---initial-mass 16.1376 --metallicity 0.01416 ---initial-mass 16.1441 --metallicity 0.01416 ---initial-mass 16.1505 --metallicity 0.01416 ---initial-mass 16.1569 --metallicity 0.01416 ---initial-mass 16.1634 --metallicity 0.01416 ---initial-mass 16.1698 --metallicity 0.01416 ---initial-mass 16.1763 --metallicity 0.01416 ---initial-mass 16.1827 --metallicity 0.01416 ---initial-mass 16.1892 --metallicity 0.01416 ---initial-mass 16.1956 --metallicity 0.01416 ---initial-mass 16.2021 --metallicity 0.01416 ---initial-mass 16.2085 --metallicity 0.01416 ---initial-mass 16.215 --metallicity 0.01416 ---initial-mass 16.2214 --metallicity 0.01416 ---initial-mass 16.2279 --metallicity 0.01416 ---initial-mass 16.2344 --metallicity 0.01416 ---initial-mass 16.2408 --metallicity 0.01416 ---initial-mass 16.2473 --metallicity 0.01416 ---initial-mass 16.2538 --metallicity 0.01416 ---initial-mass 16.2603 --metallicity 0.01416 ---initial-mass 16.2668 --metallicity 0.01416 ---initial-mass 16.2732 --metallicity 0.01416 ---initial-mass 16.2797 --metallicity 0.01416 ---initial-mass 16.2862 --metallicity 0.01416 ---initial-mass 16.2927 --metallicity 0.01416 ---initial-mass 16.2992 --metallicity 0.01416 ---initial-mass 16.3057 --metallicity 0.01416 ---initial-mass 16.3122 --metallicity 0.01416 ---initial-mass 16.3187 --metallicity 0.01416 ---initial-mass 16.3252 --metallicity 0.01416 ---initial-mass 16.3317 --metallicity 0.01416 ---initial-mass 16.3382 --metallicity 0.01416 ---initial-mass 16.3447 --metallicity 0.01416 ---initial-mass 16.3512 --metallicity 0.01416 ---initial-mass 16.3578 --metallicity 0.01416 ---initial-mass 16.3643 --metallicity 0.01416 ---initial-mass 16.3708 --metallicity 0.01416 ---initial-mass 16.3773 --metallicity 0.01416 ---initial-mass 16.3838 --metallicity 0.01416 ---initial-mass 16.3904 --metallicity 0.01416 ---initial-mass 16.3969 --metallicity 0.01416 ---initial-mass 16.4034 --metallicity 0.01416 ---initial-mass 16.41 --metallicity 0.01416 ---initial-mass 16.4165 --metallicity 0.01416 ---initial-mass 16.4231 --metallicity 0.01416 ---initial-mass 16.4296 --metallicity 0.01416 ---initial-mass 16.4362 --metallicity 0.01416 ---initial-mass 16.4427 --metallicity 0.01416 ---initial-mass 16.4493 --metallicity 0.01416 ---initial-mass 16.4558 --metallicity 0.01416 ---initial-mass 16.4624 --metallicity 0.01416 ---initial-mass 16.4689 --metallicity 0.01416 ---initial-mass 16.4755 --metallicity 0.01416 ---initial-mass 16.4821 --metallicity 0.01416 ---initial-mass 16.4886 --metallicity 0.01416 ---initial-mass 16.4952 --metallicity 0.01416 ---initial-mass 16.5018 --metallicity 0.01416 ---initial-mass 16.5084 --metallicity 0.01416 ---initial-mass 16.5149 --metallicity 0.01416 ---initial-mass 16.5215 --metallicity 0.01416 ---initial-mass 16.5281 --metallicity 0.01416 ---initial-mass 16.5347 --metallicity 0.01416 ---initial-mass 16.5413 --metallicity 0.01416 ---initial-mass 16.5479 --metallicity 0.01416 ---initial-mass 16.5545 --metallicity 0.01416 ---initial-mass 16.5611 --metallicity 0.01416 ---initial-mass 16.5677 --metallicity 0.01416 ---initial-mass 16.5743 --metallicity 0.01416 ---initial-mass 16.5809 --metallicity 0.01416 ---initial-mass 16.5875 --metallicity 0.01416 ---initial-mass 16.5941 --metallicity 0.01416 ---initial-mass 16.6007 --metallicity 0.01416 ---initial-mass 16.6073 --metallicity 0.01416 ---initial-mass 16.6139 --metallicity 0.01416 ---initial-mass 16.6206 --metallicity 0.01416 ---initial-mass 16.6272 --metallicity 0.01416 ---initial-mass 16.6338 --metallicity 0.01416 ---initial-mass 16.6405 --metallicity 0.01416 ---initial-mass 16.6471 --metallicity 0.01416 ---initial-mass 16.6537 --metallicity 0.01416 ---initial-mass 16.6604 --metallicity 0.01416 ---initial-mass 16.667 --metallicity 0.01416 ---initial-mass 16.6736 --metallicity 0.01416 ---initial-mass 16.6803 --metallicity 0.01416 ---initial-mass 16.6869 --metallicity 0.01416 ---initial-mass 16.6936 --metallicity 0.01416 ---initial-mass 16.7002 --metallicity 0.01416 ---initial-mass 16.7069 --metallicity 0.01416 ---initial-mass 16.7136 --metallicity 0.01416 ---initial-mass 16.7202 --metallicity 0.01416 ---initial-mass 16.7269 --metallicity 0.01416 ---initial-mass 16.7335 --metallicity 0.01416 ---initial-mass 16.7402 --metallicity 0.01416 ---initial-mass 16.7469 --metallicity 0.01416 ---initial-mass 16.7536 --metallicity 0.01416 ---initial-mass 16.7602 --metallicity 0.01416 ---initial-mass 16.7669 --metallicity 0.01416 ---initial-mass 16.7736 --metallicity 0.01416 ---initial-mass 16.7803 --metallicity 0.01416 ---initial-mass 16.787 --metallicity 0.01416 ---initial-mass 16.7937 --metallicity 0.01416 ---initial-mass 16.8004 --metallicity 0.01416 ---initial-mass 16.807 --metallicity 0.01416 ---initial-mass 16.8137 --metallicity 0.01416 ---initial-mass 16.8204 --metallicity 0.01416 ---initial-mass 16.8272 --metallicity 0.01416 ---initial-mass 16.8339 --metallicity 0.01416 ---initial-mass 16.8406 --metallicity 0.01416 ---initial-mass 16.8473 --metallicity 0.01416 ---initial-mass 16.854 --metallicity 0.01416 ---initial-mass 16.8607 --metallicity 0.01416 ---initial-mass 16.8674 --metallicity 0.01416 ---initial-mass 16.8742 --metallicity 0.01416 ---initial-mass 16.8809 --metallicity 0.01416 ---initial-mass 16.8876 --metallicity 0.01416 ---initial-mass 16.8943 --metallicity 0.01416 ---initial-mass 16.9011 --metallicity 0.01416 ---initial-mass 16.9078 --metallicity 0.01416 ---initial-mass 16.9145 --metallicity 0.01416 ---initial-mass 16.9213 --metallicity 0.01416 ---initial-mass 16.928 --metallicity 0.01416 ---initial-mass 16.9348 --metallicity 0.01416 ---initial-mass 16.9415 --metallicity 0.01416 ---initial-mass 16.9483 --metallicity 0.01416 ---initial-mass 16.955 --metallicity 0.01416 ---initial-mass 16.9618 --metallicity 0.01416 ---initial-mass 16.9686 --metallicity 0.01416 ---initial-mass 16.9753 --metallicity 0.01416 ---initial-mass 16.9821 --metallicity 0.01416 ---initial-mass 16.9888 --metallicity 0.01416 ---initial-mass 16.9956 --metallicity 0.01416 ---initial-mass 17.0024 --metallicity 0.01416 ---initial-mass 17.0092 --metallicity 0.01416 ---initial-mass 17.0159 --metallicity 0.01416 ---initial-mass 17.0227 --metallicity 0.01416 ---initial-mass 17.0295 --metallicity 0.01416 ---initial-mass 17.0363 --metallicity 0.01416 ---initial-mass 17.0431 --metallicity 0.01416 ---initial-mass 17.0499 --metallicity 0.01416 ---initial-mass 17.0567 --metallicity 0.01416 ---initial-mass 17.0635 --metallicity 0.01416 ---initial-mass 17.0703 --metallicity 0.01416 ---initial-mass 17.0771 --metallicity 0.01416 ---initial-mass 17.0839 --metallicity 0.01416 ---initial-mass 17.0907 --metallicity 0.01416 ---initial-mass 17.0975 --metallicity 0.01416 ---initial-mass 17.1043 --metallicity 0.01416 ---initial-mass 17.1111 --metallicity 0.01416 ---initial-mass 17.118 --metallicity 0.01416 ---initial-mass 17.1248 --metallicity 0.01416 ---initial-mass 17.1316 --metallicity 0.01416 ---initial-mass 17.1384 --metallicity 0.01416 ---initial-mass 17.1453 --metallicity 0.01416 ---initial-mass 17.1521 --metallicity 0.01416 ---initial-mass 17.1589 --metallicity 0.01416 ---initial-mass 17.1658 --metallicity 0.01416 ---initial-mass 17.1726 --metallicity 0.01416 ---initial-mass 17.1795 --metallicity 0.01416 ---initial-mass 17.1863 --metallicity 0.01416 ---initial-mass 17.1932 --metallicity 0.01416 ---initial-mass 17.2 --metallicity 0.01416 ---initial-mass 17.2069 --metallicity 0.01416 ---initial-mass 17.2137 --metallicity 0.01416 ---initial-mass 17.2206 --metallicity 0.01416 ---initial-mass 17.2274 --metallicity 0.01416 ---initial-mass 17.2343 --metallicity 0.01416 ---initial-mass 17.2412 --metallicity 0.01416 ---initial-mass 17.2481 --metallicity 0.01416 ---initial-mass 17.2549 --metallicity 0.01416 ---initial-mass 17.2618 --metallicity 0.01416 ---initial-mass 17.2687 --metallicity 0.01416 ---initial-mass 17.2756 --metallicity 0.01416 ---initial-mass 17.2825 --metallicity 0.01416 ---initial-mass 17.2893 --metallicity 0.01416 ---initial-mass 17.2962 --metallicity 0.01416 ---initial-mass 17.3031 --metallicity 0.01416 ---initial-mass 17.31 --metallicity 0.01416 ---initial-mass 17.3169 --metallicity 0.01416 ---initial-mass 17.3238 --metallicity 0.01416 ---initial-mass 17.3307 --metallicity 0.01416 ---initial-mass 17.3376 --metallicity 0.01416 ---initial-mass 17.3445 --metallicity 0.01416 ---initial-mass 17.3515 --metallicity 0.01416 ---initial-mass 17.3584 --metallicity 0.01416 ---initial-mass 17.3653 --metallicity 0.01416 ---initial-mass 17.3722 --metallicity 0.01416 ---initial-mass 17.3791 --metallicity 0.01416 ---initial-mass 17.3861 --metallicity 0.01416 ---initial-mass 17.393 --metallicity 0.01416 ---initial-mass 17.3999 --metallicity 0.01416 ---initial-mass 17.4069 --metallicity 0.01416 ---initial-mass 17.4138 --metallicity 0.01416 ---initial-mass 17.4207 --metallicity 0.01416 ---initial-mass 17.4277 --metallicity 0.01416 ---initial-mass 17.4346 --metallicity 0.01416 ---initial-mass 17.4416 --metallicity 0.01416 ---initial-mass 17.4485 --metallicity 0.01416 ---initial-mass 17.4555 --metallicity 0.01416 ---initial-mass 17.4624 --metallicity 0.01416 ---initial-mass 17.4694 --metallicity 0.01416 ---initial-mass 17.4764 --metallicity 0.01416 ---initial-mass 17.4833 --metallicity 0.01416 ---initial-mass 17.4903 --metallicity 0.01416 ---initial-mass 17.4973 --metallicity 0.01416 ---initial-mass 17.5042 --metallicity 0.01416 ---initial-mass 17.5112 --metallicity 0.01416 ---initial-mass 17.5182 --metallicity 0.01416 ---initial-mass 17.5252 --metallicity 0.01416 ---initial-mass 17.5322 --metallicity 0.01416 ---initial-mass 17.5391 --metallicity 0.01416 ---initial-mass 17.5461 --metallicity 0.01416 ---initial-mass 17.5531 --metallicity 0.01416 ---initial-mass 17.5601 --metallicity 0.01416 ---initial-mass 17.5671 --metallicity 0.01416 ---initial-mass 17.5741 --metallicity 0.01416 ---initial-mass 17.5811 --metallicity 0.01416 ---initial-mass 17.5881 --metallicity 0.01416 ---initial-mass 17.5951 --metallicity 0.01416 ---initial-mass 17.6022 --metallicity 0.01416 ---initial-mass 17.6092 --metallicity 0.01416 ---initial-mass 17.6162 --metallicity 0.01416 ---initial-mass 17.6232 --metallicity 0.01416 ---initial-mass 17.6302 --metallicity 0.01416 ---initial-mass 17.6373 --metallicity 0.01416 ---initial-mass 17.6443 --metallicity 0.01416 ---initial-mass 17.6513 --metallicity 0.01416 ---initial-mass 17.6584 --metallicity 0.01416 ---initial-mass 17.6654 --metallicity 0.01416 ---initial-mass 17.6724 --metallicity 0.01416 ---initial-mass 17.6795 --metallicity 0.01416 ---initial-mass 17.6865 --metallicity 0.01416 ---initial-mass 17.6936 --metallicity 0.01416 ---initial-mass 17.7006 --metallicity 0.01416 ---initial-mass 17.7077 --metallicity 0.01416 ---initial-mass 17.7147 --metallicity 0.01416 ---initial-mass 17.7218 --metallicity 0.01416 ---initial-mass 17.7289 --metallicity 0.01416 ---initial-mass 17.7359 --metallicity 0.01416 ---initial-mass 17.743 --metallicity 0.01416 ---initial-mass 17.7501 --metallicity 0.01416 ---initial-mass 17.7571 --metallicity 0.01416 ---initial-mass 17.7642 --metallicity 0.01416 ---initial-mass 17.7713 --metallicity 0.01416 ---initial-mass 17.7784 --metallicity 0.01416 ---initial-mass 17.7855 --metallicity 0.01416 ---initial-mass 17.7926 --metallicity 0.01416 ---initial-mass 17.7996 --metallicity 0.01416 ---initial-mass 17.8067 --metallicity 0.01416 ---initial-mass 17.8138 --metallicity 0.01416 ---initial-mass 17.8209 --metallicity 0.01416 ---initial-mass 17.828 --metallicity 0.01416 ---initial-mass 17.8351 --metallicity 0.01416 ---initial-mass 17.8423 --metallicity 0.01416 ---initial-mass 17.8494 --metallicity 0.01416 ---initial-mass 17.8565 --metallicity 0.01416 ---initial-mass 17.8636 --metallicity 0.01416 ---initial-mass 17.8707 --metallicity 0.01416 ---initial-mass 17.8778 --metallicity 0.01416 ---initial-mass 17.885 --metallicity 0.01416 ---initial-mass 17.8921 --metallicity 0.01416 ---initial-mass 17.8992 --metallicity 0.01416 ---initial-mass 17.9064 --metallicity 0.01416 ---initial-mass 17.9135 --metallicity 0.01416 ---initial-mass 17.9206 --metallicity 0.01416 ---initial-mass 17.9278 --metallicity 0.01416 ---initial-mass 17.9349 --metallicity 0.01416 ---initial-mass 17.9421 --metallicity 0.01416 ---initial-mass 17.9492 --metallicity 0.01416 ---initial-mass 17.9564 --metallicity 0.01416 ---initial-mass 17.9635 --metallicity 0.01416 ---initial-mass 17.9707 --metallicity 0.01416 ---initial-mass 17.9779 --metallicity 0.01416 ---initial-mass 17.985 --metallicity 0.01416 ---initial-mass 17.9922 --metallicity 0.01416 ---initial-mass 17.9994 --metallicity 0.01416 ---initial-mass 18.0065 --metallicity 0.01416 ---initial-mass 18.0137 --metallicity 0.01416 ---initial-mass 18.0209 --metallicity 0.01416 ---initial-mass 18.0281 --metallicity 0.01416 ---initial-mass 18.0353 --metallicity 0.01416 ---initial-mass 18.0424 --metallicity 0.01416 ---initial-mass 18.0496 --metallicity 0.01416 ---initial-mass 18.0568 --metallicity 0.01416 ---initial-mass 18.064 --metallicity 0.01416 ---initial-mass 18.0712 --metallicity 0.01416 ---initial-mass 18.0784 --metallicity 0.01416 ---initial-mass 18.0856 --metallicity 0.01416 ---initial-mass 18.0928 --metallicity 0.01416 ---initial-mass 18.1 --metallicity 0.01416 ---initial-mass 18.1073 --metallicity 0.01416 ---initial-mass 18.1145 --metallicity 0.01416 ---initial-mass 18.1217 --metallicity 0.01416 ---initial-mass 18.1289 --metallicity 0.01416 ---initial-mass 18.1361 --metallicity 0.01416 ---initial-mass 18.1434 --metallicity 0.01416 ---initial-mass 18.1506 --metallicity 0.01416 ---initial-mass 18.1578 --metallicity 0.01416 ---initial-mass 18.1651 --metallicity 0.01416 ---initial-mass 18.1723 --metallicity 0.01416 ---initial-mass 18.1796 --metallicity 0.01416 ---initial-mass 18.1868 --metallicity 0.01416 ---initial-mass 18.1941 --metallicity 0.01416 ---initial-mass 18.2013 --metallicity 0.01416 ---initial-mass 18.2086 --metallicity 0.01416 ---initial-mass 18.2158 --metallicity 0.01416 ---initial-mass 18.2231 --metallicity 0.01416 ---initial-mass 18.2303 --metallicity 0.01416 ---initial-mass 18.2376 --metallicity 0.01416 ---initial-mass 18.2449 --metallicity 0.01416 ---initial-mass 18.2521 --metallicity 0.01416 ---initial-mass 18.2594 --metallicity 0.01416 ---initial-mass 18.2667 --metallicity 0.01416 ---initial-mass 18.274 --metallicity 0.01416 ---initial-mass 18.2813 --metallicity 0.01416 ---initial-mass 18.2885 --metallicity 0.01416 ---initial-mass 18.2958 --metallicity 0.01416 ---initial-mass 18.3031 --metallicity 0.01416 ---initial-mass 18.3104 --metallicity 0.01416 ---initial-mass 18.3177 --metallicity 0.01416 ---initial-mass 18.325 --metallicity 0.01416 ---initial-mass 18.3323 --metallicity 0.01416 ---initial-mass 18.3396 --metallicity 0.01416 ---initial-mass 18.3469 --metallicity 0.01416 ---initial-mass 18.3542 --metallicity 0.01416 ---initial-mass 18.3616 --metallicity 0.01416 ---initial-mass 18.3689 --metallicity 0.01416 ---initial-mass 18.3762 --metallicity 0.01416 ---initial-mass 18.3835 --metallicity 0.01416 ---initial-mass 18.3909 --metallicity 0.01416 ---initial-mass 18.3982 --metallicity 0.01416 ---initial-mass 18.4055 --metallicity 0.01416 ---initial-mass 18.4129 --metallicity 0.01416 ---initial-mass 18.4202 --metallicity 0.01416 ---initial-mass 18.4275 --metallicity 0.01416 ---initial-mass 18.4349 --metallicity 0.01416 ---initial-mass 18.4422 --metallicity 0.01416 ---initial-mass 18.4496 --metallicity 0.01416 ---initial-mass 18.4569 --metallicity 0.01416 ---initial-mass 18.4643 --metallicity 0.01416 ---initial-mass 18.4716 --metallicity 0.01416 ---initial-mass 18.479 --metallicity 0.01416 ---initial-mass 18.4864 --metallicity 0.01416 ---initial-mass 18.4937 --metallicity 0.01416 ---initial-mass 18.5011 --metallicity 0.01416 ---initial-mass 18.5085 --metallicity 0.01416 ---initial-mass 18.5159 --metallicity 0.01416 ---initial-mass 18.5232 --metallicity 0.01416 ---initial-mass 18.5306 --metallicity 0.01416 ---initial-mass 18.538 --metallicity 0.01416 ---initial-mass 18.5454 --metallicity 0.01416 ---initial-mass 18.5528 --metallicity 0.01416 ---initial-mass 18.5602 --metallicity 0.01416 ---initial-mass 18.5676 --metallicity 0.01416 ---initial-mass 18.575 --metallicity 0.01416 ---initial-mass 18.5824 --metallicity 0.01416 ---initial-mass 18.5898 --metallicity 0.01416 ---initial-mass 18.5972 --metallicity 0.01416 ---initial-mass 18.6046 --metallicity 0.01416 ---initial-mass 18.612 --metallicity 0.01416 ---initial-mass 18.6194 --metallicity 0.01416 ---initial-mass 18.6269 --metallicity 0.01416 ---initial-mass 18.6343 --metallicity 0.01416 ---initial-mass 18.6417 --metallicity 0.01416 ---initial-mass 18.6491 --metallicity 0.01416 ---initial-mass 18.6566 --metallicity 0.01416 ---initial-mass 18.664 --metallicity 0.01416 ---initial-mass 18.6714 --metallicity 0.01416 ---initial-mass 18.6789 --metallicity 0.01416 ---initial-mass 18.6863 --metallicity 0.01416 ---initial-mass 18.6938 --metallicity 0.01416 ---initial-mass 18.7012 --metallicity 0.01416 ---initial-mass 18.7087 --metallicity 0.01416 ---initial-mass 18.7161 --metallicity 0.01416 ---initial-mass 18.7236 --metallicity 0.01416 ---initial-mass 18.7311 --metallicity 0.01416 ---initial-mass 18.7385 --metallicity 0.01416 ---initial-mass 18.746 --metallicity 0.01416 ---initial-mass 18.7535 --metallicity 0.01416 ---initial-mass 18.7609 --metallicity 0.01416 ---initial-mass 18.7684 --metallicity 0.01416 ---initial-mass 18.7759 --metallicity 0.01416 ---initial-mass 18.7834 --metallicity 0.01416 ---initial-mass 18.7909 --metallicity 0.01416 ---initial-mass 18.7984 --metallicity 0.01416 ---initial-mass 18.8059 --metallicity 0.01416 ---initial-mass 18.8133 --metallicity 0.01416 ---initial-mass 18.8208 --metallicity 0.01416 ---initial-mass 18.8283 --metallicity 0.01416 ---initial-mass 18.8358 --metallicity 0.01416 ---initial-mass 18.8434 --metallicity 0.01416 ---initial-mass 18.8509 --metallicity 0.01416 ---initial-mass 18.8584 --metallicity 0.01416 ---initial-mass 18.8659 --metallicity 0.01416 ---initial-mass 18.8734 --metallicity 0.01416 ---initial-mass 18.8809 --metallicity 0.01416 ---initial-mass 18.8885 --metallicity 0.01416 ---initial-mass 18.896 --metallicity 0.01416 ---initial-mass 18.9035 --metallicity 0.01416 ---initial-mass 18.9111 --metallicity 0.01416 ---initial-mass 18.9186 --metallicity 0.01416 ---initial-mass 18.9261 --metallicity 0.01416 ---initial-mass 18.9337 --metallicity 0.01416 ---initial-mass 18.9412 --metallicity 0.01416 ---initial-mass 18.9488 --metallicity 0.01416 ---initial-mass 18.9563 --metallicity 0.01416 ---initial-mass 18.9639 --metallicity 0.01416 ---initial-mass 18.9714 --metallicity 0.01416 ---initial-mass 18.979 --metallicity 0.01416 ---initial-mass 18.9866 --metallicity 0.01416 ---initial-mass 18.9941 --metallicity 0.01416 ---initial-mass 19.0017 --metallicity 0.01416 ---initial-mass 19.0093 --metallicity 0.01416 ---initial-mass 19.0168 --metallicity 0.01416 ---initial-mass 19.0244 --metallicity 0.01416 ---initial-mass 19.032 --metallicity 0.01416 ---initial-mass 19.0396 --metallicity 0.01416 ---initial-mass 19.0472 --metallicity 0.01416 ---initial-mass 19.0548 --metallicity 0.01416 ---initial-mass 19.0624 --metallicity 0.01416 ---initial-mass 19.07 --metallicity 0.01416 ---initial-mass 19.0776 --metallicity 0.01416 ---initial-mass 19.0852 --metallicity 0.01416 ---initial-mass 19.0928 --metallicity 0.01416 ---initial-mass 19.1004 --metallicity 0.01416 ---initial-mass 19.108 --metallicity 0.01416 ---initial-mass 19.1156 --metallicity 0.01416 ---initial-mass 19.1232 --metallicity 0.01416 ---initial-mass 19.1309 --metallicity 0.01416 ---initial-mass 19.1385 --metallicity 0.01416 ---initial-mass 19.1461 --metallicity 0.01416 ---initial-mass 19.1537 --metallicity 0.01416 ---initial-mass 19.1614 --metallicity 0.01416 ---initial-mass 19.169 --metallicity 0.01416 ---initial-mass 19.1766 --metallicity 0.01416 ---initial-mass 19.1843 --metallicity 0.01416 ---initial-mass 19.1919 --metallicity 0.01416 ---initial-mass 19.1996 --metallicity 0.01416 ---initial-mass 19.2072 --metallicity 0.01416 ---initial-mass 19.2149 --metallicity 0.01416 ---initial-mass 19.2226 --metallicity 0.01416 ---initial-mass 19.2302 --metallicity 0.01416 ---initial-mass 19.2379 --metallicity 0.01416 ---initial-mass 19.2455 --metallicity 0.01416 ---initial-mass 19.2532 --metallicity 0.01416 ---initial-mass 19.2609 --metallicity 0.01416 ---initial-mass 19.2686 --metallicity 0.01416 ---initial-mass 19.2762 --metallicity 0.01416 ---initial-mass 19.2839 --metallicity 0.01416 ---initial-mass 19.2916 --metallicity 0.01416 ---initial-mass 19.2993 --metallicity 0.01416 ---initial-mass 19.307 --metallicity 0.01416 ---initial-mass 19.3147 --metallicity 0.01416 ---initial-mass 19.3224 --metallicity 0.01416 ---initial-mass 19.3301 --metallicity 0.01416 ---initial-mass 19.3378 --metallicity 0.01416 ---initial-mass 19.3455 --metallicity 0.01416 ---initial-mass 19.3532 --metallicity 0.01416 ---initial-mass 19.3609 --metallicity 0.01416 ---initial-mass 19.3686 --metallicity 0.01416 ---initial-mass 19.3764 --metallicity 0.01416 ---initial-mass 19.3841 --metallicity 0.01416 ---initial-mass 19.3918 --metallicity 0.01416 ---initial-mass 19.3995 --metallicity 0.01416 ---initial-mass 19.4073 --metallicity 0.01416 ---initial-mass 19.415 --metallicity 0.01416 ---initial-mass 19.4227 --metallicity 0.01416 ---initial-mass 19.4305 --metallicity 0.01416 ---initial-mass 19.4382 --metallicity 0.01416 ---initial-mass 19.446 --metallicity 0.01416 ---initial-mass 19.4537 --metallicity 0.01416 ---initial-mass 19.4615 --metallicity 0.01416 ---initial-mass 19.4692 --metallicity 0.01416 ---initial-mass 19.477 --metallicity 0.01416 ---initial-mass 19.4848 --metallicity 0.01416 ---initial-mass 19.4925 --metallicity 0.01416 ---initial-mass 19.5003 --metallicity 0.01416 ---initial-mass 19.5081 --metallicity 0.01416 ---initial-mass 19.5158 --metallicity 0.01416 ---initial-mass 19.5236 --metallicity 0.01416 ---initial-mass 19.5314 --metallicity 0.01416 ---initial-mass 19.5392 --metallicity 0.01416 ---initial-mass 19.547 --metallicity 0.01416 ---initial-mass 19.5548 --metallicity 0.01416 ---initial-mass 19.5625 --metallicity 0.01416 ---initial-mass 19.5703 --metallicity 0.01416 ---initial-mass 19.5781 --metallicity 0.01416 ---initial-mass 19.5859 --metallicity 0.01416 ---initial-mass 19.5938 --metallicity 0.01416 ---initial-mass 19.6016 --metallicity 0.01416 ---initial-mass 19.6094 --metallicity 0.01416 ---initial-mass 19.6172 --metallicity 0.01416 ---initial-mass 19.625 --metallicity 0.01416 ---initial-mass 19.6328 --metallicity 0.01416 ---initial-mass 19.6407 --metallicity 0.01416 ---initial-mass 19.6485 --metallicity 0.01416 ---initial-mass 19.6563 --metallicity 0.01416 ---initial-mass 19.6641 --metallicity 0.01416 ---initial-mass 19.672 --metallicity 0.01416 ---initial-mass 19.6798 --metallicity 0.01416 ---initial-mass 19.6877 --metallicity 0.01416 ---initial-mass 19.6955 --metallicity 0.01416 ---initial-mass 19.7034 --metallicity 0.01416 ---initial-mass 19.7112 --metallicity 0.01416 ---initial-mass 19.7191 --metallicity 0.01416 ---initial-mass 19.7269 --metallicity 0.01416 ---initial-mass 19.7348 --metallicity 0.01416 ---initial-mass 19.7427 --metallicity 0.01416 ---initial-mass 19.7505 --metallicity 0.01416 ---initial-mass 19.7584 --metallicity 0.01416 ---initial-mass 19.7663 --metallicity 0.01416 ---initial-mass 19.7742 --metallicity 0.01416 ---initial-mass 19.782 --metallicity 0.01416 ---initial-mass 19.7899 --metallicity 0.01416 ---initial-mass 19.7978 --metallicity 0.01416 ---initial-mass 19.8057 --metallicity 0.01416 ---initial-mass 19.8136 --metallicity 0.01416 ---initial-mass 19.8215 --metallicity 0.01416 ---initial-mass 19.8294 --metallicity 0.01416 ---initial-mass 19.8373 --metallicity 0.01416 ---initial-mass 19.8452 --metallicity 0.01416 ---initial-mass 19.8531 --metallicity 0.01416 ---initial-mass 19.861 --metallicity 0.01416 ---initial-mass 19.8689 --metallicity 0.01416 ---initial-mass 19.8769 --metallicity 0.01416 ---initial-mass 19.8848 --metallicity 0.01416 ---initial-mass 19.8927 --metallicity 0.01416 ---initial-mass 19.9006 --metallicity 0.01416 ---initial-mass 19.9086 --metallicity 0.01416 ---initial-mass 19.9165 --metallicity 0.01416 ---initial-mass 19.9244 --metallicity 0.01416 ---initial-mass 19.9324 --metallicity 0.01416 ---initial-mass 19.9403 --metallicity 0.01416 ---initial-mass 19.9483 --metallicity 0.01416 ---initial-mass 19.9562 --metallicity 0.01416 ---initial-mass 19.9642 --metallicity 0.01416 ---initial-mass 19.9721 --metallicity 0.01416 ---initial-mass 19.9801 --metallicity 0.01416 ---initial-mass 19.988 --metallicity 0.01416 ---initial-mass 19.996 --metallicity 0.01416 ---initial-mass 20.004 --metallicity 0.01416 ---initial-mass 20.012 --metallicity 0.01416 ---initial-mass 20.0199 --metallicity 0.01416 ---initial-mass 20.0279 --metallicity 0.01416 ---initial-mass 20.0359 --metallicity 0.01416 ---initial-mass 20.0439 --metallicity 0.01416 ---initial-mass 20.0519 --metallicity 0.01416 ---initial-mass 20.0599 --metallicity 0.01416 ---initial-mass 20.0679 --metallicity 0.01416 ---initial-mass 20.0759 --metallicity 0.01416 ---initial-mass 20.0839 --metallicity 0.01416 ---initial-mass 20.0919 --metallicity 0.01416 ---initial-mass 20.0999 --metallicity 0.01416 ---initial-mass 20.1079 --metallicity 0.01416 ---initial-mass 20.1159 --metallicity 0.01416 ---initial-mass 20.1239 --metallicity 0.01416 ---initial-mass 20.1319 --metallicity 0.01416 ---initial-mass 20.14 --metallicity 0.01416 ---initial-mass 20.148 --metallicity 0.01416 ---initial-mass 20.156 --metallicity 0.01416 ---initial-mass 20.164 --metallicity 0.01416 ---initial-mass 20.1721 --metallicity 0.01416 ---initial-mass 20.1801 --metallicity 0.01416 ---initial-mass 20.1882 --metallicity 0.01416 ---initial-mass 20.1962 --metallicity 0.01416 ---initial-mass 20.2043 --metallicity 0.01416 ---initial-mass 20.2123 --metallicity 0.01416 ---initial-mass 20.2204 --metallicity 0.01416 ---initial-mass 20.2284 --metallicity 0.01416 ---initial-mass 20.2365 --metallicity 0.01416 ---initial-mass 20.2446 --metallicity 0.01416 ---initial-mass 20.2526 --metallicity 0.01416 ---initial-mass 20.2607 --metallicity 0.01416 ---initial-mass 20.2688 --metallicity 0.01416 ---initial-mass 20.2768 --metallicity 0.01416 ---initial-mass 20.2849 --metallicity 0.01416 ---initial-mass 20.293 --metallicity 0.01416 ---initial-mass 20.3011 --metallicity 0.01416 ---initial-mass 20.3092 --metallicity 0.01416 ---initial-mass 20.3173 --metallicity 0.01416 ---initial-mass 20.3254 --metallicity 0.01416 ---initial-mass 20.3335 --metallicity 0.01416 ---initial-mass 20.3416 --metallicity 0.01416 ---initial-mass 20.3497 --metallicity 0.01416 ---initial-mass 20.3578 --metallicity 0.01416 ---initial-mass 20.3659 --metallicity 0.01416 ---initial-mass 20.374 --metallicity 0.01416 ---initial-mass 20.3822 --metallicity 0.01416 ---initial-mass 20.3903 --metallicity 0.01416 ---initial-mass 20.3984 --metallicity 0.01416 ---initial-mass 20.4065 --metallicity 0.01416 ---initial-mass 20.4147 --metallicity 0.01416 ---initial-mass 20.4228 --metallicity 0.01416 ---initial-mass 20.4309 --metallicity 0.01416 ---initial-mass 20.4391 --metallicity 0.01416 ---initial-mass 20.4472 --metallicity 0.01416 ---initial-mass 20.4554 --metallicity 0.01416 ---initial-mass 20.4635 --metallicity 0.01416 ---initial-mass 20.4717 --metallicity 0.01416 ---initial-mass 20.4798 --metallicity 0.01416 ---initial-mass 20.488 --metallicity 0.01416 ---initial-mass 20.4962 --metallicity 0.01416 ---initial-mass 20.5043 --metallicity 0.01416 ---initial-mass 20.5125 --metallicity 0.01416 ---initial-mass 20.5207 --metallicity 0.01416 ---initial-mass 20.5289 --metallicity 0.01416 ---initial-mass 20.5371 --metallicity 0.01416 ---initial-mass 20.5452 --metallicity 0.01416 ---initial-mass 20.5534 --metallicity 0.01416 ---initial-mass 20.5616 --metallicity 0.01416 ---initial-mass 20.5698 --metallicity 0.01416 ---initial-mass 20.578 --metallicity 0.01416 ---initial-mass 20.5862 --metallicity 0.01416 ---initial-mass 20.5944 --metallicity 0.01416 ---initial-mass 20.6026 --metallicity 0.01416 ---initial-mass 20.6108 --metallicity 0.01416 ---initial-mass 20.6191 --metallicity 0.01416 ---initial-mass 20.6273 --metallicity 0.01416 ---initial-mass 20.6355 --metallicity 0.01416 ---initial-mass 20.6437 --metallicity 0.01416 ---initial-mass 20.6519 --metallicity 0.01416 ---initial-mass 20.6602 --metallicity 0.01416 ---initial-mass 20.6684 --metallicity 0.01416 ---initial-mass 20.6766 --metallicity 0.01416 ---initial-mass 20.6849 --metallicity 0.01416 ---initial-mass 20.6931 --metallicity 0.01416 ---initial-mass 20.7014 --metallicity 0.01416 ---initial-mass 20.7096 --metallicity 0.01416 ---initial-mass 20.7179 --metallicity 0.01416 ---initial-mass 20.7261 --metallicity 0.01416 ---initial-mass 20.7344 --metallicity 0.01416 ---initial-mass 20.7427 --metallicity 0.01416 ---initial-mass 20.7509 --metallicity 0.01416 ---initial-mass 20.7592 --metallicity 0.01416 ---initial-mass 20.7675 --metallicity 0.01416 ---initial-mass 20.7758 --metallicity 0.01416 ---initial-mass 20.784 --metallicity 0.01416 ---initial-mass 20.7923 --metallicity 0.01416 ---initial-mass 20.8006 --metallicity 0.01416 ---initial-mass 20.8089 --metallicity 0.01416 ---initial-mass 20.8172 --metallicity 0.01416 ---initial-mass 20.8255 --metallicity 0.01416 ---initial-mass 20.8338 --metallicity 0.01416 ---initial-mass 20.8421 --metallicity 0.01416 ---initial-mass 20.8504 --metallicity 0.01416 ---initial-mass 20.8587 --metallicity 0.01416 ---initial-mass 20.867 --metallicity 0.01416 ---initial-mass 20.8753 --metallicity 0.01416 ---initial-mass 20.8837 --metallicity 0.01416 ---initial-mass 20.892 --metallicity 0.01416 ---initial-mass 20.9003 --metallicity 0.01416 ---initial-mass 20.9086 --metallicity 0.01416 ---initial-mass 20.917 --metallicity 0.01416 ---initial-mass 20.9253 --metallicity 0.01416 ---initial-mass 20.9336 --metallicity 0.01416 ---initial-mass 20.942 --metallicity 0.01416 ---initial-mass 20.9503 --metallicity 0.01416 ---initial-mass 20.9587 --metallicity 0.01416 ---initial-mass 20.967 --metallicity 0.01416 ---initial-mass 20.9754 --metallicity 0.01416 ---initial-mass 20.9838 --metallicity 0.01416 ---initial-mass 20.9921 --metallicity 0.01416 ---initial-mass 21.0005 --metallicity 0.01416 ---initial-mass 21.0089 --metallicity 0.01416 ---initial-mass 21.0172 --metallicity 0.01416 ---initial-mass 21.0256 --metallicity 0.01416 ---initial-mass 21.034 --metallicity 0.01416 ---initial-mass 21.0424 --metallicity 0.01416 ---initial-mass 21.0507 --metallicity 0.01416 ---initial-mass 21.0591 --metallicity 0.01416 ---initial-mass 21.0675 --metallicity 0.01416 ---initial-mass 21.0759 --metallicity 0.01416 ---initial-mass 21.0843 --metallicity 0.01416 ---initial-mass 21.0927 --metallicity 0.01416 ---initial-mass 21.1011 --metallicity 0.01416 ---initial-mass 21.1095 --metallicity 0.01416 ---initial-mass 21.118 --metallicity 0.01416 ---initial-mass 21.1264 --metallicity 0.01416 ---initial-mass 21.1348 --metallicity 0.01416 ---initial-mass 21.1432 --metallicity 0.01416 ---initial-mass 21.1516 --metallicity 0.01416 ---initial-mass 21.1601 --metallicity 0.01416 ---initial-mass 21.1685 --metallicity 0.01416 ---initial-mass 21.1769 --metallicity 0.01416 ---initial-mass 21.1854 --metallicity 0.01416 ---initial-mass 21.1938 --metallicity 0.01416 ---initial-mass 21.2023 --metallicity 0.01416 ---initial-mass 21.2107 --metallicity 0.01416 ---initial-mass 21.2192 --metallicity 0.01416 ---initial-mass 21.2276 --metallicity 0.01416 ---initial-mass 21.2361 --metallicity 0.01416 ---initial-mass 21.2446 --metallicity 0.01416 ---initial-mass 21.253 --metallicity 0.01416 ---initial-mass 21.2615 --metallicity 0.01416 ---initial-mass 21.27 --metallicity 0.01416 ---initial-mass 21.2785 --metallicity 0.01416 ---initial-mass 21.2869 --metallicity 0.01416 ---initial-mass 21.2954 --metallicity 0.01416 ---initial-mass 21.3039 --metallicity 0.01416 ---initial-mass 21.3124 --metallicity 0.01416 ---initial-mass 21.3209 --metallicity 0.01416 ---initial-mass 21.3294 --metallicity 0.01416 ---initial-mass 21.3379 --metallicity 0.01416 ---initial-mass 21.3464 --metallicity 0.01416 ---initial-mass 21.3549 --metallicity 0.01416 ---initial-mass 21.3634 --metallicity 0.01416 ---initial-mass 21.3719 --metallicity 0.01416 ---initial-mass 21.3804 --metallicity 0.01416 ---initial-mass 21.389 --metallicity 0.01416 ---initial-mass 21.3975 --metallicity 0.01416 ---initial-mass 21.406 --metallicity 0.01416 ---initial-mass 21.4145 --metallicity 0.01416 ---initial-mass 21.4231 --metallicity 0.01416 ---initial-mass 21.4316 --metallicity 0.01416 ---initial-mass 21.4402 --metallicity 0.01416 ---initial-mass 21.4487 --metallicity 0.01416 ---initial-mass 21.4573 --metallicity 0.01416 ---initial-mass 21.4658 --metallicity 0.01416 ---initial-mass 21.4744 --metallicity 0.01416 ---initial-mass 21.4829 --metallicity 0.01416 ---initial-mass 21.4915 --metallicity 0.01416 ---initial-mass 21.5001 --metallicity 0.01416 ---initial-mass 21.5086 --metallicity 0.01416 ---initial-mass 21.5172 --metallicity 0.01416 ---initial-mass 21.5258 --metallicity 0.01416 ---initial-mass 21.5343 --metallicity 0.01416 ---initial-mass 21.5429 --metallicity 0.01416 ---initial-mass 21.5515 --metallicity 0.01416 ---initial-mass 21.5601 --metallicity 0.01416 ---initial-mass 21.5687 --metallicity 0.01416 ---initial-mass 21.5773 --metallicity 0.01416 ---initial-mass 21.5859 --metallicity 0.01416 ---initial-mass 21.5945 --metallicity 0.01416 ---initial-mass 21.6031 --metallicity 0.01416 ---initial-mass 21.6117 --metallicity 0.01416 ---initial-mass 21.6203 --metallicity 0.01416 ---initial-mass 21.6289 --metallicity 0.01416 ---initial-mass 21.6376 --metallicity 0.01416 ---initial-mass 21.6462 --metallicity 0.01416 ---initial-mass 21.6548 --metallicity 0.01416 ---initial-mass 21.6634 --metallicity 0.01416 ---initial-mass 21.6721 --metallicity 0.01416 ---initial-mass 21.6807 --metallicity 0.01416 ---initial-mass 21.6894 --metallicity 0.01416 ---initial-mass 21.698 --metallicity 0.01416 ---initial-mass 21.7066 --metallicity 0.01416 ---initial-mass 21.7153 --metallicity 0.01416 ---initial-mass 21.724 --metallicity 0.01416 ---initial-mass 21.7326 --metallicity 0.01416 ---initial-mass 21.7413 --metallicity 0.01416 ---initial-mass 21.7499 --metallicity 0.01416 ---initial-mass 21.7586 --metallicity 0.01416 ---initial-mass 21.7673 --metallicity 0.01416 ---initial-mass 21.776 --metallicity 0.01416 ---initial-mass 21.7846 --metallicity 0.01416 ---initial-mass 21.7933 --metallicity 0.01416 ---initial-mass 21.802 --metallicity 0.01416 ---initial-mass 21.8107 --metallicity 0.01416 ---initial-mass 21.8194 --metallicity 0.01416 ---initial-mass 21.8281 --metallicity 0.01416 ---initial-mass 21.8368 --metallicity 0.01416 ---initial-mass 21.8455 --metallicity 0.01416 ---initial-mass 21.8542 --metallicity 0.01416 ---initial-mass 21.8629 --metallicity 0.01416 ---initial-mass 21.8716 --metallicity 0.01416 ---initial-mass 21.8803 --metallicity 0.01416 ---initial-mass 21.8891 --metallicity 0.01416 ---initial-mass 21.8978 --metallicity 0.01416 ---initial-mass 21.9065 --metallicity 0.01416 ---initial-mass 21.9152 --metallicity 0.01416 ---initial-mass 21.924 --metallicity 0.01416 ---initial-mass 21.9327 --metallicity 0.01416 ---initial-mass 21.9414 --metallicity 0.01416 ---initial-mass 21.9502 --metallicity 0.01416 ---initial-mass 21.9589 --metallicity 0.01416 ---initial-mass 21.9677 --metallicity 0.01416 ---initial-mass 21.9764 --metallicity 0.01416 ---initial-mass 21.9852 --metallicity 0.01416 ---initial-mass 21.994 --metallicity 0.01416 ---initial-mass 22.0027 --metallicity 0.01416 ---initial-mass 22.0115 --metallicity 0.01416 ---initial-mass 22.0203 --metallicity 0.01416 ---initial-mass 22.0291 --metallicity 0.01416 ---initial-mass 22.0378 --metallicity 0.01416 ---initial-mass 22.0466 --metallicity 0.01416 ---initial-mass 22.0554 --metallicity 0.01416 ---initial-mass 22.0642 --metallicity 0.01416 ---initial-mass 22.073 --metallicity 0.01416 ---initial-mass 22.0818 --metallicity 0.01416 ---initial-mass 22.0906 --metallicity 0.01416 ---initial-mass 22.0994 --metallicity 0.01416 ---initial-mass 22.1082 --metallicity 0.01416 ---initial-mass 22.117 --metallicity 0.01416 ---initial-mass 22.1258 --metallicity 0.01416 ---initial-mass 22.1346 --metallicity 0.01416 ---initial-mass 22.1435 --metallicity 0.01416 ---initial-mass 22.1523 --metallicity 0.01416 ---initial-mass 22.1611 --metallicity 0.01416 ---initial-mass 22.17 --metallicity 0.01416 ---initial-mass 22.1788 --metallicity 0.01416 ---initial-mass 22.1876 --metallicity 0.01416 ---initial-mass 22.1965 --metallicity 0.01416 ---initial-mass 22.2053 --metallicity 0.01416 ---initial-mass 22.2142 --metallicity 0.01416 ---initial-mass 22.223 --metallicity 0.01416 ---initial-mass 22.2319 --metallicity 0.01416 ---initial-mass 22.2407 --metallicity 0.01416 ---initial-mass 22.2496 --metallicity 0.01416 ---initial-mass 22.2585 --metallicity 0.01416 ---initial-mass 22.2673 --metallicity 0.01416 ---initial-mass 22.2762 --metallicity 0.01416 ---initial-mass 22.2851 --metallicity 0.01416 ---initial-mass 22.294 --metallicity 0.01416 ---initial-mass 22.3029 --metallicity 0.01416 ---initial-mass 22.3117 --metallicity 0.01416 ---initial-mass 22.3206 --metallicity 0.01416 ---initial-mass 22.3295 --metallicity 0.01416 ---initial-mass 22.3384 --metallicity 0.01416 ---initial-mass 22.3473 --metallicity 0.01416 ---initial-mass 22.3562 --metallicity 0.01416 ---initial-mass 22.3652 --metallicity 0.01416 ---initial-mass 22.3741 --metallicity 0.01416 ---initial-mass 22.383 --metallicity 0.01416 ---initial-mass 22.3919 --metallicity 0.01416 ---initial-mass 22.4008 --metallicity 0.01416 ---initial-mass 22.4098 --metallicity 0.01416 ---initial-mass 22.4187 --metallicity 0.01416 ---initial-mass 22.4276 --metallicity 0.01416 ---initial-mass 22.4366 --metallicity 0.01416 ---initial-mass 22.4455 --metallicity 0.01416 ---initial-mass 22.4545 --metallicity 0.01416 ---initial-mass 22.4634 --metallicity 0.01416 ---initial-mass 22.4724 --metallicity 0.01416 ---initial-mass 22.4813 --metallicity 0.01416 ---initial-mass 22.4903 --metallicity 0.01416 ---initial-mass 22.4992 --metallicity 0.01416 ---initial-mass 22.5082 --metallicity 0.01416 ---initial-mass 22.5172 --metallicity 0.01416 ---initial-mass 22.5261 --metallicity 0.01416 ---initial-mass 22.5351 --metallicity 0.01416 ---initial-mass 22.5441 --metallicity 0.01416 ---initial-mass 22.5531 --metallicity 0.01416 ---initial-mass 22.5621 --metallicity 0.01416 ---initial-mass 22.5711 --metallicity 0.01416 ---initial-mass 22.5801 --metallicity 0.01416 ---initial-mass 22.5891 --metallicity 0.01416 ---initial-mass 22.5981 --metallicity 0.01416 ---initial-mass 22.6071 --metallicity 0.01416 ---initial-mass 22.6161 --metallicity 0.01416 ---initial-mass 22.6251 --metallicity 0.01416 ---initial-mass 22.6341 --metallicity 0.01416 ---initial-mass 22.6431 --metallicity 0.01416 ---initial-mass 22.6522 --metallicity 0.01416 ---initial-mass 22.6612 --metallicity 0.01416 ---initial-mass 22.6702 --metallicity 0.01416 ---initial-mass 22.6793 --metallicity 0.01416 ---initial-mass 22.6883 --metallicity 0.01416 ---initial-mass 22.6973 --metallicity 0.01416 ---initial-mass 22.7064 --metallicity 0.01416 ---initial-mass 22.7154 --metallicity 0.01416 ---initial-mass 22.7245 --metallicity 0.01416 ---initial-mass 22.7335 --metallicity 0.01416 ---initial-mass 22.7426 --metallicity 0.01416 ---initial-mass 22.7517 --metallicity 0.01416 ---initial-mass 22.7607 --metallicity 0.01416 ---initial-mass 22.7698 --metallicity 0.01416 ---initial-mass 22.7789 --metallicity 0.01416 ---initial-mass 22.788 --metallicity 0.01416 ---initial-mass 22.797 --metallicity 0.01416 ---initial-mass 22.8061 --metallicity 0.01416 ---initial-mass 22.8152 --metallicity 0.01416 ---initial-mass 22.8243 --metallicity 0.01416 ---initial-mass 22.8334 --metallicity 0.01416 ---initial-mass 22.8425 --metallicity 0.01416 ---initial-mass 22.8516 --metallicity 0.01416 ---initial-mass 22.8607 --metallicity 0.01416 ---initial-mass 22.8698 --metallicity 0.01416 ---initial-mass 22.8789 --metallicity 0.01416 ---initial-mass 22.8881 --metallicity 0.01416 ---initial-mass 22.8972 --metallicity 0.01416 ---initial-mass 22.9063 --metallicity 0.01416 ---initial-mass 22.9154 --metallicity 0.01416 ---initial-mass 22.9246 --metallicity 0.01416 ---initial-mass 22.9337 --metallicity 0.01416 ---initial-mass 22.9429 --metallicity 0.01416 ---initial-mass 22.952 --metallicity 0.01416 ---initial-mass 22.9611 --metallicity 0.01416 ---initial-mass 22.9703 --metallicity 0.01416 ---initial-mass 22.9795 --metallicity 0.01416 ---initial-mass 22.9886 --metallicity 0.01416 ---initial-mass 22.9978 --metallicity 0.01416 ---initial-mass 23.0069 --metallicity 0.01416 ---initial-mass 23.0161 --metallicity 0.01416 ---initial-mass 23.0253 --metallicity 0.01416 ---initial-mass 23.0345 --metallicity 0.01416 ---initial-mass 23.0436 --metallicity 0.01416 ---initial-mass 23.0528 --metallicity 0.01416 ---initial-mass 23.062 --metallicity 0.01416 ---initial-mass 23.0712 --metallicity 0.01416 ---initial-mass 23.0804 --metallicity 0.01416 ---initial-mass 23.0896 --metallicity 0.01416 ---initial-mass 23.0988 --metallicity 0.01416 ---initial-mass 23.108 --metallicity 0.01416 ---initial-mass 23.1172 --metallicity 0.01416 ---initial-mass 23.1264 --metallicity 0.01416 ---initial-mass 23.1356 --metallicity 0.01416 ---initial-mass 23.1449 --metallicity 0.01416 ---initial-mass 23.1541 --metallicity 0.01416 ---initial-mass 23.1633 --metallicity 0.01416 ---initial-mass 23.1725 --metallicity 0.01416 ---initial-mass 23.1818 --metallicity 0.01416 ---initial-mass 23.191 --metallicity 0.01416 ---initial-mass 23.2003 --metallicity 0.01416 ---initial-mass 23.2095 --metallicity 0.01416 ---initial-mass 23.2188 --metallicity 0.01416 ---initial-mass 23.228 --metallicity 0.01416 ---initial-mass 23.2373 --metallicity 0.01416 ---initial-mass 23.2465 --metallicity 0.01416 ---initial-mass 23.2558 --metallicity 0.01416 ---initial-mass 23.2651 --metallicity 0.01416 ---initial-mass 23.2743 --metallicity 0.01416 ---initial-mass 23.2836 --metallicity 0.01416 ---initial-mass 23.2929 --metallicity 0.01416 ---initial-mass 23.3022 --metallicity 0.01416 ---initial-mass 23.3115 --metallicity 0.01416 ---initial-mass 23.3208 --metallicity 0.01416 ---initial-mass 23.3301 --metallicity 0.01416 ---initial-mass 23.3394 --metallicity 0.01416 ---initial-mass 23.3487 --metallicity 0.01416 ---initial-mass 23.358 --metallicity 0.01416 ---initial-mass 23.3673 --metallicity 0.01416 ---initial-mass 23.3766 --metallicity 0.01416 ---initial-mass 23.3859 --metallicity 0.01416 ---initial-mass 23.3952 --metallicity 0.01416 ---initial-mass 23.4045 --metallicity 0.01416 ---initial-mass 23.4139 --metallicity 0.01416 ---initial-mass 23.4232 --metallicity 0.01416 ---initial-mass 23.4325 --metallicity 0.01416 ---initial-mass 23.4419 --metallicity 0.01416 ---initial-mass 23.4512 --metallicity 0.01416 ---initial-mass 23.4606 --metallicity 0.01416 ---initial-mass 23.4699 --metallicity 0.01416 ---initial-mass 23.4793 --metallicity 0.01416 ---initial-mass 23.4886 --metallicity 0.01416 ---initial-mass 23.498 --metallicity 0.01416 ---initial-mass 23.5074 --metallicity 0.01416 ---initial-mass 23.5167 --metallicity 0.01416 ---initial-mass 23.5261 --metallicity 0.01416 ---initial-mass 23.5355 --metallicity 0.01416 ---initial-mass 23.5449 --metallicity 0.01416 ---initial-mass 23.5542 --metallicity 0.01416 ---initial-mass 23.5636 --metallicity 0.01416 ---initial-mass 23.573 --metallicity 0.01416 ---initial-mass 23.5824 --metallicity 0.01416 ---initial-mass 23.5918 --metallicity 0.01416 ---initial-mass 23.6012 --metallicity 0.01416 ---initial-mass 23.6106 --metallicity 0.01416 ---initial-mass 23.62 --metallicity 0.01416 ---initial-mass 23.6294 --metallicity 0.01416 ---initial-mass 23.6389 --metallicity 0.01416 ---initial-mass 23.6483 --metallicity 0.01416 ---initial-mass 23.6577 --metallicity 0.01416 ---initial-mass 23.6671 --metallicity 0.01416 ---initial-mass 23.6766 --metallicity 0.01416 ---initial-mass 23.686 --metallicity 0.01416 ---initial-mass 23.6954 --metallicity 0.01416 ---initial-mass 23.7049 --metallicity 0.01416 ---initial-mass 23.7143 --metallicity 0.01416 ---initial-mass 23.7238 --metallicity 0.01416 ---initial-mass 23.7332 --metallicity 0.01416 ---initial-mass 23.7427 --metallicity 0.01416 ---initial-mass 23.7522 --metallicity 0.01416 ---initial-mass 23.7616 --metallicity 0.01416 ---initial-mass 23.7711 --metallicity 0.01416 ---initial-mass 23.7806 --metallicity 0.01416 ---initial-mass 23.7901 --metallicity 0.01416 ---initial-mass 23.7995 --metallicity 0.01416 ---initial-mass 23.809 --metallicity 0.01416 ---initial-mass 23.8185 --metallicity 0.01416 ---initial-mass 23.828 --metallicity 0.01416 ---initial-mass 23.8375 --metallicity 0.01416 ---initial-mass 23.847 --metallicity 0.01416 ---initial-mass 23.8565 --metallicity 0.01416 ---initial-mass 23.866 --metallicity 0.01416 ---initial-mass 23.8755 --metallicity 0.01416 ---initial-mass 23.885 --metallicity 0.01416 ---initial-mass 23.8946 --metallicity 0.01416 ---initial-mass 23.9041 --metallicity 0.01416 ---initial-mass 23.9136 --metallicity 0.01416 ---initial-mass 23.9231 --metallicity 0.01416 ---initial-mass 23.9327 --metallicity 0.01416 ---initial-mass 23.9422 --metallicity 0.01416 ---initial-mass 23.9518 --metallicity 0.01416 ---initial-mass 23.9613 --metallicity 0.01416 ---initial-mass 23.9709 --metallicity 0.01416 ---initial-mass 23.9804 --metallicity 0.01416 ---initial-mass 23.99 --metallicity 0.01416 ---initial-mass 23.9995 --metallicity 0.01416 ---initial-mass 24.0091 --metallicity 0.01416 ---initial-mass 24.0187 --metallicity 0.01416 ---initial-mass 24.0282 --metallicity 0.01416 ---initial-mass 24.0378 --metallicity 0.01416 ---initial-mass 24.0474 --metallicity 0.01416 ---initial-mass 24.057 --metallicity 0.01416 ---initial-mass 24.0666 --metallicity 0.01416 ---initial-mass 24.0762 --metallicity 0.01416 ---initial-mass 24.0857 --metallicity 0.01416 ---initial-mass 24.0953 --metallicity 0.01416 ---initial-mass 24.105 --metallicity 0.01416 ---initial-mass 24.1146 --metallicity 0.01416 ---initial-mass 24.1242 --metallicity 0.01416 ---initial-mass 24.1338 --metallicity 0.01416 ---initial-mass 24.1434 --metallicity 0.01416 ---initial-mass 24.153 --metallicity 0.01416 ---initial-mass 24.1627 --metallicity 0.01416 ---initial-mass 24.1723 --metallicity 0.01416 ---initial-mass 24.1819 --metallicity 0.01416 ---initial-mass 24.1916 --metallicity 0.01416 ---initial-mass 24.2012 --metallicity 0.01416 ---initial-mass 24.2108 --metallicity 0.01416 ---initial-mass 24.2205 --metallicity 0.01416 ---initial-mass 24.2301 --metallicity 0.01416 ---initial-mass 24.2398 --metallicity 0.01416 ---initial-mass 24.2495 --metallicity 0.01416 ---initial-mass 24.2591 --metallicity 0.01416 ---initial-mass 24.2688 --metallicity 0.01416 ---initial-mass 24.2785 --metallicity 0.01416 ---initial-mass 24.2881 --metallicity 0.01416 ---initial-mass 24.2978 --metallicity 0.01416 ---initial-mass 24.3075 --metallicity 0.01416 ---initial-mass 24.3172 --metallicity 0.01416 ---initial-mass 24.3269 --metallicity 0.01416 ---initial-mass 24.3366 --metallicity 0.01416 ---initial-mass 24.3463 --metallicity 0.01416 ---initial-mass 24.356 --metallicity 0.01416 ---initial-mass 24.3657 --metallicity 0.01416 ---initial-mass 24.3754 --metallicity 0.01416 ---initial-mass 24.3851 --metallicity 0.01416 ---initial-mass 24.3948 --metallicity 0.01416 ---initial-mass 24.4046 --metallicity 0.01416 ---initial-mass 24.4143 --metallicity 0.01416 ---initial-mass 24.424 --metallicity 0.01416 ---initial-mass 24.4338 --metallicity 0.01416 ---initial-mass 24.4435 --metallicity 0.01416 ---initial-mass 24.4532 --metallicity 0.01416 ---initial-mass 24.463 --metallicity 0.01416 ---initial-mass 24.4727 --metallicity 0.01416 ---initial-mass 24.4825 --metallicity 0.01416 ---initial-mass 24.4922 --metallicity 0.01416 ---initial-mass 24.502 --metallicity 0.01416 ---initial-mass 24.5118 --metallicity 0.01416 ---initial-mass 24.5215 --metallicity 0.01416 ---initial-mass 24.5313 --metallicity 0.01416 ---initial-mass 24.5411 --metallicity 0.01416 ---initial-mass 24.5509 --metallicity 0.01416 ---initial-mass 24.5607 --metallicity 0.01416 ---initial-mass 24.5704 --metallicity 0.01416 ---initial-mass 24.5802 --metallicity 0.01416 ---initial-mass 24.59 --metallicity 0.01416 ---initial-mass 24.5998 --metallicity 0.01416 ---initial-mass 24.6096 --metallicity 0.01416 ---initial-mass 24.6194 --metallicity 0.01416 ---initial-mass 24.6293 --metallicity 0.01416 ---initial-mass 24.6391 --metallicity 0.01416 ---initial-mass 24.6489 --metallicity 0.01416 ---initial-mass 24.6587 --metallicity 0.01416 ---initial-mass 24.6685 --metallicity 0.01416 ---initial-mass 24.6784 --metallicity 0.01416 ---initial-mass 24.6882 --metallicity 0.01416 ---initial-mass 24.698 --metallicity 0.01416 ---initial-mass 24.7079 --metallicity 0.01416 ---initial-mass 24.7177 --metallicity 0.01416 ---initial-mass 24.7276 --metallicity 0.01416 ---initial-mass 24.7374 --metallicity 0.01416 ---initial-mass 24.7473 --metallicity 0.01416 ---initial-mass 24.7572 --metallicity 0.01416 ---initial-mass 24.767 --metallicity 0.01416 ---initial-mass 24.7769 --metallicity 0.01416 ---initial-mass 24.7868 --metallicity 0.01416 ---initial-mass 24.7967 --metallicity 0.01416 ---initial-mass 24.8065 --metallicity 0.01416 ---initial-mass 24.8164 --metallicity 0.01416 ---initial-mass 24.8263 --metallicity 0.01416 ---initial-mass 24.8362 --metallicity 0.01416 ---initial-mass 24.8461 --metallicity 0.01416 ---initial-mass 24.856 --metallicity 0.01416 ---initial-mass 24.8659 --metallicity 0.01416 ---initial-mass 24.8758 --metallicity 0.01416 ---initial-mass 24.8857 --metallicity 0.01416 ---initial-mass 24.8957 --metallicity 0.01416 ---initial-mass 24.9056 --metallicity 0.01416 ---initial-mass 24.9155 --metallicity 0.01416 ---initial-mass 24.9254 --metallicity 0.01416 ---initial-mass 24.9354 --metallicity 0.01416 ---initial-mass 24.9453 --metallicity 0.01416 ---initial-mass 24.9553 --metallicity 0.01416 ---initial-mass 24.9652 --metallicity 0.01416 ---initial-mass 24.9752 --metallicity 0.01416 ---initial-mass 24.9851 --metallicity 0.01416 ---initial-mass 24.9951 --metallicity 0.01416 ---initial-mass 25.005 --metallicity 0.01416 ---initial-mass 25.015 --metallicity 0.01416 ---initial-mass 25.025 --metallicity 0.01416 ---initial-mass 25.0349 --metallicity 0.01416 ---initial-mass 25.0449 --metallicity 0.01416 ---initial-mass 25.0549 --metallicity 0.01416 ---initial-mass 25.0649 --metallicity 0.01416 ---initial-mass 25.0749 --metallicity 0.01416 ---initial-mass 25.0849 --metallicity 0.01416 ---initial-mass 25.0949 --metallicity 0.01416 ---initial-mass 25.1049 --metallicity 0.01416 ---initial-mass 25.1149 --metallicity 0.01416 ---initial-mass 25.1249 --metallicity 0.01416 ---initial-mass 25.1349 --metallicity 0.01416 ---initial-mass 25.1449 --metallicity 0.01416 ---initial-mass 25.1549 --metallicity 0.01416 ---initial-mass 25.165 --metallicity 0.01416 ---initial-mass 25.175 --metallicity 0.01416 ---initial-mass 25.185 --metallicity 0.01416 ---initial-mass 25.1951 --metallicity 0.01416 ---initial-mass 25.2051 --metallicity 0.01416 ---initial-mass 25.2151 --metallicity 0.01416 ---initial-mass 25.2252 --metallicity 0.01416 ---initial-mass 25.2352 --metallicity 0.01416 ---initial-mass 25.2453 --metallicity 0.01416 ---initial-mass 25.2554 --metallicity 0.01416 ---initial-mass 25.2654 --metallicity 0.01416 ---initial-mass 25.2755 --metallicity 0.01416 ---initial-mass 25.2856 --metallicity 0.01416 ---initial-mass 25.2957 --metallicity 0.01416 ---initial-mass 25.3057 --metallicity 0.01416 ---initial-mass 25.3158 --metallicity 0.01416 ---initial-mass 25.3259 --metallicity 0.01416 ---initial-mass 25.336 --metallicity 0.01416 ---initial-mass 25.3461 --metallicity 0.01416 ---initial-mass 25.3562 --metallicity 0.01416 ---initial-mass 25.3663 --metallicity 0.01416 ---initial-mass 25.3764 --metallicity 0.01416 ---initial-mass 25.3865 --metallicity 0.01416 ---initial-mass 25.3967 --metallicity 0.01416 ---initial-mass 25.4068 --metallicity 0.01416 ---initial-mass 25.4169 --metallicity 0.01416 ---initial-mass 25.427 --metallicity 0.01416 ---initial-mass 25.4372 --metallicity 0.01416 ---initial-mass 25.4473 --metallicity 0.01416 ---initial-mass 25.4574 --metallicity 0.01416 ---initial-mass 25.4676 --metallicity 0.01416 ---initial-mass 25.4777 --metallicity 0.01416 ---initial-mass 25.4879 --metallicity 0.01416 ---initial-mass 25.4981 --metallicity 0.01416 ---initial-mass 25.5082 --metallicity 0.01416 ---initial-mass 25.5184 --metallicity 0.01416 ---initial-mass 25.5286 --metallicity 0.01416 ---initial-mass 25.5387 --metallicity 0.01416 ---initial-mass 25.5489 --metallicity 0.01416 ---initial-mass 25.5591 --metallicity 0.01416 ---initial-mass 25.5693 --metallicity 0.01416 ---initial-mass 25.5795 --metallicity 0.01416 ---initial-mass 25.5897 --metallicity 0.01416 ---initial-mass 25.5999 --metallicity 0.01416 ---initial-mass 25.6101 --metallicity 0.01416 ---initial-mass 25.6203 --metallicity 0.01416 ---initial-mass 25.6305 --metallicity 0.01416 ---initial-mass 25.6407 --metallicity 0.01416 ---initial-mass 25.6509 --metallicity 0.01416 ---initial-mass 25.6611 --metallicity 0.01416 ---initial-mass 25.6714 --metallicity 0.01416 ---initial-mass 25.6816 --metallicity 0.01416 ---initial-mass 25.6918 --metallicity 0.01416 ---initial-mass 25.7021 --metallicity 0.01416 ---initial-mass 25.7123 --metallicity 0.01416 ---initial-mass 25.7226 --metallicity 0.01416 ---initial-mass 25.7328 --metallicity 0.01416 ---initial-mass 25.7431 --metallicity 0.01416 ---initial-mass 25.7533 --metallicity 0.01416 ---initial-mass 25.7636 --metallicity 0.01416 ---initial-mass 25.7739 --metallicity 0.01416 ---initial-mass 25.7841 --metallicity 0.01416 ---initial-mass 25.7944 --metallicity 0.01416 ---initial-mass 25.8047 --metallicity 0.01416 ---initial-mass 25.815 --metallicity 0.01416 ---initial-mass 25.8253 --metallicity 0.01416 ---initial-mass 25.8356 --metallicity 0.01416 ---initial-mass 25.8459 --metallicity 0.01416 ---initial-mass 25.8562 --metallicity 0.01416 ---initial-mass 25.8665 --metallicity 0.01416 ---initial-mass 25.8768 --metallicity 0.01416 ---initial-mass 25.8871 --metallicity 0.01416 ---initial-mass 25.8974 --metallicity 0.01416 ---initial-mass 25.9077 --metallicity 0.01416 ---initial-mass 25.918 --metallicity 0.01416 ---initial-mass 25.9284 --metallicity 0.01416 ---initial-mass 25.9387 --metallicity 0.01416 ---initial-mass 25.949 --metallicity 0.01416 ---initial-mass 25.9594 --metallicity 0.01416 ---initial-mass 25.9697 --metallicity 0.01416 ---initial-mass 25.9801 --metallicity 0.01416 ---initial-mass 25.9904 --metallicity 0.01416 ---initial-mass 26.0008 --metallicity 0.01416 ---initial-mass 26.0112 --metallicity 0.01416 ---initial-mass 26.0215 --metallicity 0.01416 ---initial-mass 26.0319 --metallicity 0.01416 ---initial-mass 26.0423 --metallicity 0.01416 ---initial-mass 26.0527 --metallicity 0.01416 ---initial-mass 26.063 --metallicity 0.01416 ---initial-mass 26.0734 --metallicity 0.01416 ---initial-mass 26.0838 --metallicity 0.01416 ---initial-mass 26.0942 --metallicity 0.01416 ---initial-mass 26.1046 --metallicity 0.01416 ---initial-mass 26.115 --metallicity 0.01416 ---initial-mass 26.1254 --metallicity 0.01416 ---initial-mass 26.1358 --metallicity 0.01416 ---initial-mass 26.1463 --metallicity 0.01416 ---initial-mass 26.1567 --metallicity 0.01416 ---initial-mass 26.1671 --metallicity 0.01416 ---initial-mass 26.1775 --metallicity 0.01416 ---initial-mass 26.188 --metallicity 0.01416 ---initial-mass 26.1984 --metallicity 0.01416 ---initial-mass 26.2088 --metallicity 0.01416 ---initial-mass 26.2193 --metallicity 0.01416 ---initial-mass 26.2297 --metallicity 0.01416 ---initial-mass 26.2402 --metallicity 0.01416 ---initial-mass 26.2506 --metallicity 0.01416 ---initial-mass 26.2611 --metallicity 0.01416 ---initial-mass 26.2716 --metallicity 0.01416 ---initial-mass 26.282 --metallicity 0.01416 ---initial-mass 26.2925 --metallicity 0.01416 ---initial-mass 26.303 --metallicity 0.01416 ---initial-mass 26.3135 --metallicity 0.01416 ---initial-mass 26.324 --metallicity 0.01416 ---initial-mass 26.3345 --metallicity 0.01416 ---initial-mass 26.345 --metallicity 0.01416 ---initial-mass 26.3555 --metallicity 0.01416 ---initial-mass 26.366 --metallicity 0.01416 ---initial-mass 26.3765 --metallicity 0.01416 ---initial-mass 26.387 --metallicity 0.01416 ---initial-mass 26.3975 --metallicity 0.01416 ---initial-mass 26.408 --metallicity 0.01416 ---initial-mass 26.4185 --metallicity 0.01416 ---initial-mass 26.4291 --metallicity 0.01416 ---initial-mass 26.4396 --metallicity 0.01416 ---initial-mass 26.4501 --metallicity 0.01416 ---initial-mass 26.4607 --metallicity 0.01416 ---initial-mass 26.4712 --metallicity 0.01416 ---initial-mass 26.4818 --metallicity 0.01416 ---initial-mass 26.4923 --metallicity 0.01416 ---initial-mass 26.5029 --metallicity 0.01416 ---initial-mass 26.5135 --metallicity 0.01416 ---initial-mass 26.524 --metallicity 0.01416 ---initial-mass 26.5346 --metallicity 0.01416 ---initial-mass 26.5452 --metallicity 0.01416 ---initial-mass 26.5558 --metallicity 0.01416 ---initial-mass 26.5663 --metallicity 0.01416 ---initial-mass 26.5769 --metallicity 0.01416 ---initial-mass 26.5875 --metallicity 0.01416 ---initial-mass 26.5981 --metallicity 0.01416 ---initial-mass 26.6087 --metallicity 0.01416 ---initial-mass 26.6193 --metallicity 0.01416 ---initial-mass 26.6299 --metallicity 0.01416 ---initial-mass 26.6405 --metallicity 0.01416 ---initial-mass 26.6512 --metallicity 0.01416 ---initial-mass 26.6618 --metallicity 0.01416 ---initial-mass 26.6724 --metallicity 0.01416 ---initial-mass 26.683 --metallicity 0.01416 ---initial-mass 26.6937 --metallicity 0.01416 ---initial-mass 26.7043 --metallicity 0.01416 ---initial-mass 26.715 --metallicity 0.01416 ---initial-mass 26.7256 --metallicity 0.01416 ---initial-mass 26.7363 --metallicity 0.01416 ---initial-mass 26.7469 --metallicity 0.01416 ---initial-mass 26.7576 --metallicity 0.01416 ---initial-mass 26.7682 --metallicity 0.01416 ---initial-mass 26.7789 --metallicity 0.01416 ---initial-mass 26.7896 --metallicity 0.01416 ---initial-mass 26.8003 --metallicity 0.01416 ---initial-mass 26.8109 --metallicity 0.01416 ---initial-mass 26.8216 --metallicity 0.01416 ---initial-mass 26.8323 --metallicity 0.01416 ---initial-mass 26.843 --metallicity 0.01416 ---initial-mass 26.8537 --metallicity 0.01416 ---initial-mass 26.8644 --metallicity 0.01416 ---initial-mass 26.8751 --metallicity 0.01416 ---initial-mass 26.8858 --metallicity 0.01416 ---initial-mass 26.8965 --metallicity 0.01416 ---initial-mass 26.9073 --metallicity 0.01416 ---initial-mass 26.918 --metallicity 0.01416 ---initial-mass 26.9287 --metallicity 0.01416 ---initial-mass 26.9394 --metallicity 0.01416 ---initial-mass 26.9502 --metallicity 0.01416 ---initial-mass 26.9609 --metallicity 0.01416 ---initial-mass 26.9717 --metallicity 0.01416 ---initial-mass 26.9824 --metallicity 0.01416 ---initial-mass 26.9932 --metallicity 0.01416 ---initial-mass 27.0039 --metallicity 0.01416 ---initial-mass 27.0147 --metallicity 0.01416 ---initial-mass 27.0255 --metallicity 0.01416 ---initial-mass 27.0362 --metallicity 0.01416 ---initial-mass 27.047 --metallicity 0.01416 ---initial-mass 27.0578 --metallicity 0.01416 ---initial-mass 27.0686 --metallicity 0.01416 ---initial-mass 27.0794 --metallicity 0.01416 ---initial-mass 27.0901 --metallicity 0.01416 ---initial-mass 27.1009 --metallicity 0.01416 ---initial-mass 27.1117 --metallicity 0.01416 ---initial-mass 27.1226 --metallicity 0.01416 ---initial-mass 27.1334 --metallicity 0.01416 ---initial-mass 27.1442 --metallicity 0.01416 ---initial-mass 27.155 --metallicity 0.01416 ---initial-mass 27.1658 --metallicity 0.01416 ---initial-mass 27.1766 --metallicity 0.01416 ---initial-mass 27.1875 --metallicity 0.01416 ---initial-mass 27.1983 --metallicity 0.01416 ---initial-mass 27.2092 --metallicity 0.01416 ---initial-mass 27.22 --metallicity 0.01416 ---initial-mass 27.2308 --metallicity 0.01416 ---initial-mass 27.2417 --metallicity 0.01416 ---initial-mass 27.2526 --metallicity 0.01416 ---initial-mass 27.2634 --metallicity 0.01416 ---initial-mass 27.2743 --metallicity 0.01416 ---initial-mass 27.2852 --metallicity 0.01416 ---initial-mass 27.296 --metallicity 0.01416 ---initial-mass 27.3069 --metallicity 0.01416 ---initial-mass 27.3178 --metallicity 0.01416 ---initial-mass 27.3287 --metallicity 0.01416 ---initial-mass 27.3396 --metallicity 0.01416 ---initial-mass 27.3505 --metallicity 0.01416 ---initial-mass 27.3614 --metallicity 0.01416 ---initial-mass 27.3723 --metallicity 0.01416 ---initial-mass 27.3832 --metallicity 0.01416 ---initial-mass 27.3941 --metallicity 0.01416 ---initial-mass 27.405 --metallicity 0.01416 ---initial-mass 27.4159 --metallicity 0.01416 ---initial-mass 27.4269 --metallicity 0.01416 ---initial-mass 27.4378 --metallicity 0.01416 ---initial-mass 27.4487 --metallicity 0.01416 ---initial-mass 27.4597 --metallicity 0.01416 ---initial-mass 27.4706 --metallicity 0.01416 ---initial-mass 27.4816 --metallicity 0.01416 ---initial-mass 27.4925 --metallicity 0.01416 ---initial-mass 27.5035 --metallicity 0.01416 ---initial-mass 27.5144 --metallicity 0.01416 ---initial-mass 27.5254 --metallicity 0.01416 ---initial-mass 27.5364 --metallicity 0.01416 ---initial-mass 27.5473 --metallicity 0.01416 ---initial-mass 27.5583 --metallicity 0.01416 ---initial-mass 27.5693 --metallicity 0.01416 ---initial-mass 27.5803 --metallicity 0.01416 ---initial-mass 27.5913 --metallicity 0.01416 ---initial-mass 27.6023 --metallicity 0.01416 ---initial-mass 27.6133 --metallicity 0.01416 ---initial-mass 27.6243 --metallicity 0.01416 ---initial-mass 27.6353 --metallicity 0.01416 ---initial-mass 27.6463 --metallicity 0.01416 ---initial-mass 27.6573 --metallicity 0.01416 ---initial-mass 27.6684 --metallicity 0.01416 ---initial-mass 27.6794 --metallicity 0.01416 ---initial-mass 27.6904 --metallicity 0.01416 ---initial-mass 27.7014 --metallicity 0.01416 ---initial-mass 27.7125 --metallicity 0.01416 ---initial-mass 27.7235 --metallicity 0.01416 ---initial-mass 27.7346 --metallicity 0.01416 ---initial-mass 27.7456 --metallicity 0.01416 ---initial-mass 27.7567 --metallicity 0.01416 ---initial-mass 27.7678 --metallicity 0.01416 ---initial-mass 27.7788 --metallicity 0.01416 ---initial-mass 27.7899 --metallicity 0.01416 ---initial-mass 27.801 --metallicity 0.01416 ---initial-mass 27.8121 --metallicity 0.01416 ---initial-mass 27.8231 --metallicity 0.01416 ---initial-mass 27.8342 --metallicity 0.01416 ---initial-mass 27.8453 --metallicity 0.01416 ---initial-mass 27.8564 --metallicity 0.01416 ---initial-mass 27.8675 --metallicity 0.01416 ---initial-mass 27.8786 --metallicity 0.01416 ---initial-mass 27.8897 --metallicity 0.01416 ---initial-mass 27.9009 --metallicity 0.01416 ---initial-mass 27.912 --metallicity 0.01416 ---initial-mass 27.9231 --metallicity 0.01416 ---initial-mass 27.9342 --metallicity 0.01416 ---initial-mass 27.9454 --metallicity 0.01416 ---initial-mass 27.9565 --metallicity 0.01416 ---initial-mass 27.9676 --metallicity 0.01416 ---initial-mass 27.9788 --metallicity 0.01416 ---initial-mass 27.9899 --metallicity 0.01416 ---initial-mass 28.0011 --metallicity 0.01416 ---initial-mass 28.0123 --metallicity 0.01416 ---initial-mass 28.0234 --metallicity 0.01416 ---initial-mass 28.0346 --metallicity 0.01416 ---initial-mass 28.0458 --metallicity 0.01416 ---initial-mass 28.0569 --metallicity 0.01416 ---initial-mass 28.0681 --metallicity 0.01416 ---initial-mass 28.0793 --metallicity 0.01416 ---initial-mass 28.0905 --metallicity 0.01416 ---initial-mass 28.1017 --metallicity 0.01416 ---initial-mass 28.1129 --metallicity 0.01416 ---initial-mass 28.1241 --metallicity 0.01416 ---initial-mass 28.1353 --metallicity 0.01416 ---initial-mass 28.1465 --metallicity 0.01416 ---initial-mass 28.1577 --metallicity 0.01416 ---initial-mass 28.169 --metallicity 0.01416 ---initial-mass 28.1802 --metallicity 0.01416 ---initial-mass 28.1914 --metallicity 0.01416 ---initial-mass 28.2027 --metallicity 0.01416 ---initial-mass 28.2139 --metallicity 0.01416 ---initial-mass 28.2251 --metallicity 0.01416 ---initial-mass 28.2364 --metallicity 0.01416 ---initial-mass 28.2476 --metallicity 0.01416 ---initial-mass 28.2589 --metallicity 0.01416 ---initial-mass 28.2702 --metallicity 0.01416 ---initial-mass 28.2814 --metallicity 0.01416 ---initial-mass 28.2927 --metallicity 0.01416 ---initial-mass 28.304 --metallicity 0.01416 ---initial-mass 28.3153 --metallicity 0.01416 ---initial-mass 28.3265 --metallicity 0.01416 ---initial-mass 28.3378 --metallicity 0.01416 ---initial-mass 28.3491 --metallicity 0.01416 ---initial-mass 28.3604 --metallicity 0.01416 ---initial-mass 28.3717 --metallicity 0.01416 ---initial-mass 28.383 --metallicity 0.01416 ---initial-mass 28.3943 --metallicity 0.01416 ---initial-mass 28.4057 --metallicity 0.01416 ---initial-mass 28.417 --metallicity 0.01416 ---initial-mass 28.4283 --metallicity 0.01416 ---initial-mass 28.4396 --metallicity 0.01416 ---initial-mass 28.451 --metallicity 0.01416 ---initial-mass 28.4623 --metallicity 0.01416 ---initial-mass 28.4737 --metallicity 0.01416 ---initial-mass 28.485 --metallicity 0.01416 ---initial-mass 28.4964 --metallicity 0.01416 ---initial-mass 28.5077 --metallicity 0.01416 ---initial-mass 28.5191 --metallicity 0.01416 ---initial-mass 28.5304 --metallicity 0.01416 ---initial-mass 28.5418 --metallicity 0.01416 ---initial-mass 28.5532 --metallicity 0.01416 ---initial-mass 28.5646 --metallicity 0.01416 ---initial-mass 28.576 --metallicity 0.01416 ---initial-mass 28.5873 --metallicity 0.01416 ---initial-mass 28.5987 --metallicity 0.01416 ---initial-mass 28.6101 --metallicity 0.01416 ---initial-mass 28.6215 --metallicity 0.01416 ---initial-mass 28.6329 --metallicity 0.01416 ---initial-mass 28.6444 --metallicity 0.01416 ---initial-mass 28.6558 --metallicity 0.01416 ---initial-mass 28.6672 --metallicity 0.01416 ---initial-mass 28.6786 --metallicity 0.01416 ---initial-mass 28.6901 --metallicity 0.01416 ---initial-mass 28.7015 --metallicity 0.01416 ---initial-mass 28.7129 --metallicity 0.01416 ---initial-mass 28.7244 --metallicity 0.01416 ---initial-mass 28.7358 --metallicity 0.01416 ---initial-mass 28.7473 --metallicity 0.01416 ---initial-mass 28.7587 --metallicity 0.01416 ---initial-mass 28.7702 --metallicity 0.01416 ---initial-mass 28.7817 --metallicity 0.01416 ---initial-mass 28.7931 --metallicity 0.01416 ---initial-mass 28.8046 --metallicity 0.01416 ---initial-mass 28.8161 --metallicity 0.01416 ---initial-mass 28.8276 --metallicity 0.01416 ---initial-mass 28.8391 --metallicity 0.01416 ---initial-mass 28.8505 --metallicity 0.01416 ---initial-mass 28.862 --metallicity 0.01416 ---initial-mass 28.8736 --metallicity 0.01416 ---initial-mass 28.8851 --metallicity 0.01416 ---initial-mass 28.8966 --metallicity 0.01416 ---initial-mass 28.9081 --metallicity 0.01416 ---initial-mass 28.9196 --metallicity 0.01416 ---initial-mass 28.9311 --metallicity 0.01416 ---initial-mass 28.9427 --metallicity 0.01416 ---initial-mass 28.9542 --metallicity 0.01416 ---initial-mass 28.9657 --metallicity 0.01416 ---initial-mass 28.9773 --metallicity 0.01416 ---initial-mass 28.9888 --metallicity 0.01416 ---initial-mass 29.0004 --metallicity 0.01416 ---initial-mass 29.0119 --metallicity 0.01416 ---initial-mass 29.0235 --metallicity 0.01416 ---initial-mass 29.0351 --metallicity 0.01416 ---initial-mass 29.0466 --metallicity 0.01416 ---initial-mass 29.0582 --metallicity 0.01416 ---initial-mass 29.0698 --metallicity 0.01416 ---initial-mass 29.0814 --metallicity 0.01416 ---initial-mass 29.093 --metallicity 0.01416 ---initial-mass 29.1046 --metallicity 0.01416 ---initial-mass 29.1162 --metallicity 0.01416 ---initial-mass 29.1278 --metallicity 0.01416 ---initial-mass 29.1394 --metallicity 0.01416 ---initial-mass 29.151 --metallicity 0.01416 ---initial-mass 29.1626 --metallicity 0.01416 ---initial-mass 29.1742 --metallicity 0.01416 ---initial-mass 29.1859 --metallicity 0.01416 ---initial-mass 29.1975 --metallicity 0.01416 ---initial-mass 29.2091 --metallicity 0.01416 ---initial-mass 29.2208 --metallicity 0.01416 ---initial-mass 29.2324 --metallicity 0.01416 ---initial-mass 29.2441 --metallicity 0.01416 ---initial-mass 29.2557 --metallicity 0.01416 ---initial-mass 29.2674 --metallicity 0.01416 ---initial-mass 29.2791 --metallicity 0.01416 ---initial-mass 29.2907 --metallicity 0.01416 ---initial-mass 29.3024 --metallicity 0.01416 ---initial-mass 29.3141 --metallicity 0.01416 ---initial-mass 29.3258 --metallicity 0.01416 ---initial-mass 29.3375 --metallicity 0.01416 ---initial-mass 29.3491 --metallicity 0.01416 ---initial-mass 29.3608 --metallicity 0.01416 ---initial-mass 29.3725 --metallicity 0.01416 ---initial-mass 29.3843 --metallicity 0.01416 ---initial-mass 29.396 --metallicity 0.01416 ---initial-mass 29.4077 --metallicity 0.01416 ---initial-mass 29.4194 --metallicity 0.01416 ---initial-mass 29.4311 --metallicity 0.01416 ---initial-mass 29.4429 --metallicity 0.01416 ---initial-mass 29.4546 --metallicity 0.01416 ---initial-mass 29.4663 --metallicity 0.01416 ---initial-mass 29.4781 --metallicity 0.01416 ---initial-mass 29.4898 --metallicity 0.01416 ---initial-mass 29.5016 --metallicity 0.01416 ---initial-mass 29.5133 --metallicity 0.01416 ---initial-mass 29.5251 --metallicity 0.01416 ---initial-mass 29.5369 --metallicity 0.01416 ---initial-mass 29.5486 --metallicity 0.01416 ---initial-mass 29.5604 --metallicity 0.01416 ---initial-mass 29.5722 --metallicity 0.01416 ---initial-mass 29.584 --metallicity 0.01416 ---initial-mass 29.5958 --metallicity 0.01416 ---initial-mass 29.6076 --metallicity 0.01416 ---initial-mass 29.6194 --metallicity 0.01416 ---initial-mass 29.6312 --metallicity 0.01416 ---initial-mass 29.643 --metallicity 0.01416 ---initial-mass 29.6548 --metallicity 0.01416 ---initial-mass 29.6666 --metallicity 0.01416 ---initial-mass 29.6784 --metallicity 0.01416 ---initial-mass 29.6903 --metallicity 0.01416 ---initial-mass 29.7021 --metallicity 0.01416 ---initial-mass 29.7139 --metallicity 0.01416 ---initial-mass 29.7258 --metallicity 0.01416 ---initial-mass 29.7376 --metallicity 0.01416 ---initial-mass 29.7495 --metallicity 0.01416 ---initial-mass 29.7613 --metallicity 0.01416 ---initial-mass 29.7732 --metallicity 0.01416 ---initial-mass 29.7851 --metallicity 0.01416 ---initial-mass 29.7969 --metallicity 0.01416 ---initial-mass 29.8088 --metallicity 0.01416 ---initial-mass 29.8207 --metallicity 0.01416 ---initial-mass 29.8326 --metallicity 0.01416 ---initial-mass 29.8445 --metallicity 0.01416 ---initial-mass 29.8564 --metallicity 0.01416 ---initial-mass 29.8683 --metallicity 0.01416 ---initial-mass 29.8802 --metallicity 0.01416 ---initial-mass 29.8921 --metallicity 0.01416 ---initial-mass 29.904 --metallicity 0.01416 ---initial-mass 29.9159 --metallicity 0.01416 ---initial-mass 29.9278 --metallicity 0.01416 ---initial-mass 29.9398 --metallicity 0.01416 ---initial-mass 29.9517 --metallicity 0.01416 ---initial-mass 29.9636 --metallicity 0.01416 ---initial-mass 29.9756 --metallicity 0.01416 ---initial-mass 29.9875 --metallicity 0.01416 ---initial-mass 29.9995 --metallicity 0.01416 ---initial-mass 30.0114 --metallicity 0.01416 ---initial-mass 30.0234 --metallicity 0.01416 ---initial-mass 30.0353 --metallicity 0.01416 ---initial-mass 30.0473 --metallicity 0.01416 ---initial-mass 30.0593 --metallicity 0.01416 ---initial-mass 30.0713 --metallicity 0.01416 ---initial-mass 30.0833 --metallicity 0.01416 ---initial-mass 30.0952 --metallicity 0.01416 ---initial-mass 30.1072 --metallicity 0.01416 ---initial-mass 30.1192 --metallicity 0.01416 ---initial-mass 30.1312 --metallicity 0.01416 ---initial-mass 30.1433 --metallicity 0.01416 ---initial-mass 30.1553 --metallicity 0.01416 ---initial-mass 30.1673 --metallicity 0.01416 ---initial-mass 30.1793 --metallicity 0.01416 ---initial-mass 30.1913 --metallicity 0.01416 ---initial-mass 30.2034 --metallicity 0.01416 ---initial-mass 30.2154 --metallicity 0.01416 ---initial-mass 30.2275 --metallicity 0.01416 ---initial-mass 30.2395 --metallicity 0.01416 ---initial-mass 30.2515 --metallicity 0.01416 ---initial-mass 30.2636 --metallicity 0.01416 ---initial-mass 30.2757 --metallicity 0.01416 ---initial-mass 30.2877 --metallicity 0.01416 ---initial-mass 30.2998 --metallicity 0.01416 ---initial-mass 30.3119 --metallicity 0.01416 ---initial-mass 30.324 --metallicity 0.01416 ---initial-mass 30.336 --metallicity 0.01416 ---initial-mass 30.3481 --metallicity 0.01416 ---initial-mass 30.3602 --metallicity 0.01416 ---initial-mass 30.3723 --metallicity 0.01416 ---initial-mass 30.3844 --metallicity 0.01416 ---initial-mass 30.3965 --metallicity 0.01416 ---initial-mass 30.4087 --metallicity 0.01416 ---initial-mass 30.4208 --metallicity 0.01416 ---initial-mass 30.4329 --metallicity 0.01416 ---initial-mass 30.445 --metallicity 0.01416 ---initial-mass 30.4572 --metallicity 0.01416 ---initial-mass 30.4693 --metallicity 0.01416 ---initial-mass 30.4815 --metallicity 0.01416 ---initial-mass 30.4936 --metallicity 0.01416 ---initial-mass 30.5058 --metallicity 0.01416 ---initial-mass 30.5179 --metallicity 0.01416 ---initial-mass 30.5301 --metallicity 0.01416 ---initial-mass 30.5422 --metallicity 0.01416 ---initial-mass 30.5544 --metallicity 0.01416 ---initial-mass 30.5666 --metallicity 0.01416 ---initial-mass 30.5788 --metallicity 0.01416 ---initial-mass 30.591 --metallicity 0.01416 ---initial-mass 30.6032 --metallicity 0.01416 ---initial-mass 30.6154 --metallicity 0.01416 ---initial-mass 30.6276 --metallicity 0.01416 ---initial-mass 30.6398 --metallicity 0.01416 ---initial-mass 30.652 --metallicity 0.01416 ---initial-mass 30.6642 --metallicity 0.01416 ---initial-mass 30.6764 --metallicity 0.01416 ---initial-mass 30.6886 --metallicity 0.01416 ---initial-mass 30.7009 --metallicity 0.01416 ---initial-mass 30.7131 --metallicity 0.01416 ---initial-mass 30.7253 --metallicity 0.01416 ---initial-mass 30.7376 --metallicity 0.01416 ---initial-mass 30.7498 --metallicity 0.01416 ---initial-mass 30.7621 --metallicity 0.01416 ---initial-mass 30.7744 --metallicity 0.01416 ---initial-mass 30.7866 --metallicity 0.01416 ---initial-mass 30.7989 --metallicity 0.01416 ---initial-mass 30.8112 --metallicity 0.01416 ---initial-mass 30.8234 --metallicity 0.01416 ---initial-mass 30.8357 --metallicity 0.01416 ---initial-mass 30.848 --metallicity 0.01416 ---initial-mass 30.8603 --metallicity 0.01416 ---initial-mass 30.8726 --metallicity 0.01416 ---initial-mass 30.8849 --metallicity 0.01416 ---initial-mass 30.8972 --metallicity 0.01416 ---initial-mass 30.9095 --metallicity 0.01416 ---initial-mass 30.9219 --metallicity 0.01416 ---initial-mass 30.9342 --metallicity 0.01416 ---initial-mass 30.9465 --metallicity 0.01416 ---initial-mass 30.9589 --metallicity 0.01416 ---initial-mass 30.9712 --metallicity 0.01416 ---initial-mass 30.9835 --metallicity 0.01416 ---initial-mass 30.9959 --metallicity 0.01416 ---initial-mass 31.0082 --metallicity 0.01416 ---initial-mass 31.0206 --metallicity 0.01416 ---initial-mass 31.033 --metallicity 0.01416 ---initial-mass 31.0453 --metallicity 0.01416 ---initial-mass 31.0577 --metallicity 0.01416 ---initial-mass 31.0701 --metallicity 0.01416 ---initial-mass 31.0825 --metallicity 0.01416 ---initial-mass 31.0948 --metallicity 0.01416 ---initial-mass 31.1072 --metallicity 0.01416 ---initial-mass 31.1196 --metallicity 0.01416 ---initial-mass 31.132 --metallicity 0.01416 ---initial-mass 31.1444 --metallicity 0.01416 ---initial-mass 31.1569 --metallicity 0.01416 ---initial-mass 31.1693 --metallicity 0.01416 ---initial-mass 31.1817 --metallicity 0.01416 ---initial-mass 31.1941 --metallicity 0.01416 ---initial-mass 31.2066 --metallicity 0.01416 ---initial-mass 31.219 --metallicity 0.01416 ---initial-mass 31.2314 --metallicity 0.01416 ---initial-mass 31.2439 --metallicity 0.01416 ---initial-mass 31.2563 --metallicity 0.01416 ---initial-mass 31.2688 --metallicity 0.01416 ---initial-mass 31.2813 --metallicity 0.01416 ---initial-mass 31.2937 --metallicity 0.01416 ---initial-mass 31.3062 --metallicity 0.01416 ---initial-mass 31.3187 --metallicity 0.01416 ---initial-mass 31.3312 --metallicity 0.01416 ---initial-mass 31.3436 --metallicity 0.01416 ---initial-mass 31.3561 --metallicity 0.01416 ---initial-mass 31.3686 --metallicity 0.01416 ---initial-mass 31.3811 --metallicity 0.01416 ---initial-mass 31.3936 --metallicity 0.01416 ---initial-mass 31.4062 --metallicity 0.01416 ---initial-mass 31.4187 --metallicity 0.01416 ---initial-mass 31.4312 --metallicity 0.01416 ---initial-mass 31.4437 --metallicity 0.01416 ---initial-mass 31.4563 --metallicity 0.01416 ---initial-mass 31.4688 --metallicity 0.01416 ---initial-mass 31.4813 --metallicity 0.01416 ---initial-mass 31.4939 --metallicity 0.01416 ---initial-mass 31.5064 --metallicity 0.01416 ---initial-mass 31.519 --metallicity 0.01416 ---initial-mass 31.5316 --metallicity 0.01416 ---initial-mass 31.5441 --metallicity 0.01416 ---initial-mass 31.5567 --metallicity 0.01416 ---initial-mass 31.5693 --metallicity 0.01416 ---initial-mass 31.5819 --metallicity 0.01416 ---initial-mass 31.5944 --metallicity 0.01416 ---initial-mass 31.607 --metallicity 0.01416 ---initial-mass 31.6196 --metallicity 0.01416 ---initial-mass 31.6322 --metallicity 0.01416 ---initial-mass 31.6448 --metallicity 0.01416 ---initial-mass 31.6574 --metallicity 0.01416 ---initial-mass 31.6701 --metallicity 0.01416 ---initial-mass 31.6827 --metallicity 0.01416 ---initial-mass 31.6953 --metallicity 0.01416 ---initial-mass 31.7079 --metallicity 0.01416 ---initial-mass 31.7206 --metallicity 0.01416 ---initial-mass 31.7332 --metallicity 0.01416 ---initial-mass 31.7459 --metallicity 0.01416 ---initial-mass 31.7585 --metallicity 0.01416 ---initial-mass 31.7712 --metallicity 0.01416 ---initial-mass 31.7838 --metallicity 0.01416 ---initial-mass 31.7965 --metallicity 0.01416 ---initial-mass 31.8092 --metallicity 0.01416 ---initial-mass 31.8219 --metallicity 0.01416 ---initial-mass 31.8345 --metallicity 0.01416 ---initial-mass 31.8472 --metallicity 0.01416 ---initial-mass 31.8599 --metallicity 0.01416 ---initial-mass 31.8726 --metallicity 0.01416 ---initial-mass 31.8853 --metallicity 0.01416 ---initial-mass 31.898 --metallicity 0.01416 ---initial-mass 31.9107 --metallicity 0.01416 ---initial-mass 31.9235 --metallicity 0.01416 ---initial-mass 31.9362 --metallicity 0.01416 ---initial-mass 31.9489 --metallicity 0.01416 ---initial-mass 31.9617 --metallicity 0.01416 ---initial-mass 31.9744 --metallicity 0.01416 ---initial-mass 31.9871 --metallicity 0.01416 ---initial-mass 31.9999 --metallicity 0.01416 ---initial-mass 32.0126 --metallicity 0.01416 ---initial-mass 32.0254 --metallicity 0.01416 ---initial-mass 32.0382 --metallicity 0.01416 ---initial-mass 32.0509 --metallicity 0.01416 ---initial-mass 32.0637 --metallicity 0.01416 ---initial-mass 32.0765 --metallicity 0.01416 ---initial-mass 32.0893 --metallicity 0.01416 ---initial-mass 32.1021 --metallicity 0.01416 ---initial-mass 32.1148 --metallicity 0.01416 ---initial-mass 32.1276 --metallicity 0.01416 ---initial-mass 32.1405 --metallicity 0.01416 ---initial-mass 32.1533 --metallicity 0.01416 ---initial-mass 32.1661 --metallicity 0.01416 ---initial-mass 32.1789 --metallicity 0.01416 ---initial-mass 32.1917 --metallicity 0.01416 ---initial-mass 32.2046 --metallicity 0.01416 ---initial-mass 32.2174 --metallicity 0.01416 ---initial-mass 32.2302 --metallicity 0.01416 ---initial-mass 32.2431 --metallicity 0.01416 ---initial-mass 32.2559 --metallicity 0.01416 ---initial-mass 32.2688 --metallicity 0.01416 ---initial-mass 32.2816 --metallicity 0.01416 ---initial-mass 32.2945 --metallicity 0.01416 ---initial-mass 32.3074 --metallicity 0.01416 ---initial-mass 32.3203 --metallicity 0.01416 ---initial-mass 32.3331 --metallicity 0.01416 ---initial-mass 32.346 --metallicity 0.01416 ---initial-mass 32.3589 --metallicity 0.01416 ---initial-mass 32.3718 --metallicity 0.01416 ---initial-mass 32.3847 --metallicity 0.01416 ---initial-mass 32.3976 --metallicity 0.01416 ---initial-mass 32.4105 --metallicity 0.01416 ---initial-mass 32.4234 --metallicity 0.01416 ---initial-mass 32.4364 --metallicity 0.01416 ---initial-mass 32.4493 --metallicity 0.01416 ---initial-mass 32.4622 --metallicity 0.01416 ---initial-mass 32.4752 --metallicity 0.01416 ---initial-mass 32.4881 --metallicity 0.01416 ---initial-mass 32.5011 --metallicity 0.01416 ---initial-mass 32.514 --metallicity 0.01416 ---initial-mass 32.527 --metallicity 0.01416 ---initial-mass 32.5399 --metallicity 0.01416 ---initial-mass 32.5529 --metallicity 0.01416 ---initial-mass 32.5659 --metallicity 0.01416 ---initial-mass 32.5789 --metallicity 0.01416 ---initial-mass 32.5918 --metallicity 0.01416 ---initial-mass 32.6048 --metallicity 0.01416 ---initial-mass 32.6178 --metallicity 0.01416 ---initial-mass 32.6308 --metallicity 0.01416 ---initial-mass 32.6438 --metallicity 0.01416 ---initial-mass 32.6568 --metallicity 0.01416 ---initial-mass 32.6699 --metallicity 0.01416 ---initial-mass 32.6829 --metallicity 0.01416 ---initial-mass 32.6959 --metallicity 0.01416 ---initial-mass 32.7089 --metallicity 0.01416 ---initial-mass 32.722 --metallicity 0.01416 ---initial-mass 32.735 --metallicity 0.01416 ---initial-mass 32.7481 --metallicity 0.01416 ---initial-mass 32.7611 --metallicity 0.01416 ---initial-mass 32.7742 --metallicity 0.01416 ---initial-mass 32.7872 --metallicity 0.01416 ---initial-mass 32.8003 --metallicity 0.01416 ---initial-mass 32.8134 --metallicity 0.01416 ---initial-mass 32.8264 --metallicity 0.01416 ---initial-mass 32.8395 --metallicity 0.01416 ---initial-mass 32.8526 --metallicity 0.01416 ---initial-mass 32.8657 --metallicity 0.01416 ---initial-mass 32.8788 --metallicity 0.01416 ---initial-mass 32.8919 --metallicity 0.01416 ---initial-mass 32.905 --metallicity 0.01416 ---initial-mass 32.9181 --metallicity 0.01416 ---initial-mass 32.9313 --metallicity 0.01416 ---initial-mass 32.9444 --metallicity 0.01416 ---initial-mass 32.9575 --metallicity 0.01416 ---initial-mass 32.9707 --metallicity 0.01416 ---initial-mass 32.9838 --metallicity 0.01416 ---initial-mass 32.9969 --metallicity 0.01416 ---initial-mass 33.0101 --metallicity 0.01416 ---initial-mass 33.0232 --metallicity 0.01416 ---initial-mass 33.0364 --metallicity 0.01416 ---initial-mass 33.0496 --metallicity 0.01416 ---initial-mass 33.0627 --metallicity 0.01416 ---initial-mass 33.0759 --metallicity 0.01416 ---initial-mass 33.0891 --metallicity 0.01416 ---initial-mass 33.1023 --metallicity 0.01416 ---initial-mass 33.1155 --metallicity 0.01416 ---initial-mass 33.1287 --metallicity 0.01416 ---initial-mass 33.1419 --metallicity 0.01416 ---initial-mass 33.1551 --metallicity 0.01416 ---initial-mass 33.1683 --metallicity 0.01416 ---initial-mass 33.1815 --metallicity 0.01416 ---initial-mass 33.1948 --metallicity 0.01416 ---initial-mass 33.208 --metallicity 0.01416 ---initial-mass 33.2212 --metallicity 0.01416 ---initial-mass 33.2345 --metallicity 0.01416 ---initial-mass 33.2477 --metallicity 0.01416 ---initial-mass 33.261 --metallicity 0.01416 ---initial-mass 33.2742 --metallicity 0.01416 ---initial-mass 33.2875 --metallicity 0.01416 ---initial-mass 33.3007 --metallicity 0.01416 ---initial-mass 33.314 --metallicity 0.01416 ---initial-mass 33.3273 --metallicity 0.01416 ---initial-mass 33.3406 --metallicity 0.01416 ---initial-mass 33.3539 --metallicity 0.01416 ---initial-mass 33.3672 --metallicity 0.01416 ---initial-mass 33.3805 --metallicity 0.01416 ---initial-mass 33.3938 --metallicity 0.01416 ---initial-mass 33.4071 --metallicity 0.01416 ---initial-mass 33.4204 --metallicity 0.01416 ---initial-mass 33.4337 --metallicity 0.01416 ---initial-mass 33.447 --metallicity 0.01416 ---initial-mass 33.4604 --metallicity 0.01416 ---initial-mass 33.4737 --metallicity 0.01416 ---initial-mass 33.487 --metallicity 0.01416 ---initial-mass 33.5004 --metallicity 0.01416 ---initial-mass 33.5137 --metallicity 0.01416 ---initial-mass 33.5271 --metallicity 0.01416 ---initial-mass 33.5404 --metallicity 0.01416 ---initial-mass 33.5538 --metallicity 0.01416 ---initial-mass 33.5672 --metallicity 0.01416 ---initial-mass 33.5806 --metallicity 0.01416 ---initial-mass 33.594 --metallicity 0.01416 ---initial-mass 33.6073 --metallicity 0.01416 ---initial-mass 33.6207 --metallicity 0.01416 ---initial-mass 33.6341 --metallicity 0.01416 ---initial-mass 33.6475 --metallicity 0.01416 ---initial-mass 33.661 --metallicity 0.01416 ---initial-mass 33.6744 --metallicity 0.01416 ---initial-mass 33.6878 --metallicity 0.01416 ---initial-mass 33.7012 --metallicity 0.01416 ---initial-mass 33.7146 --metallicity 0.01416 ---initial-mass 33.7281 --metallicity 0.01416 ---initial-mass 33.7415 --metallicity 0.01416 ---initial-mass 33.755 --metallicity 0.01416 ---initial-mass 33.7684 --metallicity 0.01416 ---initial-mass 33.7819 --metallicity 0.01416 ---initial-mass 33.7953 --metallicity 0.01416 ---initial-mass 33.8088 --metallicity 0.01416 ---initial-mass 33.8223 --metallicity 0.01416 ---initial-mass 33.8358 --metallicity 0.01416 ---initial-mass 33.8493 --metallicity 0.01416 ---initial-mass 33.8627 --metallicity 0.01416 ---initial-mass 33.8762 --metallicity 0.01416 ---initial-mass 33.8897 --metallicity 0.01416 ---initial-mass 33.9033 --metallicity 0.01416 ---initial-mass 33.9168 --metallicity 0.01416 ---initial-mass 33.9303 --metallicity 0.01416 ---initial-mass 33.9438 --metallicity 0.01416 ---initial-mass 33.9573 --metallicity 0.01416 ---initial-mass 33.9709 --metallicity 0.01416 ---initial-mass 33.9844 --metallicity 0.01416 ---initial-mass 33.998 --metallicity 0.01416 ---initial-mass 34.0115 --metallicity 0.01416 ---initial-mass 34.0251 --metallicity 0.01416 ---initial-mass 34.0386 --metallicity 0.01416 ---initial-mass 34.0522 --metallicity 0.01416 ---initial-mass 34.0658 --metallicity 0.01416 ---initial-mass 34.0793 --metallicity 0.01416 ---initial-mass 34.0929 --metallicity 0.01416 ---initial-mass 34.1065 --metallicity 0.01416 ---initial-mass 34.1201 --metallicity 0.01416 ---initial-mass 34.1337 --metallicity 0.01416 ---initial-mass 34.1473 --metallicity 0.01416 ---initial-mass 34.1609 --metallicity 0.01416 ---initial-mass 34.1745 --metallicity 0.01416 ---initial-mass 34.1881 --metallicity 0.01416 ---initial-mass 34.2018 --metallicity 0.01416 ---initial-mass 34.2154 --metallicity 0.01416 ---initial-mass 34.229 --metallicity 0.01416 ---initial-mass 34.2427 --metallicity 0.01416 ---initial-mass 34.2563 --metallicity 0.01416 ---initial-mass 34.27 --metallicity 0.01416 ---initial-mass 34.2836 --metallicity 0.01416 ---initial-mass 34.2973 --metallicity 0.01416 ---initial-mass 34.311 --metallicity 0.01416 ---initial-mass 34.3246 --metallicity 0.01416 ---initial-mass 34.3383 --metallicity 0.01416 ---initial-mass 34.352 --metallicity 0.01416 ---initial-mass 34.3657 --metallicity 0.01416 ---initial-mass 34.3794 --metallicity 0.01416 ---initial-mass 34.3931 --metallicity 0.01416 ---initial-mass 34.4068 --metallicity 0.01416 ---initial-mass 34.4205 --metallicity 0.01416 ---initial-mass 34.4342 --metallicity 0.01416 ---initial-mass 34.448 --metallicity 0.01416 ---initial-mass 34.4617 --metallicity 0.01416 ---initial-mass 34.4754 --metallicity 0.01416 ---initial-mass 34.4892 --metallicity 0.01416 ---initial-mass 34.5029 --metallicity 0.01416 ---initial-mass 34.5167 --metallicity 0.01416 ---initial-mass 34.5304 --metallicity 0.01416 ---initial-mass 34.5442 --metallicity 0.01416 ---initial-mass 34.558 --metallicity 0.01416 ---initial-mass 34.5717 --metallicity 0.01416 ---initial-mass 34.5855 --metallicity 0.01416 ---initial-mass 34.5993 --metallicity 0.01416 ---initial-mass 34.6131 --metallicity 0.01416 ---initial-mass 34.6269 --metallicity 0.01416 ---initial-mass 34.6407 --metallicity 0.01416 ---initial-mass 34.6545 --metallicity 0.01416 ---initial-mass 34.6683 --metallicity 0.01416 ---initial-mass 34.6821 --metallicity 0.01416 ---initial-mass 34.6959 --metallicity 0.01416 ---initial-mass 34.7098 --metallicity 0.01416 ---initial-mass 34.7236 --metallicity 0.01416 ---initial-mass 34.7374 --metallicity 0.01416 ---initial-mass 34.7513 --metallicity 0.01416 ---initial-mass 34.7651 --metallicity 0.01416 ---initial-mass 34.779 --metallicity 0.01416 ---initial-mass 34.7928 --metallicity 0.01416 ---initial-mass 34.8067 --metallicity 0.01416 ---initial-mass 34.8206 --metallicity 0.01416 ---initial-mass 34.8345 --metallicity 0.01416 ---initial-mass 34.8483 --metallicity 0.01416 ---initial-mass 34.8622 --metallicity 0.01416 ---initial-mass 34.8761 --metallicity 0.01416 ---initial-mass 34.89 --metallicity 0.01416 ---initial-mass 34.9039 --metallicity 0.01416 ---initial-mass 34.9178 --metallicity 0.01416 ---initial-mass 34.9318 --metallicity 0.01416 ---initial-mass 34.9457 --metallicity 0.01416 ---initial-mass 34.9596 --metallicity 0.01416 ---initial-mass 34.9735 --metallicity 0.01416 ---initial-mass 34.9875 --metallicity 0.01416 ---initial-mass 35.0014 --metallicity 0.01416 ---initial-mass 35.0154 --metallicity 0.01416 ---initial-mass 35.0293 --metallicity 0.01416 ---initial-mass 35.0433 --metallicity 0.01416 ---initial-mass 35.0573 --metallicity 0.01416 ---initial-mass 35.0712 --metallicity 0.01416 ---initial-mass 35.0852 --metallicity 0.01416 ---initial-mass 35.0992 --metallicity 0.01416 ---initial-mass 35.1132 --metallicity 0.01416 ---initial-mass 35.1272 --metallicity 0.01416 ---initial-mass 35.1412 --metallicity 0.01416 ---initial-mass 35.1552 --metallicity 0.01416 ---initial-mass 35.1692 --metallicity 0.01416 ---initial-mass 35.1832 --metallicity 0.01416 ---initial-mass 35.1972 --metallicity 0.01416 ---initial-mass 35.2113 --metallicity 0.01416 ---initial-mass 35.2253 --metallicity 0.01416 ---initial-mass 35.2393 --metallicity 0.01416 ---initial-mass 35.2534 --metallicity 0.01416 ---initial-mass 35.2674 --metallicity 0.01416 ---initial-mass 35.2815 --metallicity 0.01416 ---initial-mass 35.2955 --metallicity 0.01416 ---initial-mass 35.3096 --metallicity 0.01416 ---initial-mass 35.3237 --metallicity 0.01416 ---initial-mass 35.3378 --metallicity 0.01416 ---initial-mass 35.3518 --metallicity 0.01416 ---initial-mass 35.3659 --metallicity 0.01416 ---initial-mass 35.38 --metallicity 0.01416 ---initial-mass 35.3941 --metallicity 0.01416 ---initial-mass 35.4082 --metallicity 0.01416 ---initial-mass 35.4224 --metallicity 0.01416 ---initial-mass 35.4365 --metallicity 0.01416 ---initial-mass 35.4506 --metallicity 0.01416 ---initial-mass 35.4647 --metallicity 0.01416 ---initial-mass 35.4789 --metallicity 0.01416 ---initial-mass 35.493 --metallicity 0.01416 ---initial-mass 35.5071 --metallicity 0.01416 ---initial-mass 35.5213 --metallicity 0.01416 ---initial-mass 35.5355 --metallicity 0.01416 ---initial-mass 35.5496 --metallicity 0.01416 ---initial-mass 35.5638 --metallicity 0.01416 ---initial-mass 35.578 --metallicity 0.01416 ---initial-mass 35.5921 --metallicity 0.01416 ---initial-mass 35.6063 --metallicity 0.01416 ---initial-mass 35.6205 --metallicity 0.01416 ---initial-mass 35.6347 --metallicity 0.01416 ---initial-mass 35.6489 --metallicity 0.01416 ---initial-mass 35.6631 --metallicity 0.01416 ---initial-mass 35.6773 --metallicity 0.01416 ---initial-mass 35.6916 --metallicity 0.01416 ---initial-mass 35.7058 --metallicity 0.01416 ---initial-mass 35.72 --metallicity 0.01416 ---initial-mass 35.7342 --metallicity 0.01416 ---initial-mass 35.7485 --metallicity 0.01416 ---initial-mass 35.7627 --metallicity 0.01416 ---initial-mass 35.777 --metallicity 0.01416 ---initial-mass 35.7912 --metallicity 0.01416 ---initial-mass 35.8055 --metallicity 0.01416 ---initial-mass 35.8198 --metallicity 0.01416 ---initial-mass 35.8341 --metallicity 0.01416 ---initial-mass 35.8483 --metallicity 0.01416 ---initial-mass 35.8626 --metallicity 0.01416 ---initial-mass 35.8769 --metallicity 0.01416 ---initial-mass 35.8912 --metallicity 0.01416 ---initial-mass 35.9055 --metallicity 0.01416 ---initial-mass 35.9198 --metallicity 0.01416 ---initial-mass 35.9342 --metallicity 0.01416 ---initial-mass 35.9485 --metallicity 0.01416 ---initial-mass 35.9628 --metallicity 0.01416 ---initial-mass 35.9771 --metallicity 0.01416 ---initial-mass 35.9915 --metallicity 0.01416 ---initial-mass 36.0058 --metallicity 0.01416 ---initial-mass 36.0202 --metallicity 0.01416 ---initial-mass 36.0345 --metallicity 0.01416 ---initial-mass 36.0489 --metallicity 0.01416 ---initial-mass 36.0633 --metallicity 0.01416 ---initial-mass 36.0776 --metallicity 0.01416 ---initial-mass 36.092 --metallicity 0.01416 ---initial-mass 36.1064 --metallicity 0.01416 ---initial-mass 36.1208 --metallicity 0.01416 ---initial-mass 36.1352 --metallicity 0.01416 ---initial-mass 36.1496 --metallicity 0.01416 ---initial-mass 36.164 --metallicity 0.01416 ---initial-mass 36.1784 --metallicity 0.01416 ---initial-mass 36.1928 --metallicity 0.01416 ---initial-mass 36.2072 --metallicity 0.01416 ---initial-mass 36.2217 --metallicity 0.01416 ---initial-mass 36.2361 --metallicity 0.01416 ---initial-mass 36.2506 --metallicity 0.01416 ---initial-mass 36.265 --metallicity 0.01416 ---initial-mass 36.2795 --metallicity 0.01416 ---initial-mass 36.2939 --metallicity 0.01416 ---initial-mass 36.3084 --metallicity 0.01416 ---initial-mass 36.3228 --metallicity 0.01416 ---initial-mass 36.3373 --metallicity 0.01416 ---initial-mass 36.3518 --metallicity 0.01416 ---initial-mass 36.3663 --metallicity 0.01416 ---initial-mass 36.3808 --metallicity 0.01416 ---initial-mass 36.3953 --metallicity 0.01416 ---initial-mass 36.4098 --metallicity 0.01416 ---initial-mass 36.4243 --metallicity 0.01416 ---initial-mass 36.4388 --metallicity 0.01416 ---initial-mass 36.4533 --metallicity 0.01416 ---initial-mass 36.4679 --metallicity 0.01416 ---initial-mass 36.4824 --metallicity 0.01416 ---initial-mass 36.4969 --metallicity 0.01416 ---initial-mass 36.5115 --metallicity 0.01416 ---initial-mass 36.526 --metallicity 0.01416 ---initial-mass 36.5406 --metallicity 0.01416 ---initial-mass 36.5552 --metallicity 0.01416 ---initial-mass 36.5697 --metallicity 0.01416 ---initial-mass 36.5843 --metallicity 0.01416 ---initial-mass 36.5989 --metallicity 0.01416 ---initial-mass 36.6135 --metallicity 0.01416 ---initial-mass 36.6281 --metallicity 0.01416 ---initial-mass 36.6427 --metallicity 0.01416 ---initial-mass 36.6573 --metallicity 0.01416 ---initial-mass 36.6719 --metallicity 0.01416 ---initial-mass 36.6865 --metallicity 0.01416 ---initial-mass 36.7011 --metallicity 0.01416 ---initial-mass 36.7157 --metallicity 0.01416 ---initial-mass 36.7304 --metallicity 0.01416 ---initial-mass 36.745 --metallicity 0.01416 ---initial-mass 36.7597 --metallicity 0.01416 ---initial-mass 36.7743 --metallicity 0.01416 ---initial-mass 36.789 --metallicity 0.01416 ---initial-mass 36.8036 --metallicity 0.01416 ---initial-mass 36.8183 --metallicity 0.01416 ---initial-mass 36.833 --metallicity 0.01416 ---initial-mass 36.8477 --metallicity 0.01416 ---initial-mass 36.8623 --metallicity 0.01416 ---initial-mass 36.877 --metallicity 0.01416 ---initial-mass 36.8917 --metallicity 0.01416 ---initial-mass 36.9064 --metallicity 0.01416 ---initial-mass 36.9211 --metallicity 0.01416 ---initial-mass 36.9359 --metallicity 0.01416 ---initial-mass 36.9506 --metallicity 0.01416 ---initial-mass 36.9653 --metallicity 0.01416 ---initial-mass 36.98 --metallicity 0.01416 ---initial-mass 36.9948 --metallicity 0.01416 ---initial-mass 37.0095 --metallicity 0.01416 ---initial-mass 37.0243 --metallicity 0.01416 ---initial-mass 37.039 --metallicity 0.01416 ---initial-mass 37.0538 --metallicity 0.01416 ---initial-mass 37.0686 --metallicity 0.01416 ---initial-mass 37.0833 --metallicity 0.01416 ---initial-mass 37.0981 --metallicity 0.01416 ---initial-mass 37.1129 --metallicity 0.01416 ---initial-mass 37.1277 --metallicity 0.01416 ---initial-mass 37.1425 --metallicity 0.01416 ---initial-mass 37.1573 --metallicity 0.01416 ---initial-mass 37.1721 --metallicity 0.01416 ---initial-mass 37.1869 --metallicity 0.01416 ---initial-mass 37.2017 --metallicity 0.01416 ---initial-mass 37.2166 --metallicity 0.01416 ---initial-mass 37.2314 --metallicity 0.01416 ---initial-mass 37.2462 --metallicity 0.01416 ---initial-mass 37.2611 --metallicity 0.01416 ---initial-mass 37.2759 --metallicity 0.01416 ---initial-mass 37.2908 --metallicity 0.01416 ---initial-mass 37.3056 --metallicity 0.01416 ---initial-mass 37.3205 --metallicity 0.01416 ---initial-mass 37.3354 --metallicity 0.01416 ---initial-mass 37.3503 --metallicity 0.01416 ---initial-mass 37.3652 --metallicity 0.01416 ---initial-mass 37.38 --metallicity 0.01416 ---initial-mass 37.3949 --metallicity 0.01416 ---initial-mass 37.4098 --metallicity 0.01416 ---initial-mass 37.4248 --metallicity 0.01416 ---initial-mass 37.4397 --metallicity 0.01416 ---initial-mass 37.4546 --metallicity 0.01416 ---initial-mass 37.4695 --metallicity 0.01416 ---initial-mass 37.4845 --metallicity 0.01416 ---initial-mass 37.4994 --metallicity 0.01416 ---initial-mass 37.5143 --metallicity 0.01416 ---initial-mass 37.5293 --metallicity 0.01416 ---initial-mass 37.5443 --metallicity 0.01416 ---initial-mass 37.5592 --metallicity 0.01416 ---initial-mass 37.5742 --metallicity 0.01416 ---initial-mass 37.5892 --metallicity 0.01416 ---initial-mass 37.6041 --metallicity 0.01416 ---initial-mass 37.6191 --metallicity 0.01416 ---initial-mass 37.6341 --metallicity 0.01416 ---initial-mass 37.6491 --metallicity 0.01416 ---initial-mass 37.6641 --metallicity 0.01416 ---initial-mass 37.6791 --metallicity 0.01416 ---initial-mass 37.6942 --metallicity 0.01416 ---initial-mass 37.7092 --metallicity 0.01416 ---initial-mass 37.7242 --metallicity 0.01416 ---initial-mass 37.7392 --metallicity 0.01416 ---initial-mass 37.7543 --metallicity 0.01416 ---initial-mass 37.7693 --metallicity 0.01416 ---initial-mass 37.7844 --metallicity 0.01416 ---initial-mass 37.7994 --metallicity 0.01416 ---initial-mass 37.8145 --metallicity 0.01416 ---initial-mass 37.8296 --metallicity 0.01416 ---initial-mass 37.8447 --metallicity 0.01416 ---initial-mass 37.8597 --metallicity 0.01416 ---initial-mass 37.8748 --metallicity 0.01416 ---initial-mass 37.8899 --metallicity 0.01416 ---initial-mass 37.905 --metallicity 0.01416 ---initial-mass 37.9201 --metallicity 0.01416 ---initial-mass 37.9352 --metallicity 0.01416 ---initial-mass 37.9504 --metallicity 0.01416 ---initial-mass 37.9655 --metallicity 0.01416 ---initial-mass 37.9806 --metallicity 0.01416 ---initial-mass 37.9958 --metallicity 0.01416 ---initial-mass 38.0109 --metallicity 0.01416 ---initial-mass 38.026 --metallicity 0.01416 ---initial-mass 38.0412 --metallicity 0.01416 ---initial-mass 38.0564 --metallicity 0.01416 ---initial-mass 38.0715 --metallicity 0.01416 ---initial-mass 38.0867 --metallicity 0.01416 ---initial-mass 38.1019 --metallicity 0.01416 ---initial-mass 38.1171 --metallicity 0.01416 ---initial-mass 38.1323 --metallicity 0.01416 ---initial-mass 38.1475 --metallicity 0.01416 ---initial-mass 38.1627 --metallicity 0.01416 ---initial-mass 38.1779 --metallicity 0.01416 ---initial-mass 38.1931 --metallicity 0.01416 ---initial-mass 38.2083 --metallicity 0.01416 ---initial-mass 38.2235 --metallicity 0.01416 ---initial-mass 38.2388 --metallicity 0.01416 ---initial-mass 38.254 --metallicity 0.01416 ---initial-mass 38.2693 --metallicity 0.01416 ---initial-mass 38.2845 --metallicity 0.01416 ---initial-mass 38.2998 --metallicity 0.01416 ---initial-mass 38.315 --metallicity 0.01416 ---initial-mass 38.3303 --metallicity 0.01416 ---initial-mass 38.3456 --metallicity 0.01416 ---initial-mass 38.3609 --metallicity 0.01416 ---initial-mass 38.3762 --metallicity 0.01416 ---initial-mass 38.3915 --metallicity 0.01416 ---initial-mass 38.4068 --metallicity 0.01416 ---initial-mass 38.4221 --metallicity 0.01416 ---initial-mass 38.4374 --metallicity 0.01416 ---initial-mass 38.4527 --metallicity 0.01416 ---initial-mass 38.468 --metallicity 0.01416 ---initial-mass 38.4833 --metallicity 0.01416 ---initial-mass 38.4987 --metallicity 0.01416 ---initial-mass 38.514 --metallicity 0.01416 ---initial-mass 38.5294 --metallicity 0.01416 ---initial-mass 38.5447 --metallicity 0.01416 ---initial-mass 38.5601 --metallicity 0.01416 ---initial-mass 38.5755 --metallicity 0.01416 ---initial-mass 38.5908 --metallicity 0.01416 ---initial-mass 38.6062 --metallicity 0.01416 ---initial-mass 38.6216 --metallicity 0.01416 ---initial-mass 38.637 --metallicity 0.01416 ---initial-mass 38.6524 --metallicity 0.01416 ---initial-mass 38.6678 --metallicity 0.01416 ---initial-mass 38.6832 --metallicity 0.01416 ---initial-mass 38.6986 --metallicity 0.01416 ---initial-mass 38.7141 --metallicity 0.01416 ---initial-mass 38.7295 --metallicity 0.01416 ---initial-mass 38.7449 --metallicity 0.01416 ---initial-mass 38.7604 --metallicity 0.01416 ---initial-mass 38.7758 --metallicity 0.01416 ---initial-mass 38.7913 --metallicity 0.01416 ---initial-mass 38.8067 --metallicity 0.01416 ---initial-mass 38.8222 --metallicity 0.01416 ---initial-mass 38.8377 --metallicity 0.01416 ---initial-mass 38.8531 --metallicity 0.01416 ---initial-mass 38.8686 --metallicity 0.01416 ---initial-mass 38.8841 --metallicity 0.01416 ---initial-mass 38.8996 --metallicity 0.01416 ---initial-mass 38.9151 --metallicity 0.01416 ---initial-mass 38.9306 --metallicity 0.01416 ---initial-mass 38.9461 --metallicity 0.01416 ---initial-mass 38.9617 --metallicity 0.01416 ---initial-mass 38.9772 --metallicity 0.01416 ---initial-mass 38.9927 --metallicity 0.01416 ---initial-mass 39.0083 --metallicity 0.01416 ---initial-mass 39.0238 --metallicity 0.01416 ---initial-mass 39.0394 --metallicity 0.01416 ---initial-mass 39.0549 --metallicity 0.01416 ---initial-mass 39.0705 --metallicity 0.01416 ---initial-mass 39.0861 --metallicity 0.01416 ---initial-mass 39.1016 --metallicity 0.01416 ---initial-mass 39.1172 --metallicity 0.01416 ---initial-mass 39.1328 --metallicity 0.01416 ---initial-mass 39.1484 --metallicity 0.01416 ---initial-mass 39.164 --metallicity 0.01416 ---initial-mass 39.1796 --metallicity 0.01416 ---initial-mass 39.1952 --metallicity 0.01416 ---initial-mass 39.2109 --metallicity 0.01416 ---initial-mass 39.2265 --metallicity 0.01416 ---initial-mass 39.2421 --metallicity 0.01416 ---initial-mass 39.2578 --metallicity 0.01416 ---initial-mass 39.2734 --metallicity 0.01416 ---initial-mass 39.2891 --metallicity 0.01416 ---initial-mass 39.3047 --metallicity 0.01416 ---initial-mass 39.3204 --metallicity 0.01416 ---initial-mass 39.3361 --metallicity 0.01416 ---initial-mass 39.3517 --metallicity 0.01416 ---initial-mass 39.3674 --metallicity 0.01416 ---initial-mass 39.3831 --metallicity 0.01416 ---initial-mass 39.3988 --metallicity 0.01416 ---initial-mass 39.4145 --metallicity 0.01416 ---initial-mass 39.4302 --metallicity 0.01416 ---initial-mass 39.4459 --metallicity 0.01416 ---initial-mass 39.4617 --metallicity 0.01416 ---initial-mass 39.4774 --metallicity 0.01416 ---initial-mass 39.4931 --metallicity 0.01416 ---initial-mass 39.5089 --metallicity 0.01416 ---initial-mass 39.5246 --metallicity 0.01416 ---initial-mass 39.5404 --metallicity 0.01416 ---initial-mass 39.5561 --metallicity 0.01416 ---initial-mass 39.5719 --metallicity 0.01416 ---initial-mass 39.5877 --metallicity 0.01416 ---initial-mass 39.6034 --metallicity 0.01416 ---initial-mass 39.6192 --metallicity 0.01416 ---initial-mass 39.635 --metallicity 0.01416 ---initial-mass 39.6508 --metallicity 0.01416 ---initial-mass 39.6666 --metallicity 0.01416 ---initial-mass 39.6824 --metallicity 0.01416 ---initial-mass 39.6982 --metallicity 0.01416 ---initial-mass 39.7141 --metallicity 0.01416 ---initial-mass 39.7299 --metallicity 0.01416 ---initial-mass 39.7457 --metallicity 0.01416 ---initial-mass 39.7616 --metallicity 0.01416 ---initial-mass 39.7774 --metallicity 0.01416 ---initial-mass 39.7933 --metallicity 0.01416 ---initial-mass 39.8091 --metallicity 0.01416 ---initial-mass 39.825 --metallicity 0.01416 ---initial-mass 39.8409 --metallicity 0.01416 ---initial-mass 39.8567 --metallicity 0.01416 ---initial-mass 39.8726 --metallicity 0.01416 ---initial-mass 39.8885 --metallicity 0.01416 ---initial-mass 39.9044 --metallicity 0.01416 ---initial-mass 39.9203 --metallicity 0.01416 ---initial-mass 39.9362 --metallicity 0.01416 ---initial-mass 39.9521 --metallicity 0.01416 ---initial-mass 39.9681 --metallicity 0.01416 ---initial-mass 39.984 --metallicity 0.01416 ---initial-mass 39.9999 --metallicity 0.01416 ---initial-mass 40.0159 --metallicity 0.01416 ---initial-mass 40.0318 --metallicity 0.01416 ---initial-mass 40.0478 --metallicity 0.01416 ---initial-mass 40.0637 --metallicity 0.01416 ---initial-mass 40.0797 --metallicity 0.01416 ---initial-mass 40.0957 --metallicity 0.01416 ---initial-mass 40.1117 --metallicity 0.01416 ---initial-mass 40.1276 --metallicity 0.01416 ---initial-mass 40.1436 --metallicity 0.01416 ---initial-mass 40.1596 --metallicity 0.01416 ---initial-mass 40.1756 --metallicity 0.01416 ---initial-mass 40.1917 --metallicity 0.01416 ---initial-mass 40.2077 --metallicity 0.01416 ---initial-mass 40.2237 --metallicity 0.01416 ---initial-mass 40.2397 --metallicity 0.01416 ---initial-mass 40.2558 --metallicity 0.01416 ---initial-mass 40.2718 --metallicity 0.01416 ---initial-mass 40.2879 --metallicity 0.01416 ---initial-mass 40.3039 --metallicity 0.01416 ---initial-mass 40.32 --metallicity 0.01416 ---initial-mass 40.336 --metallicity 0.01416 ---initial-mass 40.3521 --metallicity 0.01416 ---initial-mass 40.3682 --metallicity 0.01416 ---initial-mass 40.3843 --metallicity 0.01416 ---initial-mass 40.4004 --metallicity 0.01416 ---initial-mass 40.4165 --metallicity 0.01416 ---initial-mass 40.4326 --metallicity 0.01416 ---initial-mass 40.4487 --metallicity 0.01416 ---initial-mass 40.4648 --metallicity 0.01416 ---initial-mass 40.481 --metallicity 0.01416 ---initial-mass 40.4971 --metallicity 0.01416 ---initial-mass 40.5132 --metallicity 0.01416 ---initial-mass 40.5294 --metallicity 0.01416 ---initial-mass 40.5455 --metallicity 0.01416 ---initial-mass 40.5617 --metallicity 0.01416 ---initial-mass 40.5779 --metallicity 0.01416 ---initial-mass 40.594 --metallicity 0.01416 ---initial-mass 40.6102 --metallicity 0.01416 ---initial-mass 40.6264 --metallicity 0.01416 ---initial-mass 40.6426 --metallicity 0.01416 ---initial-mass 40.6588 --metallicity 0.01416 ---initial-mass 40.675 --metallicity 0.01416 ---initial-mass 40.6912 --metallicity 0.01416 ---initial-mass 40.7074 --metallicity 0.01416 ---initial-mass 40.7236 --metallicity 0.01416 ---initial-mass 40.7399 --metallicity 0.01416 ---initial-mass 40.7561 --metallicity 0.01416 ---initial-mass 40.7724 --metallicity 0.01416 ---initial-mass 40.7886 --metallicity 0.01416 ---initial-mass 40.8049 --metallicity 0.01416 ---initial-mass 40.8211 --metallicity 0.01416 ---initial-mass 40.8374 --metallicity 0.01416 ---initial-mass 40.8537 --metallicity 0.01416 ---initial-mass 40.87 --metallicity 0.01416 ---initial-mass 40.8862 --metallicity 0.01416 ---initial-mass 40.9025 --metallicity 0.01416 ---initial-mass 40.9188 --metallicity 0.01416 ---initial-mass 40.9352 --metallicity 0.01416 ---initial-mass 40.9515 --metallicity 0.01416 ---initial-mass 40.9678 --metallicity 0.01416 ---initial-mass 40.9841 --metallicity 0.01416 ---initial-mass 41.0004 --metallicity 0.01416 ---initial-mass 41.0168 --metallicity 0.01416 ---initial-mass 41.0331 --metallicity 0.01416 ---initial-mass 41.0495 --metallicity 0.01416 ---initial-mass 41.0659 --metallicity 0.01416 ---initial-mass 41.0822 --metallicity 0.01416 ---initial-mass 41.0986 --metallicity 0.01416 ---initial-mass 41.115 --metallicity 0.01416 ---initial-mass 41.1314 --metallicity 0.01416 ---initial-mass 41.1478 --metallicity 0.01416 ---initial-mass 41.1642 --metallicity 0.01416 ---initial-mass 41.1806 --metallicity 0.01416 ---initial-mass 41.197 --metallicity 0.01416 ---initial-mass 41.2134 --metallicity 0.01416 ---initial-mass 41.2298 --metallicity 0.01416 ---initial-mass 41.2462 --metallicity 0.01416 ---initial-mass 41.2627 --metallicity 0.01416 ---initial-mass 41.2791 --metallicity 0.01416 ---initial-mass 41.2956 --metallicity 0.01416 ---initial-mass 41.312 --metallicity 0.01416 ---initial-mass 41.3285 --metallicity 0.01416 ---initial-mass 41.345 --metallicity 0.01416 ---initial-mass 41.3615 --metallicity 0.01416 ---initial-mass 41.3779 --metallicity 0.01416 ---initial-mass 41.3944 --metallicity 0.01416 ---initial-mass 41.4109 --metallicity 0.01416 ---initial-mass 41.4274 --metallicity 0.01416 ---initial-mass 41.4439 --metallicity 0.01416 ---initial-mass 41.4605 --metallicity 0.01416 ---initial-mass 41.477 --metallicity 0.01416 ---initial-mass 41.4935 --metallicity 0.01416 ---initial-mass 41.5101 --metallicity 0.01416 ---initial-mass 41.5266 --metallicity 0.01416 ---initial-mass 41.5431 --metallicity 0.01416 ---initial-mass 41.5597 --metallicity 0.01416 ---initial-mass 41.5763 --metallicity 0.01416 ---initial-mass 41.5928 --metallicity 0.01416 ---initial-mass 41.6094 --metallicity 0.01416 ---initial-mass 41.626 --metallicity 0.01416 ---initial-mass 41.6426 --metallicity 0.01416 ---initial-mass 41.6592 --metallicity 0.01416 ---initial-mass 41.6758 --metallicity 0.01416 ---initial-mass 41.6924 --metallicity 0.01416 ---initial-mass 41.709 --metallicity 0.01416 ---initial-mass 41.7256 --metallicity 0.01416 ---initial-mass 41.7423 --metallicity 0.01416 ---initial-mass 41.7589 --metallicity 0.01416 ---initial-mass 41.7756 --metallicity 0.01416 ---initial-mass 41.7922 --metallicity 0.01416 ---initial-mass 41.8089 --metallicity 0.01416 ---initial-mass 41.8255 --metallicity 0.01416 ---initial-mass 41.8422 --metallicity 0.01416 ---initial-mass 41.8589 --metallicity 0.01416 ---initial-mass 41.8755 --metallicity 0.01416 ---initial-mass 41.8922 --metallicity 0.01416 ---initial-mass 41.9089 --metallicity 0.01416 ---initial-mass 41.9256 --metallicity 0.01416 ---initial-mass 41.9423 --metallicity 0.01416 ---initial-mass 41.9591 --metallicity 0.01416 ---initial-mass 41.9758 --metallicity 0.01416 ---initial-mass 41.9925 --metallicity 0.01416 ---initial-mass 42.0093 --metallicity 0.01416 ---initial-mass 42.026 --metallicity 0.01416 ---initial-mass 42.0427 --metallicity 0.01416 ---initial-mass 42.0595 --metallicity 0.01416 ---initial-mass 42.0763 --metallicity 0.01416 ---initial-mass 42.093 --metallicity 0.01416 ---initial-mass 42.1098 --metallicity 0.01416 ---initial-mass 42.1266 --metallicity 0.01416 ---initial-mass 42.1434 --metallicity 0.01416 ---initial-mass 42.1602 --metallicity 0.01416 ---initial-mass 42.177 --metallicity 0.01416 ---initial-mass 42.1938 --metallicity 0.01416 ---initial-mass 42.2106 --metallicity 0.01416 ---initial-mass 42.2274 --metallicity 0.01416 ---initial-mass 42.2443 --metallicity 0.01416 ---initial-mass 42.2611 --metallicity 0.01416 ---initial-mass 42.2779 --metallicity 0.01416 ---initial-mass 42.2948 --metallicity 0.01416 ---initial-mass 42.3116 --metallicity 0.01416 ---initial-mass 42.3285 --metallicity 0.01416 ---initial-mass 42.3454 --metallicity 0.01416 ---initial-mass 42.3623 --metallicity 0.01416 ---initial-mass 42.3791 --metallicity 0.01416 ---initial-mass 42.396 --metallicity 0.01416 ---initial-mass 42.4129 --metallicity 0.01416 ---initial-mass 42.4298 --metallicity 0.01416 ---initial-mass 42.4467 --metallicity 0.01416 ---initial-mass 42.4637 --metallicity 0.01416 ---initial-mass 42.4806 --metallicity 0.01416 ---initial-mass 42.4975 --metallicity 0.01416 ---initial-mass 42.5145 --metallicity 0.01416 ---initial-mass 42.5314 --metallicity 0.01416 ---initial-mass 42.5483 --metallicity 0.01416 ---initial-mass 42.5653 --metallicity 0.01416 ---initial-mass 42.5823 --metallicity 0.01416 ---initial-mass 42.5992 --metallicity 0.01416 ---initial-mass 42.6162 --metallicity 0.01416 ---initial-mass 42.6332 --metallicity 0.01416 ---initial-mass 42.6502 --metallicity 0.01416 ---initial-mass 42.6672 --metallicity 0.01416 ---initial-mass 42.6842 --metallicity 0.01416 ---initial-mass 42.7012 --metallicity 0.01416 ---initial-mass 42.7182 --metallicity 0.01416 ---initial-mass 42.7353 --metallicity 0.01416 ---initial-mass 42.7523 --metallicity 0.01416 ---initial-mass 42.7693 --metallicity 0.01416 ---initial-mass 42.7864 --metallicity 0.01416 ---initial-mass 42.8034 --metallicity 0.01416 ---initial-mass 42.8205 --metallicity 0.01416 ---initial-mass 42.8376 --metallicity 0.01416 ---initial-mass 42.8546 --metallicity 0.01416 ---initial-mass 42.8717 --metallicity 0.01416 ---initial-mass 42.8888 --metallicity 0.01416 ---initial-mass 42.9059 --metallicity 0.01416 ---initial-mass 42.923 --metallicity 0.01416 ---initial-mass 42.9401 --metallicity 0.01416 ---initial-mass 42.9572 --metallicity 0.01416 ---initial-mass 42.9743 --metallicity 0.01416 ---initial-mass 42.9915 --metallicity 0.01416 ---initial-mass 43.0086 --metallicity 0.01416 ---initial-mass 43.0257 --metallicity 0.01416 ---initial-mass 43.0429 --metallicity 0.01416 ---initial-mass 43.06 --metallicity 0.01416 ---initial-mass 43.0772 --metallicity 0.01416 ---initial-mass 43.0944 --metallicity 0.01416 ---initial-mass 43.1115 --metallicity 0.01416 ---initial-mass 43.1287 --metallicity 0.01416 ---initial-mass 43.1459 --metallicity 0.01416 ---initial-mass 43.1631 --metallicity 0.01416 ---initial-mass 43.1803 --metallicity 0.01416 ---initial-mass 43.1975 --metallicity 0.01416 ---initial-mass 43.2147 --metallicity 0.01416 ---initial-mass 43.232 --metallicity 0.01416 ---initial-mass 43.2492 --metallicity 0.01416 ---initial-mass 43.2664 --metallicity 0.01416 ---initial-mass 43.2837 --metallicity 0.01416 ---initial-mass 43.3009 --metallicity 0.01416 ---initial-mass 43.3182 --metallicity 0.01416 ---initial-mass 43.3354 --metallicity 0.01416 ---initial-mass 43.3527 --metallicity 0.01416 ---initial-mass 43.37 --metallicity 0.01416 ---initial-mass 43.3873 --metallicity 0.01416 ---initial-mass 43.4046 --metallicity 0.01416 ---initial-mass 43.4219 --metallicity 0.01416 ---initial-mass 43.4392 --metallicity 0.01416 ---initial-mass 43.4565 --metallicity 0.01416 ---initial-mass 43.4738 --metallicity 0.01416 ---initial-mass 43.4911 --metallicity 0.01416 ---initial-mass 43.5085 --metallicity 0.01416 ---initial-mass 43.5258 --metallicity 0.01416 ---initial-mass 43.5432 --metallicity 0.01416 ---initial-mass 43.5605 --metallicity 0.01416 ---initial-mass 43.5779 --metallicity 0.01416 ---initial-mass 43.5952 --metallicity 0.01416 ---initial-mass 43.6126 --metallicity 0.01416 ---initial-mass 43.63 --metallicity 0.01416 ---initial-mass 43.6474 --metallicity 0.01416 ---initial-mass 43.6648 --metallicity 0.01416 ---initial-mass 43.6822 --metallicity 0.01416 ---initial-mass 43.6996 --metallicity 0.01416 ---initial-mass 43.717 --metallicity 0.01416 ---initial-mass 43.7344 --metallicity 0.01416 ---initial-mass 43.7519 --metallicity 0.01416 ---initial-mass 43.7693 --metallicity 0.01416 ---initial-mass 43.7867 --metallicity 0.01416 ---initial-mass 43.8042 --metallicity 0.01416 ---initial-mass 43.8217 --metallicity 0.01416 ---initial-mass 43.8391 --metallicity 0.01416 ---initial-mass 43.8566 --metallicity 0.01416 ---initial-mass 43.8741 --metallicity 0.01416 ---initial-mass 43.8916 --metallicity 0.01416 ---initial-mass 43.9091 --metallicity 0.01416 ---initial-mass 43.9266 --metallicity 0.01416 ---initial-mass 43.9441 --metallicity 0.01416 ---initial-mass 43.9616 --metallicity 0.01416 ---initial-mass 43.9791 --metallicity 0.01416 ---initial-mass 43.9966 --metallicity 0.01416 ---initial-mass 44.0142 --metallicity 0.01416 ---initial-mass 44.0317 --metallicity 0.01416 ---initial-mass 44.0492 --metallicity 0.01416 ---initial-mass 44.0668 --metallicity 0.01416 ---initial-mass 44.0844 --metallicity 0.01416 ---initial-mass 44.1019 --metallicity 0.01416 ---initial-mass 44.1195 --metallicity 0.01416 ---initial-mass 44.1371 --metallicity 0.01416 ---initial-mass 44.1547 --metallicity 0.01416 ---initial-mass 44.1723 --metallicity 0.01416 ---initial-mass 44.1899 --metallicity 0.01416 ---initial-mass 44.2075 --metallicity 0.01416 ---initial-mass 44.2251 --metallicity 0.01416 ---initial-mass 44.2428 --metallicity 0.01416 ---initial-mass 44.2604 --metallicity 0.01416 ---initial-mass 44.278 --metallicity 0.01416 ---initial-mass 44.2957 --metallicity 0.01416 ---initial-mass 44.3133 --metallicity 0.01416 ---initial-mass 44.331 --metallicity 0.01416 ---initial-mass 44.3487 --metallicity 0.01416 ---initial-mass 44.3663 --metallicity 0.01416 ---initial-mass 44.384 --metallicity 0.01416 ---initial-mass 44.4017 --metallicity 0.01416 ---initial-mass 44.4194 --metallicity 0.01416 ---initial-mass 44.4371 --metallicity 0.01416 ---initial-mass 44.4548 --metallicity 0.01416 ---initial-mass 44.4725 --metallicity 0.01416 ---initial-mass 44.4903 --metallicity 0.01416 ---initial-mass 44.508 --metallicity 0.01416 ---initial-mass 44.5257 --metallicity 0.01416 ---initial-mass 44.5435 --metallicity 0.01416 ---initial-mass 44.5612 --metallicity 0.01416 ---initial-mass 44.579 --metallicity 0.01416 ---initial-mass 44.5968 --metallicity 0.01416 ---initial-mass 44.6145 --metallicity 0.01416 ---initial-mass 44.6323 --metallicity 0.01416 ---initial-mass 44.6501 --metallicity 0.01416 ---initial-mass 44.6679 --metallicity 0.01416 ---initial-mass 44.6857 --metallicity 0.01416 ---initial-mass 44.7035 --metallicity 0.01416 ---initial-mass 44.7213 --metallicity 0.01416 ---initial-mass 44.7391 --metallicity 0.01416 ---initial-mass 44.757 --metallicity 0.01416 ---initial-mass 44.7748 --metallicity 0.01416 ---initial-mass 44.7927 --metallicity 0.01416 ---initial-mass 44.8105 --metallicity 0.01416 ---initial-mass 44.8284 --metallicity 0.01416 ---initial-mass 44.8462 --metallicity 0.01416 ---initial-mass 44.8641 --metallicity 0.01416 ---initial-mass 44.882 --metallicity 0.01416 ---initial-mass 44.8999 --metallicity 0.01416 ---initial-mass 44.9178 --metallicity 0.01416 ---initial-mass 44.9357 --metallicity 0.01416 ---initial-mass 44.9536 --metallicity 0.01416 ---initial-mass 44.9715 --metallicity 0.01416 ---initial-mass 44.9894 --metallicity 0.01416 ---initial-mass 45.0074 --metallicity 0.01416 ---initial-mass 45.0253 --metallicity 0.01416 ---initial-mass 45.0432 --metallicity 0.01416 ---initial-mass 45.0612 --metallicity 0.01416 ---initial-mass 45.0791 --metallicity 0.01416 ---initial-mass 45.0971 --metallicity 0.01416 ---initial-mass 45.1151 --metallicity 0.01416 ---initial-mass 45.1331 --metallicity 0.01416 ---initial-mass 45.1511 --metallicity 0.01416 ---initial-mass 45.1691 --metallicity 0.01416 ---initial-mass 45.1871 --metallicity 0.01416 ---initial-mass 45.2051 --metallicity 0.01416 ---initial-mass 45.2231 --metallicity 0.01416 ---initial-mass 45.2411 --metallicity 0.01416 ---initial-mass 45.2591 --metallicity 0.01416 ---initial-mass 45.2772 --metallicity 0.01416 ---initial-mass 45.2952 --metallicity 0.01416 ---initial-mass 45.3133 --metallicity 0.01416 ---initial-mass 45.3313 --metallicity 0.01416 ---initial-mass 45.3494 --metallicity 0.01416 ---initial-mass 45.3675 --metallicity 0.01416 ---initial-mass 45.3856 --metallicity 0.01416 ---initial-mass 45.4036 --metallicity 0.01416 ---initial-mass 45.4217 --metallicity 0.01416 ---initial-mass 45.4398 --metallicity 0.01416 ---initial-mass 45.458 --metallicity 0.01416 ---initial-mass 45.4761 --metallicity 0.01416 ---initial-mass 45.4942 --metallicity 0.01416 ---initial-mass 45.5123 --metallicity 0.01416 ---initial-mass 45.5305 --metallicity 0.01416 ---initial-mass 45.5486 --metallicity 0.01416 ---initial-mass 45.5668 --metallicity 0.01416 ---initial-mass 45.5849 --metallicity 0.01416 ---initial-mass 45.6031 --metallicity 0.01416 ---initial-mass 45.6213 --metallicity 0.01416 ---initial-mass 45.6395 --metallicity 0.01416 ---initial-mass 45.6576 --metallicity 0.01416 ---initial-mass 45.6758 --metallicity 0.01416 ---initial-mass 45.694 --metallicity 0.01416 ---initial-mass 45.7123 --metallicity 0.01416 ---initial-mass 45.7305 --metallicity 0.01416 ---initial-mass 45.7487 --metallicity 0.01416 ---initial-mass 45.7669 --metallicity 0.01416 ---initial-mass 45.7852 --metallicity 0.01416 ---initial-mass 45.8034 --metallicity 0.01416 ---initial-mass 45.8217 --metallicity 0.01416 ---initial-mass 45.8399 --metallicity 0.01416 ---initial-mass 45.8582 --metallicity 0.01416 ---initial-mass 45.8765 --metallicity 0.01416 ---initial-mass 45.8948 --metallicity 0.01416 ---initial-mass 45.9131 --metallicity 0.01416 ---initial-mass 45.9314 --metallicity 0.01416 ---initial-mass 45.9497 --metallicity 0.01416 ---initial-mass 45.968 --metallicity 0.01416 ---initial-mass 45.9863 --metallicity 0.01416 ---initial-mass 46.0046 --metallicity 0.01416 ---initial-mass 46.023 --metallicity 0.01416 ---initial-mass 46.0413 --metallicity 0.01416 ---initial-mass 46.0597 --metallicity 0.01416 ---initial-mass 46.078 --metallicity 0.01416 ---initial-mass 46.0964 --metallicity 0.01416 ---initial-mass 46.1147 --metallicity 0.01416 ---initial-mass 46.1331 --metallicity 0.01416 ---initial-mass 46.1515 --metallicity 0.01416 ---initial-mass 46.1699 --metallicity 0.01416 ---initial-mass 46.1883 --metallicity 0.01416 ---initial-mass 46.2067 --metallicity 0.01416 ---initial-mass 46.2251 --metallicity 0.01416 ---initial-mass 46.2436 --metallicity 0.01416 ---initial-mass 46.262 --metallicity 0.01416 ---initial-mass 46.2804 --metallicity 0.01416 ---initial-mass 46.2989 --metallicity 0.01416 ---initial-mass 46.3173 --metallicity 0.01416 ---initial-mass 46.3358 --metallicity 0.01416 ---initial-mass 46.3542 --metallicity 0.01416 ---initial-mass 46.3727 --metallicity 0.01416 ---initial-mass 46.3912 --metallicity 0.01416 ---initial-mass 46.4097 --metallicity 0.01416 ---initial-mass 46.4282 --metallicity 0.01416 ---initial-mass 46.4467 --metallicity 0.01416 ---initial-mass 46.4652 --metallicity 0.01416 ---initial-mass 46.4837 --metallicity 0.01416 ---initial-mass 46.5023 --metallicity 0.01416 ---initial-mass 46.5208 --metallicity 0.01416 ---initial-mass 46.5393 --metallicity 0.01416 ---initial-mass 46.5579 --metallicity 0.01416 ---initial-mass 46.5764 --metallicity 0.01416 ---initial-mass 46.595 --metallicity 0.01416 ---initial-mass 46.6136 --metallicity 0.01416 ---initial-mass 46.6321 --metallicity 0.01416 ---initial-mass 46.6507 --metallicity 0.01416 ---initial-mass 46.6693 --metallicity 0.01416 ---initial-mass 46.6879 --metallicity 0.01416 ---initial-mass 46.7065 --metallicity 0.01416 ---initial-mass 46.7251 --metallicity 0.01416 ---initial-mass 46.7438 --metallicity 0.01416 ---initial-mass 46.7624 --metallicity 0.01416 ---initial-mass 46.781 --metallicity 0.01416 ---initial-mass 46.7997 --metallicity 0.01416 ---initial-mass 46.8183 --metallicity 0.01416 ---initial-mass 46.837 --metallicity 0.01416 ---initial-mass 46.8557 --metallicity 0.01416 ---initial-mass 46.8743 --metallicity 0.01416 ---initial-mass 46.893 --metallicity 0.01416 ---initial-mass 46.9117 --metallicity 0.01416 ---initial-mass 46.9304 --metallicity 0.01416 ---initial-mass 46.9491 --metallicity 0.01416 ---initial-mass 46.9678 --metallicity 0.01416 ---initial-mass 46.9865 --metallicity 0.01416 ---initial-mass 47.0053 --metallicity 0.01416 ---initial-mass 47.024 --metallicity 0.01416 ---initial-mass 47.0427 --metallicity 0.01416 ---initial-mass 47.0615 --metallicity 0.01416 ---initial-mass 47.0802 --metallicity 0.01416 ---initial-mass 47.099 --metallicity 0.01416 ---initial-mass 47.1178 --metallicity 0.01416 ---initial-mass 47.1366 --metallicity 0.01416 ---initial-mass 47.1553 --metallicity 0.01416 ---initial-mass 47.1741 --metallicity 0.01416 ---initial-mass 47.1929 --metallicity 0.01416 ---initial-mass 47.2117 --metallicity 0.01416 ---initial-mass 47.2306 --metallicity 0.01416 ---initial-mass 47.2494 --metallicity 0.01416 ---initial-mass 47.2682 --metallicity 0.01416 ---initial-mass 47.2871 --metallicity 0.01416 ---initial-mass 47.3059 --metallicity 0.01416 ---initial-mass 47.3248 --metallicity 0.01416 ---initial-mass 47.3436 --metallicity 0.01416 ---initial-mass 47.3625 --metallicity 0.01416 ---initial-mass 47.3814 --metallicity 0.01416 ---initial-mass 47.4002 --metallicity 0.01416 ---initial-mass 47.4191 --metallicity 0.01416 ---initial-mass 47.438 --metallicity 0.01416 ---initial-mass 47.4569 --metallicity 0.01416 ---initial-mass 47.4759 --metallicity 0.01416 ---initial-mass 47.4948 --metallicity 0.01416 ---initial-mass 47.5137 --metallicity 0.01416 ---initial-mass 47.5326 --metallicity 0.01416 ---initial-mass 47.5516 --metallicity 0.01416 ---initial-mass 47.5705 --metallicity 0.01416 ---initial-mass 47.5895 --metallicity 0.01416 ---initial-mass 47.6085 --metallicity 0.01416 ---initial-mass 47.6274 --metallicity 0.01416 ---initial-mass 47.6464 --metallicity 0.01416 ---initial-mass 47.6654 --metallicity 0.01416 ---initial-mass 47.6844 --metallicity 0.01416 ---initial-mass 47.7034 --metallicity 0.01416 ---initial-mass 47.7224 --metallicity 0.01416 ---initial-mass 47.7415 --metallicity 0.01416 ---initial-mass 47.7605 --metallicity 0.01416 ---initial-mass 47.7795 --metallicity 0.01416 ---initial-mass 47.7986 --metallicity 0.01416 ---initial-mass 47.8176 --metallicity 0.01416 ---initial-mass 47.8367 --metallicity 0.01416 ---initial-mass 47.8557 --metallicity 0.01416 ---initial-mass 47.8748 --metallicity 0.01416 ---initial-mass 47.8939 --metallicity 0.01416 ---initial-mass 47.913 --metallicity 0.01416 ---initial-mass 47.9321 --metallicity 0.01416 ---initial-mass 47.9512 --metallicity 0.01416 ---initial-mass 47.9703 --metallicity 0.01416 ---initial-mass 47.9894 --metallicity 0.01416 ---initial-mass 48.0085 --metallicity 0.01416 ---initial-mass 48.0277 --metallicity 0.01416 ---initial-mass 48.0468 --metallicity 0.01416 ---initial-mass 48.066 --metallicity 0.01416 ---initial-mass 48.0851 --metallicity 0.01416 ---initial-mass 48.1043 --metallicity 0.01416 ---initial-mass 48.1234 --metallicity 0.01416 ---initial-mass 48.1426 --metallicity 0.01416 ---initial-mass 48.1618 --metallicity 0.01416 ---initial-mass 48.181 --metallicity 0.01416 ---initial-mass 48.2002 --metallicity 0.01416 ---initial-mass 48.2194 --metallicity 0.01416 ---initial-mass 48.2386 --metallicity 0.01416 ---initial-mass 48.2579 --metallicity 0.01416 ---initial-mass 48.2771 --metallicity 0.01416 ---initial-mass 48.2963 --metallicity 0.01416 ---initial-mass 48.3156 --metallicity 0.01416 ---initial-mass 48.3348 --metallicity 0.01416 ---initial-mass 48.3541 --metallicity 0.01416 ---initial-mass 48.3734 --metallicity 0.01416 ---initial-mass 48.3927 --metallicity 0.01416 ---initial-mass 48.4119 --metallicity 0.01416 ---initial-mass 48.4312 --metallicity 0.01416 ---initial-mass 48.4505 --metallicity 0.01416 ---initial-mass 48.4699 --metallicity 0.01416 ---initial-mass 48.4892 --metallicity 0.01416 ---initial-mass 48.5085 --metallicity 0.01416 ---initial-mass 48.5278 --metallicity 0.01416 ---initial-mass 48.5472 --metallicity 0.01416 ---initial-mass 48.5665 --metallicity 0.01416 ---initial-mass 48.5859 --metallicity 0.01416 ---initial-mass 48.6052 --metallicity 0.01416 ---initial-mass 48.6246 --metallicity 0.01416 ---initial-mass 48.644 --metallicity 0.01416 ---initial-mass 48.6634 --metallicity 0.01416 ---initial-mass 48.6828 --metallicity 0.01416 ---initial-mass 48.7022 --metallicity 0.01416 ---initial-mass 48.7216 --metallicity 0.01416 ---initial-mass 48.741 --metallicity 0.01416 ---initial-mass 48.7604 --metallicity 0.01416 ---initial-mass 48.7799 --metallicity 0.01416 ---initial-mass 48.7993 --metallicity 0.01416 ---initial-mass 48.8188 --metallicity 0.01416 ---initial-mass 48.8382 --metallicity 0.01416 ---initial-mass 48.8577 --metallicity 0.01416 ---initial-mass 48.8771 --metallicity 0.01416 ---initial-mass 48.8966 --metallicity 0.01416 ---initial-mass 48.9161 --metallicity 0.01416 ---initial-mass 48.9356 --metallicity 0.01416 ---initial-mass 48.9551 --metallicity 0.01416 ---initial-mass 48.9746 --metallicity 0.01416 ---initial-mass 48.9941 --metallicity 0.01416 ---initial-mass 49.0137 --metallicity 0.01416 ---initial-mass 49.0332 --metallicity 0.01416 ---initial-mass 49.0528 --metallicity 0.01416 ---initial-mass 49.0723 --metallicity 0.01416 ---initial-mass 49.0919 --metallicity 0.01416 ---initial-mass 49.1114 --metallicity 0.01416 ---initial-mass 49.131 --metallicity 0.01416 ---initial-mass 49.1506 --metallicity 0.01416 ---initial-mass 49.1702 --metallicity 0.01416 ---initial-mass 49.1898 --metallicity 0.01416 ---initial-mass 49.2094 --metallicity 0.01416 ---initial-mass 49.229 --metallicity 0.01416 ---initial-mass 49.2486 --metallicity 0.01416 ---initial-mass 49.2682 --metallicity 0.01416 ---initial-mass 49.2879 --metallicity 0.01416 ---initial-mass 49.3075 --metallicity 0.01416 ---initial-mass 49.3272 --metallicity 0.01416 ---initial-mass 49.3468 --metallicity 0.01416 ---initial-mass 49.3665 --metallicity 0.01416 ---initial-mass 49.3862 --metallicity 0.01416 ---initial-mass 49.4058 --metallicity 0.01416 ---initial-mass 49.4255 --metallicity 0.01416 ---initial-mass 49.4452 --metallicity 0.01416 ---initial-mass 49.4649 --metallicity 0.01416 ---initial-mass 49.4847 --metallicity 0.01416 ---initial-mass 49.5044 --metallicity 0.01416 ---initial-mass 49.5241 --metallicity 0.01416 ---initial-mass 49.5438 --metallicity 0.01416 ---initial-mass 49.5636 --metallicity 0.01416 ---initial-mass 49.5833 --metallicity 0.01416 ---initial-mass 49.6031 --metallicity 0.01416 ---initial-mass 49.6229 --metallicity 0.01416 ---initial-mass 49.6427 --metallicity 0.01416 ---initial-mass 49.6624 --metallicity 0.01416 ---initial-mass 49.6822 --metallicity 0.01416 ---initial-mass 49.702 --metallicity 0.01416 ---initial-mass 49.7218 --metallicity 0.01416 ---initial-mass 49.7417 --metallicity 0.01416 ---initial-mass 49.7615 --metallicity 0.01416 ---initial-mass 49.7813 --metallicity 0.01416 ---initial-mass 49.8012 --metallicity 0.01416 ---initial-mass 49.821 --metallicity 0.01416 ---initial-mass 49.8409 --metallicity 0.01416 ---initial-mass 49.8607 --metallicity 0.01416 ---initial-mass 49.8806 --metallicity 0.01416 ---initial-mass 49.9005 --metallicity 0.01416 ---initial-mass 49.9204 --metallicity 0.01416 ---initial-mass 49.9403 --metallicity 0.01416 ---initial-mass 49.9602 --metallicity 0.01416 ---initial-mass 49.9801 --metallicity 0.01416 ---initial-mass 50.0 --metallicity 0.01416 ---initial-mass 50.0 --metallicity 0.01416 ---initial-mass 50.2768 --metallicity 0.01416 ---initial-mass 50.5551 --metallicity 0.01416 ---initial-mass 50.835 --metallicity 0.01416 ---initial-mass 51.1164 --metallicity 0.01416 ---initial-mass 51.3994 --metallicity 0.01416 ---initial-mass 51.6839 --metallicity 0.01416 ---initial-mass 51.9701 --metallicity 0.01416 ---initial-mass 52.2578 --metallicity 0.01416 ---initial-mass 52.5471 --metallicity 0.01416 ---initial-mass 52.8379 --metallicity 0.01416 ---initial-mass 53.1305 --metallicity 0.01416 ---initial-mass 53.4246 --metallicity 0.01416 ---initial-mass 53.7203 --metallicity 0.01416 ---initial-mass 54.0177 --metallicity 0.01416 ---initial-mass 54.3168 --metallicity 0.01416 ---initial-mass 54.6175 --metallicity 0.01416 ---initial-mass 54.9198 --metallicity 0.01416 ---initial-mass 55.2239 --metallicity 0.01416 ---initial-mass 55.5296 --metallicity 0.01416 ---initial-mass 55.837 --metallicity 0.01416 ---initial-mass 56.1461 --metallicity 0.01416 ---initial-mass 56.4569 --metallicity 0.01416 ---initial-mass 56.7694 --metallicity 0.01416 ---initial-mass 57.0837 --metallicity 0.01416 ---initial-mass 57.3997 --metallicity 0.01416 ---initial-mass 57.7175 --metallicity 0.01416 ---initial-mass 58.037 --metallicity 0.01416 ---initial-mass 58.3583 --metallicity 0.01416 ---initial-mass 58.6814 --metallicity 0.01416 ---initial-mass 59.0062 --metallicity 0.01416 ---initial-mass 59.3329 --metallicity 0.01416 ---initial-mass 59.6613 --metallicity 0.01416 ---initial-mass 59.9916 --metallicity 0.01416 ---initial-mass 60.3237 --metallicity 0.01416 ---initial-mass 60.6577 --metallicity 0.01416 ---initial-mass 60.9935 --metallicity 0.01416 ---initial-mass 61.3311 --metallicity 0.01416 ---initial-mass 61.6707 --metallicity 0.01416 ---initial-mass 62.0121 --metallicity 0.01416 ---initial-mass 62.3554 --metallicity 0.01416 ---initial-mass 62.7006 --metallicity 0.01416 ---initial-mass 63.0477 --metallicity 0.01416 ---initial-mass 63.3967 --metallicity 0.01416 ---initial-mass 63.7476 --metallicity 0.01416 ---initial-mass 64.1005 --metallicity 0.01416 ---initial-mass 64.4554 --metallicity 0.01416 ---initial-mass 64.8122 --metallicity 0.01416 ---initial-mass 65.171 --metallicity 0.01416 ---initial-mass 65.5318 --metallicity 0.01416 ---initial-mass 65.8946 --metallicity 0.01416 ---initial-mass 66.2594 --metallicity 0.01416 ---initial-mass 66.6262 --metallicity 0.01416 ---initial-mass 66.995 --metallicity 0.01416 ---initial-mass 67.3659 --metallicity 0.01416 ---initial-mass 67.7388 --metallicity 0.01416 ---initial-mass 68.1138 --metallicity 0.01416 ---initial-mass 68.4909 --metallicity 0.01416 ---initial-mass 68.8701 --metallicity 0.01416 ---initial-mass 69.2513 --metallicity 0.01416 ---initial-mass 69.6347 --metallicity 0.01416 ---initial-mass 70.0202 --metallicity 0.01416 ---initial-mass 70.4078 --metallicity 0.01416 ---initial-mass 70.7976 --metallicity 0.01416 ---initial-mass 71.1895 --metallicity 0.01416 ---initial-mass 71.5836 --metallicity 0.01416 ---initial-mass 71.9799 --metallicity 0.01416 ---initial-mass 72.3784 --metallicity 0.01416 ---initial-mass 72.7791 --metallicity 0.01416 ---initial-mass 73.182 --metallicity 0.01416 ---initial-mass 73.5871 --metallicity 0.01416 ---initial-mass 73.9945 --metallicity 0.01416 ---initial-mass 74.4041 --metallicity 0.01416 ---initial-mass 74.816 --metallicity 0.01416 ---initial-mass 75.2302 --metallicity 0.01416 ---initial-mass 75.6466 --metallicity 0.01416 ---initial-mass 76.0654 --metallicity 0.01416 ---initial-mass 76.4865 --metallicity 0.01416 ---initial-mass 76.9099 --metallicity 0.01416 ---initial-mass 77.3357 --metallicity 0.01416 ---initial-mass 77.7638 --metallicity 0.01416 ---initial-mass 78.1943 --metallicity 0.01416 ---initial-mass 78.6272 --metallicity 0.01416 ---initial-mass 79.0625 --metallicity 0.01416 ---initial-mass 79.5001 --metallicity 0.01416 ---initial-mass 79.9403 --metallicity 0.01416 ---initial-mass 80.3828 --metallicity 0.01416 ---initial-mass 80.8278 --metallicity 0.01416 ---initial-mass 81.2752 --metallicity 0.01416 ---initial-mass 81.7252 --metallicity 0.01416 ---initial-mass 82.1776 --metallicity 0.01416 ---initial-mass 82.6325 --metallicity 0.01416 ---initial-mass 83.09 --metallicity 0.01416 ---initial-mass 83.55 --metallicity 0.01416 ---initial-mass 84.0125 --metallicity 0.01416 ---initial-mass 84.4776 --metallicity 0.01416 ---initial-mass 84.9452 --metallicity 0.01416 ---initial-mass 85.4155 --metallicity 0.01416 ---initial-mass 85.8883 --metallicity 0.01416 ---initial-mass 86.3638 --metallicity 0.01416 ---initial-mass 86.8419 --metallicity 0.01416 ---initial-mass 87.3227 --metallicity 0.01416 ---initial-mass 87.8061 --metallicity 0.01416 ---initial-mass 88.2922 --metallicity 0.01416 ---initial-mass 88.781 --metallicity 0.01416 ---initial-mass 89.2724 --metallicity 0.01416 ---initial-mass 89.7666 --metallicity 0.01416 ---initial-mass 90.2636 --metallicity 0.01416 ---initial-mass 90.7633 --metallicity 0.01416 ---initial-mass 91.2657 --metallicity 0.01416 ---initial-mass 91.771 --metallicity 0.01416 ---initial-mass 92.279 --metallicity 0.01416 ---initial-mass 92.7899 --metallicity 0.01416 ---initial-mass 93.3035 --metallicity 0.01416 ---initial-mass 93.8201 --metallicity 0.01416 ---initial-mass 94.3395 --metallicity 0.01416 ---initial-mass 94.8617 --metallicity 0.01416 ---initial-mass 95.3869 --metallicity 0.01416 ---initial-mass 95.9149 --metallicity 0.01416 ---initial-mass 96.4459 --metallicity 0.01416 ---initial-mass 96.9798 --metallicity 0.01416 ---initial-mass 97.5167 --metallicity 0.01416 ---initial-mass 98.0565 --metallicity 0.01416 ---initial-mass 98.5994 --metallicity 0.01416 ---initial-mass 99.1452 --metallicity 0.01416 ---initial-mass 99.6941 --metallicity 0.01416 ---initial-mass 100.246 --metallicity 0.01416 ---initial-mass 100.8009 --metallicity 0.01416 ---initial-mass 101.3589 --metallicity 0.01416 ---initial-mass 101.9201 --metallicity 0.01416 ---initial-mass 102.4843 --metallicity 0.01416 ---initial-mass 103.0516 --metallicity 0.01416 ---initial-mass 103.6221 --metallicity 0.01416 ---initial-mass 104.1958 --metallicity 0.01416 ---initial-mass 104.7726 --metallicity 0.01416 ---initial-mass 105.3526 --metallicity 0.01416 ---initial-mass 105.9358 --metallicity 0.01416 ---initial-mass 106.5223 --metallicity 0.01416 ---initial-mass 107.112 --metallicity 0.01416 ---initial-mass 107.7049 --metallicity 0.01416 ---initial-mass 108.3012 --metallicity 0.01416 ---initial-mass 108.9007 --metallicity 0.01416 ---initial-mass 109.5036 --metallicity 0.01416 ---initial-mass 110.1098 --metallicity 0.01416 ---initial-mass 110.7194 --metallicity 0.01416 ---initial-mass 111.3323 --metallicity 0.01416 ---initial-mass 111.9486 --metallicity 0.01416 ---initial-mass 112.5684 --metallicity 0.01416 ---initial-mass 113.1915 --metallicity 0.01416 ---initial-mass 113.8182 --metallicity 0.01416 ---initial-mass 114.4482 --metallicity 0.01416 ---initial-mass 115.0818 --metallicity 0.01416 ---initial-mass 115.7189 --metallicity 0.01416 ---initial-mass 116.3595 --metallicity 0.01416 ---initial-mass 117.0037 --metallicity 0.01416 ---initial-mass 117.6514 --metallicity 0.01416 ---initial-mass 118.3027 --metallicity 0.01416 ---initial-mass 118.9576 --metallicity 0.01416 ---initial-mass 119.6162 --metallicity 0.01416 ---initial-mass 120.2784 --metallicity 0.01416 ---initial-mass 120.9442 --metallicity 0.01416 ---initial-mass 121.6137 --metallicity 0.01416 ---initial-mass 122.287 --metallicity 0.01416 ---initial-mass 122.964 --metallicity 0.01416 ---initial-mass 123.6447 --metallicity 0.01416 ---initial-mass 124.3292 --metallicity 0.01416 ---initial-mass 125.0175 --metallicity 0.01416 ---initial-mass 125.7095 --metallicity 0.01416 ---initial-mass 126.4055 --metallicity 0.01416 ---initial-mass 127.1052 --metallicity 0.01416 ---initial-mass 127.8089 --metallicity 0.01416 ---initial-mass 128.5164 --metallicity 0.01416 ---initial-mass 129.2279 --metallicity 0.01416 ---initial-mass 129.9433 --metallicity 0.01416 ---initial-mass 130.6626 --metallicity 0.01416 ---initial-mass 131.386 --metallicity 0.01416 ---initial-mass 132.1133 --metallicity 0.01416 ---initial-mass 132.8447 --metallicity 0.01416 ---initial-mass 133.5801 --metallicity 0.01416 ---initial-mass 134.3196 --metallicity 0.01416 ---initial-mass 135.0632 --metallicity 0.01416 ---initial-mass 135.8109 --metallicity 0.01416 ---initial-mass 136.5627 --metallicity 0.01416 ---initial-mass 137.3187 --metallicity 0.01416 ---initial-mass 138.0789 --metallicity 0.01416 ---initial-mass 138.8433 --metallicity 0.01416 ---initial-mass 139.6119 --metallicity 0.01416 ---initial-mass 140.3848 --metallicity 0.01416 ---initial-mass 141.162 --metallicity 0.01416 ---initial-mass 141.9434 --metallicity 0.01416 ---initial-mass 142.7292 --metallicity 0.01416 ---initial-mass 143.5194 --metallicity 0.01416 ---initial-mass 144.3139 --metallicity 0.01416 ---initial-mass 145.1128 --metallicity 0.01416 ---initial-mass 145.9161 --metallicity 0.01416 ---initial-mass 146.7239 --metallicity 0.01416 ---initial-mass 147.5362 --metallicity 0.01416 ---initial-mass 148.3529 --metallicity 0.01416 ---initial-mass 149.1742 --metallicity 0.01416 ---initial-mass 150.0 --metallicity 0.01416 +--initial-mass 0.1 --metallicity 0.01416 +--initial-mass 0.1022 --metallicity 0.01416 +--initial-mass 0.1045 --metallicity 0.01416 +--initial-mass 0.1068 --metallicity 0.01416 +--initial-mass 0.1092 --metallicity 0.01416 +--initial-mass 0.1116 --metallicity 0.01416 +--initial-mass 0.1141 --metallicity 0.01416 +--initial-mass 0.1167 --metallicity 0.01416 +--initial-mass 0.1193 --metallicity 0.01416 +--initial-mass 0.1219 --metallicity 0.01416 +--initial-mass 0.1246 --metallicity 0.01416 +--initial-mass 0.1274 --metallicity 0.01416 +--initial-mass 0.1302 --metallicity 0.01416 +--initial-mass 0.1331 --metallicity 0.01416 +--initial-mass 0.1361 --metallicity 0.01416 +--initial-mass 0.1391 --metallicity 0.01416 +--initial-mass 0.1422 --metallicity 0.01416 +--initial-mass 0.1454 --metallicity 0.01416 +--initial-mass 0.1486 --metallicity 0.01416 +--initial-mass 0.152 --metallicity 0.01416 +--initial-mass 0.1553 --metallicity 0.01416 +--initial-mass 0.1588 --metallicity 0.01416 +--initial-mass 0.1623 --metallicity 0.01416 +--initial-mass 0.1659 --metallicity 0.01416 +--initial-mass 0.1696 --metallicity 0.01416 +--initial-mass 0.1734 --metallicity 0.01416 +--initial-mass 0.1773 --metallicity 0.01416 +--initial-mass 0.1812 --metallicity 0.01416 +--initial-mass 0.1853 --metallicity 0.01416 +--initial-mass 0.1894 --metallicity 0.01416 +--initial-mass 0.1936 --metallicity 0.01416 +--initial-mass 0.1979 --metallicity 0.01416 +--initial-mass 0.2023 --metallicity 0.01416 +--initial-mass 0.2068 --metallicity 0.01416 +--initial-mass 0.2114 --metallicity 0.01416 +--initial-mass 0.2161 --metallicity 0.01416 +--initial-mass 0.2209 --metallicity 0.01416 +--initial-mass 0.2259 --metallicity 0.01416 +--initial-mass 0.2309 --metallicity 0.01416 +--initial-mass 0.236 --metallicity 0.01416 +--initial-mass 0.2413 --metallicity 0.01416 +--initial-mass 0.2467 --metallicity 0.01416 +--initial-mass 0.2521 --metallicity 0.01416 +--initial-mass 0.2578 --metallicity 0.01416 +--initial-mass 0.2635 --metallicity 0.01416 +--initial-mass 0.2694 --metallicity 0.01416 +--initial-mass 0.2754 --metallicity 0.01416 +--initial-mass 0.2815 --metallicity 0.01416 +--initial-mass 0.2878 --metallicity 0.01416 +--initial-mass 0.2942 --metallicity 0.01416 +--initial-mass 0.3007 --metallicity 0.01416 +--initial-mass 0.3074 --metallicity 0.01416 +--initial-mass 0.3143 --metallicity 0.01416 +--initial-mass 0.3213 --metallicity 0.01416 +--initial-mass 0.3284 --metallicity 0.01416 +--initial-mass 0.3357 --metallicity 0.01416 +--initial-mass 0.3432 --metallicity 0.01416 +--initial-mass 0.3508 --metallicity 0.01416 +--initial-mass 0.3586 --metallicity 0.01416 +--initial-mass 0.3666 --metallicity 0.01416 +--initial-mass 0.3748 --metallicity 0.01416 +--initial-mass 0.3831 --metallicity 0.01416 +--initial-mass 0.3917 --metallicity 0.01416 +--initial-mass 0.4004 --metallicity 0.01416 +--initial-mass 0.4093 --metallicity 0.01416 +--initial-mass 0.4184 --metallicity 0.01416 +--initial-mass 0.4277 --metallicity 0.01416 +--initial-mass 0.4373 --metallicity 0.01416 +--initial-mass 0.447 --metallicity 0.01416 +--initial-mass 0.4569 --metallicity 0.01416 +--initial-mass 0.4671 --metallicity 0.01416 +--initial-mass 0.4775 --metallicity 0.01416 +--initial-mass 0.4882 --metallicity 0.01416 +--initial-mass 0.499 --metallicity 0.01416 +--initial-mass 0.5101 --metallicity 0.01416 +--initial-mass 0.5215 --metallicity 0.01416 +--initial-mass 0.5331 --metallicity 0.01416 +--initial-mass 0.545 --metallicity 0.01416 +--initial-mass 0.5571 --metallicity 0.01416 +--initial-mass 0.5695 --metallicity 0.01416 +--initial-mass 0.5822 --metallicity 0.01416 +--initial-mass 0.5951 --metallicity 0.01416 +--initial-mass 0.6084 --metallicity 0.01416 +--initial-mass 0.6219 --metallicity 0.01416 +--initial-mass 0.6358 --metallicity 0.01416 +--initial-mass 0.6499 --metallicity 0.01416 +--initial-mass 0.6644 --metallicity 0.01416 +--initial-mass 0.6792 --metallicity 0.01416 +--initial-mass 0.6943 --metallicity 0.01416 +--initial-mass 0.7098 --metallicity 0.01416 +--initial-mass 0.7256 --metallicity 0.01416 +--initial-mass 0.7417 --metallicity 0.01416 +--initial-mass 0.7583 --metallicity 0.01416 +--initial-mass 0.7751 --metallicity 0.01416 +--initial-mass 0.7924 --metallicity 0.01416 +--initial-mass 0.81 --metallicity 0.01416 +--initial-mass 0.8281 --metallicity 0.01416 +--initial-mass 0.8465 --metallicity 0.01416 +--initial-mass 0.8654 --metallicity 0.01416 +--initial-mass 0.8846 --metallicity 0.01416 +--initial-mass 0.9043 --metallicity 0.01416 +--initial-mass 0.9245 --metallicity 0.01416 +--initial-mass 0.945 --metallicity 0.01416 +--initial-mass 0.9661 --metallicity 0.01416 +--initial-mass 0.9876 --metallicity 0.01416 +--initial-mass 1.0096 --metallicity 0.01416 +--initial-mass 1.0321 --metallicity 0.01416 +--initial-mass 1.055 --metallicity 0.01416 +--initial-mass 1.0785 --metallicity 0.01416 +--initial-mass 1.1025 --metallicity 0.01416 +--initial-mass 1.1271 --metallicity 0.01416 +--initial-mass 1.1522 --metallicity 0.01416 +--initial-mass 1.1778 --metallicity 0.01416 +--initial-mass 1.2041 --metallicity 0.01416 +--initial-mass 1.2309 --metallicity 0.01416 +--initial-mass 1.2583 --metallicity 0.01416 +--initial-mass 1.2863 --metallicity 0.01416 +--initial-mass 1.3149 --metallicity 0.01416 +--initial-mass 1.3442 --metallicity 0.01416 +--initial-mass 1.3741 --metallicity 0.01416 +--initial-mass 1.4047 --metallicity 0.01416 +--initial-mass 1.436 --metallicity 0.01416 +--initial-mass 1.468 --metallicity 0.01416 +--initial-mass 1.5007 --metallicity 0.01416 +--initial-mass 1.5341 --metallicity 0.01416 +--initial-mass 1.5682 --metallicity 0.01416 +--initial-mass 1.6031 --metallicity 0.01416 +--initial-mass 1.6388 --metallicity 0.01416 +--initial-mass 1.6753 --metallicity 0.01416 +--initial-mass 1.7126 --metallicity 0.01416 +--initial-mass 1.7508 --metallicity 0.01416 +--initial-mass 1.7897 --metallicity 0.01416 +--initial-mass 1.8296 --metallicity 0.01416 +--initial-mass 1.8703 --metallicity 0.01416 +--initial-mass 1.912 --metallicity 0.01416 +--initial-mass 1.9545 --metallicity 0.01416 +--initial-mass 1.998 --metallicity 0.01416 +--initial-mass 2.0425 --metallicity 0.01416 +--initial-mass 2.088 --metallicity 0.01416 +--initial-mass 2.1345 --metallicity 0.01416 +--initial-mass 2.182 --metallicity 0.01416 +--initial-mass 2.2306 --metallicity 0.01416 +--initial-mass 2.2803 --metallicity 0.01416 +--initial-mass 2.331 --metallicity 0.01416 +--initial-mass 2.3829 --metallicity 0.01416 +--initial-mass 2.436 --metallicity 0.01416 +--initial-mass 2.4902 --metallicity 0.01416 +--initial-mass 2.5457 --metallicity 0.01416 +--initial-mass 2.6023 --metallicity 0.01416 +--initial-mass 2.6603 --metallicity 0.01416 +--initial-mass 2.7195 --metallicity 0.01416 +--initial-mass 2.7801 --metallicity 0.01416 +--initial-mass 2.842 --metallicity 0.01416 +--initial-mass 2.9052 --metallicity 0.01416 +--initial-mass 2.9699 --metallicity 0.01416 +--initial-mass 3.036 --metallicity 0.01416 +--initial-mass 3.1036 --metallicity 0.01416 +--initial-mass 3.1727 --metallicity 0.01416 +--initial-mass 3.2434 --metallicity 0.01416 +--initial-mass 3.3156 --metallicity 0.01416 +--initial-mass 3.3894 --metallicity 0.01416 +--initial-mass 3.4649 --metallicity 0.01416 +--initial-mass 3.542 --metallicity 0.01416 +--initial-mass 3.6209 --metallicity 0.01416 +--initial-mass 3.7015 --metallicity 0.01416 +--initial-mass 3.7839 --metallicity 0.01416 +--initial-mass 3.8681 --metallicity 0.01416 +--initial-mass 3.9543 --metallicity 0.01416 +--initial-mass 4.0423 --metallicity 0.01416 +--initial-mass 4.1323 --metallicity 0.01416 +--initial-mass 4.2243 --metallicity 0.01416 +--initial-mass 4.3184 --metallicity 0.01416 +--initial-mass 4.4145 --metallicity 0.01416 +--initial-mass 4.5128 --metallicity 0.01416 +--initial-mass 4.6133 --metallicity 0.01416 +--initial-mass 4.716 --metallicity 0.01416 +--initial-mass 4.821 --metallicity 0.01416 +--initial-mass 4.9283 --metallicity 0.01416 +--initial-mass 5.038 --metallicity 0.01416 +--initial-mass 5.1502 --metallicity 0.01416 +--initial-mass 5.2649 --metallicity 0.01416 +--initial-mass 5.3821 --metallicity 0.01416 +--initial-mass 5.5019 --metallicity 0.01416 +--initial-mass 5.6244 --metallicity 0.01416 +--initial-mass 5.7496 --metallicity 0.01416 +--initial-mass 5.8777 --metallicity 0.01416 +--initial-mass 6.0085 --metallicity 0.01416 +--initial-mass 6.1423 --metallicity 0.01416 +--initial-mass 6.2791 --metallicity 0.01416 +--initial-mass 6.4189 --metallicity 0.01416 +--initial-mass 6.5618 --metallicity 0.01416 +--initial-mass 6.7079 --metallicity 0.01416 +--initial-mass 6.8572 --metallicity 0.01416 +--initial-mass 7.0099 --metallicity 0.01416 +--initial-mass 7.1659 --metallicity 0.01416 +--initial-mass 7.3255 --metallicity 0.01416 +--initial-mass 7.4886 --metallicity 0.01416 +--initial-mass 7.6553 --metallicity 0.01416 +--initial-mass 7.8258 --metallicity 0.01416 +--initial-mass 8.0 --metallicity 0.01416 +--initial-mass 8.0 --metallicity 0.01416 +--initial-mass 8.0032 --metallicity 0.01416 +--initial-mass 8.0064 --metallicity 0.01416 +--initial-mass 8.0096 --metallicity 0.01416 +--initial-mass 8.0128 --metallicity 0.01416 +--initial-mass 8.016 --metallicity 0.01416 +--initial-mass 8.0191 --metallicity 0.01416 +--initial-mass 8.0223 --metallicity 0.01416 +--initial-mass 8.0255 --metallicity 0.01416 +--initial-mass 8.0287 --metallicity 0.01416 +--initial-mass 8.0319 --metallicity 0.01416 +--initial-mass 8.0351 --metallicity 0.01416 +--initial-mass 8.0383 --metallicity 0.01416 +--initial-mass 8.0415 --metallicity 0.01416 +--initial-mass 8.0448 --metallicity 0.01416 +--initial-mass 8.048 --metallicity 0.01416 +--initial-mass 8.0512 --metallicity 0.01416 +--initial-mass 8.0544 --metallicity 0.01416 +--initial-mass 8.0576 --metallicity 0.01416 +--initial-mass 8.0608 --metallicity 0.01416 +--initial-mass 8.064 --metallicity 0.01416 +--initial-mass 8.0672 --metallicity 0.01416 +--initial-mass 8.0704 --metallicity 0.01416 +--initial-mass 8.0737 --metallicity 0.01416 +--initial-mass 8.0769 --metallicity 0.01416 +--initial-mass 8.0801 --metallicity 0.01416 +--initial-mass 8.0833 --metallicity 0.01416 +--initial-mass 8.0865 --metallicity 0.01416 +--initial-mass 8.0898 --metallicity 0.01416 +--initial-mass 8.093 --metallicity 0.01416 +--initial-mass 8.0962 --metallicity 0.01416 +--initial-mass 8.0994 --metallicity 0.01416 +--initial-mass 8.1027 --metallicity 0.01416 +--initial-mass 8.1059 --metallicity 0.01416 +--initial-mass 8.1091 --metallicity 0.01416 +--initial-mass 8.1124 --metallicity 0.01416 +--initial-mass 8.1156 --metallicity 0.01416 +--initial-mass 8.1188 --metallicity 0.01416 +--initial-mass 8.1221 --metallicity 0.01416 +--initial-mass 8.1253 --metallicity 0.01416 +--initial-mass 8.1285 --metallicity 0.01416 +--initial-mass 8.1318 --metallicity 0.01416 +--initial-mass 8.135 --metallicity 0.01416 +--initial-mass 8.1383 --metallicity 0.01416 +--initial-mass 8.1415 --metallicity 0.01416 +--initial-mass 8.1447 --metallicity 0.01416 +--initial-mass 8.148 --metallicity 0.01416 +--initial-mass 8.1512 --metallicity 0.01416 +--initial-mass 8.1545 --metallicity 0.01416 +--initial-mass 8.1577 --metallicity 0.01416 +--initial-mass 8.161 --metallicity 0.01416 +--initial-mass 8.1642 --metallicity 0.01416 +--initial-mass 8.1675 --metallicity 0.01416 +--initial-mass 8.1707 --metallicity 0.01416 +--initial-mass 8.174 --metallicity 0.01416 +--initial-mass 8.1773 --metallicity 0.01416 +--initial-mass 8.1805 --metallicity 0.01416 +--initial-mass 8.1838 --metallicity 0.01416 +--initial-mass 8.187 --metallicity 0.01416 +--initial-mass 8.1903 --metallicity 0.01416 +--initial-mass 8.1936 --metallicity 0.01416 +--initial-mass 8.1968 --metallicity 0.01416 +--initial-mass 8.2001 --metallicity 0.01416 +--initial-mass 8.2034 --metallicity 0.01416 +--initial-mass 8.2066 --metallicity 0.01416 +--initial-mass 8.2099 --metallicity 0.01416 +--initial-mass 8.2132 --metallicity 0.01416 +--initial-mass 8.2165 --metallicity 0.01416 +--initial-mass 8.2197 --metallicity 0.01416 +--initial-mass 8.223 --metallicity 0.01416 +--initial-mass 8.2263 --metallicity 0.01416 +--initial-mass 8.2296 --metallicity 0.01416 +--initial-mass 8.2328 --metallicity 0.01416 +--initial-mass 8.2361 --metallicity 0.01416 +--initial-mass 8.2394 --metallicity 0.01416 +--initial-mass 8.2427 --metallicity 0.01416 +--initial-mass 8.246 --metallicity 0.01416 +--initial-mass 8.2493 --metallicity 0.01416 +--initial-mass 8.2526 --metallicity 0.01416 +--initial-mass 8.2558 --metallicity 0.01416 +--initial-mass 8.2591 --metallicity 0.01416 +--initial-mass 8.2624 --metallicity 0.01416 +--initial-mass 8.2657 --metallicity 0.01416 +--initial-mass 8.269 --metallicity 0.01416 +--initial-mass 8.2723 --metallicity 0.01416 +--initial-mass 8.2756 --metallicity 0.01416 +--initial-mass 8.2789 --metallicity 0.01416 +--initial-mass 8.2822 --metallicity 0.01416 +--initial-mass 8.2855 --metallicity 0.01416 +--initial-mass 8.2888 --metallicity 0.01416 +--initial-mass 8.2921 --metallicity 0.01416 +--initial-mass 8.2954 --metallicity 0.01416 +--initial-mass 8.2987 --metallicity 0.01416 +--initial-mass 8.302 --metallicity 0.01416 +--initial-mass 8.3053 --metallicity 0.01416 +--initial-mass 8.3086 --metallicity 0.01416 +--initial-mass 8.312 --metallicity 0.01416 +--initial-mass 8.3153 --metallicity 0.01416 +--initial-mass 8.3186 --metallicity 0.01416 +--initial-mass 8.3219 --metallicity 0.01416 +--initial-mass 8.3252 --metallicity 0.01416 +--initial-mass 8.3285 --metallicity 0.01416 +--initial-mass 8.3319 --metallicity 0.01416 +--initial-mass 8.3352 --metallicity 0.01416 +--initial-mass 8.3385 --metallicity 0.01416 +--initial-mass 8.3418 --metallicity 0.01416 +--initial-mass 8.3451 --metallicity 0.01416 +--initial-mass 8.3485 --metallicity 0.01416 +--initial-mass 8.3518 --metallicity 0.01416 +--initial-mass 8.3551 --metallicity 0.01416 +--initial-mass 8.3585 --metallicity 0.01416 +--initial-mass 8.3618 --metallicity 0.01416 +--initial-mass 8.3651 --metallicity 0.01416 +--initial-mass 8.3685 --metallicity 0.01416 +--initial-mass 8.3718 --metallicity 0.01416 +--initial-mass 8.3751 --metallicity 0.01416 +--initial-mass 8.3785 --metallicity 0.01416 +--initial-mass 8.3818 --metallicity 0.01416 +--initial-mass 8.3851 --metallicity 0.01416 +--initial-mass 8.3885 --metallicity 0.01416 +--initial-mass 8.3918 --metallicity 0.01416 +--initial-mass 8.3952 --metallicity 0.01416 +--initial-mass 8.3985 --metallicity 0.01416 +--initial-mass 8.4019 --metallicity 0.01416 +--initial-mass 8.4052 --metallicity 0.01416 +--initial-mass 8.4086 --metallicity 0.01416 +--initial-mass 8.4119 --metallicity 0.01416 +--initial-mass 8.4153 --metallicity 0.01416 +--initial-mass 8.4186 --metallicity 0.01416 +--initial-mass 8.422 --metallicity 0.01416 +--initial-mass 8.4253 --metallicity 0.01416 +--initial-mass 8.4287 --metallicity 0.01416 +--initial-mass 8.4321 --metallicity 0.01416 +--initial-mass 8.4354 --metallicity 0.01416 +--initial-mass 8.4388 --metallicity 0.01416 +--initial-mass 8.4421 --metallicity 0.01416 +--initial-mass 8.4455 --metallicity 0.01416 +--initial-mass 8.4489 --metallicity 0.01416 +--initial-mass 8.4522 --metallicity 0.01416 +--initial-mass 8.4556 --metallicity 0.01416 +--initial-mass 8.459 --metallicity 0.01416 +--initial-mass 8.4623 --metallicity 0.01416 +--initial-mass 8.4657 --metallicity 0.01416 +--initial-mass 8.4691 --metallicity 0.01416 +--initial-mass 8.4725 --metallicity 0.01416 +--initial-mass 8.4758 --metallicity 0.01416 +--initial-mass 8.4792 --metallicity 0.01416 +--initial-mass 8.4826 --metallicity 0.01416 +--initial-mass 8.486 --metallicity 0.01416 +--initial-mass 8.4894 --metallicity 0.01416 +--initial-mass 8.4927 --metallicity 0.01416 +--initial-mass 8.4961 --metallicity 0.01416 +--initial-mass 8.4995 --metallicity 0.01416 +--initial-mass 8.5029 --metallicity 0.01416 +--initial-mass 8.5063 --metallicity 0.01416 +--initial-mass 8.5097 --metallicity 0.01416 +--initial-mass 8.5131 --metallicity 0.01416 +--initial-mass 8.5165 --metallicity 0.01416 +--initial-mass 8.5199 --metallicity 0.01416 +--initial-mass 8.5233 --metallicity 0.01416 +--initial-mass 8.5267 --metallicity 0.01416 +--initial-mass 8.5301 --metallicity 0.01416 +--initial-mass 8.5335 --metallicity 0.01416 +--initial-mass 8.5369 --metallicity 0.01416 +--initial-mass 8.5403 --metallicity 0.01416 +--initial-mass 8.5437 --metallicity 0.01416 +--initial-mass 8.5471 --metallicity 0.01416 +--initial-mass 8.5505 --metallicity 0.01416 +--initial-mass 8.5539 --metallicity 0.01416 +--initial-mass 8.5573 --metallicity 0.01416 +--initial-mass 8.5607 --metallicity 0.01416 +--initial-mass 8.5641 --metallicity 0.01416 +--initial-mass 8.5675 --metallicity 0.01416 +--initial-mass 8.5709 --metallicity 0.01416 +--initial-mass 8.5744 --metallicity 0.01416 +--initial-mass 8.5778 --metallicity 0.01416 +--initial-mass 8.5812 --metallicity 0.01416 +--initial-mass 8.5846 --metallicity 0.01416 +--initial-mass 8.588 --metallicity 0.01416 +--initial-mass 8.5915 --metallicity 0.01416 +--initial-mass 8.5949 --metallicity 0.01416 +--initial-mass 8.5983 --metallicity 0.01416 +--initial-mass 8.6017 --metallicity 0.01416 +--initial-mass 8.6052 --metallicity 0.01416 +--initial-mass 8.6086 --metallicity 0.01416 +--initial-mass 8.612 --metallicity 0.01416 +--initial-mass 8.6155 --metallicity 0.01416 +--initial-mass 8.6189 --metallicity 0.01416 +--initial-mass 8.6223 --metallicity 0.01416 +--initial-mass 8.6258 --metallicity 0.01416 +--initial-mass 8.6292 --metallicity 0.01416 +--initial-mass 8.6326 --metallicity 0.01416 +--initial-mass 8.6361 --metallicity 0.01416 +--initial-mass 8.6395 --metallicity 0.01416 +--initial-mass 8.643 --metallicity 0.01416 +--initial-mass 8.6464 --metallicity 0.01416 +--initial-mass 8.6499 --metallicity 0.01416 +--initial-mass 8.6533 --metallicity 0.01416 +--initial-mass 8.6568 --metallicity 0.01416 +--initial-mass 8.6602 --metallicity 0.01416 +--initial-mass 8.6637 --metallicity 0.01416 +--initial-mass 8.6671 --metallicity 0.01416 +--initial-mass 8.6706 --metallicity 0.01416 +--initial-mass 8.674 --metallicity 0.01416 +--initial-mass 8.6775 --metallicity 0.01416 +--initial-mass 8.6809 --metallicity 0.01416 +--initial-mass 8.6844 --metallicity 0.01416 +--initial-mass 8.6879 --metallicity 0.01416 +--initial-mass 8.6913 --metallicity 0.01416 +--initial-mass 8.6948 --metallicity 0.01416 +--initial-mass 8.6982 --metallicity 0.01416 +--initial-mass 8.7017 --metallicity 0.01416 +--initial-mass 8.7052 --metallicity 0.01416 +--initial-mass 8.7086 --metallicity 0.01416 +--initial-mass 8.7121 --metallicity 0.01416 +--initial-mass 8.7156 --metallicity 0.01416 +--initial-mass 8.7191 --metallicity 0.01416 +--initial-mass 8.7225 --metallicity 0.01416 +--initial-mass 8.726 --metallicity 0.01416 +--initial-mass 8.7295 --metallicity 0.01416 +--initial-mass 8.733 --metallicity 0.01416 +--initial-mass 8.7365 --metallicity 0.01416 +--initial-mass 8.7399 --metallicity 0.01416 +--initial-mass 8.7434 --metallicity 0.01416 +--initial-mass 8.7469 --metallicity 0.01416 +--initial-mass 8.7504 --metallicity 0.01416 +--initial-mass 8.7539 --metallicity 0.01416 +--initial-mass 8.7574 --metallicity 0.01416 +--initial-mass 8.7609 --metallicity 0.01416 +--initial-mass 8.7643 --metallicity 0.01416 +--initial-mass 8.7678 --metallicity 0.01416 +--initial-mass 8.7713 --metallicity 0.01416 +--initial-mass 8.7748 --metallicity 0.01416 +--initial-mass 8.7783 --metallicity 0.01416 +--initial-mass 8.7818 --metallicity 0.01416 +--initial-mass 8.7853 --metallicity 0.01416 +--initial-mass 8.7888 --metallicity 0.01416 +--initial-mass 8.7923 --metallicity 0.01416 +--initial-mass 8.7958 --metallicity 0.01416 +--initial-mass 8.7993 --metallicity 0.01416 +--initial-mass 8.8028 --metallicity 0.01416 +--initial-mass 8.8064 --metallicity 0.01416 +--initial-mass 8.8099 --metallicity 0.01416 +--initial-mass 8.8134 --metallicity 0.01416 +--initial-mass 8.8169 --metallicity 0.01416 +--initial-mass 8.8204 --metallicity 0.01416 +--initial-mass 8.8239 --metallicity 0.01416 +--initial-mass 8.8274 --metallicity 0.01416 +--initial-mass 8.831 --metallicity 0.01416 +--initial-mass 8.8345 --metallicity 0.01416 +--initial-mass 8.838 --metallicity 0.01416 +--initial-mass 8.8415 --metallicity 0.01416 +--initial-mass 8.845 --metallicity 0.01416 +--initial-mass 8.8486 --metallicity 0.01416 +--initial-mass 8.8521 --metallicity 0.01416 +--initial-mass 8.8556 --metallicity 0.01416 +--initial-mass 8.8592 --metallicity 0.01416 +--initial-mass 8.8627 --metallicity 0.01416 +--initial-mass 8.8662 --metallicity 0.01416 +--initial-mass 8.8697 --metallicity 0.01416 +--initial-mass 8.8733 --metallicity 0.01416 +--initial-mass 8.8768 --metallicity 0.01416 +--initial-mass 8.8804 --metallicity 0.01416 +--initial-mass 8.8839 --metallicity 0.01416 +--initial-mass 8.8874 --metallicity 0.01416 +--initial-mass 8.891 --metallicity 0.01416 +--initial-mass 8.8945 --metallicity 0.01416 +--initial-mass 8.8981 --metallicity 0.01416 +--initial-mass 8.9016 --metallicity 0.01416 +--initial-mass 8.9052 --metallicity 0.01416 +--initial-mass 8.9087 --metallicity 0.01416 +--initial-mass 8.9123 --metallicity 0.01416 +--initial-mass 8.9158 --metallicity 0.01416 +--initial-mass 8.9194 --metallicity 0.01416 +--initial-mass 8.9229 --metallicity 0.01416 +--initial-mass 8.9265 --metallicity 0.01416 +--initial-mass 8.93 --metallicity 0.01416 +--initial-mass 8.9336 --metallicity 0.01416 +--initial-mass 8.9372 --metallicity 0.01416 +--initial-mass 8.9407 --metallicity 0.01416 +--initial-mass 8.9443 --metallicity 0.01416 +--initial-mass 8.9478 --metallicity 0.01416 +--initial-mass 8.9514 --metallicity 0.01416 +--initial-mass 8.955 --metallicity 0.01416 +--initial-mass 8.9585 --metallicity 0.01416 +--initial-mass 8.9621 --metallicity 0.01416 +--initial-mass 8.9657 --metallicity 0.01416 +--initial-mass 8.9693 --metallicity 0.01416 +--initial-mass 8.9728 --metallicity 0.01416 +--initial-mass 8.9764 --metallicity 0.01416 +--initial-mass 8.98 --metallicity 0.01416 +--initial-mass 8.9836 --metallicity 0.01416 +--initial-mass 8.9872 --metallicity 0.01416 +--initial-mass 8.9907 --metallicity 0.01416 +--initial-mass 8.9943 --metallicity 0.01416 +--initial-mass 8.9979 --metallicity 0.01416 +--initial-mass 9.0015 --metallicity 0.01416 +--initial-mass 9.0051 --metallicity 0.01416 +--initial-mass 9.0087 --metallicity 0.01416 +--initial-mass 9.0123 --metallicity 0.01416 +--initial-mass 9.0158 --metallicity 0.01416 +--initial-mass 9.0194 --metallicity 0.01416 +--initial-mass 9.023 --metallicity 0.01416 +--initial-mass 9.0266 --metallicity 0.01416 +--initial-mass 9.0302 --metallicity 0.01416 +--initial-mass 9.0338 --metallicity 0.01416 +--initial-mass 9.0374 --metallicity 0.01416 +--initial-mass 9.041 --metallicity 0.01416 +--initial-mass 9.0446 --metallicity 0.01416 +--initial-mass 9.0482 --metallicity 0.01416 +--initial-mass 9.0518 --metallicity 0.01416 +--initial-mass 9.0555 --metallicity 0.01416 +--initial-mass 9.0591 --metallicity 0.01416 +--initial-mass 9.0627 --metallicity 0.01416 +--initial-mass 9.0663 --metallicity 0.01416 +--initial-mass 9.0699 --metallicity 0.01416 +--initial-mass 9.0735 --metallicity 0.01416 +--initial-mass 9.0771 --metallicity 0.01416 +--initial-mass 9.0807 --metallicity 0.01416 +--initial-mass 9.0844 --metallicity 0.01416 +--initial-mass 9.088 --metallicity 0.01416 +--initial-mass 9.0916 --metallicity 0.01416 +--initial-mass 9.0952 --metallicity 0.01416 +--initial-mass 9.0989 --metallicity 0.01416 +--initial-mass 9.1025 --metallicity 0.01416 +--initial-mass 9.1061 --metallicity 0.01416 +--initial-mass 9.1097 --metallicity 0.01416 +--initial-mass 9.1134 --metallicity 0.01416 +--initial-mass 9.117 --metallicity 0.01416 +--initial-mass 9.1206 --metallicity 0.01416 +--initial-mass 9.1243 --metallicity 0.01416 +--initial-mass 9.1279 --metallicity 0.01416 +--initial-mass 9.1315 --metallicity 0.01416 +--initial-mass 9.1352 --metallicity 0.01416 +--initial-mass 9.1388 --metallicity 0.01416 +--initial-mass 9.1425 --metallicity 0.01416 +--initial-mass 9.1461 --metallicity 0.01416 +--initial-mass 9.1498 --metallicity 0.01416 +--initial-mass 9.1534 --metallicity 0.01416 +--initial-mass 9.1571 --metallicity 0.01416 +--initial-mass 9.1607 --metallicity 0.01416 +--initial-mass 9.1644 --metallicity 0.01416 +--initial-mass 9.168 --metallicity 0.01416 +--initial-mass 9.1717 --metallicity 0.01416 +--initial-mass 9.1753 --metallicity 0.01416 +--initial-mass 9.179 --metallicity 0.01416 +--initial-mass 9.1826 --metallicity 0.01416 +--initial-mass 9.1863 --metallicity 0.01416 +--initial-mass 9.1899 --metallicity 0.01416 +--initial-mass 9.1936 --metallicity 0.01416 +--initial-mass 9.1973 --metallicity 0.01416 +--initial-mass 9.2009 --metallicity 0.01416 +--initial-mass 9.2046 --metallicity 0.01416 +--initial-mass 9.2083 --metallicity 0.01416 +--initial-mass 9.2119 --metallicity 0.01416 +--initial-mass 9.2156 --metallicity 0.01416 +--initial-mass 9.2193 --metallicity 0.01416 +--initial-mass 9.223 --metallicity 0.01416 +--initial-mass 9.2266 --metallicity 0.01416 +--initial-mass 9.2303 --metallicity 0.01416 +--initial-mass 9.234 --metallicity 0.01416 +--initial-mass 9.2377 --metallicity 0.01416 +--initial-mass 9.2414 --metallicity 0.01416 +--initial-mass 9.245 --metallicity 0.01416 +--initial-mass 9.2487 --metallicity 0.01416 +--initial-mass 9.2524 --metallicity 0.01416 +--initial-mass 9.2561 --metallicity 0.01416 +--initial-mass 9.2598 --metallicity 0.01416 +--initial-mass 9.2635 --metallicity 0.01416 +--initial-mass 9.2672 --metallicity 0.01416 +--initial-mass 9.2709 --metallicity 0.01416 +--initial-mass 9.2746 --metallicity 0.01416 +--initial-mass 9.2783 --metallicity 0.01416 +--initial-mass 9.282 --metallicity 0.01416 +--initial-mass 9.2857 --metallicity 0.01416 +--initial-mass 9.2894 --metallicity 0.01416 +--initial-mass 9.2931 --metallicity 0.01416 +--initial-mass 9.2968 --metallicity 0.01416 +--initial-mass 9.3005 --metallicity 0.01416 +--initial-mass 9.3042 --metallicity 0.01416 +--initial-mass 9.3079 --metallicity 0.01416 +--initial-mass 9.3116 --metallicity 0.01416 +--initial-mass 9.3153 --metallicity 0.01416 +--initial-mass 9.319 --metallicity 0.01416 +--initial-mass 9.3227 --metallicity 0.01416 +--initial-mass 9.3264 --metallicity 0.01416 +--initial-mass 9.3302 --metallicity 0.01416 +--initial-mass 9.3339 --metallicity 0.01416 +--initial-mass 9.3376 --metallicity 0.01416 +--initial-mass 9.3413 --metallicity 0.01416 +--initial-mass 9.345 --metallicity 0.01416 +--initial-mass 9.3488 --metallicity 0.01416 +--initial-mass 9.3525 --metallicity 0.01416 +--initial-mass 9.3562 --metallicity 0.01416 +--initial-mass 9.36 --metallicity 0.01416 +--initial-mass 9.3637 --metallicity 0.01416 +--initial-mass 9.3674 --metallicity 0.01416 +--initial-mass 9.3711 --metallicity 0.01416 +--initial-mass 9.3749 --metallicity 0.01416 +--initial-mass 9.3786 --metallicity 0.01416 +--initial-mass 9.3824 --metallicity 0.01416 +--initial-mass 9.3861 --metallicity 0.01416 +--initial-mass 9.3898 --metallicity 0.01416 +--initial-mass 9.3936 --metallicity 0.01416 +--initial-mass 9.3973 --metallicity 0.01416 +--initial-mass 9.4011 --metallicity 0.01416 +--initial-mass 9.4048 --metallicity 0.01416 +--initial-mass 9.4086 --metallicity 0.01416 +--initial-mass 9.4123 --metallicity 0.01416 +--initial-mass 9.4161 --metallicity 0.01416 +--initial-mass 9.4198 --metallicity 0.01416 +--initial-mass 9.4236 --metallicity 0.01416 +--initial-mass 9.4273 --metallicity 0.01416 +--initial-mass 9.4311 --metallicity 0.01416 +--initial-mass 9.4348 --metallicity 0.01416 +--initial-mass 9.4386 --metallicity 0.01416 +--initial-mass 9.4424 --metallicity 0.01416 +--initial-mass 9.4461 --metallicity 0.01416 +--initial-mass 9.4499 --metallicity 0.01416 +--initial-mass 9.4537 --metallicity 0.01416 +--initial-mass 9.4574 --metallicity 0.01416 +--initial-mass 9.4612 --metallicity 0.01416 +--initial-mass 9.465 --metallicity 0.01416 +--initial-mass 9.4687 --metallicity 0.01416 +--initial-mass 9.4725 --metallicity 0.01416 +--initial-mass 9.4763 --metallicity 0.01416 +--initial-mass 9.4801 --metallicity 0.01416 +--initial-mass 9.4838 --metallicity 0.01416 +--initial-mass 9.4876 --metallicity 0.01416 +--initial-mass 9.4914 --metallicity 0.01416 +--initial-mass 9.4952 --metallicity 0.01416 +--initial-mass 9.499 --metallicity 0.01416 +--initial-mass 9.5028 --metallicity 0.01416 +--initial-mass 9.5065 --metallicity 0.01416 +--initial-mass 9.5103 --metallicity 0.01416 +--initial-mass 9.5141 --metallicity 0.01416 +--initial-mass 9.5179 --metallicity 0.01416 +--initial-mass 9.5217 --metallicity 0.01416 +--initial-mass 9.5255 --metallicity 0.01416 +--initial-mass 9.5293 --metallicity 0.01416 +--initial-mass 9.5331 --metallicity 0.01416 +--initial-mass 9.5369 --metallicity 0.01416 +--initial-mass 9.5407 --metallicity 0.01416 +--initial-mass 9.5445 --metallicity 0.01416 +--initial-mass 9.5483 --metallicity 0.01416 +--initial-mass 9.5521 --metallicity 0.01416 +--initial-mass 9.5559 --metallicity 0.01416 +--initial-mass 9.5597 --metallicity 0.01416 +--initial-mass 9.5635 --metallicity 0.01416 +--initial-mass 9.5674 --metallicity 0.01416 +--initial-mass 9.5712 --metallicity 0.01416 +--initial-mass 9.575 --metallicity 0.01416 +--initial-mass 9.5788 --metallicity 0.01416 +--initial-mass 9.5826 --metallicity 0.01416 +--initial-mass 9.5864 --metallicity 0.01416 +--initial-mass 9.5903 --metallicity 0.01416 +--initial-mass 9.5941 --metallicity 0.01416 +--initial-mass 9.5979 --metallicity 0.01416 +--initial-mass 9.6017 --metallicity 0.01416 +--initial-mass 9.6056 --metallicity 0.01416 +--initial-mass 9.6094 --metallicity 0.01416 +--initial-mass 9.6132 --metallicity 0.01416 +--initial-mass 9.617 --metallicity 0.01416 +--initial-mass 9.6209 --metallicity 0.01416 +--initial-mass 9.6247 --metallicity 0.01416 +--initial-mass 9.6285 --metallicity 0.01416 +--initial-mass 9.6324 --metallicity 0.01416 +--initial-mass 9.6362 --metallicity 0.01416 +--initial-mass 9.6401 --metallicity 0.01416 +--initial-mass 9.6439 --metallicity 0.01416 +--initial-mass 9.6477 --metallicity 0.01416 +--initial-mass 9.6516 --metallicity 0.01416 +--initial-mass 9.6554 --metallicity 0.01416 +--initial-mass 9.6593 --metallicity 0.01416 +--initial-mass 9.6631 --metallicity 0.01416 +--initial-mass 9.667 --metallicity 0.01416 +--initial-mass 9.6708 --metallicity 0.01416 +--initial-mass 9.6747 --metallicity 0.01416 +--initial-mass 9.6785 --metallicity 0.01416 +--initial-mass 9.6824 --metallicity 0.01416 +--initial-mass 9.6863 --metallicity 0.01416 +--initial-mass 9.6901 --metallicity 0.01416 +--initial-mass 9.694 --metallicity 0.01416 +--initial-mass 9.6979 --metallicity 0.01416 +--initial-mass 9.7017 --metallicity 0.01416 +--initial-mass 9.7056 --metallicity 0.01416 +--initial-mass 9.7095 --metallicity 0.01416 +--initial-mass 9.7133 --metallicity 0.01416 +--initial-mass 9.7172 --metallicity 0.01416 +--initial-mass 9.7211 --metallicity 0.01416 +--initial-mass 9.7249 --metallicity 0.01416 +--initial-mass 9.7288 --metallicity 0.01416 +--initial-mass 9.7327 --metallicity 0.01416 +--initial-mass 9.7366 --metallicity 0.01416 +--initial-mass 9.7405 --metallicity 0.01416 +--initial-mass 9.7443 --metallicity 0.01416 +--initial-mass 9.7482 --metallicity 0.01416 +--initial-mass 9.7521 --metallicity 0.01416 +--initial-mass 9.756 --metallicity 0.01416 +--initial-mass 9.7599 --metallicity 0.01416 +--initial-mass 9.7638 --metallicity 0.01416 +--initial-mass 9.7677 --metallicity 0.01416 +--initial-mass 9.7716 --metallicity 0.01416 +--initial-mass 9.7754 --metallicity 0.01416 +--initial-mass 9.7793 --metallicity 0.01416 +--initial-mass 9.7832 --metallicity 0.01416 +--initial-mass 9.7871 --metallicity 0.01416 +--initial-mass 9.791 --metallicity 0.01416 +--initial-mass 9.7949 --metallicity 0.01416 +--initial-mass 9.7988 --metallicity 0.01416 +--initial-mass 9.8028 --metallicity 0.01416 +--initial-mass 9.8067 --metallicity 0.01416 +--initial-mass 9.8106 --metallicity 0.01416 +--initial-mass 9.8145 --metallicity 0.01416 +--initial-mass 9.8184 --metallicity 0.01416 +--initial-mass 9.8223 --metallicity 0.01416 +--initial-mass 9.8262 --metallicity 0.01416 +--initial-mass 9.8301 --metallicity 0.01416 +--initial-mass 9.8341 --metallicity 0.01416 +--initial-mass 9.838 --metallicity 0.01416 +--initial-mass 9.8419 --metallicity 0.01416 +--initial-mass 9.8458 --metallicity 0.01416 +--initial-mass 9.8497 --metallicity 0.01416 +--initial-mass 9.8537 --metallicity 0.01416 +--initial-mass 9.8576 --metallicity 0.01416 +--initial-mass 9.8615 --metallicity 0.01416 +--initial-mass 9.8655 --metallicity 0.01416 +--initial-mass 9.8694 --metallicity 0.01416 +--initial-mass 9.8733 --metallicity 0.01416 +--initial-mass 9.8773 --metallicity 0.01416 +--initial-mass 9.8812 --metallicity 0.01416 +--initial-mass 9.8851 --metallicity 0.01416 +--initial-mass 9.8891 --metallicity 0.01416 +--initial-mass 9.893 --metallicity 0.01416 +--initial-mass 9.8969 --metallicity 0.01416 +--initial-mass 9.9009 --metallicity 0.01416 +--initial-mass 9.9048 --metallicity 0.01416 +--initial-mass 9.9088 --metallicity 0.01416 +--initial-mass 9.9127 --metallicity 0.01416 +--initial-mass 9.9167 --metallicity 0.01416 +--initial-mass 9.9206 --metallicity 0.01416 +--initial-mass 9.9246 --metallicity 0.01416 +--initial-mass 9.9285 --metallicity 0.01416 +--initial-mass 9.9325 --metallicity 0.01416 +--initial-mass 9.9365 --metallicity 0.01416 +--initial-mass 9.9404 --metallicity 0.01416 +--initial-mass 9.9444 --metallicity 0.01416 +--initial-mass 9.9484 --metallicity 0.01416 +--initial-mass 9.9523 --metallicity 0.01416 +--initial-mass 9.9563 --metallicity 0.01416 +--initial-mass 9.9603 --metallicity 0.01416 +--initial-mass 9.9642 --metallicity 0.01416 +--initial-mass 9.9682 --metallicity 0.01416 +--initial-mass 9.9722 --metallicity 0.01416 +--initial-mass 9.9761 --metallicity 0.01416 +--initial-mass 9.9801 --metallicity 0.01416 +--initial-mass 9.9841 --metallicity 0.01416 +--initial-mass 9.9881 --metallicity 0.01416 +--initial-mass 9.9921 --metallicity 0.01416 +--initial-mass 9.996 --metallicity 0.01416 +--initial-mass 10.0 --metallicity 0.01416 +--initial-mass 10.004 --metallicity 0.01416 +--initial-mass 10.008 --metallicity 0.01416 +--initial-mass 10.012 --metallicity 0.01416 +--initial-mass 10.016 --metallicity 0.01416 +--initial-mass 10.02 --metallicity 0.01416 +--initial-mass 10.024 --metallicity 0.01416 +--initial-mass 10.028 --metallicity 0.01416 +--initial-mass 10.0319 --metallicity 0.01416 +--initial-mass 10.0359 --metallicity 0.01416 +--initial-mass 10.0399 --metallicity 0.01416 +--initial-mass 10.0439 --metallicity 0.01416 +--initial-mass 10.0479 --metallicity 0.01416 +--initial-mass 10.052 --metallicity 0.01416 +--initial-mass 10.056 --metallicity 0.01416 +--initial-mass 10.06 --metallicity 0.01416 +--initial-mass 10.064 --metallicity 0.01416 +--initial-mass 10.068 --metallicity 0.01416 +--initial-mass 10.072 --metallicity 0.01416 +--initial-mass 10.076 --metallicity 0.01416 +--initial-mass 10.08 --metallicity 0.01416 +--initial-mass 10.084 --metallicity 0.01416 +--initial-mass 10.0881 --metallicity 0.01416 +--initial-mass 10.0921 --metallicity 0.01416 +--initial-mass 10.0961 --metallicity 0.01416 +--initial-mass 10.1001 --metallicity 0.01416 +--initial-mass 10.1042 --metallicity 0.01416 +--initial-mass 10.1082 --metallicity 0.01416 +--initial-mass 10.1122 --metallicity 0.01416 +--initial-mass 10.1162 --metallicity 0.01416 +--initial-mass 10.1203 --metallicity 0.01416 +--initial-mass 10.1243 --metallicity 0.01416 +--initial-mass 10.1283 --metallicity 0.01416 +--initial-mass 10.1324 --metallicity 0.01416 +--initial-mass 10.1364 --metallicity 0.01416 +--initial-mass 10.1405 --metallicity 0.01416 +--initial-mass 10.1445 --metallicity 0.01416 +--initial-mass 10.1485 --metallicity 0.01416 +--initial-mass 10.1526 --metallicity 0.01416 +--initial-mass 10.1566 --metallicity 0.01416 +--initial-mass 10.1607 --metallicity 0.01416 +--initial-mass 10.1647 --metallicity 0.01416 +--initial-mass 10.1688 --metallicity 0.01416 +--initial-mass 10.1728 --metallicity 0.01416 +--initial-mass 10.1769 --metallicity 0.01416 +--initial-mass 10.1809 --metallicity 0.01416 +--initial-mass 10.185 --metallicity 0.01416 +--initial-mass 10.1891 --metallicity 0.01416 +--initial-mass 10.1931 --metallicity 0.01416 +--initial-mass 10.1972 --metallicity 0.01416 +--initial-mass 10.2013 --metallicity 0.01416 +--initial-mass 10.2053 --metallicity 0.01416 +--initial-mass 10.2094 --metallicity 0.01416 +--initial-mass 10.2135 --metallicity 0.01416 +--initial-mass 10.2175 --metallicity 0.01416 +--initial-mass 10.2216 --metallicity 0.01416 +--initial-mass 10.2257 --metallicity 0.01416 +--initial-mass 10.2297 --metallicity 0.01416 +--initial-mass 10.2338 --metallicity 0.01416 +--initial-mass 10.2379 --metallicity 0.01416 +--initial-mass 10.242 --metallicity 0.01416 +--initial-mass 10.2461 --metallicity 0.01416 +--initial-mass 10.2501 --metallicity 0.01416 +--initial-mass 10.2542 --metallicity 0.01416 +--initial-mass 10.2583 --metallicity 0.01416 +--initial-mass 10.2624 --metallicity 0.01416 +--initial-mass 10.2665 --metallicity 0.01416 +--initial-mass 10.2706 --metallicity 0.01416 +--initial-mass 10.2747 --metallicity 0.01416 +--initial-mass 10.2788 --metallicity 0.01416 +--initial-mass 10.2829 --metallicity 0.01416 +--initial-mass 10.287 --metallicity 0.01416 +--initial-mass 10.2911 --metallicity 0.01416 +--initial-mass 10.2952 --metallicity 0.01416 +--initial-mass 10.2993 --metallicity 0.01416 +--initial-mass 10.3034 --metallicity 0.01416 +--initial-mass 10.3075 --metallicity 0.01416 +--initial-mass 10.3116 --metallicity 0.01416 +--initial-mass 10.3157 --metallicity 0.01416 +--initial-mass 10.3198 --metallicity 0.01416 +--initial-mass 10.3239 --metallicity 0.01416 +--initial-mass 10.328 --metallicity 0.01416 +--initial-mass 10.3322 --metallicity 0.01416 +--initial-mass 10.3363 --metallicity 0.01416 +--initial-mass 10.3404 --metallicity 0.01416 +--initial-mass 10.3445 --metallicity 0.01416 +--initial-mass 10.3486 --metallicity 0.01416 +--initial-mass 10.3528 --metallicity 0.01416 +--initial-mass 10.3569 --metallicity 0.01416 +--initial-mass 10.361 --metallicity 0.01416 +--initial-mass 10.3652 --metallicity 0.01416 +--initial-mass 10.3693 --metallicity 0.01416 +--initial-mass 10.3734 --metallicity 0.01416 +--initial-mass 10.3776 --metallicity 0.01416 +--initial-mass 10.3817 --metallicity 0.01416 +--initial-mass 10.3858 --metallicity 0.01416 +--initial-mass 10.39 --metallicity 0.01416 +--initial-mass 10.3941 --metallicity 0.01416 +--initial-mass 10.3982 --metallicity 0.01416 +--initial-mass 10.4024 --metallicity 0.01416 +--initial-mass 10.4065 --metallicity 0.01416 +--initial-mass 10.4107 --metallicity 0.01416 +--initial-mass 10.4148 --metallicity 0.01416 +--initial-mass 10.419 --metallicity 0.01416 +--initial-mass 10.4231 --metallicity 0.01416 +--initial-mass 10.4273 --metallicity 0.01416 +--initial-mass 10.4314 --metallicity 0.01416 +--initial-mass 10.4356 --metallicity 0.01416 +--initial-mass 10.4398 --metallicity 0.01416 +--initial-mass 10.4439 --metallicity 0.01416 +--initial-mass 10.4481 --metallicity 0.01416 +--initial-mass 10.4523 --metallicity 0.01416 +--initial-mass 10.4564 --metallicity 0.01416 +--initial-mass 10.4606 --metallicity 0.01416 +--initial-mass 10.4648 --metallicity 0.01416 +--initial-mass 10.4689 --metallicity 0.01416 +--initial-mass 10.4731 --metallicity 0.01416 +--initial-mass 10.4773 --metallicity 0.01416 +--initial-mass 10.4814 --metallicity 0.01416 +--initial-mass 10.4856 --metallicity 0.01416 +--initial-mass 10.4898 --metallicity 0.01416 +--initial-mass 10.494 --metallicity 0.01416 +--initial-mass 10.4982 --metallicity 0.01416 +--initial-mass 10.5024 --metallicity 0.01416 +--initial-mass 10.5065 --metallicity 0.01416 +--initial-mass 10.5107 --metallicity 0.01416 +--initial-mass 10.5149 --metallicity 0.01416 +--initial-mass 10.5191 --metallicity 0.01416 +--initial-mass 10.5233 --metallicity 0.01416 +--initial-mass 10.5275 --metallicity 0.01416 +--initial-mass 10.5317 --metallicity 0.01416 +--initial-mass 10.5359 --metallicity 0.01416 +--initial-mass 10.5401 --metallicity 0.01416 +--initial-mass 10.5443 --metallicity 0.01416 +--initial-mass 10.5485 --metallicity 0.01416 +--initial-mass 10.5527 --metallicity 0.01416 +--initial-mass 10.5569 --metallicity 0.01416 +--initial-mass 10.5611 --metallicity 0.01416 +--initial-mass 10.5653 --metallicity 0.01416 +--initial-mass 10.5695 --metallicity 0.01416 +--initial-mass 10.5737 --metallicity 0.01416 +--initial-mass 10.578 --metallicity 0.01416 +--initial-mass 10.5822 --metallicity 0.01416 +--initial-mass 10.5864 --metallicity 0.01416 +--initial-mass 10.5906 --metallicity 0.01416 +--initial-mass 10.5948 --metallicity 0.01416 +--initial-mass 10.599 --metallicity 0.01416 +--initial-mass 10.6033 --metallicity 0.01416 +--initial-mass 10.6075 --metallicity 0.01416 +--initial-mass 10.6117 --metallicity 0.01416 +--initial-mass 10.616 --metallicity 0.01416 +--initial-mass 10.6202 --metallicity 0.01416 +--initial-mass 10.6244 --metallicity 0.01416 +--initial-mass 10.6287 --metallicity 0.01416 +--initial-mass 10.6329 --metallicity 0.01416 +--initial-mass 10.6371 --metallicity 0.01416 +--initial-mass 10.6414 --metallicity 0.01416 +--initial-mass 10.6456 --metallicity 0.01416 +--initial-mass 10.6498 --metallicity 0.01416 +--initial-mass 10.6541 --metallicity 0.01416 +--initial-mass 10.6583 --metallicity 0.01416 +--initial-mass 10.6626 --metallicity 0.01416 +--initial-mass 10.6668 --metallicity 0.01416 +--initial-mass 10.6711 --metallicity 0.01416 +--initial-mass 10.6753 --metallicity 0.01416 +--initial-mass 10.6796 --metallicity 0.01416 +--initial-mass 10.6839 --metallicity 0.01416 +--initial-mass 10.6881 --metallicity 0.01416 +--initial-mass 10.6924 --metallicity 0.01416 +--initial-mass 10.6966 --metallicity 0.01416 +--initial-mass 10.7009 --metallicity 0.01416 +--initial-mass 10.7052 --metallicity 0.01416 +--initial-mass 10.7094 --metallicity 0.01416 +--initial-mass 10.7137 --metallicity 0.01416 +--initial-mass 10.718 --metallicity 0.01416 +--initial-mass 10.7222 --metallicity 0.01416 +--initial-mass 10.7265 --metallicity 0.01416 +--initial-mass 10.7308 --metallicity 0.01416 +--initial-mass 10.7351 --metallicity 0.01416 +--initial-mass 10.7393 --metallicity 0.01416 +--initial-mass 10.7436 --metallicity 0.01416 +--initial-mass 10.7479 --metallicity 0.01416 +--initial-mass 10.7522 --metallicity 0.01416 +--initial-mass 10.7565 --metallicity 0.01416 +--initial-mass 10.7608 --metallicity 0.01416 +--initial-mass 10.765 --metallicity 0.01416 +--initial-mass 10.7693 --metallicity 0.01416 +--initial-mass 10.7736 --metallicity 0.01416 +--initial-mass 10.7779 --metallicity 0.01416 +--initial-mass 10.7822 --metallicity 0.01416 +--initial-mass 10.7865 --metallicity 0.01416 +--initial-mass 10.7908 --metallicity 0.01416 +--initial-mass 10.7951 --metallicity 0.01416 +--initial-mass 10.7994 --metallicity 0.01416 +--initial-mass 10.8037 --metallicity 0.01416 +--initial-mass 10.808 --metallicity 0.01416 +--initial-mass 10.8123 --metallicity 0.01416 +--initial-mass 10.8166 --metallicity 0.01416 +--initial-mass 10.821 --metallicity 0.01416 +--initial-mass 10.8253 --metallicity 0.01416 +--initial-mass 10.8296 --metallicity 0.01416 +--initial-mass 10.8339 --metallicity 0.01416 +--initial-mass 10.8382 --metallicity 0.01416 +--initial-mass 10.8425 --metallicity 0.01416 +--initial-mass 10.8469 --metallicity 0.01416 +--initial-mass 10.8512 --metallicity 0.01416 +--initial-mass 10.8555 --metallicity 0.01416 +--initial-mass 10.8598 --metallicity 0.01416 +--initial-mass 10.8642 --metallicity 0.01416 +--initial-mass 10.8685 --metallicity 0.01416 +--initial-mass 10.8728 --metallicity 0.01416 +--initial-mass 10.8772 --metallicity 0.01416 +--initial-mass 10.8815 --metallicity 0.01416 +--initial-mass 10.8858 --metallicity 0.01416 +--initial-mass 10.8902 --metallicity 0.01416 +--initial-mass 10.8945 --metallicity 0.01416 +--initial-mass 10.8989 --metallicity 0.01416 +--initial-mass 10.9032 --metallicity 0.01416 +--initial-mass 10.9075 --metallicity 0.01416 +--initial-mass 10.9119 --metallicity 0.01416 +--initial-mass 10.9162 --metallicity 0.01416 +--initial-mass 10.9206 --metallicity 0.01416 +--initial-mass 10.9249 --metallicity 0.01416 +--initial-mass 10.9293 --metallicity 0.01416 +--initial-mass 10.9336 --metallicity 0.01416 +--initial-mass 10.938 --metallicity 0.01416 +--initial-mass 10.9424 --metallicity 0.01416 +--initial-mass 10.9467 --metallicity 0.01416 +--initial-mass 10.9511 --metallicity 0.01416 +--initial-mass 10.9555 --metallicity 0.01416 +--initial-mass 10.9598 --metallicity 0.01416 +--initial-mass 10.9642 --metallicity 0.01416 +--initial-mass 10.9686 --metallicity 0.01416 +--initial-mass 10.9729 --metallicity 0.01416 +--initial-mass 10.9773 --metallicity 0.01416 +--initial-mass 10.9817 --metallicity 0.01416 +--initial-mass 10.9861 --metallicity 0.01416 +--initial-mass 10.9904 --metallicity 0.01416 +--initial-mass 10.9948 --metallicity 0.01416 +--initial-mass 10.9992 --metallicity 0.01416 +--initial-mass 11.0036 --metallicity 0.01416 +--initial-mass 11.008 --metallicity 0.01416 +--initial-mass 11.0124 --metallicity 0.01416 +--initial-mass 11.0167 --metallicity 0.01416 +--initial-mass 11.0211 --metallicity 0.01416 +--initial-mass 11.0255 --metallicity 0.01416 +--initial-mass 11.0299 --metallicity 0.01416 +--initial-mass 11.0343 --metallicity 0.01416 +--initial-mass 11.0387 --metallicity 0.01416 +--initial-mass 11.0431 --metallicity 0.01416 +--initial-mass 11.0475 --metallicity 0.01416 +--initial-mass 11.0519 --metallicity 0.01416 +--initial-mass 11.0563 --metallicity 0.01416 +--initial-mass 11.0607 --metallicity 0.01416 +--initial-mass 11.0651 --metallicity 0.01416 +--initial-mass 11.0695 --metallicity 0.01416 +--initial-mass 11.074 --metallicity 0.01416 +--initial-mass 11.0784 --metallicity 0.01416 +--initial-mass 11.0828 --metallicity 0.01416 +--initial-mass 11.0872 --metallicity 0.01416 +--initial-mass 11.0916 --metallicity 0.01416 +--initial-mass 11.096 --metallicity 0.01416 +--initial-mass 11.1005 --metallicity 0.01416 +--initial-mass 11.1049 --metallicity 0.01416 +--initial-mass 11.1093 --metallicity 0.01416 +--initial-mass 11.1137 --metallicity 0.01416 +--initial-mass 11.1182 --metallicity 0.01416 +--initial-mass 11.1226 --metallicity 0.01416 +--initial-mass 11.127 --metallicity 0.01416 +--initial-mass 11.1315 --metallicity 0.01416 +--initial-mass 11.1359 --metallicity 0.01416 +--initial-mass 11.1403 --metallicity 0.01416 +--initial-mass 11.1448 --metallicity 0.01416 +--initial-mass 11.1492 --metallicity 0.01416 +--initial-mass 11.1537 --metallicity 0.01416 +--initial-mass 11.1581 --metallicity 0.01416 +--initial-mass 11.1626 --metallicity 0.01416 +--initial-mass 11.167 --metallicity 0.01416 +--initial-mass 11.1715 --metallicity 0.01416 +--initial-mass 11.1759 --metallicity 0.01416 +--initial-mass 11.1804 --metallicity 0.01416 +--initial-mass 11.1848 --metallicity 0.01416 +--initial-mass 11.1893 --metallicity 0.01416 +--initial-mass 11.1937 --metallicity 0.01416 +--initial-mass 11.1982 --metallicity 0.01416 +--initial-mass 11.2027 --metallicity 0.01416 +--initial-mass 11.2071 --metallicity 0.01416 +--initial-mass 11.2116 --metallicity 0.01416 +--initial-mass 11.2161 --metallicity 0.01416 +--initial-mass 11.2205 --metallicity 0.01416 +--initial-mass 11.225 --metallicity 0.01416 +--initial-mass 11.2295 --metallicity 0.01416 +--initial-mass 11.234 --metallicity 0.01416 +--initial-mass 11.2384 --metallicity 0.01416 +--initial-mass 11.2429 --metallicity 0.01416 +--initial-mass 11.2474 --metallicity 0.01416 +--initial-mass 11.2519 --metallicity 0.01416 +--initial-mass 11.2564 --metallicity 0.01416 +--initial-mass 11.2609 --metallicity 0.01416 +--initial-mass 11.2653 --metallicity 0.01416 +--initial-mass 11.2698 --metallicity 0.01416 +--initial-mass 11.2743 --metallicity 0.01416 +--initial-mass 11.2788 --metallicity 0.01416 +--initial-mass 11.2833 --metallicity 0.01416 +--initial-mass 11.2878 --metallicity 0.01416 +--initial-mass 11.2923 --metallicity 0.01416 +--initial-mass 11.2968 --metallicity 0.01416 +--initial-mass 11.3013 --metallicity 0.01416 +--initial-mass 11.3058 --metallicity 0.01416 +--initial-mass 11.3103 --metallicity 0.01416 +--initial-mass 11.3148 --metallicity 0.01416 +--initial-mass 11.3193 --metallicity 0.01416 +--initial-mass 11.3238 --metallicity 0.01416 +--initial-mass 11.3284 --metallicity 0.01416 +--initial-mass 11.3329 --metallicity 0.01416 +--initial-mass 11.3374 --metallicity 0.01416 +--initial-mass 11.3419 --metallicity 0.01416 +--initial-mass 11.3464 --metallicity 0.01416 +--initial-mass 11.351 --metallicity 0.01416 +--initial-mass 11.3555 --metallicity 0.01416 +--initial-mass 11.36 --metallicity 0.01416 +--initial-mass 11.3645 --metallicity 0.01416 +--initial-mass 11.3691 --metallicity 0.01416 +--initial-mass 11.3736 --metallicity 0.01416 +--initial-mass 11.3781 --metallicity 0.01416 +--initial-mass 11.3827 --metallicity 0.01416 +--initial-mass 11.3872 --metallicity 0.01416 +--initial-mass 11.3917 --metallicity 0.01416 +--initial-mass 11.3963 --metallicity 0.01416 +--initial-mass 11.4008 --metallicity 0.01416 +--initial-mass 11.4054 --metallicity 0.01416 +--initial-mass 11.4099 --metallicity 0.01416 +--initial-mass 11.4145 --metallicity 0.01416 +--initial-mass 11.419 --metallicity 0.01416 +--initial-mass 11.4236 --metallicity 0.01416 +--initial-mass 11.4281 --metallicity 0.01416 +--initial-mass 11.4327 --metallicity 0.01416 +--initial-mass 11.4372 --metallicity 0.01416 +--initial-mass 11.4418 --metallicity 0.01416 +--initial-mass 11.4463 --metallicity 0.01416 +--initial-mass 11.4509 --metallicity 0.01416 +--initial-mass 11.4555 --metallicity 0.01416 +--initial-mass 11.46 --metallicity 0.01416 +--initial-mass 11.4646 --metallicity 0.01416 +--initial-mass 11.4692 --metallicity 0.01416 +--initial-mass 11.4737 --metallicity 0.01416 +--initial-mass 11.4783 --metallicity 0.01416 +--initial-mass 11.4829 --metallicity 0.01416 +--initial-mass 11.4875 --metallicity 0.01416 +--initial-mass 11.492 --metallicity 0.01416 +--initial-mass 11.4966 --metallicity 0.01416 +--initial-mass 11.5012 --metallicity 0.01416 +--initial-mass 11.5058 --metallicity 0.01416 +--initial-mass 11.5104 --metallicity 0.01416 +--initial-mass 11.515 --metallicity 0.01416 +--initial-mass 11.5195 --metallicity 0.01416 +--initial-mass 11.5241 --metallicity 0.01416 +--initial-mass 11.5287 --metallicity 0.01416 +--initial-mass 11.5333 --metallicity 0.01416 +--initial-mass 11.5379 --metallicity 0.01416 +--initial-mass 11.5425 --metallicity 0.01416 +--initial-mass 11.5471 --metallicity 0.01416 +--initial-mass 11.5517 --metallicity 0.01416 +--initial-mass 11.5563 --metallicity 0.01416 +--initial-mass 11.5609 --metallicity 0.01416 +--initial-mass 11.5655 --metallicity 0.01416 +--initial-mass 11.5701 --metallicity 0.01416 +--initial-mass 11.5748 --metallicity 0.01416 +--initial-mass 11.5794 --metallicity 0.01416 +--initial-mass 11.584 --metallicity 0.01416 +--initial-mass 11.5886 --metallicity 0.01416 +--initial-mass 11.5932 --metallicity 0.01416 +--initial-mass 11.5978 --metallicity 0.01416 +--initial-mass 11.6025 --metallicity 0.01416 +--initial-mass 11.6071 --metallicity 0.01416 +--initial-mass 11.6117 --metallicity 0.01416 +--initial-mass 11.6163 --metallicity 0.01416 +--initial-mass 11.621 --metallicity 0.01416 +--initial-mass 11.6256 --metallicity 0.01416 +--initial-mass 11.6302 --metallicity 0.01416 +--initial-mass 11.6349 --metallicity 0.01416 +--initial-mass 11.6395 --metallicity 0.01416 +--initial-mass 11.6442 --metallicity 0.01416 +--initial-mass 11.6488 --metallicity 0.01416 +--initial-mass 11.6534 --metallicity 0.01416 +--initial-mass 11.6581 --metallicity 0.01416 +--initial-mass 11.6627 --metallicity 0.01416 +--initial-mass 11.6674 --metallicity 0.01416 +--initial-mass 11.672 --metallicity 0.01416 +--initial-mass 11.6767 --metallicity 0.01416 +--initial-mass 11.6813 --metallicity 0.01416 +--initial-mass 11.686 --metallicity 0.01416 +--initial-mass 11.6906 --metallicity 0.01416 +--initial-mass 11.6953 --metallicity 0.01416 +--initial-mass 11.7 --metallicity 0.01416 +--initial-mass 11.7046 --metallicity 0.01416 +--initial-mass 11.7093 --metallicity 0.01416 +--initial-mass 11.714 --metallicity 0.01416 +--initial-mass 11.7186 --metallicity 0.01416 +--initial-mass 11.7233 --metallicity 0.01416 +--initial-mass 11.728 --metallicity 0.01416 +--initial-mass 11.7326 --metallicity 0.01416 +--initial-mass 11.7373 --metallicity 0.01416 +--initial-mass 11.742 --metallicity 0.01416 +--initial-mass 11.7467 --metallicity 0.01416 +--initial-mass 11.7514 --metallicity 0.01416 +--initial-mass 11.756 --metallicity 0.01416 +--initial-mass 11.7607 --metallicity 0.01416 +--initial-mass 11.7654 --metallicity 0.01416 +--initial-mass 11.7701 --metallicity 0.01416 +--initial-mass 11.7748 --metallicity 0.01416 +--initial-mass 11.7795 --metallicity 0.01416 +--initial-mass 11.7842 --metallicity 0.01416 +--initial-mass 11.7889 --metallicity 0.01416 +--initial-mass 11.7936 --metallicity 0.01416 +--initial-mass 11.7983 --metallicity 0.01416 +--initial-mass 11.803 --metallicity 0.01416 +--initial-mass 11.8077 --metallicity 0.01416 +--initial-mass 11.8124 --metallicity 0.01416 +--initial-mass 11.8171 --metallicity 0.01416 +--initial-mass 11.8218 --metallicity 0.01416 +--initial-mass 11.8265 --metallicity 0.01416 +--initial-mass 11.8312 --metallicity 0.01416 +--initial-mass 11.8359 --metallicity 0.01416 +--initial-mass 11.8407 --metallicity 0.01416 +--initial-mass 11.8454 --metallicity 0.01416 +--initial-mass 11.8501 --metallicity 0.01416 +--initial-mass 11.8548 --metallicity 0.01416 +--initial-mass 11.8596 --metallicity 0.01416 +--initial-mass 11.8643 --metallicity 0.01416 +--initial-mass 11.869 --metallicity 0.01416 +--initial-mass 11.8737 --metallicity 0.01416 +--initial-mass 11.8785 --metallicity 0.01416 +--initial-mass 11.8832 --metallicity 0.01416 +--initial-mass 11.8879 --metallicity 0.01416 +--initial-mass 11.8927 --metallicity 0.01416 +--initial-mass 11.8974 --metallicity 0.01416 +--initial-mass 11.9022 --metallicity 0.01416 +--initial-mass 11.9069 --metallicity 0.01416 +--initial-mass 11.9117 --metallicity 0.01416 +--initial-mass 11.9164 --metallicity 0.01416 +--initial-mass 11.9211 --metallicity 0.01416 +--initial-mass 11.9259 --metallicity 0.01416 +--initial-mass 11.9307 --metallicity 0.01416 +--initial-mass 11.9354 --metallicity 0.01416 +--initial-mass 11.9402 --metallicity 0.01416 +--initial-mass 11.9449 --metallicity 0.01416 +--initial-mass 11.9497 --metallicity 0.01416 +--initial-mass 11.9544 --metallicity 0.01416 +--initial-mass 11.9592 --metallicity 0.01416 +--initial-mass 11.964 --metallicity 0.01416 +--initial-mass 11.9687 --metallicity 0.01416 +--initial-mass 11.9735 --metallicity 0.01416 +--initial-mass 11.9783 --metallicity 0.01416 +--initial-mass 11.9831 --metallicity 0.01416 +--initial-mass 11.9878 --metallicity 0.01416 +--initial-mass 11.9926 --metallicity 0.01416 +--initial-mass 11.9974 --metallicity 0.01416 +--initial-mass 12.0022 --metallicity 0.01416 +--initial-mass 12.007 --metallicity 0.01416 +--initial-mass 12.0117 --metallicity 0.01416 +--initial-mass 12.0165 --metallicity 0.01416 +--initial-mass 12.0213 --metallicity 0.01416 +--initial-mass 12.0261 --metallicity 0.01416 +--initial-mass 12.0309 --metallicity 0.01416 +--initial-mass 12.0357 --metallicity 0.01416 +--initial-mass 12.0405 --metallicity 0.01416 +--initial-mass 12.0453 --metallicity 0.01416 +--initial-mass 12.0501 --metallicity 0.01416 +--initial-mass 12.0549 --metallicity 0.01416 +--initial-mass 12.0597 --metallicity 0.01416 +--initial-mass 12.0645 --metallicity 0.01416 +--initial-mass 12.0693 --metallicity 0.01416 +--initial-mass 12.0741 --metallicity 0.01416 +--initial-mass 12.0789 --metallicity 0.01416 +--initial-mass 12.0838 --metallicity 0.01416 +--initial-mass 12.0886 --metallicity 0.01416 +--initial-mass 12.0934 --metallicity 0.01416 +--initial-mass 12.0982 --metallicity 0.01416 +--initial-mass 12.103 --metallicity 0.01416 +--initial-mass 12.1079 --metallicity 0.01416 +--initial-mass 12.1127 --metallicity 0.01416 +--initial-mass 12.1175 --metallicity 0.01416 +--initial-mass 12.1223 --metallicity 0.01416 +--initial-mass 12.1272 --metallicity 0.01416 +--initial-mass 12.132 --metallicity 0.01416 +--initial-mass 12.1368 --metallicity 0.01416 +--initial-mass 12.1417 --metallicity 0.01416 +--initial-mass 12.1465 --metallicity 0.01416 +--initial-mass 12.1514 --metallicity 0.01416 +--initial-mass 12.1562 --metallicity 0.01416 +--initial-mass 12.161 --metallicity 0.01416 +--initial-mass 12.1659 --metallicity 0.01416 +--initial-mass 12.1707 --metallicity 0.01416 +--initial-mass 12.1756 --metallicity 0.01416 +--initial-mass 12.1804 --metallicity 0.01416 +--initial-mass 12.1853 --metallicity 0.01416 +--initial-mass 12.1902 --metallicity 0.01416 +--initial-mass 12.195 --metallicity 0.01416 +--initial-mass 12.1999 --metallicity 0.01416 +--initial-mass 12.2047 --metallicity 0.01416 +--initial-mass 12.2096 --metallicity 0.01416 +--initial-mass 12.2145 --metallicity 0.01416 +--initial-mass 12.2193 --metallicity 0.01416 +--initial-mass 12.2242 --metallicity 0.01416 +--initial-mass 12.2291 --metallicity 0.01416 +--initial-mass 12.2339 --metallicity 0.01416 +--initial-mass 12.2388 --metallicity 0.01416 +--initial-mass 12.2437 --metallicity 0.01416 +--initial-mass 12.2486 --metallicity 0.01416 +--initial-mass 12.2535 --metallicity 0.01416 +--initial-mass 12.2583 --metallicity 0.01416 +--initial-mass 12.2632 --metallicity 0.01416 +--initial-mass 12.2681 --metallicity 0.01416 +--initial-mass 12.273 --metallicity 0.01416 +--initial-mass 12.2779 --metallicity 0.01416 +--initial-mass 12.2828 --metallicity 0.01416 +--initial-mass 12.2877 --metallicity 0.01416 +--initial-mass 12.2926 --metallicity 0.01416 +--initial-mass 12.2975 --metallicity 0.01416 +--initial-mass 12.3024 --metallicity 0.01416 +--initial-mass 12.3073 --metallicity 0.01416 +--initial-mass 12.3122 --metallicity 0.01416 +--initial-mass 12.3171 --metallicity 0.01416 +--initial-mass 12.322 --metallicity 0.01416 +--initial-mass 12.3269 --metallicity 0.01416 +--initial-mass 12.3318 --metallicity 0.01416 +--initial-mass 12.3368 --metallicity 0.01416 +--initial-mass 12.3417 --metallicity 0.01416 +--initial-mass 12.3466 --metallicity 0.01416 +--initial-mass 12.3515 --metallicity 0.01416 +--initial-mass 12.3564 --metallicity 0.01416 +--initial-mass 12.3614 --metallicity 0.01416 +--initial-mass 12.3663 --metallicity 0.01416 +--initial-mass 12.3712 --metallicity 0.01416 +--initial-mass 12.3761 --metallicity 0.01416 +--initial-mass 12.3811 --metallicity 0.01416 +--initial-mass 12.386 --metallicity 0.01416 +--initial-mass 12.3909 --metallicity 0.01416 +--initial-mass 12.3959 --metallicity 0.01416 +--initial-mass 12.4008 --metallicity 0.01416 +--initial-mass 12.4058 --metallicity 0.01416 +--initial-mass 12.4107 --metallicity 0.01416 +--initial-mass 12.4157 --metallicity 0.01416 +--initial-mass 12.4206 --metallicity 0.01416 +--initial-mass 12.4256 --metallicity 0.01416 +--initial-mass 12.4305 --metallicity 0.01416 +--initial-mass 12.4355 --metallicity 0.01416 +--initial-mass 12.4404 --metallicity 0.01416 +--initial-mass 12.4454 --metallicity 0.01416 +--initial-mass 12.4503 --metallicity 0.01416 +--initial-mass 12.4553 --metallicity 0.01416 +--initial-mass 12.4603 --metallicity 0.01416 +--initial-mass 12.4652 --metallicity 0.01416 +--initial-mass 12.4702 --metallicity 0.01416 +--initial-mass 12.4752 --metallicity 0.01416 +--initial-mass 12.4801 --metallicity 0.01416 +--initial-mass 12.4851 --metallicity 0.01416 +--initial-mass 12.4901 --metallicity 0.01416 +--initial-mass 12.4951 --metallicity 0.01416 +--initial-mass 12.5 --metallicity 0.01416 +--initial-mass 12.505 --metallicity 0.01416 +--initial-mass 12.51 --metallicity 0.01416 +--initial-mass 12.515 --metallicity 0.01416 +--initial-mass 12.52 --metallicity 0.01416 +--initial-mass 12.525 --metallicity 0.01416 +--initial-mass 12.53 --metallicity 0.01416 +--initial-mass 12.535 --metallicity 0.01416 +--initial-mass 12.54 --metallicity 0.01416 +--initial-mass 12.545 --metallicity 0.01416 +--initial-mass 12.55 --metallicity 0.01416 +--initial-mass 12.555 --metallicity 0.01416 +--initial-mass 12.56 --metallicity 0.01416 +--initial-mass 12.565 --metallicity 0.01416 +--initial-mass 12.57 --metallicity 0.01416 +--initial-mass 12.575 --metallicity 0.01416 +--initial-mass 12.58 --metallicity 0.01416 +--initial-mass 12.585 --metallicity 0.01416 +--initial-mass 12.59 --metallicity 0.01416 +--initial-mass 12.595 --metallicity 0.01416 +--initial-mass 12.6001 --metallicity 0.01416 +--initial-mass 12.6051 --metallicity 0.01416 +--initial-mass 12.6101 --metallicity 0.01416 +--initial-mass 12.6151 --metallicity 0.01416 +--initial-mass 12.6202 --metallicity 0.01416 +--initial-mass 12.6252 --metallicity 0.01416 +--initial-mass 12.6302 --metallicity 0.01416 +--initial-mass 12.6353 --metallicity 0.01416 +--initial-mass 12.6403 --metallicity 0.01416 +--initial-mass 12.6453 --metallicity 0.01416 +--initial-mass 12.6504 --metallicity 0.01416 +--initial-mass 12.6554 --metallicity 0.01416 +--initial-mass 12.6605 --metallicity 0.01416 +--initial-mass 12.6655 --metallicity 0.01416 +--initial-mass 12.6706 --metallicity 0.01416 +--initial-mass 12.6756 --metallicity 0.01416 +--initial-mass 12.6807 --metallicity 0.01416 +--initial-mass 12.6857 --metallicity 0.01416 +--initial-mass 12.6908 --metallicity 0.01416 +--initial-mass 12.6958 --metallicity 0.01416 +--initial-mass 12.7009 --metallicity 0.01416 +--initial-mass 12.7059 --metallicity 0.01416 +--initial-mass 12.711 --metallicity 0.01416 +--initial-mass 12.7161 --metallicity 0.01416 +--initial-mass 12.7211 --metallicity 0.01416 +--initial-mass 12.7262 --metallicity 0.01416 +--initial-mass 12.7313 --metallicity 0.01416 +--initial-mass 12.7364 --metallicity 0.01416 +--initial-mass 12.7414 --metallicity 0.01416 +--initial-mass 12.7465 --metallicity 0.01416 +--initial-mass 12.7516 --metallicity 0.01416 +--initial-mass 12.7567 --metallicity 0.01416 +--initial-mass 12.7618 --metallicity 0.01416 +--initial-mass 12.7668 --metallicity 0.01416 +--initial-mass 12.7719 --metallicity 0.01416 +--initial-mass 12.777 --metallicity 0.01416 +--initial-mass 12.7821 --metallicity 0.01416 +--initial-mass 12.7872 --metallicity 0.01416 +--initial-mass 12.7923 --metallicity 0.01416 +--initial-mass 12.7974 --metallicity 0.01416 +--initial-mass 12.8025 --metallicity 0.01416 +--initial-mass 12.8076 --metallicity 0.01416 +--initial-mass 12.8127 --metallicity 0.01416 +--initial-mass 12.8178 --metallicity 0.01416 +--initial-mass 12.8229 --metallicity 0.01416 +--initial-mass 12.828 --metallicity 0.01416 +--initial-mass 12.8331 --metallicity 0.01416 +--initial-mass 12.8383 --metallicity 0.01416 +--initial-mass 12.8434 --metallicity 0.01416 +--initial-mass 12.8485 --metallicity 0.01416 +--initial-mass 12.8536 --metallicity 0.01416 +--initial-mass 12.8587 --metallicity 0.01416 +--initial-mass 12.8639 --metallicity 0.01416 +--initial-mass 12.869 --metallicity 0.01416 +--initial-mass 12.8741 --metallicity 0.01416 +--initial-mass 12.8793 --metallicity 0.01416 +--initial-mass 12.8844 --metallicity 0.01416 +--initial-mass 12.8895 --metallicity 0.01416 +--initial-mass 12.8947 --metallicity 0.01416 +--initial-mass 12.8998 --metallicity 0.01416 +--initial-mass 12.9049 --metallicity 0.01416 +--initial-mass 12.9101 --metallicity 0.01416 +--initial-mass 12.9152 --metallicity 0.01416 +--initial-mass 12.9204 --metallicity 0.01416 +--initial-mass 12.9255 --metallicity 0.01416 +--initial-mass 12.9307 --metallicity 0.01416 +--initial-mass 12.9358 --metallicity 0.01416 +--initial-mass 12.941 --metallicity 0.01416 +--initial-mass 12.9461 --metallicity 0.01416 +--initial-mass 12.9513 --metallicity 0.01416 +--initial-mass 12.9565 --metallicity 0.01416 +--initial-mass 12.9616 --metallicity 0.01416 +--initial-mass 12.9668 --metallicity 0.01416 +--initial-mass 12.972 --metallicity 0.01416 +--initial-mass 12.9771 --metallicity 0.01416 +--initial-mass 12.9823 --metallicity 0.01416 +--initial-mass 12.9875 --metallicity 0.01416 +--initial-mass 12.9927 --metallicity 0.01416 +--initial-mass 12.9978 --metallicity 0.01416 +--initial-mass 13.003 --metallicity 0.01416 +--initial-mass 13.0082 --metallicity 0.01416 +--initial-mass 13.0134 --metallicity 0.01416 +--initial-mass 13.0186 --metallicity 0.01416 +--initial-mass 13.0238 --metallicity 0.01416 +--initial-mass 13.0289 --metallicity 0.01416 +--initial-mass 13.0341 --metallicity 0.01416 +--initial-mass 13.0393 --metallicity 0.01416 +--initial-mass 13.0445 --metallicity 0.01416 +--initial-mass 13.0497 --metallicity 0.01416 +--initial-mass 13.0549 --metallicity 0.01416 +--initial-mass 13.0601 --metallicity 0.01416 +--initial-mass 13.0653 --metallicity 0.01416 +--initial-mass 13.0705 --metallicity 0.01416 +--initial-mass 13.0758 --metallicity 0.01416 +--initial-mass 13.081 --metallicity 0.01416 +--initial-mass 13.0862 --metallicity 0.01416 +--initial-mass 13.0914 --metallicity 0.01416 +--initial-mass 13.0966 --metallicity 0.01416 +--initial-mass 13.1018 --metallicity 0.01416 +--initial-mass 13.1071 --metallicity 0.01416 +--initial-mass 13.1123 --metallicity 0.01416 +--initial-mass 13.1175 --metallicity 0.01416 +--initial-mass 13.1227 --metallicity 0.01416 +--initial-mass 13.128 --metallicity 0.01416 +--initial-mass 13.1332 --metallicity 0.01416 +--initial-mass 13.1384 --metallicity 0.01416 +--initial-mass 13.1437 --metallicity 0.01416 +--initial-mass 13.1489 --metallicity 0.01416 +--initial-mass 13.1541 --metallicity 0.01416 +--initial-mass 13.1594 --metallicity 0.01416 +--initial-mass 13.1646 --metallicity 0.01416 +--initial-mass 13.1699 --metallicity 0.01416 +--initial-mass 13.1751 --metallicity 0.01416 +--initial-mass 13.1804 --metallicity 0.01416 +--initial-mass 13.1856 --metallicity 0.01416 +--initial-mass 13.1909 --metallicity 0.01416 +--initial-mass 13.1961 --metallicity 0.01416 +--initial-mass 13.2014 --metallicity 0.01416 +--initial-mass 13.2067 --metallicity 0.01416 +--initial-mass 13.2119 --metallicity 0.01416 +--initial-mass 13.2172 --metallicity 0.01416 +--initial-mass 13.2225 --metallicity 0.01416 +--initial-mass 13.2277 --metallicity 0.01416 +--initial-mass 13.233 --metallicity 0.01416 +--initial-mass 13.2383 --metallicity 0.01416 +--initial-mass 13.2436 --metallicity 0.01416 +--initial-mass 13.2488 --metallicity 0.01416 +--initial-mass 13.2541 --metallicity 0.01416 +--initial-mass 13.2594 --metallicity 0.01416 +--initial-mass 13.2647 --metallicity 0.01416 +--initial-mass 13.27 --metallicity 0.01416 +--initial-mass 13.2753 --metallicity 0.01416 +--initial-mass 13.2805 --metallicity 0.01416 +--initial-mass 13.2858 --metallicity 0.01416 +--initial-mass 13.2911 --metallicity 0.01416 +--initial-mass 13.2964 --metallicity 0.01416 +--initial-mass 13.3017 --metallicity 0.01416 +--initial-mass 13.307 --metallicity 0.01416 +--initial-mass 13.3123 --metallicity 0.01416 +--initial-mass 13.3176 --metallicity 0.01416 +--initial-mass 13.323 --metallicity 0.01416 +--initial-mass 13.3283 --metallicity 0.01416 +--initial-mass 13.3336 --metallicity 0.01416 +--initial-mass 13.3389 --metallicity 0.01416 +--initial-mass 13.3442 --metallicity 0.01416 +--initial-mass 13.3495 --metallicity 0.01416 +--initial-mass 13.3548 --metallicity 0.01416 +--initial-mass 13.3602 --metallicity 0.01416 +--initial-mass 13.3655 --metallicity 0.01416 +--initial-mass 13.3708 --metallicity 0.01416 +--initial-mass 13.3761 --metallicity 0.01416 +--initial-mass 13.3815 --metallicity 0.01416 +--initial-mass 13.3868 --metallicity 0.01416 +--initial-mass 13.3921 --metallicity 0.01416 +--initial-mass 13.3975 --metallicity 0.01416 +--initial-mass 13.4028 --metallicity 0.01416 +--initial-mass 13.4082 --metallicity 0.01416 +--initial-mass 13.4135 --metallicity 0.01416 +--initial-mass 13.4189 --metallicity 0.01416 +--initial-mass 13.4242 --metallicity 0.01416 +--initial-mass 13.4296 --metallicity 0.01416 +--initial-mass 13.4349 --metallicity 0.01416 +--initial-mass 13.4403 --metallicity 0.01416 +--initial-mass 13.4456 --metallicity 0.01416 +--initial-mass 13.451 --metallicity 0.01416 +--initial-mass 13.4563 --metallicity 0.01416 +--initial-mass 13.4617 --metallicity 0.01416 +--initial-mass 13.4671 --metallicity 0.01416 +--initial-mass 13.4724 --metallicity 0.01416 +--initial-mass 13.4778 --metallicity 0.01416 +--initial-mass 13.4832 --metallicity 0.01416 +--initial-mass 13.4885 --metallicity 0.01416 +--initial-mass 13.4939 --metallicity 0.01416 +--initial-mass 13.4993 --metallicity 0.01416 +--initial-mass 13.5047 --metallicity 0.01416 +--initial-mass 13.5101 --metallicity 0.01416 +--initial-mass 13.5154 --metallicity 0.01416 +--initial-mass 13.5208 --metallicity 0.01416 +--initial-mass 13.5262 --metallicity 0.01416 +--initial-mass 13.5316 --metallicity 0.01416 +--initial-mass 13.537 --metallicity 0.01416 +--initial-mass 13.5424 --metallicity 0.01416 +--initial-mass 13.5478 --metallicity 0.01416 +--initial-mass 13.5532 --metallicity 0.01416 +--initial-mass 13.5586 --metallicity 0.01416 +--initial-mass 13.564 --metallicity 0.01416 +--initial-mass 13.5694 --metallicity 0.01416 +--initial-mass 13.5748 --metallicity 0.01416 +--initial-mass 13.5802 --metallicity 0.01416 +--initial-mass 13.5856 --metallicity 0.01416 +--initial-mass 13.5911 --metallicity 0.01416 +--initial-mass 13.5965 --metallicity 0.01416 +--initial-mass 13.6019 --metallicity 0.01416 +--initial-mass 13.6073 --metallicity 0.01416 +--initial-mass 13.6127 --metallicity 0.01416 +--initial-mass 13.6182 --metallicity 0.01416 +--initial-mass 13.6236 --metallicity 0.01416 +--initial-mass 13.629 --metallicity 0.01416 +--initial-mass 13.6344 --metallicity 0.01416 +--initial-mass 13.6399 --metallicity 0.01416 +--initial-mass 13.6453 --metallicity 0.01416 +--initial-mass 13.6508 --metallicity 0.01416 +--initial-mass 13.6562 --metallicity 0.01416 +--initial-mass 13.6616 --metallicity 0.01416 +--initial-mass 13.6671 --metallicity 0.01416 +--initial-mass 13.6725 --metallicity 0.01416 +--initial-mass 13.678 --metallicity 0.01416 +--initial-mass 13.6834 --metallicity 0.01416 +--initial-mass 13.6889 --metallicity 0.01416 +--initial-mass 13.6943 --metallicity 0.01416 +--initial-mass 13.6998 --metallicity 0.01416 +--initial-mass 13.7053 --metallicity 0.01416 +--initial-mass 13.7107 --metallicity 0.01416 +--initial-mass 13.7162 --metallicity 0.01416 +--initial-mass 13.7217 --metallicity 0.01416 +--initial-mass 13.7271 --metallicity 0.01416 +--initial-mass 13.7326 --metallicity 0.01416 +--initial-mass 13.7381 --metallicity 0.01416 +--initial-mass 13.7435 --metallicity 0.01416 +--initial-mass 13.749 --metallicity 0.01416 +--initial-mass 13.7545 --metallicity 0.01416 +--initial-mass 13.76 --metallicity 0.01416 +--initial-mass 13.7655 --metallicity 0.01416 +--initial-mass 13.771 --metallicity 0.01416 +--initial-mass 13.7764 --metallicity 0.01416 +--initial-mass 13.7819 --metallicity 0.01416 +--initial-mass 13.7874 --metallicity 0.01416 +--initial-mass 13.7929 --metallicity 0.01416 +--initial-mass 13.7984 --metallicity 0.01416 +--initial-mass 13.8039 --metallicity 0.01416 +--initial-mass 13.8094 --metallicity 0.01416 +--initial-mass 13.8149 --metallicity 0.01416 +--initial-mass 13.8204 --metallicity 0.01416 +--initial-mass 13.8259 --metallicity 0.01416 +--initial-mass 13.8314 --metallicity 0.01416 +--initial-mass 13.837 --metallicity 0.01416 +--initial-mass 13.8425 --metallicity 0.01416 +--initial-mass 13.848 --metallicity 0.01416 +--initial-mass 13.8535 --metallicity 0.01416 +--initial-mass 13.859 --metallicity 0.01416 +--initial-mass 13.8646 --metallicity 0.01416 +--initial-mass 13.8701 --metallicity 0.01416 +--initial-mass 13.8756 --metallicity 0.01416 +--initial-mass 13.8811 --metallicity 0.01416 +--initial-mass 13.8867 --metallicity 0.01416 +--initial-mass 13.8922 --metallicity 0.01416 +--initial-mass 13.8977 --metallicity 0.01416 +--initial-mass 13.9033 --metallicity 0.01416 +--initial-mass 13.9088 --metallicity 0.01416 +--initial-mass 13.9144 --metallicity 0.01416 +--initial-mass 13.9199 --metallicity 0.01416 +--initial-mass 13.9255 --metallicity 0.01416 +--initial-mass 13.931 --metallicity 0.01416 +--initial-mass 13.9366 --metallicity 0.01416 +--initial-mass 13.9421 --metallicity 0.01416 +--initial-mass 13.9477 --metallicity 0.01416 +--initial-mass 13.9532 --metallicity 0.01416 +--initial-mass 13.9588 --metallicity 0.01416 +--initial-mass 13.9644 --metallicity 0.01416 +--initial-mass 13.9699 --metallicity 0.01416 +--initial-mass 13.9755 --metallicity 0.01416 +--initial-mass 13.9811 --metallicity 0.01416 +--initial-mass 13.9866 --metallicity 0.01416 +--initial-mass 13.9922 --metallicity 0.01416 +--initial-mass 13.9978 --metallicity 0.01416 +--initial-mass 14.0034 --metallicity 0.01416 +--initial-mass 14.0089 --metallicity 0.01416 +--initial-mass 14.0145 --metallicity 0.01416 +--initial-mass 14.0201 --metallicity 0.01416 +--initial-mass 14.0257 --metallicity 0.01416 +--initial-mass 14.0313 --metallicity 0.01416 +--initial-mass 14.0369 --metallicity 0.01416 +--initial-mass 14.0425 --metallicity 0.01416 +--initial-mass 14.0481 --metallicity 0.01416 +--initial-mass 14.0537 --metallicity 0.01416 +--initial-mass 14.0593 --metallicity 0.01416 +--initial-mass 14.0649 --metallicity 0.01416 +--initial-mass 14.0705 --metallicity 0.01416 +--initial-mass 14.0761 --metallicity 0.01416 +--initial-mass 14.0817 --metallicity 0.01416 +--initial-mass 14.0873 --metallicity 0.01416 +--initial-mass 14.0929 --metallicity 0.01416 +--initial-mass 14.0985 --metallicity 0.01416 +--initial-mass 14.1042 --metallicity 0.01416 +--initial-mass 14.1098 --metallicity 0.01416 +--initial-mass 14.1154 --metallicity 0.01416 +--initial-mass 14.121 --metallicity 0.01416 +--initial-mass 14.1267 --metallicity 0.01416 +--initial-mass 14.1323 --metallicity 0.01416 +--initial-mass 14.1379 --metallicity 0.01416 +--initial-mass 14.1436 --metallicity 0.01416 +--initial-mass 14.1492 --metallicity 0.01416 +--initial-mass 14.1548 --metallicity 0.01416 +--initial-mass 14.1605 --metallicity 0.01416 +--initial-mass 14.1661 --metallicity 0.01416 +--initial-mass 14.1718 --metallicity 0.01416 +--initial-mass 14.1774 --metallicity 0.01416 +--initial-mass 14.1831 --metallicity 0.01416 +--initial-mass 14.1887 --metallicity 0.01416 +--initial-mass 14.1944 --metallicity 0.01416 +--initial-mass 14.2 --metallicity 0.01416 +--initial-mass 14.2057 --metallicity 0.01416 +--initial-mass 14.2113 --metallicity 0.01416 +--initial-mass 14.217 --metallicity 0.01416 +--initial-mass 14.2227 --metallicity 0.01416 +--initial-mass 14.2283 --metallicity 0.01416 +--initial-mass 14.234 --metallicity 0.01416 +--initial-mass 14.2397 --metallicity 0.01416 +--initial-mass 14.2454 --metallicity 0.01416 +--initial-mass 14.251 --metallicity 0.01416 +--initial-mass 14.2567 --metallicity 0.01416 +--initial-mass 14.2624 --metallicity 0.01416 +--initial-mass 14.2681 --metallicity 0.01416 +--initial-mass 14.2738 --metallicity 0.01416 +--initial-mass 14.2795 --metallicity 0.01416 +--initial-mass 14.2852 --metallicity 0.01416 +--initial-mass 14.2909 --metallicity 0.01416 +--initial-mass 14.2965 --metallicity 0.01416 +--initial-mass 14.3022 --metallicity 0.01416 +--initial-mass 14.3079 --metallicity 0.01416 +--initial-mass 14.3136 --metallicity 0.01416 +--initial-mass 14.3194 --metallicity 0.01416 +--initial-mass 14.3251 --metallicity 0.01416 +--initial-mass 14.3308 --metallicity 0.01416 +--initial-mass 14.3365 --metallicity 0.01416 +--initial-mass 14.3422 --metallicity 0.01416 +--initial-mass 14.3479 --metallicity 0.01416 +--initial-mass 14.3536 --metallicity 0.01416 +--initial-mass 14.3593 --metallicity 0.01416 +--initial-mass 14.3651 --metallicity 0.01416 +--initial-mass 14.3708 --metallicity 0.01416 +--initial-mass 14.3765 --metallicity 0.01416 +--initial-mass 14.3823 --metallicity 0.01416 +--initial-mass 14.388 --metallicity 0.01416 +--initial-mass 14.3937 --metallicity 0.01416 +--initial-mass 14.3995 --metallicity 0.01416 +--initial-mass 14.4052 --metallicity 0.01416 +--initial-mass 14.4109 --metallicity 0.01416 +--initial-mass 14.4167 --metallicity 0.01416 +--initial-mass 14.4224 --metallicity 0.01416 +--initial-mass 14.4282 --metallicity 0.01416 +--initial-mass 14.4339 --metallicity 0.01416 +--initial-mass 14.4397 --metallicity 0.01416 +--initial-mass 14.4454 --metallicity 0.01416 +--initial-mass 14.4512 --metallicity 0.01416 +--initial-mass 14.457 --metallicity 0.01416 +--initial-mass 14.4627 --metallicity 0.01416 +--initial-mass 14.4685 --metallicity 0.01416 +--initial-mass 14.4742 --metallicity 0.01416 +--initial-mass 14.48 --metallicity 0.01416 +--initial-mass 14.4858 --metallicity 0.01416 +--initial-mass 14.4916 --metallicity 0.01416 +--initial-mass 14.4973 --metallicity 0.01416 +--initial-mass 14.5031 --metallicity 0.01416 +--initial-mass 14.5089 --metallicity 0.01416 +--initial-mass 14.5147 --metallicity 0.01416 +--initial-mass 14.5205 --metallicity 0.01416 +--initial-mass 14.5262 --metallicity 0.01416 +--initial-mass 14.532 --metallicity 0.01416 +--initial-mass 14.5378 --metallicity 0.01416 +--initial-mass 14.5436 --metallicity 0.01416 +--initial-mass 14.5494 --metallicity 0.01416 +--initial-mass 14.5552 --metallicity 0.01416 +--initial-mass 14.561 --metallicity 0.01416 +--initial-mass 14.5668 --metallicity 0.01416 +--initial-mass 14.5726 --metallicity 0.01416 +--initial-mass 14.5784 --metallicity 0.01416 +--initial-mass 14.5842 --metallicity 0.01416 +--initial-mass 14.5901 --metallicity 0.01416 +--initial-mass 14.5959 --metallicity 0.01416 +--initial-mass 14.6017 --metallicity 0.01416 +--initial-mass 14.6075 --metallicity 0.01416 +--initial-mass 14.6133 --metallicity 0.01416 +--initial-mass 14.6192 --metallicity 0.01416 +--initial-mass 14.625 --metallicity 0.01416 +--initial-mass 14.6308 --metallicity 0.01416 +--initial-mass 14.6366 --metallicity 0.01416 +--initial-mass 14.6425 --metallicity 0.01416 +--initial-mass 14.6483 --metallicity 0.01416 +--initial-mass 14.6541 --metallicity 0.01416 +--initial-mass 14.66 --metallicity 0.01416 +--initial-mass 14.6658 --metallicity 0.01416 +--initial-mass 14.6717 --metallicity 0.01416 +--initial-mass 14.6775 --metallicity 0.01416 +--initial-mass 14.6834 --metallicity 0.01416 +--initial-mass 14.6892 --metallicity 0.01416 +--initial-mass 14.6951 --metallicity 0.01416 +--initial-mass 14.7009 --metallicity 0.01416 +--initial-mass 14.7068 --metallicity 0.01416 +--initial-mass 14.7127 --metallicity 0.01416 +--initial-mass 14.7185 --metallicity 0.01416 +--initial-mass 14.7244 --metallicity 0.01416 +--initial-mass 14.7303 --metallicity 0.01416 +--initial-mass 14.7361 --metallicity 0.01416 +--initial-mass 14.742 --metallicity 0.01416 +--initial-mass 14.7479 --metallicity 0.01416 +--initial-mass 14.7538 --metallicity 0.01416 +--initial-mass 14.7596 --metallicity 0.01416 +--initial-mass 14.7655 --metallicity 0.01416 +--initial-mass 14.7714 --metallicity 0.01416 +--initial-mass 14.7773 --metallicity 0.01416 +--initial-mass 14.7832 --metallicity 0.01416 +--initial-mass 14.7891 --metallicity 0.01416 +--initial-mass 14.795 --metallicity 0.01416 +--initial-mass 14.8009 --metallicity 0.01416 +--initial-mass 14.8068 --metallicity 0.01416 +--initial-mass 14.8127 --metallicity 0.01416 +--initial-mass 14.8186 --metallicity 0.01416 +--initial-mass 14.8245 --metallicity 0.01416 +--initial-mass 14.8304 --metallicity 0.01416 +--initial-mass 14.8363 --metallicity 0.01416 +--initial-mass 14.8422 --metallicity 0.01416 +--initial-mass 14.8481 --metallicity 0.01416 +--initial-mass 14.854 --metallicity 0.01416 +--initial-mass 14.86 --metallicity 0.01416 +--initial-mass 14.8659 --metallicity 0.01416 +--initial-mass 14.8718 --metallicity 0.01416 +--initial-mass 14.8777 --metallicity 0.01416 +--initial-mass 14.8837 --metallicity 0.01416 +--initial-mass 14.8896 --metallicity 0.01416 +--initial-mass 14.8955 --metallicity 0.01416 +--initial-mass 14.9015 --metallicity 0.01416 +--initial-mass 14.9074 --metallicity 0.01416 +--initial-mass 14.9133 --metallicity 0.01416 +--initial-mass 14.9193 --metallicity 0.01416 +--initial-mass 14.9252 --metallicity 0.01416 +--initial-mass 14.9312 --metallicity 0.01416 +--initial-mass 14.9371 --metallicity 0.01416 +--initial-mass 14.9431 --metallicity 0.01416 +--initial-mass 14.949 --metallicity 0.01416 +--initial-mass 14.955 --metallicity 0.01416 +--initial-mass 14.961 --metallicity 0.01416 +--initial-mass 14.9669 --metallicity 0.01416 +--initial-mass 14.9729 --metallicity 0.01416 +--initial-mass 14.9789 --metallicity 0.01416 +--initial-mass 14.9848 --metallicity 0.01416 +--initial-mass 14.9908 --metallicity 0.01416 +--initial-mass 14.9968 --metallicity 0.01416 +--initial-mass 15.0027 --metallicity 0.01416 +--initial-mass 15.0087 --metallicity 0.01416 +--initial-mass 15.0147 --metallicity 0.01416 +--initial-mass 15.0207 --metallicity 0.01416 +--initial-mass 15.0267 --metallicity 0.01416 +--initial-mass 15.0327 --metallicity 0.01416 +--initial-mass 15.0387 --metallicity 0.01416 +--initial-mass 15.0447 --metallicity 0.01416 +--initial-mass 15.0506 --metallicity 0.01416 +--initial-mass 15.0566 --metallicity 0.01416 +--initial-mass 15.0626 --metallicity 0.01416 +--initial-mass 15.0687 --metallicity 0.01416 +--initial-mass 15.0747 --metallicity 0.01416 +--initial-mass 15.0807 --metallicity 0.01416 +--initial-mass 15.0867 --metallicity 0.01416 +--initial-mass 15.0927 --metallicity 0.01416 +--initial-mass 15.0987 --metallicity 0.01416 +--initial-mass 15.1047 --metallicity 0.01416 +--initial-mass 15.1107 --metallicity 0.01416 +--initial-mass 15.1168 --metallicity 0.01416 +--initial-mass 15.1228 --metallicity 0.01416 +--initial-mass 15.1288 --metallicity 0.01416 +--initial-mass 15.1348 --metallicity 0.01416 +--initial-mass 15.1409 --metallicity 0.01416 +--initial-mass 15.1469 --metallicity 0.01416 +--initial-mass 15.1529 --metallicity 0.01416 +--initial-mass 15.159 --metallicity 0.01416 +--initial-mass 15.165 --metallicity 0.01416 +--initial-mass 15.1711 --metallicity 0.01416 +--initial-mass 15.1771 --metallicity 0.01416 +--initial-mass 15.1832 --metallicity 0.01416 +--initial-mass 15.1892 --metallicity 0.01416 +--initial-mass 15.1953 --metallicity 0.01416 +--initial-mass 15.2013 --metallicity 0.01416 +--initial-mass 15.2074 --metallicity 0.01416 +--initial-mass 15.2135 --metallicity 0.01416 +--initial-mass 15.2195 --metallicity 0.01416 +--initial-mass 15.2256 --metallicity 0.01416 +--initial-mass 15.2316 --metallicity 0.01416 +--initial-mass 15.2377 --metallicity 0.01416 +--initial-mass 15.2438 --metallicity 0.01416 +--initial-mass 15.2499 --metallicity 0.01416 +--initial-mass 15.2559 --metallicity 0.01416 +--initial-mass 15.262 --metallicity 0.01416 +--initial-mass 15.2681 --metallicity 0.01416 +--initial-mass 15.2742 --metallicity 0.01416 +--initial-mass 15.2803 --metallicity 0.01416 +--initial-mass 15.2864 --metallicity 0.01416 +--initial-mass 15.2925 --metallicity 0.01416 +--initial-mass 15.2986 --metallicity 0.01416 +--initial-mass 15.3047 --metallicity 0.01416 +--initial-mass 15.3108 --metallicity 0.01416 +--initial-mass 15.3169 --metallicity 0.01416 +--initial-mass 15.323 --metallicity 0.01416 +--initial-mass 15.3291 --metallicity 0.01416 +--initial-mass 15.3352 --metallicity 0.01416 +--initial-mass 15.3413 --metallicity 0.01416 +--initial-mass 15.3474 --metallicity 0.01416 +--initial-mass 15.3535 --metallicity 0.01416 +--initial-mass 15.3596 --metallicity 0.01416 +--initial-mass 15.3658 --metallicity 0.01416 +--initial-mass 15.3719 --metallicity 0.01416 +--initial-mass 15.378 --metallicity 0.01416 +--initial-mass 15.3841 --metallicity 0.01416 +--initial-mass 15.3903 --metallicity 0.01416 +--initial-mass 15.3964 --metallicity 0.01416 +--initial-mass 15.4025 --metallicity 0.01416 +--initial-mass 15.4087 --metallicity 0.01416 +--initial-mass 15.4148 --metallicity 0.01416 +--initial-mass 15.421 --metallicity 0.01416 +--initial-mass 15.4271 --metallicity 0.01416 +--initial-mass 15.4333 --metallicity 0.01416 +--initial-mass 15.4394 --metallicity 0.01416 +--initial-mass 15.4456 --metallicity 0.01416 +--initial-mass 15.4517 --metallicity 0.01416 +--initial-mass 15.4579 --metallicity 0.01416 +--initial-mass 15.464 --metallicity 0.01416 +--initial-mass 15.4702 --metallicity 0.01416 +--initial-mass 15.4764 --metallicity 0.01416 +--initial-mass 15.4825 --metallicity 0.01416 +--initial-mass 15.4887 --metallicity 0.01416 +--initial-mass 15.4949 --metallicity 0.01416 +--initial-mass 15.5011 --metallicity 0.01416 +--initial-mass 15.5072 --metallicity 0.01416 +--initial-mass 15.5134 --metallicity 0.01416 +--initial-mass 15.5196 --metallicity 0.01416 +--initial-mass 15.5258 --metallicity 0.01416 +--initial-mass 15.532 --metallicity 0.01416 +--initial-mass 15.5382 --metallicity 0.01416 +--initial-mass 15.5444 --metallicity 0.01416 +--initial-mass 15.5505 --metallicity 0.01416 +--initial-mass 15.5567 --metallicity 0.01416 +--initial-mass 15.5629 --metallicity 0.01416 +--initial-mass 15.5692 --metallicity 0.01416 +--initial-mass 15.5754 --metallicity 0.01416 +--initial-mass 15.5816 --metallicity 0.01416 +--initial-mass 15.5878 --metallicity 0.01416 +--initial-mass 15.594 --metallicity 0.01416 +--initial-mass 15.6002 --metallicity 0.01416 +--initial-mass 15.6064 --metallicity 0.01416 +--initial-mass 15.6126 --metallicity 0.01416 +--initial-mass 15.6189 --metallicity 0.01416 +--initial-mass 15.6251 --metallicity 0.01416 +--initial-mass 15.6313 --metallicity 0.01416 +--initial-mass 15.6375 --metallicity 0.01416 +--initial-mass 15.6438 --metallicity 0.01416 +--initial-mass 15.65 --metallicity 0.01416 +--initial-mass 15.6562 --metallicity 0.01416 +--initial-mass 15.6625 --metallicity 0.01416 +--initial-mass 15.6687 --metallicity 0.01416 +--initial-mass 15.675 --metallicity 0.01416 +--initial-mass 15.6812 --metallicity 0.01416 +--initial-mass 15.6875 --metallicity 0.01416 +--initial-mass 15.6937 --metallicity 0.01416 +--initial-mass 15.7 --metallicity 0.01416 +--initial-mass 15.7062 --metallicity 0.01416 +--initial-mass 15.7125 --metallicity 0.01416 +--initial-mass 15.7188 --metallicity 0.01416 +--initial-mass 15.725 --metallicity 0.01416 +--initial-mass 15.7313 --metallicity 0.01416 +--initial-mass 15.7376 --metallicity 0.01416 +--initial-mass 15.7438 --metallicity 0.01416 +--initial-mass 15.7501 --metallicity 0.01416 +--initial-mass 15.7564 --metallicity 0.01416 +--initial-mass 15.7627 --metallicity 0.01416 +--initial-mass 15.7689 --metallicity 0.01416 +--initial-mass 15.7752 --metallicity 0.01416 +--initial-mass 15.7815 --metallicity 0.01416 +--initial-mass 15.7878 --metallicity 0.01416 +--initial-mass 15.7941 --metallicity 0.01416 +--initial-mass 15.8004 --metallicity 0.01416 +--initial-mass 15.8067 --metallicity 0.01416 +--initial-mass 15.813 --metallicity 0.01416 +--initial-mass 15.8193 --metallicity 0.01416 +--initial-mass 15.8256 --metallicity 0.01416 +--initial-mass 15.8319 --metallicity 0.01416 +--initial-mass 15.8382 --metallicity 0.01416 +--initial-mass 15.8445 --metallicity 0.01416 +--initial-mass 15.8508 --metallicity 0.01416 +--initial-mass 15.8572 --metallicity 0.01416 +--initial-mass 15.8635 --metallicity 0.01416 +--initial-mass 15.8698 --metallicity 0.01416 +--initial-mass 15.8761 --metallicity 0.01416 +--initial-mass 15.8825 --metallicity 0.01416 +--initial-mass 15.8888 --metallicity 0.01416 +--initial-mass 15.8951 --metallicity 0.01416 +--initial-mass 15.9015 --metallicity 0.01416 +--initial-mass 15.9078 --metallicity 0.01416 +--initial-mass 15.9141 --metallicity 0.01416 +--initial-mass 15.9205 --metallicity 0.01416 +--initial-mass 15.9268 --metallicity 0.01416 +--initial-mass 15.9332 --metallicity 0.01416 +--initial-mass 15.9395 --metallicity 0.01416 +--initial-mass 15.9459 --metallicity 0.01416 +--initial-mass 15.9522 --metallicity 0.01416 +--initial-mass 15.9586 --metallicity 0.01416 +--initial-mass 15.9649 --metallicity 0.01416 +--initial-mass 15.9713 --metallicity 0.01416 +--initial-mass 15.9777 --metallicity 0.01416 +--initial-mass 15.984 --metallicity 0.01416 +--initial-mass 15.9904 --metallicity 0.01416 +--initial-mass 15.9968 --metallicity 0.01416 +--initial-mass 16.0032 --metallicity 0.01416 +--initial-mass 16.0095 --metallicity 0.01416 +--initial-mass 16.0159 --metallicity 0.01416 +--initial-mass 16.0223 --metallicity 0.01416 +--initial-mass 16.0287 --metallicity 0.01416 +--initial-mass 16.0351 --metallicity 0.01416 +--initial-mass 16.0415 --metallicity 0.01416 +--initial-mass 16.0479 --metallicity 0.01416 +--initial-mass 16.0543 --metallicity 0.01416 +--initial-mass 16.0607 --metallicity 0.01416 +--initial-mass 16.0671 --metallicity 0.01416 +--initial-mass 16.0735 --metallicity 0.01416 +--initial-mass 16.0799 --metallicity 0.01416 +--initial-mass 16.0863 --metallicity 0.01416 +--initial-mass 16.0927 --metallicity 0.01416 +--initial-mass 16.0991 --metallicity 0.01416 +--initial-mass 16.1055 --metallicity 0.01416 +--initial-mass 16.1119 --metallicity 0.01416 +--initial-mass 16.1184 --metallicity 0.01416 +--initial-mass 16.1248 --metallicity 0.01416 +--initial-mass 16.1312 --metallicity 0.01416 +--initial-mass 16.1376 --metallicity 0.01416 +--initial-mass 16.1441 --metallicity 0.01416 +--initial-mass 16.1505 --metallicity 0.01416 +--initial-mass 16.1569 --metallicity 0.01416 +--initial-mass 16.1634 --metallicity 0.01416 +--initial-mass 16.1698 --metallicity 0.01416 +--initial-mass 16.1763 --metallicity 0.01416 +--initial-mass 16.1827 --metallicity 0.01416 +--initial-mass 16.1892 --metallicity 0.01416 +--initial-mass 16.1956 --metallicity 0.01416 +--initial-mass 16.2021 --metallicity 0.01416 +--initial-mass 16.2085 --metallicity 0.01416 +--initial-mass 16.215 --metallicity 0.01416 +--initial-mass 16.2214 --metallicity 0.01416 +--initial-mass 16.2279 --metallicity 0.01416 +--initial-mass 16.2344 --metallicity 0.01416 +--initial-mass 16.2408 --metallicity 0.01416 +--initial-mass 16.2473 --metallicity 0.01416 +--initial-mass 16.2538 --metallicity 0.01416 +--initial-mass 16.2603 --metallicity 0.01416 +--initial-mass 16.2668 --metallicity 0.01416 +--initial-mass 16.2732 --metallicity 0.01416 +--initial-mass 16.2797 --metallicity 0.01416 +--initial-mass 16.2862 --metallicity 0.01416 +--initial-mass 16.2927 --metallicity 0.01416 +--initial-mass 16.2992 --metallicity 0.01416 +--initial-mass 16.3057 --metallicity 0.01416 +--initial-mass 16.3122 --metallicity 0.01416 +--initial-mass 16.3187 --metallicity 0.01416 +--initial-mass 16.3252 --metallicity 0.01416 +--initial-mass 16.3317 --metallicity 0.01416 +--initial-mass 16.3382 --metallicity 0.01416 +--initial-mass 16.3447 --metallicity 0.01416 +--initial-mass 16.3512 --metallicity 0.01416 +--initial-mass 16.3578 --metallicity 0.01416 +--initial-mass 16.3643 --metallicity 0.01416 +--initial-mass 16.3708 --metallicity 0.01416 +--initial-mass 16.3773 --metallicity 0.01416 +--initial-mass 16.3838 --metallicity 0.01416 +--initial-mass 16.3904 --metallicity 0.01416 +--initial-mass 16.3969 --metallicity 0.01416 +--initial-mass 16.4034 --metallicity 0.01416 +--initial-mass 16.41 --metallicity 0.01416 +--initial-mass 16.4165 --metallicity 0.01416 +--initial-mass 16.4231 --metallicity 0.01416 +--initial-mass 16.4296 --metallicity 0.01416 +--initial-mass 16.4362 --metallicity 0.01416 +--initial-mass 16.4427 --metallicity 0.01416 +--initial-mass 16.4493 --metallicity 0.01416 +--initial-mass 16.4558 --metallicity 0.01416 +--initial-mass 16.4624 --metallicity 0.01416 +--initial-mass 16.4689 --metallicity 0.01416 +--initial-mass 16.4755 --metallicity 0.01416 +--initial-mass 16.4821 --metallicity 0.01416 +--initial-mass 16.4886 --metallicity 0.01416 +--initial-mass 16.4952 --metallicity 0.01416 +--initial-mass 16.5018 --metallicity 0.01416 +--initial-mass 16.5084 --metallicity 0.01416 +--initial-mass 16.5149 --metallicity 0.01416 +--initial-mass 16.5215 --metallicity 0.01416 +--initial-mass 16.5281 --metallicity 0.01416 +--initial-mass 16.5347 --metallicity 0.01416 +--initial-mass 16.5413 --metallicity 0.01416 +--initial-mass 16.5479 --metallicity 0.01416 +--initial-mass 16.5545 --metallicity 0.01416 +--initial-mass 16.5611 --metallicity 0.01416 +--initial-mass 16.5677 --metallicity 0.01416 +--initial-mass 16.5743 --metallicity 0.01416 +--initial-mass 16.5809 --metallicity 0.01416 +--initial-mass 16.5875 --metallicity 0.01416 +--initial-mass 16.5941 --metallicity 0.01416 +--initial-mass 16.6007 --metallicity 0.01416 +--initial-mass 16.6073 --metallicity 0.01416 +--initial-mass 16.6139 --metallicity 0.01416 +--initial-mass 16.6206 --metallicity 0.01416 +--initial-mass 16.6272 --metallicity 0.01416 +--initial-mass 16.6338 --metallicity 0.01416 +--initial-mass 16.6405 --metallicity 0.01416 +--initial-mass 16.6471 --metallicity 0.01416 +--initial-mass 16.6537 --metallicity 0.01416 +--initial-mass 16.6604 --metallicity 0.01416 +--initial-mass 16.667 --metallicity 0.01416 +--initial-mass 16.6736 --metallicity 0.01416 +--initial-mass 16.6803 --metallicity 0.01416 +--initial-mass 16.6869 --metallicity 0.01416 +--initial-mass 16.6936 --metallicity 0.01416 +--initial-mass 16.7002 --metallicity 0.01416 +--initial-mass 16.7069 --metallicity 0.01416 +--initial-mass 16.7136 --metallicity 0.01416 +--initial-mass 16.7202 --metallicity 0.01416 +--initial-mass 16.7269 --metallicity 0.01416 +--initial-mass 16.7335 --metallicity 0.01416 +--initial-mass 16.7402 --metallicity 0.01416 +--initial-mass 16.7469 --metallicity 0.01416 +--initial-mass 16.7536 --metallicity 0.01416 +--initial-mass 16.7602 --metallicity 0.01416 +--initial-mass 16.7669 --metallicity 0.01416 +--initial-mass 16.7736 --metallicity 0.01416 +--initial-mass 16.7803 --metallicity 0.01416 +--initial-mass 16.787 --metallicity 0.01416 +--initial-mass 16.7937 --metallicity 0.01416 +--initial-mass 16.8004 --metallicity 0.01416 +--initial-mass 16.807 --metallicity 0.01416 +--initial-mass 16.8137 --metallicity 0.01416 +--initial-mass 16.8204 --metallicity 0.01416 +--initial-mass 16.8272 --metallicity 0.01416 +--initial-mass 16.8339 --metallicity 0.01416 +--initial-mass 16.8406 --metallicity 0.01416 +--initial-mass 16.8473 --metallicity 0.01416 +--initial-mass 16.854 --metallicity 0.01416 +--initial-mass 16.8607 --metallicity 0.01416 +--initial-mass 16.8674 --metallicity 0.01416 +--initial-mass 16.8742 --metallicity 0.01416 +--initial-mass 16.8809 --metallicity 0.01416 +--initial-mass 16.8876 --metallicity 0.01416 +--initial-mass 16.8943 --metallicity 0.01416 +--initial-mass 16.9011 --metallicity 0.01416 +--initial-mass 16.9078 --metallicity 0.01416 +--initial-mass 16.9145 --metallicity 0.01416 +--initial-mass 16.9213 --metallicity 0.01416 +--initial-mass 16.928 --metallicity 0.01416 +--initial-mass 16.9348 --metallicity 0.01416 +--initial-mass 16.9415 --metallicity 0.01416 +--initial-mass 16.9483 --metallicity 0.01416 +--initial-mass 16.955 --metallicity 0.01416 +--initial-mass 16.9618 --metallicity 0.01416 +--initial-mass 16.9686 --metallicity 0.01416 +--initial-mass 16.9753 --metallicity 0.01416 +--initial-mass 16.9821 --metallicity 0.01416 +--initial-mass 16.9888 --metallicity 0.01416 +--initial-mass 16.9956 --metallicity 0.01416 +--initial-mass 17.0024 --metallicity 0.01416 +--initial-mass 17.0092 --metallicity 0.01416 +--initial-mass 17.0159 --metallicity 0.01416 +--initial-mass 17.0227 --metallicity 0.01416 +--initial-mass 17.0295 --metallicity 0.01416 +--initial-mass 17.0363 --metallicity 0.01416 +--initial-mass 17.0431 --metallicity 0.01416 +--initial-mass 17.0499 --metallicity 0.01416 +--initial-mass 17.0567 --metallicity 0.01416 +--initial-mass 17.0635 --metallicity 0.01416 +--initial-mass 17.0703 --metallicity 0.01416 +--initial-mass 17.0771 --metallicity 0.01416 +--initial-mass 17.0839 --metallicity 0.01416 +--initial-mass 17.0907 --metallicity 0.01416 +--initial-mass 17.0975 --metallicity 0.01416 +--initial-mass 17.1043 --metallicity 0.01416 +--initial-mass 17.1111 --metallicity 0.01416 +--initial-mass 17.118 --metallicity 0.01416 +--initial-mass 17.1248 --metallicity 0.01416 +--initial-mass 17.1316 --metallicity 0.01416 +--initial-mass 17.1384 --metallicity 0.01416 +--initial-mass 17.1453 --metallicity 0.01416 +--initial-mass 17.1521 --metallicity 0.01416 +--initial-mass 17.1589 --metallicity 0.01416 +--initial-mass 17.1658 --metallicity 0.01416 +--initial-mass 17.1726 --metallicity 0.01416 +--initial-mass 17.1795 --metallicity 0.01416 +--initial-mass 17.1863 --metallicity 0.01416 +--initial-mass 17.1932 --metallicity 0.01416 +--initial-mass 17.2 --metallicity 0.01416 +--initial-mass 17.2069 --metallicity 0.01416 +--initial-mass 17.2137 --metallicity 0.01416 +--initial-mass 17.2206 --metallicity 0.01416 +--initial-mass 17.2274 --metallicity 0.01416 +--initial-mass 17.2343 --metallicity 0.01416 +--initial-mass 17.2412 --metallicity 0.01416 +--initial-mass 17.2481 --metallicity 0.01416 +--initial-mass 17.2549 --metallicity 0.01416 +--initial-mass 17.2618 --metallicity 0.01416 +--initial-mass 17.2687 --metallicity 0.01416 +--initial-mass 17.2756 --metallicity 0.01416 +--initial-mass 17.2825 --metallicity 0.01416 +--initial-mass 17.2893 --metallicity 0.01416 +--initial-mass 17.2962 --metallicity 0.01416 +--initial-mass 17.3031 --metallicity 0.01416 +--initial-mass 17.31 --metallicity 0.01416 +--initial-mass 17.3169 --metallicity 0.01416 +--initial-mass 17.3238 --metallicity 0.01416 +--initial-mass 17.3307 --metallicity 0.01416 +--initial-mass 17.3376 --metallicity 0.01416 +--initial-mass 17.3445 --metallicity 0.01416 +--initial-mass 17.3515 --metallicity 0.01416 +--initial-mass 17.3584 --metallicity 0.01416 +--initial-mass 17.3653 --metallicity 0.01416 +--initial-mass 17.3722 --metallicity 0.01416 +--initial-mass 17.3791 --metallicity 0.01416 +--initial-mass 17.3861 --metallicity 0.01416 +--initial-mass 17.393 --metallicity 0.01416 +--initial-mass 17.3999 --metallicity 0.01416 +--initial-mass 17.4069 --metallicity 0.01416 +--initial-mass 17.4138 --metallicity 0.01416 +--initial-mass 17.4207 --metallicity 0.01416 +--initial-mass 17.4277 --metallicity 0.01416 +--initial-mass 17.4346 --metallicity 0.01416 +--initial-mass 17.4416 --metallicity 0.01416 +--initial-mass 17.4485 --metallicity 0.01416 +--initial-mass 17.4555 --metallicity 0.01416 +--initial-mass 17.4624 --metallicity 0.01416 +--initial-mass 17.4694 --metallicity 0.01416 +--initial-mass 17.4764 --metallicity 0.01416 +--initial-mass 17.4833 --metallicity 0.01416 +--initial-mass 17.4903 --metallicity 0.01416 +--initial-mass 17.4973 --metallicity 0.01416 +--initial-mass 17.5042 --metallicity 0.01416 +--initial-mass 17.5112 --metallicity 0.01416 +--initial-mass 17.5182 --metallicity 0.01416 +--initial-mass 17.5252 --metallicity 0.01416 +--initial-mass 17.5322 --metallicity 0.01416 +--initial-mass 17.5391 --metallicity 0.01416 +--initial-mass 17.5461 --metallicity 0.01416 +--initial-mass 17.5531 --metallicity 0.01416 +--initial-mass 17.5601 --metallicity 0.01416 +--initial-mass 17.5671 --metallicity 0.01416 +--initial-mass 17.5741 --metallicity 0.01416 +--initial-mass 17.5811 --metallicity 0.01416 +--initial-mass 17.5881 --metallicity 0.01416 +--initial-mass 17.5951 --metallicity 0.01416 +--initial-mass 17.6022 --metallicity 0.01416 +--initial-mass 17.6092 --metallicity 0.01416 +--initial-mass 17.6162 --metallicity 0.01416 +--initial-mass 17.6232 --metallicity 0.01416 +--initial-mass 17.6302 --metallicity 0.01416 +--initial-mass 17.6373 --metallicity 0.01416 +--initial-mass 17.6443 --metallicity 0.01416 +--initial-mass 17.6513 --metallicity 0.01416 +--initial-mass 17.6584 --metallicity 0.01416 +--initial-mass 17.6654 --metallicity 0.01416 +--initial-mass 17.6724 --metallicity 0.01416 +--initial-mass 17.6795 --metallicity 0.01416 +--initial-mass 17.6865 --metallicity 0.01416 +--initial-mass 17.6936 --metallicity 0.01416 +--initial-mass 17.7006 --metallicity 0.01416 +--initial-mass 17.7077 --metallicity 0.01416 +--initial-mass 17.7147 --metallicity 0.01416 +--initial-mass 17.7218 --metallicity 0.01416 +--initial-mass 17.7289 --metallicity 0.01416 +--initial-mass 17.7359 --metallicity 0.01416 +--initial-mass 17.743 --metallicity 0.01416 +--initial-mass 17.7501 --metallicity 0.01416 +--initial-mass 17.7571 --metallicity 0.01416 +--initial-mass 17.7642 --metallicity 0.01416 +--initial-mass 17.7713 --metallicity 0.01416 +--initial-mass 17.7784 --metallicity 0.01416 +--initial-mass 17.7855 --metallicity 0.01416 +--initial-mass 17.7926 --metallicity 0.01416 +--initial-mass 17.7996 --metallicity 0.01416 +--initial-mass 17.8067 --metallicity 0.01416 +--initial-mass 17.8138 --metallicity 0.01416 +--initial-mass 17.8209 --metallicity 0.01416 +--initial-mass 17.828 --metallicity 0.01416 +--initial-mass 17.8351 --metallicity 0.01416 +--initial-mass 17.8423 --metallicity 0.01416 +--initial-mass 17.8494 --metallicity 0.01416 +--initial-mass 17.8565 --metallicity 0.01416 +--initial-mass 17.8636 --metallicity 0.01416 +--initial-mass 17.8707 --metallicity 0.01416 +--initial-mass 17.8778 --metallicity 0.01416 +--initial-mass 17.885 --metallicity 0.01416 +--initial-mass 17.8921 --metallicity 0.01416 +--initial-mass 17.8992 --metallicity 0.01416 +--initial-mass 17.9064 --metallicity 0.01416 +--initial-mass 17.9135 --metallicity 0.01416 +--initial-mass 17.9206 --metallicity 0.01416 +--initial-mass 17.9278 --metallicity 0.01416 +--initial-mass 17.9349 --metallicity 0.01416 +--initial-mass 17.9421 --metallicity 0.01416 +--initial-mass 17.9492 --metallicity 0.01416 +--initial-mass 17.9564 --metallicity 0.01416 +--initial-mass 17.9635 --metallicity 0.01416 +--initial-mass 17.9707 --metallicity 0.01416 +--initial-mass 17.9779 --metallicity 0.01416 +--initial-mass 17.985 --metallicity 0.01416 +--initial-mass 17.9922 --metallicity 0.01416 +--initial-mass 17.9994 --metallicity 0.01416 +--initial-mass 18.0065 --metallicity 0.01416 +--initial-mass 18.0137 --metallicity 0.01416 +--initial-mass 18.0209 --metallicity 0.01416 +--initial-mass 18.0281 --metallicity 0.01416 +--initial-mass 18.0353 --metallicity 0.01416 +--initial-mass 18.0424 --metallicity 0.01416 +--initial-mass 18.0496 --metallicity 0.01416 +--initial-mass 18.0568 --metallicity 0.01416 +--initial-mass 18.064 --metallicity 0.01416 +--initial-mass 18.0712 --metallicity 0.01416 +--initial-mass 18.0784 --metallicity 0.01416 +--initial-mass 18.0856 --metallicity 0.01416 +--initial-mass 18.0928 --metallicity 0.01416 +--initial-mass 18.1 --metallicity 0.01416 +--initial-mass 18.1073 --metallicity 0.01416 +--initial-mass 18.1145 --metallicity 0.01416 +--initial-mass 18.1217 --metallicity 0.01416 +--initial-mass 18.1289 --metallicity 0.01416 +--initial-mass 18.1361 --metallicity 0.01416 +--initial-mass 18.1434 --metallicity 0.01416 +--initial-mass 18.1506 --metallicity 0.01416 +--initial-mass 18.1578 --metallicity 0.01416 +--initial-mass 18.1651 --metallicity 0.01416 +--initial-mass 18.1723 --metallicity 0.01416 +--initial-mass 18.1796 --metallicity 0.01416 +--initial-mass 18.1868 --metallicity 0.01416 +--initial-mass 18.1941 --metallicity 0.01416 +--initial-mass 18.2013 --metallicity 0.01416 +--initial-mass 18.2086 --metallicity 0.01416 +--initial-mass 18.2158 --metallicity 0.01416 +--initial-mass 18.2231 --metallicity 0.01416 +--initial-mass 18.2303 --metallicity 0.01416 +--initial-mass 18.2376 --metallicity 0.01416 +--initial-mass 18.2449 --metallicity 0.01416 +--initial-mass 18.2521 --metallicity 0.01416 +--initial-mass 18.2594 --metallicity 0.01416 +--initial-mass 18.2667 --metallicity 0.01416 +--initial-mass 18.274 --metallicity 0.01416 +--initial-mass 18.2813 --metallicity 0.01416 +--initial-mass 18.2885 --metallicity 0.01416 +--initial-mass 18.2958 --metallicity 0.01416 +--initial-mass 18.3031 --metallicity 0.01416 +--initial-mass 18.3104 --metallicity 0.01416 +--initial-mass 18.3177 --metallicity 0.01416 +--initial-mass 18.325 --metallicity 0.01416 +--initial-mass 18.3323 --metallicity 0.01416 +--initial-mass 18.3396 --metallicity 0.01416 +--initial-mass 18.3469 --metallicity 0.01416 +--initial-mass 18.3542 --metallicity 0.01416 +--initial-mass 18.3616 --metallicity 0.01416 +--initial-mass 18.3689 --metallicity 0.01416 +--initial-mass 18.3762 --metallicity 0.01416 +--initial-mass 18.3835 --metallicity 0.01416 +--initial-mass 18.3909 --metallicity 0.01416 +--initial-mass 18.3982 --metallicity 0.01416 +--initial-mass 18.4055 --metallicity 0.01416 +--initial-mass 18.4129 --metallicity 0.01416 +--initial-mass 18.4202 --metallicity 0.01416 +--initial-mass 18.4275 --metallicity 0.01416 +--initial-mass 18.4349 --metallicity 0.01416 +--initial-mass 18.4422 --metallicity 0.01416 +--initial-mass 18.4496 --metallicity 0.01416 +--initial-mass 18.4569 --metallicity 0.01416 +--initial-mass 18.4643 --metallicity 0.01416 +--initial-mass 18.4716 --metallicity 0.01416 +--initial-mass 18.479 --metallicity 0.01416 +--initial-mass 18.4864 --metallicity 0.01416 +--initial-mass 18.4937 --metallicity 0.01416 +--initial-mass 18.5011 --metallicity 0.01416 +--initial-mass 18.5085 --metallicity 0.01416 +--initial-mass 18.5159 --metallicity 0.01416 +--initial-mass 18.5232 --metallicity 0.01416 +--initial-mass 18.5306 --metallicity 0.01416 +--initial-mass 18.538 --metallicity 0.01416 +--initial-mass 18.5454 --metallicity 0.01416 +--initial-mass 18.5528 --metallicity 0.01416 +--initial-mass 18.5602 --metallicity 0.01416 +--initial-mass 18.5676 --metallicity 0.01416 +--initial-mass 18.575 --metallicity 0.01416 +--initial-mass 18.5824 --metallicity 0.01416 +--initial-mass 18.5898 --metallicity 0.01416 +--initial-mass 18.5972 --metallicity 0.01416 +--initial-mass 18.6046 --metallicity 0.01416 +--initial-mass 18.612 --metallicity 0.01416 +--initial-mass 18.6194 --metallicity 0.01416 +--initial-mass 18.6269 --metallicity 0.01416 +--initial-mass 18.6343 --metallicity 0.01416 +--initial-mass 18.6417 --metallicity 0.01416 +--initial-mass 18.6491 --metallicity 0.01416 +--initial-mass 18.6566 --metallicity 0.01416 +--initial-mass 18.664 --metallicity 0.01416 +--initial-mass 18.6714 --metallicity 0.01416 +--initial-mass 18.6789 --metallicity 0.01416 +--initial-mass 18.6863 --metallicity 0.01416 +--initial-mass 18.6938 --metallicity 0.01416 +--initial-mass 18.7012 --metallicity 0.01416 +--initial-mass 18.7087 --metallicity 0.01416 +--initial-mass 18.7161 --metallicity 0.01416 +--initial-mass 18.7236 --metallicity 0.01416 +--initial-mass 18.7311 --metallicity 0.01416 +--initial-mass 18.7385 --metallicity 0.01416 +--initial-mass 18.746 --metallicity 0.01416 +--initial-mass 18.7535 --metallicity 0.01416 +--initial-mass 18.7609 --metallicity 0.01416 +--initial-mass 18.7684 --metallicity 0.01416 +--initial-mass 18.7759 --metallicity 0.01416 +--initial-mass 18.7834 --metallicity 0.01416 +--initial-mass 18.7909 --metallicity 0.01416 +--initial-mass 18.7984 --metallicity 0.01416 +--initial-mass 18.8059 --metallicity 0.01416 +--initial-mass 18.8133 --metallicity 0.01416 +--initial-mass 18.8208 --metallicity 0.01416 +--initial-mass 18.8283 --metallicity 0.01416 +--initial-mass 18.8358 --metallicity 0.01416 +--initial-mass 18.8434 --metallicity 0.01416 +--initial-mass 18.8509 --metallicity 0.01416 +--initial-mass 18.8584 --metallicity 0.01416 +--initial-mass 18.8659 --metallicity 0.01416 +--initial-mass 18.8734 --metallicity 0.01416 +--initial-mass 18.8809 --metallicity 0.01416 +--initial-mass 18.8885 --metallicity 0.01416 +--initial-mass 18.896 --metallicity 0.01416 +--initial-mass 18.9035 --metallicity 0.01416 +--initial-mass 18.9111 --metallicity 0.01416 +--initial-mass 18.9186 --metallicity 0.01416 +--initial-mass 18.9261 --metallicity 0.01416 +--initial-mass 18.9337 --metallicity 0.01416 +--initial-mass 18.9412 --metallicity 0.01416 +--initial-mass 18.9488 --metallicity 0.01416 +--initial-mass 18.9563 --metallicity 0.01416 +--initial-mass 18.9639 --metallicity 0.01416 +--initial-mass 18.9714 --metallicity 0.01416 +--initial-mass 18.979 --metallicity 0.01416 +--initial-mass 18.9866 --metallicity 0.01416 +--initial-mass 18.9941 --metallicity 0.01416 +--initial-mass 19.0017 --metallicity 0.01416 +--initial-mass 19.0093 --metallicity 0.01416 +--initial-mass 19.0168 --metallicity 0.01416 +--initial-mass 19.0244 --metallicity 0.01416 +--initial-mass 19.032 --metallicity 0.01416 +--initial-mass 19.0396 --metallicity 0.01416 +--initial-mass 19.0472 --metallicity 0.01416 +--initial-mass 19.0548 --metallicity 0.01416 +--initial-mass 19.0624 --metallicity 0.01416 +--initial-mass 19.07 --metallicity 0.01416 +--initial-mass 19.0776 --metallicity 0.01416 +--initial-mass 19.0852 --metallicity 0.01416 +--initial-mass 19.0928 --metallicity 0.01416 +--initial-mass 19.1004 --metallicity 0.01416 +--initial-mass 19.108 --metallicity 0.01416 +--initial-mass 19.1156 --metallicity 0.01416 +--initial-mass 19.1232 --metallicity 0.01416 +--initial-mass 19.1309 --metallicity 0.01416 +--initial-mass 19.1385 --metallicity 0.01416 +--initial-mass 19.1461 --metallicity 0.01416 +--initial-mass 19.1537 --metallicity 0.01416 +--initial-mass 19.1614 --metallicity 0.01416 +--initial-mass 19.169 --metallicity 0.01416 +--initial-mass 19.1766 --metallicity 0.01416 +--initial-mass 19.1843 --metallicity 0.01416 +--initial-mass 19.1919 --metallicity 0.01416 +--initial-mass 19.1996 --metallicity 0.01416 +--initial-mass 19.2072 --metallicity 0.01416 +--initial-mass 19.2149 --metallicity 0.01416 +--initial-mass 19.2226 --metallicity 0.01416 +--initial-mass 19.2302 --metallicity 0.01416 +--initial-mass 19.2379 --metallicity 0.01416 +--initial-mass 19.2455 --metallicity 0.01416 +--initial-mass 19.2532 --metallicity 0.01416 +--initial-mass 19.2609 --metallicity 0.01416 +--initial-mass 19.2686 --metallicity 0.01416 +--initial-mass 19.2762 --metallicity 0.01416 +--initial-mass 19.2839 --metallicity 0.01416 +--initial-mass 19.2916 --metallicity 0.01416 +--initial-mass 19.2993 --metallicity 0.01416 +--initial-mass 19.307 --metallicity 0.01416 +--initial-mass 19.3147 --metallicity 0.01416 +--initial-mass 19.3224 --metallicity 0.01416 +--initial-mass 19.3301 --metallicity 0.01416 +--initial-mass 19.3378 --metallicity 0.01416 +--initial-mass 19.3455 --metallicity 0.01416 +--initial-mass 19.3532 --metallicity 0.01416 +--initial-mass 19.3609 --metallicity 0.01416 +--initial-mass 19.3686 --metallicity 0.01416 +--initial-mass 19.3764 --metallicity 0.01416 +--initial-mass 19.3841 --metallicity 0.01416 +--initial-mass 19.3918 --metallicity 0.01416 +--initial-mass 19.3995 --metallicity 0.01416 +--initial-mass 19.4073 --metallicity 0.01416 +--initial-mass 19.415 --metallicity 0.01416 +--initial-mass 19.4227 --metallicity 0.01416 +--initial-mass 19.4305 --metallicity 0.01416 +--initial-mass 19.4382 --metallicity 0.01416 +--initial-mass 19.446 --metallicity 0.01416 +--initial-mass 19.4537 --metallicity 0.01416 +--initial-mass 19.4615 --metallicity 0.01416 +--initial-mass 19.4692 --metallicity 0.01416 +--initial-mass 19.477 --metallicity 0.01416 +--initial-mass 19.4848 --metallicity 0.01416 +--initial-mass 19.4925 --metallicity 0.01416 +--initial-mass 19.5003 --metallicity 0.01416 +--initial-mass 19.5081 --metallicity 0.01416 +--initial-mass 19.5158 --metallicity 0.01416 +--initial-mass 19.5236 --metallicity 0.01416 +--initial-mass 19.5314 --metallicity 0.01416 +--initial-mass 19.5392 --metallicity 0.01416 +--initial-mass 19.547 --metallicity 0.01416 +--initial-mass 19.5548 --metallicity 0.01416 +--initial-mass 19.5625 --metallicity 0.01416 +--initial-mass 19.5703 --metallicity 0.01416 +--initial-mass 19.5781 --metallicity 0.01416 +--initial-mass 19.5859 --metallicity 0.01416 +--initial-mass 19.5938 --metallicity 0.01416 +--initial-mass 19.6016 --metallicity 0.01416 +--initial-mass 19.6094 --metallicity 0.01416 +--initial-mass 19.6172 --metallicity 0.01416 +--initial-mass 19.625 --metallicity 0.01416 +--initial-mass 19.6328 --metallicity 0.01416 +--initial-mass 19.6407 --metallicity 0.01416 +--initial-mass 19.6485 --metallicity 0.01416 +--initial-mass 19.6563 --metallicity 0.01416 +--initial-mass 19.6641 --metallicity 0.01416 +--initial-mass 19.672 --metallicity 0.01416 +--initial-mass 19.6798 --metallicity 0.01416 +--initial-mass 19.6877 --metallicity 0.01416 +--initial-mass 19.6955 --metallicity 0.01416 +--initial-mass 19.7034 --metallicity 0.01416 +--initial-mass 19.7112 --metallicity 0.01416 +--initial-mass 19.7191 --metallicity 0.01416 +--initial-mass 19.7269 --metallicity 0.01416 +--initial-mass 19.7348 --metallicity 0.01416 +--initial-mass 19.7427 --metallicity 0.01416 +--initial-mass 19.7505 --metallicity 0.01416 +--initial-mass 19.7584 --metallicity 0.01416 +--initial-mass 19.7663 --metallicity 0.01416 +--initial-mass 19.7742 --metallicity 0.01416 +--initial-mass 19.782 --metallicity 0.01416 +--initial-mass 19.7899 --metallicity 0.01416 +--initial-mass 19.7978 --metallicity 0.01416 +--initial-mass 19.8057 --metallicity 0.01416 +--initial-mass 19.8136 --metallicity 0.01416 +--initial-mass 19.8215 --metallicity 0.01416 +--initial-mass 19.8294 --metallicity 0.01416 +--initial-mass 19.8373 --metallicity 0.01416 +--initial-mass 19.8452 --metallicity 0.01416 +--initial-mass 19.8531 --metallicity 0.01416 +--initial-mass 19.861 --metallicity 0.01416 +--initial-mass 19.8689 --metallicity 0.01416 +--initial-mass 19.8769 --metallicity 0.01416 +--initial-mass 19.8848 --metallicity 0.01416 +--initial-mass 19.8927 --metallicity 0.01416 +--initial-mass 19.9006 --metallicity 0.01416 +--initial-mass 19.9086 --metallicity 0.01416 +--initial-mass 19.9165 --metallicity 0.01416 +--initial-mass 19.9244 --metallicity 0.01416 +--initial-mass 19.9324 --metallicity 0.01416 +--initial-mass 19.9403 --metallicity 0.01416 +--initial-mass 19.9483 --metallicity 0.01416 +--initial-mass 19.9562 --metallicity 0.01416 +--initial-mass 19.9642 --metallicity 0.01416 +--initial-mass 19.9721 --metallicity 0.01416 +--initial-mass 19.9801 --metallicity 0.01416 +--initial-mass 19.988 --metallicity 0.01416 +--initial-mass 19.996 --metallicity 0.01416 +--initial-mass 20.004 --metallicity 0.01416 +--initial-mass 20.012 --metallicity 0.01416 +--initial-mass 20.0199 --metallicity 0.01416 +--initial-mass 20.0279 --metallicity 0.01416 +--initial-mass 20.0359 --metallicity 0.01416 +--initial-mass 20.0439 --metallicity 0.01416 +--initial-mass 20.0519 --metallicity 0.01416 +--initial-mass 20.0599 --metallicity 0.01416 +--initial-mass 20.0679 --metallicity 0.01416 +--initial-mass 20.0759 --metallicity 0.01416 +--initial-mass 20.0839 --metallicity 0.01416 +--initial-mass 20.0919 --metallicity 0.01416 +--initial-mass 20.0999 --metallicity 0.01416 +--initial-mass 20.1079 --metallicity 0.01416 +--initial-mass 20.1159 --metallicity 0.01416 +--initial-mass 20.1239 --metallicity 0.01416 +--initial-mass 20.1319 --metallicity 0.01416 +--initial-mass 20.14 --metallicity 0.01416 +--initial-mass 20.148 --metallicity 0.01416 +--initial-mass 20.156 --metallicity 0.01416 +--initial-mass 20.164 --metallicity 0.01416 +--initial-mass 20.1721 --metallicity 0.01416 +--initial-mass 20.1801 --metallicity 0.01416 +--initial-mass 20.1882 --metallicity 0.01416 +--initial-mass 20.1962 --metallicity 0.01416 +--initial-mass 20.2043 --metallicity 0.01416 +--initial-mass 20.2123 --metallicity 0.01416 +--initial-mass 20.2204 --metallicity 0.01416 +--initial-mass 20.2284 --metallicity 0.01416 +--initial-mass 20.2365 --metallicity 0.01416 +--initial-mass 20.2446 --metallicity 0.01416 +--initial-mass 20.2526 --metallicity 0.01416 +--initial-mass 20.2607 --metallicity 0.01416 +--initial-mass 20.2688 --metallicity 0.01416 +--initial-mass 20.2768 --metallicity 0.01416 +--initial-mass 20.2849 --metallicity 0.01416 +--initial-mass 20.293 --metallicity 0.01416 +--initial-mass 20.3011 --metallicity 0.01416 +--initial-mass 20.3092 --metallicity 0.01416 +--initial-mass 20.3173 --metallicity 0.01416 +--initial-mass 20.3254 --metallicity 0.01416 +--initial-mass 20.3335 --metallicity 0.01416 +--initial-mass 20.3416 --metallicity 0.01416 +--initial-mass 20.3497 --metallicity 0.01416 +--initial-mass 20.3578 --metallicity 0.01416 +--initial-mass 20.3659 --metallicity 0.01416 +--initial-mass 20.374 --metallicity 0.01416 +--initial-mass 20.3822 --metallicity 0.01416 +--initial-mass 20.3903 --metallicity 0.01416 +--initial-mass 20.3984 --metallicity 0.01416 +--initial-mass 20.4065 --metallicity 0.01416 +--initial-mass 20.4147 --metallicity 0.01416 +--initial-mass 20.4228 --metallicity 0.01416 +--initial-mass 20.4309 --metallicity 0.01416 +--initial-mass 20.4391 --metallicity 0.01416 +--initial-mass 20.4472 --metallicity 0.01416 +--initial-mass 20.4554 --metallicity 0.01416 +--initial-mass 20.4635 --metallicity 0.01416 +--initial-mass 20.4717 --metallicity 0.01416 +--initial-mass 20.4798 --metallicity 0.01416 +--initial-mass 20.488 --metallicity 0.01416 +--initial-mass 20.4962 --metallicity 0.01416 +--initial-mass 20.5043 --metallicity 0.01416 +--initial-mass 20.5125 --metallicity 0.01416 +--initial-mass 20.5207 --metallicity 0.01416 +--initial-mass 20.5289 --metallicity 0.01416 +--initial-mass 20.5371 --metallicity 0.01416 +--initial-mass 20.5452 --metallicity 0.01416 +--initial-mass 20.5534 --metallicity 0.01416 +--initial-mass 20.5616 --metallicity 0.01416 +--initial-mass 20.5698 --metallicity 0.01416 +--initial-mass 20.578 --metallicity 0.01416 +--initial-mass 20.5862 --metallicity 0.01416 +--initial-mass 20.5944 --metallicity 0.01416 +--initial-mass 20.6026 --metallicity 0.01416 +--initial-mass 20.6108 --metallicity 0.01416 +--initial-mass 20.6191 --metallicity 0.01416 +--initial-mass 20.6273 --metallicity 0.01416 +--initial-mass 20.6355 --metallicity 0.01416 +--initial-mass 20.6437 --metallicity 0.01416 +--initial-mass 20.6519 --metallicity 0.01416 +--initial-mass 20.6602 --metallicity 0.01416 +--initial-mass 20.6684 --metallicity 0.01416 +--initial-mass 20.6766 --metallicity 0.01416 +--initial-mass 20.6849 --metallicity 0.01416 +--initial-mass 20.6931 --metallicity 0.01416 +--initial-mass 20.7014 --metallicity 0.01416 +--initial-mass 20.7096 --metallicity 0.01416 +--initial-mass 20.7179 --metallicity 0.01416 +--initial-mass 20.7261 --metallicity 0.01416 +--initial-mass 20.7344 --metallicity 0.01416 +--initial-mass 20.7427 --metallicity 0.01416 +--initial-mass 20.7509 --metallicity 0.01416 +--initial-mass 20.7592 --metallicity 0.01416 +--initial-mass 20.7675 --metallicity 0.01416 +--initial-mass 20.7758 --metallicity 0.01416 +--initial-mass 20.784 --metallicity 0.01416 +--initial-mass 20.7923 --metallicity 0.01416 +--initial-mass 20.8006 --metallicity 0.01416 +--initial-mass 20.8089 --metallicity 0.01416 +--initial-mass 20.8172 --metallicity 0.01416 +--initial-mass 20.8255 --metallicity 0.01416 +--initial-mass 20.8338 --metallicity 0.01416 +--initial-mass 20.8421 --metallicity 0.01416 +--initial-mass 20.8504 --metallicity 0.01416 +--initial-mass 20.8587 --metallicity 0.01416 +--initial-mass 20.867 --metallicity 0.01416 +--initial-mass 20.8753 --metallicity 0.01416 +--initial-mass 20.8837 --metallicity 0.01416 +--initial-mass 20.892 --metallicity 0.01416 +--initial-mass 20.9003 --metallicity 0.01416 +--initial-mass 20.9086 --metallicity 0.01416 +--initial-mass 20.917 --metallicity 0.01416 +--initial-mass 20.9253 --metallicity 0.01416 +--initial-mass 20.9336 --metallicity 0.01416 +--initial-mass 20.942 --metallicity 0.01416 +--initial-mass 20.9503 --metallicity 0.01416 +--initial-mass 20.9587 --metallicity 0.01416 +--initial-mass 20.967 --metallicity 0.01416 +--initial-mass 20.9754 --metallicity 0.01416 +--initial-mass 20.9838 --metallicity 0.01416 +--initial-mass 20.9921 --metallicity 0.01416 +--initial-mass 21.0005 --metallicity 0.01416 +--initial-mass 21.0089 --metallicity 0.01416 +--initial-mass 21.0172 --metallicity 0.01416 +--initial-mass 21.0256 --metallicity 0.01416 +--initial-mass 21.034 --metallicity 0.01416 +--initial-mass 21.0424 --metallicity 0.01416 +--initial-mass 21.0507 --metallicity 0.01416 +--initial-mass 21.0591 --metallicity 0.01416 +--initial-mass 21.0675 --metallicity 0.01416 +--initial-mass 21.0759 --metallicity 0.01416 +--initial-mass 21.0843 --metallicity 0.01416 +--initial-mass 21.0927 --metallicity 0.01416 +--initial-mass 21.1011 --metallicity 0.01416 +--initial-mass 21.1095 --metallicity 0.01416 +--initial-mass 21.118 --metallicity 0.01416 +--initial-mass 21.1264 --metallicity 0.01416 +--initial-mass 21.1348 --metallicity 0.01416 +--initial-mass 21.1432 --metallicity 0.01416 +--initial-mass 21.1516 --metallicity 0.01416 +--initial-mass 21.1601 --metallicity 0.01416 +--initial-mass 21.1685 --metallicity 0.01416 +--initial-mass 21.1769 --metallicity 0.01416 +--initial-mass 21.1854 --metallicity 0.01416 +--initial-mass 21.1938 --metallicity 0.01416 +--initial-mass 21.2023 --metallicity 0.01416 +--initial-mass 21.2107 --metallicity 0.01416 +--initial-mass 21.2192 --metallicity 0.01416 +--initial-mass 21.2276 --metallicity 0.01416 +--initial-mass 21.2361 --metallicity 0.01416 +--initial-mass 21.2446 --metallicity 0.01416 +--initial-mass 21.253 --metallicity 0.01416 +--initial-mass 21.2615 --metallicity 0.01416 +--initial-mass 21.27 --metallicity 0.01416 +--initial-mass 21.2785 --metallicity 0.01416 +--initial-mass 21.2869 --metallicity 0.01416 +--initial-mass 21.2954 --metallicity 0.01416 +--initial-mass 21.3039 --metallicity 0.01416 +--initial-mass 21.3124 --metallicity 0.01416 +--initial-mass 21.3209 --metallicity 0.01416 +--initial-mass 21.3294 --metallicity 0.01416 +--initial-mass 21.3379 --metallicity 0.01416 +--initial-mass 21.3464 --metallicity 0.01416 +--initial-mass 21.3549 --metallicity 0.01416 +--initial-mass 21.3634 --metallicity 0.01416 +--initial-mass 21.3719 --metallicity 0.01416 +--initial-mass 21.3804 --metallicity 0.01416 +--initial-mass 21.389 --metallicity 0.01416 +--initial-mass 21.3975 --metallicity 0.01416 +--initial-mass 21.406 --metallicity 0.01416 +--initial-mass 21.4145 --metallicity 0.01416 +--initial-mass 21.4231 --metallicity 0.01416 +--initial-mass 21.4316 --metallicity 0.01416 +--initial-mass 21.4402 --metallicity 0.01416 +--initial-mass 21.4487 --metallicity 0.01416 +--initial-mass 21.4573 --metallicity 0.01416 +--initial-mass 21.4658 --metallicity 0.01416 +--initial-mass 21.4744 --metallicity 0.01416 +--initial-mass 21.4829 --metallicity 0.01416 +--initial-mass 21.4915 --metallicity 0.01416 +--initial-mass 21.5001 --metallicity 0.01416 +--initial-mass 21.5086 --metallicity 0.01416 +--initial-mass 21.5172 --metallicity 0.01416 +--initial-mass 21.5258 --metallicity 0.01416 +--initial-mass 21.5343 --metallicity 0.01416 +--initial-mass 21.5429 --metallicity 0.01416 +--initial-mass 21.5515 --metallicity 0.01416 +--initial-mass 21.5601 --metallicity 0.01416 +--initial-mass 21.5687 --metallicity 0.01416 +--initial-mass 21.5773 --metallicity 0.01416 +--initial-mass 21.5859 --metallicity 0.01416 +--initial-mass 21.5945 --metallicity 0.01416 +--initial-mass 21.6031 --metallicity 0.01416 +--initial-mass 21.6117 --metallicity 0.01416 +--initial-mass 21.6203 --metallicity 0.01416 +--initial-mass 21.6289 --metallicity 0.01416 +--initial-mass 21.6376 --metallicity 0.01416 +--initial-mass 21.6462 --metallicity 0.01416 +--initial-mass 21.6548 --metallicity 0.01416 +--initial-mass 21.6634 --metallicity 0.01416 +--initial-mass 21.6721 --metallicity 0.01416 +--initial-mass 21.6807 --metallicity 0.01416 +--initial-mass 21.6894 --metallicity 0.01416 +--initial-mass 21.698 --metallicity 0.01416 +--initial-mass 21.7066 --metallicity 0.01416 +--initial-mass 21.7153 --metallicity 0.01416 +--initial-mass 21.724 --metallicity 0.01416 +--initial-mass 21.7326 --metallicity 0.01416 +--initial-mass 21.7413 --metallicity 0.01416 +--initial-mass 21.7499 --metallicity 0.01416 +--initial-mass 21.7586 --metallicity 0.01416 +--initial-mass 21.7673 --metallicity 0.01416 +--initial-mass 21.776 --metallicity 0.01416 +--initial-mass 21.7846 --metallicity 0.01416 +--initial-mass 21.7933 --metallicity 0.01416 +--initial-mass 21.802 --metallicity 0.01416 +--initial-mass 21.8107 --metallicity 0.01416 +--initial-mass 21.8194 --metallicity 0.01416 +--initial-mass 21.8281 --metallicity 0.01416 +--initial-mass 21.8368 --metallicity 0.01416 +--initial-mass 21.8455 --metallicity 0.01416 +--initial-mass 21.8542 --metallicity 0.01416 +--initial-mass 21.8629 --metallicity 0.01416 +--initial-mass 21.8716 --metallicity 0.01416 +--initial-mass 21.8803 --metallicity 0.01416 +--initial-mass 21.8891 --metallicity 0.01416 +--initial-mass 21.8978 --metallicity 0.01416 +--initial-mass 21.9065 --metallicity 0.01416 +--initial-mass 21.9152 --metallicity 0.01416 +--initial-mass 21.924 --metallicity 0.01416 +--initial-mass 21.9327 --metallicity 0.01416 +--initial-mass 21.9414 --metallicity 0.01416 +--initial-mass 21.9502 --metallicity 0.01416 +--initial-mass 21.9589 --metallicity 0.01416 +--initial-mass 21.9677 --metallicity 0.01416 +--initial-mass 21.9764 --metallicity 0.01416 +--initial-mass 21.9852 --metallicity 0.01416 +--initial-mass 21.994 --metallicity 0.01416 +--initial-mass 22.0027 --metallicity 0.01416 +--initial-mass 22.0115 --metallicity 0.01416 +--initial-mass 22.0203 --metallicity 0.01416 +--initial-mass 22.0291 --metallicity 0.01416 +--initial-mass 22.0378 --metallicity 0.01416 +--initial-mass 22.0466 --metallicity 0.01416 +--initial-mass 22.0554 --metallicity 0.01416 +--initial-mass 22.0642 --metallicity 0.01416 +--initial-mass 22.073 --metallicity 0.01416 +--initial-mass 22.0818 --metallicity 0.01416 +--initial-mass 22.0906 --metallicity 0.01416 +--initial-mass 22.0994 --metallicity 0.01416 +--initial-mass 22.1082 --metallicity 0.01416 +--initial-mass 22.117 --metallicity 0.01416 +--initial-mass 22.1258 --metallicity 0.01416 +--initial-mass 22.1346 --metallicity 0.01416 +--initial-mass 22.1435 --metallicity 0.01416 +--initial-mass 22.1523 --metallicity 0.01416 +--initial-mass 22.1611 --metallicity 0.01416 +--initial-mass 22.17 --metallicity 0.01416 +--initial-mass 22.1788 --metallicity 0.01416 +--initial-mass 22.1876 --metallicity 0.01416 +--initial-mass 22.1965 --metallicity 0.01416 +--initial-mass 22.2053 --metallicity 0.01416 +--initial-mass 22.2142 --metallicity 0.01416 +--initial-mass 22.223 --metallicity 0.01416 +--initial-mass 22.2319 --metallicity 0.01416 +--initial-mass 22.2407 --metallicity 0.01416 +--initial-mass 22.2496 --metallicity 0.01416 +--initial-mass 22.2585 --metallicity 0.01416 +--initial-mass 22.2673 --metallicity 0.01416 +--initial-mass 22.2762 --metallicity 0.01416 +--initial-mass 22.2851 --metallicity 0.01416 +--initial-mass 22.294 --metallicity 0.01416 +--initial-mass 22.3029 --metallicity 0.01416 +--initial-mass 22.3117 --metallicity 0.01416 +--initial-mass 22.3206 --metallicity 0.01416 +--initial-mass 22.3295 --metallicity 0.01416 +--initial-mass 22.3384 --metallicity 0.01416 +--initial-mass 22.3473 --metallicity 0.01416 +--initial-mass 22.3562 --metallicity 0.01416 +--initial-mass 22.3652 --metallicity 0.01416 +--initial-mass 22.3741 --metallicity 0.01416 +--initial-mass 22.383 --metallicity 0.01416 +--initial-mass 22.3919 --metallicity 0.01416 +--initial-mass 22.4008 --metallicity 0.01416 +--initial-mass 22.4098 --metallicity 0.01416 +--initial-mass 22.4187 --metallicity 0.01416 +--initial-mass 22.4276 --metallicity 0.01416 +--initial-mass 22.4366 --metallicity 0.01416 +--initial-mass 22.4455 --metallicity 0.01416 +--initial-mass 22.4545 --metallicity 0.01416 +--initial-mass 22.4634 --metallicity 0.01416 +--initial-mass 22.4724 --metallicity 0.01416 +--initial-mass 22.4813 --metallicity 0.01416 +--initial-mass 22.4903 --metallicity 0.01416 +--initial-mass 22.4992 --metallicity 0.01416 +--initial-mass 22.5082 --metallicity 0.01416 +--initial-mass 22.5172 --metallicity 0.01416 +--initial-mass 22.5261 --metallicity 0.01416 +--initial-mass 22.5351 --metallicity 0.01416 +--initial-mass 22.5441 --metallicity 0.01416 +--initial-mass 22.5531 --metallicity 0.01416 +--initial-mass 22.5621 --metallicity 0.01416 +--initial-mass 22.5711 --metallicity 0.01416 +--initial-mass 22.5801 --metallicity 0.01416 +--initial-mass 22.5891 --metallicity 0.01416 +--initial-mass 22.5981 --metallicity 0.01416 +--initial-mass 22.6071 --metallicity 0.01416 +--initial-mass 22.6161 --metallicity 0.01416 +--initial-mass 22.6251 --metallicity 0.01416 +--initial-mass 22.6341 --metallicity 0.01416 +--initial-mass 22.6431 --metallicity 0.01416 +--initial-mass 22.6522 --metallicity 0.01416 +--initial-mass 22.6612 --metallicity 0.01416 +--initial-mass 22.6702 --metallicity 0.01416 +--initial-mass 22.6793 --metallicity 0.01416 +--initial-mass 22.6883 --metallicity 0.01416 +--initial-mass 22.6973 --metallicity 0.01416 +--initial-mass 22.7064 --metallicity 0.01416 +--initial-mass 22.7154 --metallicity 0.01416 +--initial-mass 22.7245 --metallicity 0.01416 +--initial-mass 22.7335 --metallicity 0.01416 +--initial-mass 22.7426 --metallicity 0.01416 +--initial-mass 22.7517 --metallicity 0.01416 +--initial-mass 22.7607 --metallicity 0.01416 +--initial-mass 22.7698 --metallicity 0.01416 +--initial-mass 22.7789 --metallicity 0.01416 +--initial-mass 22.788 --metallicity 0.01416 +--initial-mass 22.797 --metallicity 0.01416 +--initial-mass 22.8061 --metallicity 0.01416 +--initial-mass 22.8152 --metallicity 0.01416 +--initial-mass 22.8243 --metallicity 0.01416 +--initial-mass 22.8334 --metallicity 0.01416 +--initial-mass 22.8425 --metallicity 0.01416 +--initial-mass 22.8516 --metallicity 0.01416 +--initial-mass 22.8607 --metallicity 0.01416 +--initial-mass 22.8698 --metallicity 0.01416 +--initial-mass 22.8789 --metallicity 0.01416 +--initial-mass 22.8881 --metallicity 0.01416 +--initial-mass 22.8972 --metallicity 0.01416 +--initial-mass 22.9063 --metallicity 0.01416 +--initial-mass 22.9154 --metallicity 0.01416 +--initial-mass 22.9246 --metallicity 0.01416 +--initial-mass 22.9337 --metallicity 0.01416 +--initial-mass 22.9429 --metallicity 0.01416 +--initial-mass 22.952 --metallicity 0.01416 +--initial-mass 22.9611 --metallicity 0.01416 +--initial-mass 22.9703 --metallicity 0.01416 +--initial-mass 22.9795 --metallicity 0.01416 +--initial-mass 22.9886 --metallicity 0.01416 +--initial-mass 22.9978 --metallicity 0.01416 +--initial-mass 23.0069 --metallicity 0.01416 +--initial-mass 23.0161 --metallicity 0.01416 +--initial-mass 23.0253 --metallicity 0.01416 +--initial-mass 23.0345 --metallicity 0.01416 +--initial-mass 23.0436 --metallicity 0.01416 +--initial-mass 23.0528 --metallicity 0.01416 +--initial-mass 23.062 --metallicity 0.01416 +--initial-mass 23.0712 --metallicity 0.01416 +--initial-mass 23.0804 --metallicity 0.01416 +--initial-mass 23.0896 --metallicity 0.01416 +--initial-mass 23.0988 --metallicity 0.01416 +--initial-mass 23.108 --metallicity 0.01416 +--initial-mass 23.1172 --metallicity 0.01416 +--initial-mass 23.1264 --metallicity 0.01416 +--initial-mass 23.1356 --metallicity 0.01416 +--initial-mass 23.1449 --metallicity 0.01416 +--initial-mass 23.1541 --metallicity 0.01416 +--initial-mass 23.1633 --metallicity 0.01416 +--initial-mass 23.1725 --metallicity 0.01416 +--initial-mass 23.1818 --metallicity 0.01416 +--initial-mass 23.191 --metallicity 0.01416 +--initial-mass 23.2003 --metallicity 0.01416 +--initial-mass 23.2095 --metallicity 0.01416 +--initial-mass 23.2188 --metallicity 0.01416 +--initial-mass 23.228 --metallicity 0.01416 +--initial-mass 23.2373 --metallicity 0.01416 +--initial-mass 23.2465 --metallicity 0.01416 +--initial-mass 23.2558 --metallicity 0.01416 +--initial-mass 23.2651 --metallicity 0.01416 +--initial-mass 23.2743 --metallicity 0.01416 +--initial-mass 23.2836 --metallicity 0.01416 +--initial-mass 23.2929 --metallicity 0.01416 +--initial-mass 23.3022 --metallicity 0.01416 +--initial-mass 23.3115 --metallicity 0.01416 +--initial-mass 23.3208 --metallicity 0.01416 +--initial-mass 23.3301 --metallicity 0.01416 +--initial-mass 23.3394 --metallicity 0.01416 +--initial-mass 23.3487 --metallicity 0.01416 +--initial-mass 23.358 --metallicity 0.01416 +--initial-mass 23.3673 --metallicity 0.01416 +--initial-mass 23.3766 --metallicity 0.01416 +--initial-mass 23.3859 --metallicity 0.01416 +--initial-mass 23.3952 --metallicity 0.01416 +--initial-mass 23.4045 --metallicity 0.01416 +--initial-mass 23.4139 --metallicity 0.01416 +--initial-mass 23.4232 --metallicity 0.01416 +--initial-mass 23.4325 --metallicity 0.01416 +--initial-mass 23.4419 --metallicity 0.01416 +--initial-mass 23.4512 --metallicity 0.01416 +--initial-mass 23.4606 --metallicity 0.01416 +--initial-mass 23.4699 --metallicity 0.01416 +--initial-mass 23.4793 --metallicity 0.01416 +--initial-mass 23.4886 --metallicity 0.01416 +--initial-mass 23.498 --metallicity 0.01416 +--initial-mass 23.5074 --metallicity 0.01416 +--initial-mass 23.5167 --metallicity 0.01416 +--initial-mass 23.5261 --metallicity 0.01416 +--initial-mass 23.5355 --metallicity 0.01416 +--initial-mass 23.5449 --metallicity 0.01416 +--initial-mass 23.5542 --metallicity 0.01416 +--initial-mass 23.5636 --metallicity 0.01416 +--initial-mass 23.573 --metallicity 0.01416 +--initial-mass 23.5824 --metallicity 0.01416 +--initial-mass 23.5918 --metallicity 0.01416 +--initial-mass 23.6012 --metallicity 0.01416 +--initial-mass 23.6106 --metallicity 0.01416 +--initial-mass 23.62 --metallicity 0.01416 +--initial-mass 23.6294 --metallicity 0.01416 +--initial-mass 23.6389 --metallicity 0.01416 +--initial-mass 23.6483 --metallicity 0.01416 +--initial-mass 23.6577 --metallicity 0.01416 +--initial-mass 23.6671 --metallicity 0.01416 +--initial-mass 23.6766 --metallicity 0.01416 +--initial-mass 23.686 --metallicity 0.01416 +--initial-mass 23.6954 --metallicity 0.01416 +--initial-mass 23.7049 --metallicity 0.01416 +--initial-mass 23.7143 --metallicity 0.01416 +--initial-mass 23.7238 --metallicity 0.01416 +--initial-mass 23.7332 --metallicity 0.01416 +--initial-mass 23.7427 --metallicity 0.01416 +--initial-mass 23.7522 --metallicity 0.01416 +--initial-mass 23.7616 --metallicity 0.01416 +--initial-mass 23.7711 --metallicity 0.01416 +--initial-mass 23.7806 --metallicity 0.01416 +--initial-mass 23.7901 --metallicity 0.01416 +--initial-mass 23.7995 --metallicity 0.01416 +--initial-mass 23.809 --metallicity 0.01416 +--initial-mass 23.8185 --metallicity 0.01416 +--initial-mass 23.828 --metallicity 0.01416 +--initial-mass 23.8375 --metallicity 0.01416 +--initial-mass 23.847 --metallicity 0.01416 +--initial-mass 23.8565 --metallicity 0.01416 +--initial-mass 23.866 --metallicity 0.01416 +--initial-mass 23.8755 --metallicity 0.01416 +--initial-mass 23.885 --metallicity 0.01416 +--initial-mass 23.8946 --metallicity 0.01416 +--initial-mass 23.9041 --metallicity 0.01416 +--initial-mass 23.9136 --metallicity 0.01416 +--initial-mass 23.9231 --metallicity 0.01416 +--initial-mass 23.9327 --metallicity 0.01416 +--initial-mass 23.9422 --metallicity 0.01416 +--initial-mass 23.9518 --metallicity 0.01416 +--initial-mass 23.9613 --metallicity 0.01416 +--initial-mass 23.9709 --metallicity 0.01416 +--initial-mass 23.9804 --metallicity 0.01416 +--initial-mass 23.99 --metallicity 0.01416 +--initial-mass 23.9995 --metallicity 0.01416 +--initial-mass 24.0091 --metallicity 0.01416 +--initial-mass 24.0187 --metallicity 0.01416 +--initial-mass 24.0282 --metallicity 0.01416 +--initial-mass 24.0378 --metallicity 0.01416 +--initial-mass 24.0474 --metallicity 0.01416 +--initial-mass 24.057 --metallicity 0.01416 +--initial-mass 24.0666 --metallicity 0.01416 +--initial-mass 24.0762 --metallicity 0.01416 +--initial-mass 24.0857 --metallicity 0.01416 +--initial-mass 24.0953 --metallicity 0.01416 +--initial-mass 24.105 --metallicity 0.01416 +--initial-mass 24.1146 --metallicity 0.01416 +--initial-mass 24.1242 --metallicity 0.01416 +--initial-mass 24.1338 --metallicity 0.01416 +--initial-mass 24.1434 --metallicity 0.01416 +--initial-mass 24.153 --metallicity 0.01416 +--initial-mass 24.1627 --metallicity 0.01416 +--initial-mass 24.1723 --metallicity 0.01416 +--initial-mass 24.1819 --metallicity 0.01416 +--initial-mass 24.1916 --metallicity 0.01416 +--initial-mass 24.2012 --metallicity 0.01416 +--initial-mass 24.2108 --metallicity 0.01416 +--initial-mass 24.2205 --metallicity 0.01416 +--initial-mass 24.2301 --metallicity 0.01416 +--initial-mass 24.2398 --metallicity 0.01416 +--initial-mass 24.2495 --metallicity 0.01416 +--initial-mass 24.2591 --metallicity 0.01416 +--initial-mass 24.2688 --metallicity 0.01416 +--initial-mass 24.2785 --metallicity 0.01416 +--initial-mass 24.2881 --metallicity 0.01416 +--initial-mass 24.2978 --metallicity 0.01416 +--initial-mass 24.3075 --metallicity 0.01416 +--initial-mass 24.3172 --metallicity 0.01416 +--initial-mass 24.3269 --metallicity 0.01416 +--initial-mass 24.3366 --metallicity 0.01416 +--initial-mass 24.3463 --metallicity 0.01416 +--initial-mass 24.356 --metallicity 0.01416 +--initial-mass 24.3657 --metallicity 0.01416 +--initial-mass 24.3754 --metallicity 0.01416 +--initial-mass 24.3851 --metallicity 0.01416 +--initial-mass 24.3948 --metallicity 0.01416 +--initial-mass 24.4046 --metallicity 0.01416 +--initial-mass 24.4143 --metallicity 0.01416 +--initial-mass 24.424 --metallicity 0.01416 +--initial-mass 24.4338 --metallicity 0.01416 +--initial-mass 24.4435 --metallicity 0.01416 +--initial-mass 24.4532 --metallicity 0.01416 +--initial-mass 24.463 --metallicity 0.01416 +--initial-mass 24.4727 --metallicity 0.01416 +--initial-mass 24.4825 --metallicity 0.01416 +--initial-mass 24.4922 --metallicity 0.01416 +--initial-mass 24.502 --metallicity 0.01416 +--initial-mass 24.5118 --metallicity 0.01416 +--initial-mass 24.5215 --metallicity 0.01416 +--initial-mass 24.5313 --metallicity 0.01416 +--initial-mass 24.5411 --metallicity 0.01416 +--initial-mass 24.5509 --metallicity 0.01416 +--initial-mass 24.5607 --metallicity 0.01416 +--initial-mass 24.5704 --metallicity 0.01416 +--initial-mass 24.5802 --metallicity 0.01416 +--initial-mass 24.59 --metallicity 0.01416 +--initial-mass 24.5998 --metallicity 0.01416 +--initial-mass 24.6096 --metallicity 0.01416 +--initial-mass 24.6194 --metallicity 0.01416 +--initial-mass 24.6293 --metallicity 0.01416 +--initial-mass 24.6391 --metallicity 0.01416 +--initial-mass 24.6489 --metallicity 0.01416 +--initial-mass 24.6587 --metallicity 0.01416 +--initial-mass 24.6685 --metallicity 0.01416 +--initial-mass 24.6784 --metallicity 0.01416 +--initial-mass 24.6882 --metallicity 0.01416 +--initial-mass 24.698 --metallicity 0.01416 +--initial-mass 24.7079 --metallicity 0.01416 +--initial-mass 24.7177 --metallicity 0.01416 +--initial-mass 24.7276 --metallicity 0.01416 +--initial-mass 24.7374 --metallicity 0.01416 +--initial-mass 24.7473 --metallicity 0.01416 +--initial-mass 24.7572 --metallicity 0.01416 +--initial-mass 24.767 --metallicity 0.01416 +--initial-mass 24.7769 --metallicity 0.01416 +--initial-mass 24.7868 --metallicity 0.01416 +--initial-mass 24.7967 --metallicity 0.01416 +--initial-mass 24.8065 --metallicity 0.01416 +--initial-mass 24.8164 --metallicity 0.01416 +--initial-mass 24.8263 --metallicity 0.01416 +--initial-mass 24.8362 --metallicity 0.01416 +--initial-mass 24.8461 --metallicity 0.01416 +--initial-mass 24.856 --metallicity 0.01416 +--initial-mass 24.8659 --metallicity 0.01416 +--initial-mass 24.8758 --metallicity 0.01416 +--initial-mass 24.8857 --metallicity 0.01416 +--initial-mass 24.8957 --metallicity 0.01416 +--initial-mass 24.9056 --metallicity 0.01416 +--initial-mass 24.9155 --metallicity 0.01416 +--initial-mass 24.9254 --metallicity 0.01416 +--initial-mass 24.9354 --metallicity 0.01416 +--initial-mass 24.9453 --metallicity 0.01416 +--initial-mass 24.9553 --metallicity 0.01416 +--initial-mass 24.9652 --metallicity 0.01416 +--initial-mass 24.9752 --metallicity 0.01416 +--initial-mass 24.9851 --metallicity 0.01416 +--initial-mass 24.9951 --metallicity 0.01416 +--initial-mass 25.005 --metallicity 0.01416 +--initial-mass 25.015 --metallicity 0.01416 +--initial-mass 25.025 --metallicity 0.01416 +--initial-mass 25.0349 --metallicity 0.01416 +--initial-mass 25.0449 --metallicity 0.01416 +--initial-mass 25.0549 --metallicity 0.01416 +--initial-mass 25.0649 --metallicity 0.01416 +--initial-mass 25.0749 --metallicity 0.01416 +--initial-mass 25.0849 --metallicity 0.01416 +--initial-mass 25.0949 --metallicity 0.01416 +--initial-mass 25.1049 --metallicity 0.01416 +--initial-mass 25.1149 --metallicity 0.01416 +--initial-mass 25.1249 --metallicity 0.01416 +--initial-mass 25.1349 --metallicity 0.01416 +--initial-mass 25.1449 --metallicity 0.01416 +--initial-mass 25.1549 --metallicity 0.01416 +--initial-mass 25.165 --metallicity 0.01416 +--initial-mass 25.175 --metallicity 0.01416 +--initial-mass 25.185 --metallicity 0.01416 +--initial-mass 25.1951 --metallicity 0.01416 +--initial-mass 25.2051 --metallicity 0.01416 +--initial-mass 25.2151 --metallicity 0.01416 +--initial-mass 25.2252 --metallicity 0.01416 +--initial-mass 25.2352 --metallicity 0.01416 +--initial-mass 25.2453 --metallicity 0.01416 +--initial-mass 25.2554 --metallicity 0.01416 +--initial-mass 25.2654 --metallicity 0.01416 +--initial-mass 25.2755 --metallicity 0.01416 +--initial-mass 25.2856 --metallicity 0.01416 +--initial-mass 25.2957 --metallicity 0.01416 +--initial-mass 25.3057 --metallicity 0.01416 +--initial-mass 25.3158 --metallicity 0.01416 +--initial-mass 25.3259 --metallicity 0.01416 +--initial-mass 25.336 --metallicity 0.01416 +--initial-mass 25.3461 --metallicity 0.01416 +--initial-mass 25.3562 --metallicity 0.01416 +--initial-mass 25.3663 --metallicity 0.01416 +--initial-mass 25.3764 --metallicity 0.01416 +--initial-mass 25.3865 --metallicity 0.01416 +--initial-mass 25.3967 --metallicity 0.01416 +--initial-mass 25.4068 --metallicity 0.01416 +--initial-mass 25.4169 --metallicity 0.01416 +--initial-mass 25.427 --metallicity 0.01416 +--initial-mass 25.4372 --metallicity 0.01416 +--initial-mass 25.4473 --metallicity 0.01416 +--initial-mass 25.4574 --metallicity 0.01416 +--initial-mass 25.4676 --metallicity 0.01416 +--initial-mass 25.4777 --metallicity 0.01416 +--initial-mass 25.4879 --metallicity 0.01416 +--initial-mass 25.4981 --metallicity 0.01416 +--initial-mass 25.5082 --metallicity 0.01416 +--initial-mass 25.5184 --metallicity 0.01416 +--initial-mass 25.5286 --metallicity 0.01416 +--initial-mass 25.5387 --metallicity 0.01416 +--initial-mass 25.5489 --metallicity 0.01416 +--initial-mass 25.5591 --metallicity 0.01416 +--initial-mass 25.5693 --metallicity 0.01416 +--initial-mass 25.5795 --metallicity 0.01416 +--initial-mass 25.5897 --metallicity 0.01416 +--initial-mass 25.5999 --metallicity 0.01416 +--initial-mass 25.6101 --metallicity 0.01416 +--initial-mass 25.6203 --metallicity 0.01416 +--initial-mass 25.6305 --metallicity 0.01416 +--initial-mass 25.6407 --metallicity 0.01416 +--initial-mass 25.6509 --metallicity 0.01416 +--initial-mass 25.6611 --metallicity 0.01416 +--initial-mass 25.6714 --metallicity 0.01416 +--initial-mass 25.6816 --metallicity 0.01416 +--initial-mass 25.6918 --metallicity 0.01416 +--initial-mass 25.7021 --metallicity 0.01416 +--initial-mass 25.7123 --metallicity 0.01416 +--initial-mass 25.7226 --metallicity 0.01416 +--initial-mass 25.7328 --metallicity 0.01416 +--initial-mass 25.7431 --metallicity 0.01416 +--initial-mass 25.7533 --metallicity 0.01416 +--initial-mass 25.7636 --metallicity 0.01416 +--initial-mass 25.7739 --metallicity 0.01416 +--initial-mass 25.7841 --metallicity 0.01416 +--initial-mass 25.7944 --metallicity 0.01416 +--initial-mass 25.8047 --metallicity 0.01416 +--initial-mass 25.815 --metallicity 0.01416 +--initial-mass 25.8253 --metallicity 0.01416 +--initial-mass 25.8356 --metallicity 0.01416 +--initial-mass 25.8459 --metallicity 0.01416 +--initial-mass 25.8562 --metallicity 0.01416 +--initial-mass 25.8665 --metallicity 0.01416 +--initial-mass 25.8768 --metallicity 0.01416 +--initial-mass 25.8871 --metallicity 0.01416 +--initial-mass 25.8974 --metallicity 0.01416 +--initial-mass 25.9077 --metallicity 0.01416 +--initial-mass 25.918 --metallicity 0.01416 +--initial-mass 25.9284 --metallicity 0.01416 +--initial-mass 25.9387 --metallicity 0.01416 +--initial-mass 25.949 --metallicity 0.01416 +--initial-mass 25.9594 --metallicity 0.01416 +--initial-mass 25.9697 --metallicity 0.01416 +--initial-mass 25.9801 --metallicity 0.01416 +--initial-mass 25.9904 --metallicity 0.01416 +--initial-mass 26.0008 --metallicity 0.01416 +--initial-mass 26.0112 --metallicity 0.01416 +--initial-mass 26.0215 --metallicity 0.01416 +--initial-mass 26.0319 --metallicity 0.01416 +--initial-mass 26.0423 --metallicity 0.01416 +--initial-mass 26.0527 --metallicity 0.01416 +--initial-mass 26.063 --metallicity 0.01416 +--initial-mass 26.0734 --metallicity 0.01416 +--initial-mass 26.0838 --metallicity 0.01416 +--initial-mass 26.0942 --metallicity 0.01416 +--initial-mass 26.1046 --metallicity 0.01416 +--initial-mass 26.115 --metallicity 0.01416 +--initial-mass 26.1254 --metallicity 0.01416 +--initial-mass 26.1358 --metallicity 0.01416 +--initial-mass 26.1463 --metallicity 0.01416 +--initial-mass 26.1567 --metallicity 0.01416 +--initial-mass 26.1671 --metallicity 0.01416 +--initial-mass 26.1775 --metallicity 0.01416 +--initial-mass 26.188 --metallicity 0.01416 +--initial-mass 26.1984 --metallicity 0.01416 +--initial-mass 26.2088 --metallicity 0.01416 +--initial-mass 26.2193 --metallicity 0.01416 +--initial-mass 26.2297 --metallicity 0.01416 +--initial-mass 26.2402 --metallicity 0.01416 +--initial-mass 26.2506 --metallicity 0.01416 +--initial-mass 26.2611 --metallicity 0.01416 +--initial-mass 26.2716 --metallicity 0.01416 +--initial-mass 26.282 --metallicity 0.01416 +--initial-mass 26.2925 --metallicity 0.01416 +--initial-mass 26.303 --metallicity 0.01416 +--initial-mass 26.3135 --metallicity 0.01416 +--initial-mass 26.324 --metallicity 0.01416 +--initial-mass 26.3345 --metallicity 0.01416 +--initial-mass 26.345 --metallicity 0.01416 +--initial-mass 26.3555 --metallicity 0.01416 +--initial-mass 26.366 --metallicity 0.01416 +--initial-mass 26.3765 --metallicity 0.01416 +--initial-mass 26.387 --metallicity 0.01416 +--initial-mass 26.3975 --metallicity 0.01416 +--initial-mass 26.408 --metallicity 0.01416 +--initial-mass 26.4185 --metallicity 0.01416 +--initial-mass 26.4291 --metallicity 0.01416 +--initial-mass 26.4396 --metallicity 0.01416 +--initial-mass 26.4501 --metallicity 0.01416 +--initial-mass 26.4607 --metallicity 0.01416 +--initial-mass 26.4712 --metallicity 0.01416 +--initial-mass 26.4818 --metallicity 0.01416 +--initial-mass 26.4923 --metallicity 0.01416 +--initial-mass 26.5029 --metallicity 0.01416 +--initial-mass 26.5135 --metallicity 0.01416 +--initial-mass 26.524 --metallicity 0.01416 +--initial-mass 26.5346 --metallicity 0.01416 +--initial-mass 26.5452 --metallicity 0.01416 +--initial-mass 26.5558 --metallicity 0.01416 +--initial-mass 26.5663 --metallicity 0.01416 +--initial-mass 26.5769 --metallicity 0.01416 +--initial-mass 26.5875 --metallicity 0.01416 +--initial-mass 26.5981 --metallicity 0.01416 +--initial-mass 26.6087 --metallicity 0.01416 +--initial-mass 26.6193 --metallicity 0.01416 +--initial-mass 26.6299 --metallicity 0.01416 +--initial-mass 26.6405 --metallicity 0.01416 +--initial-mass 26.6512 --metallicity 0.01416 +--initial-mass 26.6618 --metallicity 0.01416 +--initial-mass 26.6724 --metallicity 0.01416 +--initial-mass 26.683 --metallicity 0.01416 +--initial-mass 26.6937 --metallicity 0.01416 +--initial-mass 26.7043 --metallicity 0.01416 +--initial-mass 26.715 --metallicity 0.01416 +--initial-mass 26.7256 --metallicity 0.01416 +--initial-mass 26.7363 --metallicity 0.01416 +--initial-mass 26.7469 --metallicity 0.01416 +--initial-mass 26.7576 --metallicity 0.01416 +--initial-mass 26.7682 --metallicity 0.01416 +--initial-mass 26.7789 --metallicity 0.01416 +--initial-mass 26.7896 --metallicity 0.01416 +--initial-mass 26.8003 --metallicity 0.01416 +--initial-mass 26.8109 --metallicity 0.01416 +--initial-mass 26.8216 --metallicity 0.01416 +--initial-mass 26.8323 --metallicity 0.01416 +--initial-mass 26.843 --metallicity 0.01416 +--initial-mass 26.8537 --metallicity 0.01416 +--initial-mass 26.8644 --metallicity 0.01416 +--initial-mass 26.8751 --metallicity 0.01416 +--initial-mass 26.8858 --metallicity 0.01416 +--initial-mass 26.8965 --metallicity 0.01416 +--initial-mass 26.9073 --metallicity 0.01416 +--initial-mass 26.918 --metallicity 0.01416 +--initial-mass 26.9287 --metallicity 0.01416 +--initial-mass 26.9394 --metallicity 0.01416 +--initial-mass 26.9502 --metallicity 0.01416 +--initial-mass 26.9609 --metallicity 0.01416 +--initial-mass 26.9717 --metallicity 0.01416 +--initial-mass 26.9824 --metallicity 0.01416 +--initial-mass 26.9932 --metallicity 0.01416 +--initial-mass 27.0039 --metallicity 0.01416 +--initial-mass 27.0147 --metallicity 0.01416 +--initial-mass 27.0255 --metallicity 0.01416 +--initial-mass 27.0362 --metallicity 0.01416 +--initial-mass 27.047 --metallicity 0.01416 +--initial-mass 27.0578 --metallicity 0.01416 +--initial-mass 27.0686 --metallicity 0.01416 +--initial-mass 27.0794 --metallicity 0.01416 +--initial-mass 27.0901 --metallicity 0.01416 +--initial-mass 27.1009 --metallicity 0.01416 +--initial-mass 27.1117 --metallicity 0.01416 +--initial-mass 27.1226 --metallicity 0.01416 +--initial-mass 27.1334 --metallicity 0.01416 +--initial-mass 27.1442 --metallicity 0.01416 +--initial-mass 27.155 --metallicity 0.01416 +--initial-mass 27.1658 --metallicity 0.01416 +--initial-mass 27.1766 --metallicity 0.01416 +--initial-mass 27.1875 --metallicity 0.01416 +--initial-mass 27.1983 --metallicity 0.01416 +--initial-mass 27.2092 --metallicity 0.01416 +--initial-mass 27.22 --metallicity 0.01416 +--initial-mass 27.2308 --metallicity 0.01416 +--initial-mass 27.2417 --metallicity 0.01416 +--initial-mass 27.2526 --metallicity 0.01416 +--initial-mass 27.2634 --metallicity 0.01416 +--initial-mass 27.2743 --metallicity 0.01416 +--initial-mass 27.2852 --metallicity 0.01416 +--initial-mass 27.296 --metallicity 0.01416 +--initial-mass 27.3069 --metallicity 0.01416 +--initial-mass 27.3178 --metallicity 0.01416 +--initial-mass 27.3287 --metallicity 0.01416 +--initial-mass 27.3396 --metallicity 0.01416 +--initial-mass 27.3505 --metallicity 0.01416 +--initial-mass 27.3614 --metallicity 0.01416 +--initial-mass 27.3723 --metallicity 0.01416 +--initial-mass 27.3832 --metallicity 0.01416 +--initial-mass 27.3941 --metallicity 0.01416 +--initial-mass 27.405 --metallicity 0.01416 +--initial-mass 27.4159 --metallicity 0.01416 +--initial-mass 27.4269 --metallicity 0.01416 +--initial-mass 27.4378 --metallicity 0.01416 +--initial-mass 27.4487 --metallicity 0.01416 +--initial-mass 27.4597 --metallicity 0.01416 +--initial-mass 27.4706 --metallicity 0.01416 +--initial-mass 27.4816 --metallicity 0.01416 +--initial-mass 27.4925 --metallicity 0.01416 +--initial-mass 27.5035 --metallicity 0.01416 +--initial-mass 27.5144 --metallicity 0.01416 +--initial-mass 27.5254 --metallicity 0.01416 +--initial-mass 27.5364 --metallicity 0.01416 +--initial-mass 27.5473 --metallicity 0.01416 +--initial-mass 27.5583 --metallicity 0.01416 +--initial-mass 27.5693 --metallicity 0.01416 +--initial-mass 27.5803 --metallicity 0.01416 +--initial-mass 27.5913 --metallicity 0.01416 +--initial-mass 27.6023 --metallicity 0.01416 +--initial-mass 27.6133 --metallicity 0.01416 +--initial-mass 27.6243 --metallicity 0.01416 +--initial-mass 27.6353 --metallicity 0.01416 +--initial-mass 27.6463 --metallicity 0.01416 +--initial-mass 27.6573 --metallicity 0.01416 +--initial-mass 27.6684 --metallicity 0.01416 +--initial-mass 27.6794 --metallicity 0.01416 +--initial-mass 27.6904 --metallicity 0.01416 +--initial-mass 27.7014 --metallicity 0.01416 +--initial-mass 27.7125 --metallicity 0.01416 +--initial-mass 27.7235 --metallicity 0.01416 +--initial-mass 27.7346 --metallicity 0.01416 +--initial-mass 27.7456 --metallicity 0.01416 +--initial-mass 27.7567 --metallicity 0.01416 +--initial-mass 27.7678 --metallicity 0.01416 +--initial-mass 27.7788 --metallicity 0.01416 +--initial-mass 27.7899 --metallicity 0.01416 +--initial-mass 27.801 --metallicity 0.01416 +--initial-mass 27.8121 --metallicity 0.01416 +--initial-mass 27.8231 --metallicity 0.01416 +--initial-mass 27.8342 --metallicity 0.01416 +--initial-mass 27.8453 --metallicity 0.01416 +--initial-mass 27.8564 --metallicity 0.01416 +--initial-mass 27.8675 --metallicity 0.01416 +--initial-mass 27.8786 --metallicity 0.01416 +--initial-mass 27.8897 --metallicity 0.01416 +--initial-mass 27.9009 --metallicity 0.01416 +--initial-mass 27.912 --metallicity 0.01416 +--initial-mass 27.9231 --metallicity 0.01416 +--initial-mass 27.9342 --metallicity 0.01416 +--initial-mass 27.9454 --metallicity 0.01416 +--initial-mass 27.9565 --metallicity 0.01416 +--initial-mass 27.9676 --metallicity 0.01416 +--initial-mass 27.9788 --metallicity 0.01416 +--initial-mass 27.9899 --metallicity 0.01416 +--initial-mass 28.0011 --metallicity 0.01416 +--initial-mass 28.0123 --metallicity 0.01416 +--initial-mass 28.0234 --metallicity 0.01416 +--initial-mass 28.0346 --metallicity 0.01416 +--initial-mass 28.0458 --metallicity 0.01416 +--initial-mass 28.0569 --metallicity 0.01416 +--initial-mass 28.0681 --metallicity 0.01416 +--initial-mass 28.0793 --metallicity 0.01416 +--initial-mass 28.0905 --metallicity 0.01416 +--initial-mass 28.1017 --metallicity 0.01416 +--initial-mass 28.1129 --metallicity 0.01416 +--initial-mass 28.1241 --metallicity 0.01416 +--initial-mass 28.1353 --metallicity 0.01416 +--initial-mass 28.1465 --metallicity 0.01416 +--initial-mass 28.1577 --metallicity 0.01416 +--initial-mass 28.169 --metallicity 0.01416 +--initial-mass 28.1802 --metallicity 0.01416 +--initial-mass 28.1914 --metallicity 0.01416 +--initial-mass 28.2027 --metallicity 0.01416 +--initial-mass 28.2139 --metallicity 0.01416 +--initial-mass 28.2251 --metallicity 0.01416 +--initial-mass 28.2364 --metallicity 0.01416 +--initial-mass 28.2476 --metallicity 0.01416 +--initial-mass 28.2589 --metallicity 0.01416 +--initial-mass 28.2702 --metallicity 0.01416 +--initial-mass 28.2814 --metallicity 0.01416 +--initial-mass 28.2927 --metallicity 0.01416 +--initial-mass 28.304 --metallicity 0.01416 +--initial-mass 28.3153 --metallicity 0.01416 +--initial-mass 28.3265 --metallicity 0.01416 +--initial-mass 28.3378 --metallicity 0.01416 +--initial-mass 28.3491 --metallicity 0.01416 +--initial-mass 28.3604 --metallicity 0.01416 +--initial-mass 28.3717 --metallicity 0.01416 +--initial-mass 28.383 --metallicity 0.01416 +--initial-mass 28.3943 --metallicity 0.01416 +--initial-mass 28.4057 --metallicity 0.01416 +--initial-mass 28.417 --metallicity 0.01416 +--initial-mass 28.4283 --metallicity 0.01416 +--initial-mass 28.4396 --metallicity 0.01416 +--initial-mass 28.451 --metallicity 0.01416 +--initial-mass 28.4623 --metallicity 0.01416 +--initial-mass 28.4737 --metallicity 0.01416 +--initial-mass 28.485 --metallicity 0.01416 +--initial-mass 28.4964 --metallicity 0.01416 +--initial-mass 28.5077 --metallicity 0.01416 +--initial-mass 28.5191 --metallicity 0.01416 +--initial-mass 28.5304 --metallicity 0.01416 +--initial-mass 28.5418 --metallicity 0.01416 +--initial-mass 28.5532 --metallicity 0.01416 +--initial-mass 28.5646 --metallicity 0.01416 +--initial-mass 28.576 --metallicity 0.01416 +--initial-mass 28.5873 --metallicity 0.01416 +--initial-mass 28.5987 --metallicity 0.01416 +--initial-mass 28.6101 --metallicity 0.01416 +--initial-mass 28.6215 --metallicity 0.01416 +--initial-mass 28.6329 --metallicity 0.01416 +--initial-mass 28.6444 --metallicity 0.01416 +--initial-mass 28.6558 --metallicity 0.01416 +--initial-mass 28.6672 --metallicity 0.01416 +--initial-mass 28.6786 --metallicity 0.01416 +--initial-mass 28.6901 --metallicity 0.01416 +--initial-mass 28.7015 --metallicity 0.01416 +--initial-mass 28.7129 --metallicity 0.01416 +--initial-mass 28.7244 --metallicity 0.01416 +--initial-mass 28.7358 --metallicity 0.01416 +--initial-mass 28.7473 --metallicity 0.01416 +--initial-mass 28.7587 --metallicity 0.01416 +--initial-mass 28.7702 --metallicity 0.01416 +--initial-mass 28.7817 --metallicity 0.01416 +--initial-mass 28.7931 --metallicity 0.01416 +--initial-mass 28.8046 --metallicity 0.01416 +--initial-mass 28.8161 --metallicity 0.01416 +--initial-mass 28.8276 --metallicity 0.01416 +--initial-mass 28.8391 --metallicity 0.01416 +--initial-mass 28.8505 --metallicity 0.01416 +--initial-mass 28.862 --metallicity 0.01416 +--initial-mass 28.8736 --metallicity 0.01416 +--initial-mass 28.8851 --metallicity 0.01416 +--initial-mass 28.8966 --metallicity 0.01416 +--initial-mass 28.9081 --metallicity 0.01416 +--initial-mass 28.9196 --metallicity 0.01416 +--initial-mass 28.9311 --metallicity 0.01416 +--initial-mass 28.9427 --metallicity 0.01416 +--initial-mass 28.9542 --metallicity 0.01416 +--initial-mass 28.9657 --metallicity 0.01416 +--initial-mass 28.9773 --metallicity 0.01416 +--initial-mass 28.9888 --metallicity 0.01416 +--initial-mass 29.0004 --metallicity 0.01416 +--initial-mass 29.0119 --metallicity 0.01416 +--initial-mass 29.0235 --metallicity 0.01416 +--initial-mass 29.0351 --metallicity 0.01416 +--initial-mass 29.0466 --metallicity 0.01416 +--initial-mass 29.0582 --metallicity 0.01416 +--initial-mass 29.0698 --metallicity 0.01416 +--initial-mass 29.0814 --metallicity 0.01416 +--initial-mass 29.093 --metallicity 0.01416 +--initial-mass 29.1046 --metallicity 0.01416 +--initial-mass 29.1162 --metallicity 0.01416 +--initial-mass 29.1278 --metallicity 0.01416 +--initial-mass 29.1394 --metallicity 0.01416 +--initial-mass 29.151 --metallicity 0.01416 +--initial-mass 29.1626 --metallicity 0.01416 +--initial-mass 29.1742 --metallicity 0.01416 +--initial-mass 29.1859 --metallicity 0.01416 +--initial-mass 29.1975 --metallicity 0.01416 +--initial-mass 29.2091 --metallicity 0.01416 +--initial-mass 29.2208 --metallicity 0.01416 +--initial-mass 29.2324 --metallicity 0.01416 +--initial-mass 29.2441 --metallicity 0.01416 +--initial-mass 29.2557 --metallicity 0.01416 +--initial-mass 29.2674 --metallicity 0.01416 +--initial-mass 29.2791 --metallicity 0.01416 +--initial-mass 29.2907 --metallicity 0.01416 +--initial-mass 29.3024 --metallicity 0.01416 +--initial-mass 29.3141 --metallicity 0.01416 +--initial-mass 29.3258 --metallicity 0.01416 +--initial-mass 29.3375 --metallicity 0.01416 +--initial-mass 29.3491 --metallicity 0.01416 +--initial-mass 29.3608 --metallicity 0.01416 +--initial-mass 29.3725 --metallicity 0.01416 +--initial-mass 29.3843 --metallicity 0.01416 +--initial-mass 29.396 --metallicity 0.01416 +--initial-mass 29.4077 --metallicity 0.01416 +--initial-mass 29.4194 --metallicity 0.01416 +--initial-mass 29.4311 --metallicity 0.01416 +--initial-mass 29.4429 --metallicity 0.01416 +--initial-mass 29.4546 --metallicity 0.01416 +--initial-mass 29.4663 --metallicity 0.01416 +--initial-mass 29.4781 --metallicity 0.01416 +--initial-mass 29.4898 --metallicity 0.01416 +--initial-mass 29.5016 --metallicity 0.01416 +--initial-mass 29.5133 --metallicity 0.01416 +--initial-mass 29.5251 --metallicity 0.01416 +--initial-mass 29.5369 --metallicity 0.01416 +--initial-mass 29.5486 --metallicity 0.01416 +--initial-mass 29.5604 --metallicity 0.01416 +--initial-mass 29.5722 --metallicity 0.01416 +--initial-mass 29.584 --metallicity 0.01416 +--initial-mass 29.5958 --metallicity 0.01416 +--initial-mass 29.6076 --metallicity 0.01416 +--initial-mass 29.6194 --metallicity 0.01416 +--initial-mass 29.6312 --metallicity 0.01416 +--initial-mass 29.643 --metallicity 0.01416 +--initial-mass 29.6548 --metallicity 0.01416 +--initial-mass 29.6666 --metallicity 0.01416 +--initial-mass 29.6784 --metallicity 0.01416 +--initial-mass 29.6903 --metallicity 0.01416 +--initial-mass 29.7021 --metallicity 0.01416 +--initial-mass 29.7139 --metallicity 0.01416 +--initial-mass 29.7258 --metallicity 0.01416 +--initial-mass 29.7376 --metallicity 0.01416 +--initial-mass 29.7495 --metallicity 0.01416 +--initial-mass 29.7613 --metallicity 0.01416 +--initial-mass 29.7732 --metallicity 0.01416 +--initial-mass 29.7851 --metallicity 0.01416 +--initial-mass 29.7969 --metallicity 0.01416 +--initial-mass 29.8088 --metallicity 0.01416 +--initial-mass 29.8207 --metallicity 0.01416 +--initial-mass 29.8326 --metallicity 0.01416 +--initial-mass 29.8445 --metallicity 0.01416 +--initial-mass 29.8564 --metallicity 0.01416 +--initial-mass 29.8683 --metallicity 0.01416 +--initial-mass 29.8802 --metallicity 0.01416 +--initial-mass 29.8921 --metallicity 0.01416 +--initial-mass 29.904 --metallicity 0.01416 +--initial-mass 29.9159 --metallicity 0.01416 +--initial-mass 29.9278 --metallicity 0.01416 +--initial-mass 29.9398 --metallicity 0.01416 +--initial-mass 29.9517 --metallicity 0.01416 +--initial-mass 29.9636 --metallicity 0.01416 +--initial-mass 29.9756 --metallicity 0.01416 +--initial-mass 29.9875 --metallicity 0.01416 +--initial-mass 29.9995 --metallicity 0.01416 +--initial-mass 30.0114 --metallicity 0.01416 +--initial-mass 30.0234 --metallicity 0.01416 +--initial-mass 30.0353 --metallicity 0.01416 +--initial-mass 30.0473 --metallicity 0.01416 +--initial-mass 30.0593 --metallicity 0.01416 +--initial-mass 30.0713 --metallicity 0.01416 +--initial-mass 30.0833 --metallicity 0.01416 +--initial-mass 30.0952 --metallicity 0.01416 +--initial-mass 30.1072 --metallicity 0.01416 +--initial-mass 30.1192 --metallicity 0.01416 +--initial-mass 30.1312 --metallicity 0.01416 +--initial-mass 30.1433 --metallicity 0.01416 +--initial-mass 30.1553 --metallicity 0.01416 +--initial-mass 30.1673 --metallicity 0.01416 +--initial-mass 30.1793 --metallicity 0.01416 +--initial-mass 30.1913 --metallicity 0.01416 +--initial-mass 30.2034 --metallicity 0.01416 +--initial-mass 30.2154 --metallicity 0.01416 +--initial-mass 30.2275 --metallicity 0.01416 +--initial-mass 30.2395 --metallicity 0.01416 +--initial-mass 30.2515 --metallicity 0.01416 +--initial-mass 30.2636 --metallicity 0.01416 +--initial-mass 30.2757 --metallicity 0.01416 +--initial-mass 30.2877 --metallicity 0.01416 +--initial-mass 30.2998 --metallicity 0.01416 +--initial-mass 30.3119 --metallicity 0.01416 +--initial-mass 30.324 --metallicity 0.01416 +--initial-mass 30.336 --metallicity 0.01416 +--initial-mass 30.3481 --metallicity 0.01416 +--initial-mass 30.3602 --metallicity 0.01416 +--initial-mass 30.3723 --metallicity 0.01416 +--initial-mass 30.3844 --metallicity 0.01416 +--initial-mass 30.3965 --metallicity 0.01416 +--initial-mass 30.4087 --metallicity 0.01416 +--initial-mass 30.4208 --metallicity 0.01416 +--initial-mass 30.4329 --metallicity 0.01416 +--initial-mass 30.445 --metallicity 0.01416 +--initial-mass 30.4572 --metallicity 0.01416 +--initial-mass 30.4693 --metallicity 0.01416 +--initial-mass 30.4815 --metallicity 0.01416 +--initial-mass 30.4936 --metallicity 0.01416 +--initial-mass 30.5058 --metallicity 0.01416 +--initial-mass 30.5179 --metallicity 0.01416 +--initial-mass 30.5301 --metallicity 0.01416 +--initial-mass 30.5422 --metallicity 0.01416 +--initial-mass 30.5544 --metallicity 0.01416 +--initial-mass 30.5666 --metallicity 0.01416 +--initial-mass 30.5788 --metallicity 0.01416 +--initial-mass 30.591 --metallicity 0.01416 +--initial-mass 30.6032 --metallicity 0.01416 +--initial-mass 30.6154 --metallicity 0.01416 +--initial-mass 30.6276 --metallicity 0.01416 +--initial-mass 30.6398 --metallicity 0.01416 +--initial-mass 30.652 --metallicity 0.01416 +--initial-mass 30.6642 --metallicity 0.01416 +--initial-mass 30.6764 --metallicity 0.01416 +--initial-mass 30.6886 --metallicity 0.01416 +--initial-mass 30.7009 --metallicity 0.01416 +--initial-mass 30.7131 --metallicity 0.01416 +--initial-mass 30.7253 --metallicity 0.01416 +--initial-mass 30.7376 --metallicity 0.01416 +--initial-mass 30.7498 --metallicity 0.01416 +--initial-mass 30.7621 --metallicity 0.01416 +--initial-mass 30.7744 --metallicity 0.01416 +--initial-mass 30.7866 --metallicity 0.01416 +--initial-mass 30.7989 --metallicity 0.01416 +--initial-mass 30.8112 --metallicity 0.01416 +--initial-mass 30.8234 --metallicity 0.01416 +--initial-mass 30.8357 --metallicity 0.01416 +--initial-mass 30.848 --metallicity 0.01416 +--initial-mass 30.8603 --metallicity 0.01416 +--initial-mass 30.8726 --metallicity 0.01416 +--initial-mass 30.8849 --metallicity 0.01416 +--initial-mass 30.8972 --metallicity 0.01416 +--initial-mass 30.9095 --metallicity 0.01416 +--initial-mass 30.9219 --metallicity 0.01416 +--initial-mass 30.9342 --metallicity 0.01416 +--initial-mass 30.9465 --metallicity 0.01416 +--initial-mass 30.9589 --metallicity 0.01416 +--initial-mass 30.9712 --metallicity 0.01416 +--initial-mass 30.9835 --metallicity 0.01416 +--initial-mass 30.9959 --metallicity 0.01416 +--initial-mass 31.0082 --metallicity 0.01416 +--initial-mass 31.0206 --metallicity 0.01416 +--initial-mass 31.033 --metallicity 0.01416 +--initial-mass 31.0453 --metallicity 0.01416 +--initial-mass 31.0577 --metallicity 0.01416 +--initial-mass 31.0701 --metallicity 0.01416 +--initial-mass 31.0825 --metallicity 0.01416 +--initial-mass 31.0948 --metallicity 0.01416 +--initial-mass 31.1072 --metallicity 0.01416 +--initial-mass 31.1196 --metallicity 0.01416 +--initial-mass 31.132 --metallicity 0.01416 +--initial-mass 31.1444 --metallicity 0.01416 +--initial-mass 31.1569 --metallicity 0.01416 +--initial-mass 31.1693 --metallicity 0.01416 +--initial-mass 31.1817 --metallicity 0.01416 +--initial-mass 31.1941 --metallicity 0.01416 +--initial-mass 31.2066 --metallicity 0.01416 +--initial-mass 31.219 --metallicity 0.01416 +--initial-mass 31.2314 --metallicity 0.01416 +--initial-mass 31.2439 --metallicity 0.01416 +--initial-mass 31.2563 --metallicity 0.01416 +--initial-mass 31.2688 --metallicity 0.01416 +--initial-mass 31.2813 --metallicity 0.01416 +--initial-mass 31.2937 --metallicity 0.01416 +--initial-mass 31.3062 --metallicity 0.01416 +--initial-mass 31.3187 --metallicity 0.01416 +--initial-mass 31.3312 --metallicity 0.01416 +--initial-mass 31.3436 --metallicity 0.01416 +--initial-mass 31.3561 --metallicity 0.01416 +--initial-mass 31.3686 --metallicity 0.01416 +--initial-mass 31.3811 --metallicity 0.01416 +--initial-mass 31.3936 --metallicity 0.01416 +--initial-mass 31.4062 --metallicity 0.01416 +--initial-mass 31.4187 --metallicity 0.01416 +--initial-mass 31.4312 --metallicity 0.01416 +--initial-mass 31.4437 --metallicity 0.01416 +--initial-mass 31.4563 --metallicity 0.01416 +--initial-mass 31.4688 --metallicity 0.01416 +--initial-mass 31.4813 --metallicity 0.01416 +--initial-mass 31.4939 --metallicity 0.01416 +--initial-mass 31.5064 --metallicity 0.01416 +--initial-mass 31.519 --metallicity 0.01416 +--initial-mass 31.5316 --metallicity 0.01416 +--initial-mass 31.5441 --metallicity 0.01416 +--initial-mass 31.5567 --metallicity 0.01416 +--initial-mass 31.5693 --metallicity 0.01416 +--initial-mass 31.5819 --metallicity 0.01416 +--initial-mass 31.5944 --metallicity 0.01416 +--initial-mass 31.607 --metallicity 0.01416 +--initial-mass 31.6196 --metallicity 0.01416 +--initial-mass 31.6322 --metallicity 0.01416 +--initial-mass 31.6448 --metallicity 0.01416 +--initial-mass 31.6574 --metallicity 0.01416 +--initial-mass 31.6701 --metallicity 0.01416 +--initial-mass 31.6827 --metallicity 0.01416 +--initial-mass 31.6953 --metallicity 0.01416 +--initial-mass 31.7079 --metallicity 0.01416 +--initial-mass 31.7206 --metallicity 0.01416 +--initial-mass 31.7332 --metallicity 0.01416 +--initial-mass 31.7459 --metallicity 0.01416 +--initial-mass 31.7585 --metallicity 0.01416 +--initial-mass 31.7712 --metallicity 0.01416 +--initial-mass 31.7838 --metallicity 0.01416 +--initial-mass 31.7965 --metallicity 0.01416 +--initial-mass 31.8092 --metallicity 0.01416 +--initial-mass 31.8219 --metallicity 0.01416 +--initial-mass 31.8345 --metallicity 0.01416 +--initial-mass 31.8472 --metallicity 0.01416 +--initial-mass 31.8599 --metallicity 0.01416 +--initial-mass 31.8726 --metallicity 0.01416 +--initial-mass 31.8853 --metallicity 0.01416 +--initial-mass 31.898 --metallicity 0.01416 +--initial-mass 31.9107 --metallicity 0.01416 +--initial-mass 31.9235 --metallicity 0.01416 +--initial-mass 31.9362 --metallicity 0.01416 +--initial-mass 31.9489 --metallicity 0.01416 +--initial-mass 31.9617 --metallicity 0.01416 +--initial-mass 31.9744 --metallicity 0.01416 +--initial-mass 31.9871 --metallicity 0.01416 +--initial-mass 31.9999 --metallicity 0.01416 +--initial-mass 32.0126 --metallicity 0.01416 +--initial-mass 32.0254 --metallicity 0.01416 +--initial-mass 32.0382 --metallicity 0.01416 +--initial-mass 32.0509 --metallicity 0.01416 +--initial-mass 32.0637 --metallicity 0.01416 +--initial-mass 32.0765 --metallicity 0.01416 +--initial-mass 32.0893 --metallicity 0.01416 +--initial-mass 32.1021 --metallicity 0.01416 +--initial-mass 32.1148 --metallicity 0.01416 +--initial-mass 32.1276 --metallicity 0.01416 +--initial-mass 32.1405 --metallicity 0.01416 +--initial-mass 32.1533 --metallicity 0.01416 +--initial-mass 32.1661 --metallicity 0.01416 +--initial-mass 32.1789 --metallicity 0.01416 +--initial-mass 32.1917 --metallicity 0.01416 +--initial-mass 32.2046 --metallicity 0.01416 +--initial-mass 32.2174 --metallicity 0.01416 +--initial-mass 32.2302 --metallicity 0.01416 +--initial-mass 32.2431 --metallicity 0.01416 +--initial-mass 32.2559 --metallicity 0.01416 +--initial-mass 32.2688 --metallicity 0.01416 +--initial-mass 32.2816 --metallicity 0.01416 +--initial-mass 32.2945 --metallicity 0.01416 +--initial-mass 32.3074 --metallicity 0.01416 +--initial-mass 32.3203 --metallicity 0.01416 +--initial-mass 32.3331 --metallicity 0.01416 +--initial-mass 32.346 --metallicity 0.01416 +--initial-mass 32.3589 --metallicity 0.01416 +--initial-mass 32.3718 --metallicity 0.01416 +--initial-mass 32.3847 --metallicity 0.01416 +--initial-mass 32.3976 --metallicity 0.01416 +--initial-mass 32.4105 --metallicity 0.01416 +--initial-mass 32.4234 --metallicity 0.01416 +--initial-mass 32.4364 --metallicity 0.01416 +--initial-mass 32.4493 --metallicity 0.01416 +--initial-mass 32.4622 --metallicity 0.01416 +--initial-mass 32.4752 --metallicity 0.01416 +--initial-mass 32.4881 --metallicity 0.01416 +--initial-mass 32.5011 --metallicity 0.01416 +--initial-mass 32.514 --metallicity 0.01416 +--initial-mass 32.527 --metallicity 0.01416 +--initial-mass 32.5399 --metallicity 0.01416 +--initial-mass 32.5529 --metallicity 0.01416 +--initial-mass 32.5659 --metallicity 0.01416 +--initial-mass 32.5789 --metallicity 0.01416 +--initial-mass 32.5918 --metallicity 0.01416 +--initial-mass 32.6048 --metallicity 0.01416 +--initial-mass 32.6178 --metallicity 0.01416 +--initial-mass 32.6308 --metallicity 0.01416 +--initial-mass 32.6438 --metallicity 0.01416 +--initial-mass 32.6568 --metallicity 0.01416 +--initial-mass 32.6699 --metallicity 0.01416 +--initial-mass 32.6829 --metallicity 0.01416 +--initial-mass 32.6959 --metallicity 0.01416 +--initial-mass 32.7089 --metallicity 0.01416 +--initial-mass 32.722 --metallicity 0.01416 +--initial-mass 32.735 --metallicity 0.01416 +--initial-mass 32.7481 --metallicity 0.01416 +--initial-mass 32.7611 --metallicity 0.01416 +--initial-mass 32.7742 --metallicity 0.01416 +--initial-mass 32.7872 --metallicity 0.01416 +--initial-mass 32.8003 --metallicity 0.01416 +--initial-mass 32.8134 --metallicity 0.01416 +--initial-mass 32.8264 --metallicity 0.01416 +--initial-mass 32.8395 --metallicity 0.01416 +--initial-mass 32.8526 --metallicity 0.01416 +--initial-mass 32.8657 --metallicity 0.01416 +--initial-mass 32.8788 --metallicity 0.01416 +--initial-mass 32.8919 --metallicity 0.01416 +--initial-mass 32.905 --metallicity 0.01416 +--initial-mass 32.9181 --metallicity 0.01416 +--initial-mass 32.9313 --metallicity 0.01416 +--initial-mass 32.9444 --metallicity 0.01416 +--initial-mass 32.9575 --metallicity 0.01416 +--initial-mass 32.9707 --metallicity 0.01416 +--initial-mass 32.9838 --metallicity 0.01416 +--initial-mass 32.9969 --metallicity 0.01416 +--initial-mass 33.0101 --metallicity 0.01416 +--initial-mass 33.0232 --metallicity 0.01416 +--initial-mass 33.0364 --metallicity 0.01416 +--initial-mass 33.0496 --metallicity 0.01416 +--initial-mass 33.0627 --metallicity 0.01416 +--initial-mass 33.0759 --metallicity 0.01416 +--initial-mass 33.0891 --metallicity 0.01416 +--initial-mass 33.1023 --metallicity 0.01416 +--initial-mass 33.1155 --metallicity 0.01416 +--initial-mass 33.1287 --metallicity 0.01416 +--initial-mass 33.1419 --metallicity 0.01416 +--initial-mass 33.1551 --metallicity 0.01416 +--initial-mass 33.1683 --metallicity 0.01416 +--initial-mass 33.1815 --metallicity 0.01416 +--initial-mass 33.1948 --metallicity 0.01416 +--initial-mass 33.208 --metallicity 0.01416 +--initial-mass 33.2212 --metallicity 0.01416 +--initial-mass 33.2345 --metallicity 0.01416 +--initial-mass 33.2477 --metallicity 0.01416 +--initial-mass 33.261 --metallicity 0.01416 +--initial-mass 33.2742 --metallicity 0.01416 +--initial-mass 33.2875 --metallicity 0.01416 +--initial-mass 33.3007 --metallicity 0.01416 +--initial-mass 33.314 --metallicity 0.01416 +--initial-mass 33.3273 --metallicity 0.01416 +--initial-mass 33.3406 --metallicity 0.01416 +--initial-mass 33.3539 --metallicity 0.01416 +--initial-mass 33.3672 --metallicity 0.01416 +--initial-mass 33.3805 --metallicity 0.01416 +--initial-mass 33.3938 --metallicity 0.01416 +--initial-mass 33.4071 --metallicity 0.01416 +--initial-mass 33.4204 --metallicity 0.01416 +--initial-mass 33.4337 --metallicity 0.01416 +--initial-mass 33.447 --metallicity 0.01416 +--initial-mass 33.4604 --metallicity 0.01416 +--initial-mass 33.4737 --metallicity 0.01416 +--initial-mass 33.487 --metallicity 0.01416 +--initial-mass 33.5004 --metallicity 0.01416 +--initial-mass 33.5137 --metallicity 0.01416 +--initial-mass 33.5271 --metallicity 0.01416 +--initial-mass 33.5404 --metallicity 0.01416 +--initial-mass 33.5538 --metallicity 0.01416 +--initial-mass 33.5672 --metallicity 0.01416 +--initial-mass 33.5806 --metallicity 0.01416 +--initial-mass 33.594 --metallicity 0.01416 +--initial-mass 33.6073 --metallicity 0.01416 +--initial-mass 33.6207 --metallicity 0.01416 +--initial-mass 33.6341 --metallicity 0.01416 +--initial-mass 33.6475 --metallicity 0.01416 +--initial-mass 33.661 --metallicity 0.01416 +--initial-mass 33.6744 --metallicity 0.01416 +--initial-mass 33.6878 --metallicity 0.01416 +--initial-mass 33.7012 --metallicity 0.01416 +--initial-mass 33.7146 --metallicity 0.01416 +--initial-mass 33.7281 --metallicity 0.01416 +--initial-mass 33.7415 --metallicity 0.01416 +--initial-mass 33.755 --metallicity 0.01416 +--initial-mass 33.7684 --metallicity 0.01416 +--initial-mass 33.7819 --metallicity 0.01416 +--initial-mass 33.7953 --metallicity 0.01416 +--initial-mass 33.8088 --metallicity 0.01416 +--initial-mass 33.8223 --metallicity 0.01416 +--initial-mass 33.8358 --metallicity 0.01416 +--initial-mass 33.8493 --metallicity 0.01416 +--initial-mass 33.8627 --metallicity 0.01416 +--initial-mass 33.8762 --metallicity 0.01416 +--initial-mass 33.8897 --metallicity 0.01416 +--initial-mass 33.9033 --metallicity 0.01416 +--initial-mass 33.9168 --metallicity 0.01416 +--initial-mass 33.9303 --metallicity 0.01416 +--initial-mass 33.9438 --metallicity 0.01416 +--initial-mass 33.9573 --metallicity 0.01416 +--initial-mass 33.9709 --metallicity 0.01416 +--initial-mass 33.9844 --metallicity 0.01416 +--initial-mass 33.998 --metallicity 0.01416 +--initial-mass 34.0115 --metallicity 0.01416 +--initial-mass 34.0251 --metallicity 0.01416 +--initial-mass 34.0386 --metallicity 0.01416 +--initial-mass 34.0522 --metallicity 0.01416 +--initial-mass 34.0658 --metallicity 0.01416 +--initial-mass 34.0793 --metallicity 0.01416 +--initial-mass 34.0929 --metallicity 0.01416 +--initial-mass 34.1065 --metallicity 0.01416 +--initial-mass 34.1201 --metallicity 0.01416 +--initial-mass 34.1337 --metallicity 0.01416 +--initial-mass 34.1473 --metallicity 0.01416 +--initial-mass 34.1609 --metallicity 0.01416 +--initial-mass 34.1745 --metallicity 0.01416 +--initial-mass 34.1881 --metallicity 0.01416 +--initial-mass 34.2018 --metallicity 0.01416 +--initial-mass 34.2154 --metallicity 0.01416 +--initial-mass 34.229 --metallicity 0.01416 +--initial-mass 34.2427 --metallicity 0.01416 +--initial-mass 34.2563 --metallicity 0.01416 +--initial-mass 34.27 --metallicity 0.01416 +--initial-mass 34.2836 --metallicity 0.01416 +--initial-mass 34.2973 --metallicity 0.01416 +--initial-mass 34.311 --metallicity 0.01416 +--initial-mass 34.3246 --metallicity 0.01416 +--initial-mass 34.3383 --metallicity 0.01416 +--initial-mass 34.352 --metallicity 0.01416 +--initial-mass 34.3657 --metallicity 0.01416 +--initial-mass 34.3794 --metallicity 0.01416 +--initial-mass 34.3931 --metallicity 0.01416 +--initial-mass 34.4068 --metallicity 0.01416 +--initial-mass 34.4205 --metallicity 0.01416 +--initial-mass 34.4342 --metallicity 0.01416 +--initial-mass 34.448 --metallicity 0.01416 +--initial-mass 34.4617 --metallicity 0.01416 +--initial-mass 34.4754 --metallicity 0.01416 +--initial-mass 34.4892 --metallicity 0.01416 +--initial-mass 34.5029 --metallicity 0.01416 +--initial-mass 34.5167 --metallicity 0.01416 +--initial-mass 34.5304 --metallicity 0.01416 +--initial-mass 34.5442 --metallicity 0.01416 +--initial-mass 34.558 --metallicity 0.01416 +--initial-mass 34.5717 --metallicity 0.01416 +--initial-mass 34.5855 --metallicity 0.01416 +--initial-mass 34.5993 --metallicity 0.01416 +--initial-mass 34.6131 --metallicity 0.01416 +--initial-mass 34.6269 --metallicity 0.01416 +--initial-mass 34.6407 --metallicity 0.01416 +--initial-mass 34.6545 --metallicity 0.01416 +--initial-mass 34.6683 --metallicity 0.01416 +--initial-mass 34.6821 --metallicity 0.01416 +--initial-mass 34.6959 --metallicity 0.01416 +--initial-mass 34.7098 --metallicity 0.01416 +--initial-mass 34.7236 --metallicity 0.01416 +--initial-mass 34.7374 --metallicity 0.01416 +--initial-mass 34.7513 --metallicity 0.01416 +--initial-mass 34.7651 --metallicity 0.01416 +--initial-mass 34.779 --metallicity 0.01416 +--initial-mass 34.7928 --metallicity 0.01416 +--initial-mass 34.8067 --metallicity 0.01416 +--initial-mass 34.8206 --metallicity 0.01416 +--initial-mass 34.8345 --metallicity 0.01416 +--initial-mass 34.8483 --metallicity 0.01416 +--initial-mass 34.8622 --metallicity 0.01416 +--initial-mass 34.8761 --metallicity 0.01416 +--initial-mass 34.89 --metallicity 0.01416 +--initial-mass 34.9039 --metallicity 0.01416 +--initial-mass 34.9178 --metallicity 0.01416 +--initial-mass 34.9318 --metallicity 0.01416 +--initial-mass 34.9457 --metallicity 0.01416 +--initial-mass 34.9596 --metallicity 0.01416 +--initial-mass 34.9735 --metallicity 0.01416 +--initial-mass 34.9875 --metallicity 0.01416 +--initial-mass 35.0014 --metallicity 0.01416 +--initial-mass 35.0154 --metallicity 0.01416 +--initial-mass 35.0293 --metallicity 0.01416 +--initial-mass 35.0433 --metallicity 0.01416 +--initial-mass 35.0573 --metallicity 0.01416 +--initial-mass 35.0712 --metallicity 0.01416 +--initial-mass 35.0852 --metallicity 0.01416 +--initial-mass 35.0992 --metallicity 0.01416 +--initial-mass 35.1132 --metallicity 0.01416 +--initial-mass 35.1272 --metallicity 0.01416 +--initial-mass 35.1412 --metallicity 0.01416 +--initial-mass 35.1552 --metallicity 0.01416 +--initial-mass 35.1692 --metallicity 0.01416 +--initial-mass 35.1832 --metallicity 0.01416 +--initial-mass 35.1972 --metallicity 0.01416 +--initial-mass 35.2113 --metallicity 0.01416 +--initial-mass 35.2253 --metallicity 0.01416 +--initial-mass 35.2393 --metallicity 0.01416 +--initial-mass 35.2534 --metallicity 0.01416 +--initial-mass 35.2674 --metallicity 0.01416 +--initial-mass 35.2815 --metallicity 0.01416 +--initial-mass 35.2955 --metallicity 0.01416 +--initial-mass 35.3096 --metallicity 0.01416 +--initial-mass 35.3237 --metallicity 0.01416 +--initial-mass 35.3378 --metallicity 0.01416 +--initial-mass 35.3518 --metallicity 0.01416 +--initial-mass 35.3659 --metallicity 0.01416 +--initial-mass 35.38 --metallicity 0.01416 +--initial-mass 35.3941 --metallicity 0.01416 +--initial-mass 35.4082 --metallicity 0.01416 +--initial-mass 35.4224 --metallicity 0.01416 +--initial-mass 35.4365 --metallicity 0.01416 +--initial-mass 35.4506 --metallicity 0.01416 +--initial-mass 35.4647 --metallicity 0.01416 +--initial-mass 35.4789 --metallicity 0.01416 +--initial-mass 35.493 --metallicity 0.01416 +--initial-mass 35.5071 --metallicity 0.01416 +--initial-mass 35.5213 --metallicity 0.01416 +--initial-mass 35.5355 --metallicity 0.01416 +--initial-mass 35.5496 --metallicity 0.01416 +--initial-mass 35.5638 --metallicity 0.01416 +--initial-mass 35.578 --metallicity 0.01416 +--initial-mass 35.5921 --metallicity 0.01416 +--initial-mass 35.6063 --metallicity 0.01416 +--initial-mass 35.6205 --metallicity 0.01416 +--initial-mass 35.6347 --metallicity 0.01416 +--initial-mass 35.6489 --metallicity 0.01416 +--initial-mass 35.6631 --metallicity 0.01416 +--initial-mass 35.6773 --metallicity 0.01416 +--initial-mass 35.6916 --metallicity 0.01416 +--initial-mass 35.7058 --metallicity 0.01416 +--initial-mass 35.72 --metallicity 0.01416 +--initial-mass 35.7342 --metallicity 0.01416 +--initial-mass 35.7485 --metallicity 0.01416 +--initial-mass 35.7627 --metallicity 0.01416 +--initial-mass 35.777 --metallicity 0.01416 +--initial-mass 35.7912 --metallicity 0.01416 +--initial-mass 35.8055 --metallicity 0.01416 +--initial-mass 35.8198 --metallicity 0.01416 +--initial-mass 35.8341 --metallicity 0.01416 +--initial-mass 35.8483 --metallicity 0.01416 +--initial-mass 35.8626 --metallicity 0.01416 +--initial-mass 35.8769 --metallicity 0.01416 +--initial-mass 35.8912 --metallicity 0.01416 +--initial-mass 35.9055 --metallicity 0.01416 +--initial-mass 35.9198 --metallicity 0.01416 +--initial-mass 35.9342 --metallicity 0.01416 +--initial-mass 35.9485 --metallicity 0.01416 +--initial-mass 35.9628 --metallicity 0.01416 +--initial-mass 35.9771 --metallicity 0.01416 +--initial-mass 35.9915 --metallicity 0.01416 +--initial-mass 36.0058 --metallicity 0.01416 +--initial-mass 36.0202 --metallicity 0.01416 +--initial-mass 36.0345 --metallicity 0.01416 +--initial-mass 36.0489 --metallicity 0.01416 +--initial-mass 36.0633 --metallicity 0.01416 +--initial-mass 36.0776 --metallicity 0.01416 +--initial-mass 36.092 --metallicity 0.01416 +--initial-mass 36.1064 --metallicity 0.01416 +--initial-mass 36.1208 --metallicity 0.01416 +--initial-mass 36.1352 --metallicity 0.01416 +--initial-mass 36.1496 --metallicity 0.01416 +--initial-mass 36.164 --metallicity 0.01416 +--initial-mass 36.1784 --metallicity 0.01416 +--initial-mass 36.1928 --metallicity 0.01416 +--initial-mass 36.2072 --metallicity 0.01416 +--initial-mass 36.2217 --metallicity 0.01416 +--initial-mass 36.2361 --metallicity 0.01416 +--initial-mass 36.2506 --metallicity 0.01416 +--initial-mass 36.265 --metallicity 0.01416 +--initial-mass 36.2795 --metallicity 0.01416 +--initial-mass 36.2939 --metallicity 0.01416 +--initial-mass 36.3084 --metallicity 0.01416 +--initial-mass 36.3228 --metallicity 0.01416 +--initial-mass 36.3373 --metallicity 0.01416 +--initial-mass 36.3518 --metallicity 0.01416 +--initial-mass 36.3663 --metallicity 0.01416 +--initial-mass 36.3808 --metallicity 0.01416 +--initial-mass 36.3953 --metallicity 0.01416 +--initial-mass 36.4098 --metallicity 0.01416 +--initial-mass 36.4243 --metallicity 0.01416 +--initial-mass 36.4388 --metallicity 0.01416 +--initial-mass 36.4533 --metallicity 0.01416 +--initial-mass 36.4679 --metallicity 0.01416 +--initial-mass 36.4824 --metallicity 0.01416 +--initial-mass 36.4969 --metallicity 0.01416 +--initial-mass 36.5115 --metallicity 0.01416 +--initial-mass 36.526 --metallicity 0.01416 +--initial-mass 36.5406 --metallicity 0.01416 +--initial-mass 36.5552 --metallicity 0.01416 +--initial-mass 36.5697 --metallicity 0.01416 +--initial-mass 36.5843 --metallicity 0.01416 +--initial-mass 36.5989 --metallicity 0.01416 +--initial-mass 36.6135 --metallicity 0.01416 +--initial-mass 36.6281 --metallicity 0.01416 +--initial-mass 36.6427 --metallicity 0.01416 +--initial-mass 36.6573 --metallicity 0.01416 +--initial-mass 36.6719 --metallicity 0.01416 +--initial-mass 36.6865 --metallicity 0.01416 +--initial-mass 36.7011 --metallicity 0.01416 +--initial-mass 36.7157 --metallicity 0.01416 +--initial-mass 36.7304 --metallicity 0.01416 +--initial-mass 36.745 --metallicity 0.01416 +--initial-mass 36.7597 --metallicity 0.01416 +--initial-mass 36.7743 --metallicity 0.01416 +--initial-mass 36.789 --metallicity 0.01416 +--initial-mass 36.8036 --metallicity 0.01416 +--initial-mass 36.8183 --metallicity 0.01416 +--initial-mass 36.833 --metallicity 0.01416 +--initial-mass 36.8477 --metallicity 0.01416 +--initial-mass 36.8623 --metallicity 0.01416 +--initial-mass 36.877 --metallicity 0.01416 +--initial-mass 36.8917 --metallicity 0.01416 +--initial-mass 36.9064 --metallicity 0.01416 +--initial-mass 36.9211 --metallicity 0.01416 +--initial-mass 36.9359 --metallicity 0.01416 +--initial-mass 36.9506 --metallicity 0.01416 +--initial-mass 36.9653 --metallicity 0.01416 +--initial-mass 36.98 --metallicity 0.01416 +--initial-mass 36.9948 --metallicity 0.01416 +--initial-mass 37.0095 --metallicity 0.01416 +--initial-mass 37.0243 --metallicity 0.01416 +--initial-mass 37.039 --metallicity 0.01416 +--initial-mass 37.0538 --metallicity 0.01416 +--initial-mass 37.0686 --metallicity 0.01416 +--initial-mass 37.0833 --metallicity 0.01416 +--initial-mass 37.0981 --metallicity 0.01416 +--initial-mass 37.1129 --metallicity 0.01416 +--initial-mass 37.1277 --metallicity 0.01416 +--initial-mass 37.1425 --metallicity 0.01416 +--initial-mass 37.1573 --metallicity 0.01416 +--initial-mass 37.1721 --metallicity 0.01416 +--initial-mass 37.1869 --metallicity 0.01416 +--initial-mass 37.2017 --metallicity 0.01416 +--initial-mass 37.2166 --metallicity 0.01416 +--initial-mass 37.2314 --metallicity 0.01416 +--initial-mass 37.2462 --metallicity 0.01416 +--initial-mass 37.2611 --metallicity 0.01416 +--initial-mass 37.2759 --metallicity 0.01416 +--initial-mass 37.2908 --metallicity 0.01416 +--initial-mass 37.3056 --metallicity 0.01416 +--initial-mass 37.3205 --metallicity 0.01416 +--initial-mass 37.3354 --metallicity 0.01416 +--initial-mass 37.3503 --metallicity 0.01416 +--initial-mass 37.3652 --metallicity 0.01416 +--initial-mass 37.38 --metallicity 0.01416 +--initial-mass 37.3949 --metallicity 0.01416 +--initial-mass 37.4098 --metallicity 0.01416 +--initial-mass 37.4248 --metallicity 0.01416 +--initial-mass 37.4397 --metallicity 0.01416 +--initial-mass 37.4546 --metallicity 0.01416 +--initial-mass 37.4695 --metallicity 0.01416 +--initial-mass 37.4845 --metallicity 0.01416 +--initial-mass 37.4994 --metallicity 0.01416 +--initial-mass 37.5143 --metallicity 0.01416 +--initial-mass 37.5293 --metallicity 0.01416 +--initial-mass 37.5443 --metallicity 0.01416 +--initial-mass 37.5592 --metallicity 0.01416 +--initial-mass 37.5742 --metallicity 0.01416 +--initial-mass 37.5892 --metallicity 0.01416 +--initial-mass 37.6041 --metallicity 0.01416 +--initial-mass 37.6191 --metallicity 0.01416 +--initial-mass 37.6341 --metallicity 0.01416 +--initial-mass 37.6491 --metallicity 0.01416 +--initial-mass 37.6641 --metallicity 0.01416 +--initial-mass 37.6791 --metallicity 0.01416 +--initial-mass 37.6942 --metallicity 0.01416 +--initial-mass 37.7092 --metallicity 0.01416 +--initial-mass 37.7242 --metallicity 0.01416 +--initial-mass 37.7392 --metallicity 0.01416 +--initial-mass 37.7543 --metallicity 0.01416 +--initial-mass 37.7693 --metallicity 0.01416 +--initial-mass 37.7844 --metallicity 0.01416 +--initial-mass 37.7994 --metallicity 0.01416 +--initial-mass 37.8145 --metallicity 0.01416 +--initial-mass 37.8296 --metallicity 0.01416 +--initial-mass 37.8447 --metallicity 0.01416 +--initial-mass 37.8597 --metallicity 0.01416 +--initial-mass 37.8748 --metallicity 0.01416 +--initial-mass 37.8899 --metallicity 0.01416 +--initial-mass 37.905 --metallicity 0.01416 +--initial-mass 37.9201 --metallicity 0.01416 +--initial-mass 37.9352 --metallicity 0.01416 +--initial-mass 37.9504 --metallicity 0.01416 +--initial-mass 37.9655 --metallicity 0.01416 +--initial-mass 37.9806 --metallicity 0.01416 +--initial-mass 37.9958 --metallicity 0.01416 +--initial-mass 38.0109 --metallicity 0.01416 +--initial-mass 38.026 --metallicity 0.01416 +--initial-mass 38.0412 --metallicity 0.01416 +--initial-mass 38.0564 --metallicity 0.01416 +--initial-mass 38.0715 --metallicity 0.01416 +--initial-mass 38.0867 --metallicity 0.01416 +--initial-mass 38.1019 --metallicity 0.01416 +--initial-mass 38.1171 --metallicity 0.01416 +--initial-mass 38.1323 --metallicity 0.01416 +--initial-mass 38.1475 --metallicity 0.01416 +--initial-mass 38.1627 --metallicity 0.01416 +--initial-mass 38.1779 --metallicity 0.01416 +--initial-mass 38.1931 --metallicity 0.01416 +--initial-mass 38.2083 --metallicity 0.01416 +--initial-mass 38.2235 --metallicity 0.01416 +--initial-mass 38.2388 --metallicity 0.01416 +--initial-mass 38.254 --metallicity 0.01416 +--initial-mass 38.2693 --metallicity 0.01416 +--initial-mass 38.2845 --metallicity 0.01416 +--initial-mass 38.2998 --metallicity 0.01416 +--initial-mass 38.315 --metallicity 0.01416 +--initial-mass 38.3303 --metallicity 0.01416 +--initial-mass 38.3456 --metallicity 0.01416 +--initial-mass 38.3609 --metallicity 0.01416 +--initial-mass 38.3762 --metallicity 0.01416 +--initial-mass 38.3915 --metallicity 0.01416 +--initial-mass 38.4068 --metallicity 0.01416 +--initial-mass 38.4221 --metallicity 0.01416 +--initial-mass 38.4374 --metallicity 0.01416 +--initial-mass 38.4527 --metallicity 0.01416 +--initial-mass 38.468 --metallicity 0.01416 +--initial-mass 38.4833 --metallicity 0.01416 +--initial-mass 38.4987 --metallicity 0.01416 +--initial-mass 38.514 --metallicity 0.01416 +--initial-mass 38.5294 --metallicity 0.01416 +--initial-mass 38.5447 --metallicity 0.01416 +--initial-mass 38.5601 --metallicity 0.01416 +--initial-mass 38.5755 --metallicity 0.01416 +--initial-mass 38.5908 --metallicity 0.01416 +--initial-mass 38.6062 --metallicity 0.01416 +--initial-mass 38.6216 --metallicity 0.01416 +--initial-mass 38.637 --metallicity 0.01416 +--initial-mass 38.6524 --metallicity 0.01416 +--initial-mass 38.6678 --metallicity 0.01416 +--initial-mass 38.6832 --metallicity 0.01416 +--initial-mass 38.6986 --metallicity 0.01416 +--initial-mass 38.7141 --metallicity 0.01416 +--initial-mass 38.7295 --metallicity 0.01416 +--initial-mass 38.7449 --metallicity 0.01416 +--initial-mass 38.7604 --metallicity 0.01416 +--initial-mass 38.7758 --metallicity 0.01416 +--initial-mass 38.7913 --metallicity 0.01416 +--initial-mass 38.8067 --metallicity 0.01416 +--initial-mass 38.8222 --metallicity 0.01416 +--initial-mass 38.8377 --metallicity 0.01416 +--initial-mass 38.8531 --metallicity 0.01416 +--initial-mass 38.8686 --metallicity 0.01416 +--initial-mass 38.8841 --metallicity 0.01416 +--initial-mass 38.8996 --metallicity 0.01416 +--initial-mass 38.9151 --metallicity 0.01416 +--initial-mass 38.9306 --metallicity 0.01416 +--initial-mass 38.9461 --metallicity 0.01416 +--initial-mass 38.9617 --metallicity 0.01416 +--initial-mass 38.9772 --metallicity 0.01416 +--initial-mass 38.9927 --metallicity 0.01416 +--initial-mass 39.0083 --metallicity 0.01416 +--initial-mass 39.0238 --metallicity 0.01416 +--initial-mass 39.0394 --metallicity 0.01416 +--initial-mass 39.0549 --metallicity 0.01416 +--initial-mass 39.0705 --metallicity 0.01416 +--initial-mass 39.0861 --metallicity 0.01416 +--initial-mass 39.1016 --metallicity 0.01416 +--initial-mass 39.1172 --metallicity 0.01416 +--initial-mass 39.1328 --metallicity 0.01416 +--initial-mass 39.1484 --metallicity 0.01416 +--initial-mass 39.164 --metallicity 0.01416 +--initial-mass 39.1796 --metallicity 0.01416 +--initial-mass 39.1952 --metallicity 0.01416 +--initial-mass 39.2109 --metallicity 0.01416 +--initial-mass 39.2265 --metallicity 0.01416 +--initial-mass 39.2421 --metallicity 0.01416 +--initial-mass 39.2578 --metallicity 0.01416 +--initial-mass 39.2734 --metallicity 0.01416 +--initial-mass 39.2891 --metallicity 0.01416 +--initial-mass 39.3047 --metallicity 0.01416 +--initial-mass 39.3204 --metallicity 0.01416 +--initial-mass 39.3361 --metallicity 0.01416 +--initial-mass 39.3517 --metallicity 0.01416 +--initial-mass 39.3674 --metallicity 0.01416 +--initial-mass 39.3831 --metallicity 0.01416 +--initial-mass 39.3988 --metallicity 0.01416 +--initial-mass 39.4145 --metallicity 0.01416 +--initial-mass 39.4302 --metallicity 0.01416 +--initial-mass 39.4459 --metallicity 0.01416 +--initial-mass 39.4617 --metallicity 0.01416 +--initial-mass 39.4774 --metallicity 0.01416 +--initial-mass 39.4931 --metallicity 0.01416 +--initial-mass 39.5089 --metallicity 0.01416 +--initial-mass 39.5246 --metallicity 0.01416 +--initial-mass 39.5404 --metallicity 0.01416 +--initial-mass 39.5561 --metallicity 0.01416 +--initial-mass 39.5719 --metallicity 0.01416 +--initial-mass 39.5877 --metallicity 0.01416 +--initial-mass 39.6034 --metallicity 0.01416 +--initial-mass 39.6192 --metallicity 0.01416 +--initial-mass 39.635 --metallicity 0.01416 +--initial-mass 39.6508 --metallicity 0.01416 +--initial-mass 39.6666 --metallicity 0.01416 +--initial-mass 39.6824 --metallicity 0.01416 +--initial-mass 39.6982 --metallicity 0.01416 +--initial-mass 39.7141 --metallicity 0.01416 +--initial-mass 39.7299 --metallicity 0.01416 +--initial-mass 39.7457 --metallicity 0.01416 +--initial-mass 39.7616 --metallicity 0.01416 +--initial-mass 39.7774 --metallicity 0.01416 +--initial-mass 39.7933 --metallicity 0.01416 +--initial-mass 39.8091 --metallicity 0.01416 +--initial-mass 39.825 --metallicity 0.01416 +--initial-mass 39.8409 --metallicity 0.01416 +--initial-mass 39.8567 --metallicity 0.01416 +--initial-mass 39.8726 --metallicity 0.01416 +--initial-mass 39.8885 --metallicity 0.01416 +--initial-mass 39.9044 --metallicity 0.01416 +--initial-mass 39.9203 --metallicity 0.01416 +--initial-mass 39.9362 --metallicity 0.01416 +--initial-mass 39.9521 --metallicity 0.01416 +--initial-mass 39.9681 --metallicity 0.01416 +--initial-mass 39.984 --metallicity 0.01416 +--initial-mass 39.9999 --metallicity 0.01416 +--initial-mass 40.0159 --metallicity 0.01416 +--initial-mass 40.0318 --metallicity 0.01416 +--initial-mass 40.0478 --metallicity 0.01416 +--initial-mass 40.0637 --metallicity 0.01416 +--initial-mass 40.0797 --metallicity 0.01416 +--initial-mass 40.0957 --metallicity 0.01416 +--initial-mass 40.1117 --metallicity 0.01416 +--initial-mass 40.1276 --metallicity 0.01416 +--initial-mass 40.1436 --metallicity 0.01416 +--initial-mass 40.1596 --metallicity 0.01416 +--initial-mass 40.1756 --metallicity 0.01416 +--initial-mass 40.1917 --metallicity 0.01416 +--initial-mass 40.2077 --metallicity 0.01416 +--initial-mass 40.2237 --metallicity 0.01416 +--initial-mass 40.2397 --metallicity 0.01416 +--initial-mass 40.2558 --metallicity 0.01416 +--initial-mass 40.2718 --metallicity 0.01416 +--initial-mass 40.2879 --metallicity 0.01416 +--initial-mass 40.3039 --metallicity 0.01416 +--initial-mass 40.32 --metallicity 0.01416 +--initial-mass 40.336 --metallicity 0.01416 +--initial-mass 40.3521 --metallicity 0.01416 +--initial-mass 40.3682 --metallicity 0.01416 +--initial-mass 40.3843 --metallicity 0.01416 +--initial-mass 40.4004 --metallicity 0.01416 +--initial-mass 40.4165 --metallicity 0.01416 +--initial-mass 40.4326 --metallicity 0.01416 +--initial-mass 40.4487 --metallicity 0.01416 +--initial-mass 40.4648 --metallicity 0.01416 +--initial-mass 40.481 --metallicity 0.01416 +--initial-mass 40.4971 --metallicity 0.01416 +--initial-mass 40.5132 --metallicity 0.01416 +--initial-mass 40.5294 --metallicity 0.01416 +--initial-mass 40.5455 --metallicity 0.01416 +--initial-mass 40.5617 --metallicity 0.01416 +--initial-mass 40.5779 --metallicity 0.01416 +--initial-mass 40.594 --metallicity 0.01416 +--initial-mass 40.6102 --metallicity 0.01416 +--initial-mass 40.6264 --metallicity 0.01416 +--initial-mass 40.6426 --metallicity 0.01416 +--initial-mass 40.6588 --metallicity 0.01416 +--initial-mass 40.675 --metallicity 0.01416 +--initial-mass 40.6912 --metallicity 0.01416 +--initial-mass 40.7074 --metallicity 0.01416 +--initial-mass 40.7236 --metallicity 0.01416 +--initial-mass 40.7399 --metallicity 0.01416 +--initial-mass 40.7561 --metallicity 0.01416 +--initial-mass 40.7724 --metallicity 0.01416 +--initial-mass 40.7886 --metallicity 0.01416 +--initial-mass 40.8049 --metallicity 0.01416 +--initial-mass 40.8211 --metallicity 0.01416 +--initial-mass 40.8374 --metallicity 0.01416 +--initial-mass 40.8537 --metallicity 0.01416 +--initial-mass 40.87 --metallicity 0.01416 +--initial-mass 40.8862 --metallicity 0.01416 +--initial-mass 40.9025 --metallicity 0.01416 +--initial-mass 40.9188 --metallicity 0.01416 +--initial-mass 40.9352 --metallicity 0.01416 +--initial-mass 40.9515 --metallicity 0.01416 +--initial-mass 40.9678 --metallicity 0.01416 +--initial-mass 40.9841 --metallicity 0.01416 +--initial-mass 41.0004 --metallicity 0.01416 +--initial-mass 41.0168 --metallicity 0.01416 +--initial-mass 41.0331 --metallicity 0.01416 +--initial-mass 41.0495 --metallicity 0.01416 +--initial-mass 41.0659 --metallicity 0.01416 +--initial-mass 41.0822 --metallicity 0.01416 +--initial-mass 41.0986 --metallicity 0.01416 +--initial-mass 41.115 --metallicity 0.01416 +--initial-mass 41.1314 --metallicity 0.01416 +--initial-mass 41.1478 --metallicity 0.01416 +--initial-mass 41.1642 --metallicity 0.01416 +--initial-mass 41.1806 --metallicity 0.01416 +--initial-mass 41.197 --metallicity 0.01416 +--initial-mass 41.2134 --metallicity 0.01416 +--initial-mass 41.2298 --metallicity 0.01416 +--initial-mass 41.2462 --metallicity 0.01416 +--initial-mass 41.2627 --metallicity 0.01416 +--initial-mass 41.2791 --metallicity 0.01416 +--initial-mass 41.2956 --metallicity 0.01416 +--initial-mass 41.312 --metallicity 0.01416 +--initial-mass 41.3285 --metallicity 0.01416 +--initial-mass 41.345 --metallicity 0.01416 +--initial-mass 41.3615 --metallicity 0.01416 +--initial-mass 41.3779 --metallicity 0.01416 +--initial-mass 41.3944 --metallicity 0.01416 +--initial-mass 41.4109 --metallicity 0.01416 +--initial-mass 41.4274 --metallicity 0.01416 +--initial-mass 41.4439 --metallicity 0.01416 +--initial-mass 41.4605 --metallicity 0.01416 +--initial-mass 41.477 --metallicity 0.01416 +--initial-mass 41.4935 --metallicity 0.01416 +--initial-mass 41.5101 --metallicity 0.01416 +--initial-mass 41.5266 --metallicity 0.01416 +--initial-mass 41.5431 --metallicity 0.01416 +--initial-mass 41.5597 --metallicity 0.01416 +--initial-mass 41.5763 --metallicity 0.01416 +--initial-mass 41.5928 --metallicity 0.01416 +--initial-mass 41.6094 --metallicity 0.01416 +--initial-mass 41.626 --metallicity 0.01416 +--initial-mass 41.6426 --metallicity 0.01416 +--initial-mass 41.6592 --metallicity 0.01416 +--initial-mass 41.6758 --metallicity 0.01416 +--initial-mass 41.6924 --metallicity 0.01416 +--initial-mass 41.709 --metallicity 0.01416 +--initial-mass 41.7256 --metallicity 0.01416 +--initial-mass 41.7423 --metallicity 0.01416 +--initial-mass 41.7589 --metallicity 0.01416 +--initial-mass 41.7756 --metallicity 0.01416 +--initial-mass 41.7922 --metallicity 0.01416 +--initial-mass 41.8089 --metallicity 0.01416 +--initial-mass 41.8255 --metallicity 0.01416 +--initial-mass 41.8422 --metallicity 0.01416 +--initial-mass 41.8589 --metallicity 0.01416 +--initial-mass 41.8755 --metallicity 0.01416 +--initial-mass 41.8922 --metallicity 0.01416 +--initial-mass 41.9089 --metallicity 0.01416 +--initial-mass 41.9256 --metallicity 0.01416 +--initial-mass 41.9423 --metallicity 0.01416 +--initial-mass 41.9591 --metallicity 0.01416 +--initial-mass 41.9758 --metallicity 0.01416 +--initial-mass 41.9925 --metallicity 0.01416 +--initial-mass 42.0093 --metallicity 0.01416 +--initial-mass 42.026 --metallicity 0.01416 +--initial-mass 42.0427 --metallicity 0.01416 +--initial-mass 42.0595 --metallicity 0.01416 +--initial-mass 42.0763 --metallicity 0.01416 +--initial-mass 42.093 --metallicity 0.01416 +--initial-mass 42.1098 --metallicity 0.01416 +--initial-mass 42.1266 --metallicity 0.01416 +--initial-mass 42.1434 --metallicity 0.01416 +--initial-mass 42.1602 --metallicity 0.01416 +--initial-mass 42.177 --metallicity 0.01416 +--initial-mass 42.1938 --metallicity 0.01416 +--initial-mass 42.2106 --metallicity 0.01416 +--initial-mass 42.2274 --metallicity 0.01416 +--initial-mass 42.2443 --metallicity 0.01416 +--initial-mass 42.2611 --metallicity 0.01416 +--initial-mass 42.2779 --metallicity 0.01416 +--initial-mass 42.2948 --metallicity 0.01416 +--initial-mass 42.3116 --metallicity 0.01416 +--initial-mass 42.3285 --metallicity 0.01416 +--initial-mass 42.3454 --metallicity 0.01416 +--initial-mass 42.3623 --metallicity 0.01416 +--initial-mass 42.3791 --metallicity 0.01416 +--initial-mass 42.396 --metallicity 0.01416 +--initial-mass 42.4129 --metallicity 0.01416 +--initial-mass 42.4298 --metallicity 0.01416 +--initial-mass 42.4467 --metallicity 0.01416 +--initial-mass 42.4637 --metallicity 0.01416 +--initial-mass 42.4806 --metallicity 0.01416 +--initial-mass 42.4975 --metallicity 0.01416 +--initial-mass 42.5145 --metallicity 0.01416 +--initial-mass 42.5314 --metallicity 0.01416 +--initial-mass 42.5483 --metallicity 0.01416 +--initial-mass 42.5653 --metallicity 0.01416 +--initial-mass 42.5823 --metallicity 0.01416 +--initial-mass 42.5992 --metallicity 0.01416 +--initial-mass 42.6162 --metallicity 0.01416 +--initial-mass 42.6332 --metallicity 0.01416 +--initial-mass 42.6502 --metallicity 0.01416 +--initial-mass 42.6672 --metallicity 0.01416 +--initial-mass 42.6842 --metallicity 0.01416 +--initial-mass 42.7012 --metallicity 0.01416 +--initial-mass 42.7182 --metallicity 0.01416 +--initial-mass 42.7353 --metallicity 0.01416 +--initial-mass 42.7523 --metallicity 0.01416 +--initial-mass 42.7693 --metallicity 0.01416 +--initial-mass 42.7864 --metallicity 0.01416 +--initial-mass 42.8034 --metallicity 0.01416 +--initial-mass 42.8205 --metallicity 0.01416 +--initial-mass 42.8376 --metallicity 0.01416 +--initial-mass 42.8546 --metallicity 0.01416 +--initial-mass 42.8717 --metallicity 0.01416 +--initial-mass 42.8888 --metallicity 0.01416 +--initial-mass 42.9059 --metallicity 0.01416 +--initial-mass 42.923 --metallicity 0.01416 +--initial-mass 42.9401 --metallicity 0.01416 +--initial-mass 42.9572 --metallicity 0.01416 +--initial-mass 42.9743 --metallicity 0.01416 +--initial-mass 42.9915 --metallicity 0.01416 +--initial-mass 43.0086 --metallicity 0.01416 +--initial-mass 43.0257 --metallicity 0.01416 +--initial-mass 43.0429 --metallicity 0.01416 +--initial-mass 43.06 --metallicity 0.01416 +--initial-mass 43.0772 --metallicity 0.01416 +--initial-mass 43.0944 --metallicity 0.01416 +--initial-mass 43.1115 --metallicity 0.01416 +--initial-mass 43.1287 --metallicity 0.01416 +--initial-mass 43.1459 --metallicity 0.01416 +--initial-mass 43.1631 --metallicity 0.01416 +--initial-mass 43.1803 --metallicity 0.01416 +--initial-mass 43.1975 --metallicity 0.01416 +--initial-mass 43.2147 --metallicity 0.01416 +--initial-mass 43.232 --metallicity 0.01416 +--initial-mass 43.2492 --metallicity 0.01416 +--initial-mass 43.2664 --metallicity 0.01416 +--initial-mass 43.2837 --metallicity 0.01416 +--initial-mass 43.3009 --metallicity 0.01416 +--initial-mass 43.3182 --metallicity 0.01416 +--initial-mass 43.3354 --metallicity 0.01416 +--initial-mass 43.3527 --metallicity 0.01416 +--initial-mass 43.37 --metallicity 0.01416 +--initial-mass 43.3873 --metallicity 0.01416 +--initial-mass 43.4046 --metallicity 0.01416 +--initial-mass 43.4219 --metallicity 0.01416 +--initial-mass 43.4392 --metallicity 0.01416 +--initial-mass 43.4565 --metallicity 0.01416 +--initial-mass 43.4738 --metallicity 0.01416 +--initial-mass 43.4911 --metallicity 0.01416 +--initial-mass 43.5085 --metallicity 0.01416 +--initial-mass 43.5258 --metallicity 0.01416 +--initial-mass 43.5432 --metallicity 0.01416 +--initial-mass 43.5605 --metallicity 0.01416 +--initial-mass 43.5779 --metallicity 0.01416 +--initial-mass 43.5952 --metallicity 0.01416 +--initial-mass 43.6126 --metallicity 0.01416 +--initial-mass 43.63 --metallicity 0.01416 +--initial-mass 43.6474 --metallicity 0.01416 +--initial-mass 43.6648 --metallicity 0.01416 +--initial-mass 43.6822 --metallicity 0.01416 +--initial-mass 43.6996 --metallicity 0.01416 +--initial-mass 43.717 --metallicity 0.01416 +--initial-mass 43.7344 --metallicity 0.01416 +--initial-mass 43.7519 --metallicity 0.01416 +--initial-mass 43.7693 --metallicity 0.01416 +--initial-mass 43.7867 --metallicity 0.01416 +--initial-mass 43.8042 --metallicity 0.01416 +--initial-mass 43.8217 --metallicity 0.01416 +--initial-mass 43.8391 --metallicity 0.01416 +--initial-mass 43.8566 --metallicity 0.01416 +--initial-mass 43.8741 --metallicity 0.01416 +--initial-mass 43.8916 --metallicity 0.01416 +--initial-mass 43.9091 --metallicity 0.01416 +--initial-mass 43.9266 --metallicity 0.01416 +--initial-mass 43.9441 --metallicity 0.01416 +--initial-mass 43.9616 --metallicity 0.01416 +--initial-mass 43.9791 --metallicity 0.01416 +--initial-mass 43.9966 --metallicity 0.01416 +--initial-mass 44.0142 --metallicity 0.01416 +--initial-mass 44.0317 --metallicity 0.01416 +--initial-mass 44.0492 --metallicity 0.01416 +--initial-mass 44.0668 --metallicity 0.01416 +--initial-mass 44.0844 --metallicity 0.01416 +--initial-mass 44.1019 --metallicity 0.01416 +--initial-mass 44.1195 --metallicity 0.01416 +--initial-mass 44.1371 --metallicity 0.01416 +--initial-mass 44.1547 --metallicity 0.01416 +--initial-mass 44.1723 --metallicity 0.01416 +--initial-mass 44.1899 --metallicity 0.01416 +--initial-mass 44.2075 --metallicity 0.01416 +--initial-mass 44.2251 --metallicity 0.01416 +--initial-mass 44.2428 --metallicity 0.01416 +--initial-mass 44.2604 --metallicity 0.01416 +--initial-mass 44.278 --metallicity 0.01416 +--initial-mass 44.2957 --metallicity 0.01416 +--initial-mass 44.3133 --metallicity 0.01416 +--initial-mass 44.331 --metallicity 0.01416 +--initial-mass 44.3487 --metallicity 0.01416 +--initial-mass 44.3663 --metallicity 0.01416 +--initial-mass 44.384 --metallicity 0.01416 +--initial-mass 44.4017 --metallicity 0.01416 +--initial-mass 44.4194 --metallicity 0.01416 +--initial-mass 44.4371 --metallicity 0.01416 +--initial-mass 44.4548 --metallicity 0.01416 +--initial-mass 44.4725 --metallicity 0.01416 +--initial-mass 44.4903 --metallicity 0.01416 +--initial-mass 44.508 --metallicity 0.01416 +--initial-mass 44.5257 --metallicity 0.01416 +--initial-mass 44.5435 --metallicity 0.01416 +--initial-mass 44.5612 --metallicity 0.01416 +--initial-mass 44.579 --metallicity 0.01416 +--initial-mass 44.5968 --metallicity 0.01416 +--initial-mass 44.6145 --metallicity 0.01416 +--initial-mass 44.6323 --metallicity 0.01416 +--initial-mass 44.6501 --metallicity 0.01416 +--initial-mass 44.6679 --metallicity 0.01416 +--initial-mass 44.6857 --metallicity 0.01416 +--initial-mass 44.7035 --metallicity 0.01416 +--initial-mass 44.7213 --metallicity 0.01416 +--initial-mass 44.7391 --metallicity 0.01416 +--initial-mass 44.757 --metallicity 0.01416 +--initial-mass 44.7748 --metallicity 0.01416 +--initial-mass 44.7927 --metallicity 0.01416 +--initial-mass 44.8105 --metallicity 0.01416 +--initial-mass 44.8284 --metallicity 0.01416 +--initial-mass 44.8462 --metallicity 0.01416 +--initial-mass 44.8641 --metallicity 0.01416 +--initial-mass 44.882 --metallicity 0.01416 +--initial-mass 44.8999 --metallicity 0.01416 +--initial-mass 44.9178 --metallicity 0.01416 +--initial-mass 44.9357 --metallicity 0.01416 +--initial-mass 44.9536 --metallicity 0.01416 +--initial-mass 44.9715 --metallicity 0.01416 +--initial-mass 44.9894 --metallicity 0.01416 +--initial-mass 45.0074 --metallicity 0.01416 +--initial-mass 45.0253 --metallicity 0.01416 +--initial-mass 45.0432 --metallicity 0.01416 +--initial-mass 45.0612 --metallicity 0.01416 +--initial-mass 45.0791 --metallicity 0.01416 +--initial-mass 45.0971 --metallicity 0.01416 +--initial-mass 45.1151 --metallicity 0.01416 +--initial-mass 45.1331 --metallicity 0.01416 +--initial-mass 45.1511 --metallicity 0.01416 +--initial-mass 45.1691 --metallicity 0.01416 +--initial-mass 45.1871 --metallicity 0.01416 +--initial-mass 45.2051 --metallicity 0.01416 +--initial-mass 45.2231 --metallicity 0.01416 +--initial-mass 45.2411 --metallicity 0.01416 +--initial-mass 45.2591 --metallicity 0.01416 +--initial-mass 45.2772 --metallicity 0.01416 +--initial-mass 45.2952 --metallicity 0.01416 +--initial-mass 45.3133 --metallicity 0.01416 +--initial-mass 45.3313 --metallicity 0.01416 +--initial-mass 45.3494 --metallicity 0.01416 +--initial-mass 45.3675 --metallicity 0.01416 +--initial-mass 45.3856 --metallicity 0.01416 +--initial-mass 45.4036 --metallicity 0.01416 +--initial-mass 45.4217 --metallicity 0.01416 +--initial-mass 45.4398 --metallicity 0.01416 +--initial-mass 45.458 --metallicity 0.01416 +--initial-mass 45.4761 --metallicity 0.01416 +--initial-mass 45.4942 --metallicity 0.01416 +--initial-mass 45.5123 --metallicity 0.01416 +--initial-mass 45.5305 --metallicity 0.01416 +--initial-mass 45.5486 --metallicity 0.01416 +--initial-mass 45.5668 --metallicity 0.01416 +--initial-mass 45.5849 --metallicity 0.01416 +--initial-mass 45.6031 --metallicity 0.01416 +--initial-mass 45.6213 --metallicity 0.01416 +--initial-mass 45.6395 --metallicity 0.01416 +--initial-mass 45.6576 --metallicity 0.01416 +--initial-mass 45.6758 --metallicity 0.01416 +--initial-mass 45.694 --metallicity 0.01416 +--initial-mass 45.7123 --metallicity 0.01416 +--initial-mass 45.7305 --metallicity 0.01416 +--initial-mass 45.7487 --metallicity 0.01416 +--initial-mass 45.7669 --metallicity 0.01416 +--initial-mass 45.7852 --metallicity 0.01416 +--initial-mass 45.8034 --metallicity 0.01416 +--initial-mass 45.8217 --metallicity 0.01416 +--initial-mass 45.8399 --metallicity 0.01416 +--initial-mass 45.8582 --metallicity 0.01416 +--initial-mass 45.8765 --metallicity 0.01416 +--initial-mass 45.8948 --metallicity 0.01416 +--initial-mass 45.9131 --metallicity 0.01416 +--initial-mass 45.9314 --metallicity 0.01416 +--initial-mass 45.9497 --metallicity 0.01416 +--initial-mass 45.968 --metallicity 0.01416 +--initial-mass 45.9863 --metallicity 0.01416 +--initial-mass 46.0046 --metallicity 0.01416 +--initial-mass 46.023 --metallicity 0.01416 +--initial-mass 46.0413 --metallicity 0.01416 +--initial-mass 46.0597 --metallicity 0.01416 +--initial-mass 46.078 --metallicity 0.01416 +--initial-mass 46.0964 --metallicity 0.01416 +--initial-mass 46.1147 --metallicity 0.01416 +--initial-mass 46.1331 --metallicity 0.01416 +--initial-mass 46.1515 --metallicity 0.01416 +--initial-mass 46.1699 --metallicity 0.01416 +--initial-mass 46.1883 --metallicity 0.01416 +--initial-mass 46.2067 --metallicity 0.01416 +--initial-mass 46.2251 --metallicity 0.01416 +--initial-mass 46.2436 --metallicity 0.01416 +--initial-mass 46.262 --metallicity 0.01416 +--initial-mass 46.2804 --metallicity 0.01416 +--initial-mass 46.2989 --metallicity 0.01416 +--initial-mass 46.3173 --metallicity 0.01416 +--initial-mass 46.3358 --metallicity 0.01416 +--initial-mass 46.3542 --metallicity 0.01416 +--initial-mass 46.3727 --metallicity 0.01416 +--initial-mass 46.3912 --metallicity 0.01416 +--initial-mass 46.4097 --metallicity 0.01416 +--initial-mass 46.4282 --metallicity 0.01416 +--initial-mass 46.4467 --metallicity 0.01416 +--initial-mass 46.4652 --metallicity 0.01416 +--initial-mass 46.4837 --metallicity 0.01416 +--initial-mass 46.5023 --metallicity 0.01416 +--initial-mass 46.5208 --metallicity 0.01416 +--initial-mass 46.5393 --metallicity 0.01416 +--initial-mass 46.5579 --metallicity 0.01416 +--initial-mass 46.5764 --metallicity 0.01416 +--initial-mass 46.595 --metallicity 0.01416 +--initial-mass 46.6136 --metallicity 0.01416 +--initial-mass 46.6321 --metallicity 0.01416 +--initial-mass 46.6507 --metallicity 0.01416 +--initial-mass 46.6693 --metallicity 0.01416 +--initial-mass 46.6879 --metallicity 0.01416 +--initial-mass 46.7065 --metallicity 0.01416 +--initial-mass 46.7251 --metallicity 0.01416 +--initial-mass 46.7438 --metallicity 0.01416 +--initial-mass 46.7624 --metallicity 0.01416 +--initial-mass 46.781 --metallicity 0.01416 +--initial-mass 46.7997 --metallicity 0.01416 +--initial-mass 46.8183 --metallicity 0.01416 +--initial-mass 46.837 --metallicity 0.01416 +--initial-mass 46.8557 --metallicity 0.01416 +--initial-mass 46.8743 --metallicity 0.01416 +--initial-mass 46.893 --metallicity 0.01416 +--initial-mass 46.9117 --metallicity 0.01416 +--initial-mass 46.9304 --metallicity 0.01416 +--initial-mass 46.9491 --metallicity 0.01416 +--initial-mass 46.9678 --metallicity 0.01416 +--initial-mass 46.9865 --metallicity 0.01416 +--initial-mass 47.0053 --metallicity 0.01416 +--initial-mass 47.024 --metallicity 0.01416 +--initial-mass 47.0427 --metallicity 0.01416 +--initial-mass 47.0615 --metallicity 0.01416 +--initial-mass 47.0802 --metallicity 0.01416 +--initial-mass 47.099 --metallicity 0.01416 +--initial-mass 47.1178 --metallicity 0.01416 +--initial-mass 47.1366 --metallicity 0.01416 +--initial-mass 47.1553 --metallicity 0.01416 +--initial-mass 47.1741 --metallicity 0.01416 +--initial-mass 47.1929 --metallicity 0.01416 +--initial-mass 47.2117 --metallicity 0.01416 +--initial-mass 47.2306 --metallicity 0.01416 +--initial-mass 47.2494 --metallicity 0.01416 +--initial-mass 47.2682 --metallicity 0.01416 +--initial-mass 47.2871 --metallicity 0.01416 +--initial-mass 47.3059 --metallicity 0.01416 +--initial-mass 47.3248 --metallicity 0.01416 +--initial-mass 47.3436 --metallicity 0.01416 +--initial-mass 47.3625 --metallicity 0.01416 +--initial-mass 47.3814 --metallicity 0.01416 +--initial-mass 47.4002 --metallicity 0.01416 +--initial-mass 47.4191 --metallicity 0.01416 +--initial-mass 47.438 --metallicity 0.01416 +--initial-mass 47.4569 --metallicity 0.01416 +--initial-mass 47.4759 --metallicity 0.01416 +--initial-mass 47.4948 --metallicity 0.01416 +--initial-mass 47.5137 --metallicity 0.01416 +--initial-mass 47.5326 --metallicity 0.01416 +--initial-mass 47.5516 --metallicity 0.01416 +--initial-mass 47.5705 --metallicity 0.01416 +--initial-mass 47.5895 --metallicity 0.01416 +--initial-mass 47.6085 --metallicity 0.01416 +--initial-mass 47.6274 --metallicity 0.01416 +--initial-mass 47.6464 --metallicity 0.01416 +--initial-mass 47.6654 --metallicity 0.01416 +--initial-mass 47.6844 --metallicity 0.01416 +--initial-mass 47.7034 --metallicity 0.01416 +--initial-mass 47.7224 --metallicity 0.01416 +--initial-mass 47.7415 --metallicity 0.01416 +--initial-mass 47.7605 --metallicity 0.01416 +--initial-mass 47.7795 --metallicity 0.01416 +--initial-mass 47.7986 --metallicity 0.01416 +--initial-mass 47.8176 --metallicity 0.01416 +--initial-mass 47.8367 --metallicity 0.01416 +--initial-mass 47.8557 --metallicity 0.01416 +--initial-mass 47.8748 --metallicity 0.01416 +--initial-mass 47.8939 --metallicity 0.01416 +--initial-mass 47.913 --metallicity 0.01416 +--initial-mass 47.9321 --metallicity 0.01416 +--initial-mass 47.9512 --metallicity 0.01416 +--initial-mass 47.9703 --metallicity 0.01416 +--initial-mass 47.9894 --metallicity 0.01416 +--initial-mass 48.0085 --metallicity 0.01416 +--initial-mass 48.0277 --metallicity 0.01416 +--initial-mass 48.0468 --metallicity 0.01416 +--initial-mass 48.066 --metallicity 0.01416 +--initial-mass 48.0851 --metallicity 0.01416 +--initial-mass 48.1043 --metallicity 0.01416 +--initial-mass 48.1234 --metallicity 0.01416 +--initial-mass 48.1426 --metallicity 0.01416 +--initial-mass 48.1618 --metallicity 0.01416 +--initial-mass 48.181 --metallicity 0.01416 +--initial-mass 48.2002 --metallicity 0.01416 +--initial-mass 48.2194 --metallicity 0.01416 +--initial-mass 48.2386 --metallicity 0.01416 +--initial-mass 48.2579 --metallicity 0.01416 +--initial-mass 48.2771 --metallicity 0.01416 +--initial-mass 48.2963 --metallicity 0.01416 +--initial-mass 48.3156 --metallicity 0.01416 +--initial-mass 48.3348 --metallicity 0.01416 +--initial-mass 48.3541 --metallicity 0.01416 +--initial-mass 48.3734 --metallicity 0.01416 +--initial-mass 48.3927 --metallicity 0.01416 +--initial-mass 48.4119 --metallicity 0.01416 +--initial-mass 48.4312 --metallicity 0.01416 +--initial-mass 48.4505 --metallicity 0.01416 +--initial-mass 48.4699 --metallicity 0.01416 +--initial-mass 48.4892 --metallicity 0.01416 +--initial-mass 48.5085 --metallicity 0.01416 +--initial-mass 48.5278 --metallicity 0.01416 +--initial-mass 48.5472 --metallicity 0.01416 +--initial-mass 48.5665 --metallicity 0.01416 +--initial-mass 48.5859 --metallicity 0.01416 +--initial-mass 48.6052 --metallicity 0.01416 +--initial-mass 48.6246 --metallicity 0.01416 +--initial-mass 48.644 --metallicity 0.01416 +--initial-mass 48.6634 --metallicity 0.01416 +--initial-mass 48.6828 --metallicity 0.01416 +--initial-mass 48.7022 --metallicity 0.01416 +--initial-mass 48.7216 --metallicity 0.01416 +--initial-mass 48.741 --metallicity 0.01416 +--initial-mass 48.7604 --metallicity 0.01416 +--initial-mass 48.7799 --metallicity 0.01416 +--initial-mass 48.7993 --metallicity 0.01416 +--initial-mass 48.8188 --metallicity 0.01416 +--initial-mass 48.8382 --metallicity 0.01416 +--initial-mass 48.8577 --metallicity 0.01416 +--initial-mass 48.8771 --metallicity 0.01416 +--initial-mass 48.8966 --metallicity 0.01416 +--initial-mass 48.9161 --metallicity 0.01416 +--initial-mass 48.9356 --metallicity 0.01416 +--initial-mass 48.9551 --metallicity 0.01416 +--initial-mass 48.9746 --metallicity 0.01416 +--initial-mass 48.9941 --metallicity 0.01416 +--initial-mass 49.0137 --metallicity 0.01416 +--initial-mass 49.0332 --metallicity 0.01416 +--initial-mass 49.0528 --metallicity 0.01416 +--initial-mass 49.0723 --metallicity 0.01416 +--initial-mass 49.0919 --metallicity 0.01416 +--initial-mass 49.1114 --metallicity 0.01416 +--initial-mass 49.131 --metallicity 0.01416 +--initial-mass 49.1506 --metallicity 0.01416 +--initial-mass 49.1702 --metallicity 0.01416 +--initial-mass 49.1898 --metallicity 0.01416 +--initial-mass 49.2094 --metallicity 0.01416 +--initial-mass 49.229 --metallicity 0.01416 +--initial-mass 49.2486 --metallicity 0.01416 +--initial-mass 49.2682 --metallicity 0.01416 +--initial-mass 49.2879 --metallicity 0.01416 +--initial-mass 49.3075 --metallicity 0.01416 +--initial-mass 49.3272 --metallicity 0.01416 +--initial-mass 49.3468 --metallicity 0.01416 +--initial-mass 49.3665 --metallicity 0.01416 +--initial-mass 49.3862 --metallicity 0.01416 +--initial-mass 49.4058 --metallicity 0.01416 +--initial-mass 49.4255 --metallicity 0.01416 +--initial-mass 49.4452 --metallicity 0.01416 +--initial-mass 49.4649 --metallicity 0.01416 +--initial-mass 49.4847 --metallicity 0.01416 +--initial-mass 49.5044 --metallicity 0.01416 +--initial-mass 49.5241 --metallicity 0.01416 +--initial-mass 49.5438 --metallicity 0.01416 +--initial-mass 49.5636 --metallicity 0.01416 +--initial-mass 49.5833 --metallicity 0.01416 +--initial-mass 49.6031 --metallicity 0.01416 +--initial-mass 49.6229 --metallicity 0.01416 +--initial-mass 49.6427 --metallicity 0.01416 +--initial-mass 49.6624 --metallicity 0.01416 +--initial-mass 49.6822 --metallicity 0.01416 +--initial-mass 49.702 --metallicity 0.01416 +--initial-mass 49.7218 --metallicity 0.01416 +--initial-mass 49.7417 --metallicity 0.01416 +--initial-mass 49.7615 --metallicity 0.01416 +--initial-mass 49.7813 --metallicity 0.01416 +--initial-mass 49.8012 --metallicity 0.01416 +--initial-mass 49.821 --metallicity 0.01416 +--initial-mass 49.8409 --metallicity 0.01416 +--initial-mass 49.8607 --metallicity 0.01416 +--initial-mass 49.8806 --metallicity 0.01416 +--initial-mass 49.9005 --metallicity 0.01416 +--initial-mass 49.9204 --metallicity 0.01416 +--initial-mass 49.9403 --metallicity 0.01416 +--initial-mass 49.9602 --metallicity 0.01416 +--initial-mass 49.9801 --metallicity 0.01416 +--initial-mass 50.0 --metallicity 0.01416 +--initial-mass 50.0 --metallicity 0.01416 +--initial-mass 50.2768 --metallicity 0.01416 +--initial-mass 50.5551 --metallicity 0.01416 +--initial-mass 50.835 --metallicity 0.01416 +--initial-mass 51.1164 --metallicity 0.01416 +--initial-mass 51.3994 --metallicity 0.01416 +--initial-mass 51.6839 --metallicity 0.01416 +--initial-mass 51.9701 --metallicity 0.01416 +--initial-mass 52.2578 --metallicity 0.01416 +--initial-mass 52.5471 --metallicity 0.01416 +--initial-mass 52.8379 --metallicity 0.01416 +--initial-mass 53.1305 --metallicity 0.01416 +--initial-mass 53.4246 --metallicity 0.01416 +--initial-mass 53.7203 --metallicity 0.01416 +--initial-mass 54.0177 --metallicity 0.01416 +--initial-mass 54.3168 --metallicity 0.01416 +--initial-mass 54.6175 --metallicity 0.01416 +--initial-mass 54.9198 --metallicity 0.01416 +--initial-mass 55.2239 --metallicity 0.01416 +--initial-mass 55.5296 --metallicity 0.01416 +--initial-mass 55.837 --metallicity 0.01416 +--initial-mass 56.1461 --metallicity 0.01416 +--initial-mass 56.4569 --metallicity 0.01416 +--initial-mass 56.7694 --metallicity 0.01416 +--initial-mass 57.0837 --metallicity 0.01416 +--initial-mass 57.3997 --metallicity 0.01416 +--initial-mass 57.7175 --metallicity 0.01416 +--initial-mass 58.037 --metallicity 0.01416 +--initial-mass 58.3583 --metallicity 0.01416 +--initial-mass 58.6814 --metallicity 0.01416 +--initial-mass 59.0062 --metallicity 0.01416 +--initial-mass 59.3329 --metallicity 0.01416 +--initial-mass 59.6613 --metallicity 0.01416 +--initial-mass 59.9916 --metallicity 0.01416 +--initial-mass 60.3237 --metallicity 0.01416 +--initial-mass 60.6577 --metallicity 0.01416 +--initial-mass 60.9935 --metallicity 0.01416 +--initial-mass 61.3311 --metallicity 0.01416 +--initial-mass 61.6707 --metallicity 0.01416 +--initial-mass 62.0121 --metallicity 0.01416 +--initial-mass 62.3554 --metallicity 0.01416 +--initial-mass 62.7006 --metallicity 0.01416 +--initial-mass 63.0477 --metallicity 0.01416 +--initial-mass 63.3967 --metallicity 0.01416 +--initial-mass 63.7476 --metallicity 0.01416 +--initial-mass 64.1005 --metallicity 0.01416 +--initial-mass 64.4554 --metallicity 0.01416 +--initial-mass 64.8122 --metallicity 0.01416 +--initial-mass 65.171 --metallicity 0.01416 +--initial-mass 65.5318 --metallicity 0.01416 +--initial-mass 65.8946 --metallicity 0.01416 +--initial-mass 66.2594 --metallicity 0.01416 +--initial-mass 66.6262 --metallicity 0.01416 +--initial-mass 66.995 --metallicity 0.01416 +--initial-mass 67.3659 --metallicity 0.01416 +--initial-mass 67.7388 --metallicity 0.01416 +--initial-mass 68.1138 --metallicity 0.01416 +--initial-mass 68.4909 --metallicity 0.01416 +--initial-mass 68.8701 --metallicity 0.01416 +--initial-mass 69.2513 --metallicity 0.01416 +--initial-mass 69.6347 --metallicity 0.01416 +--initial-mass 70.0202 --metallicity 0.01416 +--initial-mass 70.4078 --metallicity 0.01416 +--initial-mass 70.7976 --metallicity 0.01416 +--initial-mass 71.1895 --metallicity 0.01416 +--initial-mass 71.5836 --metallicity 0.01416 +--initial-mass 71.9799 --metallicity 0.01416 +--initial-mass 72.3784 --metallicity 0.01416 +--initial-mass 72.7791 --metallicity 0.01416 +--initial-mass 73.182 --metallicity 0.01416 +--initial-mass 73.5871 --metallicity 0.01416 +--initial-mass 73.9945 --metallicity 0.01416 +--initial-mass 74.4041 --metallicity 0.01416 +--initial-mass 74.816 --metallicity 0.01416 +--initial-mass 75.2302 --metallicity 0.01416 +--initial-mass 75.6466 --metallicity 0.01416 +--initial-mass 76.0654 --metallicity 0.01416 +--initial-mass 76.4865 --metallicity 0.01416 +--initial-mass 76.9099 --metallicity 0.01416 +--initial-mass 77.3357 --metallicity 0.01416 +--initial-mass 77.7638 --metallicity 0.01416 +--initial-mass 78.1943 --metallicity 0.01416 +--initial-mass 78.6272 --metallicity 0.01416 +--initial-mass 79.0625 --metallicity 0.01416 +--initial-mass 79.5001 --metallicity 0.01416 +--initial-mass 79.9403 --metallicity 0.01416 +--initial-mass 80.3828 --metallicity 0.01416 +--initial-mass 80.8278 --metallicity 0.01416 +--initial-mass 81.2752 --metallicity 0.01416 +--initial-mass 81.7252 --metallicity 0.01416 +--initial-mass 82.1776 --metallicity 0.01416 +--initial-mass 82.6325 --metallicity 0.01416 +--initial-mass 83.09 --metallicity 0.01416 +--initial-mass 83.55 --metallicity 0.01416 +--initial-mass 84.0125 --metallicity 0.01416 +--initial-mass 84.4776 --metallicity 0.01416 +--initial-mass 84.9452 --metallicity 0.01416 +--initial-mass 85.4155 --metallicity 0.01416 +--initial-mass 85.8883 --metallicity 0.01416 +--initial-mass 86.3638 --metallicity 0.01416 +--initial-mass 86.8419 --metallicity 0.01416 +--initial-mass 87.3227 --metallicity 0.01416 +--initial-mass 87.8061 --metallicity 0.01416 +--initial-mass 88.2922 --metallicity 0.01416 +--initial-mass 88.781 --metallicity 0.01416 +--initial-mass 89.2724 --metallicity 0.01416 +--initial-mass 89.7666 --metallicity 0.01416 +--initial-mass 90.2636 --metallicity 0.01416 +--initial-mass 90.7633 --metallicity 0.01416 +--initial-mass 91.2657 --metallicity 0.01416 +--initial-mass 91.771 --metallicity 0.01416 +--initial-mass 92.279 --metallicity 0.01416 +--initial-mass 92.7899 --metallicity 0.01416 +--initial-mass 93.3035 --metallicity 0.01416 +--initial-mass 93.8201 --metallicity 0.01416 +--initial-mass 94.3395 --metallicity 0.01416 +--initial-mass 94.8617 --metallicity 0.01416 +--initial-mass 95.3869 --metallicity 0.01416 +--initial-mass 95.9149 --metallicity 0.01416 +--initial-mass 96.4459 --metallicity 0.01416 +--initial-mass 96.9798 --metallicity 0.01416 +--initial-mass 97.5167 --metallicity 0.01416 +--initial-mass 98.0565 --metallicity 0.01416 +--initial-mass 98.5994 --metallicity 0.01416 +--initial-mass 99.1452 --metallicity 0.01416 +--initial-mass 99.6941 --metallicity 0.01416 +--initial-mass 100.246 --metallicity 0.01416 +--initial-mass 100.8009 --metallicity 0.01416 +--initial-mass 101.3589 --metallicity 0.01416 +--initial-mass 101.9201 --metallicity 0.01416 +--initial-mass 102.4843 --metallicity 0.01416 +--initial-mass 103.0516 --metallicity 0.01416 +--initial-mass 103.6221 --metallicity 0.01416 +--initial-mass 104.1958 --metallicity 0.01416 +--initial-mass 104.7726 --metallicity 0.01416 +--initial-mass 105.3526 --metallicity 0.01416 +--initial-mass 105.9358 --metallicity 0.01416 +--initial-mass 106.5223 --metallicity 0.01416 +--initial-mass 107.112 --metallicity 0.01416 +--initial-mass 107.7049 --metallicity 0.01416 +--initial-mass 108.3012 --metallicity 0.01416 +--initial-mass 108.9007 --metallicity 0.01416 +--initial-mass 109.5036 --metallicity 0.01416 +--initial-mass 110.1098 --metallicity 0.01416 +--initial-mass 110.7194 --metallicity 0.01416 +--initial-mass 111.3323 --metallicity 0.01416 +--initial-mass 111.9486 --metallicity 0.01416 +--initial-mass 112.5684 --metallicity 0.01416 +--initial-mass 113.1915 --metallicity 0.01416 +--initial-mass 113.8182 --metallicity 0.01416 +--initial-mass 114.4482 --metallicity 0.01416 +--initial-mass 115.0818 --metallicity 0.01416 +--initial-mass 115.7189 --metallicity 0.01416 +--initial-mass 116.3595 --metallicity 0.01416 +--initial-mass 117.0037 --metallicity 0.01416 +--initial-mass 117.6514 --metallicity 0.01416 +--initial-mass 118.3027 --metallicity 0.01416 +--initial-mass 118.9576 --metallicity 0.01416 +--initial-mass 119.6162 --metallicity 0.01416 +--initial-mass 120.2784 --metallicity 0.01416 +--initial-mass 120.9442 --metallicity 0.01416 +--initial-mass 121.6137 --metallicity 0.01416 +--initial-mass 122.287 --metallicity 0.01416 +--initial-mass 122.964 --metallicity 0.01416 +--initial-mass 123.6447 --metallicity 0.01416 +--initial-mass 124.3292 --metallicity 0.01416 +--initial-mass 125.0175 --metallicity 0.01416 +--initial-mass 125.7095 --metallicity 0.01416 +--initial-mass 126.4055 --metallicity 0.01416 +--initial-mass 127.1052 --metallicity 0.01416 +--initial-mass 127.8089 --metallicity 0.01416 +--initial-mass 128.5164 --metallicity 0.01416 +--initial-mass 129.2279 --metallicity 0.01416 +--initial-mass 129.9433 --metallicity 0.01416 +--initial-mass 130.6626 --metallicity 0.01416 +--initial-mass 131.386 --metallicity 0.01416 +--initial-mass 132.1133 --metallicity 0.01416 +--initial-mass 132.8447 --metallicity 0.01416 +--initial-mass 133.5801 --metallicity 0.01416 +--initial-mass 134.3196 --metallicity 0.01416 +--initial-mass 135.0632 --metallicity 0.01416 +--initial-mass 135.8109 --metallicity 0.01416 +--initial-mass 136.5627 --metallicity 0.01416 +--initial-mass 137.3187 --metallicity 0.01416 +--initial-mass 138.0789 --metallicity 0.01416 +--initial-mass 138.8433 --metallicity 0.01416 +--initial-mass 139.6119 --metallicity 0.01416 +--initial-mass 140.3848 --metallicity 0.01416 +--initial-mass 141.162 --metallicity 0.01416 +--initial-mass 141.9434 --metallicity 0.01416 +--initial-mass 142.7292 --metallicity 0.01416 +--initial-mass 143.5194 --metallicity 0.01416 +--initial-mass 144.3139 --metallicity 0.01416 +--initial-mass 145.1128 --metallicity 0.01416 +--initial-mass 145.9161 --metallicity 0.01416 +--initial-mass 146.7239 --metallicity 0.01416 +--initial-mass 147.5362 --metallicity 0.01416 +--initial-mass 148.3529 --metallicity 0.01416 +--initial-mass 149.1742 --metallicity 0.01416 +--initial-mass 150.0 --metallicity 0.01416 diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/README.md b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/README.md index d2b156de4..e3834504b 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/README.md +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/README.md @@ -11,4 +11,4 @@ For reference, the changes from the *default* pythonSubmit.py are just: - change the output file name (to distinguish the 3 grids) - change the logfiles definitions so that only the variables needed are included - change grid name -- (for some) change the remnant mass prescription \ No newline at end of file +- (for some) change the remnant mass prescription diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/grid.txt b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/grid.txt index 37d670398..e62ba01ad 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/grid.txt +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/grid.txt @@ -1,2000 +1,2000 @@ ---initial-mass 0.1 --metallicity 0.0001 ---initial-mass 0.101 --metallicity 0.0001 ---initial-mass 0.103 --metallicity 0.0001 ---initial-mass 0.104 --metallicity 0.0001 ---initial-mass 0.106 --metallicity 0.0001 ---initial-mass 0.108 --metallicity 0.0001 ---initial-mass 0.109 --metallicity 0.0001 ---initial-mass 0.111 --metallicity 0.0001 ---initial-mass 0.112 --metallicity 0.0001 ---initial-mass 0.114 --metallicity 0.0001 ---initial-mass 0.116 --metallicity 0.0001 ---initial-mass 0.117 --metallicity 0.0001 ---initial-mass 0.119 --metallicity 0.0001 ---initial-mass 0.121 --metallicity 0.0001 ---initial-mass 0.123 --metallicity 0.0001 ---initial-mass 0.125 --metallicity 0.0001 ---initial-mass 0.126 --metallicity 0.0001 ---initial-mass 0.128 --metallicity 0.0001 ---initial-mass 0.13 --metallicity 0.0001 ---initial-mass 0.132 --metallicity 0.0001 ---initial-mass 0.134 --metallicity 0.0001 ---initial-mass 0.136 --metallicity 0.0001 ---initial-mass 0.138 --metallicity 0.0001 ---initial-mass 0.14 --metallicity 0.0001 ---initial-mass 0.142 --metallicity 0.0001 ---initial-mass 0.144 --metallicity 0.0001 ---initial-mass 0.146 --metallicity 0.0001 ---initial-mass 0.149 --metallicity 0.0001 ---initial-mass 0.151 --metallicity 0.0001 ---initial-mass 0.153 --metallicity 0.0001 ---initial-mass 0.155 --metallicity 0.0001 ---initial-mass 0.158 --metallicity 0.0001 ---initial-mass 0.16 --metallicity 0.0001 ---initial-mass 0.162 --metallicity 0.0001 ---initial-mass 0.165 --metallicity 0.0001 ---initial-mass 0.167 --metallicity 0.0001 ---initial-mass 0.169 --metallicity 0.0001 ---initial-mass 0.172 --metallicity 0.0001 ---initial-mass 0.175 --metallicity 0.0001 ---initial-mass 0.177 --metallicity 0.0001 ---initial-mass 0.18 --metallicity 0.0001 ---initial-mass 0.182 --metallicity 0.0001 ---initial-mass 0.185 --metallicity 0.0001 ---initial-mass 0.188 --metallicity 0.0001 ---initial-mass 0.191 --metallicity 0.0001 ---initial-mass 0.193 --metallicity 0.0001 ---initial-mass 0.196 --metallicity 0.0001 ---initial-mass 0.199 --metallicity 0.0001 ---initial-mass 0.202 --metallicity 0.0001 ---initial-mass 0.205 --metallicity 0.0001 ---initial-mass 0.208 --metallicity 0.0001 ---initial-mass 0.211 --metallicity 0.0001 ---initial-mass 0.214 --metallicity 0.0001 ---initial-mass 0.217 --metallicity 0.0001 ---initial-mass 0.221 --metallicity 0.0001 ---initial-mass 0.224 --metallicity 0.0001 ---initial-mass 0.227 --metallicity 0.0001 ---initial-mass 0.231 --metallicity 0.0001 ---initial-mass 0.234 --metallicity 0.0001 ---initial-mass 0.237 --metallicity 0.0001 ---initial-mass 0.241 --metallicity 0.0001 ---initial-mass 0.244 --metallicity 0.0001 ---initial-mass 0.248 --metallicity 0.0001 ---initial-mass 0.252 --metallicity 0.0001 ---initial-mass 0.255 --metallicity 0.0001 ---initial-mass 0.259 --metallicity 0.0001 ---initial-mass 0.263 --metallicity 0.0001 ---initial-mass 0.267 --metallicity 0.0001 ---initial-mass 0.271 --metallicity 0.0001 ---initial-mass 0.275 --metallicity 0.0001 ---initial-mass 0.279 --metallicity 0.0001 ---initial-mass 0.283 --metallicity 0.0001 ---initial-mass 0.287 --metallicity 0.0001 ---initial-mass 0.292 --metallicity 0.0001 ---initial-mass 0.296 --metallicity 0.0001 ---initial-mass 0.3 --metallicity 0.0001 ---initial-mass 0.305 --metallicity 0.0001 ---initial-mass 0.309 --metallicity 0.0001 ---initial-mass 0.314 --metallicity 0.0001 ---initial-mass 0.318 --metallicity 0.0001 ---initial-mass 0.323 --metallicity 0.0001 ---initial-mass 0.328 --metallicity 0.0001 ---initial-mass 0.333 --metallicity 0.0001 ---initial-mass 0.338 --metallicity 0.0001 ---initial-mass 0.342 --metallicity 0.0001 ---initial-mass 0.348 --metallicity 0.0001 ---initial-mass 0.353 --metallicity 0.0001 ---initial-mass 0.358 --metallicity 0.0001 ---initial-mass 0.363 --metallicity 0.0001 ---initial-mass 0.369 --metallicity 0.0001 ---initial-mass 0.374 --metallicity 0.0001 ---initial-mass 0.379 --metallicity 0.0001 ---initial-mass 0.385 --metallicity 0.0001 ---initial-mass 0.391 --metallicity 0.0001 ---initial-mass 0.397 --metallicity 0.0001 ---initial-mass 0.402 --metallicity 0.0001 ---initial-mass 0.408 --metallicity 0.0001 ---initial-mass 0.414 --metallicity 0.0001 ---initial-mass 0.42 --metallicity 0.0001 ---initial-mass 0.427 --metallicity 0.0001 ---initial-mass 0.433 --metallicity 0.0001 ---initial-mass 0.439 --metallicity 0.0001 ---initial-mass 0.446 --metallicity 0.0001 ---initial-mass 0.452 --metallicity 0.0001 ---initial-mass 0.459 --metallicity 0.0001 ---initial-mass 0.466 --metallicity 0.0001 ---initial-mass 0.473 --metallicity 0.0001 ---initial-mass 0.48 --metallicity 0.0001 ---initial-mass 0.487 --metallicity 0.0001 ---initial-mass 0.494 --metallicity 0.0001 ---initial-mass 0.501 --metallicity 0.0001 ---initial-mass 0.509 --metallicity 0.0001 ---initial-mass 0.516 --metallicity 0.0001 ---initial-mass 0.524 --metallicity 0.0001 ---initial-mass 0.532 --metallicity 0.0001 ---initial-mass 0.539 --metallicity 0.0001 ---initial-mass 0.547 --metallicity 0.0001 ---initial-mass 0.556 --metallicity 0.0001 ---initial-mass 0.564 --metallicity 0.0001 ---initial-mass 0.572 --metallicity 0.0001 ---initial-mass 0.58 --metallicity 0.0001 ---initial-mass 0.589 --metallicity 0.0001 ---initial-mass 0.598 --metallicity 0.0001 ---initial-mass 0.607 --metallicity 0.0001 ---initial-mass 0.616 --metallicity 0.0001 ---initial-mass 0.625 --metallicity 0.0001 ---initial-mass 0.634 --metallicity 0.0001 ---initial-mass 0.643 --metallicity 0.0001 ---initial-mass 0.653 --metallicity 0.0001 ---initial-mass 0.662 --metallicity 0.0001 ---initial-mass 0.672 --metallicity 0.0001 ---initial-mass 0.682 --metallicity 0.0001 ---initial-mass 0.692 --metallicity 0.0001 ---initial-mass 0.702 --metallicity 0.0001 ---initial-mass 0.713 --metallicity 0.0001 ---initial-mass 0.723 --metallicity 0.0001 ---initial-mass 0.734 --metallicity 0.0001 ---initial-mass 0.745 --metallicity 0.0001 ---initial-mass 0.756 --metallicity 0.0001 ---initial-mass 0.767 --metallicity 0.0001 ---initial-mass 0.778 --metallicity 0.0001 ---initial-mass 0.79 --metallicity 0.0001 ---initial-mass 0.801 --metallicity 0.0001 ---initial-mass 0.813 --metallicity 0.0001 ---initial-mass 0.825 --metallicity 0.0001 ---initial-mass 0.837 --metallicity 0.0001 ---initial-mass 0.85 --metallicity 0.0001 ---initial-mass 0.862 --metallicity 0.0001 ---initial-mass 0.875 --metallicity 0.0001 ---initial-mass 0.888 --metallicity 0.0001 ---initial-mass 0.901 --metallicity 0.0001 ---initial-mass 0.914 --metallicity 0.0001 ---initial-mass 0.928 --metallicity 0.0001 ---initial-mass 0.942 --metallicity 0.0001 ---initial-mass 0.955 --metallicity 0.0001 ---initial-mass 0.97 --metallicity 0.0001 ---initial-mass 0.984 --metallicity 0.0001 ---initial-mass 0.998 --metallicity 0.0001 ---initial-mass 1.013 --metallicity 0.0001 ---initial-mass 1.028 --metallicity 0.0001 ---initial-mass 1.043 --metallicity 0.0001 ---initial-mass 1.059 --metallicity 0.0001 ---initial-mass 1.074 --metallicity 0.0001 ---initial-mass 1.09 --metallicity 0.0001 ---initial-mass 1.106 --metallicity 0.0001 ---initial-mass 1.123 --metallicity 0.0001 ---initial-mass 1.139 --metallicity 0.0001 ---initial-mass 1.156 --metallicity 0.0001 ---initial-mass 1.173 --metallicity 0.0001 ---initial-mass 1.19 --metallicity 0.0001 ---initial-mass 1.208 --metallicity 0.0001 ---initial-mass 1.226 --metallicity 0.0001 ---initial-mass 1.244 --metallicity 0.0001 ---initial-mass 1.262 --metallicity 0.0001 ---initial-mass 1.281 --metallicity 0.0001 ---initial-mass 1.3 --metallicity 0.0001 ---initial-mass 1.319 --metallicity 0.0001 ---initial-mass 1.338 --metallicity 0.0001 ---initial-mass 1.358 --metallicity 0.0001 ---initial-mass 1.378 --metallicity 0.0001 ---initial-mass 1.399 --metallicity 0.0001 ---initial-mass 1.419 --metallicity 0.0001 ---initial-mass 1.44 --metallicity 0.0001 ---initial-mass 1.461 --metallicity 0.0001 ---initial-mass 1.483 --metallicity 0.0001 ---initial-mass 1.505 --metallicity 0.0001 ---initial-mass 1.527 --metallicity 0.0001 ---initial-mass 1.55 --metallicity 0.0001 ---initial-mass 1.573 --metallicity 0.0001 ---initial-mass 1.596 --metallicity 0.0001 ---initial-mass 1.619 --metallicity 0.0001 ---initial-mass 1.643 --metallicity 0.0001 ---initial-mass 1.667 --metallicity 0.0001 ---initial-mass 1.692 --metallicity 0.0001 ---initial-mass 1.717 --metallicity 0.0001 ---initial-mass 1.742 --metallicity 0.0001 ---initial-mass 1.768 --metallicity 0.0001 ---initial-mass 1.794 --metallicity 0.0001 ---initial-mass 1.821 --metallicity 0.0001 ---initial-mass 1.848 --metallicity 0.0001 ---initial-mass 1.875 --metallicity 0.0001 ---initial-mass 1.903 --metallicity 0.0001 ---initial-mass 1.931 --metallicity 0.0001 ---initial-mass 1.959 --metallicity 0.0001 ---initial-mass 1.988 --metallicity 0.0001 ---initial-mass 2.017 --metallicity 0.0001 ---initial-mass 2.047 --metallicity 0.0001 ---initial-mass 2.077 --metallicity 0.0001 ---initial-mass 2.108 --metallicity 0.0001 ---initial-mass 2.139 --metallicity 0.0001 ---initial-mass 2.171 --metallicity 0.0001 ---initial-mass 2.203 --metallicity 0.0001 ---initial-mass 2.235 --metallicity 0.0001 ---initial-mass 2.268 --metallicity 0.0001 ---initial-mass 2.302 --metallicity 0.0001 ---initial-mass 2.336 --metallicity 0.0001 ---initial-mass 2.37 --metallicity 0.0001 ---initial-mass 2.405 --metallicity 0.0001 ---initial-mass 2.441 --metallicity 0.0001 ---initial-mass 2.477 --metallicity 0.0001 ---initial-mass 2.514 --metallicity 0.0001 ---initial-mass 2.551 --metallicity 0.0001 ---initial-mass 2.588 --metallicity 0.0001 ---initial-mass 2.626 --metallicity 0.0001 ---initial-mass 2.665 --metallicity 0.0001 ---initial-mass 2.705 --metallicity 0.0001 ---initial-mass 2.745 --metallicity 0.0001 ---initial-mass 2.785 --metallicity 0.0001 ---initial-mass 2.826 --metallicity 0.0001 ---initial-mass 2.868 --metallicity 0.0001 ---initial-mass 2.91 --metallicity 0.0001 ---initial-mass 2.953 --metallicity 0.0001 ---initial-mass 2.997 --metallicity 0.0001 ---initial-mass 3.041 --metallicity 0.0001 ---initial-mass 3.086 --metallicity 0.0001 ---initial-mass 3.132 --metallicity 0.0001 ---initial-mass 3.178 --metallicity 0.0001 ---initial-mass 3.225 --metallicity 0.0001 ---initial-mass 3.272 --metallicity 0.0001 ---initial-mass 3.321 --metallicity 0.0001 ---initial-mass 3.37 --metallicity 0.0001 ---initial-mass 3.419 --metallicity 0.0001 ---initial-mass 3.47 --metallicity 0.0001 ---initial-mass 3.521 --metallicity 0.0001 ---initial-mass 3.573 --metallicity 0.0001 ---initial-mass 3.626 --metallicity 0.0001 ---initial-mass 3.679 --metallicity 0.0001 ---initial-mass 3.734 --metallicity 0.0001 ---initial-mass 3.789 --metallicity 0.0001 ---initial-mass 3.845 --metallicity 0.0001 ---initial-mass 3.901 --metallicity 0.0001 ---initial-mass 3.959 --metallicity 0.0001 ---initial-mass 4.018 --metallicity 0.0001 ---initial-mass 4.077 --metallicity 0.0001 ---initial-mass 4.137 --metallicity 0.0001 ---initial-mass 4.198 --metallicity 0.0001 ---initial-mass 4.26 --metallicity 0.0001 ---initial-mass 4.323 --metallicity 0.0001 ---initial-mass 4.387 --metallicity 0.0001 ---initial-mass 4.452 --metallicity 0.0001 ---initial-mass 4.517 --metallicity 0.0001 ---initial-mass 4.584 --metallicity 0.0001 ---initial-mass 4.652 --metallicity 0.0001 ---initial-mass 4.72 --metallicity 0.0001 ---initial-mass 4.79 --metallicity 0.0001 ---initial-mass 4.861 --metallicity 0.0001 ---initial-mass 4.932 --metallicity 0.0001 ---initial-mass 5.005 --metallicity 0.0001 ---initial-mass 5.079 --metallicity 0.0001 ---initial-mass 5.154 --metallicity 0.0001 ---initial-mass 5.23 --metallicity 0.0001 ---initial-mass 5.308 --metallicity 0.0001 ---initial-mass 5.386 --metallicity 0.0001 ---initial-mass 5.465 --metallicity 0.0001 ---initial-mass 5.546 --metallicity 0.0001 ---initial-mass 5.628 --metallicity 0.0001 ---initial-mass 5.711 --metallicity 0.0001 ---initial-mass 5.795 --metallicity 0.0001 ---initial-mass 5.881 --metallicity 0.0001 ---initial-mass 5.968 --metallicity 0.0001 ---initial-mass 6.056 --metallicity 0.0001 ---initial-mass 6.145 --metallicity 0.0001 ---initial-mass 6.236 --metallicity 0.0001 ---initial-mass 6.328 --metallicity 0.0001 ---initial-mass 6.421 --metallicity 0.0001 ---initial-mass 6.516 --metallicity 0.0001 ---initial-mass 6.612 --metallicity 0.0001 ---initial-mass 6.71 --metallicity 0.0001 ---initial-mass 6.809 --metallicity 0.0001 ---initial-mass 6.91 --metallicity 0.0001 ---initial-mass 7.012 --metallicity 0.0001 ---initial-mass 7.115 --metallicity 0.0001 ---initial-mass 7.22 --metallicity 0.0001 ---initial-mass 7.327 --metallicity 0.0001 ---initial-mass 7.435 --metallicity 0.0001 ---initial-mass 7.545 --metallicity 0.0001 ---initial-mass 7.656 --metallicity 0.0001 ---initial-mass 7.769 --metallicity 0.0001 ---initial-mass 7.884 --metallicity 0.0001 ---initial-mass 8.0 --metallicity 0.0001 ---initial-mass 8.118 --metallicity 0.0001 ---initial-mass 8.238 --metallicity 0.0001 ---initial-mass 8.36 --metallicity 0.0001 ---initial-mass 8.483 --metallicity 0.0001 ---initial-mass 8.609 --metallicity 0.0001 ---initial-mass 8.736 --metallicity 0.0001 ---initial-mass 8.865 --metallicity 0.0001 ---initial-mass 8.996 --metallicity 0.0001 ---initial-mass 9.128 --metallicity 0.0001 ---initial-mass 9.263 --metallicity 0.0001 ---initial-mass 9.4 --metallicity 0.0001 ---initial-mass 9.539 --metallicity 0.0001 ---initial-mass 9.679 --metallicity 0.0001 ---initial-mass 9.822 --metallicity 0.0001 ---initial-mass 9.967 --metallicity 0.0001 ---initial-mass 10.115 --metallicity 0.0001 ---initial-mass 10.264 --metallicity 0.0001 ---initial-mass 10.415 --metallicity 0.0001 ---initial-mass 10.569 --metallicity 0.0001 ---initial-mass 10.725 --metallicity 0.0001 ---initial-mass 10.884 --metallicity 0.0001 ---initial-mass 11.044 --metallicity 0.0001 ---initial-mass 11.207 --metallicity 0.0001 ---initial-mass 11.373 --metallicity 0.0001 ---initial-mass 11.541 --metallicity 0.0001 ---initial-mass 11.711 --metallicity 0.0001 ---initial-mass 11.884 --metallicity 0.0001 ---initial-mass 12.059 --metallicity 0.0001 ---initial-mass 12.237 --metallicity 0.0001 ---initial-mass 12.418 --metallicity 0.0001 ---initial-mass 12.601 --metallicity 0.0001 ---initial-mass 12.788 --metallicity 0.0001 ---initial-mass 12.976 --metallicity 0.0001 ---initial-mass 13.168 --metallicity 0.0001 ---initial-mass 13.362 --metallicity 0.0001 ---initial-mass 13.56 --metallicity 0.0001 ---initial-mass 13.76 --metallicity 0.0001 ---initial-mass 13.963 --metallicity 0.0001 ---initial-mass 14.169 --metallicity 0.0001 ---initial-mass 14.378 --metallicity 0.0001 ---initial-mass 14.591 --metallicity 0.0001 ---initial-mass 14.806 --metallicity 0.0001 ---initial-mass 15.024 --metallicity 0.0001 ---initial-mass 15.246 --metallicity 0.0001 ---initial-mass 15.471 --metallicity 0.0001 ---initial-mass 15.7 --metallicity 0.0001 ---initial-mass 15.932 --metallicity 0.0001 ---initial-mass 16.167 --metallicity 0.0001 ---initial-mass 16.406 --metallicity 0.0001 ---initial-mass 16.648 --metallicity 0.0001 ---initial-mass 16.893 --metallicity 0.0001 ---initial-mass 17.143 --metallicity 0.0001 ---initial-mass 17.396 --metallicity 0.0001 ---initial-mass 17.653 --metallicity 0.0001 ---initial-mass 17.913 --metallicity 0.0001 ---initial-mass 18.178 --metallicity 0.0001 ---initial-mass 18.446 --metallicity 0.0001 ---initial-mass 18.719 --metallicity 0.0001 ---initial-mass 18.995 --metallicity 0.0001 ---initial-mass 19.275 --metallicity 0.0001 ---initial-mass 19.56 --metallicity 0.0001 ---initial-mass 19.849 --metallicity 0.0001 ---initial-mass 20.142 --metallicity 0.0001 ---initial-mass 20.439 --metallicity 0.0001 ---initial-mass 20.741 --metallicity 0.0001 ---initial-mass 21.047 --metallicity 0.0001 ---initial-mass 21.358 --metallicity 0.0001 ---initial-mass 21.673 --metallicity 0.0001 ---initial-mass 21.993 --metallicity 0.0001 ---initial-mass 22.318 --metallicity 0.0001 ---initial-mass 22.647 --metallicity 0.0001 ---initial-mass 22.982 --metallicity 0.0001 ---initial-mass 23.321 --metallicity 0.0001 ---initial-mass 23.665 --metallicity 0.0001 ---initial-mass 24.015 --metallicity 0.0001 ---initial-mass 24.369 --metallicity 0.0001 ---initial-mass 24.729 --metallicity 0.0001 ---initial-mass 25.094 --metallicity 0.0001 ---initial-mass 25.465 --metallicity 0.0001 ---initial-mass 25.841 --metallicity 0.0001 ---initial-mass 26.222 --metallicity 0.0001 ---initial-mass 26.609 --metallicity 0.0001 ---initial-mass 27.002 --metallicity 0.0001 ---initial-mass 27.401 --metallicity 0.0001 ---initial-mass 27.805 --metallicity 0.0001 ---initial-mass 28.216 --metallicity 0.0001 ---initial-mass 28.632 --metallicity 0.0001 ---initial-mass 29.055 --metallicity 0.0001 ---initial-mass 29.484 --metallicity 0.0001 ---initial-mass 29.919 --metallicity 0.0001 ---initial-mass 30.361 --metallicity 0.0001 ---initial-mass 30.809 --metallicity 0.0001 ---initial-mass 31.264 --metallicity 0.0001 ---initial-mass 31.726 --metallicity 0.0001 ---initial-mass 32.194 --metallicity 0.0001 ---initial-mass 32.669 --metallicity 0.0001 ---initial-mass 33.152 --metallicity 0.0001 ---initial-mass 33.641 --metallicity 0.0001 ---initial-mass 34.138 --metallicity 0.0001 ---initial-mass 34.642 --metallicity 0.0001 ---initial-mass 35.153 --metallicity 0.0001 ---initial-mass 35.672 --metallicity 0.0001 ---initial-mass 36.199 --metallicity 0.0001 ---initial-mass 36.733 --metallicity 0.0001 ---initial-mass 37.276 --metallicity 0.0001 ---initial-mass 37.826 --metallicity 0.0001 ---initial-mass 38.384 --metallicity 0.0001 ---initial-mass 38.951 --metallicity 0.0001 ---initial-mass 39.526 --metallicity 0.0001 ---initial-mass 40.11 --metallicity 0.0001 ---initial-mass 40.702 --metallicity 0.0001 ---initial-mass 41.303 --metallicity 0.0001 ---initial-mass 41.913 --metallicity 0.0001 ---initial-mass 42.531 --metallicity 0.0001 ---initial-mass 43.159 --metallicity 0.0001 ---initial-mass 43.796 --metallicity 0.0001 ---initial-mass 44.443 --metallicity 0.0001 ---initial-mass 45.099 --metallicity 0.0001 ---initial-mass 45.765 --metallicity 0.0001 ---initial-mass 46.441 --metallicity 0.0001 ---initial-mass 47.126 --metallicity 0.0001 ---initial-mass 47.822 --metallicity 0.0001 ---initial-mass 48.528 --metallicity 0.0001 ---initial-mass 49.245 --metallicity 0.0001 ---initial-mass 49.972 --metallicity 0.0001 ---initial-mass 50.709 --metallicity 0.0001 ---initial-mass 51.458 --metallicity 0.0001 ---initial-mass 52.218 --metallicity 0.0001 ---initial-mass 52.989 --metallicity 0.0001 ---initial-mass 53.771 --metallicity 0.0001 ---initial-mass 54.565 --metallicity 0.0001 ---initial-mass 55.37 --metallicity 0.0001 ---initial-mass 56.188 --metallicity 0.0001 ---initial-mass 57.017 --metallicity 0.0001 ---initial-mass 57.859 --metallicity 0.0001 ---initial-mass 58.713 --metallicity 0.0001 ---initial-mass 59.58 --metallicity 0.0001 ---initial-mass 60.46 --metallicity 0.0001 ---initial-mass 61.352 --metallicity 0.0001 ---initial-mass 62.258 --metallicity 0.0001 ---initial-mass 63.177 --metallicity 0.0001 ---initial-mass 64.11 --metallicity 0.0001 ---initial-mass 65.057 --metallicity 0.0001 ---initial-mass 66.017 --metallicity 0.0001 ---initial-mass 66.992 --metallicity 0.0001 ---initial-mass 67.981 --metallicity 0.0001 ---initial-mass 68.984 --metallicity 0.0001 ---initial-mass 70.003 --metallicity 0.0001 ---initial-mass 71.036 --metallicity 0.0001 ---initial-mass 72.085 --metallicity 0.0001 ---initial-mass 73.149 --metallicity 0.0001 ---initial-mass 74.229 --metallicity 0.0001 ---initial-mass 75.325 --metallicity 0.0001 ---initial-mass 76.437 --metallicity 0.0001 ---initial-mass 77.566 --metallicity 0.0001 ---initial-mass 78.711 --metallicity 0.0001 ---initial-mass 79.873 --metallicity 0.0001 ---initial-mass 81.052 --metallicity 0.0001 ---initial-mass 82.249 --metallicity 0.0001 ---initial-mass 83.463 --metallicity 0.0001 ---initial-mass 84.695 --metallicity 0.0001 ---initial-mass 85.946 --metallicity 0.0001 ---initial-mass 87.215 --metallicity 0.0001 ---initial-mass 88.502 --metallicity 0.0001 ---initial-mass 89.809 --metallicity 0.0001 ---initial-mass 91.135 --metallicity 0.0001 ---initial-mass 92.48 --metallicity 0.0001 ---initial-mass 93.846 --metallicity 0.0001 ---initial-mass 95.231 --metallicity 0.0001 ---initial-mass 96.637 --metallicity 0.0001 ---initial-mass 98.064 --metallicity 0.0001 ---initial-mass 99.512 --metallicity 0.0001 ---initial-mass 100.981 --metallicity 0.0001 ---initial-mass 102.472 --metallicity 0.0001 ---initial-mass 103.984 --metallicity 0.0001 ---initial-mass 105.52 --metallicity 0.0001 ---initial-mass 107.078 --metallicity 0.0001 ---initial-mass 108.658 --metallicity 0.0001 ---initial-mass 110.263 --metallicity 0.0001 ---initial-mass 111.89 --metallicity 0.0001 ---initial-mass 113.542 --metallicity 0.0001 ---initial-mass 115.219 --metallicity 0.0001 ---initial-mass 116.92 --metallicity 0.0001 ---initial-mass 118.646 --metallicity 0.0001 ---initial-mass 120.398 --metallicity 0.0001 ---initial-mass 122.175 --metallicity 0.0001 ---initial-mass 123.979 --metallicity 0.0001 ---initial-mass 125.809 --metallicity 0.0001 ---initial-mass 127.667 --metallicity 0.0001 ---initial-mass 129.551 --metallicity 0.0001 ---initial-mass 131.464 --metallicity 0.0001 ---initial-mass 133.405 --metallicity 0.0001 ---initial-mass 135.375 --metallicity 0.0001 ---initial-mass 137.373 --metallicity 0.0001 ---initial-mass 139.401 --metallicity 0.0001 ---initial-mass 141.459 --metallicity 0.0001 ---initial-mass 143.548 --metallicity 0.0001 ---initial-mass 145.667 --metallicity 0.0001 ---initial-mass 147.818 --metallicity 0.0001 ---initial-mass 150.0 --metallicity 0.0001 ---initial-mass 0.1 --metallicity 0.001 ---initial-mass 0.101 --metallicity 0.001 ---initial-mass 0.103 --metallicity 0.001 ---initial-mass 0.104 --metallicity 0.001 ---initial-mass 0.106 --metallicity 0.001 ---initial-mass 0.108 --metallicity 0.001 ---initial-mass 0.109 --metallicity 0.001 ---initial-mass 0.111 --metallicity 0.001 ---initial-mass 0.112 --metallicity 0.001 ---initial-mass 0.114 --metallicity 0.001 ---initial-mass 0.116 --metallicity 0.001 ---initial-mass 0.117 --metallicity 0.001 ---initial-mass 0.119 --metallicity 0.001 ---initial-mass 0.121 --metallicity 0.001 ---initial-mass 0.123 --metallicity 0.001 ---initial-mass 0.125 --metallicity 0.001 ---initial-mass 0.126 --metallicity 0.001 ---initial-mass 0.128 --metallicity 0.001 ---initial-mass 0.13 --metallicity 0.001 ---initial-mass 0.132 --metallicity 0.001 ---initial-mass 0.134 --metallicity 0.001 ---initial-mass 0.136 --metallicity 0.001 ---initial-mass 0.138 --metallicity 0.001 ---initial-mass 0.14 --metallicity 0.001 ---initial-mass 0.142 --metallicity 0.001 ---initial-mass 0.144 --metallicity 0.001 ---initial-mass 0.146 --metallicity 0.001 ---initial-mass 0.149 --metallicity 0.001 ---initial-mass 0.151 --metallicity 0.001 ---initial-mass 0.153 --metallicity 0.001 ---initial-mass 0.155 --metallicity 0.001 ---initial-mass 0.158 --metallicity 0.001 ---initial-mass 0.16 --metallicity 0.001 ---initial-mass 0.162 --metallicity 0.001 ---initial-mass 0.165 --metallicity 0.001 ---initial-mass 0.167 --metallicity 0.001 ---initial-mass 0.169 --metallicity 0.001 ---initial-mass 0.172 --metallicity 0.001 ---initial-mass 0.175 --metallicity 0.001 ---initial-mass 0.177 --metallicity 0.001 ---initial-mass 0.18 --metallicity 0.001 ---initial-mass 0.182 --metallicity 0.001 ---initial-mass 0.185 --metallicity 0.001 ---initial-mass 0.188 --metallicity 0.001 ---initial-mass 0.191 --metallicity 0.001 ---initial-mass 0.193 --metallicity 0.001 ---initial-mass 0.196 --metallicity 0.001 ---initial-mass 0.199 --metallicity 0.001 ---initial-mass 0.202 --metallicity 0.001 ---initial-mass 0.205 --metallicity 0.001 ---initial-mass 0.208 --metallicity 0.001 ---initial-mass 0.211 --metallicity 0.001 ---initial-mass 0.214 --metallicity 0.001 ---initial-mass 0.217 --metallicity 0.001 ---initial-mass 0.221 --metallicity 0.001 ---initial-mass 0.224 --metallicity 0.001 ---initial-mass 0.227 --metallicity 0.001 ---initial-mass 0.231 --metallicity 0.001 ---initial-mass 0.234 --metallicity 0.001 ---initial-mass 0.237 --metallicity 0.001 ---initial-mass 0.241 --metallicity 0.001 ---initial-mass 0.244 --metallicity 0.001 ---initial-mass 0.248 --metallicity 0.001 ---initial-mass 0.252 --metallicity 0.001 ---initial-mass 0.255 --metallicity 0.001 ---initial-mass 0.259 --metallicity 0.001 ---initial-mass 0.263 --metallicity 0.001 ---initial-mass 0.267 --metallicity 0.001 ---initial-mass 0.271 --metallicity 0.001 ---initial-mass 0.275 --metallicity 0.001 ---initial-mass 0.279 --metallicity 0.001 ---initial-mass 0.283 --metallicity 0.001 ---initial-mass 0.287 --metallicity 0.001 ---initial-mass 0.292 --metallicity 0.001 ---initial-mass 0.296 --metallicity 0.001 ---initial-mass 0.3 --metallicity 0.001 ---initial-mass 0.305 --metallicity 0.001 ---initial-mass 0.309 --metallicity 0.001 ---initial-mass 0.314 --metallicity 0.001 ---initial-mass 0.318 --metallicity 0.001 ---initial-mass 0.323 --metallicity 0.001 ---initial-mass 0.328 --metallicity 0.001 ---initial-mass 0.333 --metallicity 0.001 ---initial-mass 0.338 --metallicity 0.001 ---initial-mass 0.342 --metallicity 0.001 ---initial-mass 0.348 --metallicity 0.001 ---initial-mass 0.353 --metallicity 0.001 ---initial-mass 0.358 --metallicity 0.001 ---initial-mass 0.363 --metallicity 0.001 ---initial-mass 0.369 --metallicity 0.001 ---initial-mass 0.374 --metallicity 0.001 ---initial-mass 0.379 --metallicity 0.001 ---initial-mass 0.385 --metallicity 0.001 ---initial-mass 0.391 --metallicity 0.001 ---initial-mass 0.397 --metallicity 0.001 ---initial-mass 0.402 --metallicity 0.001 ---initial-mass 0.408 --metallicity 0.001 ---initial-mass 0.414 --metallicity 0.001 ---initial-mass 0.42 --metallicity 0.001 ---initial-mass 0.427 --metallicity 0.001 ---initial-mass 0.433 --metallicity 0.001 ---initial-mass 0.439 --metallicity 0.001 ---initial-mass 0.446 --metallicity 0.001 ---initial-mass 0.452 --metallicity 0.001 ---initial-mass 0.459 --metallicity 0.001 ---initial-mass 0.466 --metallicity 0.001 ---initial-mass 0.473 --metallicity 0.001 ---initial-mass 0.48 --metallicity 0.001 ---initial-mass 0.487 --metallicity 0.001 ---initial-mass 0.494 --metallicity 0.001 ---initial-mass 0.501 --metallicity 0.001 ---initial-mass 0.509 --metallicity 0.001 ---initial-mass 0.516 --metallicity 0.001 ---initial-mass 0.524 --metallicity 0.001 ---initial-mass 0.532 --metallicity 0.001 ---initial-mass 0.539 --metallicity 0.001 ---initial-mass 0.547 --metallicity 0.001 ---initial-mass 0.556 --metallicity 0.001 ---initial-mass 0.564 --metallicity 0.001 ---initial-mass 0.572 --metallicity 0.001 ---initial-mass 0.58 --metallicity 0.001 ---initial-mass 0.589 --metallicity 0.001 ---initial-mass 0.598 --metallicity 0.001 ---initial-mass 0.607 --metallicity 0.001 ---initial-mass 0.616 --metallicity 0.001 ---initial-mass 0.625 --metallicity 0.001 ---initial-mass 0.634 --metallicity 0.001 ---initial-mass 0.643 --metallicity 0.001 ---initial-mass 0.653 --metallicity 0.001 ---initial-mass 0.662 --metallicity 0.001 ---initial-mass 0.672 --metallicity 0.001 ---initial-mass 0.682 --metallicity 0.001 ---initial-mass 0.692 --metallicity 0.001 ---initial-mass 0.702 --metallicity 0.001 ---initial-mass 0.713 --metallicity 0.001 ---initial-mass 0.723 --metallicity 0.001 ---initial-mass 0.734 --metallicity 0.001 ---initial-mass 0.745 --metallicity 0.001 ---initial-mass 0.756 --metallicity 0.001 ---initial-mass 0.767 --metallicity 0.001 ---initial-mass 0.778 --metallicity 0.001 ---initial-mass 0.79 --metallicity 0.001 ---initial-mass 0.801 --metallicity 0.001 ---initial-mass 0.813 --metallicity 0.001 ---initial-mass 0.825 --metallicity 0.001 ---initial-mass 0.837 --metallicity 0.001 ---initial-mass 0.85 --metallicity 0.001 ---initial-mass 0.862 --metallicity 0.001 ---initial-mass 0.875 --metallicity 0.001 ---initial-mass 0.888 --metallicity 0.001 ---initial-mass 0.901 --metallicity 0.001 ---initial-mass 0.914 --metallicity 0.001 ---initial-mass 0.928 --metallicity 0.001 ---initial-mass 0.942 --metallicity 0.001 ---initial-mass 0.955 --metallicity 0.001 ---initial-mass 0.97 --metallicity 0.001 ---initial-mass 0.984 --metallicity 0.001 ---initial-mass 0.998 --metallicity 0.001 ---initial-mass 1.013 --metallicity 0.001 ---initial-mass 1.028 --metallicity 0.001 ---initial-mass 1.043 --metallicity 0.001 ---initial-mass 1.059 --metallicity 0.001 ---initial-mass 1.074 --metallicity 0.001 ---initial-mass 1.09 --metallicity 0.001 ---initial-mass 1.106 --metallicity 0.001 ---initial-mass 1.123 --metallicity 0.001 ---initial-mass 1.139 --metallicity 0.001 ---initial-mass 1.156 --metallicity 0.001 ---initial-mass 1.173 --metallicity 0.001 ---initial-mass 1.19 --metallicity 0.001 ---initial-mass 1.208 --metallicity 0.001 ---initial-mass 1.226 --metallicity 0.001 ---initial-mass 1.244 --metallicity 0.001 ---initial-mass 1.262 --metallicity 0.001 ---initial-mass 1.281 --metallicity 0.001 ---initial-mass 1.3 --metallicity 0.001 ---initial-mass 1.319 --metallicity 0.001 ---initial-mass 1.338 --metallicity 0.001 ---initial-mass 1.358 --metallicity 0.001 ---initial-mass 1.378 --metallicity 0.001 ---initial-mass 1.399 --metallicity 0.001 ---initial-mass 1.419 --metallicity 0.001 ---initial-mass 1.44 --metallicity 0.001 ---initial-mass 1.461 --metallicity 0.001 ---initial-mass 1.483 --metallicity 0.001 ---initial-mass 1.505 --metallicity 0.001 ---initial-mass 1.527 --metallicity 0.001 ---initial-mass 1.55 --metallicity 0.001 ---initial-mass 1.573 --metallicity 0.001 ---initial-mass 1.596 --metallicity 0.001 ---initial-mass 1.619 --metallicity 0.001 ---initial-mass 1.643 --metallicity 0.001 ---initial-mass 1.667 --metallicity 0.001 ---initial-mass 1.692 --metallicity 0.001 ---initial-mass 1.717 --metallicity 0.001 ---initial-mass 1.742 --metallicity 0.001 ---initial-mass 1.768 --metallicity 0.001 ---initial-mass 1.794 --metallicity 0.001 ---initial-mass 1.821 --metallicity 0.001 ---initial-mass 1.848 --metallicity 0.001 ---initial-mass 1.875 --metallicity 0.001 ---initial-mass 1.903 --metallicity 0.001 ---initial-mass 1.931 --metallicity 0.001 ---initial-mass 1.959 --metallicity 0.001 ---initial-mass 1.988 --metallicity 0.001 ---initial-mass 2.017 --metallicity 0.001 ---initial-mass 2.047 --metallicity 0.001 ---initial-mass 2.077 --metallicity 0.001 ---initial-mass 2.108 --metallicity 0.001 ---initial-mass 2.139 --metallicity 0.001 ---initial-mass 2.171 --metallicity 0.001 ---initial-mass 2.203 --metallicity 0.001 ---initial-mass 2.235 --metallicity 0.001 ---initial-mass 2.268 --metallicity 0.001 ---initial-mass 2.302 --metallicity 0.001 ---initial-mass 2.336 --metallicity 0.001 ---initial-mass 2.37 --metallicity 0.001 ---initial-mass 2.405 --metallicity 0.001 ---initial-mass 2.441 --metallicity 0.001 ---initial-mass 2.477 --metallicity 0.001 ---initial-mass 2.514 --metallicity 0.001 ---initial-mass 2.551 --metallicity 0.001 ---initial-mass 2.588 --metallicity 0.001 ---initial-mass 2.626 --metallicity 0.001 ---initial-mass 2.665 --metallicity 0.001 ---initial-mass 2.705 --metallicity 0.001 ---initial-mass 2.745 --metallicity 0.001 ---initial-mass 2.785 --metallicity 0.001 ---initial-mass 2.826 --metallicity 0.001 ---initial-mass 2.868 --metallicity 0.001 ---initial-mass 2.91 --metallicity 0.001 ---initial-mass 2.953 --metallicity 0.001 ---initial-mass 2.997 --metallicity 0.001 ---initial-mass 3.041 --metallicity 0.001 ---initial-mass 3.086 --metallicity 0.001 ---initial-mass 3.132 --metallicity 0.001 ---initial-mass 3.178 --metallicity 0.001 ---initial-mass 3.225 --metallicity 0.001 ---initial-mass 3.272 --metallicity 0.001 ---initial-mass 3.321 --metallicity 0.001 ---initial-mass 3.37 --metallicity 0.001 ---initial-mass 3.419 --metallicity 0.001 ---initial-mass 3.47 --metallicity 0.001 ---initial-mass 3.521 --metallicity 0.001 ---initial-mass 3.573 --metallicity 0.001 ---initial-mass 3.626 --metallicity 0.001 ---initial-mass 3.679 --metallicity 0.001 ---initial-mass 3.734 --metallicity 0.001 ---initial-mass 3.789 --metallicity 0.001 ---initial-mass 3.845 --metallicity 0.001 ---initial-mass 3.901 --metallicity 0.001 ---initial-mass 3.959 --metallicity 0.001 ---initial-mass 4.018 --metallicity 0.001 ---initial-mass 4.077 --metallicity 0.001 ---initial-mass 4.137 --metallicity 0.001 ---initial-mass 4.198 --metallicity 0.001 ---initial-mass 4.26 --metallicity 0.001 ---initial-mass 4.323 --metallicity 0.001 ---initial-mass 4.387 --metallicity 0.001 ---initial-mass 4.452 --metallicity 0.001 ---initial-mass 4.517 --metallicity 0.001 ---initial-mass 4.584 --metallicity 0.001 ---initial-mass 4.652 --metallicity 0.001 ---initial-mass 4.72 --metallicity 0.001 ---initial-mass 4.79 --metallicity 0.001 ---initial-mass 4.861 --metallicity 0.001 ---initial-mass 4.932 --metallicity 0.001 ---initial-mass 5.005 --metallicity 0.001 ---initial-mass 5.079 --metallicity 0.001 ---initial-mass 5.154 --metallicity 0.001 ---initial-mass 5.23 --metallicity 0.001 ---initial-mass 5.308 --metallicity 0.001 ---initial-mass 5.386 --metallicity 0.001 ---initial-mass 5.465 --metallicity 0.001 ---initial-mass 5.546 --metallicity 0.001 ---initial-mass 5.628 --metallicity 0.001 ---initial-mass 5.711 --metallicity 0.001 ---initial-mass 5.795 --metallicity 0.001 ---initial-mass 5.881 --metallicity 0.001 ---initial-mass 5.968 --metallicity 0.001 ---initial-mass 6.056 --metallicity 0.001 ---initial-mass 6.145 --metallicity 0.001 ---initial-mass 6.236 --metallicity 0.001 ---initial-mass 6.328 --metallicity 0.001 ---initial-mass 6.421 --metallicity 0.001 ---initial-mass 6.516 --metallicity 0.001 ---initial-mass 6.612 --metallicity 0.001 ---initial-mass 6.71 --metallicity 0.001 ---initial-mass 6.809 --metallicity 0.001 ---initial-mass 6.91 --metallicity 0.001 ---initial-mass 7.012 --metallicity 0.001 ---initial-mass 7.115 --metallicity 0.001 ---initial-mass 7.22 --metallicity 0.001 ---initial-mass 7.327 --metallicity 0.001 ---initial-mass 7.435 --metallicity 0.001 ---initial-mass 7.545 --metallicity 0.001 ---initial-mass 7.656 --metallicity 0.001 ---initial-mass 7.769 --metallicity 0.001 ---initial-mass 7.884 --metallicity 0.001 ---initial-mass 8.0 --metallicity 0.001 ---initial-mass 8.118 --metallicity 0.001 ---initial-mass 8.238 --metallicity 0.001 ---initial-mass 8.36 --metallicity 0.001 ---initial-mass 8.483 --metallicity 0.001 ---initial-mass 8.609 --metallicity 0.001 ---initial-mass 8.736 --metallicity 0.001 ---initial-mass 8.865 --metallicity 0.001 ---initial-mass 8.996 --metallicity 0.001 ---initial-mass 9.128 --metallicity 0.001 ---initial-mass 9.263 --metallicity 0.001 ---initial-mass 9.4 --metallicity 0.001 ---initial-mass 9.539 --metallicity 0.001 ---initial-mass 9.679 --metallicity 0.001 ---initial-mass 9.822 --metallicity 0.001 ---initial-mass 9.967 --metallicity 0.001 ---initial-mass 10.115 --metallicity 0.001 ---initial-mass 10.264 --metallicity 0.001 ---initial-mass 10.415 --metallicity 0.001 ---initial-mass 10.569 --metallicity 0.001 ---initial-mass 10.725 --metallicity 0.001 ---initial-mass 10.884 --metallicity 0.001 ---initial-mass 11.044 --metallicity 0.001 ---initial-mass 11.207 --metallicity 0.001 ---initial-mass 11.373 --metallicity 0.001 ---initial-mass 11.541 --metallicity 0.001 ---initial-mass 11.711 --metallicity 0.001 ---initial-mass 11.884 --metallicity 0.001 ---initial-mass 12.059 --metallicity 0.001 ---initial-mass 12.237 --metallicity 0.001 ---initial-mass 12.418 --metallicity 0.001 ---initial-mass 12.601 --metallicity 0.001 ---initial-mass 12.788 --metallicity 0.001 ---initial-mass 12.976 --metallicity 0.001 ---initial-mass 13.168 --metallicity 0.001 ---initial-mass 13.362 --metallicity 0.001 ---initial-mass 13.56 --metallicity 0.001 ---initial-mass 13.76 --metallicity 0.001 ---initial-mass 13.963 --metallicity 0.001 ---initial-mass 14.169 --metallicity 0.001 ---initial-mass 14.378 --metallicity 0.001 ---initial-mass 14.591 --metallicity 0.001 ---initial-mass 14.806 --metallicity 0.001 ---initial-mass 15.024 --metallicity 0.001 ---initial-mass 15.246 --metallicity 0.001 ---initial-mass 15.471 --metallicity 0.001 ---initial-mass 15.7 --metallicity 0.001 ---initial-mass 15.932 --metallicity 0.001 ---initial-mass 16.167 --metallicity 0.001 ---initial-mass 16.406 --metallicity 0.001 ---initial-mass 16.648 --metallicity 0.001 ---initial-mass 16.893 --metallicity 0.001 ---initial-mass 17.143 --metallicity 0.001 ---initial-mass 17.396 --metallicity 0.001 ---initial-mass 17.653 --metallicity 0.001 ---initial-mass 17.913 --metallicity 0.001 ---initial-mass 18.178 --metallicity 0.001 ---initial-mass 18.446 --metallicity 0.001 ---initial-mass 18.719 --metallicity 0.001 ---initial-mass 18.995 --metallicity 0.001 ---initial-mass 19.275 --metallicity 0.001 ---initial-mass 19.56 --metallicity 0.001 ---initial-mass 19.849 --metallicity 0.001 ---initial-mass 20.142 --metallicity 0.001 ---initial-mass 20.439 --metallicity 0.001 ---initial-mass 20.741 --metallicity 0.001 ---initial-mass 21.047 --metallicity 0.001 ---initial-mass 21.358 --metallicity 0.001 ---initial-mass 21.673 --metallicity 0.001 ---initial-mass 21.993 --metallicity 0.001 ---initial-mass 22.318 --metallicity 0.001 ---initial-mass 22.647 --metallicity 0.001 ---initial-mass 22.982 --metallicity 0.001 ---initial-mass 23.321 --metallicity 0.001 ---initial-mass 23.665 --metallicity 0.001 ---initial-mass 24.015 --metallicity 0.001 ---initial-mass 24.369 --metallicity 0.001 ---initial-mass 24.729 --metallicity 0.001 ---initial-mass 25.094 --metallicity 0.001 ---initial-mass 25.465 --metallicity 0.001 ---initial-mass 25.841 --metallicity 0.001 ---initial-mass 26.222 --metallicity 0.001 ---initial-mass 26.609 --metallicity 0.001 ---initial-mass 27.002 --metallicity 0.001 ---initial-mass 27.401 --metallicity 0.001 ---initial-mass 27.805 --metallicity 0.001 ---initial-mass 28.216 --metallicity 0.001 ---initial-mass 28.632 --metallicity 0.001 ---initial-mass 29.055 --metallicity 0.001 ---initial-mass 29.484 --metallicity 0.001 ---initial-mass 29.919 --metallicity 0.001 ---initial-mass 30.361 --metallicity 0.001 ---initial-mass 30.809 --metallicity 0.001 ---initial-mass 31.264 --metallicity 0.001 ---initial-mass 31.726 --metallicity 0.001 ---initial-mass 32.194 --metallicity 0.001 ---initial-mass 32.669 --metallicity 0.001 ---initial-mass 33.152 --metallicity 0.001 ---initial-mass 33.641 --metallicity 0.001 ---initial-mass 34.138 --metallicity 0.001 ---initial-mass 34.642 --metallicity 0.001 ---initial-mass 35.153 --metallicity 0.001 ---initial-mass 35.672 --metallicity 0.001 ---initial-mass 36.199 --metallicity 0.001 ---initial-mass 36.733 --metallicity 0.001 ---initial-mass 37.276 --metallicity 0.001 ---initial-mass 37.826 --metallicity 0.001 ---initial-mass 38.384 --metallicity 0.001 ---initial-mass 38.951 --metallicity 0.001 ---initial-mass 39.526 --metallicity 0.001 ---initial-mass 40.11 --metallicity 0.001 ---initial-mass 40.702 --metallicity 0.001 ---initial-mass 41.303 --metallicity 0.001 ---initial-mass 41.913 --metallicity 0.001 ---initial-mass 42.531 --metallicity 0.001 ---initial-mass 43.159 --metallicity 0.001 ---initial-mass 43.796 --metallicity 0.001 ---initial-mass 44.443 --metallicity 0.001 ---initial-mass 45.099 --metallicity 0.001 ---initial-mass 45.765 --metallicity 0.001 ---initial-mass 46.441 --metallicity 0.001 ---initial-mass 47.126 --metallicity 0.001 ---initial-mass 47.822 --metallicity 0.001 ---initial-mass 48.528 --metallicity 0.001 ---initial-mass 49.245 --metallicity 0.001 ---initial-mass 49.972 --metallicity 0.001 ---initial-mass 50.709 --metallicity 0.001 ---initial-mass 51.458 --metallicity 0.001 ---initial-mass 52.218 --metallicity 0.001 ---initial-mass 52.989 --metallicity 0.001 ---initial-mass 53.771 --metallicity 0.001 ---initial-mass 54.565 --metallicity 0.001 ---initial-mass 55.37 --metallicity 0.001 ---initial-mass 56.188 --metallicity 0.001 ---initial-mass 57.017 --metallicity 0.001 ---initial-mass 57.859 --metallicity 0.001 ---initial-mass 58.713 --metallicity 0.001 ---initial-mass 59.58 --metallicity 0.001 ---initial-mass 60.46 --metallicity 0.001 ---initial-mass 61.352 --metallicity 0.001 ---initial-mass 62.258 --metallicity 0.001 ---initial-mass 63.177 --metallicity 0.001 ---initial-mass 64.11 --metallicity 0.001 ---initial-mass 65.057 --metallicity 0.001 ---initial-mass 66.017 --metallicity 0.001 ---initial-mass 66.992 --metallicity 0.001 ---initial-mass 67.981 --metallicity 0.001 ---initial-mass 68.984 --metallicity 0.001 ---initial-mass 70.003 --metallicity 0.001 ---initial-mass 71.036 --metallicity 0.001 ---initial-mass 72.085 --metallicity 0.001 ---initial-mass 73.149 --metallicity 0.001 ---initial-mass 74.229 --metallicity 0.001 ---initial-mass 75.325 --metallicity 0.001 ---initial-mass 76.437 --metallicity 0.001 ---initial-mass 77.566 --metallicity 0.001 ---initial-mass 78.711 --metallicity 0.001 ---initial-mass 79.873 --metallicity 0.001 ---initial-mass 81.052 --metallicity 0.001 ---initial-mass 82.249 --metallicity 0.001 ---initial-mass 83.463 --metallicity 0.001 ---initial-mass 84.695 --metallicity 0.001 ---initial-mass 85.946 --metallicity 0.001 ---initial-mass 87.215 --metallicity 0.001 ---initial-mass 88.502 --metallicity 0.001 ---initial-mass 89.809 --metallicity 0.001 ---initial-mass 91.135 --metallicity 0.001 ---initial-mass 92.48 --metallicity 0.001 ---initial-mass 93.846 --metallicity 0.001 ---initial-mass 95.231 --metallicity 0.001 ---initial-mass 96.637 --metallicity 0.001 ---initial-mass 98.064 --metallicity 0.001 ---initial-mass 99.512 --metallicity 0.001 ---initial-mass 100.981 --metallicity 0.001 ---initial-mass 102.472 --metallicity 0.001 ---initial-mass 103.984 --metallicity 0.001 ---initial-mass 105.52 --metallicity 0.001 ---initial-mass 107.078 --metallicity 0.001 ---initial-mass 108.658 --metallicity 0.001 ---initial-mass 110.263 --metallicity 0.001 ---initial-mass 111.89 --metallicity 0.001 ---initial-mass 113.542 --metallicity 0.001 ---initial-mass 115.219 --metallicity 0.001 ---initial-mass 116.92 --metallicity 0.001 ---initial-mass 118.646 --metallicity 0.001 ---initial-mass 120.398 --metallicity 0.001 ---initial-mass 122.175 --metallicity 0.001 ---initial-mass 123.979 --metallicity 0.001 ---initial-mass 125.809 --metallicity 0.001 ---initial-mass 127.667 --metallicity 0.001 ---initial-mass 129.551 --metallicity 0.001 ---initial-mass 131.464 --metallicity 0.001 ---initial-mass 133.405 --metallicity 0.001 ---initial-mass 135.375 --metallicity 0.001 ---initial-mass 137.373 --metallicity 0.001 ---initial-mass 139.401 --metallicity 0.001 ---initial-mass 141.459 --metallicity 0.001 ---initial-mass 143.548 --metallicity 0.001 ---initial-mass 145.667 --metallicity 0.001 ---initial-mass 147.818 --metallicity 0.001 ---initial-mass 150.0 --metallicity 0.001 ---initial-mass 0.1 --metallicity 0.01 ---initial-mass 0.101 --metallicity 0.01 ---initial-mass 0.103 --metallicity 0.01 ---initial-mass 0.104 --metallicity 0.01 ---initial-mass 0.106 --metallicity 0.01 ---initial-mass 0.108 --metallicity 0.01 ---initial-mass 0.109 --metallicity 0.01 ---initial-mass 0.111 --metallicity 0.01 ---initial-mass 0.112 --metallicity 0.01 ---initial-mass 0.114 --metallicity 0.01 ---initial-mass 0.116 --metallicity 0.01 ---initial-mass 0.117 --metallicity 0.01 ---initial-mass 0.119 --metallicity 0.01 ---initial-mass 0.121 --metallicity 0.01 ---initial-mass 0.123 --metallicity 0.01 ---initial-mass 0.125 --metallicity 0.01 ---initial-mass 0.126 --metallicity 0.01 ---initial-mass 0.128 --metallicity 0.01 ---initial-mass 0.13 --metallicity 0.01 ---initial-mass 0.132 --metallicity 0.01 ---initial-mass 0.134 --metallicity 0.01 ---initial-mass 0.136 --metallicity 0.01 ---initial-mass 0.138 --metallicity 0.01 ---initial-mass 0.14 --metallicity 0.01 ---initial-mass 0.142 --metallicity 0.01 ---initial-mass 0.144 --metallicity 0.01 ---initial-mass 0.146 --metallicity 0.01 ---initial-mass 0.149 --metallicity 0.01 ---initial-mass 0.151 --metallicity 0.01 ---initial-mass 0.153 --metallicity 0.01 ---initial-mass 0.155 --metallicity 0.01 ---initial-mass 0.158 --metallicity 0.01 ---initial-mass 0.16 --metallicity 0.01 ---initial-mass 0.162 --metallicity 0.01 ---initial-mass 0.165 --metallicity 0.01 ---initial-mass 0.167 --metallicity 0.01 ---initial-mass 0.169 --metallicity 0.01 ---initial-mass 0.172 --metallicity 0.01 ---initial-mass 0.175 --metallicity 0.01 ---initial-mass 0.177 --metallicity 0.01 ---initial-mass 0.18 --metallicity 0.01 ---initial-mass 0.182 --metallicity 0.01 ---initial-mass 0.185 --metallicity 0.01 ---initial-mass 0.188 --metallicity 0.01 ---initial-mass 0.191 --metallicity 0.01 ---initial-mass 0.193 --metallicity 0.01 ---initial-mass 0.196 --metallicity 0.01 ---initial-mass 0.199 --metallicity 0.01 ---initial-mass 0.202 --metallicity 0.01 ---initial-mass 0.205 --metallicity 0.01 ---initial-mass 0.208 --metallicity 0.01 ---initial-mass 0.211 --metallicity 0.01 ---initial-mass 0.214 --metallicity 0.01 ---initial-mass 0.217 --metallicity 0.01 ---initial-mass 0.221 --metallicity 0.01 ---initial-mass 0.224 --metallicity 0.01 ---initial-mass 0.227 --metallicity 0.01 ---initial-mass 0.231 --metallicity 0.01 ---initial-mass 0.234 --metallicity 0.01 ---initial-mass 0.237 --metallicity 0.01 ---initial-mass 0.241 --metallicity 0.01 ---initial-mass 0.244 --metallicity 0.01 ---initial-mass 0.248 --metallicity 0.01 ---initial-mass 0.252 --metallicity 0.01 ---initial-mass 0.255 --metallicity 0.01 ---initial-mass 0.259 --metallicity 0.01 ---initial-mass 0.263 --metallicity 0.01 ---initial-mass 0.267 --metallicity 0.01 ---initial-mass 0.271 --metallicity 0.01 ---initial-mass 0.275 --metallicity 0.01 ---initial-mass 0.279 --metallicity 0.01 ---initial-mass 0.283 --metallicity 0.01 ---initial-mass 0.287 --metallicity 0.01 ---initial-mass 0.292 --metallicity 0.01 ---initial-mass 0.296 --metallicity 0.01 ---initial-mass 0.3 --metallicity 0.01 ---initial-mass 0.305 --metallicity 0.01 ---initial-mass 0.309 --metallicity 0.01 ---initial-mass 0.314 --metallicity 0.01 ---initial-mass 0.318 --metallicity 0.01 ---initial-mass 0.323 --metallicity 0.01 ---initial-mass 0.328 --metallicity 0.01 ---initial-mass 0.333 --metallicity 0.01 ---initial-mass 0.338 --metallicity 0.01 ---initial-mass 0.342 --metallicity 0.01 ---initial-mass 0.348 --metallicity 0.01 ---initial-mass 0.353 --metallicity 0.01 ---initial-mass 0.358 --metallicity 0.01 ---initial-mass 0.363 --metallicity 0.01 ---initial-mass 0.369 --metallicity 0.01 ---initial-mass 0.374 --metallicity 0.01 ---initial-mass 0.379 --metallicity 0.01 ---initial-mass 0.385 --metallicity 0.01 ---initial-mass 0.391 --metallicity 0.01 ---initial-mass 0.397 --metallicity 0.01 ---initial-mass 0.402 --metallicity 0.01 ---initial-mass 0.408 --metallicity 0.01 ---initial-mass 0.414 --metallicity 0.01 ---initial-mass 0.42 --metallicity 0.01 ---initial-mass 0.427 --metallicity 0.01 ---initial-mass 0.433 --metallicity 0.01 ---initial-mass 0.439 --metallicity 0.01 ---initial-mass 0.446 --metallicity 0.01 ---initial-mass 0.452 --metallicity 0.01 ---initial-mass 0.459 --metallicity 0.01 ---initial-mass 0.466 --metallicity 0.01 ---initial-mass 0.473 --metallicity 0.01 ---initial-mass 0.48 --metallicity 0.01 ---initial-mass 0.487 --metallicity 0.01 ---initial-mass 0.494 --metallicity 0.01 ---initial-mass 0.501 --metallicity 0.01 ---initial-mass 0.509 --metallicity 0.01 ---initial-mass 0.516 --metallicity 0.01 ---initial-mass 0.524 --metallicity 0.01 ---initial-mass 0.532 --metallicity 0.01 ---initial-mass 0.539 --metallicity 0.01 ---initial-mass 0.547 --metallicity 0.01 ---initial-mass 0.556 --metallicity 0.01 ---initial-mass 0.564 --metallicity 0.01 ---initial-mass 0.572 --metallicity 0.01 ---initial-mass 0.58 --metallicity 0.01 ---initial-mass 0.589 --metallicity 0.01 ---initial-mass 0.598 --metallicity 0.01 ---initial-mass 0.607 --metallicity 0.01 ---initial-mass 0.616 --metallicity 0.01 ---initial-mass 0.625 --metallicity 0.01 ---initial-mass 0.634 --metallicity 0.01 ---initial-mass 0.643 --metallicity 0.01 ---initial-mass 0.653 --metallicity 0.01 ---initial-mass 0.662 --metallicity 0.01 ---initial-mass 0.672 --metallicity 0.01 ---initial-mass 0.682 --metallicity 0.01 ---initial-mass 0.692 --metallicity 0.01 ---initial-mass 0.702 --metallicity 0.01 ---initial-mass 0.713 --metallicity 0.01 ---initial-mass 0.723 --metallicity 0.01 ---initial-mass 0.734 --metallicity 0.01 ---initial-mass 0.745 --metallicity 0.01 ---initial-mass 0.756 --metallicity 0.01 ---initial-mass 0.767 --metallicity 0.01 ---initial-mass 0.778 --metallicity 0.01 ---initial-mass 0.79 --metallicity 0.01 ---initial-mass 0.801 --metallicity 0.01 ---initial-mass 0.813 --metallicity 0.01 ---initial-mass 0.825 --metallicity 0.01 ---initial-mass 0.837 --metallicity 0.01 ---initial-mass 0.85 --metallicity 0.01 ---initial-mass 0.862 --metallicity 0.01 ---initial-mass 0.875 --metallicity 0.01 ---initial-mass 0.888 --metallicity 0.01 ---initial-mass 0.901 --metallicity 0.01 ---initial-mass 0.914 --metallicity 0.01 ---initial-mass 0.928 --metallicity 0.01 ---initial-mass 0.942 --metallicity 0.01 ---initial-mass 0.955 --metallicity 0.01 ---initial-mass 0.97 --metallicity 0.01 ---initial-mass 0.984 --metallicity 0.01 ---initial-mass 0.998 --metallicity 0.01 ---initial-mass 1.013 --metallicity 0.01 ---initial-mass 1.028 --metallicity 0.01 ---initial-mass 1.043 --metallicity 0.01 ---initial-mass 1.059 --metallicity 0.01 ---initial-mass 1.074 --metallicity 0.01 ---initial-mass 1.09 --metallicity 0.01 ---initial-mass 1.106 --metallicity 0.01 ---initial-mass 1.123 --metallicity 0.01 ---initial-mass 1.139 --metallicity 0.01 ---initial-mass 1.156 --metallicity 0.01 ---initial-mass 1.173 --metallicity 0.01 ---initial-mass 1.19 --metallicity 0.01 ---initial-mass 1.208 --metallicity 0.01 ---initial-mass 1.226 --metallicity 0.01 ---initial-mass 1.244 --metallicity 0.01 ---initial-mass 1.262 --metallicity 0.01 ---initial-mass 1.281 --metallicity 0.01 ---initial-mass 1.3 --metallicity 0.01 ---initial-mass 1.319 --metallicity 0.01 ---initial-mass 1.338 --metallicity 0.01 ---initial-mass 1.358 --metallicity 0.01 ---initial-mass 1.378 --metallicity 0.01 ---initial-mass 1.399 --metallicity 0.01 ---initial-mass 1.419 --metallicity 0.01 ---initial-mass 1.44 --metallicity 0.01 ---initial-mass 1.461 --metallicity 0.01 ---initial-mass 1.483 --metallicity 0.01 ---initial-mass 1.505 --metallicity 0.01 ---initial-mass 1.527 --metallicity 0.01 ---initial-mass 1.55 --metallicity 0.01 ---initial-mass 1.573 --metallicity 0.01 ---initial-mass 1.596 --metallicity 0.01 ---initial-mass 1.619 --metallicity 0.01 ---initial-mass 1.643 --metallicity 0.01 ---initial-mass 1.667 --metallicity 0.01 ---initial-mass 1.692 --metallicity 0.01 ---initial-mass 1.717 --metallicity 0.01 ---initial-mass 1.742 --metallicity 0.01 ---initial-mass 1.768 --metallicity 0.01 ---initial-mass 1.794 --metallicity 0.01 ---initial-mass 1.821 --metallicity 0.01 ---initial-mass 1.848 --metallicity 0.01 ---initial-mass 1.875 --metallicity 0.01 ---initial-mass 1.903 --metallicity 0.01 ---initial-mass 1.931 --metallicity 0.01 ---initial-mass 1.959 --metallicity 0.01 ---initial-mass 1.988 --metallicity 0.01 ---initial-mass 2.017 --metallicity 0.01 ---initial-mass 2.047 --metallicity 0.01 ---initial-mass 2.077 --metallicity 0.01 ---initial-mass 2.108 --metallicity 0.01 ---initial-mass 2.139 --metallicity 0.01 ---initial-mass 2.171 --metallicity 0.01 ---initial-mass 2.203 --metallicity 0.01 ---initial-mass 2.235 --metallicity 0.01 ---initial-mass 2.268 --metallicity 0.01 ---initial-mass 2.302 --metallicity 0.01 ---initial-mass 2.336 --metallicity 0.01 ---initial-mass 2.37 --metallicity 0.01 ---initial-mass 2.405 --metallicity 0.01 ---initial-mass 2.441 --metallicity 0.01 ---initial-mass 2.477 --metallicity 0.01 ---initial-mass 2.514 --metallicity 0.01 ---initial-mass 2.551 --metallicity 0.01 ---initial-mass 2.588 --metallicity 0.01 ---initial-mass 2.626 --metallicity 0.01 ---initial-mass 2.665 --metallicity 0.01 ---initial-mass 2.705 --metallicity 0.01 ---initial-mass 2.745 --metallicity 0.01 ---initial-mass 2.785 --metallicity 0.01 ---initial-mass 2.826 --metallicity 0.01 ---initial-mass 2.868 --metallicity 0.01 ---initial-mass 2.91 --metallicity 0.01 ---initial-mass 2.953 --metallicity 0.01 ---initial-mass 2.997 --metallicity 0.01 ---initial-mass 3.041 --metallicity 0.01 ---initial-mass 3.086 --metallicity 0.01 ---initial-mass 3.132 --metallicity 0.01 ---initial-mass 3.178 --metallicity 0.01 ---initial-mass 3.225 --metallicity 0.01 ---initial-mass 3.272 --metallicity 0.01 ---initial-mass 3.321 --metallicity 0.01 ---initial-mass 3.37 --metallicity 0.01 ---initial-mass 3.419 --metallicity 0.01 ---initial-mass 3.47 --metallicity 0.01 ---initial-mass 3.521 --metallicity 0.01 ---initial-mass 3.573 --metallicity 0.01 ---initial-mass 3.626 --metallicity 0.01 ---initial-mass 3.679 --metallicity 0.01 ---initial-mass 3.734 --metallicity 0.01 ---initial-mass 3.789 --metallicity 0.01 ---initial-mass 3.845 --metallicity 0.01 ---initial-mass 3.901 --metallicity 0.01 ---initial-mass 3.959 --metallicity 0.01 ---initial-mass 4.018 --metallicity 0.01 ---initial-mass 4.077 --metallicity 0.01 ---initial-mass 4.137 --metallicity 0.01 ---initial-mass 4.198 --metallicity 0.01 ---initial-mass 4.26 --metallicity 0.01 ---initial-mass 4.323 --metallicity 0.01 ---initial-mass 4.387 --metallicity 0.01 ---initial-mass 4.452 --metallicity 0.01 ---initial-mass 4.517 --metallicity 0.01 ---initial-mass 4.584 --metallicity 0.01 ---initial-mass 4.652 --metallicity 0.01 ---initial-mass 4.72 --metallicity 0.01 ---initial-mass 4.79 --metallicity 0.01 ---initial-mass 4.861 --metallicity 0.01 ---initial-mass 4.932 --metallicity 0.01 ---initial-mass 5.005 --metallicity 0.01 ---initial-mass 5.079 --metallicity 0.01 ---initial-mass 5.154 --metallicity 0.01 ---initial-mass 5.23 --metallicity 0.01 ---initial-mass 5.308 --metallicity 0.01 ---initial-mass 5.386 --metallicity 0.01 ---initial-mass 5.465 --metallicity 0.01 ---initial-mass 5.546 --metallicity 0.01 ---initial-mass 5.628 --metallicity 0.01 ---initial-mass 5.711 --metallicity 0.01 ---initial-mass 5.795 --metallicity 0.01 ---initial-mass 5.881 --metallicity 0.01 ---initial-mass 5.968 --metallicity 0.01 ---initial-mass 6.056 --metallicity 0.01 ---initial-mass 6.145 --metallicity 0.01 ---initial-mass 6.236 --metallicity 0.01 ---initial-mass 6.328 --metallicity 0.01 ---initial-mass 6.421 --metallicity 0.01 ---initial-mass 6.516 --metallicity 0.01 ---initial-mass 6.612 --metallicity 0.01 ---initial-mass 6.71 --metallicity 0.01 ---initial-mass 6.809 --metallicity 0.01 ---initial-mass 6.91 --metallicity 0.01 ---initial-mass 7.012 --metallicity 0.01 ---initial-mass 7.115 --metallicity 0.01 ---initial-mass 7.22 --metallicity 0.01 ---initial-mass 7.327 --metallicity 0.01 ---initial-mass 7.435 --metallicity 0.01 ---initial-mass 7.545 --metallicity 0.01 ---initial-mass 7.656 --metallicity 0.01 ---initial-mass 7.769 --metallicity 0.01 ---initial-mass 7.884 --metallicity 0.01 ---initial-mass 8.0 --metallicity 0.01 ---initial-mass 8.118 --metallicity 0.01 ---initial-mass 8.238 --metallicity 0.01 ---initial-mass 8.36 --metallicity 0.01 ---initial-mass 8.483 --metallicity 0.01 ---initial-mass 8.609 --metallicity 0.01 ---initial-mass 8.736 --metallicity 0.01 ---initial-mass 8.865 --metallicity 0.01 ---initial-mass 8.996 --metallicity 0.01 ---initial-mass 9.128 --metallicity 0.01 ---initial-mass 9.263 --metallicity 0.01 ---initial-mass 9.4 --metallicity 0.01 ---initial-mass 9.539 --metallicity 0.01 ---initial-mass 9.679 --metallicity 0.01 ---initial-mass 9.822 --metallicity 0.01 ---initial-mass 9.967 --metallicity 0.01 ---initial-mass 10.115 --metallicity 0.01 ---initial-mass 10.264 --metallicity 0.01 ---initial-mass 10.415 --metallicity 0.01 ---initial-mass 10.569 --metallicity 0.01 ---initial-mass 10.725 --metallicity 0.01 ---initial-mass 10.884 --metallicity 0.01 ---initial-mass 11.044 --metallicity 0.01 ---initial-mass 11.207 --metallicity 0.01 ---initial-mass 11.373 --metallicity 0.01 ---initial-mass 11.541 --metallicity 0.01 ---initial-mass 11.711 --metallicity 0.01 ---initial-mass 11.884 --metallicity 0.01 ---initial-mass 12.059 --metallicity 0.01 ---initial-mass 12.237 --metallicity 0.01 ---initial-mass 12.418 --metallicity 0.01 ---initial-mass 12.601 --metallicity 0.01 ---initial-mass 12.788 --metallicity 0.01 ---initial-mass 12.976 --metallicity 0.01 ---initial-mass 13.168 --metallicity 0.01 ---initial-mass 13.362 --metallicity 0.01 ---initial-mass 13.56 --metallicity 0.01 ---initial-mass 13.76 --metallicity 0.01 ---initial-mass 13.963 --metallicity 0.01 ---initial-mass 14.169 --metallicity 0.01 ---initial-mass 14.378 --metallicity 0.01 ---initial-mass 14.591 --metallicity 0.01 ---initial-mass 14.806 --metallicity 0.01 ---initial-mass 15.024 --metallicity 0.01 ---initial-mass 15.246 --metallicity 0.01 ---initial-mass 15.471 --metallicity 0.01 ---initial-mass 15.7 --metallicity 0.01 ---initial-mass 15.932 --metallicity 0.01 ---initial-mass 16.167 --metallicity 0.01 ---initial-mass 16.406 --metallicity 0.01 ---initial-mass 16.648 --metallicity 0.01 ---initial-mass 16.893 --metallicity 0.01 ---initial-mass 17.143 --metallicity 0.01 ---initial-mass 17.396 --metallicity 0.01 ---initial-mass 17.653 --metallicity 0.01 ---initial-mass 17.913 --metallicity 0.01 ---initial-mass 18.178 --metallicity 0.01 ---initial-mass 18.446 --metallicity 0.01 ---initial-mass 18.719 --metallicity 0.01 ---initial-mass 18.995 --metallicity 0.01 ---initial-mass 19.275 --metallicity 0.01 ---initial-mass 19.56 --metallicity 0.01 ---initial-mass 19.849 --metallicity 0.01 ---initial-mass 20.142 --metallicity 0.01 ---initial-mass 20.439 --metallicity 0.01 ---initial-mass 20.741 --metallicity 0.01 ---initial-mass 21.047 --metallicity 0.01 ---initial-mass 21.358 --metallicity 0.01 ---initial-mass 21.673 --metallicity 0.01 ---initial-mass 21.993 --metallicity 0.01 ---initial-mass 22.318 --metallicity 0.01 ---initial-mass 22.647 --metallicity 0.01 ---initial-mass 22.982 --metallicity 0.01 ---initial-mass 23.321 --metallicity 0.01 ---initial-mass 23.665 --metallicity 0.01 ---initial-mass 24.015 --metallicity 0.01 ---initial-mass 24.369 --metallicity 0.01 ---initial-mass 24.729 --metallicity 0.01 ---initial-mass 25.094 --metallicity 0.01 ---initial-mass 25.465 --metallicity 0.01 ---initial-mass 25.841 --metallicity 0.01 ---initial-mass 26.222 --metallicity 0.01 ---initial-mass 26.609 --metallicity 0.01 ---initial-mass 27.002 --metallicity 0.01 ---initial-mass 27.401 --metallicity 0.01 ---initial-mass 27.805 --metallicity 0.01 ---initial-mass 28.216 --metallicity 0.01 ---initial-mass 28.632 --metallicity 0.01 ---initial-mass 29.055 --metallicity 0.01 ---initial-mass 29.484 --metallicity 0.01 ---initial-mass 29.919 --metallicity 0.01 ---initial-mass 30.361 --metallicity 0.01 ---initial-mass 30.809 --metallicity 0.01 ---initial-mass 31.264 --metallicity 0.01 ---initial-mass 31.726 --metallicity 0.01 ---initial-mass 32.194 --metallicity 0.01 ---initial-mass 32.669 --metallicity 0.01 ---initial-mass 33.152 --metallicity 0.01 ---initial-mass 33.641 --metallicity 0.01 ---initial-mass 34.138 --metallicity 0.01 ---initial-mass 34.642 --metallicity 0.01 ---initial-mass 35.153 --metallicity 0.01 ---initial-mass 35.672 --metallicity 0.01 ---initial-mass 36.199 --metallicity 0.01 ---initial-mass 36.733 --metallicity 0.01 ---initial-mass 37.276 --metallicity 0.01 ---initial-mass 37.826 --metallicity 0.01 ---initial-mass 38.384 --metallicity 0.01 ---initial-mass 38.951 --metallicity 0.01 ---initial-mass 39.526 --metallicity 0.01 ---initial-mass 40.11 --metallicity 0.01 ---initial-mass 40.702 --metallicity 0.01 ---initial-mass 41.303 --metallicity 0.01 ---initial-mass 41.913 --metallicity 0.01 ---initial-mass 42.531 --metallicity 0.01 ---initial-mass 43.159 --metallicity 0.01 ---initial-mass 43.796 --metallicity 0.01 ---initial-mass 44.443 --metallicity 0.01 ---initial-mass 45.099 --metallicity 0.01 ---initial-mass 45.765 --metallicity 0.01 ---initial-mass 46.441 --metallicity 0.01 ---initial-mass 47.126 --metallicity 0.01 ---initial-mass 47.822 --metallicity 0.01 ---initial-mass 48.528 --metallicity 0.01 ---initial-mass 49.245 --metallicity 0.01 ---initial-mass 49.972 --metallicity 0.01 ---initial-mass 50.709 --metallicity 0.01 ---initial-mass 51.458 --metallicity 0.01 ---initial-mass 52.218 --metallicity 0.01 ---initial-mass 52.989 --metallicity 0.01 ---initial-mass 53.771 --metallicity 0.01 ---initial-mass 54.565 --metallicity 0.01 ---initial-mass 55.37 --metallicity 0.01 ---initial-mass 56.188 --metallicity 0.01 ---initial-mass 57.017 --metallicity 0.01 ---initial-mass 57.859 --metallicity 0.01 ---initial-mass 58.713 --metallicity 0.01 ---initial-mass 59.58 --metallicity 0.01 ---initial-mass 60.46 --metallicity 0.01 ---initial-mass 61.352 --metallicity 0.01 ---initial-mass 62.258 --metallicity 0.01 ---initial-mass 63.177 --metallicity 0.01 ---initial-mass 64.11 --metallicity 0.01 ---initial-mass 65.057 --metallicity 0.01 ---initial-mass 66.017 --metallicity 0.01 ---initial-mass 66.992 --metallicity 0.01 ---initial-mass 67.981 --metallicity 0.01 ---initial-mass 68.984 --metallicity 0.01 ---initial-mass 70.003 --metallicity 0.01 ---initial-mass 71.036 --metallicity 0.01 ---initial-mass 72.085 --metallicity 0.01 ---initial-mass 73.149 --metallicity 0.01 ---initial-mass 74.229 --metallicity 0.01 ---initial-mass 75.325 --metallicity 0.01 ---initial-mass 76.437 --metallicity 0.01 ---initial-mass 77.566 --metallicity 0.01 ---initial-mass 78.711 --metallicity 0.01 ---initial-mass 79.873 --metallicity 0.01 ---initial-mass 81.052 --metallicity 0.01 ---initial-mass 82.249 --metallicity 0.01 ---initial-mass 83.463 --metallicity 0.01 ---initial-mass 84.695 --metallicity 0.01 ---initial-mass 85.946 --metallicity 0.01 ---initial-mass 87.215 --metallicity 0.01 ---initial-mass 88.502 --metallicity 0.01 ---initial-mass 89.809 --metallicity 0.01 ---initial-mass 91.135 --metallicity 0.01 ---initial-mass 92.48 --metallicity 0.01 ---initial-mass 93.846 --metallicity 0.01 ---initial-mass 95.231 --metallicity 0.01 ---initial-mass 96.637 --metallicity 0.01 ---initial-mass 98.064 --metallicity 0.01 ---initial-mass 99.512 --metallicity 0.01 ---initial-mass 100.981 --metallicity 0.01 ---initial-mass 102.472 --metallicity 0.01 ---initial-mass 103.984 --metallicity 0.01 ---initial-mass 105.52 --metallicity 0.01 ---initial-mass 107.078 --metallicity 0.01 ---initial-mass 108.658 --metallicity 0.01 ---initial-mass 110.263 --metallicity 0.01 ---initial-mass 111.89 --metallicity 0.01 ---initial-mass 113.542 --metallicity 0.01 ---initial-mass 115.219 --metallicity 0.01 ---initial-mass 116.92 --metallicity 0.01 ---initial-mass 118.646 --metallicity 0.01 ---initial-mass 120.398 --metallicity 0.01 ---initial-mass 122.175 --metallicity 0.01 ---initial-mass 123.979 --metallicity 0.01 ---initial-mass 125.809 --metallicity 0.01 ---initial-mass 127.667 --metallicity 0.01 ---initial-mass 129.551 --metallicity 0.01 ---initial-mass 131.464 --metallicity 0.01 ---initial-mass 133.405 --metallicity 0.01 ---initial-mass 135.375 --metallicity 0.01 ---initial-mass 137.373 --metallicity 0.01 ---initial-mass 139.401 --metallicity 0.01 ---initial-mass 141.459 --metallicity 0.01 ---initial-mass 143.548 --metallicity 0.01 ---initial-mass 145.667 --metallicity 0.01 ---initial-mass 147.818 --metallicity 0.01 ---initial-mass 150.0 --metallicity 0.01 ---initial-mass 0.1 --metallicity 0.01416 ---initial-mass 0.101 --metallicity 0.01416 ---initial-mass 0.103 --metallicity 0.01416 ---initial-mass 0.104 --metallicity 0.01416 ---initial-mass 0.106 --metallicity 0.01416 ---initial-mass 0.108 --metallicity 0.01416 ---initial-mass 0.109 --metallicity 0.01416 ---initial-mass 0.111 --metallicity 0.01416 ---initial-mass 0.112 --metallicity 0.01416 ---initial-mass 0.114 --metallicity 0.01416 ---initial-mass 0.116 --metallicity 0.01416 ---initial-mass 0.117 --metallicity 0.01416 ---initial-mass 0.119 --metallicity 0.01416 ---initial-mass 0.121 --metallicity 0.01416 ---initial-mass 0.123 --metallicity 0.01416 ---initial-mass 0.125 --metallicity 0.01416 ---initial-mass 0.126 --metallicity 0.01416 ---initial-mass 0.128 --metallicity 0.01416 ---initial-mass 0.13 --metallicity 0.01416 ---initial-mass 0.132 --metallicity 0.01416 ---initial-mass 0.134 --metallicity 0.01416 ---initial-mass 0.136 --metallicity 0.01416 ---initial-mass 0.138 --metallicity 0.01416 ---initial-mass 0.14 --metallicity 0.01416 ---initial-mass 0.142 --metallicity 0.01416 ---initial-mass 0.144 --metallicity 0.01416 ---initial-mass 0.146 --metallicity 0.01416 ---initial-mass 0.149 --metallicity 0.01416 ---initial-mass 0.151 --metallicity 0.01416 ---initial-mass 0.153 --metallicity 0.01416 ---initial-mass 0.155 --metallicity 0.01416 ---initial-mass 0.158 --metallicity 0.01416 ---initial-mass 0.16 --metallicity 0.01416 ---initial-mass 0.162 --metallicity 0.01416 ---initial-mass 0.165 --metallicity 0.01416 ---initial-mass 0.167 --metallicity 0.01416 ---initial-mass 0.169 --metallicity 0.01416 ---initial-mass 0.172 --metallicity 0.01416 ---initial-mass 0.175 --metallicity 0.01416 ---initial-mass 0.177 --metallicity 0.01416 ---initial-mass 0.18 --metallicity 0.01416 ---initial-mass 0.182 --metallicity 0.01416 ---initial-mass 0.185 --metallicity 0.01416 ---initial-mass 0.188 --metallicity 0.01416 ---initial-mass 0.191 --metallicity 0.01416 ---initial-mass 0.193 --metallicity 0.01416 ---initial-mass 0.196 --metallicity 0.01416 ---initial-mass 0.199 --metallicity 0.01416 ---initial-mass 0.202 --metallicity 0.01416 ---initial-mass 0.205 --metallicity 0.01416 ---initial-mass 0.208 --metallicity 0.01416 ---initial-mass 0.211 --metallicity 0.01416 ---initial-mass 0.214 --metallicity 0.01416 ---initial-mass 0.217 --metallicity 0.01416 ---initial-mass 0.221 --metallicity 0.01416 ---initial-mass 0.224 --metallicity 0.01416 ---initial-mass 0.227 --metallicity 0.01416 ---initial-mass 0.231 --metallicity 0.01416 ---initial-mass 0.234 --metallicity 0.01416 ---initial-mass 0.237 --metallicity 0.01416 ---initial-mass 0.241 --metallicity 0.01416 ---initial-mass 0.244 --metallicity 0.01416 ---initial-mass 0.248 --metallicity 0.01416 ---initial-mass 0.252 --metallicity 0.01416 ---initial-mass 0.255 --metallicity 0.01416 ---initial-mass 0.259 --metallicity 0.01416 ---initial-mass 0.263 --metallicity 0.01416 ---initial-mass 0.267 --metallicity 0.01416 ---initial-mass 0.271 --metallicity 0.01416 ---initial-mass 0.275 --metallicity 0.01416 ---initial-mass 0.279 --metallicity 0.01416 ---initial-mass 0.283 --metallicity 0.01416 ---initial-mass 0.287 --metallicity 0.01416 ---initial-mass 0.292 --metallicity 0.01416 ---initial-mass 0.296 --metallicity 0.01416 ---initial-mass 0.3 --metallicity 0.01416 ---initial-mass 0.305 --metallicity 0.01416 ---initial-mass 0.309 --metallicity 0.01416 ---initial-mass 0.314 --metallicity 0.01416 ---initial-mass 0.318 --metallicity 0.01416 ---initial-mass 0.323 --metallicity 0.01416 ---initial-mass 0.328 --metallicity 0.01416 ---initial-mass 0.333 --metallicity 0.01416 ---initial-mass 0.338 --metallicity 0.01416 ---initial-mass 0.342 --metallicity 0.01416 ---initial-mass 0.348 --metallicity 0.01416 ---initial-mass 0.353 --metallicity 0.01416 ---initial-mass 0.358 --metallicity 0.01416 ---initial-mass 0.363 --metallicity 0.01416 ---initial-mass 0.369 --metallicity 0.01416 ---initial-mass 0.374 --metallicity 0.01416 ---initial-mass 0.379 --metallicity 0.01416 ---initial-mass 0.385 --metallicity 0.01416 ---initial-mass 0.391 --metallicity 0.01416 ---initial-mass 0.397 --metallicity 0.01416 ---initial-mass 0.402 --metallicity 0.01416 ---initial-mass 0.408 --metallicity 0.01416 ---initial-mass 0.414 --metallicity 0.01416 ---initial-mass 0.42 --metallicity 0.01416 ---initial-mass 0.427 --metallicity 0.01416 ---initial-mass 0.433 --metallicity 0.01416 ---initial-mass 0.439 --metallicity 0.01416 ---initial-mass 0.446 --metallicity 0.01416 ---initial-mass 0.452 --metallicity 0.01416 ---initial-mass 0.459 --metallicity 0.01416 ---initial-mass 0.466 --metallicity 0.01416 ---initial-mass 0.473 --metallicity 0.01416 ---initial-mass 0.48 --metallicity 0.01416 ---initial-mass 0.487 --metallicity 0.01416 ---initial-mass 0.494 --metallicity 0.01416 ---initial-mass 0.501 --metallicity 0.01416 ---initial-mass 0.509 --metallicity 0.01416 ---initial-mass 0.516 --metallicity 0.01416 ---initial-mass 0.524 --metallicity 0.01416 ---initial-mass 0.532 --metallicity 0.01416 ---initial-mass 0.539 --metallicity 0.01416 ---initial-mass 0.547 --metallicity 0.01416 ---initial-mass 0.556 --metallicity 0.01416 ---initial-mass 0.564 --metallicity 0.01416 ---initial-mass 0.572 --metallicity 0.01416 ---initial-mass 0.58 --metallicity 0.01416 ---initial-mass 0.589 --metallicity 0.01416 ---initial-mass 0.598 --metallicity 0.01416 ---initial-mass 0.607 --metallicity 0.01416 ---initial-mass 0.616 --metallicity 0.01416 ---initial-mass 0.625 --metallicity 0.01416 ---initial-mass 0.634 --metallicity 0.01416 ---initial-mass 0.643 --metallicity 0.01416 ---initial-mass 0.653 --metallicity 0.01416 ---initial-mass 0.662 --metallicity 0.01416 ---initial-mass 0.672 --metallicity 0.01416 ---initial-mass 0.682 --metallicity 0.01416 ---initial-mass 0.692 --metallicity 0.01416 ---initial-mass 0.702 --metallicity 0.01416 ---initial-mass 0.713 --metallicity 0.01416 ---initial-mass 0.723 --metallicity 0.01416 ---initial-mass 0.734 --metallicity 0.01416 ---initial-mass 0.745 --metallicity 0.01416 ---initial-mass 0.756 --metallicity 0.01416 ---initial-mass 0.767 --metallicity 0.01416 ---initial-mass 0.778 --metallicity 0.01416 ---initial-mass 0.79 --metallicity 0.01416 ---initial-mass 0.801 --metallicity 0.01416 ---initial-mass 0.813 --metallicity 0.01416 ---initial-mass 0.825 --metallicity 0.01416 ---initial-mass 0.837 --metallicity 0.01416 ---initial-mass 0.85 --metallicity 0.01416 ---initial-mass 0.862 --metallicity 0.01416 ---initial-mass 0.875 --metallicity 0.01416 ---initial-mass 0.888 --metallicity 0.01416 ---initial-mass 0.901 --metallicity 0.01416 ---initial-mass 0.914 --metallicity 0.01416 ---initial-mass 0.928 --metallicity 0.01416 ---initial-mass 0.942 --metallicity 0.01416 ---initial-mass 0.955 --metallicity 0.01416 ---initial-mass 0.97 --metallicity 0.01416 ---initial-mass 0.984 --metallicity 0.01416 ---initial-mass 0.998 --metallicity 0.01416 ---initial-mass 1.013 --metallicity 0.01416 ---initial-mass 1.028 --metallicity 0.01416 ---initial-mass 1.043 --metallicity 0.01416 ---initial-mass 1.059 --metallicity 0.01416 ---initial-mass 1.074 --metallicity 0.01416 ---initial-mass 1.09 --metallicity 0.01416 ---initial-mass 1.106 --metallicity 0.01416 ---initial-mass 1.123 --metallicity 0.01416 ---initial-mass 1.139 --metallicity 0.01416 ---initial-mass 1.156 --metallicity 0.01416 ---initial-mass 1.173 --metallicity 0.01416 ---initial-mass 1.19 --metallicity 0.01416 ---initial-mass 1.208 --metallicity 0.01416 ---initial-mass 1.226 --metallicity 0.01416 ---initial-mass 1.244 --metallicity 0.01416 ---initial-mass 1.262 --metallicity 0.01416 ---initial-mass 1.281 --metallicity 0.01416 ---initial-mass 1.3 --metallicity 0.01416 ---initial-mass 1.319 --metallicity 0.01416 ---initial-mass 1.338 --metallicity 0.01416 ---initial-mass 1.358 --metallicity 0.01416 ---initial-mass 1.378 --metallicity 0.01416 ---initial-mass 1.399 --metallicity 0.01416 ---initial-mass 1.419 --metallicity 0.01416 ---initial-mass 1.44 --metallicity 0.01416 ---initial-mass 1.461 --metallicity 0.01416 ---initial-mass 1.483 --metallicity 0.01416 ---initial-mass 1.505 --metallicity 0.01416 ---initial-mass 1.527 --metallicity 0.01416 ---initial-mass 1.55 --metallicity 0.01416 ---initial-mass 1.573 --metallicity 0.01416 ---initial-mass 1.596 --metallicity 0.01416 ---initial-mass 1.619 --metallicity 0.01416 ---initial-mass 1.643 --metallicity 0.01416 ---initial-mass 1.667 --metallicity 0.01416 ---initial-mass 1.692 --metallicity 0.01416 ---initial-mass 1.717 --metallicity 0.01416 ---initial-mass 1.742 --metallicity 0.01416 ---initial-mass 1.768 --metallicity 0.01416 ---initial-mass 1.794 --metallicity 0.01416 ---initial-mass 1.821 --metallicity 0.01416 ---initial-mass 1.848 --metallicity 0.01416 ---initial-mass 1.875 --metallicity 0.01416 ---initial-mass 1.903 --metallicity 0.01416 ---initial-mass 1.931 --metallicity 0.01416 ---initial-mass 1.959 --metallicity 0.01416 ---initial-mass 1.988 --metallicity 0.01416 ---initial-mass 2.017 --metallicity 0.01416 ---initial-mass 2.047 --metallicity 0.01416 ---initial-mass 2.077 --metallicity 0.01416 ---initial-mass 2.108 --metallicity 0.01416 ---initial-mass 2.139 --metallicity 0.01416 ---initial-mass 2.171 --metallicity 0.01416 ---initial-mass 2.203 --metallicity 0.01416 ---initial-mass 2.235 --metallicity 0.01416 ---initial-mass 2.268 --metallicity 0.01416 ---initial-mass 2.302 --metallicity 0.01416 ---initial-mass 2.336 --metallicity 0.01416 ---initial-mass 2.37 --metallicity 0.01416 ---initial-mass 2.405 --metallicity 0.01416 ---initial-mass 2.441 --metallicity 0.01416 ---initial-mass 2.477 --metallicity 0.01416 ---initial-mass 2.514 --metallicity 0.01416 ---initial-mass 2.551 --metallicity 0.01416 ---initial-mass 2.588 --metallicity 0.01416 ---initial-mass 2.626 --metallicity 0.01416 ---initial-mass 2.665 --metallicity 0.01416 ---initial-mass 2.705 --metallicity 0.01416 ---initial-mass 2.745 --metallicity 0.01416 ---initial-mass 2.785 --metallicity 0.01416 ---initial-mass 2.826 --metallicity 0.01416 ---initial-mass 2.868 --metallicity 0.01416 ---initial-mass 2.91 --metallicity 0.01416 ---initial-mass 2.953 --metallicity 0.01416 ---initial-mass 2.997 --metallicity 0.01416 ---initial-mass 3.041 --metallicity 0.01416 ---initial-mass 3.086 --metallicity 0.01416 ---initial-mass 3.132 --metallicity 0.01416 ---initial-mass 3.178 --metallicity 0.01416 ---initial-mass 3.225 --metallicity 0.01416 ---initial-mass 3.272 --metallicity 0.01416 ---initial-mass 3.321 --metallicity 0.01416 ---initial-mass 3.37 --metallicity 0.01416 ---initial-mass 3.419 --metallicity 0.01416 ---initial-mass 3.47 --metallicity 0.01416 ---initial-mass 3.521 --metallicity 0.01416 ---initial-mass 3.573 --metallicity 0.01416 ---initial-mass 3.626 --metallicity 0.01416 ---initial-mass 3.679 --metallicity 0.01416 ---initial-mass 3.734 --metallicity 0.01416 ---initial-mass 3.789 --metallicity 0.01416 ---initial-mass 3.845 --metallicity 0.01416 ---initial-mass 3.901 --metallicity 0.01416 ---initial-mass 3.959 --metallicity 0.01416 ---initial-mass 4.018 --metallicity 0.01416 ---initial-mass 4.077 --metallicity 0.01416 ---initial-mass 4.137 --metallicity 0.01416 ---initial-mass 4.198 --metallicity 0.01416 ---initial-mass 4.26 --metallicity 0.01416 ---initial-mass 4.323 --metallicity 0.01416 ---initial-mass 4.387 --metallicity 0.01416 ---initial-mass 4.452 --metallicity 0.01416 ---initial-mass 4.517 --metallicity 0.01416 ---initial-mass 4.584 --metallicity 0.01416 ---initial-mass 4.652 --metallicity 0.01416 ---initial-mass 4.72 --metallicity 0.01416 ---initial-mass 4.79 --metallicity 0.01416 ---initial-mass 4.861 --metallicity 0.01416 ---initial-mass 4.932 --metallicity 0.01416 ---initial-mass 5.005 --metallicity 0.01416 ---initial-mass 5.079 --metallicity 0.01416 ---initial-mass 5.154 --metallicity 0.01416 ---initial-mass 5.23 --metallicity 0.01416 ---initial-mass 5.308 --metallicity 0.01416 ---initial-mass 5.386 --metallicity 0.01416 ---initial-mass 5.465 --metallicity 0.01416 ---initial-mass 5.546 --metallicity 0.01416 ---initial-mass 5.628 --metallicity 0.01416 ---initial-mass 5.711 --metallicity 0.01416 ---initial-mass 5.795 --metallicity 0.01416 ---initial-mass 5.881 --metallicity 0.01416 ---initial-mass 5.968 --metallicity 0.01416 ---initial-mass 6.056 --metallicity 0.01416 ---initial-mass 6.145 --metallicity 0.01416 ---initial-mass 6.236 --metallicity 0.01416 ---initial-mass 6.328 --metallicity 0.01416 ---initial-mass 6.421 --metallicity 0.01416 ---initial-mass 6.516 --metallicity 0.01416 ---initial-mass 6.612 --metallicity 0.01416 ---initial-mass 6.71 --metallicity 0.01416 ---initial-mass 6.809 --metallicity 0.01416 ---initial-mass 6.91 --metallicity 0.01416 ---initial-mass 7.012 --metallicity 0.01416 ---initial-mass 7.115 --metallicity 0.01416 ---initial-mass 7.22 --metallicity 0.01416 ---initial-mass 7.327 --metallicity 0.01416 ---initial-mass 7.435 --metallicity 0.01416 ---initial-mass 7.545 --metallicity 0.01416 ---initial-mass 7.656 --metallicity 0.01416 ---initial-mass 7.769 --metallicity 0.01416 ---initial-mass 7.884 --metallicity 0.01416 ---initial-mass 8.0 --metallicity 0.01416 ---initial-mass 8.118 --metallicity 0.01416 ---initial-mass 8.238 --metallicity 0.01416 ---initial-mass 8.36 --metallicity 0.01416 ---initial-mass 8.483 --metallicity 0.01416 ---initial-mass 8.609 --metallicity 0.01416 ---initial-mass 8.736 --metallicity 0.01416 ---initial-mass 8.865 --metallicity 0.01416 ---initial-mass 8.996 --metallicity 0.01416 ---initial-mass 9.128 --metallicity 0.01416 ---initial-mass 9.263 --metallicity 0.01416 ---initial-mass 9.4 --metallicity 0.01416 ---initial-mass 9.539 --metallicity 0.01416 ---initial-mass 9.679 --metallicity 0.01416 ---initial-mass 9.822 --metallicity 0.01416 ---initial-mass 9.967 --metallicity 0.01416 ---initial-mass 10.115 --metallicity 0.01416 ---initial-mass 10.264 --metallicity 0.01416 ---initial-mass 10.415 --metallicity 0.01416 ---initial-mass 10.569 --metallicity 0.01416 ---initial-mass 10.725 --metallicity 0.01416 ---initial-mass 10.884 --metallicity 0.01416 ---initial-mass 11.044 --metallicity 0.01416 ---initial-mass 11.207 --metallicity 0.01416 ---initial-mass 11.373 --metallicity 0.01416 ---initial-mass 11.541 --metallicity 0.01416 ---initial-mass 11.711 --metallicity 0.01416 ---initial-mass 11.884 --metallicity 0.01416 ---initial-mass 12.059 --metallicity 0.01416 ---initial-mass 12.237 --metallicity 0.01416 ---initial-mass 12.418 --metallicity 0.01416 ---initial-mass 12.601 --metallicity 0.01416 ---initial-mass 12.788 --metallicity 0.01416 ---initial-mass 12.976 --metallicity 0.01416 ---initial-mass 13.168 --metallicity 0.01416 ---initial-mass 13.362 --metallicity 0.01416 ---initial-mass 13.56 --metallicity 0.01416 ---initial-mass 13.76 --metallicity 0.01416 ---initial-mass 13.963 --metallicity 0.01416 ---initial-mass 14.169 --metallicity 0.01416 ---initial-mass 14.378 --metallicity 0.01416 ---initial-mass 14.591 --metallicity 0.01416 ---initial-mass 14.806 --metallicity 0.01416 ---initial-mass 15.024 --metallicity 0.01416 ---initial-mass 15.246 --metallicity 0.01416 ---initial-mass 15.471 --metallicity 0.01416 ---initial-mass 15.7 --metallicity 0.01416 ---initial-mass 15.932 --metallicity 0.01416 ---initial-mass 16.167 --metallicity 0.01416 ---initial-mass 16.406 --metallicity 0.01416 ---initial-mass 16.648 --metallicity 0.01416 ---initial-mass 16.893 --metallicity 0.01416 ---initial-mass 17.143 --metallicity 0.01416 ---initial-mass 17.396 --metallicity 0.01416 ---initial-mass 17.653 --metallicity 0.01416 ---initial-mass 17.913 --metallicity 0.01416 ---initial-mass 18.178 --metallicity 0.01416 ---initial-mass 18.446 --metallicity 0.01416 ---initial-mass 18.719 --metallicity 0.01416 ---initial-mass 18.995 --metallicity 0.01416 ---initial-mass 19.275 --metallicity 0.01416 ---initial-mass 19.56 --metallicity 0.01416 ---initial-mass 19.849 --metallicity 0.01416 ---initial-mass 20.142 --metallicity 0.01416 ---initial-mass 20.439 --metallicity 0.01416 ---initial-mass 20.741 --metallicity 0.01416 ---initial-mass 21.047 --metallicity 0.01416 ---initial-mass 21.358 --metallicity 0.01416 ---initial-mass 21.673 --metallicity 0.01416 ---initial-mass 21.993 --metallicity 0.01416 ---initial-mass 22.318 --metallicity 0.01416 ---initial-mass 22.647 --metallicity 0.01416 ---initial-mass 22.982 --metallicity 0.01416 ---initial-mass 23.321 --metallicity 0.01416 ---initial-mass 23.665 --metallicity 0.01416 ---initial-mass 24.015 --metallicity 0.01416 ---initial-mass 24.369 --metallicity 0.01416 ---initial-mass 24.729 --metallicity 0.01416 ---initial-mass 25.094 --metallicity 0.01416 ---initial-mass 25.465 --metallicity 0.01416 ---initial-mass 25.841 --metallicity 0.01416 ---initial-mass 26.222 --metallicity 0.01416 ---initial-mass 26.609 --metallicity 0.01416 ---initial-mass 27.002 --metallicity 0.01416 ---initial-mass 27.401 --metallicity 0.01416 ---initial-mass 27.805 --metallicity 0.01416 ---initial-mass 28.216 --metallicity 0.01416 ---initial-mass 28.632 --metallicity 0.01416 ---initial-mass 29.055 --metallicity 0.01416 ---initial-mass 29.484 --metallicity 0.01416 ---initial-mass 29.919 --metallicity 0.01416 ---initial-mass 30.361 --metallicity 0.01416 ---initial-mass 30.809 --metallicity 0.01416 ---initial-mass 31.264 --metallicity 0.01416 ---initial-mass 31.726 --metallicity 0.01416 ---initial-mass 32.194 --metallicity 0.01416 ---initial-mass 32.669 --metallicity 0.01416 ---initial-mass 33.152 --metallicity 0.01416 ---initial-mass 33.641 --metallicity 0.01416 ---initial-mass 34.138 --metallicity 0.01416 ---initial-mass 34.642 --metallicity 0.01416 ---initial-mass 35.153 --metallicity 0.01416 ---initial-mass 35.672 --metallicity 0.01416 ---initial-mass 36.199 --metallicity 0.01416 ---initial-mass 36.733 --metallicity 0.01416 ---initial-mass 37.276 --metallicity 0.01416 ---initial-mass 37.826 --metallicity 0.01416 ---initial-mass 38.384 --metallicity 0.01416 ---initial-mass 38.951 --metallicity 0.01416 ---initial-mass 39.526 --metallicity 0.01416 ---initial-mass 40.11 --metallicity 0.01416 ---initial-mass 40.702 --metallicity 0.01416 ---initial-mass 41.303 --metallicity 0.01416 ---initial-mass 41.913 --metallicity 0.01416 ---initial-mass 42.531 --metallicity 0.01416 ---initial-mass 43.159 --metallicity 0.01416 ---initial-mass 43.796 --metallicity 0.01416 ---initial-mass 44.443 --metallicity 0.01416 ---initial-mass 45.099 --metallicity 0.01416 ---initial-mass 45.765 --metallicity 0.01416 ---initial-mass 46.441 --metallicity 0.01416 ---initial-mass 47.126 --metallicity 0.01416 ---initial-mass 47.822 --metallicity 0.01416 ---initial-mass 48.528 --metallicity 0.01416 ---initial-mass 49.245 --metallicity 0.01416 ---initial-mass 49.972 --metallicity 0.01416 ---initial-mass 50.709 --metallicity 0.01416 ---initial-mass 51.458 --metallicity 0.01416 ---initial-mass 52.218 --metallicity 0.01416 ---initial-mass 52.989 --metallicity 0.01416 ---initial-mass 53.771 --metallicity 0.01416 ---initial-mass 54.565 --metallicity 0.01416 ---initial-mass 55.37 --metallicity 0.01416 ---initial-mass 56.188 --metallicity 0.01416 ---initial-mass 57.017 --metallicity 0.01416 ---initial-mass 57.859 --metallicity 0.01416 ---initial-mass 58.713 --metallicity 0.01416 ---initial-mass 59.58 --metallicity 0.01416 ---initial-mass 60.46 --metallicity 0.01416 ---initial-mass 61.352 --metallicity 0.01416 ---initial-mass 62.258 --metallicity 0.01416 ---initial-mass 63.177 --metallicity 0.01416 ---initial-mass 64.11 --metallicity 0.01416 ---initial-mass 65.057 --metallicity 0.01416 ---initial-mass 66.017 --metallicity 0.01416 ---initial-mass 66.992 --metallicity 0.01416 ---initial-mass 67.981 --metallicity 0.01416 ---initial-mass 68.984 --metallicity 0.01416 ---initial-mass 70.003 --metallicity 0.01416 ---initial-mass 71.036 --metallicity 0.01416 ---initial-mass 72.085 --metallicity 0.01416 ---initial-mass 73.149 --metallicity 0.01416 ---initial-mass 74.229 --metallicity 0.01416 ---initial-mass 75.325 --metallicity 0.01416 ---initial-mass 76.437 --metallicity 0.01416 ---initial-mass 77.566 --metallicity 0.01416 ---initial-mass 78.711 --metallicity 0.01416 ---initial-mass 79.873 --metallicity 0.01416 ---initial-mass 81.052 --metallicity 0.01416 ---initial-mass 82.249 --metallicity 0.01416 ---initial-mass 83.463 --metallicity 0.01416 ---initial-mass 84.695 --metallicity 0.01416 ---initial-mass 85.946 --metallicity 0.01416 ---initial-mass 87.215 --metallicity 0.01416 ---initial-mass 88.502 --metallicity 0.01416 ---initial-mass 89.809 --metallicity 0.01416 ---initial-mass 91.135 --metallicity 0.01416 ---initial-mass 92.48 --metallicity 0.01416 ---initial-mass 93.846 --metallicity 0.01416 ---initial-mass 95.231 --metallicity 0.01416 ---initial-mass 96.637 --metallicity 0.01416 ---initial-mass 98.064 --metallicity 0.01416 ---initial-mass 99.512 --metallicity 0.01416 ---initial-mass 100.981 --metallicity 0.01416 ---initial-mass 102.472 --metallicity 0.01416 ---initial-mass 103.984 --metallicity 0.01416 ---initial-mass 105.52 --metallicity 0.01416 ---initial-mass 107.078 --metallicity 0.01416 ---initial-mass 108.658 --metallicity 0.01416 ---initial-mass 110.263 --metallicity 0.01416 ---initial-mass 111.89 --metallicity 0.01416 ---initial-mass 113.542 --metallicity 0.01416 ---initial-mass 115.219 --metallicity 0.01416 ---initial-mass 116.92 --metallicity 0.01416 ---initial-mass 118.646 --metallicity 0.01416 ---initial-mass 120.398 --metallicity 0.01416 ---initial-mass 122.175 --metallicity 0.01416 ---initial-mass 123.979 --metallicity 0.01416 ---initial-mass 125.809 --metallicity 0.01416 ---initial-mass 127.667 --metallicity 0.01416 ---initial-mass 129.551 --metallicity 0.01416 ---initial-mass 131.464 --metallicity 0.01416 ---initial-mass 133.405 --metallicity 0.01416 ---initial-mass 135.375 --metallicity 0.01416 ---initial-mass 137.373 --metallicity 0.01416 ---initial-mass 139.401 --metallicity 0.01416 ---initial-mass 141.459 --metallicity 0.01416 ---initial-mass 143.548 --metallicity 0.01416 ---initial-mass 145.667 --metallicity 0.01416 ---initial-mass 147.818 --metallicity 0.01416 ---initial-mass 150.0 --metallicity 0.01416 +--initial-mass 0.1 --metallicity 0.0001 +--initial-mass 0.101 --metallicity 0.0001 +--initial-mass 0.103 --metallicity 0.0001 +--initial-mass 0.104 --metallicity 0.0001 +--initial-mass 0.106 --metallicity 0.0001 +--initial-mass 0.108 --metallicity 0.0001 +--initial-mass 0.109 --metallicity 0.0001 +--initial-mass 0.111 --metallicity 0.0001 +--initial-mass 0.112 --metallicity 0.0001 +--initial-mass 0.114 --metallicity 0.0001 +--initial-mass 0.116 --metallicity 0.0001 +--initial-mass 0.117 --metallicity 0.0001 +--initial-mass 0.119 --metallicity 0.0001 +--initial-mass 0.121 --metallicity 0.0001 +--initial-mass 0.123 --metallicity 0.0001 +--initial-mass 0.125 --metallicity 0.0001 +--initial-mass 0.126 --metallicity 0.0001 +--initial-mass 0.128 --metallicity 0.0001 +--initial-mass 0.13 --metallicity 0.0001 +--initial-mass 0.132 --metallicity 0.0001 +--initial-mass 0.134 --metallicity 0.0001 +--initial-mass 0.136 --metallicity 0.0001 +--initial-mass 0.138 --metallicity 0.0001 +--initial-mass 0.14 --metallicity 0.0001 +--initial-mass 0.142 --metallicity 0.0001 +--initial-mass 0.144 --metallicity 0.0001 +--initial-mass 0.146 --metallicity 0.0001 +--initial-mass 0.149 --metallicity 0.0001 +--initial-mass 0.151 --metallicity 0.0001 +--initial-mass 0.153 --metallicity 0.0001 +--initial-mass 0.155 --metallicity 0.0001 +--initial-mass 0.158 --metallicity 0.0001 +--initial-mass 0.16 --metallicity 0.0001 +--initial-mass 0.162 --metallicity 0.0001 +--initial-mass 0.165 --metallicity 0.0001 +--initial-mass 0.167 --metallicity 0.0001 +--initial-mass 0.169 --metallicity 0.0001 +--initial-mass 0.172 --metallicity 0.0001 +--initial-mass 0.175 --metallicity 0.0001 +--initial-mass 0.177 --metallicity 0.0001 +--initial-mass 0.18 --metallicity 0.0001 +--initial-mass 0.182 --metallicity 0.0001 +--initial-mass 0.185 --metallicity 0.0001 +--initial-mass 0.188 --metallicity 0.0001 +--initial-mass 0.191 --metallicity 0.0001 +--initial-mass 0.193 --metallicity 0.0001 +--initial-mass 0.196 --metallicity 0.0001 +--initial-mass 0.199 --metallicity 0.0001 +--initial-mass 0.202 --metallicity 0.0001 +--initial-mass 0.205 --metallicity 0.0001 +--initial-mass 0.208 --metallicity 0.0001 +--initial-mass 0.211 --metallicity 0.0001 +--initial-mass 0.214 --metallicity 0.0001 +--initial-mass 0.217 --metallicity 0.0001 +--initial-mass 0.221 --metallicity 0.0001 +--initial-mass 0.224 --metallicity 0.0001 +--initial-mass 0.227 --metallicity 0.0001 +--initial-mass 0.231 --metallicity 0.0001 +--initial-mass 0.234 --metallicity 0.0001 +--initial-mass 0.237 --metallicity 0.0001 +--initial-mass 0.241 --metallicity 0.0001 +--initial-mass 0.244 --metallicity 0.0001 +--initial-mass 0.248 --metallicity 0.0001 +--initial-mass 0.252 --metallicity 0.0001 +--initial-mass 0.255 --metallicity 0.0001 +--initial-mass 0.259 --metallicity 0.0001 +--initial-mass 0.263 --metallicity 0.0001 +--initial-mass 0.267 --metallicity 0.0001 +--initial-mass 0.271 --metallicity 0.0001 +--initial-mass 0.275 --metallicity 0.0001 +--initial-mass 0.279 --metallicity 0.0001 +--initial-mass 0.283 --metallicity 0.0001 +--initial-mass 0.287 --metallicity 0.0001 +--initial-mass 0.292 --metallicity 0.0001 +--initial-mass 0.296 --metallicity 0.0001 +--initial-mass 0.3 --metallicity 0.0001 +--initial-mass 0.305 --metallicity 0.0001 +--initial-mass 0.309 --metallicity 0.0001 +--initial-mass 0.314 --metallicity 0.0001 +--initial-mass 0.318 --metallicity 0.0001 +--initial-mass 0.323 --metallicity 0.0001 +--initial-mass 0.328 --metallicity 0.0001 +--initial-mass 0.333 --metallicity 0.0001 +--initial-mass 0.338 --metallicity 0.0001 +--initial-mass 0.342 --metallicity 0.0001 +--initial-mass 0.348 --metallicity 0.0001 +--initial-mass 0.353 --metallicity 0.0001 +--initial-mass 0.358 --metallicity 0.0001 +--initial-mass 0.363 --metallicity 0.0001 +--initial-mass 0.369 --metallicity 0.0001 +--initial-mass 0.374 --metallicity 0.0001 +--initial-mass 0.379 --metallicity 0.0001 +--initial-mass 0.385 --metallicity 0.0001 +--initial-mass 0.391 --metallicity 0.0001 +--initial-mass 0.397 --metallicity 0.0001 +--initial-mass 0.402 --metallicity 0.0001 +--initial-mass 0.408 --metallicity 0.0001 +--initial-mass 0.414 --metallicity 0.0001 +--initial-mass 0.42 --metallicity 0.0001 +--initial-mass 0.427 --metallicity 0.0001 +--initial-mass 0.433 --metallicity 0.0001 +--initial-mass 0.439 --metallicity 0.0001 +--initial-mass 0.446 --metallicity 0.0001 +--initial-mass 0.452 --metallicity 0.0001 +--initial-mass 0.459 --metallicity 0.0001 +--initial-mass 0.466 --metallicity 0.0001 +--initial-mass 0.473 --metallicity 0.0001 +--initial-mass 0.48 --metallicity 0.0001 +--initial-mass 0.487 --metallicity 0.0001 +--initial-mass 0.494 --metallicity 0.0001 +--initial-mass 0.501 --metallicity 0.0001 +--initial-mass 0.509 --metallicity 0.0001 +--initial-mass 0.516 --metallicity 0.0001 +--initial-mass 0.524 --metallicity 0.0001 +--initial-mass 0.532 --metallicity 0.0001 +--initial-mass 0.539 --metallicity 0.0001 +--initial-mass 0.547 --metallicity 0.0001 +--initial-mass 0.556 --metallicity 0.0001 +--initial-mass 0.564 --metallicity 0.0001 +--initial-mass 0.572 --metallicity 0.0001 +--initial-mass 0.58 --metallicity 0.0001 +--initial-mass 0.589 --metallicity 0.0001 +--initial-mass 0.598 --metallicity 0.0001 +--initial-mass 0.607 --metallicity 0.0001 +--initial-mass 0.616 --metallicity 0.0001 +--initial-mass 0.625 --metallicity 0.0001 +--initial-mass 0.634 --metallicity 0.0001 +--initial-mass 0.643 --metallicity 0.0001 +--initial-mass 0.653 --metallicity 0.0001 +--initial-mass 0.662 --metallicity 0.0001 +--initial-mass 0.672 --metallicity 0.0001 +--initial-mass 0.682 --metallicity 0.0001 +--initial-mass 0.692 --metallicity 0.0001 +--initial-mass 0.702 --metallicity 0.0001 +--initial-mass 0.713 --metallicity 0.0001 +--initial-mass 0.723 --metallicity 0.0001 +--initial-mass 0.734 --metallicity 0.0001 +--initial-mass 0.745 --metallicity 0.0001 +--initial-mass 0.756 --metallicity 0.0001 +--initial-mass 0.767 --metallicity 0.0001 +--initial-mass 0.778 --metallicity 0.0001 +--initial-mass 0.79 --metallicity 0.0001 +--initial-mass 0.801 --metallicity 0.0001 +--initial-mass 0.813 --metallicity 0.0001 +--initial-mass 0.825 --metallicity 0.0001 +--initial-mass 0.837 --metallicity 0.0001 +--initial-mass 0.85 --metallicity 0.0001 +--initial-mass 0.862 --metallicity 0.0001 +--initial-mass 0.875 --metallicity 0.0001 +--initial-mass 0.888 --metallicity 0.0001 +--initial-mass 0.901 --metallicity 0.0001 +--initial-mass 0.914 --metallicity 0.0001 +--initial-mass 0.928 --metallicity 0.0001 +--initial-mass 0.942 --metallicity 0.0001 +--initial-mass 0.955 --metallicity 0.0001 +--initial-mass 0.97 --metallicity 0.0001 +--initial-mass 0.984 --metallicity 0.0001 +--initial-mass 0.998 --metallicity 0.0001 +--initial-mass 1.013 --metallicity 0.0001 +--initial-mass 1.028 --metallicity 0.0001 +--initial-mass 1.043 --metallicity 0.0001 +--initial-mass 1.059 --metallicity 0.0001 +--initial-mass 1.074 --metallicity 0.0001 +--initial-mass 1.09 --metallicity 0.0001 +--initial-mass 1.106 --metallicity 0.0001 +--initial-mass 1.123 --metallicity 0.0001 +--initial-mass 1.139 --metallicity 0.0001 +--initial-mass 1.156 --metallicity 0.0001 +--initial-mass 1.173 --metallicity 0.0001 +--initial-mass 1.19 --metallicity 0.0001 +--initial-mass 1.208 --metallicity 0.0001 +--initial-mass 1.226 --metallicity 0.0001 +--initial-mass 1.244 --metallicity 0.0001 +--initial-mass 1.262 --metallicity 0.0001 +--initial-mass 1.281 --metallicity 0.0001 +--initial-mass 1.3 --metallicity 0.0001 +--initial-mass 1.319 --metallicity 0.0001 +--initial-mass 1.338 --metallicity 0.0001 +--initial-mass 1.358 --metallicity 0.0001 +--initial-mass 1.378 --metallicity 0.0001 +--initial-mass 1.399 --metallicity 0.0001 +--initial-mass 1.419 --metallicity 0.0001 +--initial-mass 1.44 --metallicity 0.0001 +--initial-mass 1.461 --metallicity 0.0001 +--initial-mass 1.483 --metallicity 0.0001 +--initial-mass 1.505 --metallicity 0.0001 +--initial-mass 1.527 --metallicity 0.0001 +--initial-mass 1.55 --metallicity 0.0001 +--initial-mass 1.573 --metallicity 0.0001 +--initial-mass 1.596 --metallicity 0.0001 +--initial-mass 1.619 --metallicity 0.0001 +--initial-mass 1.643 --metallicity 0.0001 +--initial-mass 1.667 --metallicity 0.0001 +--initial-mass 1.692 --metallicity 0.0001 +--initial-mass 1.717 --metallicity 0.0001 +--initial-mass 1.742 --metallicity 0.0001 +--initial-mass 1.768 --metallicity 0.0001 +--initial-mass 1.794 --metallicity 0.0001 +--initial-mass 1.821 --metallicity 0.0001 +--initial-mass 1.848 --metallicity 0.0001 +--initial-mass 1.875 --metallicity 0.0001 +--initial-mass 1.903 --metallicity 0.0001 +--initial-mass 1.931 --metallicity 0.0001 +--initial-mass 1.959 --metallicity 0.0001 +--initial-mass 1.988 --metallicity 0.0001 +--initial-mass 2.017 --metallicity 0.0001 +--initial-mass 2.047 --metallicity 0.0001 +--initial-mass 2.077 --metallicity 0.0001 +--initial-mass 2.108 --metallicity 0.0001 +--initial-mass 2.139 --metallicity 0.0001 +--initial-mass 2.171 --metallicity 0.0001 +--initial-mass 2.203 --metallicity 0.0001 +--initial-mass 2.235 --metallicity 0.0001 +--initial-mass 2.268 --metallicity 0.0001 +--initial-mass 2.302 --metallicity 0.0001 +--initial-mass 2.336 --metallicity 0.0001 +--initial-mass 2.37 --metallicity 0.0001 +--initial-mass 2.405 --metallicity 0.0001 +--initial-mass 2.441 --metallicity 0.0001 +--initial-mass 2.477 --metallicity 0.0001 +--initial-mass 2.514 --metallicity 0.0001 +--initial-mass 2.551 --metallicity 0.0001 +--initial-mass 2.588 --metallicity 0.0001 +--initial-mass 2.626 --metallicity 0.0001 +--initial-mass 2.665 --metallicity 0.0001 +--initial-mass 2.705 --metallicity 0.0001 +--initial-mass 2.745 --metallicity 0.0001 +--initial-mass 2.785 --metallicity 0.0001 +--initial-mass 2.826 --metallicity 0.0001 +--initial-mass 2.868 --metallicity 0.0001 +--initial-mass 2.91 --metallicity 0.0001 +--initial-mass 2.953 --metallicity 0.0001 +--initial-mass 2.997 --metallicity 0.0001 +--initial-mass 3.041 --metallicity 0.0001 +--initial-mass 3.086 --metallicity 0.0001 +--initial-mass 3.132 --metallicity 0.0001 +--initial-mass 3.178 --metallicity 0.0001 +--initial-mass 3.225 --metallicity 0.0001 +--initial-mass 3.272 --metallicity 0.0001 +--initial-mass 3.321 --metallicity 0.0001 +--initial-mass 3.37 --metallicity 0.0001 +--initial-mass 3.419 --metallicity 0.0001 +--initial-mass 3.47 --metallicity 0.0001 +--initial-mass 3.521 --metallicity 0.0001 +--initial-mass 3.573 --metallicity 0.0001 +--initial-mass 3.626 --metallicity 0.0001 +--initial-mass 3.679 --metallicity 0.0001 +--initial-mass 3.734 --metallicity 0.0001 +--initial-mass 3.789 --metallicity 0.0001 +--initial-mass 3.845 --metallicity 0.0001 +--initial-mass 3.901 --metallicity 0.0001 +--initial-mass 3.959 --metallicity 0.0001 +--initial-mass 4.018 --metallicity 0.0001 +--initial-mass 4.077 --metallicity 0.0001 +--initial-mass 4.137 --metallicity 0.0001 +--initial-mass 4.198 --metallicity 0.0001 +--initial-mass 4.26 --metallicity 0.0001 +--initial-mass 4.323 --metallicity 0.0001 +--initial-mass 4.387 --metallicity 0.0001 +--initial-mass 4.452 --metallicity 0.0001 +--initial-mass 4.517 --metallicity 0.0001 +--initial-mass 4.584 --metallicity 0.0001 +--initial-mass 4.652 --metallicity 0.0001 +--initial-mass 4.72 --metallicity 0.0001 +--initial-mass 4.79 --metallicity 0.0001 +--initial-mass 4.861 --metallicity 0.0001 +--initial-mass 4.932 --metallicity 0.0001 +--initial-mass 5.005 --metallicity 0.0001 +--initial-mass 5.079 --metallicity 0.0001 +--initial-mass 5.154 --metallicity 0.0001 +--initial-mass 5.23 --metallicity 0.0001 +--initial-mass 5.308 --metallicity 0.0001 +--initial-mass 5.386 --metallicity 0.0001 +--initial-mass 5.465 --metallicity 0.0001 +--initial-mass 5.546 --metallicity 0.0001 +--initial-mass 5.628 --metallicity 0.0001 +--initial-mass 5.711 --metallicity 0.0001 +--initial-mass 5.795 --metallicity 0.0001 +--initial-mass 5.881 --metallicity 0.0001 +--initial-mass 5.968 --metallicity 0.0001 +--initial-mass 6.056 --metallicity 0.0001 +--initial-mass 6.145 --metallicity 0.0001 +--initial-mass 6.236 --metallicity 0.0001 +--initial-mass 6.328 --metallicity 0.0001 +--initial-mass 6.421 --metallicity 0.0001 +--initial-mass 6.516 --metallicity 0.0001 +--initial-mass 6.612 --metallicity 0.0001 +--initial-mass 6.71 --metallicity 0.0001 +--initial-mass 6.809 --metallicity 0.0001 +--initial-mass 6.91 --metallicity 0.0001 +--initial-mass 7.012 --metallicity 0.0001 +--initial-mass 7.115 --metallicity 0.0001 +--initial-mass 7.22 --metallicity 0.0001 +--initial-mass 7.327 --metallicity 0.0001 +--initial-mass 7.435 --metallicity 0.0001 +--initial-mass 7.545 --metallicity 0.0001 +--initial-mass 7.656 --metallicity 0.0001 +--initial-mass 7.769 --metallicity 0.0001 +--initial-mass 7.884 --metallicity 0.0001 +--initial-mass 8.0 --metallicity 0.0001 +--initial-mass 8.118 --metallicity 0.0001 +--initial-mass 8.238 --metallicity 0.0001 +--initial-mass 8.36 --metallicity 0.0001 +--initial-mass 8.483 --metallicity 0.0001 +--initial-mass 8.609 --metallicity 0.0001 +--initial-mass 8.736 --metallicity 0.0001 +--initial-mass 8.865 --metallicity 0.0001 +--initial-mass 8.996 --metallicity 0.0001 +--initial-mass 9.128 --metallicity 0.0001 +--initial-mass 9.263 --metallicity 0.0001 +--initial-mass 9.4 --metallicity 0.0001 +--initial-mass 9.539 --metallicity 0.0001 +--initial-mass 9.679 --metallicity 0.0001 +--initial-mass 9.822 --metallicity 0.0001 +--initial-mass 9.967 --metallicity 0.0001 +--initial-mass 10.115 --metallicity 0.0001 +--initial-mass 10.264 --metallicity 0.0001 +--initial-mass 10.415 --metallicity 0.0001 +--initial-mass 10.569 --metallicity 0.0001 +--initial-mass 10.725 --metallicity 0.0001 +--initial-mass 10.884 --metallicity 0.0001 +--initial-mass 11.044 --metallicity 0.0001 +--initial-mass 11.207 --metallicity 0.0001 +--initial-mass 11.373 --metallicity 0.0001 +--initial-mass 11.541 --metallicity 0.0001 +--initial-mass 11.711 --metallicity 0.0001 +--initial-mass 11.884 --metallicity 0.0001 +--initial-mass 12.059 --metallicity 0.0001 +--initial-mass 12.237 --metallicity 0.0001 +--initial-mass 12.418 --metallicity 0.0001 +--initial-mass 12.601 --metallicity 0.0001 +--initial-mass 12.788 --metallicity 0.0001 +--initial-mass 12.976 --metallicity 0.0001 +--initial-mass 13.168 --metallicity 0.0001 +--initial-mass 13.362 --metallicity 0.0001 +--initial-mass 13.56 --metallicity 0.0001 +--initial-mass 13.76 --metallicity 0.0001 +--initial-mass 13.963 --metallicity 0.0001 +--initial-mass 14.169 --metallicity 0.0001 +--initial-mass 14.378 --metallicity 0.0001 +--initial-mass 14.591 --metallicity 0.0001 +--initial-mass 14.806 --metallicity 0.0001 +--initial-mass 15.024 --metallicity 0.0001 +--initial-mass 15.246 --metallicity 0.0001 +--initial-mass 15.471 --metallicity 0.0001 +--initial-mass 15.7 --metallicity 0.0001 +--initial-mass 15.932 --metallicity 0.0001 +--initial-mass 16.167 --metallicity 0.0001 +--initial-mass 16.406 --metallicity 0.0001 +--initial-mass 16.648 --metallicity 0.0001 +--initial-mass 16.893 --metallicity 0.0001 +--initial-mass 17.143 --metallicity 0.0001 +--initial-mass 17.396 --metallicity 0.0001 +--initial-mass 17.653 --metallicity 0.0001 +--initial-mass 17.913 --metallicity 0.0001 +--initial-mass 18.178 --metallicity 0.0001 +--initial-mass 18.446 --metallicity 0.0001 +--initial-mass 18.719 --metallicity 0.0001 +--initial-mass 18.995 --metallicity 0.0001 +--initial-mass 19.275 --metallicity 0.0001 +--initial-mass 19.56 --metallicity 0.0001 +--initial-mass 19.849 --metallicity 0.0001 +--initial-mass 20.142 --metallicity 0.0001 +--initial-mass 20.439 --metallicity 0.0001 +--initial-mass 20.741 --metallicity 0.0001 +--initial-mass 21.047 --metallicity 0.0001 +--initial-mass 21.358 --metallicity 0.0001 +--initial-mass 21.673 --metallicity 0.0001 +--initial-mass 21.993 --metallicity 0.0001 +--initial-mass 22.318 --metallicity 0.0001 +--initial-mass 22.647 --metallicity 0.0001 +--initial-mass 22.982 --metallicity 0.0001 +--initial-mass 23.321 --metallicity 0.0001 +--initial-mass 23.665 --metallicity 0.0001 +--initial-mass 24.015 --metallicity 0.0001 +--initial-mass 24.369 --metallicity 0.0001 +--initial-mass 24.729 --metallicity 0.0001 +--initial-mass 25.094 --metallicity 0.0001 +--initial-mass 25.465 --metallicity 0.0001 +--initial-mass 25.841 --metallicity 0.0001 +--initial-mass 26.222 --metallicity 0.0001 +--initial-mass 26.609 --metallicity 0.0001 +--initial-mass 27.002 --metallicity 0.0001 +--initial-mass 27.401 --metallicity 0.0001 +--initial-mass 27.805 --metallicity 0.0001 +--initial-mass 28.216 --metallicity 0.0001 +--initial-mass 28.632 --metallicity 0.0001 +--initial-mass 29.055 --metallicity 0.0001 +--initial-mass 29.484 --metallicity 0.0001 +--initial-mass 29.919 --metallicity 0.0001 +--initial-mass 30.361 --metallicity 0.0001 +--initial-mass 30.809 --metallicity 0.0001 +--initial-mass 31.264 --metallicity 0.0001 +--initial-mass 31.726 --metallicity 0.0001 +--initial-mass 32.194 --metallicity 0.0001 +--initial-mass 32.669 --metallicity 0.0001 +--initial-mass 33.152 --metallicity 0.0001 +--initial-mass 33.641 --metallicity 0.0001 +--initial-mass 34.138 --metallicity 0.0001 +--initial-mass 34.642 --metallicity 0.0001 +--initial-mass 35.153 --metallicity 0.0001 +--initial-mass 35.672 --metallicity 0.0001 +--initial-mass 36.199 --metallicity 0.0001 +--initial-mass 36.733 --metallicity 0.0001 +--initial-mass 37.276 --metallicity 0.0001 +--initial-mass 37.826 --metallicity 0.0001 +--initial-mass 38.384 --metallicity 0.0001 +--initial-mass 38.951 --metallicity 0.0001 +--initial-mass 39.526 --metallicity 0.0001 +--initial-mass 40.11 --metallicity 0.0001 +--initial-mass 40.702 --metallicity 0.0001 +--initial-mass 41.303 --metallicity 0.0001 +--initial-mass 41.913 --metallicity 0.0001 +--initial-mass 42.531 --metallicity 0.0001 +--initial-mass 43.159 --metallicity 0.0001 +--initial-mass 43.796 --metallicity 0.0001 +--initial-mass 44.443 --metallicity 0.0001 +--initial-mass 45.099 --metallicity 0.0001 +--initial-mass 45.765 --metallicity 0.0001 +--initial-mass 46.441 --metallicity 0.0001 +--initial-mass 47.126 --metallicity 0.0001 +--initial-mass 47.822 --metallicity 0.0001 +--initial-mass 48.528 --metallicity 0.0001 +--initial-mass 49.245 --metallicity 0.0001 +--initial-mass 49.972 --metallicity 0.0001 +--initial-mass 50.709 --metallicity 0.0001 +--initial-mass 51.458 --metallicity 0.0001 +--initial-mass 52.218 --metallicity 0.0001 +--initial-mass 52.989 --metallicity 0.0001 +--initial-mass 53.771 --metallicity 0.0001 +--initial-mass 54.565 --metallicity 0.0001 +--initial-mass 55.37 --metallicity 0.0001 +--initial-mass 56.188 --metallicity 0.0001 +--initial-mass 57.017 --metallicity 0.0001 +--initial-mass 57.859 --metallicity 0.0001 +--initial-mass 58.713 --metallicity 0.0001 +--initial-mass 59.58 --metallicity 0.0001 +--initial-mass 60.46 --metallicity 0.0001 +--initial-mass 61.352 --metallicity 0.0001 +--initial-mass 62.258 --metallicity 0.0001 +--initial-mass 63.177 --metallicity 0.0001 +--initial-mass 64.11 --metallicity 0.0001 +--initial-mass 65.057 --metallicity 0.0001 +--initial-mass 66.017 --metallicity 0.0001 +--initial-mass 66.992 --metallicity 0.0001 +--initial-mass 67.981 --metallicity 0.0001 +--initial-mass 68.984 --metallicity 0.0001 +--initial-mass 70.003 --metallicity 0.0001 +--initial-mass 71.036 --metallicity 0.0001 +--initial-mass 72.085 --metallicity 0.0001 +--initial-mass 73.149 --metallicity 0.0001 +--initial-mass 74.229 --metallicity 0.0001 +--initial-mass 75.325 --metallicity 0.0001 +--initial-mass 76.437 --metallicity 0.0001 +--initial-mass 77.566 --metallicity 0.0001 +--initial-mass 78.711 --metallicity 0.0001 +--initial-mass 79.873 --metallicity 0.0001 +--initial-mass 81.052 --metallicity 0.0001 +--initial-mass 82.249 --metallicity 0.0001 +--initial-mass 83.463 --metallicity 0.0001 +--initial-mass 84.695 --metallicity 0.0001 +--initial-mass 85.946 --metallicity 0.0001 +--initial-mass 87.215 --metallicity 0.0001 +--initial-mass 88.502 --metallicity 0.0001 +--initial-mass 89.809 --metallicity 0.0001 +--initial-mass 91.135 --metallicity 0.0001 +--initial-mass 92.48 --metallicity 0.0001 +--initial-mass 93.846 --metallicity 0.0001 +--initial-mass 95.231 --metallicity 0.0001 +--initial-mass 96.637 --metallicity 0.0001 +--initial-mass 98.064 --metallicity 0.0001 +--initial-mass 99.512 --metallicity 0.0001 +--initial-mass 100.981 --metallicity 0.0001 +--initial-mass 102.472 --metallicity 0.0001 +--initial-mass 103.984 --metallicity 0.0001 +--initial-mass 105.52 --metallicity 0.0001 +--initial-mass 107.078 --metallicity 0.0001 +--initial-mass 108.658 --metallicity 0.0001 +--initial-mass 110.263 --metallicity 0.0001 +--initial-mass 111.89 --metallicity 0.0001 +--initial-mass 113.542 --metallicity 0.0001 +--initial-mass 115.219 --metallicity 0.0001 +--initial-mass 116.92 --metallicity 0.0001 +--initial-mass 118.646 --metallicity 0.0001 +--initial-mass 120.398 --metallicity 0.0001 +--initial-mass 122.175 --metallicity 0.0001 +--initial-mass 123.979 --metallicity 0.0001 +--initial-mass 125.809 --metallicity 0.0001 +--initial-mass 127.667 --metallicity 0.0001 +--initial-mass 129.551 --metallicity 0.0001 +--initial-mass 131.464 --metallicity 0.0001 +--initial-mass 133.405 --metallicity 0.0001 +--initial-mass 135.375 --metallicity 0.0001 +--initial-mass 137.373 --metallicity 0.0001 +--initial-mass 139.401 --metallicity 0.0001 +--initial-mass 141.459 --metallicity 0.0001 +--initial-mass 143.548 --metallicity 0.0001 +--initial-mass 145.667 --metallicity 0.0001 +--initial-mass 147.818 --metallicity 0.0001 +--initial-mass 150.0 --metallicity 0.0001 +--initial-mass 0.1 --metallicity 0.001 +--initial-mass 0.101 --metallicity 0.001 +--initial-mass 0.103 --metallicity 0.001 +--initial-mass 0.104 --metallicity 0.001 +--initial-mass 0.106 --metallicity 0.001 +--initial-mass 0.108 --metallicity 0.001 +--initial-mass 0.109 --metallicity 0.001 +--initial-mass 0.111 --metallicity 0.001 +--initial-mass 0.112 --metallicity 0.001 +--initial-mass 0.114 --metallicity 0.001 +--initial-mass 0.116 --metallicity 0.001 +--initial-mass 0.117 --metallicity 0.001 +--initial-mass 0.119 --metallicity 0.001 +--initial-mass 0.121 --metallicity 0.001 +--initial-mass 0.123 --metallicity 0.001 +--initial-mass 0.125 --metallicity 0.001 +--initial-mass 0.126 --metallicity 0.001 +--initial-mass 0.128 --metallicity 0.001 +--initial-mass 0.13 --metallicity 0.001 +--initial-mass 0.132 --metallicity 0.001 +--initial-mass 0.134 --metallicity 0.001 +--initial-mass 0.136 --metallicity 0.001 +--initial-mass 0.138 --metallicity 0.001 +--initial-mass 0.14 --metallicity 0.001 +--initial-mass 0.142 --metallicity 0.001 +--initial-mass 0.144 --metallicity 0.001 +--initial-mass 0.146 --metallicity 0.001 +--initial-mass 0.149 --metallicity 0.001 +--initial-mass 0.151 --metallicity 0.001 +--initial-mass 0.153 --metallicity 0.001 +--initial-mass 0.155 --metallicity 0.001 +--initial-mass 0.158 --metallicity 0.001 +--initial-mass 0.16 --metallicity 0.001 +--initial-mass 0.162 --metallicity 0.001 +--initial-mass 0.165 --metallicity 0.001 +--initial-mass 0.167 --metallicity 0.001 +--initial-mass 0.169 --metallicity 0.001 +--initial-mass 0.172 --metallicity 0.001 +--initial-mass 0.175 --metallicity 0.001 +--initial-mass 0.177 --metallicity 0.001 +--initial-mass 0.18 --metallicity 0.001 +--initial-mass 0.182 --metallicity 0.001 +--initial-mass 0.185 --metallicity 0.001 +--initial-mass 0.188 --metallicity 0.001 +--initial-mass 0.191 --metallicity 0.001 +--initial-mass 0.193 --metallicity 0.001 +--initial-mass 0.196 --metallicity 0.001 +--initial-mass 0.199 --metallicity 0.001 +--initial-mass 0.202 --metallicity 0.001 +--initial-mass 0.205 --metallicity 0.001 +--initial-mass 0.208 --metallicity 0.001 +--initial-mass 0.211 --metallicity 0.001 +--initial-mass 0.214 --metallicity 0.001 +--initial-mass 0.217 --metallicity 0.001 +--initial-mass 0.221 --metallicity 0.001 +--initial-mass 0.224 --metallicity 0.001 +--initial-mass 0.227 --metallicity 0.001 +--initial-mass 0.231 --metallicity 0.001 +--initial-mass 0.234 --metallicity 0.001 +--initial-mass 0.237 --metallicity 0.001 +--initial-mass 0.241 --metallicity 0.001 +--initial-mass 0.244 --metallicity 0.001 +--initial-mass 0.248 --metallicity 0.001 +--initial-mass 0.252 --metallicity 0.001 +--initial-mass 0.255 --metallicity 0.001 +--initial-mass 0.259 --metallicity 0.001 +--initial-mass 0.263 --metallicity 0.001 +--initial-mass 0.267 --metallicity 0.001 +--initial-mass 0.271 --metallicity 0.001 +--initial-mass 0.275 --metallicity 0.001 +--initial-mass 0.279 --metallicity 0.001 +--initial-mass 0.283 --metallicity 0.001 +--initial-mass 0.287 --metallicity 0.001 +--initial-mass 0.292 --metallicity 0.001 +--initial-mass 0.296 --metallicity 0.001 +--initial-mass 0.3 --metallicity 0.001 +--initial-mass 0.305 --metallicity 0.001 +--initial-mass 0.309 --metallicity 0.001 +--initial-mass 0.314 --metallicity 0.001 +--initial-mass 0.318 --metallicity 0.001 +--initial-mass 0.323 --metallicity 0.001 +--initial-mass 0.328 --metallicity 0.001 +--initial-mass 0.333 --metallicity 0.001 +--initial-mass 0.338 --metallicity 0.001 +--initial-mass 0.342 --metallicity 0.001 +--initial-mass 0.348 --metallicity 0.001 +--initial-mass 0.353 --metallicity 0.001 +--initial-mass 0.358 --metallicity 0.001 +--initial-mass 0.363 --metallicity 0.001 +--initial-mass 0.369 --metallicity 0.001 +--initial-mass 0.374 --metallicity 0.001 +--initial-mass 0.379 --metallicity 0.001 +--initial-mass 0.385 --metallicity 0.001 +--initial-mass 0.391 --metallicity 0.001 +--initial-mass 0.397 --metallicity 0.001 +--initial-mass 0.402 --metallicity 0.001 +--initial-mass 0.408 --metallicity 0.001 +--initial-mass 0.414 --metallicity 0.001 +--initial-mass 0.42 --metallicity 0.001 +--initial-mass 0.427 --metallicity 0.001 +--initial-mass 0.433 --metallicity 0.001 +--initial-mass 0.439 --metallicity 0.001 +--initial-mass 0.446 --metallicity 0.001 +--initial-mass 0.452 --metallicity 0.001 +--initial-mass 0.459 --metallicity 0.001 +--initial-mass 0.466 --metallicity 0.001 +--initial-mass 0.473 --metallicity 0.001 +--initial-mass 0.48 --metallicity 0.001 +--initial-mass 0.487 --metallicity 0.001 +--initial-mass 0.494 --metallicity 0.001 +--initial-mass 0.501 --metallicity 0.001 +--initial-mass 0.509 --metallicity 0.001 +--initial-mass 0.516 --metallicity 0.001 +--initial-mass 0.524 --metallicity 0.001 +--initial-mass 0.532 --metallicity 0.001 +--initial-mass 0.539 --metallicity 0.001 +--initial-mass 0.547 --metallicity 0.001 +--initial-mass 0.556 --metallicity 0.001 +--initial-mass 0.564 --metallicity 0.001 +--initial-mass 0.572 --metallicity 0.001 +--initial-mass 0.58 --metallicity 0.001 +--initial-mass 0.589 --metallicity 0.001 +--initial-mass 0.598 --metallicity 0.001 +--initial-mass 0.607 --metallicity 0.001 +--initial-mass 0.616 --metallicity 0.001 +--initial-mass 0.625 --metallicity 0.001 +--initial-mass 0.634 --metallicity 0.001 +--initial-mass 0.643 --metallicity 0.001 +--initial-mass 0.653 --metallicity 0.001 +--initial-mass 0.662 --metallicity 0.001 +--initial-mass 0.672 --metallicity 0.001 +--initial-mass 0.682 --metallicity 0.001 +--initial-mass 0.692 --metallicity 0.001 +--initial-mass 0.702 --metallicity 0.001 +--initial-mass 0.713 --metallicity 0.001 +--initial-mass 0.723 --metallicity 0.001 +--initial-mass 0.734 --metallicity 0.001 +--initial-mass 0.745 --metallicity 0.001 +--initial-mass 0.756 --metallicity 0.001 +--initial-mass 0.767 --metallicity 0.001 +--initial-mass 0.778 --metallicity 0.001 +--initial-mass 0.79 --metallicity 0.001 +--initial-mass 0.801 --metallicity 0.001 +--initial-mass 0.813 --metallicity 0.001 +--initial-mass 0.825 --metallicity 0.001 +--initial-mass 0.837 --metallicity 0.001 +--initial-mass 0.85 --metallicity 0.001 +--initial-mass 0.862 --metallicity 0.001 +--initial-mass 0.875 --metallicity 0.001 +--initial-mass 0.888 --metallicity 0.001 +--initial-mass 0.901 --metallicity 0.001 +--initial-mass 0.914 --metallicity 0.001 +--initial-mass 0.928 --metallicity 0.001 +--initial-mass 0.942 --metallicity 0.001 +--initial-mass 0.955 --metallicity 0.001 +--initial-mass 0.97 --metallicity 0.001 +--initial-mass 0.984 --metallicity 0.001 +--initial-mass 0.998 --metallicity 0.001 +--initial-mass 1.013 --metallicity 0.001 +--initial-mass 1.028 --metallicity 0.001 +--initial-mass 1.043 --metallicity 0.001 +--initial-mass 1.059 --metallicity 0.001 +--initial-mass 1.074 --metallicity 0.001 +--initial-mass 1.09 --metallicity 0.001 +--initial-mass 1.106 --metallicity 0.001 +--initial-mass 1.123 --metallicity 0.001 +--initial-mass 1.139 --metallicity 0.001 +--initial-mass 1.156 --metallicity 0.001 +--initial-mass 1.173 --metallicity 0.001 +--initial-mass 1.19 --metallicity 0.001 +--initial-mass 1.208 --metallicity 0.001 +--initial-mass 1.226 --metallicity 0.001 +--initial-mass 1.244 --metallicity 0.001 +--initial-mass 1.262 --metallicity 0.001 +--initial-mass 1.281 --metallicity 0.001 +--initial-mass 1.3 --metallicity 0.001 +--initial-mass 1.319 --metallicity 0.001 +--initial-mass 1.338 --metallicity 0.001 +--initial-mass 1.358 --metallicity 0.001 +--initial-mass 1.378 --metallicity 0.001 +--initial-mass 1.399 --metallicity 0.001 +--initial-mass 1.419 --metallicity 0.001 +--initial-mass 1.44 --metallicity 0.001 +--initial-mass 1.461 --metallicity 0.001 +--initial-mass 1.483 --metallicity 0.001 +--initial-mass 1.505 --metallicity 0.001 +--initial-mass 1.527 --metallicity 0.001 +--initial-mass 1.55 --metallicity 0.001 +--initial-mass 1.573 --metallicity 0.001 +--initial-mass 1.596 --metallicity 0.001 +--initial-mass 1.619 --metallicity 0.001 +--initial-mass 1.643 --metallicity 0.001 +--initial-mass 1.667 --metallicity 0.001 +--initial-mass 1.692 --metallicity 0.001 +--initial-mass 1.717 --metallicity 0.001 +--initial-mass 1.742 --metallicity 0.001 +--initial-mass 1.768 --metallicity 0.001 +--initial-mass 1.794 --metallicity 0.001 +--initial-mass 1.821 --metallicity 0.001 +--initial-mass 1.848 --metallicity 0.001 +--initial-mass 1.875 --metallicity 0.001 +--initial-mass 1.903 --metallicity 0.001 +--initial-mass 1.931 --metallicity 0.001 +--initial-mass 1.959 --metallicity 0.001 +--initial-mass 1.988 --metallicity 0.001 +--initial-mass 2.017 --metallicity 0.001 +--initial-mass 2.047 --metallicity 0.001 +--initial-mass 2.077 --metallicity 0.001 +--initial-mass 2.108 --metallicity 0.001 +--initial-mass 2.139 --metallicity 0.001 +--initial-mass 2.171 --metallicity 0.001 +--initial-mass 2.203 --metallicity 0.001 +--initial-mass 2.235 --metallicity 0.001 +--initial-mass 2.268 --metallicity 0.001 +--initial-mass 2.302 --metallicity 0.001 +--initial-mass 2.336 --metallicity 0.001 +--initial-mass 2.37 --metallicity 0.001 +--initial-mass 2.405 --metallicity 0.001 +--initial-mass 2.441 --metallicity 0.001 +--initial-mass 2.477 --metallicity 0.001 +--initial-mass 2.514 --metallicity 0.001 +--initial-mass 2.551 --metallicity 0.001 +--initial-mass 2.588 --metallicity 0.001 +--initial-mass 2.626 --metallicity 0.001 +--initial-mass 2.665 --metallicity 0.001 +--initial-mass 2.705 --metallicity 0.001 +--initial-mass 2.745 --metallicity 0.001 +--initial-mass 2.785 --metallicity 0.001 +--initial-mass 2.826 --metallicity 0.001 +--initial-mass 2.868 --metallicity 0.001 +--initial-mass 2.91 --metallicity 0.001 +--initial-mass 2.953 --metallicity 0.001 +--initial-mass 2.997 --metallicity 0.001 +--initial-mass 3.041 --metallicity 0.001 +--initial-mass 3.086 --metallicity 0.001 +--initial-mass 3.132 --metallicity 0.001 +--initial-mass 3.178 --metallicity 0.001 +--initial-mass 3.225 --metallicity 0.001 +--initial-mass 3.272 --metallicity 0.001 +--initial-mass 3.321 --metallicity 0.001 +--initial-mass 3.37 --metallicity 0.001 +--initial-mass 3.419 --metallicity 0.001 +--initial-mass 3.47 --metallicity 0.001 +--initial-mass 3.521 --metallicity 0.001 +--initial-mass 3.573 --metallicity 0.001 +--initial-mass 3.626 --metallicity 0.001 +--initial-mass 3.679 --metallicity 0.001 +--initial-mass 3.734 --metallicity 0.001 +--initial-mass 3.789 --metallicity 0.001 +--initial-mass 3.845 --metallicity 0.001 +--initial-mass 3.901 --metallicity 0.001 +--initial-mass 3.959 --metallicity 0.001 +--initial-mass 4.018 --metallicity 0.001 +--initial-mass 4.077 --metallicity 0.001 +--initial-mass 4.137 --metallicity 0.001 +--initial-mass 4.198 --metallicity 0.001 +--initial-mass 4.26 --metallicity 0.001 +--initial-mass 4.323 --metallicity 0.001 +--initial-mass 4.387 --metallicity 0.001 +--initial-mass 4.452 --metallicity 0.001 +--initial-mass 4.517 --metallicity 0.001 +--initial-mass 4.584 --metallicity 0.001 +--initial-mass 4.652 --metallicity 0.001 +--initial-mass 4.72 --metallicity 0.001 +--initial-mass 4.79 --metallicity 0.001 +--initial-mass 4.861 --metallicity 0.001 +--initial-mass 4.932 --metallicity 0.001 +--initial-mass 5.005 --metallicity 0.001 +--initial-mass 5.079 --metallicity 0.001 +--initial-mass 5.154 --metallicity 0.001 +--initial-mass 5.23 --metallicity 0.001 +--initial-mass 5.308 --metallicity 0.001 +--initial-mass 5.386 --metallicity 0.001 +--initial-mass 5.465 --metallicity 0.001 +--initial-mass 5.546 --metallicity 0.001 +--initial-mass 5.628 --metallicity 0.001 +--initial-mass 5.711 --metallicity 0.001 +--initial-mass 5.795 --metallicity 0.001 +--initial-mass 5.881 --metallicity 0.001 +--initial-mass 5.968 --metallicity 0.001 +--initial-mass 6.056 --metallicity 0.001 +--initial-mass 6.145 --metallicity 0.001 +--initial-mass 6.236 --metallicity 0.001 +--initial-mass 6.328 --metallicity 0.001 +--initial-mass 6.421 --metallicity 0.001 +--initial-mass 6.516 --metallicity 0.001 +--initial-mass 6.612 --metallicity 0.001 +--initial-mass 6.71 --metallicity 0.001 +--initial-mass 6.809 --metallicity 0.001 +--initial-mass 6.91 --metallicity 0.001 +--initial-mass 7.012 --metallicity 0.001 +--initial-mass 7.115 --metallicity 0.001 +--initial-mass 7.22 --metallicity 0.001 +--initial-mass 7.327 --metallicity 0.001 +--initial-mass 7.435 --metallicity 0.001 +--initial-mass 7.545 --metallicity 0.001 +--initial-mass 7.656 --metallicity 0.001 +--initial-mass 7.769 --metallicity 0.001 +--initial-mass 7.884 --metallicity 0.001 +--initial-mass 8.0 --metallicity 0.001 +--initial-mass 8.118 --metallicity 0.001 +--initial-mass 8.238 --metallicity 0.001 +--initial-mass 8.36 --metallicity 0.001 +--initial-mass 8.483 --metallicity 0.001 +--initial-mass 8.609 --metallicity 0.001 +--initial-mass 8.736 --metallicity 0.001 +--initial-mass 8.865 --metallicity 0.001 +--initial-mass 8.996 --metallicity 0.001 +--initial-mass 9.128 --metallicity 0.001 +--initial-mass 9.263 --metallicity 0.001 +--initial-mass 9.4 --metallicity 0.001 +--initial-mass 9.539 --metallicity 0.001 +--initial-mass 9.679 --metallicity 0.001 +--initial-mass 9.822 --metallicity 0.001 +--initial-mass 9.967 --metallicity 0.001 +--initial-mass 10.115 --metallicity 0.001 +--initial-mass 10.264 --metallicity 0.001 +--initial-mass 10.415 --metallicity 0.001 +--initial-mass 10.569 --metallicity 0.001 +--initial-mass 10.725 --metallicity 0.001 +--initial-mass 10.884 --metallicity 0.001 +--initial-mass 11.044 --metallicity 0.001 +--initial-mass 11.207 --metallicity 0.001 +--initial-mass 11.373 --metallicity 0.001 +--initial-mass 11.541 --metallicity 0.001 +--initial-mass 11.711 --metallicity 0.001 +--initial-mass 11.884 --metallicity 0.001 +--initial-mass 12.059 --metallicity 0.001 +--initial-mass 12.237 --metallicity 0.001 +--initial-mass 12.418 --metallicity 0.001 +--initial-mass 12.601 --metallicity 0.001 +--initial-mass 12.788 --metallicity 0.001 +--initial-mass 12.976 --metallicity 0.001 +--initial-mass 13.168 --metallicity 0.001 +--initial-mass 13.362 --metallicity 0.001 +--initial-mass 13.56 --metallicity 0.001 +--initial-mass 13.76 --metallicity 0.001 +--initial-mass 13.963 --metallicity 0.001 +--initial-mass 14.169 --metallicity 0.001 +--initial-mass 14.378 --metallicity 0.001 +--initial-mass 14.591 --metallicity 0.001 +--initial-mass 14.806 --metallicity 0.001 +--initial-mass 15.024 --metallicity 0.001 +--initial-mass 15.246 --metallicity 0.001 +--initial-mass 15.471 --metallicity 0.001 +--initial-mass 15.7 --metallicity 0.001 +--initial-mass 15.932 --metallicity 0.001 +--initial-mass 16.167 --metallicity 0.001 +--initial-mass 16.406 --metallicity 0.001 +--initial-mass 16.648 --metallicity 0.001 +--initial-mass 16.893 --metallicity 0.001 +--initial-mass 17.143 --metallicity 0.001 +--initial-mass 17.396 --metallicity 0.001 +--initial-mass 17.653 --metallicity 0.001 +--initial-mass 17.913 --metallicity 0.001 +--initial-mass 18.178 --metallicity 0.001 +--initial-mass 18.446 --metallicity 0.001 +--initial-mass 18.719 --metallicity 0.001 +--initial-mass 18.995 --metallicity 0.001 +--initial-mass 19.275 --metallicity 0.001 +--initial-mass 19.56 --metallicity 0.001 +--initial-mass 19.849 --metallicity 0.001 +--initial-mass 20.142 --metallicity 0.001 +--initial-mass 20.439 --metallicity 0.001 +--initial-mass 20.741 --metallicity 0.001 +--initial-mass 21.047 --metallicity 0.001 +--initial-mass 21.358 --metallicity 0.001 +--initial-mass 21.673 --metallicity 0.001 +--initial-mass 21.993 --metallicity 0.001 +--initial-mass 22.318 --metallicity 0.001 +--initial-mass 22.647 --metallicity 0.001 +--initial-mass 22.982 --metallicity 0.001 +--initial-mass 23.321 --metallicity 0.001 +--initial-mass 23.665 --metallicity 0.001 +--initial-mass 24.015 --metallicity 0.001 +--initial-mass 24.369 --metallicity 0.001 +--initial-mass 24.729 --metallicity 0.001 +--initial-mass 25.094 --metallicity 0.001 +--initial-mass 25.465 --metallicity 0.001 +--initial-mass 25.841 --metallicity 0.001 +--initial-mass 26.222 --metallicity 0.001 +--initial-mass 26.609 --metallicity 0.001 +--initial-mass 27.002 --metallicity 0.001 +--initial-mass 27.401 --metallicity 0.001 +--initial-mass 27.805 --metallicity 0.001 +--initial-mass 28.216 --metallicity 0.001 +--initial-mass 28.632 --metallicity 0.001 +--initial-mass 29.055 --metallicity 0.001 +--initial-mass 29.484 --metallicity 0.001 +--initial-mass 29.919 --metallicity 0.001 +--initial-mass 30.361 --metallicity 0.001 +--initial-mass 30.809 --metallicity 0.001 +--initial-mass 31.264 --metallicity 0.001 +--initial-mass 31.726 --metallicity 0.001 +--initial-mass 32.194 --metallicity 0.001 +--initial-mass 32.669 --metallicity 0.001 +--initial-mass 33.152 --metallicity 0.001 +--initial-mass 33.641 --metallicity 0.001 +--initial-mass 34.138 --metallicity 0.001 +--initial-mass 34.642 --metallicity 0.001 +--initial-mass 35.153 --metallicity 0.001 +--initial-mass 35.672 --metallicity 0.001 +--initial-mass 36.199 --metallicity 0.001 +--initial-mass 36.733 --metallicity 0.001 +--initial-mass 37.276 --metallicity 0.001 +--initial-mass 37.826 --metallicity 0.001 +--initial-mass 38.384 --metallicity 0.001 +--initial-mass 38.951 --metallicity 0.001 +--initial-mass 39.526 --metallicity 0.001 +--initial-mass 40.11 --metallicity 0.001 +--initial-mass 40.702 --metallicity 0.001 +--initial-mass 41.303 --metallicity 0.001 +--initial-mass 41.913 --metallicity 0.001 +--initial-mass 42.531 --metallicity 0.001 +--initial-mass 43.159 --metallicity 0.001 +--initial-mass 43.796 --metallicity 0.001 +--initial-mass 44.443 --metallicity 0.001 +--initial-mass 45.099 --metallicity 0.001 +--initial-mass 45.765 --metallicity 0.001 +--initial-mass 46.441 --metallicity 0.001 +--initial-mass 47.126 --metallicity 0.001 +--initial-mass 47.822 --metallicity 0.001 +--initial-mass 48.528 --metallicity 0.001 +--initial-mass 49.245 --metallicity 0.001 +--initial-mass 49.972 --metallicity 0.001 +--initial-mass 50.709 --metallicity 0.001 +--initial-mass 51.458 --metallicity 0.001 +--initial-mass 52.218 --metallicity 0.001 +--initial-mass 52.989 --metallicity 0.001 +--initial-mass 53.771 --metallicity 0.001 +--initial-mass 54.565 --metallicity 0.001 +--initial-mass 55.37 --metallicity 0.001 +--initial-mass 56.188 --metallicity 0.001 +--initial-mass 57.017 --metallicity 0.001 +--initial-mass 57.859 --metallicity 0.001 +--initial-mass 58.713 --metallicity 0.001 +--initial-mass 59.58 --metallicity 0.001 +--initial-mass 60.46 --metallicity 0.001 +--initial-mass 61.352 --metallicity 0.001 +--initial-mass 62.258 --metallicity 0.001 +--initial-mass 63.177 --metallicity 0.001 +--initial-mass 64.11 --metallicity 0.001 +--initial-mass 65.057 --metallicity 0.001 +--initial-mass 66.017 --metallicity 0.001 +--initial-mass 66.992 --metallicity 0.001 +--initial-mass 67.981 --metallicity 0.001 +--initial-mass 68.984 --metallicity 0.001 +--initial-mass 70.003 --metallicity 0.001 +--initial-mass 71.036 --metallicity 0.001 +--initial-mass 72.085 --metallicity 0.001 +--initial-mass 73.149 --metallicity 0.001 +--initial-mass 74.229 --metallicity 0.001 +--initial-mass 75.325 --metallicity 0.001 +--initial-mass 76.437 --metallicity 0.001 +--initial-mass 77.566 --metallicity 0.001 +--initial-mass 78.711 --metallicity 0.001 +--initial-mass 79.873 --metallicity 0.001 +--initial-mass 81.052 --metallicity 0.001 +--initial-mass 82.249 --metallicity 0.001 +--initial-mass 83.463 --metallicity 0.001 +--initial-mass 84.695 --metallicity 0.001 +--initial-mass 85.946 --metallicity 0.001 +--initial-mass 87.215 --metallicity 0.001 +--initial-mass 88.502 --metallicity 0.001 +--initial-mass 89.809 --metallicity 0.001 +--initial-mass 91.135 --metallicity 0.001 +--initial-mass 92.48 --metallicity 0.001 +--initial-mass 93.846 --metallicity 0.001 +--initial-mass 95.231 --metallicity 0.001 +--initial-mass 96.637 --metallicity 0.001 +--initial-mass 98.064 --metallicity 0.001 +--initial-mass 99.512 --metallicity 0.001 +--initial-mass 100.981 --metallicity 0.001 +--initial-mass 102.472 --metallicity 0.001 +--initial-mass 103.984 --metallicity 0.001 +--initial-mass 105.52 --metallicity 0.001 +--initial-mass 107.078 --metallicity 0.001 +--initial-mass 108.658 --metallicity 0.001 +--initial-mass 110.263 --metallicity 0.001 +--initial-mass 111.89 --metallicity 0.001 +--initial-mass 113.542 --metallicity 0.001 +--initial-mass 115.219 --metallicity 0.001 +--initial-mass 116.92 --metallicity 0.001 +--initial-mass 118.646 --metallicity 0.001 +--initial-mass 120.398 --metallicity 0.001 +--initial-mass 122.175 --metallicity 0.001 +--initial-mass 123.979 --metallicity 0.001 +--initial-mass 125.809 --metallicity 0.001 +--initial-mass 127.667 --metallicity 0.001 +--initial-mass 129.551 --metallicity 0.001 +--initial-mass 131.464 --metallicity 0.001 +--initial-mass 133.405 --metallicity 0.001 +--initial-mass 135.375 --metallicity 0.001 +--initial-mass 137.373 --metallicity 0.001 +--initial-mass 139.401 --metallicity 0.001 +--initial-mass 141.459 --metallicity 0.001 +--initial-mass 143.548 --metallicity 0.001 +--initial-mass 145.667 --metallicity 0.001 +--initial-mass 147.818 --metallicity 0.001 +--initial-mass 150.0 --metallicity 0.001 +--initial-mass 0.1 --metallicity 0.01 +--initial-mass 0.101 --metallicity 0.01 +--initial-mass 0.103 --metallicity 0.01 +--initial-mass 0.104 --metallicity 0.01 +--initial-mass 0.106 --metallicity 0.01 +--initial-mass 0.108 --metallicity 0.01 +--initial-mass 0.109 --metallicity 0.01 +--initial-mass 0.111 --metallicity 0.01 +--initial-mass 0.112 --metallicity 0.01 +--initial-mass 0.114 --metallicity 0.01 +--initial-mass 0.116 --metallicity 0.01 +--initial-mass 0.117 --metallicity 0.01 +--initial-mass 0.119 --metallicity 0.01 +--initial-mass 0.121 --metallicity 0.01 +--initial-mass 0.123 --metallicity 0.01 +--initial-mass 0.125 --metallicity 0.01 +--initial-mass 0.126 --metallicity 0.01 +--initial-mass 0.128 --metallicity 0.01 +--initial-mass 0.13 --metallicity 0.01 +--initial-mass 0.132 --metallicity 0.01 +--initial-mass 0.134 --metallicity 0.01 +--initial-mass 0.136 --metallicity 0.01 +--initial-mass 0.138 --metallicity 0.01 +--initial-mass 0.14 --metallicity 0.01 +--initial-mass 0.142 --metallicity 0.01 +--initial-mass 0.144 --metallicity 0.01 +--initial-mass 0.146 --metallicity 0.01 +--initial-mass 0.149 --metallicity 0.01 +--initial-mass 0.151 --metallicity 0.01 +--initial-mass 0.153 --metallicity 0.01 +--initial-mass 0.155 --metallicity 0.01 +--initial-mass 0.158 --metallicity 0.01 +--initial-mass 0.16 --metallicity 0.01 +--initial-mass 0.162 --metallicity 0.01 +--initial-mass 0.165 --metallicity 0.01 +--initial-mass 0.167 --metallicity 0.01 +--initial-mass 0.169 --metallicity 0.01 +--initial-mass 0.172 --metallicity 0.01 +--initial-mass 0.175 --metallicity 0.01 +--initial-mass 0.177 --metallicity 0.01 +--initial-mass 0.18 --metallicity 0.01 +--initial-mass 0.182 --metallicity 0.01 +--initial-mass 0.185 --metallicity 0.01 +--initial-mass 0.188 --metallicity 0.01 +--initial-mass 0.191 --metallicity 0.01 +--initial-mass 0.193 --metallicity 0.01 +--initial-mass 0.196 --metallicity 0.01 +--initial-mass 0.199 --metallicity 0.01 +--initial-mass 0.202 --metallicity 0.01 +--initial-mass 0.205 --metallicity 0.01 +--initial-mass 0.208 --metallicity 0.01 +--initial-mass 0.211 --metallicity 0.01 +--initial-mass 0.214 --metallicity 0.01 +--initial-mass 0.217 --metallicity 0.01 +--initial-mass 0.221 --metallicity 0.01 +--initial-mass 0.224 --metallicity 0.01 +--initial-mass 0.227 --metallicity 0.01 +--initial-mass 0.231 --metallicity 0.01 +--initial-mass 0.234 --metallicity 0.01 +--initial-mass 0.237 --metallicity 0.01 +--initial-mass 0.241 --metallicity 0.01 +--initial-mass 0.244 --metallicity 0.01 +--initial-mass 0.248 --metallicity 0.01 +--initial-mass 0.252 --metallicity 0.01 +--initial-mass 0.255 --metallicity 0.01 +--initial-mass 0.259 --metallicity 0.01 +--initial-mass 0.263 --metallicity 0.01 +--initial-mass 0.267 --metallicity 0.01 +--initial-mass 0.271 --metallicity 0.01 +--initial-mass 0.275 --metallicity 0.01 +--initial-mass 0.279 --metallicity 0.01 +--initial-mass 0.283 --metallicity 0.01 +--initial-mass 0.287 --metallicity 0.01 +--initial-mass 0.292 --metallicity 0.01 +--initial-mass 0.296 --metallicity 0.01 +--initial-mass 0.3 --metallicity 0.01 +--initial-mass 0.305 --metallicity 0.01 +--initial-mass 0.309 --metallicity 0.01 +--initial-mass 0.314 --metallicity 0.01 +--initial-mass 0.318 --metallicity 0.01 +--initial-mass 0.323 --metallicity 0.01 +--initial-mass 0.328 --metallicity 0.01 +--initial-mass 0.333 --metallicity 0.01 +--initial-mass 0.338 --metallicity 0.01 +--initial-mass 0.342 --metallicity 0.01 +--initial-mass 0.348 --metallicity 0.01 +--initial-mass 0.353 --metallicity 0.01 +--initial-mass 0.358 --metallicity 0.01 +--initial-mass 0.363 --metallicity 0.01 +--initial-mass 0.369 --metallicity 0.01 +--initial-mass 0.374 --metallicity 0.01 +--initial-mass 0.379 --metallicity 0.01 +--initial-mass 0.385 --metallicity 0.01 +--initial-mass 0.391 --metallicity 0.01 +--initial-mass 0.397 --metallicity 0.01 +--initial-mass 0.402 --metallicity 0.01 +--initial-mass 0.408 --metallicity 0.01 +--initial-mass 0.414 --metallicity 0.01 +--initial-mass 0.42 --metallicity 0.01 +--initial-mass 0.427 --metallicity 0.01 +--initial-mass 0.433 --metallicity 0.01 +--initial-mass 0.439 --metallicity 0.01 +--initial-mass 0.446 --metallicity 0.01 +--initial-mass 0.452 --metallicity 0.01 +--initial-mass 0.459 --metallicity 0.01 +--initial-mass 0.466 --metallicity 0.01 +--initial-mass 0.473 --metallicity 0.01 +--initial-mass 0.48 --metallicity 0.01 +--initial-mass 0.487 --metallicity 0.01 +--initial-mass 0.494 --metallicity 0.01 +--initial-mass 0.501 --metallicity 0.01 +--initial-mass 0.509 --metallicity 0.01 +--initial-mass 0.516 --metallicity 0.01 +--initial-mass 0.524 --metallicity 0.01 +--initial-mass 0.532 --metallicity 0.01 +--initial-mass 0.539 --metallicity 0.01 +--initial-mass 0.547 --metallicity 0.01 +--initial-mass 0.556 --metallicity 0.01 +--initial-mass 0.564 --metallicity 0.01 +--initial-mass 0.572 --metallicity 0.01 +--initial-mass 0.58 --metallicity 0.01 +--initial-mass 0.589 --metallicity 0.01 +--initial-mass 0.598 --metallicity 0.01 +--initial-mass 0.607 --metallicity 0.01 +--initial-mass 0.616 --metallicity 0.01 +--initial-mass 0.625 --metallicity 0.01 +--initial-mass 0.634 --metallicity 0.01 +--initial-mass 0.643 --metallicity 0.01 +--initial-mass 0.653 --metallicity 0.01 +--initial-mass 0.662 --metallicity 0.01 +--initial-mass 0.672 --metallicity 0.01 +--initial-mass 0.682 --metallicity 0.01 +--initial-mass 0.692 --metallicity 0.01 +--initial-mass 0.702 --metallicity 0.01 +--initial-mass 0.713 --metallicity 0.01 +--initial-mass 0.723 --metallicity 0.01 +--initial-mass 0.734 --metallicity 0.01 +--initial-mass 0.745 --metallicity 0.01 +--initial-mass 0.756 --metallicity 0.01 +--initial-mass 0.767 --metallicity 0.01 +--initial-mass 0.778 --metallicity 0.01 +--initial-mass 0.79 --metallicity 0.01 +--initial-mass 0.801 --metallicity 0.01 +--initial-mass 0.813 --metallicity 0.01 +--initial-mass 0.825 --metallicity 0.01 +--initial-mass 0.837 --metallicity 0.01 +--initial-mass 0.85 --metallicity 0.01 +--initial-mass 0.862 --metallicity 0.01 +--initial-mass 0.875 --metallicity 0.01 +--initial-mass 0.888 --metallicity 0.01 +--initial-mass 0.901 --metallicity 0.01 +--initial-mass 0.914 --metallicity 0.01 +--initial-mass 0.928 --metallicity 0.01 +--initial-mass 0.942 --metallicity 0.01 +--initial-mass 0.955 --metallicity 0.01 +--initial-mass 0.97 --metallicity 0.01 +--initial-mass 0.984 --metallicity 0.01 +--initial-mass 0.998 --metallicity 0.01 +--initial-mass 1.013 --metallicity 0.01 +--initial-mass 1.028 --metallicity 0.01 +--initial-mass 1.043 --metallicity 0.01 +--initial-mass 1.059 --metallicity 0.01 +--initial-mass 1.074 --metallicity 0.01 +--initial-mass 1.09 --metallicity 0.01 +--initial-mass 1.106 --metallicity 0.01 +--initial-mass 1.123 --metallicity 0.01 +--initial-mass 1.139 --metallicity 0.01 +--initial-mass 1.156 --metallicity 0.01 +--initial-mass 1.173 --metallicity 0.01 +--initial-mass 1.19 --metallicity 0.01 +--initial-mass 1.208 --metallicity 0.01 +--initial-mass 1.226 --metallicity 0.01 +--initial-mass 1.244 --metallicity 0.01 +--initial-mass 1.262 --metallicity 0.01 +--initial-mass 1.281 --metallicity 0.01 +--initial-mass 1.3 --metallicity 0.01 +--initial-mass 1.319 --metallicity 0.01 +--initial-mass 1.338 --metallicity 0.01 +--initial-mass 1.358 --metallicity 0.01 +--initial-mass 1.378 --metallicity 0.01 +--initial-mass 1.399 --metallicity 0.01 +--initial-mass 1.419 --metallicity 0.01 +--initial-mass 1.44 --metallicity 0.01 +--initial-mass 1.461 --metallicity 0.01 +--initial-mass 1.483 --metallicity 0.01 +--initial-mass 1.505 --metallicity 0.01 +--initial-mass 1.527 --metallicity 0.01 +--initial-mass 1.55 --metallicity 0.01 +--initial-mass 1.573 --metallicity 0.01 +--initial-mass 1.596 --metallicity 0.01 +--initial-mass 1.619 --metallicity 0.01 +--initial-mass 1.643 --metallicity 0.01 +--initial-mass 1.667 --metallicity 0.01 +--initial-mass 1.692 --metallicity 0.01 +--initial-mass 1.717 --metallicity 0.01 +--initial-mass 1.742 --metallicity 0.01 +--initial-mass 1.768 --metallicity 0.01 +--initial-mass 1.794 --metallicity 0.01 +--initial-mass 1.821 --metallicity 0.01 +--initial-mass 1.848 --metallicity 0.01 +--initial-mass 1.875 --metallicity 0.01 +--initial-mass 1.903 --metallicity 0.01 +--initial-mass 1.931 --metallicity 0.01 +--initial-mass 1.959 --metallicity 0.01 +--initial-mass 1.988 --metallicity 0.01 +--initial-mass 2.017 --metallicity 0.01 +--initial-mass 2.047 --metallicity 0.01 +--initial-mass 2.077 --metallicity 0.01 +--initial-mass 2.108 --metallicity 0.01 +--initial-mass 2.139 --metallicity 0.01 +--initial-mass 2.171 --metallicity 0.01 +--initial-mass 2.203 --metallicity 0.01 +--initial-mass 2.235 --metallicity 0.01 +--initial-mass 2.268 --metallicity 0.01 +--initial-mass 2.302 --metallicity 0.01 +--initial-mass 2.336 --metallicity 0.01 +--initial-mass 2.37 --metallicity 0.01 +--initial-mass 2.405 --metallicity 0.01 +--initial-mass 2.441 --metallicity 0.01 +--initial-mass 2.477 --metallicity 0.01 +--initial-mass 2.514 --metallicity 0.01 +--initial-mass 2.551 --metallicity 0.01 +--initial-mass 2.588 --metallicity 0.01 +--initial-mass 2.626 --metallicity 0.01 +--initial-mass 2.665 --metallicity 0.01 +--initial-mass 2.705 --metallicity 0.01 +--initial-mass 2.745 --metallicity 0.01 +--initial-mass 2.785 --metallicity 0.01 +--initial-mass 2.826 --metallicity 0.01 +--initial-mass 2.868 --metallicity 0.01 +--initial-mass 2.91 --metallicity 0.01 +--initial-mass 2.953 --metallicity 0.01 +--initial-mass 2.997 --metallicity 0.01 +--initial-mass 3.041 --metallicity 0.01 +--initial-mass 3.086 --metallicity 0.01 +--initial-mass 3.132 --metallicity 0.01 +--initial-mass 3.178 --metallicity 0.01 +--initial-mass 3.225 --metallicity 0.01 +--initial-mass 3.272 --metallicity 0.01 +--initial-mass 3.321 --metallicity 0.01 +--initial-mass 3.37 --metallicity 0.01 +--initial-mass 3.419 --metallicity 0.01 +--initial-mass 3.47 --metallicity 0.01 +--initial-mass 3.521 --metallicity 0.01 +--initial-mass 3.573 --metallicity 0.01 +--initial-mass 3.626 --metallicity 0.01 +--initial-mass 3.679 --metallicity 0.01 +--initial-mass 3.734 --metallicity 0.01 +--initial-mass 3.789 --metallicity 0.01 +--initial-mass 3.845 --metallicity 0.01 +--initial-mass 3.901 --metallicity 0.01 +--initial-mass 3.959 --metallicity 0.01 +--initial-mass 4.018 --metallicity 0.01 +--initial-mass 4.077 --metallicity 0.01 +--initial-mass 4.137 --metallicity 0.01 +--initial-mass 4.198 --metallicity 0.01 +--initial-mass 4.26 --metallicity 0.01 +--initial-mass 4.323 --metallicity 0.01 +--initial-mass 4.387 --metallicity 0.01 +--initial-mass 4.452 --metallicity 0.01 +--initial-mass 4.517 --metallicity 0.01 +--initial-mass 4.584 --metallicity 0.01 +--initial-mass 4.652 --metallicity 0.01 +--initial-mass 4.72 --metallicity 0.01 +--initial-mass 4.79 --metallicity 0.01 +--initial-mass 4.861 --metallicity 0.01 +--initial-mass 4.932 --metallicity 0.01 +--initial-mass 5.005 --metallicity 0.01 +--initial-mass 5.079 --metallicity 0.01 +--initial-mass 5.154 --metallicity 0.01 +--initial-mass 5.23 --metallicity 0.01 +--initial-mass 5.308 --metallicity 0.01 +--initial-mass 5.386 --metallicity 0.01 +--initial-mass 5.465 --metallicity 0.01 +--initial-mass 5.546 --metallicity 0.01 +--initial-mass 5.628 --metallicity 0.01 +--initial-mass 5.711 --metallicity 0.01 +--initial-mass 5.795 --metallicity 0.01 +--initial-mass 5.881 --metallicity 0.01 +--initial-mass 5.968 --metallicity 0.01 +--initial-mass 6.056 --metallicity 0.01 +--initial-mass 6.145 --metallicity 0.01 +--initial-mass 6.236 --metallicity 0.01 +--initial-mass 6.328 --metallicity 0.01 +--initial-mass 6.421 --metallicity 0.01 +--initial-mass 6.516 --metallicity 0.01 +--initial-mass 6.612 --metallicity 0.01 +--initial-mass 6.71 --metallicity 0.01 +--initial-mass 6.809 --metallicity 0.01 +--initial-mass 6.91 --metallicity 0.01 +--initial-mass 7.012 --metallicity 0.01 +--initial-mass 7.115 --metallicity 0.01 +--initial-mass 7.22 --metallicity 0.01 +--initial-mass 7.327 --metallicity 0.01 +--initial-mass 7.435 --metallicity 0.01 +--initial-mass 7.545 --metallicity 0.01 +--initial-mass 7.656 --metallicity 0.01 +--initial-mass 7.769 --metallicity 0.01 +--initial-mass 7.884 --metallicity 0.01 +--initial-mass 8.0 --metallicity 0.01 +--initial-mass 8.118 --metallicity 0.01 +--initial-mass 8.238 --metallicity 0.01 +--initial-mass 8.36 --metallicity 0.01 +--initial-mass 8.483 --metallicity 0.01 +--initial-mass 8.609 --metallicity 0.01 +--initial-mass 8.736 --metallicity 0.01 +--initial-mass 8.865 --metallicity 0.01 +--initial-mass 8.996 --metallicity 0.01 +--initial-mass 9.128 --metallicity 0.01 +--initial-mass 9.263 --metallicity 0.01 +--initial-mass 9.4 --metallicity 0.01 +--initial-mass 9.539 --metallicity 0.01 +--initial-mass 9.679 --metallicity 0.01 +--initial-mass 9.822 --metallicity 0.01 +--initial-mass 9.967 --metallicity 0.01 +--initial-mass 10.115 --metallicity 0.01 +--initial-mass 10.264 --metallicity 0.01 +--initial-mass 10.415 --metallicity 0.01 +--initial-mass 10.569 --metallicity 0.01 +--initial-mass 10.725 --metallicity 0.01 +--initial-mass 10.884 --metallicity 0.01 +--initial-mass 11.044 --metallicity 0.01 +--initial-mass 11.207 --metallicity 0.01 +--initial-mass 11.373 --metallicity 0.01 +--initial-mass 11.541 --metallicity 0.01 +--initial-mass 11.711 --metallicity 0.01 +--initial-mass 11.884 --metallicity 0.01 +--initial-mass 12.059 --metallicity 0.01 +--initial-mass 12.237 --metallicity 0.01 +--initial-mass 12.418 --metallicity 0.01 +--initial-mass 12.601 --metallicity 0.01 +--initial-mass 12.788 --metallicity 0.01 +--initial-mass 12.976 --metallicity 0.01 +--initial-mass 13.168 --metallicity 0.01 +--initial-mass 13.362 --metallicity 0.01 +--initial-mass 13.56 --metallicity 0.01 +--initial-mass 13.76 --metallicity 0.01 +--initial-mass 13.963 --metallicity 0.01 +--initial-mass 14.169 --metallicity 0.01 +--initial-mass 14.378 --metallicity 0.01 +--initial-mass 14.591 --metallicity 0.01 +--initial-mass 14.806 --metallicity 0.01 +--initial-mass 15.024 --metallicity 0.01 +--initial-mass 15.246 --metallicity 0.01 +--initial-mass 15.471 --metallicity 0.01 +--initial-mass 15.7 --metallicity 0.01 +--initial-mass 15.932 --metallicity 0.01 +--initial-mass 16.167 --metallicity 0.01 +--initial-mass 16.406 --metallicity 0.01 +--initial-mass 16.648 --metallicity 0.01 +--initial-mass 16.893 --metallicity 0.01 +--initial-mass 17.143 --metallicity 0.01 +--initial-mass 17.396 --metallicity 0.01 +--initial-mass 17.653 --metallicity 0.01 +--initial-mass 17.913 --metallicity 0.01 +--initial-mass 18.178 --metallicity 0.01 +--initial-mass 18.446 --metallicity 0.01 +--initial-mass 18.719 --metallicity 0.01 +--initial-mass 18.995 --metallicity 0.01 +--initial-mass 19.275 --metallicity 0.01 +--initial-mass 19.56 --metallicity 0.01 +--initial-mass 19.849 --metallicity 0.01 +--initial-mass 20.142 --metallicity 0.01 +--initial-mass 20.439 --metallicity 0.01 +--initial-mass 20.741 --metallicity 0.01 +--initial-mass 21.047 --metallicity 0.01 +--initial-mass 21.358 --metallicity 0.01 +--initial-mass 21.673 --metallicity 0.01 +--initial-mass 21.993 --metallicity 0.01 +--initial-mass 22.318 --metallicity 0.01 +--initial-mass 22.647 --metallicity 0.01 +--initial-mass 22.982 --metallicity 0.01 +--initial-mass 23.321 --metallicity 0.01 +--initial-mass 23.665 --metallicity 0.01 +--initial-mass 24.015 --metallicity 0.01 +--initial-mass 24.369 --metallicity 0.01 +--initial-mass 24.729 --metallicity 0.01 +--initial-mass 25.094 --metallicity 0.01 +--initial-mass 25.465 --metallicity 0.01 +--initial-mass 25.841 --metallicity 0.01 +--initial-mass 26.222 --metallicity 0.01 +--initial-mass 26.609 --metallicity 0.01 +--initial-mass 27.002 --metallicity 0.01 +--initial-mass 27.401 --metallicity 0.01 +--initial-mass 27.805 --metallicity 0.01 +--initial-mass 28.216 --metallicity 0.01 +--initial-mass 28.632 --metallicity 0.01 +--initial-mass 29.055 --metallicity 0.01 +--initial-mass 29.484 --metallicity 0.01 +--initial-mass 29.919 --metallicity 0.01 +--initial-mass 30.361 --metallicity 0.01 +--initial-mass 30.809 --metallicity 0.01 +--initial-mass 31.264 --metallicity 0.01 +--initial-mass 31.726 --metallicity 0.01 +--initial-mass 32.194 --metallicity 0.01 +--initial-mass 32.669 --metallicity 0.01 +--initial-mass 33.152 --metallicity 0.01 +--initial-mass 33.641 --metallicity 0.01 +--initial-mass 34.138 --metallicity 0.01 +--initial-mass 34.642 --metallicity 0.01 +--initial-mass 35.153 --metallicity 0.01 +--initial-mass 35.672 --metallicity 0.01 +--initial-mass 36.199 --metallicity 0.01 +--initial-mass 36.733 --metallicity 0.01 +--initial-mass 37.276 --metallicity 0.01 +--initial-mass 37.826 --metallicity 0.01 +--initial-mass 38.384 --metallicity 0.01 +--initial-mass 38.951 --metallicity 0.01 +--initial-mass 39.526 --metallicity 0.01 +--initial-mass 40.11 --metallicity 0.01 +--initial-mass 40.702 --metallicity 0.01 +--initial-mass 41.303 --metallicity 0.01 +--initial-mass 41.913 --metallicity 0.01 +--initial-mass 42.531 --metallicity 0.01 +--initial-mass 43.159 --metallicity 0.01 +--initial-mass 43.796 --metallicity 0.01 +--initial-mass 44.443 --metallicity 0.01 +--initial-mass 45.099 --metallicity 0.01 +--initial-mass 45.765 --metallicity 0.01 +--initial-mass 46.441 --metallicity 0.01 +--initial-mass 47.126 --metallicity 0.01 +--initial-mass 47.822 --metallicity 0.01 +--initial-mass 48.528 --metallicity 0.01 +--initial-mass 49.245 --metallicity 0.01 +--initial-mass 49.972 --metallicity 0.01 +--initial-mass 50.709 --metallicity 0.01 +--initial-mass 51.458 --metallicity 0.01 +--initial-mass 52.218 --metallicity 0.01 +--initial-mass 52.989 --metallicity 0.01 +--initial-mass 53.771 --metallicity 0.01 +--initial-mass 54.565 --metallicity 0.01 +--initial-mass 55.37 --metallicity 0.01 +--initial-mass 56.188 --metallicity 0.01 +--initial-mass 57.017 --metallicity 0.01 +--initial-mass 57.859 --metallicity 0.01 +--initial-mass 58.713 --metallicity 0.01 +--initial-mass 59.58 --metallicity 0.01 +--initial-mass 60.46 --metallicity 0.01 +--initial-mass 61.352 --metallicity 0.01 +--initial-mass 62.258 --metallicity 0.01 +--initial-mass 63.177 --metallicity 0.01 +--initial-mass 64.11 --metallicity 0.01 +--initial-mass 65.057 --metallicity 0.01 +--initial-mass 66.017 --metallicity 0.01 +--initial-mass 66.992 --metallicity 0.01 +--initial-mass 67.981 --metallicity 0.01 +--initial-mass 68.984 --metallicity 0.01 +--initial-mass 70.003 --metallicity 0.01 +--initial-mass 71.036 --metallicity 0.01 +--initial-mass 72.085 --metallicity 0.01 +--initial-mass 73.149 --metallicity 0.01 +--initial-mass 74.229 --metallicity 0.01 +--initial-mass 75.325 --metallicity 0.01 +--initial-mass 76.437 --metallicity 0.01 +--initial-mass 77.566 --metallicity 0.01 +--initial-mass 78.711 --metallicity 0.01 +--initial-mass 79.873 --metallicity 0.01 +--initial-mass 81.052 --metallicity 0.01 +--initial-mass 82.249 --metallicity 0.01 +--initial-mass 83.463 --metallicity 0.01 +--initial-mass 84.695 --metallicity 0.01 +--initial-mass 85.946 --metallicity 0.01 +--initial-mass 87.215 --metallicity 0.01 +--initial-mass 88.502 --metallicity 0.01 +--initial-mass 89.809 --metallicity 0.01 +--initial-mass 91.135 --metallicity 0.01 +--initial-mass 92.48 --metallicity 0.01 +--initial-mass 93.846 --metallicity 0.01 +--initial-mass 95.231 --metallicity 0.01 +--initial-mass 96.637 --metallicity 0.01 +--initial-mass 98.064 --metallicity 0.01 +--initial-mass 99.512 --metallicity 0.01 +--initial-mass 100.981 --metallicity 0.01 +--initial-mass 102.472 --metallicity 0.01 +--initial-mass 103.984 --metallicity 0.01 +--initial-mass 105.52 --metallicity 0.01 +--initial-mass 107.078 --metallicity 0.01 +--initial-mass 108.658 --metallicity 0.01 +--initial-mass 110.263 --metallicity 0.01 +--initial-mass 111.89 --metallicity 0.01 +--initial-mass 113.542 --metallicity 0.01 +--initial-mass 115.219 --metallicity 0.01 +--initial-mass 116.92 --metallicity 0.01 +--initial-mass 118.646 --metallicity 0.01 +--initial-mass 120.398 --metallicity 0.01 +--initial-mass 122.175 --metallicity 0.01 +--initial-mass 123.979 --metallicity 0.01 +--initial-mass 125.809 --metallicity 0.01 +--initial-mass 127.667 --metallicity 0.01 +--initial-mass 129.551 --metallicity 0.01 +--initial-mass 131.464 --metallicity 0.01 +--initial-mass 133.405 --metallicity 0.01 +--initial-mass 135.375 --metallicity 0.01 +--initial-mass 137.373 --metallicity 0.01 +--initial-mass 139.401 --metallicity 0.01 +--initial-mass 141.459 --metallicity 0.01 +--initial-mass 143.548 --metallicity 0.01 +--initial-mass 145.667 --metallicity 0.01 +--initial-mass 147.818 --metallicity 0.01 +--initial-mass 150.0 --metallicity 0.01 +--initial-mass 0.1 --metallicity 0.01416 +--initial-mass 0.101 --metallicity 0.01416 +--initial-mass 0.103 --metallicity 0.01416 +--initial-mass 0.104 --metallicity 0.01416 +--initial-mass 0.106 --metallicity 0.01416 +--initial-mass 0.108 --metallicity 0.01416 +--initial-mass 0.109 --metallicity 0.01416 +--initial-mass 0.111 --metallicity 0.01416 +--initial-mass 0.112 --metallicity 0.01416 +--initial-mass 0.114 --metallicity 0.01416 +--initial-mass 0.116 --metallicity 0.01416 +--initial-mass 0.117 --metallicity 0.01416 +--initial-mass 0.119 --metallicity 0.01416 +--initial-mass 0.121 --metallicity 0.01416 +--initial-mass 0.123 --metallicity 0.01416 +--initial-mass 0.125 --metallicity 0.01416 +--initial-mass 0.126 --metallicity 0.01416 +--initial-mass 0.128 --metallicity 0.01416 +--initial-mass 0.13 --metallicity 0.01416 +--initial-mass 0.132 --metallicity 0.01416 +--initial-mass 0.134 --metallicity 0.01416 +--initial-mass 0.136 --metallicity 0.01416 +--initial-mass 0.138 --metallicity 0.01416 +--initial-mass 0.14 --metallicity 0.01416 +--initial-mass 0.142 --metallicity 0.01416 +--initial-mass 0.144 --metallicity 0.01416 +--initial-mass 0.146 --metallicity 0.01416 +--initial-mass 0.149 --metallicity 0.01416 +--initial-mass 0.151 --metallicity 0.01416 +--initial-mass 0.153 --metallicity 0.01416 +--initial-mass 0.155 --metallicity 0.01416 +--initial-mass 0.158 --metallicity 0.01416 +--initial-mass 0.16 --metallicity 0.01416 +--initial-mass 0.162 --metallicity 0.01416 +--initial-mass 0.165 --metallicity 0.01416 +--initial-mass 0.167 --metallicity 0.01416 +--initial-mass 0.169 --metallicity 0.01416 +--initial-mass 0.172 --metallicity 0.01416 +--initial-mass 0.175 --metallicity 0.01416 +--initial-mass 0.177 --metallicity 0.01416 +--initial-mass 0.18 --metallicity 0.01416 +--initial-mass 0.182 --metallicity 0.01416 +--initial-mass 0.185 --metallicity 0.01416 +--initial-mass 0.188 --metallicity 0.01416 +--initial-mass 0.191 --metallicity 0.01416 +--initial-mass 0.193 --metallicity 0.01416 +--initial-mass 0.196 --metallicity 0.01416 +--initial-mass 0.199 --metallicity 0.01416 +--initial-mass 0.202 --metallicity 0.01416 +--initial-mass 0.205 --metallicity 0.01416 +--initial-mass 0.208 --metallicity 0.01416 +--initial-mass 0.211 --metallicity 0.01416 +--initial-mass 0.214 --metallicity 0.01416 +--initial-mass 0.217 --metallicity 0.01416 +--initial-mass 0.221 --metallicity 0.01416 +--initial-mass 0.224 --metallicity 0.01416 +--initial-mass 0.227 --metallicity 0.01416 +--initial-mass 0.231 --metallicity 0.01416 +--initial-mass 0.234 --metallicity 0.01416 +--initial-mass 0.237 --metallicity 0.01416 +--initial-mass 0.241 --metallicity 0.01416 +--initial-mass 0.244 --metallicity 0.01416 +--initial-mass 0.248 --metallicity 0.01416 +--initial-mass 0.252 --metallicity 0.01416 +--initial-mass 0.255 --metallicity 0.01416 +--initial-mass 0.259 --metallicity 0.01416 +--initial-mass 0.263 --metallicity 0.01416 +--initial-mass 0.267 --metallicity 0.01416 +--initial-mass 0.271 --metallicity 0.01416 +--initial-mass 0.275 --metallicity 0.01416 +--initial-mass 0.279 --metallicity 0.01416 +--initial-mass 0.283 --metallicity 0.01416 +--initial-mass 0.287 --metallicity 0.01416 +--initial-mass 0.292 --metallicity 0.01416 +--initial-mass 0.296 --metallicity 0.01416 +--initial-mass 0.3 --metallicity 0.01416 +--initial-mass 0.305 --metallicity 0.01416 +--initial-mass 0.309 --metallicity 0.01416 +--initial-mass 0.314 --metallicity 0.01416 +--initial-mass 0.318 --metallicity 0.01416 +--initial-mass 0.323 --metallicity 0.01416 +--initial-mass 0.328 --metallicity 0.01416 +--initial-mass 0.333 --metallicity 0.01416 +--initial-mass 0.338 --metallicity 0.01416 +--initial-mass 0.342 --metallicity 0.01416 +--initial-mass 0.348 --metallicity 0.01416 +--initial-mass 0.353 --metallicity 0.01416 +--initial-mass 0.358 --metallicity 0.01416 +--initial-mass 0.363 --metallicity 0.01416 +--initial-mass 0.369 --metallicity 0.01416 +--initial-mass 0.374 --metallicity 0.01416 +--initial-mass 0.379 --metallicity 0.01416 +--initial-mass 0.385 --metallicity 0.01416 +--initial-mass 0.391 --metallicity 0.01416 +--initial-mass 0.397 --metallicity 0.01416 +--initial-mass 0.402 --metallicity 0.01416 +--initial-mass 0.408 --metallicity 0.01416 +--initial-mass 0.414 --metallicity 0.01416 +--initial-mass 0.42 --metallicity 0.01416 +--initial-mass 0.427 --metallicity 0.01416 +--initial-mass 0.433 --metallicity 0.01416 +--initial-mass 0.439 --metallicity 0.01416 +--initial-mass 0.446 --metallicity 0.01416 +--initial-mass 0.452 --metallicity 0.01416 +--initial-mass 0.459 --metallicity 0.01416 +--initial-mass 0.466 --metallicity 0.01416 +--initial-mass 0.473 --metallicity 0.01416 +--initial-mass 0.48 --metallicity 0.01416 +--initial-mass 0.487 --metallicity 0.01416 +--initial-mass 0.494 --metallicity 0.01416 +--initial-mass 0.501 --metallicity 0.01416 +--initial-mass 0.509 --metallicity 0.01416 +--initial-mass 0.516 --metallicity 0.01416 +--initial-mass 0.524 --metallicity 0.01416 +--initial-mass 0.532 --metallicity 0.01416 +--initial-mass 0.539 --metallicity 0.01416 +--initial-mass 0.547 --metallicity 0.01416 +--initial-mass 0.556 --metallicity 0.01416 +--initial-mass 0.564 --metallicity 0.01416 +--initial-mass 0.572 --metallicity 0.01416 +--initial-mass 0.58 --metallicity 0.01416 +--initial-mass 0.589 --metallicity 0.01416 +--initial-mass 0.598 --metallicity 0.01416 +--initial-mass 0.607 --metallicity 0.01416 +--initial-mass 0.616 --metallicity 0.01416 +--initial-mass 0.625 --metallicity 0.01416 +--initial-mass 0.634 --metallicity 0.01416 +--initial-mass 0.643 --metallicity 0.01416 +--initial-mass 0.653 --metallicity 0.01416 +--initial-mass 0.662 --metallicity 0.01416 +--initial-mass 0.672 --metallicity 0.01416 +--initial-mass 0.682 --metallicity 0.01416 +--initial-mass 0.692 --metallicity 0.01416 +--initial-mass 0.702 --metallicity 0.01416 +--initial-mass 0.713 --metallicity 0.01416 +--initial-mass 0.723 --metallicity 0.01416 +--initial-mass 0.734 --metallicity 0.01416 +--initial-mass 0.745 --metallicity 0.01416 +--initial-mass 0.756 --metallicity 0.01416 +--initial-mass 0.767 --metallicity 0.01416 +--initial-mass 0.778 --metallicity 0.01416 +--initial-mass 0.79 --metallicity 0.01416 +--initial-mass 0.801 --metallicity 0.01416 +--initial-mass 0.813 --metallicity 0.01416 +--initial-mass 0.825 --metallicity 0.01416 +--initial-mass 0.837 --metallicity 0.01416 +--initial-mass 0.85 --metallicity 0.01416 +--initial-mass 0.862 --metallicity 0.01416 +--initial-mass 0.875 --metallicity 0.01416 +--initial-mass 0.888 --metallicity 0.01416 +--initial-mass 0.901 --metallicity 0.01416 +--initial-mass 0.914 --metallicity 0.01416 +--initial-mass 0.928 --metallicity 0.01416 +--initial-mass 0.942 --metallicity 0.01416 +--initial-mass 0.955 --metallicity 0.01416 +--initial-mass 0.97 --metallicity 0.01416 +--initial-mass 0.984 --metallicity 0.01416 +--initial-mass 0.998 --metallicity 0.01416 +--initial-mass 1.013 --metallicity 0.01416 +--initial-mass 1.028 --metallicity 0.01416 +--initial-mass 1.043 --metallicity 0.01416 +--initial-mass 1.059 --metallicity 0.01416 +--initial-mass 1.074 --metallicity 0.01416 +--initial-mass 1.09 --metallicity 0.01416 +--initial-mass 1.106 --metallicity 0.01416 +--initial-mass 1.123 --metallicity 0.01416 +--initial-mass 1.139 --metallicity 0.01416 +--initial-mass 1.156 --metallicity 0.01416 +--initial-mass 1.173 --metallicity 0.01416 +--initial-mass 1.19 --metallicity 0.01416 +--initial-mass 1.208 --metallicity 0.01416 +--initial-mass 1.226 --metallicity 0.01416 +--initial-mass 1.244 --metallicity 0.01416 +--initial-mass 1.262 --metallicity 0.01416 +--initial-mass 1.281 --metallicity 0.01416 +--initial-mass 1.3 --metallicity 0.01416 +--initial-mass 1.319 --metallicity 0.01416 +--initial-mass 1.338 --metallicity 0.01416 +--initial-mass 1.358 --metallicity 0.01416 +--initial-mass 1.378 --metallicity 0.01416 +--initial-mass 1.399 --metallicity 0.01416 +--initial-mass 1.419 --metallicity 0.01416 +--initial-mass 1.44 --metallicity 0.01416 +--initial-mass 1.461 --metallicity 0.01416 +--initial-mass 1.483 --metallicity 0.01416 +--initial-mass 1.505 --metallicity 0.01416 +--initial-mass 1.527 --metallicity 0.01416 +--initial-mass 1.55 --metallicity 0.01416 +--initial-mass 1.573 --metallicity 0.01416 +--initial-mass 1.596 --metallicity 0.01416 +--initial-mass 1.619 --metallicity 0.01416 +--initial-mass 1.643 --metallicity 0.01416 +--initial-mass 1.667 --metallicity 0.01416 +--initial-mass 1.692 --metallicity 0.01416 +--initial-mass 1.717 --metallicity 0.01416 +--initial-mass 1.742 --metallicity 0.01416 +--initial-mass 1.768 --metallicity 0.01416 +--initial-mass 1.794 --metallicity 0.01416 +--initial-mass 1.821 --metallicity 0.01416 +--initial-mass 1.848 --metallicity 0.01416 +--initial-mass 1.875 --metallicity 0.01416 +--initial-mass 1.903 --metallicity 0.01416 +--initial-mass 1.931 --metallicity 0.01416 +--initial-mass 1.959 --metallicity 0.01416 +--initial-mass 1.988 --metallicity 0.01416 +--initial-mass 2.017 --metallicity 0.01416 +--initial-mass 2.047 --metallicity 0.01416 +--initial-mass 2.077 --metallicity 0.01416 +--initial-mass 2.108 --metallicity 0.01416 +--initial-mass 2.139 --metallicity 0.01416 +--initial-mass 2.171 --metallicity 0.01416 +--initial-mass 2.203 --metallicity 0.01416 +--initial-mass 2.235 --metallicity 0.01416 +--initial-mass 2.268 --metallicity 0.01416 +--initial-mass 2.302 --metallicity 0.01416 +--initial-mass 2.336 --metallicity 0.01416 +--initial-mass 2.37 --metallicity 0.01416 +--initial-mass 2.405 --metallicity 0.01416 +--initial-mass 2.441 --metallicity 0.01416 +--initial-mass 2.477 --metallicity 0.01416 +--initial-mass 2.514 --metallicity 0.01416 +--initial-mass 2.551 --metallicity 0.01416 +--initial-mass 2.588 --metallicity 0.01416 +--initial-mass 2.626 --metallicity 0.01416 +--initial-mass 2.665 --metallicity 0.01416 +--initial-mass 2.705 --metallicity 0.01416 +--initial-mass 2.745 --metallicity 0.01416 +--initial-mass 2.785 --metallicity 0.01416 +--initial-mass 2.826 --metallicity 0.01416 +--initial-mass 2.868 --metallicity 0.01416 +--initial-mass 2.91 --metallicity 0.01416 +--initial-mass 2.953 --metallicity 0.01416 +--initial-mass 2.997 --metallicity 0.01416 +--initial-mass 3.041 --metallicity 0.01416 +--initial-mass 3.086 --metallicity 0.01416 +--initial-mass 3.132 --metallicity 0.01416 +--initial-mass 3.178 --metallicity 0.01416 +--initial-mass 3.225 --metallicity 0.01416 +--initial-mass 3.272 --metallicity 0.01416 +--initial-mass 3.321 --metallicity 0.01416 +--initial-mass 3.37 --metallicity 0.01416 +--initial-mass 3.419 --metallicity 0.01416 +--initial-mass 3.47 --metallicity 0.01416 +--initial-mass 3.521 --metallicity 0.01416 +--initial-mass 3.573 --metallicity 0.01416 +--initial-mass 3.626 --metallicity 0.01416 +--initial-mass 3.679 --metallicity 0.01416 +--initial-mass 3.734 --metallicity 0.01416 +--initial-mass 3.789 --metallicity 0.01416 +--initial-mass 3.845 --metallicity 0.01416 +--initial-mass 3.901 --metallicity 0.01416 +--initial-mass 3.959 --metallicity 0.01416 +--initial-mass 4.018 --metallicity 0.01416 +--initial-mass 4.077 --metallicity 0.01416 +--initial-mass 4.137 --metallicity 0.01416 +--initial-mass 4.198 --metallicity 0.01416 +--initial-mass 4.26 --metallicity 0.01416 +--initial-mass 4.323 --metallicity 0.01416 +--initial-mass 4.387 --metallicity 0.01416 +--initial-mass 4.452 --metallicity 0.01416 +--initial-mass 4.517 --metallicity 0.01416 +--initial-mass 4.584 --metallicity 0.01416 +--initial-mass 4.652 --metallicity 0.01416 +--initial-mass 4.72 --metallicity 0.01416 +--initial-mass 4.79 --metallicity 0.01416 +--initial-mass 4.861 --metallicity 0.01416 +--initial-mass 4.932 --metallicity 0.01416 +--initial-mass 5.005 --metallicity 0.01416 +--initial-mass 5.079 --metallicity 0.01416 +--initial-mass 5.154 --metallicity 0.01416 +--initial-mass 5.23 --metallicity 0.01416 +--initial-mass 5.308 --metallicity 0.01416 +--initial-mass 5.386 --metallicity 0.01416 +--initial-mass 5.465 --metallicity 0.01416 +--initial-mass 5.546 --metallicity 0.01416 +--initial-mass 5.628 --metallicity 0.01416 +--initial-mass 5.711 --metallicity 0.01416 +--initial-mass 5.795 --metallicity 0.01416 +--initial-mass 5.881 --metallicity 0.01416 +--initial-mass 5.968 --metallicity 0.01416 +--initial-mass 6.056 --metallicity 0.01416 +--initial-mass 6.145 --metallicity 0.01416 +--initial-mass 6.236 --metallicity 0.01416 +--initial-mass 6.328 --metallicity 0.01416 +--initial-mass 6.421 --metallicity 0.01416 +--initial-mass 6.516 --metallicity 0.01416 +--initial-mass 6.612 --metallicity 0.01416 +--initial-mass 6.71 --metallicity 0.01416 +--initial-mass 6.809 --metallicity 0.01416 +--initial-mass 6.91 --metallicity 0.01416 +--initial-mass 7.012 --metallicity 0.01416 +--initial-mass 7.115 --metallicity 0.01416 +--initial-mass 7.22 --metallicity 0.01416 +--initial-mass 7.327 --metallicity 0.01416 +--initial-mass 7.435 --metallicity 0.01416 +--initial-mass 7.545 --metallicity 0.01416 +--initial-mass 7.656 --metallicity 0.01416 +--initial-mass 7.769 --metallicity 0.01416 +--initial-mass 7.884 --metallicity 0.01416 +--initial-mass 8.0 --metallicity 0.01416 +--initial-mass 8.118 --metallicity 0.01416 +--initial-mass 8.238 --metallicity 0.01416 +--initial-mass 8.36 --metallicity 0.01416 +--initial-mass 8.483 --metallicity 0.01416 +--initial-mass 8.609 --metallicity 0.01416 +--initial-mass 8.736 --metallicity 0.01416 +--initial-mass 8.865 --metallicity 0.01416 +--initial-mass 8.996 --metallicity 0.01416 +--initial-mass 9.128 --metallicity 0.01416 +--initial-mass 9.263 --metallicity 0.01416 +--initial-mass 9.4 --metallicity 0.01416 +--initial-mass 9.539 --metallicity 0.01416 +--initial-mass 9.679 --metallicity 0.01416 +--initial-mass 9.822 --metallicity 0.01416 +--initial-mass 9.967 --metallicity 0.01416 +--initial-mass 10.115 --metallicity 0.01416 +--initial-mass 10.264 --metallicity 0.01416 +--initial-mass 10.415 --metallicity 0.01416 +--initial-mass 10.569 --metallicity 0.01416 +--initial-mass 10.725 --metallicity 0.01416 +--initial-mass 10.884 --metallicity 0.01416 +--initial-mass 11.044 --metallicity 0.01416 +--initial-mass 11.207 --metallicity 0.01416 +--initial-mass 11.373 --metallicity 0.01416 +--initial-mass 11.541 --metallicity 0.01416 +--initial-mass 11.711 --metallicity 0.01416 +--initial-mass 11.884 --metallicity 0.01416 +--initial-mass 12.059 --metallicity 0.01416 +--initial-mass 12.237 --metallicity 0.01416 +--initial-mass 12.418 --metallicity 0.01416 +--initial-mass 12.601 --metallicity 0.01416 +--initial-mass 12.788 --metallicity 0.01416 +--initial-mass 12.976 --metallicity 0.01416 +--initial-mass 13.168 --metallicity 0.01416 +--initial-mass 13.362 --metallicity 0.01416 +--initial-mass 13.56 --metallicity 0.01416 +--initial-mass 13.76 --metallicity 0.01416 +--initial-mass 13.963 --metallicity 0.01416 +--initial-mass 14.169 --metallicity 0.01416 +--initial-mass 14.378 --metallicity 0.01416 +--initial-mass 14.591 --metallicity 0.01416 +--initial-mass 14.806 --metallicity 0.01416 +--initial-mass 15.024 --metallicity 0.01416 +--initial-mass 15.246 --metallicity 0.01416 +--initial-mass 15.471 --metallicity 0.01416 +--initial-mass 15.7 --metallicity 0.01416 +--initial-mass 15.932 --metallicity 0.01416 +--initial-mass 16.167 --metallicity 0.01416 +--initial-mass 16.406 --metallicity 0.01416 +--initial-mass 16.648 --metallicity 0.01416 +--initial-mass 16.893 --metallicity 0.01416 +--initial-mass 17.143 --metallicity 0.01416 +--initial-mass 17.396 --metallicity 0.01416 +--initial-mass 17.653 --metallicity 0.01416 +--initial-mass 17.913 --metallicity 0.01416 +--initial-mass 18.178 --metallicity 0.01416 +--initial-mass 18.446 --metallicity 0.01416 +--initial-mass 18.719 --metallicity 0.01416 +--initial-mass 18.995 --metallicity 0.01416 +--initial-mass 19.275 --metallicity 0.01416 +--initial-mass 19.56 --metallicity 0.01416 +--initial-mass 19.849 --metallicity 0.01416 +--initial-mass 20.142 --metallicity 0.01416 +--initial-mass 20.439 --metallicity 0.01416 +--initial-mass 20.741 --metallicity 0.01416 +--initial-mass 21.047 --metallicity 0.01416 +--initial-mass 21.358 --metallicity 0.01416 +--initial-mass 21.673 --metallicity 0.01416 +--initial-mass 21.993 --metallicity 0.01416 +--initial-mass 22.318 --metallicity 0.01416 +--initial-mass 22.647 --metallicity 0.01416 +--initial-mass 22.982 --metallicity 0.01416 +--initial-mass 23.321 --metallicity 0.01416 +--initial-mass 23.665 --metallicity 0.01416 +--initial-mass 24.015 --metallicity 0.01416 +--initial-mass 24.369 --metallicity 0.01416 +--initial-mass 24.729 --metallicity 0.01416 +--initial-mass 25.094 --metallicity 0.01416 +--initial-mass 25.465 --metallicity 0.01416 +--initial-mass 25.841 --metallicity 0.01416 +--initial-mass 26.222 --metallicity 0.01416 +--initial-mass 26.609 --metallicity 0.01416 +--initial-mass 27.002 --metallicity 0.01416 +--initial-mass 27.401 --metallicity 0.01416 +--initial-mass 27.805 --metallicity 0.01416 +--initial-mass 28.216 --metallicity 0.01416 +--initial-mass 28.632 --metallicity 0.01416 +--initial-mass 29.055 --metallicity 0.01416 +--initial-mass 29.484 --metallicity 0.01416 +--initial-mass 29.919 --metallicity 0.01416 +--initial-mass 30.361 --metallicity 0.01416 +--initial-mass 30.809 --metallicity 0.01416 +--initial-mass 31.264 --metallicity 0.01416 +--initial-mass 31.726 --metallicity 0.01416 +--initial-mass 32.194 --metallicity 0.01416 +--initial-mass 32.669 --metallicity 0.01416 +--initial-mass 33.152 --metallicity 0.01416 +--initial-mass 33.641 --metallicity 0.01416 +--initial-mass 34.138 --metallicity 0.01416 +--initial-mass 34.642 --metallicity 0.01416 +--initial-mass 35.153 --metallicity 0.01416 +--initial-mass 35.672 --metallicity 0.01416 +--initial-mass 36.199 --metallicity 0.01416 +--initial-mass 36.733 --metallicity 0.01416 +--initial-mass 37.276 --metallicity 0.01416 +--initial-mass 37.826 --metallicity 0.01416 +--initial-mass 38.384 --metallicity 0.01416 +--initial-mass 38.951 --metallicity 0.01416 +--initial-mass 39.526 --metallicity 0.01416 +--initial-mass 40.11 --metallicity 0.01416 +--initial-mass 40.702 --metallicity 0.01416 +--initial-mass 41.303 --metallicity 0.01416 +--initial-mass 41.913 --metallicity 0.01416 +--initial-mass 42.531 --metallicity 0.01416 +--initial-mass 43.159 --metallicity 0.01416 +--initial-mass 43.796 --metallicity 0.01416 +--initial-mass 44.443 --metallicity 0.01416 +--initial-mass 45.099 --metallicity 0.01416 +--initial-mass 45.765 --metallicity 0.01416 +--initial-mass 46.441 --metallicity 0.01416 +--initial-mass 47.126 --metallicity 0.01416 +--initial-mass 47.822 --metallicity 0.01416 +--initial-mass 48.528 --metallicity 0.01416 +--initial-mass 49.245 --metallicity 0.01416 +--initial-mass 49.972 --metallicity 0.01416 +--initial-mass 50.709 --metallicity 0.01416 +--initial-mass 51.458 --metallicity 0.01416 +--initial-mass 52.218 --metallicity 0.01416 +--initial-mass 52.989 --metallicity 0.01416 +--initial-mass 53.771 --metallicity 0.01416 +--initial-mass 54.565 --metallicity 0.01416 +--initial-mass 55.37 --metallicity 0.01416 +--initial-mass 56.188 --metallicity 0.01416 +--initial-mass 57.017 --metallicity 0.01416 +--initial-mass 57.859 --metallicity 0.01416 +--initial-mass 58.713 --metallicity 0.01416 +--initial-mass 59.58 --metallicity 0.01416 +--initial-mass 60.46 --metallicity 0.01416 +--initial-mass 61.352 --metallicity 0.01416 +--initial-mass 62.258 --metallicity 0.01416 +--initial-mass 63.177 --metallicity 0.01416 +--initial-mass 64.11 --metallicity 0.01416 +--initial-mass 65.057 --metallicity 0.01416 +--initial-mass 66.017 --metallicity 0.01416 +--initial-mass 66.992 --metallicity 0.01416 +--initial-mass 67.981 --metallicity 0.01416 +--initial-mass 68.984 --metallicity 0.01416 +--initial-mass 70.003 --metallicity 0.01416 +--initial-mass 71.036 --metallicity 0.01416 +--initial-mass 72.085 --metallicity 0.01416 +--initial-mass 73.149 --metallicity 0.01416 +--initial-mass 74.229 --metallicity 0.01416 +--initial-mass 75.325 --metallicity 0.01416 +--initial-mass 76.437 --metallicity 0.01416 +--initial-mass 77.566 --metallicity 0.01416 +--initial-mass 78.711 --metallicity 0.01416 +--initial-mass 79.873 --metallicity 0.01416 +--initial-mass 81.052 --metallicity 0.01416 +--initial-mass 82.249 --metallicity 0.01416 +--initial-mass 83.463 --metallicity 0.01416 +--initial-mass 84.695 --metallicity 0.01416 +--initial-mass 85.946 --metallicity 0.01416 +--initial-mass 87.215 --metallicity 0.01416 +--initial-mass 88.502 --metallicity 0.01416 +--initial-mass 89.809 --metallicity 0.01416 +--initial-mass 91.135 --metallicity 0.01416 +--initial-mass 92.48 --metallicity 0.01416 +--initial-mass 93.846 --metallicity 0.01416 +--initial-mass 95.231 --metallicity 0.01416 +--initial-mass 96.637 --metallicity 0.01416 +--initial-mass 98.064 --metallicity 0.01416 +--initial-mass 99.512 --metallicity 0.01416 +--initial-mass 100.981 --metallicity 0.01416 +--initial-mass 102.472 --metallicity 0.01416 +--initial-mass 103.984 --metallicity 0.01416 +--initial-mass 105.52 --metallicity 0.01416 +--initial-mass 107.078 --metallicity 0.01416 +--initial-mass 108.658 --metallicity 0.01416 +--initial-mass 110.263 --metallicity 0.01416 +--initial-mass 111.89 --metallicity 0.01416 +--initial-mass 113.542 --metallicity 0.01416 +--initial-mass 115.219 --metallicity 0.01416 +--initial-mass 116.92 --metallicity 0.01416 +--initial-mass 118.646 --metallicity 0.01416 +--initial-mass 120.398 --metallicity 0.01416 +--initial-mass 122.175 --metallicity 0.01416 +--initial-mass 123.979 --metallicity 0.01416 +--initial-mass 125.809 --metallicity 0.01416 +--initial-mass 127.667 --metallicity 0.01416 +--initial-mass 129.551 --metallicity 0.01416 +--initial-mass 131.464 --metallicity 0.01416 +--initial-mass 133.405 --metallicity 0.01416 +--initial-mass 135.375 --metallicity 0.01416 +--initial-mass 137.373 --metallicity 0.01416 +--initial-mass 139.401 --metallicity 0.01416 +--initial-mass 141.459 --metallicity 0.01416 +--initial-mass 143.548 --metallicity 0.01416 +--initial-mass 145.667 --metallicity 0.01416 +--initial-mass 147.818 --metallicity 0.01416 +--initial-mass 150.0 --metallicity 0.01416 diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/logfile_defs.txt b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/logfile_defs.txt index a277c0e45..af6c28b16 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/logfile_defs.txt +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/logfile_defs.txt @@ -11,4 +11,4 @@ sse_sysparms_rec = { STAR_PROPERTY::METALLICITY, PROGRAM_OPTION::REMNANT_MASS_PRESCRIPTION, PROGRAM_OPTION::FRYER_SUPERNOVA_ENGINE -} \ No newline at end of file +} diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/make_fig_8.py b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/make_fig_8.py index 7d06ac5fe..4b91c3fea 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/make_fig_8.py +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/make_fig_8.py @@ -61,8 +61,8 @@ def get_COMPAS_vars(file, group, var_list): def core_remnant_mass_comparison(file, fig=None, ax=None, show=True): if fig is None or ax is None: fig, ax = plt.subplots(figsize=(10, 8)) - - with h5.File(file, "r") as compas: + + with h5.File(file, "r") as compas: m_ZAMS, m_final, m_co_core_atCO, Z, stellar_type = get_COMPAS_vars(compas, "SSE_System_Parameters", ["Mass@ZAMS", "Mass", @@ -73,13 +73,13 @@ def core_remnant_mass_comparison(file, fig=None, ax=None, show=True): # only plot things for solar metallicity solar = Z == 0.01416 uni_types = np.unique(stellar_type[solar]) - + # annotate the plot with the stellar types for i in range(len(uni_types)): ax.annotate(stellar_types[uni_types[i]]["short"], xy=(0.02, 0.93 - 0.05 * i), xycoords="axes fraction", color=plt.get_cmap("tab10")(i / 10), fontsize=0.7*fs, weight="bold") - - + + for i in range(len(uni_types)): # plot the final white dwarf mass for WDs if uni_types[i] in [10, 11, 12]: @@ -94,12 +94,12 @@ def core_remnant_mass_comparison(file, fig=None, ax=None, show=True): # annotate with solar metallicity ax.annotate(r"$Z = Z_{\rm \odot}$", xy=(0.97, 0.04), xycoords="axes fraction", fontsize=0.7*fs, ha="right") - + ax.set_ylabel(r"Core Mass $[\rm M_{\odot}]$") - + if show: plt.show() - + return fig, ax @@ -111,19 +111,19 @@ def core_remnant_mass_comparison(file, fig=None, ax=None, show=True): def remnant_mass_across_metallicity(file, fig=None, ax=None, show=True): if fig is None or ax is None: fig, ax = plt.subplots(figsize=(10, 8)) - - with h5.File(file, "r") as compas: + + with h5.File(file, "r") as compas: m_ZAMS, m_final, m_co_core_atCO, Z, stellar_type = get_COMPAS_vars(compas, "SSE_System_Parameters", ["Mass@ZAMS", "Mass", "Mass_CO_Core@CO", "Metallicity", "Stellar_Type"]) - + # create an inset axis for the linear version inset_ax = ax.inset_axes([0.05, 0.55, 0.53, 0.425]) inset_ax.tick_params(labelsize=0.5*fs) - + # plot three different metallicities for Z_match, style in [(0.01, "-"), (0.001, "--"), (0.0001, "dotted")]: matching_Z = Z == Z_match @@ -142,12 +142,12 @@ def remnant_mass_across_metallicity(file, fig=None, ax=None, show=True): lw=2, linestyle=style, markevery=25, color=plt.get_cmap("tab10")(i / 10)) ax.legend(loc="lower right", fontsize=0.7 * fs) - + ax.set_ylabel(r"Core Mass $[\rm M_{\odot}]$") - + if show: plt.show() - + return fig, ax @@ -161,7 +161,7 @@ def remnant_mass_prescription_comparison(prescriptions, fig=None, ax=None, show= fig, ax = plt.subplots(figsize=(10, 8)) for file, style, label in prescriptions: - with h5.File("COMPAS_Output_{}/COMPAS_Output_{}.h5".format(file, file), "r") as compas: + with h5.File("COMPAS_Output_{}/COMPAS_Output_{}.h5".format(file, file), "r") as compas: m_ZAMS, m_final, Z, stellar_type = get_COMPAS_vars(compas, "SSE_System_Parameters", ["Mass@ZAMS", "Mass", @@ -179,7 +179,7 @@ def remnant_mass_prescription_comparison(prescriptions, fig=None, ax=None, show= m_final[solar][stellar_type[solar] == uni_types[i]], s=0.2, alpha=0.5, color=plt.get_cmap("tab10")(i / 10), label=label if i == len(uni_types) - 1 else None) - + # use lines for the other ones else: ax.loglog(m_ZAMS[solar][stellar_type[solar] == uni_types[i]], @@ -191,12 +191,12 @@ def remnant_mass_prescription_comparison(prescriptions, fig=None, ax=None, show= ax.set_yscale("log") leg = ax.legend(fontsize=0.7 * fs, loc="lower right", markerscale=25, title=r"$Z = Z_{\rm \odot}$") leg.get_title().set_fontsize(0.7 * fs) - + ax.set_ylabel(r"Remnant Mass $[\rm M_{\odot}]$") - + if show: plt.show() - + return fig, ax @@ -206,7 +206,7 @@ def remnant_mass_prescription_comparison(prescriptions, fig=None, ax=None, show= # + fig, axes = plt.subplots(3, figsize=(10, 24)) - + fig, axes[0] = core_remnant_mass_comparison("COMPAS_Output_default/COMPAS_Output_default.h5", fig=fig, ax=axes[0], show=False) @@ -224,13 +224,13 @@ def remnant_mass_prescription_comparison(prescriptions, fig=None, ax=None, show= ax.set_xticks(xticks) ax.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter()) ax.set_xlabel(r"Initial Mass $[\rm M_{\rm \odot}]$") - + ax.set_yticks(yticks) ax.get_yaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter()) - + ax.tick_params(which="major", length=7) ax.tick_params(which="minor", length=4) - + plt.savefig("initial_core_final_mass_relations.pdf", format="pdf", bbox_inches="tight") - + plt.show() diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitDefaults.py b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitDefaults.py index a6b0c6641..190ba23aa 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitDefaults.py +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitDefaults.py @@ -6,7 +6,7 @@ from subprocess import call #### DISCLAIMER: This script uses the `pythonSubmit.py` format -#### that has been replaced by the `runSubmit.py` and +#### that has been replaced by the `runSubmit.py` and #### `compasConfigDefault.yaml` combo as of v02.25.10. #### The `pythonSubmit.py` format will eventually become deprecated. @@ -26,13 +26,13 @@ class pythonProgramOptions: # if COMPAS_EXECUTABLE_PATH is not set (== None) we assume this is an # interactive run with python3 # if COMPAS_EXECUTABLE_PATH is set (!= None) we assume this is a run - # inside a docker container - we have different directories inside a + # inside a docker container - we have different directories inside a # docker container (src, obj, bin), and the COMPAS executable resides # in the bin directory (rather than the src directory) compas_executable_override = os.environ.get('COMPAS_EXECUTABLE_PATH') if (compas_executable_override is None): - + # we should fix this one day - we should not assume that the COMPAS executable # is in the 'src' directory. The standard is to put the object files created # by the compile into the 'obj' directory, and the executable files created by @@ -45,7 +45,7 @@ class pythonProgramOptions: compas_root_dir = os.environ.get('COMPAS_ROOT_DIR') assert compas_root_dir is not None, "Unable to locate the COMPAS executable: check that the environment variable COMPAS_ROOT_DIR is set correctly, and the COMPAS executable exists." - # construct path to executable + # construct path to executable # # ideally we wouldn't have the 'src' directory name (or any other directory name) # prepended to the executable name - if we just execute the executable name on its @@ -112,7 +112,7 @@ class pythonProgramOptions: if grid_filename != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(grid_filename) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required grid_filename = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -125,7 +125,7 @@ class pythonProgramOptions: if logfile_definitions != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(logfile_definitions) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required logfile_definitions = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -318,7 +318,7 @@ class pythonProgramOptions: # set the logfile names here # # set to None (e.g. logfile_BSE_supernovae = None) to use the default filename - # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename + # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename # set to empty string (e.g. logfile_BSE_supernovae = '""') to disable logging for that file (the file will not be created) # # We don't really need the 'BSE' or 'SSE' prefixes any more - they were put there because @@ -326,7 +326,7 @@ class pythonProgramOptions: # created by a COMPAS run - especially the detailed output files. Now that the output # files are created inside a containing folder for each run there is really no need for # the prefixes - and if we don't have the prefixes we can share some of the options - # (e.g. specifying the supernovae filename doesn't need to have separate options for + # (e.g. specifying the supernovae filename doesn't need to have separate options for # SSE and BSE - we really just need one (we only ever run in one mode or the other)) # # For now though, I'll leave them as is - we can change this when (if) we decide to @@ -707,10 +707,10 @@ def listCommands(self): def generateCommandLineOptionsDict(self): """ - This function generates a dictionary mapping COMPAS options to their specified + This function generates a dictionary mapping COMPAS options to their specified values (or empty strings for boolean options). These can be combined into a string and run directly as a terminal command, or passed to the stroopwafel interface - where some of them may be overwritten. Options not to be included in the command + where some of them may be overwritten. Options not to be included in the command line should be set to pythons None (except booleans, which should be set to False) Parameters @@ -808,4 +808,3 @@ def cleanStringParameter(str_param): #-- Run execute COMPAS shell string print(shellCommand) call(shellCommand,shell=True) - diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitFryerRapid.py b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitFryerRapid.py index 1aad8c18c..5b4276329 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitFryerRapid.py +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitFryerRapid.py @@ -6,7 +6,7 @@ from subprocess import call #### DISCLAIMER: This script uses the `pythonSubmit.py` format -#### that has been replaced by the `runSubmit.py` and +#### that has been replaced by the `runSubmit.py` and #### `compasConfigDefault.yaml` combo as of v02.25.10. #### The `pythonSubmit.py` format will eventually become deprecated. @@ -26,13 +26,13 @@ class pythonProgramOptions: # if COMPAS_EXECUTABLE_PATH is not set (== None) we assume this is an # interactive run with python3 # if COMPAS_EXECUTABLE_PATH is set (!= None) we assume this is a run - # inside a docker container - we have different directories inside a + # inside a docker container - we have different directories inside a # docker container (src, obj, bin), and the COMPAS executable resides # in the bin directory (rather than the src directory) compas_executable_override = os.environ.get('COMPAS_EXECUTABLE_PATH') if (compas_executable_override is None): - + # we should fix this one day - we should not assume that the COMPAS executable # is in the 'src' directory. The standard is to put the object files created # by the compile into the 'obj' directory, and the executable files created by @@ -45,7 +45,7 @@ class pythonProgramOptions: compas_root_dir = os.environ.get('COMPAS_ROOT_DIR') assert compas_root_dir is not None, "Unable to locate the COMPAS executable: check that the environment variable COMPAS_ROOT_DIR is set correctly, and the COMPAS executable exists." - # construct path to executable + # construct path to executable # # ideally we wouldn't have the 'src' directory name (or any other directory name) # prepended to the executable name - if we just execute the executable name on its @@ -112,7 +112,7 @@ class pythonProgramOptions: if grid_filename != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(grid_filename) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required grid_filename = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -125,7 +125,7 @@ class pythonProgramOptions: if logfile_definitions != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(logfile_definitions) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required logfile_definitions = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -318,7 +318,7 @@ class pythonProgramOptions: # set the logfile names here # # set to None (e.g. logfile_BSE_supernovae = None) to use the default filename - # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename + # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename # set to empty string (e.g. logfile_BSE_supernovae = '""') to disable logging for that file (the file will not be created) # # We don't really need the 'BSE' or 'SSE' prefixes any more - they were put there because @@ -326,7 +326,7 @@ class pythonProgramOptions: # created by a COMPAS run - especially the detailed output files. Now that the output # files are created inside a containing folder for each run there is really no need for # the prefixes - and if we don't have the prefixes we can share some of the options - # (e.g. specifying the supernovae filename doesn't need to have separate options for + # (e.g. specifying the supernovae filename doesn't need to have separate options for # SSE and BSE - we really just need one (we only ever run in one mode or the other)) # # For now though, I'll leave them as is - we can change this when (if) we decide to @@ -707,10 +707,10 @@ def listCommands(self): def generateCommandLineOptionsDict(self): """ - This function generates a dictionary mapping COMPAS options to their specified + This function generates a dictionary mapping COMPAS options to their specified values (or empty strings for boolean options). These can be combined into a string and run directly as a terminal command, or passed to the stroopwafel interface - where some of them may be overwritten. Options not to be included in the command + where some of them may be overwritten. Options not to be included in the command line should be set to pythons None (except booleans, which should be set to False) Parameters @@ -808,4 +808,3 @@ def cleanStringParameter(str_param): #-- Run execute COMPAS shell string print(shellCommand) call(shellCommand,shell=True) - diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitMandelMueller.py b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitMandelMueller.py index 822dc78d7..c00102190 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitMandelMueller.py +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/pythonSubmitMandelMueller.py @@ -6,7 +6,7 @@ from subprocess import call #### DISCLAIMER: This script uses the `pythonSubmit.py` format -#### that has been replaced by the `runSubmit.py` and +#### that has been replaced by the `runSubmit.py` and #### `compasConfigDefault.yaml` combo as of v02.25.10. #### The `pythonSubmit.py` format will eventually become deprecated. @@ -26,13 +26,13 @@ class pythonProgramOptions: # if COMPAS_EXECUTABLE_PATH is not set (== None) we assume this is an # interactive run with python3 # if COMPAS_EXECUTABLE_PATH is set (!= None) we assume this is a run - # inside a docker container - we have different directories inside a + # inside a docker container - we have different directories inside a # docker container (src, obj, bin), and the COMPAS executable resides # in the bin directory (rather than the src directory) compas_executable_override = os.environ.get('COMPAS_EXECUTABLE_PATH') if (compas_executable_override is None): - + # we should fix this one day - we should not assume that the COMPAS executable # is in the 'src' directory. The standard is to put the object files created # by the compile into the 'obj' directory, and the executable files created by @@ -45,7 +45,7 @@ class pythonProgramOptions: compas_root_dir = os.environ.get('COMPAS_ROOT_DIR') assert compas_root_dir is not None, "Unable to locate the COMPAS executable: check that the environment variable COMPAS_ROOT_DIR is set correctly, and the COMPAS executable exists." - # construct path to executable + # construct path to executable # # ideally we wouldn't have the 'src' directory name (or any other directory name) # prepended to the executable name - if we just execute the executable name on its @@ -112,7 +112,7 @@ class pythonProgramOptions: if grid_filename != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(grid_filename) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required grid_filename = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -125,7 +125,7 @@ class pythonProgramOptions: if logfile_definitions != None: # if the grid filename supplied is already fully-qualified, leave it as is head, tail = ntpath.split(logfile_definitions) # split into pathname and base filename - + if head == '' or head == '.': # no path (or CWD) - add path as required logfile_definitions = tail or ntpath.basename(head) if compas_input_path_override == None: @@ -318,7 +318,7 @@ class pythonProgramOptions: # set the logfile names here # # set to None (e.g. logfile_BSE_supernovae = None) to use the default filename - # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename + # set to a string (e.g. logfile_BSE_supernovae = 'mySNfilename') to use that string as the filename # set to empty string (e.g. logfile_BSE_supernovae = '""') to disable logging for that file (the file will not be created) # # We don't really need the 'BSE' or 'SSE' prefixes any more - they were put there because @@ -326,7 +326,7 @@ class pythonProgramOptions: # created by a COMPAS run - especially the detailed output files. Now that the output # files are created inside a containing folder for each run there is really no need for # the prefixes - and if we don't have the prefixes we can share some of the options - # (e.g. specifying the supernovae filename doesn't need to have separate options for + # (e.g. specifying the supernovae filename doesn't need to have separate options for # SSE and BSE - we really just need one (we only ever run in one mode or the other)) # # For now though, I'll leave them as is - we can change this when (if) we decide to @@ -707,10 +707,10 @@ def listCommands(self): def generateCommandLineOptionsDict(self): """ - This function generates a dictionary mapping COMPAS options to their specified + This function generates a dictionary mapping COMPAS options to their specified values (or empty strings for boolean options). These can be combined into a string and run directly as a terminal command, or passed to the stroopwafel interface - where some of them may be overwritten. Options not to be included in the command + where some of them may be overwritten. Options not to be included in the command line should be set to pythons None (except booleans, which should be set to False) Parameters @@ -808,4 +808,3 @@ def cleanStringParameter(str_param): #-- Run execute COMPAS shell string print(shellCommand) call(shellCommand,shell=True) - diff --git a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/rapid_grid.txt b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/rapid_grid.txt index 04fc0eba8..296f67870 100644 --- a/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/rapid_grid.txt +++ b/misc/examples/methods_paper_plots/fig_8_initial_core_final_mass_relations/rapid_grid.txt @@ -1,500 +1,500 @@ ---initial-mass 0.1 --metallicity 0.0001 ---initial-mass 0.101 --metallicity 0.0001 ---initial-mass 0.103 --metallicity 0.0001 ---initial-mass 0.104 --metallicity 0.0001 ---initial-mass 0.106 --metallicity 0.0001 ---initial-mass 0.108 --metallicity 0.0001 ---initial-mass 0.109 --metallicity 0.0001 ---initial-mass 0.111 --metallicity 0.0001 ---initial-mass 0.112 --metallicity 0.0001 ---initial-mass 0.114 --metallicity 0.0001 ---initial-mass 0.116 --metallicity 0.0001 ---initial-mass 0.117 --metallicity 0.0001 ---initial-mass 0.119 --metallicity 0.0001 ---initial-mass 0.121 --metallicity 0.0001 ---initial-mass 0.123 --metallicity 0.0001 ---initial-mass 0.125 --metallicity 0.0001 ---initial-mass 0.126 --metallicity 0.0001 ---initial-mass 0.128 --metallicity 0.0001 ---initial-mass 0.13 --metallicity 0.0001 ---initial-mass 0.132 --metallicity 0.0001 ---initial-mass 0.134 --metallicity 0.0001 ---initial-mass 0.136 --metallicity 0.0001 ---initial-mass 0.138 --metallicity 0.0001 ---initial-mass 0.14 --metallicity 0.0001 ---initial-mass 0.142 --metallicity 0.0001 ---initial-mass 0.144 --metallicity 0.0001 ---initial-mass 0.146 --metallicity 0.0001 ---initial-mass 0.149 --metallicity 0.0001 ---initial-mass 0.151 --metallicity 0.0001 ---initial-mass 0.153 --metallicity 0.0001 ---initial-mass 0.155 --metallicity 0.0001 ---initial-mass 0.158 --metallicity 0.0001 ---initial-mass 0.16 --metallicity 0.0001 ---initial-mass 0.162 --metallicity 0.0001 ---initial-mass 0.165 --metallicity 0.0001 ---initial-mass 0.167 --metallicity 0.0001 ---initial-mass 0.169 --metallicity 0.0001 ---initial-mass 0.172 --metallicity 0.0001 ---initial-mass 0.175 --metallicity 0.0001 ---initial-mass 0.177 --metallicity 0.0001 ---initial-mass 0.18 --metallicity 0.0001 ---initial-mass 0.182 --metallicity 0.0001 ---initial-mass 0.185 --metallicity 0.0001 ---initial-mass 0.188 --metallicity 0.0001 ---initial-mass 0.191 --metallicity 0.0001 ---initial-mass 0.193 --metallicity 0.0001 ---initial-mass 0.196 --metallicity 0.0001 ---initial-mass 0.199 --metallicity 0.0001 ---initial-mass 0.202 --metallicity 0.0001 ---initial-mass 0.205 --metallicity 0.0001 ---initial-mass 0.208 --metallicity 0.0001 ---initial-mass 0.211 --metallicity 0.0001 ---initial-mass 0.214 --metallicity 0.0001 ---initial-mass 0.217 --metallicity 0.0001 ---initial-mass 0.221 --metallicity 0.0001 ---initial-mass 0.224 --metallicity 0.0001 ---initial-mass 0.227 --metallicity 0.0001 ---initial-mass 0.231 --metallicity 0.0001 ---initial-mass 0.234 --metallicity 0.0001 ---initial-mass 0.237 --metallicity 0.0001 ---initial-mass 0.241 --metallicity 0.0001 ---initial-mass 0.244 --metallicity 0.0001 ---initial-mass 0.248 --metallicity 0.0001 ---initial-mass 0.252 --metallicity 0.0001 ---initial-mass 0.255 --metallicity 0.0001 ---initial-mass 0.259 --metallicity 0.0001 ---initial-mass 0.263 --metallicity 0.0001 ---initial-mass 0.267 --metallicity 0.0001 ---initial-mass 0.271 --metallicity 0.0001 ---initial-mass 0.275 --metallicity 0.0001 ---initial-mass 0.279 --metallicity 0.0001 ---initial-mass 0.283 --metallicity 0.0001 ---initial-mass 0.287 --metallicity 0.0001 ---initial-mass 0.292 --metallicity 0.0001 ---initial-mass 0.296 --metallicity 0.0001 ---initial-mass 0.3 --metallicity 0.0001 ---initial-mass 0.305 --metallicity 0.0001 ---initial-mass 0.309 --metallicity 0.0001 ---initial-mass 0.314 --metallicity 0.0001 ---initial-mass 0.318 --metallicity 0.0001 ---initial-mass 0.323 --metallicity 0.0001 ---initial-mass 0.328 --metallicity 0.0001 ---initial-mass 0.333 --metallicity 0.0001 ---initial-mass 0.338 --metallicity 0.0001 ---initial-mass 0.342 --metallicity 0.0001 ---initial-mass 0.348 --metallicity 0.0001 ---initial-mass 0.353 --metallicity 0.0001 ---initial-mass 0.358 --metallicity 0.0001 ---initial-mass 0.363 --metallicity 0.0001 ---initial-mass 0.369 --metallicity 0.0001 ---initial-mass 0.374 --metallicity 0.0001 ---initial-mass 0.379 --metallicity 0.0001 ---initial-mass 0.385 --metallicity 0.0001 ---initial-mass 0.391 --metallicity 0.0001 ---initial-mass 0.397 --metallicity 0.0001 ---initial-mass 0.402 --metallicity 0.0001 ---initial-mass 0.408 --metallicity 0.0001 ---initial-mass 0.414 --metallicity 0.0001 ---initial-mass 0.42 --metallicity 0.0001 ---initial-mass 0.427 --metallicity 0.0001 ---initial-mass 0.433 --metallicity 0.0001 ---initial-mass 0.439 --metallicity 0.0001 ---initial-mass 0.446 --metallicity 0.0001 ---initial-mass 0.452 --metallicity 0.0001 ---initial-mass 0.459 --metallicity 0.0001 ---initial-mass 0.466 --metallicity 0.0001 ---initial-mass 0.473 --metallicity 0.0001 ---initial-mass 0.48 --metallicity 0.0001 ---initial-mass 0.487 --metallicity 0.0001 ---initial-mass 0.494 --metallicity 0.0001 ---initial-mass 0.501 --metallicity 0.0001 ---initial-mass 0.509 --metallicity 0.0001 ---initial-mass 0.516 --metallicity 0.0001 ---initial-mass 0.524 --metallicity 0.0001 ---initial-mass 0.532 --metallicity 0.0001 ---initial-mass 0.539 --metallicity 0.0001 ---initial-mass 0.547 --metallicity 0.0001 ---initial-mass 0.556 --metallicity 0.0001 ---initial-mass 0.564 --metallicity 0.0001 ---initial-mass 0.572 --metallicity 0.0001 ---initial-mass 0.58 --metallicity 0.0001 ---initial-mass 0.589 --metallicity 0.0001 ---initial-mass 0.598 --metallicity 0.0001 ---initial-mass 0.607 --metallicity 0.0001 ---initial-mass 0.616 --metallicity 0.0001 ---initial-mass 0.625 --metallicity 0.0001 ---initial-mass 0.634 --metallicity 0.0001 ---initial-mass 0.643 --metallicity 0.0001 ---initial-mass 0.653 --metallicity 0.0001 ---initial-mass 0.662 --metallicity 0.0001 ---initial-mass 0.672 --metallicity 0.0001 ---initial-mass 0.682 --metallicity 0.0001 ---initial-mass 0.692 --metallicity 0.0001 ---initial-mass 0.702 --metallicity 0.0001 ---initial-mass 0.713 --metallicity 0.0001 ---initial-mass 0.723 --metallicity 0.0001 ---initial-mass 0.734 --metallicity 0.0001 ---initial-mass 0.745 --metallicity 0.0001 ---initial-mass 0.756 --metallicity 0.0001 ---initial-mass 0.767 --metallicity 0.0001 ---initial-mass 0.778 --metallicity 0.0001 ---initial-mass 0.79 --metallicity 0.0001 ---initial-mass 0.801 --metallicity 0.0001 ---initial-mass 0.813 --metallicity 0.0001 ---initial-mass 0.825 --metallicity 0.0001 ---initial-mass 0.837 --metallicity 0.0001 ---initial-mass 0.85 --metallicity 0.0001 ---initial-mass 0.862 --metallicity 0.0001 ---initial-mass 0.875 --metallicity 0.0001 ---initial-mass 0.888 --metallicity 0.0001 ---initial-mass 0.901 --metallicity 0.0001 ---initial-mass 0.914 --metallicity 0.0001 ---initial-mass 0.928 --metallicity 0.0001 ---initial-mass 0.942 --metallicity 0.0001 ---initial-mass 0.955 --metallicity 0.0001 ---initial-mass 0.97 --metallicity 0.0001 ---initial-mass 0.984 --metallicity 0.0001 ---initial-mass 0.998 --metallicity 0.0001 ---initial-mass 1.013 --metallicity 0.0001 ---initial-mass 1.028 --metallicity 0.0001 ---initial-mass 1.043 --metallicity 0.0001 ---initial-mass 1.059 --metallicity 0.0001 ---initial-mass 1.074 --metallicity 0.0001 ---initial-mass 1.09 --metallicity 0.0001 ---initial-mass 1.106 --metallicity 0.0001 ---initial-mass 1.123 --metallicity 0.0001 ---initial-mass 1.139 --metallicity 0.0001 ---initial-mass 1.156 --metallicity 0.0001 ---initial-mass 1.173 --metallicity 0.0001 ---initial-mass 1.19 --metallicity 0.0001 ---initial-mass 1.208 --metallicity 0.0001 ---initial-mass 1.226 --metallicity 0.0001 ---initial-mass 1.244 --metallicity 0.0001 ---initial-mass 1.262 --metallicity 0.0001 ---initial-mass 1.281 --metallicity 0.0001 ---initial-mass 1.3 --metallicity 0.0001 ---initial-mass 1.319 --metallicity 0.0001 ---initial-mass 1.338 --metallicity 0.0001 ---initial-mass 1.358 --metallicity 0.0001 ---initial-mass 1.378 --metallicity 0.0001 ---initial-mass 1.399 --metallicity 0.0001 ---initial-mass 1.419 --metallicity 0.0001 ---initial-mass 1.44 --metallicity 0.0001 ---initial-mass 1.461 --metallicity 0.0001 ---initial-mass 1.483 --metallicity 0.0001 ---initial-mass 1.505 --metallicity 0.0001 ---initial-mass 1.527 --metallicity 0.0001 ---initial-mass 1.55 --metallicity 0.0001 ---initial-mass 1.573 --metallicity 0.0001 ---initial-mass 1.596 --metallicity 0.0001 ---initial-mass 1.619 --metallicity 0.0001 ---initial-mass 1.643 --metallicity 0.0001 ---initial-mass 1.667 --metallicity 0.0001 ---initial-mass 1.692 --metallicity 0.0001 ---initial-mass 1.717 --metallicity 0.0001 ---initial-mass 1.742 --metallicity 0.0001 ---initial-mass 1.768 --metallicity 0.0001 ---initial-mass 1.794 --metallicity 0.0001 ---initial-mass 1.821 --metallicity 0.0001 ---initial-mass 1.848 --metallicity 0.0001 ---initial-mass 1.875 --metallicity 0.0001 ---initial-mass 1.903 --metallicity 0.0001 ---initial-mass 1.931 --metallicity 0.0001 ---initial-mass 1.959 --metallicity 0.0001 ---initial-mass 1.988 --metallicity 0.0001 ---initial-mass 2.017 --metallicity 0.0001 ---initial-mass 2.047 --metallicity 0.0001 ---initial-mass 2.077 --metallicity 0.0001 ---initial-mass 2.108 --metallicity 0.0001 ---initial-mass 2.139 --metallicity 0.0001 ---initial-mass 2.171 --metallicity 0.0001 ---initial-mass 2.203 --metallicity 0.0001 ---initial-mass 2.235 --metallicity 0.0001 ---initial-mass 2.268 --metallicity 0.0001 ---initial-mass 2.302 --metallicity 0.0001 ---initial-mass 2.336 --metallicity 0.0001 ---initial-mass 2.37 --metallicity 0.0001 ---initial-mass 2.405 --metallicity 0.0001 ---initial-mass 2.441 --metallicity 0.0001 ---initial-mass 2.477 --metallicity 0.0001 ---initial-mass 2.514 --metallicity 0.0001 ---initial-mass 2.551 --metallicity 0.0001 ---initial-mass 2.588 --metallicity 0.0001 ---initial-mass 2.626 --metallicity 0.0001 ---initial-mass 2.665 --metallicity 0.0001 ---initial-mass 2.705 --metallicity 0.0001 ---initial-mass 2.745 --metallicity 0.0001 ---initial-mass 2.785 --metallicity 0.0001 ---initial-mass 2.826 --metallicity 0.0001 ---initial-mass 2.868 --metallicity 0.0001 ---initial-mass 2.91 --metallicity 0.0001 ---initial-mass 2.953 --metallicity 0.0001 ---initial-mass 2.997 --metallicity 0.0001 ---initial-mass 3.041 --metallicity 0.0001 ---initial-mass 3.086 --metallicity 0.0001 ---initial-mass 3.132 --metallicity 0.0001 ---initial-mass 3.178 --metallicity 0.0001 ---initial-mass 3.225 --metallicity 0.0001 ---initial-mass 3.272 --metallicity 0.0001 ---initial-mass 3.321 --metallicity 0.0001 ---initial-mass 3.37 --metallicity 0.0001 ---initial-mass 3.419 --metallicity 0.0001 ---initial-mass 3.47 --metallicity 0.0001 ---initial-mass 3.521 --metallicity 0.0001 ---initial-mass 3.573 --metallicity 0.0001 ---initial-mass 3.626 --metallicity 0.0001 ---initial-mass 3.679 --metallicity 0.0001 ---initial-mass 3.734 --metallicity 0.0001 ---initial-mass 3.789 --metallicity 0.0001 ---initial-mass 3.845 --metallicity 0.0001 ---initial-mass 3.901 --metallicity 0.0001 ---initial-mass 3.959 --metallicity 0.0001 ---initial-mass 4.018 --metallicity 0.0001 ---initial-mass 4.077 --metallicity 0.0001 ---initial-mass 4.137 --metallicity 0.0001 ---initial-mass 4.198 --metallicity 0.0001 ---initial-mass 4.26 --metallicity 0.0001 ---initial-mass 4.323 --metallicity 0.0001 ---initial-mass 4.387 --metallicity 0.0001 ---initial-mass 4.452 --metallicity 0.0001 ---initial-mass 4.517 --metallicity 0.0001 ---initial-mass 4.584 --metallicity 0.0001 ---initial-mass 4.652 --metallicity 0.0001 ---initial-mass 4.72 --metallicity 0.0001 ---initial-mass 4.79 --metallicity 0.0001 ---initial-mass 4.861 --metallicity 0.0001 ---initial-mass 4.932 --metallicity 0.0001 ---initial-mass 5.005 --metallicity 0.0001 ---initial-mass 5.079 --metallicity 0.0001 ---initial-mass 5.154 --metallicity 0.0001 ---initial-mass 5.23 --metallicity 0.0001 ---initial-mass 5.308 --metallicity 0.0001 ---initial-mass 5.386 --metallicity 0.0001 ---initial-mass 5.465 --metallicity 0.0001 ---initial-mass 5.546 --metallicity 0.0001 ---initial-mass 5.628 --metallicity 0.0001 ---initial-mass 5.711 --metallicity 0.0001 ---initial-mass 5.795 --metallicity 0.0001 ---initial-mass 5.881 --metallicity 0.0001 ---initial-mass 5.968 --metallicity 0.0001 ---initial-mass 6.056 --metallicity 0.0001 ---initial-mass 6.145 --metallicity 0.0001 ---initial-mass 6.236 --metallicity 0.0001 ---initial-mass 6.328 --metallicity 0.0001 ---initial-mass 6.421 --metallicity 0.0001 ---initial-mass 6.516 --metallicity 0.0001 ---initial-mass 6.612 --metallicity 0.0001 ---initial-mass 6.71 --metallicity 0.0001 ---initial-mass 6.809 --metallicity 0.0001 ---initial-mass 6.91 --metallicity 0.0001 ---initial-mass 7.012 --metallicity 0.0001 ---initial-mass 7.115 --metallicity 0.0001 ---initial-mass 7.22 --metallicity 0.0001 ---initial-mass 7.327 --metallicity 0.0001 ---initial-mass 7.435 --metallicity 0.0001 ---initial-mass 7.545 --metallicity 0.0001 ---initial-mass 7.656 --metallicity 0.0001 ---initial-mass 7.769 --metallicity 0.0001 ---initial-mass 7.884 --metallicity 0.0001 ---initial-mass 8.0 --metallicity 0.0001 ---initial-mass 8.118 --metallicity 0.0001 ---initial-mass 8.238 --metallicity 0.0001 ---initial-mass 8.36 --metallicity 0.0001 ---initial-mass 8.483 --metallicity 0.0001 ---initial-mass 8.609 --metallicity 0.0001 ---initial-mass 8.736 --metallicity 0.0001 ---initial-mass 8.865 --metallicity 0.0001 ---initial-mass 8.996 --metallicity 0.0001 ---initial-mass 9.128 --metallicity 0.0001 ---initial-mass 9.263 --metallicity 0.0001 ---initial-mass 9.4 --metallicity 0.0001 ---initial-mass 9.539 --metallicity 0.0001 ---initial-mass 9.679 --metallicity 0.0001 ---initial-mass 9.822 --metallicity 0.0001 ---initial-mass 9.967 --metallicity 0.0001 ---initial-mass 10.115 --metallicity 0.0001 ---initial-mass 10.264 --metallicity 0.0001 ---initial-mass 10.415 --metallicity 0.0001 ---initial-mass 10.569 --metallicity 0.0001 ---initial-mass 10.725 --metallicity 0.0001 ---initial-mass 10.884 --metallicity 0.0001 ---initial-mass 11.044 --metallicity 0.0001 ---initial-mass 11.207 --metallicity 0.0001 ---initial-mass 11.373 --metallicity 0.0001 ---initial-mass 11.541 --metallicity 0.0001 ---initial-mass 11.711 --metallicity 0.0001 ---initial-mass 11.884 --metallicity 0.0001 ---initial-mass 12.059 --metallicity 0.0001 ---initial-mass 12.237 --metallicity 0.0001 ---initial-mass 12.418 --metallicity 0.0001 ---initial-mass 12.601 --metallicity 0.0001 ---initial-mass 12.788 --metallicity 0.0001 ---initial-mass 12.976 --metallicity 0.0001 ---initial-mass 13.168 --metallicity 0.0001 ---initial-mass 13.362 --metallicity 0.0001 ---initial-mass 13.56 --metallicity 0.0001 ---initial-mass 13.76 --metallicity 0.0001 ---initial-mass 13.963 --metallicity 0.0001 ---initial-mass 14.169 --metallicity 0.0001 ---initial-mass 14.378 --metallicity 0.0001 ---initial-mass 14.591 --metallicity 0.0001 ---initial-mass 14.806 --metallicity 0.0001 ---initial-mass 15.024 --metallicity 0.0001 ---initial-mass 15.246 --metallicity 0.0001 ---initial-mass 15.471 --metallicity 0.0001 ---initial-mass 15.7 --metallicity 0.0001 ---initial-mass 15.932 --metallicity 0.0001 ---initial-mass 16.167 --metallicity 0.0001 ---initial-mass 16.406 --metallicity 0.0001 ---initial-mass 16.648 --metallicity 0.0001 ---initial-mass 16.893 --metallicity 0.0001 ---initial-mass 17.143 --metallicity 0.0001 ---initial-mass 17.396 --metallicity 0.0001 ---initial-mass 17.653 --metallicity 0.0001 ---initial-mass 17.913 --metallicity 0.0001 ---initial-mass 18.178 --metallicity 0.0001 ---initial-mass 18.446 --metallicity 0.0001 ---initial-mass 18.719 --metallicity 0.0001 ---initial-mass 18.995 --metallicity 0.0001 ---initial-mass 19.275 --metallicity 0.0001 ---initial-mass 19.56 --metallicity 0.0001 ---initial-mass 19.849 --metallicity 0.0001 ---initial-mass 20.142 --metallicity 0.0001 ---initial-mass 20.439 --metallicity 0.0001 ---initial-mass 20.741 --metallicity 0.0001 ---initial-mass 21.047 --metallicity 0.0001 ---initial-mass 21.358 --metallicity 0.0001 ---initial-mass 21.673 --metallicity 0.0001 ---initial-mass 21.993 --metallicity 0.0001 ---initial-mass 22.318 --metallicity 0.0001 ---initial-mass 22.647 --metallicity 0.0001 ---initial-mass 22.982 --metallicity 0.0001 ---initial-mass 23.321 --metallicity 0.0001 ---initial-mass 23.665 --metallicity 0.0001 ---initial-mass 24.015 --metallicity 0.0001 ---initial-mass 24.369 --metallicity 0.0001 ---initial-mass 24.729 --metallicity 0.0001 ---initial-mass 25.094 --metallicity 0.0001 ---initial-mass 25.465 --metallicity 0.0001 ---initial-mass 25.841 --metallicity 0.0001 ---initial-mass 26.222 --metallicity 0.0001 ---initial-mass 26.609 --metallicity 0.0001 ---initial-mass 27.002 --metallicity 0.0001 ---initial-mass 27.401 --metallicity 0.0001 ---initial-mass 27.805 --metallicity 0.0001 ---initial-mass 28.216 --metallicity 0.0001 ---initial-mass 28.632 --metallicity 0.0001 ---initial-mass 29.055 --metallicity 0.0001 ---initial-mass 29.484 --metallicity 0.0001 ---initial-mass 29.919 --metallicity 0.0001 ---initial-mass 30.361 --metallicity 0.0001 ---initial-mass 30.809 --metallicity 0.0001 ---initial-mass 31.264 --metallicity 0.0001 ---initial-mass 31.726 --metallicity 0.0001 ---initial-mass 32.194 --metallicity 0.0001 ---initial-mass 32.669 --metallicity 0.0001 ---initial-mass 33.152 --metallicity 0.0001 ---initial-mass 33.641 --metallicity 0.0001 ---initial-mass 34.138 --metallicity 0.0001 ---initial-mass 34.642 --metallicity 0.0001 ---initial-mass 35.153 --metallicity 0.0001 ---initial-mass 35.672 --metallicity 0.0001 ---initial-mass 36.199 --metallicity 0.0001 ---initial-mass 36.733 --metallicity 0.0001 ---initial-mass 37.276 --metallicity 0.0001 ---initial-mass 37.826 --metallicity 0.0001 ---initial-mass 38.384 --metallicity 0.0001 ---initial-mass 38.951 --metallicity 0.0001 ---initial-mass 39.526 --metallicity 0.0001 ---initial-mass 40.11 --metallicity 0.0001 ---initial-mass 40.702 --metallicity 0.0001 ---initial-mass 41.303 --metallicity 0.0001 ---initial-mass 41.913 --metallicity 0.0001 ---initial-mass 42.531 --metallicity 0.0001 ---initial-mass 43.159 --metallicity 0.0001 ---initial-mass 43.796 --metallicity 0.0001 ---initial-mass 44.443 --metallicity 0.0001 ---initial-mass 45.099 --metallicity 0.0001 ---initial-mass 45.765 --metallicity 0.0001 ---initial-mass 46.441 --metallicity 0.0001 ---initial-mass 47.126 --metallicity 0.0001 ---initial-mass 47.822 --metallicity 0.0001 ---initial-mass 48.528 --metallicity 0.0001 ---initial-mass 49.245 --metallicity 0.0001 ---initial-mass 49.972 --metallicity 0.0001 ---initial-mass 50.709 --metallicity 0.0001 ---initial-mass 51.458 --metallicity 0.0001 ---initial-mass 52.218 --metallicity 0.0001 ---initial-mass 52.989 --metallicity 0.0001 ---initial-mass 53.771 --metallicity 0.0001 ---initial-mass 54.565 --metallicity 0.0001 ---initial-mass 55.37 --metallicity 0.0001 ---initial-mass 56.188 --metallicity 0.0001 ---initial-mass 57.017 --metallicity 0.0001 ---initial-mass 57.859 --metallicity 0.0001 ---initial-mass 58.713 --metallicity 0.0001 ---initial-mass 59.58 --metallicity 0.0001 ---initial-mass 60.46 --metallicity 0.0001 ---initial-mass 61.352 --metallicity 0.0001 ---initial-mass 62.258 --metallicity 0.0001 ---initial-mass 63.177 --metallicity 0.0001 ---initial-mass 64.11 --metallicity 0.0001 ---initial-mass 65.057 --metallicity 0.0001 ---initial-mass 66.017 --metallicity 0.0001 ---initial-mass 66.992 --metallicity 0.0001 ---initial-mass 67.981 --metallicity 0.0001 ---initial-mass 68.984 --metallicity 0.0001 ---initial-mass 70.003 --metallicity 0.0001 ---initial-mass 71.036 --metallicity 0.0001 ---initial-mass 72.085 --metallicity 0.0001 ---initial-mass 73.149 --metallicity 0.0001 ---initial-mass 74.229 --metallicity 0.0001 ---initial-mass 75.325 --metallicity 0.0001 ---initial-mass 76.437 --metallicity 0.0001 ---initial-mass 77.566 --metallicity 0.0001 ---initial-mass 78.711 --metallicity 0.0001 ---initial-mass 79.873 --metallicity 0.0001 ---initial-mass 81.052 --metallicity 0.0001 ---initial-mass 82.249 --metallicity 0.0001 ---initial-mass 83.463 --metallicity 0.0001 ---initial-mass 84.695 --metallicity 0.0001 ---initial-mass 85.946 --metallicity 0.0001 ---initial-mass 87.215 --metallicity 0.0001 ---initial-mass 88.502 --metallicity 0.0001 ---initial-mass 89.809 --metallicity 0.0001 ---initial-mass 91.135 --metallicity 0.0001 ---initial-mass 92.48 --metallicity 0.0001 ---initial-mass 93.846 --metallicity 0.0001 ---initial-mass 95.231 --metallicity 0.0001 ---initial-mass 96.637 --metallicity 0.0001 ---initial-mass 98.064 --metallicity 0.0001 ---initial-mass 99.512 --metallicity 0.0001 ---initial-mass 100.981 --metallicity 0.0001 ---initial-mass 102.472 --metallicity 0.0001 ---initial-mass 103.984 --metallicity 0.0001 ---initial-mass 105.52 --metallicity 0.0001 ---initial-mass 107.078 --metallicity 0.0001 ---initial-mass 108.658 --metallicity 0.0001 ---initial-mass 110.263 --metallicity 0.0001 ---initial-mass 111.89 --metallicity 0.0001 ---initial-mass 113.542 --metallicity 0.0001 ---initial-mass 115.219 --metallicity 0.0001 ---initial-mass 116.92 --metallicity 0.0001 ---initial-mass 118.646 --metallicity 0.0001 ---initial-mass 120.398 --metallicity 0.0001 ---initial-mass 122.175 --metallicity 0.0001 ---initial-mass 123.979 --metallicity 0.0001 ---initial-mass 125.809 --metallicity 0.0001 ---initial-mass 127.667 --metallicity 0.0001 ---initial-mass 129.551 --metallicity 0.0001 ---initial-mass 131.464 --metallicity 0.0001 ---initial-mass 133.405 --metallicity 0.0001 ---initial-mass 135.375 --metallicity 0.0001 ---initial-mass 137.373 --metallicity 0.0001 ---initial-mass 139.401 --metallicity 0.0001 ---initial-mass 141.459 --metallicity 0.0001 ---initial-mass 143.548 --metallicity 0.0001 ---initial-mass 145.667 --metallicity 0.0001 ---initial-mass 147.818 --metallicity 0.0001 ---initial-mass 150.0 --metallicity 0.0001 +--initial-mass 0.1 --metallicity 0.0001 +--initial-mass 0.101 --metallicity 0.0001 +--initial-mass 0.103 --metallicity 0.0001 +--initial-mass 0.104 --metallicity 0.0001 +--initial-mass 0.106 --metallicity 0.0001 +--initial-mass 0.108 --metallicity 0.0001 +--initial-mass 0.109 --metallicity 0.0001 +--initial-mass 0.111 --metallicity 0.0001 +--initial-mass 0.112 --metallicity 0.0001 +--initial-mass 0.114 --metallicity 0.0001 +--initial-mass 0.116 --metallicity 0.0001 +--initial-mass 0.117 --metallicity 0.0001 +--initial-mass 0.119 --metallicity 0.0001 +--initial-mass 0.121 --metallicity 0.0001 +--initial-mass 0.123 --metallicity 0.0001 +--initial-mass 0.125 --metallicity 0.0001 +--initial-mass 0.126 --metallicity 0.0001 +--initial-mass 0.128 --metallicity 0.0001 +--initial-mass 0.13 --metallicity 0.0001 +--initial-mass 0.132 --metallicity 0.0001 +--initial-mass 0.134 --metallicity 0.0001 +--initial-mass 0.136 --metallicity 0.0001 +--initial-mass 0.138 --metallicity 0.0001 +--initial-mass 0.14 --metallicity 0.0001 +--initial-mass 0.142 --metallicity 0.0001 +--initial-mass 0.144 --metallicity 0.0001 +--initial-mass 0.146 --metallicity 0.0001 +--initial-mass 0.149 --metallicity 0.0001 +--initial-mass 0.151 --metallicity 0.0001 +--initial-mass 0.153 --metallicity 0.0001 +--initial-mass 0.155 --metallicity 0.0001 +--initial-mass 0.158 --metallicity 0.0001 +--initial-mass 0.16 --metallicity 0.0001 +--initial-mass 0.162 --metallicity 0.0001 +--initial-mass 0.165 --metallicity 0.0001 +--initial-mass 0.167 --metallicity 0.0001 +--initial-mass 0.169 --metallicity 0.0001 +--initial-mass 0.172 --metallicity 0.0001 +--initial-mass 0.175 --metallicity 0.0001 +--initial-mass 0.177 --metallicity 0.0001 +--initial-mass 0.18 --metallicity 0.0001 +--initial-mass 0.182 --metallicity 0.0001 +--initial-mass 0.185 --metallicity 0.0001 +--initial-mass 0.188 --metallicity 0.0001 +--initial-mass 0.191 --metallicity 0.0001 +--initial-mass 0.193 --metallicity 0.0001 +--initial-mass 0.196 --metallicity 0.0001 +--initial-mass 0.199 --metallicity 0.0001 +--initial-mass 0.202 --metallicity 0.0001 +--initial-mass 0.205 --metallicity 0.0001 +--initial-mass 0.208 --metallicity 0.0001 +--initial-mass 0.211 --metallicity 0.0001 +--initial-mass 0.214 --metallicity 0.0001 +--initial-mass 0.217 --metallicity 0.0001 +--initial-mass 0.221 --metallicity 0.0001 +--initial-mass 0.224 --metallicity 0.0001 +--initial-mass 0.227 --metallicity 0.0001 +--initial-mass 0.231 --metallicity 0.0001 +--initial-mass 0.234 --metallicity 0.0001 +--initial-mass 0.237 --metallicity 0.0001 +--initial-mass 0.241 --metallicity 0.0001 +--initial-mass 0.244 --metallicity 0.0001 +--initial-mass 0.248 --metallicity 0.0001 +--initial-mass 0.252 --metallicity 0.0001 +--initial-mass 0.255 --metallicity 0.0001 +--initial-mass 0.259 --metallicity 0.0001 +--initial-mass 0.263 --metallicity 0.0001 +--initial-mass 0.267 --metallicity 0.0001 +--initial-mass 0.271 --metallicity 0.0001 +--initial-mass 0.275 --metallicity 0.0001 +--initial-mass 0.279 --metallicity 0.0001 +--initial-mass 0.283 --metallicity 0.0001 +--initial-mass 0.287 --metallicity 0.0001 +--initial-mass 0.292 --metallicity 0.0001 +--initial-mass 0.296 --metallicity 0.0001 +--initial-mass 0.3 --metallicity 0.0001 +--initial-mass 0.305 --metallicity 0.0001 +--initial-mass 0.309 --metallicity 0.0001 +--initial-mass 0.314 --metallicity 0.0001 +--initial-mass 0.318 --metallicity 0.0001 +--initial-mass 0.323 --metallicity 0.0001 +--initial-mass 0.328 --metallicity 0.0001 +--initial-mass 0.333 --metallicity 0.0001 +--initial-mass 0.338 --metallicity 0.0001 +--initial-mass 0.342 --metallicity 0.0001 +--initial-mass 0.348 --metallicity 0.0001 +--initial-mass 0.353 --metallicity 0.0001 +--initial-mass 0.358 --metallicity 0.0001 +--initial-mass 0.363 --metallicity 0.0001 +--initial-mass 0.369 --metallicity 0.0001 +--initial-mass 0.374 --metallicity 0.0001 +--initial-mass 0.379 --metallicity 0.0001 +--initial-mass 0.385 --metallicity 0.0001 +--initial-mass 0.391 --metallicity 0.0001 +--initial-mass 0.397 --metallicity 0.0001 +--initial-mass 0.402 --metallicity 0.0001 +--initial-mass 0.408 --metallicity 0.0001 +--initial-mass 0.414 --metallicity 0.0001 +--initial-mass 0.42 --metallicity 0.0001 +--initial-mass 0.427 --metallicity 0.0001 +--initial-mass 0.433 --metallicity 0.0001 +--initial-mass 0.439 --metallicity 0.0001 +--initial-mass 0.446 --metallicity 0.0001 +--initial-mass 0.452 --metallicity 0.0001 +--initial-mass 0.459 --metallicity 0.0001 +--initial-mass 0.466 --metallicity 0.0001 +--initial-mass 0.473 --metallicity 0.0001 +--initial-mass 0.48 --metallicity 0.0001 +--initial-mass 0.487 --metallicity 0.0001 +--initial-mass 0.494 --metallicity 0.0001 +--initial-mass 0.501 --metallicity 0.0001 +--initial-mass 0.509 --metallicity 0.0001 +--initial-mass 0.516 --metallicity 0.0001 +--initial-mass 0.524 --metallicity 0.0001 +--initial-mass 0.532 --metallicity 0.0001 +--initial-mass 0.539 --metallicity 0.0001 +--initial-mass 0.547 --metallicity 0.0001 +--initial-mass 0.556 --metallicity 0.0001 +--initial-mass 0.564 --metallicity 0.0001 +--initial-mass 0.572 --metallicity 0.0001 +--initial-mass 0.58 --metallicity 0.0001 +--initial-mass 0.589 --metallicity 0.0001 +--initial-mass 0.598 --metallicity 0.0001 +--initial-mass 0.607 --metallicity 0.0001 +--initial-mass 0.616 --metallicity 0.0001 +--initial-mass 0.625 --metallicity 0.0001 +--initial-mass 0.634 --metallicity 0.0001 +--initial-mass 0.643 --metallicity 0.0001 +--initial-mass 0.653 --metallicity 0.0001 +--initial-mass 0.662 --metallicity 0.0001 +--initial-mass 0.672 --metallicity 0.0001 +--initial-mass 0.682 --metallicity 0.0001 +--initial-mass 0.692 --metallicity 0.0001 +--initial-mass 0.702 --metallicity 0.0001 +--initial-mass 0.713 --metallicity 0.0001 +--initial-mass 0.723 --metallicity 0.0001 +--initial-mass 0.734 --metallicity 0.0001 +--initial-mass 0.745 --metallicity 0.0001 +--initial-mass 0.756 --metallicity 0.0001 +--initial-mass 0.767 --metallicity 0.0001 +--initial-mass 0.778 --metallicity 0.0001 +--initial-mass 0.79 --metallicity 0.0001 +--initial-mass 0.801 --metallicity 0.0001 +--initial-mass 0.813 --metallicity 0.0001 +--initial-mass 0.825 --metallicity 0.0001 +--initial-mass 0.837 --metallicity 0.0001 +--initial-mass 0.85 --metallicity 0.0001 +--initial-mass 0.862 --metallicity 0.0001 +--initial-mass 0.875 --metallicity 0.0001 +--initial-mass 0.888 --metallicity 0.0001 +--initial-mass 0.901 --metallicity 0.0001 +--initial-mass 0.914 --metallicity 0.0001 +--initial-mass 0.928 --metallicity 0.0001 +--initial-mass 0.942 --metallicity 0.0001 +--initial-mass 0.955 --metallicity 0.0001 +--initial-mass 0.97 --metallicity 0.0001 +--initial-mass 0.984 --metallicity 0.0001 +--initial-mass 0.998 --metallicity 0.0001 +--initial-mass 1.013 --metallicity 0.0001 +--initial-mass 1.028 --metallicity 0.0001 +--initial-mass 1.043 --metallicity 0.0001 +--initial-mass 1.059 --metallicity 0.0001 +--initial-mass 1.074 --metallicity 0.0001 +--initial-mass 1.09 --metallicity 0.0001 +--initial-mass 1.106 --metallicity 0.0001 +--initial-mass 1.123 --metallicity 0.0001 +--initial-mass 1.139 --metallicity 0.0001 +--initial-mass 1.156 --metallicity 0.0001 +--initial-mass 1.173 --metallicity 0.0001 +--initial-mass 1.19 --metallicity 0.0001 +--initial-mass 1.208 --metallicity 0.0001 +--initial-mass 1.226 --metallicity 0.0001 +--initial-mass 1.244 --metallicity 0.0001 +--initial-mass 1.262 --metallicity 0.0001 +--initial-mass 1.281 --metallicity 0.0001 +--initial-mass 1.3 --metallicity 0.0001 +--initial-mass 1.319 --metallicity 0.0001 +--initial-mass 1.338 --metallicity 0.0001 +--initial-mass 1.358 --metallicity 0.0001 +--initial-mass 1.378 --metallicity 0.0001 +--initial-mass 1.399 --metallicity 0.0001 +--initial-mass 1.419 --metallicity 0.0001 +--initial-mass 1.44 --metallicity 0.0001 +--initial-mass 1.461 --metallicity 0.0001 +--initial-mass 1.483 --metallicity 0.0001 +--initial-mass 1.505 --metallicity 0.0001 +--initial-mass 1.527 --metallicity 0.0001 +--initial-mass 1.55 --metallicity 0.0001 +--initial-mass 1.573 --metallicity 0.0001 +--initial-mass 1.596 --metallicity 0.0001 +--initial-mass 1.619 --metallicity 0.0001 +--initial-mass 1.643 --metallicity 0.0001 +--initial-mass 1.667 --metallicity 0.0001 +--initial-mass 1.692 --metallicity 0.0001 +--initial-mass 1.717 --metallicity 0.0001 +--initial-mass 1.742 --metallicity 0.0001 +--initial-mass 1.768 --metallicity 0.0001 +--initial-mass 1.794 --metallicity 0.0001 +--initial-mass 1.821 --metallicity 0.0001 +--initial-mass 1.848 --metallicity 0.0001 +--initial-mass 1.875 --metallicity 0.0001 +--initial-mass 1.903 --metallicity 0.0001 +--initial-mass 1.931 --metallicity 0.0001 +--initial-mass 1.959 --metallicity 0.0001 +--initial-mass 1.988 --metallicity 0.0001 +--initial-mass 2.017 --metallicity 0.0001 +--initial-mass 2.047 --metallicity 0.0001 +--initial-mass 2.077 --metallicity 0.0001 +--initial-mass 2.108 --metallicity 0.0001 +--initial-mass 2.139 --metallicity 0.0001 +--initial-mass 2.171 --metallicity 0.0001 +--initial-mass 2.203 --metallicity 0.0001 +--initial-mass 2.235 --metallicity 0.0001 +--initial-mass 2.268 --metallicity 0.0001 +--initial-mass 2.302 --metallicity 0.0001 +--initial-mass 2.336 --metallicity 0.0001 +--initial-mass 2.37 --metallicity 0.0001 +--initial-mass 2.405 --metallicity 0.0001 +--initial-mass 2.441 --metallicity 0.0001 +--initial-mass 2.477 --metallicity 0.0001 +--initial-mass 2.514 --metallicity 0.0001 +--initial-mass 2.551 --metallicity 0.0001 +--initial-mass 2.588 --metallicity 0.0001 +--initial-mass 2.626 --metallicity 0.0001 +--initial-mass 2.665 --metallicity 0.0001 +--initial-mass 2.705 --metallicity 0.0001 +--initial-mass 2.745 --metallicity 0.0001 +--initial-mass 2.785 --metallicity 0.0001 +--initial-mass 2.826 --metallicity 0.0001 +--initial-mass 2.868 --metallicity 0.0001 +--initial-mass 2.91 --metallicity 0.0001 +--initial-mass 2.953 --metallicity 0.0001 +--initial-mass 2.997 --metallicity 0.0001 +--initial-mass 3.041 --metallicity 0.0001 +--initial-mass 3.086 --metallicity 0.0001 +--initial-mass 3.132 --metallicity 0.0001 +--initial-mass 3.178 --metallicity 0.0001 +--initial-mass 3.225 --metallicity 0.0001 +--initial-mass 3.272 --metallicity 0.0001 +--initial-mass 3.321 --metallicity 0.0001 +--initial-mass 3.37 --metallicity 0.0001 +--initial-mass 3.419 --metallicity 0.0001 +--initial-mass 3.47 --metallicity 0.0001 +--initial-mass 3.521 --metallicity 0.0001 +--initial-mass 3.573 --metallicity 0.0001 +--initial-mass 3.626 --metallicity 0.0001 +--initial-mass 3.679 --metallicity 0.0001 +--initial-mass 3.734 --metallicity 0.0001 +--initial-mass 3.789 --metallicity 0.0001 +--initial-mass 3.845 --metallicity 0.0001 +--initial-mass 3.901 --metallicity 0.0001 +--initial-mass 3.959 --metallicity 0.0001 +--initial-mass 4.018 --metallicity 0.0001 +--initial-mass 4.077 --metallicity 0.0001 +--initial-mass 4.137 --metallicity 0.0001 +--initial-mass 4.198 --metallicity 0.0001 +--initial-mass 4.26 --metallicity 0.0001 +--initial-mass 4.323 --metallicity 0.0001 +--initial-mass 4.387 --metallicity 0.0001 +--initial-mass 4.452 --metallicity 0.0001 +--initial-mass 4.517 --metallicity 0.0001 +--initial-mass 4.584 --metallicity 0.0001 +--initial-mass 4.652 --metallicity 0.0001 +--initial-mass 4.72 --metallicity 0.0001 +--initial-mass 4.79 --metallicity 0.0001 +--initial-mass 4.861 --metallicity 0.0001 +--initial-mass 4.932 --metallicity 0.0001 +--initial-mass 5.005 --metallicity 0.0001 +--initial-mass 5.079 --metallicity 0.0001 +--initial-mass 5.154 --metallicity 0.0001 +--initial-mass 5.23 --metallicity 0.0001 +--initial-mass 5.308 --metallicity 0.0001 +--initial-mass 5.386 --metallicity 0.0001 +--initial-mass 5.465 --metallicity 0.0001 +--initial-mass 5.546 --metallicity 0.0001 +--initial-mass 5.628 --metallicity 0.0001 +--initial-mass 5.711 --metallicity 0.0001 +--initial-mass 5.795 --metallicity 0.0001 +--initial-mass 5.881 --metallicity 0.0001 +--initial-mass 5.968 --metallicity 0.0001 +--initial-mass 6.056 --metallicity 0.0001 +--initial-mass 6.145 --metallicity 0.0001 +--initial-mass 6.236 --metallicity 0.0001 +--initial-mass 6.328 --metallicity 0.0001 +--initial-mass 6.421 --metallicity 0.0001 +--initial-mass 6.516 --metallicity 0.0001 +--initial-mass 6.612 --metallicity 0.0001 +--initial-mass 6.71 --metallicity 0.0001 +--initial-mass 6.809 --metallicity 0.0001 +--initial-mass 6.91 --metallicity 0.0001 +--initial-mass 7.012 --metallicity 0.0001 +--initial-mass 7.115 --metallicity 0.0001 +--initial-mass 7.22 --metallicity 0.0001 +--initial-mass 7.327 --metallicity 0.0001 +--initial-mass 7.435 --metallicity 0.0001 +--initial-mass 7.545 --metallicity 0.0001 +--initial-mass 7.656 --metallicity 0.0001 +--initial-mass 7.769 --metallicity 0.0001 +--initial-mass 7.884 --metallicity 0.0001 +--initial-mass 8.0 --metallicity 0.0001 +--initial-mass 8.118 --metallicity 0.0001 +--initial-mass 8.238 --metallicity 0.0001 +--initial-mass 8.36 --metallicity 0.0001 +--initial-mass 8.483 --metallicity 0.0001 +--initial-mass 8.609 --metallicity 0.0001 +--initial-mass 8.736 --metallicity 0.0001 +--initial-mass 8.865 --metallicity 0.0001 +--initial-mass 8.996 --metallicity 0.0001 +--initial-mass 9.128 --metallicity 0.0001 +--initial-mass 9.263 --metallicity 0.0001 +--initial-mass 9.4 --metallicity 0.0001 +--initial-mass 9.539 --metallicity 0.0001 +--initial-mass 9.679 --metallicity 0.0001 +--initial-mass 9.822 --metallicity 0.0001 +--initial-mass 9.967 --metallicity 0.0001 +--initial-mass 10.115 --metallicity 0.0001 +--initial-mass 10.264 --metallicity 0.0001 +--initial-mass 10.415 --metallicity 0.0001 +--initial-mass 10.569 --metallicity 0.0001 +--initial-mass 10.725 --metallicity 0.0001 +--initial-mass 10.884 --metallicity 0.0001 +--initial-mass 11.044 --metallicity 0.0001 +--initial-mass 11.207 --metallicity 0.0001 +--initial-mass 11.373 --metallicity 0.0001 +--initial-mass 11.541 --metallicity 0.0001 +--initial-mass 11.711 --metallicity 0.0001 +--initial-mass 11.884 --metallicity 0.0001 +--initial-mass 12.059 --metallicity 0.0001 +--initial-mass 12.237 --metallicity 0.0001 +--initial-mass 12.418 --metallicity 0.0001 +--initial-mass 12.601 --metallicity 0.0001 +--initial-mass 12.788 --metallicity 0.0001 +--initial-mass 12.976 --metallicity 0.0001 +--initial-mass 13.168 --metallicity 0.0001 +--initial-mass 13.362 --metallicity 0.0001 +--initial-mass 13.56 --metallicity 0.0001 +--initial-mass 13.76 --metallicity 0.0001 +--initial-mass 13.963 --metallicity 0.0001 +--initial-mass 14.169 --metallicity 0.0001 +--initial-mass 14.378 --metallicity 0.0001 +--initial-mass 14.591 --metallicity 0.0001 +--initial-mass 14.806 --metallicity 0.0001 +--initial-mass 15.024 --metallicity 0.0001 +--initial-mass 15.246 --metallicity 0.0001 +--initial-mass 15.471 --metallicity 0.0001 +--initial-mass 15.7 --metallicity 0.0001 +--initial-mass 15.932 --metallicity 0.0001 +--initial-mass 16.167 --metallicity 0.0001 +--initial-mass 16.406 --metallicity 0.0001 +--initial-mass 16.648 --metallicity 0.0001 +--initial-mass 16.893 --metallicity 0.0001 +--initial-mass 17.143 --metallicity 0.0001 +--initial-mass 17.396 --metallicity 0.0001 +--initial-mass 17.653 --metallicity 0.0001 +--initial-mass 17.913 --metallicity 0.0001 +--initial-mass 18.178 --metallicity 0.0001 +--initial-mass 18.446 --metallicity 0.0001 +--initial-mass 18.719 --metallicity 0.0001 +--initial-mass 18.995 --metallicity 0.0001 +--initial-mass 19.275 --metallicity 0.0001 +--initial-mass 19.56 --metallicity 0.0001 +--initial-mass 19.849 --metallicity 0.0001 +--initial-mass 20.142 --metallicity 0.0001 +--initial-mass 20.439 --metallicity 0.0001 +--initial-mass 20.741 --metallicity 0.0001 +--initial-mass 21.047 --metallicity 0.0001 +--initial-mass 21.358 --metallicity 0.0001 +--initial-mass 21.673 --metallicity 0.0001 +--initial-mass 21.993 --metallicity 0.0001 +--initial-mass 22.318 --metallicity 0.0001 +--initial-mass 22.647 --metallicity 0.0001 +--initial-mass 22.982 --metallicity 0.0001 +--initial-mass 23.321 --metallicity 0.0001 +--initial-mass 23.665 --metallicity 0.0001 +--initial-mass 24.015 --metallicity 0.0001 +--initial-mass 24.369 --metallicity 0.0001 +--initial-mass 24.729 --metallicity 0.0001 +--initial-mass 25.094 --metallicity 0.0001 +--initial-mass 25.465 --metallicity 0.0001 +--initial-mass 25.841 --metallicity 0.0001 +--initial-mass 26.222 --metallicity 0.0001 +--initial-mass 26.609 --metallicity 0.0001 +--initial-mass 27.002 --metallicity 0.0001 +--initial-mass 27.401 --metallicity 0.0001 +--initial-mass 27.805 --metallicity 0.0001 +--initial-mass 28.216 --metallicity 0.0001 +--initial-mass 28.632 --metallicity 0.0001 +--initial-mass 29.055 --metallicity 0.0001 +--initial-mass 29.484 --metallicity 0.0001 +--initial-mass 29.919 --metallicity 0.0001 +--initial-mass 30.361 --metallicity 0.0001 +--initial-mass 30.809 --metallicity 0.0001 +--initial-mass 31.264 --metallicity 0.0001 +--initial-mass 31.726 --metallicity 0.0001 +--initial-mass 32.194 --metallicity 0.0001 +--initial-mass 32.669 --metallicity 0.0001 +--initial-mass 33.152 --metallicity 0.0001 +--initial-mass 33.641 --metallicity 0.0001 +--initial-mass 34.138 --metallicity 0.0001 +--initial-mass 34.642 --metallicity 0.0001 +--initial-mass 35.153 --metallicity 0.0001 +--initial-mass 35.672 --metallicity 0.0001 +--initial-mass 36.199 --metallicity 0.0001 +--initial-mass 36.733 --metallicity 0.0001 +--initial-mass 37.276 --metallicity 0.0001 +--initial-mass 37.826 --metallicity 0.0001 +--initial-mass 38.384 --metallicity 0.0001 +--initial-mass 38.951 --metallicity 0.0001 +--initial-mass 39.526 --metallicity 0.0001 +--initial-mass 40.11 --metallicity 0.0001 +--initial-mass 40.702 --metallicity 0.0001 +--initial-mass 41.303 --metallicity 0.0001 +--initial-mass 41.913 --metallicity 0.0001 +--initial-mass 42.531 --metallicity 0.0001 +--initial-mass 43.159 --metallicity 0.0001 +--initial-mass 43.796 --metallicity 0.0001 +--initial-mass 44.443 --metallicity 0.0001 +--initial-mass 45.099 --metallicity 0.0001 +--initial-mass 45.765 --metallicity 0.0001 +--initial-mass 46.441 --metallicity 0.0001 +--initial-mass 47.126 --metallicity 0.0001 +--initial-mass 47.822 --metallicity 0.0001 +--initial-mass 48.528 --metallicity 0.0001 +--initial-mass 49.245 --metallicity 0.0001 +--initial-mass 49.972 --metallicity 0.0001 +--initial-mass 50.709 --metallicity 0.0001 +--initial-mass 51.458 --metallicity 0.0001 +--initial-mass 52.218 --metallicity 0.0001 +--initial-mass 52.989 --metallicity 0.0001 +--initial-mass 53.771 --metallicity 0.0001 +--initial-mass 54.565 --metallicity 0.0001 +--initial-mass 55.37 --metallicity 0.0001 +--initial-mass 56.188 --metallicity 0.0001 +--initial-mass 57.017 --metallicity 0.0001 +--initial-mass 57.859 --metallicity 0.0001 +--initial-mass 58.713 --metallicity 0.0001 +--initial-mass 59.58 --metallicity 0.0001 +--initial-mass 60.46 --metallicity 0.0001 +--initial-mass 61.352 --metallicity 0.0001 +--initial-mass 62.258 --metallicity 0.0001 +--initial-mass 63.177 --metallicity 0.0001 +--initial-mass 64.11 --metallicity 0.0001 +--initial-mass 65.057 --metallicity 0.0001 +--initial-mass 66.017 --metallicity 0.0001 +--initial-mass 66.992 --metallicity 0.0001 +--initial-mass 67.981 --metallicity 0.0001 +--initial-mass 68.984 --metallicity 0.0001 +--initial-mass 70.003 --metallicity 0.0001 +--initial-mass 71.036 --metallicity 0.0001 +--initial-mass 72.085 --metallicity 0.0001 +--initial-mass 73.149 --metallicity 0.0001 +--initial-mass 74.229 --metallicity 0.0001 +--initial-mass 75.325 --metallicity 0.0001 +--initial-mass 76.437 --metallicity 0.0001 +--initial-mass 77.566 --metallicity 0.0001 +--initial-mass 78.711 --metallicity 0.0001 +--initial-mass 79.873 --metallicity 0.0001 +--initial-mass 81.052 --metallicity 0.0001 +--initial-mass 82.249 --metallicity 0.0001 +--initial-mass 83.463 --metallicity 0.0001 +--initial-mass 84.695 --metallicity 0.0001 +--initial-mass 85.946 --metallicity 0.0001 +--initial-mass 87.215 --metallicity 0.0001 +--initial-mass 88.502 --metallicity 0.0001 +--initial-mass 89.809 --metallicity 0.0001 +--initial-mass 91.135 --metallicity 0.0001 +--initial-mass 92.48 --metallicity 0.0001 +--initial-mass 93.846 --metallicity 0.0001 +--initial-mass 95.231 --metallicity 0.0001 +--initial-mass 96.637 --metallicity 0.0001 +--initial-mass 98.064 --metallicity 0.0001 +--initial-mass 99.512 --metallicity 0.0001 +--initial-mass 100.981 --metallicity 0.0001 +--initial-mass 102.472 --metallicity 0.0001 +--initial-mass 103.984 --metallicity 0.0001 +--initial-mass 105.52 --metallicity 0.0001 +--initial-mass 107.078 --metallicity 0.0001 +--initial-mass 108.658 --metallicity 0.0001 +--initial-mass 110.263 --metallicity 0.0001 +--initial-mass 111.89 --metallicity 0.0001 +--initial-mass 113.542 --metallicity 0.0001 +--initial-mass 115.219 --metallicity 0.0001 +--initial-mass 116.92 --metallicity 0.0001 +--initial-mass 118.646 --metallicity 0.0001 +--initial-mass 120.398 --metallicity 0.0001 +--initial-mass 122.175 --metallicity 0.0001 +--initial-mass 123.979 --metallicity 0.0001 +--initial-mass 125.809 --metallicity 0.0001 +--initial-mass 127.667 --metallicity 0.0001 +--initial-mass 129.551 --metallicity 0.0001 +--initial-mass 131.464 --metallicity 0.0001 +--initial-mass 133.405 --metallicity 0.0001 +--initial-mass 135.375 --metallicity 0.0001 +--initial-mass 137.373 --metallicity 0.0001 +--initial-mass 139.401 --metallicity 0.0001 +--initial-mass 141.459 --metallicity 0.0001 +--initial-mass 143.548 --metallicity 0.0001 +--initial-mass 145.667 --metallicity 0.0001 +--initial-mass 147.818 --metallicity 0.0001 +--initial-mass 150.0 --metallicity 0.0001 diff --git a/misc/unsupported_utils/compasUtils.py b/misc/unsupported_utils/compasUtils.py index 84c1295fa..9de8af4d2 100644 --- a/misc/unsupported_utils/compasUtils.py +++ b/misc/unsupported_utils/compasUtils.py @@ -3,10 +3,10 @@ ######################################################################## -### -### Function to print the data from a given COMPAS HDF5 group +### +### Function to print the data from a given COMPAS HDF5 group ### in a readable pandas template -### +### ######################################################################## def printCompasDetails(data, *seeds, mask=()): @@ -16,13 +16,13 @@ def printCompasDetails(data, *seeds, mask=()): list_of_keys = list(data.keys()) # Check if seed parameter exists - if not, just print without (e.g RunDetails) - if ('SEED' in list_of_keys) | ('SEED>MT' in list_of_keys): # Most output files + if ('SEED' in list_of_keys) | ('SEED>MT' in list_of_keys): # Most output files #SEED>MT is a relic from older versions, but we leave this in for backwards compatibility # Set the seed name parameter, mask on seeds as needed, and set the index seedVariableName='SEED' if ('SEED' in list_of_keys) else 'SEED>MT' list_of_keys.remove(seedVariableName) # this is the index above, don't want to include it - + allSeeds = data[seedVariableName][()] seedsMask = np.in1d(allSeeds, seeds) if len(seeds) == 0: # if any seed is included, do not reset the mask @@ -40,7 +40,7 @@ def printCompasDetails(data, *seeds, mask=()): for key in list_of_keys: if '-Derivation' not in key: keys_not_derivations.append(key) - + # Some parameter values are string types, formatted as np.bytes_, need to convert back def convert_strings(param_array): if isinstance(param_array[0], np.bytes_): @@ -63,17 +63,17 @@ def convert_strings(param_array): ######################################################################## -### +### ### Get event histories of MT data, SN data, and combined MT, SN data -### +### ######################################################################## -def getMtEvents(MT): +def getMtEvents(MT): """ This function takes in the `BSE_RLOF` output category from COMPAS, and returns the information - on the Mass Transfer (MT) events that happen for each seed. The events do not have to be in order, + on the Mass Transfer (MT) events that happen for each seed. The events do not have to be in order, either chronologically or by seed, this function will reorder them as required. - + OUT: tuple of (returnedSeeds, returnedEvents, returnedTimes) returnedSeeds (list): ordered list of the unique seeds in the MT file @@ -93,8 +93,8 @@ def getMtEvents(MT): # We want the return arrays sorted by seed, so sort here. mtSeedsInds = np.lexsort((mtTimes, mtSeeds)) # sort by seeds then times - lexsort sorts by the last column first... - mtSeeds = mtSeeds[mtSeedsInds] - mtTimes = mtTimes[mtSeedsInds] + mtSeeds = mtSeeds[mtSeedsInds] + mtTimes = mtTimes[mtSeedsInds] mtPrimaryStype = mtPrimaryStype[mtSeedsInds] mtSecondaryStype = mtSecondaryStype[mtSeedsInds] mtIsRlof1 = mtIsRlof1[mtSeedsInds] @@ -111,7 +111,7 @@ def getMtEvents(MT): for seedIndex, thisSeed in enumerate(mtSeeds): # iterate over all RLOF file entries thisTime = mtTimes[seedIndex] # time for this RLOF file entry - thisEvent = (mtPrimaryStype[seedIndex], mtSecondaryStype[seedIndex], + thisEvent = (mtPrimaryStype[seedIndex], mtSecondaryStype[seedIndex], mtIsRlof1[seedIndex], mtIsRlof2[seedIndex], mtIsCEE[seedIndex]) # construct event tuple # If this is an entirely new seed: @@ -123,8 +123,8 @@ def getMtEvents(MT): # Add event, if it is not a duplicate try: - eventIndex = returnedEvents[-1].index(thisEvent) # find eventIndex of this particular event tuple in the array of events for this seed - if thisTime > returnedTimes[-1][eventIndex]: # ^ if event is not a duplicate, this will throw a ValueError + eventIndex = returnedEvents[-1].index(thisEvent) # find eventIndex of this particular event tuple in the array of events for this seed + if thisTime > returnedTimes[-1][eventIndex]: # ^ if event is not a duplicate, this will throw a ValueError returnedTimes[-1][eventIndex] = thisTime # if event is duplicate, update time to the later of the duplicates except ValueError: # event is not a duplicate: returnedEvents[-1].append(thisEvent) # record new event tuple for this seed @@ -133,21 +133,21 @@ def getMtEvents(MT): return returnedSeeds, returnedEvents, returnedTimes # see above for description -def getSnEvents(SN): +def getSnEvents(SN): """ This function takes in the `BSE_Supernovae` output category from COMPAS, and returns the information on the Supernova (SN) events that happen for each seed. The events do not have to be in order chronologically, this function will reorder them as required. - + OUT: - tuple of (returnedSeeds, returnedEvents, returnedTimes) + tuple of (returnedSeeds, returnedEvents, returnedTimes) returnedSeeds (list): ordered list of all the unique seeds in the SN file returnedEvents (list): list of sublists, where each sublist contains all the SN events for a given seed. SN event tuples take the form : (stellarTypeProgenitor, stellarTypeRemnant, whichStarIsProgenitor, isBinaryUnbound) returnedTimes (list): is a list of sublists of times of each of the SN events """ - + snSeeds = SN['SEED'][()] snTimes = SN['Time'][()] snProgStype = SN['Stellar_Type_Prev(SN)'][()] @@ -157,13 +157,13 @@ def getSnEvents(SN): # We want the return arrays sorted by seed, so sort here. snSeedsInds = np.lexsort((snTimes, snSeeds)) # sort by seeds then times - lexsort sorts by the last column first... - snSeeds = snSeeds[snSeedsInds] - snTimes = snTimes[snSeedsInds] + snSeeds = snSeeds[snSeedsInds] + snTimes = snTimes[snSeedsInds] snProgStype = snProgStype[snSeedsInds] snRemnStype = snRemnStype[snSeedsInds] snWhichProg = snWhichProg[snSeedsInds] snIsUnbound = snIsUnbound[snSeedsInds] - + # Process the SN events returnedSeeds = [] # array of seeds - will only contain seeds that have SN events @@ -174,9 +174,9 @@ def getSnEvents(SN): for seedIndex, thisSeed in enumerate(snSeeds): # iterate over all SN file entries thisTime = snTimes[seedIndex] # time for this SN file entry - thisEvent = (snProgStype[seedIndex], snRemnStype[seedIndex], + thisEvent = (snProgStype[seedIndex], snRemnStype[seedIndex], snWhichProg[seedIndex], snIsUnbound[seedIndex]) # construct event tuple - + # If this is an entirely new seed: if thisSeed != lastSeed: # same seed as last seed processed? returnedSeeds.append(thisSeed) # no - new seed, record it @@ -186,7 +186,7 @@ def getSnEvents(SN): else: # yes - second SN event for this seed returnedTimes[-1].append(thisTime) # append time at end of array returnedEvents[-1].append(thisEvent) # append event at end of array - + return returnedSeeds, returnedEvents, returnedTimes # see above for description @@ -199,7 +199,7 @@ def getEventHistory(h5file, exclude_null=False): OUT: tuple of (returnedSeeds, returnedEvents) returnedSeeds (list): ordered list of all seeds in the output - returnedEvents (list): a list of the collected SN and MT events from the + returnedEvents (list): a list of the collected SN and MT events from the getMtEvents and getSnEvents functions above """ @@ -227,7 +227,7 @@ def getEventHistory(h5file, exclude_null=False): seedsToIterate = np.sort(np.unique(np.append(mtSeeds, snSeeds))) # iterate over all the seeds that have either MT or SN events else: seedsToIterate = allSeeds - + idxOrdered = np.argsort(seedsToIterate) returnedSeeds = [None] * np.size(seedsToIterate) # array of seeds - will only contain seeds that have events (of any type) returnedEvents = [None] * np.size(seedsToIterate) # array of events - same size as returnedSeeds (includes event times) @@ -242,7 +242,7 @@ def getEventHistory(h5file, exclude_null=False): seedEvents.append(('MT', mtTimes[mtIndex][eventIndex], *mtEvents[mtIndex][eventIndex])) mtIndex += 1 - # Collect any SN events for this seed, add the time of the event and the event type + # Collect any SN events for this seed, add the time of the event and the event type while snIndex < numSnSeeds and snSeeds[snIndex] == seed: for eventIndex, event in enumerate(snEvents[snIndex]): seedEvents.append(('SN', snTimes[snIndex][eventIndex], *snEvents[snIndex][eventIndex])) @@ -258,9 +258,9 @@ def getEventHistory(h5file, exclude_null=False): ########################################### -### +### ### Produce strings of the event histories -### +### ########################################### def buildEventString(events): @@ -270,24 +270,24 @@ def buildEventString(events): events (list of tuples): events output from getEventHistory() OUT: eventString (string): string representing the event history of the binary - - MT strings look like: - P>S, PS, P, < is RLOF (1->2 or 1<-2) or = for CEE SN strings look like: - P*SR for star1 the SN progenitor,or + P*SR for star1 the SN progenitor,or R*SP for star2 the SN progenitor, - where P is progenitor type, R is remnant type, + where P is progenitor type, R is remnant type, S is state (I for intact, U for unbound) Event strings for the same seed are separated by the undesrcore character ('_') """ - + # Empty event if len(events) == 0: return 'NA' - + eventStr = '' # event string for this star for event in events: if event[0] == 'MT': # MT event @@ -297,7 +297,7 @@ def buildEventString(events): else: # assume SN event (until other event types are added...) eventStr += str(event[2]) if event[4] == 1 else str(event[3]) # Progenitor or Remnant depending upon which star is the SN eventStr += '*U' if event[5] else '*I' # unbound or intact - eventStr += str(event[3]) if event[4] == 1 else str(event[2]) # Progenitor or Remnant depending upon which star is the SN + eventStr += str(event[3]) if event[4] == 1 else str(event[2]) # Progenitor or Remnant depending upon which star is the SN eventStr += '_' # event separator @@ -315,14 +315,14 @@ def getEventStrings(h5file=None, allEvents=None): eventStrings (list): list of strings of the event history of each seed """ - # If output is + # If output is if (h5file == None) & (allEvents == None): - return + return elif (allEvents == None): _, allEvents = getEventHistory(h5file) - + eventStrings = [] # array of event strings to be returned - for eventsForGivenSeed in allEvents: + for eventsForGivenSeed in allEvents: eventString = buildEventString(eventsForGivenSeed) eventStrings.append(eventString) # append event string for this star (pop the last underscore first) diff --git a/misc/unsupported_utils/h5rewrite.py b/misc/unsupported_utils/h5rewrite.py index 0189424c7..e7821a6e2 100644 --- a/misc/unsupported_utils/h5rewrite.py +++ b/misc/unsupported_utils/h5rewrite.py @@ -46,7 +46,7 @@ def createDataInNewH5(h_old, h_new, filename, columns, seeds): dataNew = h_new[filename].create_dataset(column, data=data) dataNew.attrs['units'] = unit #add attribute comment - + def reduceH5(pathToOld = None, pathToNew = None, dictColumns=None, dictSeeds=None): @@ -81,7 +81,7 @@ def reduceH5(pathToOld = None, pathToNew = None, dictColumns=None, dictSeeds=Non sanityChecks(h_old, filename, dictColumns[filename], dictSeeds[filename]) createDataInNewH5(h_old, h_new, filename, dictColumns[filename], dictSeeds[filename]) # RTW - + h_old.close() h_new.close() @@ -113,10 +113,10 @@ def printAllColumnsInH5(pathToData): #It means I add X spaces to line it print('\t column name%sunit%slength'%(29*' ',16*' ')) print('\t '+'-----------------'*4) - + #In this file give me all the column names columns = Data[File].keys() - + #for every column in the columns for nrc,column in enumerate(columns): #always want the column name printed in 40 char diff --git a/misc/unsupported_utils/magnitude_module.py b/misc/unsupported_utils/magnitude_module.py index f723346af..e2905b2c3 100644 --- a/misc/unsupported_utils/magnitude_module.py +++ b/misc/unsupported_utils/magnitude_module.py @@ -1,9 +1,9 @@ """ -These are a set of functions to calculate the magnitudes of stars given luminosities, temperatures, spectral distributions, passband transmissivities, and wavelengths. These functions were used mainly to calculate the magnitudes of systems from COMPAS runs. +These are a set of functions to calculate the magnitudes of stars given luminosities, temperatures, spectral distributions, passband transmissivities, and wavelengths. These functions were used mainly to calculate the magnitudes of systems from COMPAS runs. If you would like to use a spectral distribution that is not the planck distribution you can go to https://pysynphot.readthedocs.io/en/latest/index.html. They provide various atmospheric models and explain how to access them. Once you have access to one of these atmospheric model spectral distributions you can use the functions in this file. -Note: PySynPhot does have functionality to create passbands and convolve them with any spectral distribution in PySynPhot, so you can try to just use PySynPhot instead of some functions in this file +Note: PySynPhot does have functionality to create passbands and convolve them with any spectral distribution in PySynPhot, so you can try to just use PySynPhot instead of some functions in this file Note: Information for different passbands can be found at http://svo2.cab.inta-csic.es/theory/fps/ @@ -16,7 +16,7 @@ C = 2.99792458e8 # Speed of Light in SI units H = 6.62607015e-34 # Planck's constant in SI units SIGMA = 5.670374419e-8 # Stefan-Boltzmann Constant in SI units -SUNRADIUS = 6.957e8 # Radius of Sun in meters +SUNRADIUS = 6.957e8 # Radius of Sun in meters SUNLUM = 3.828e26 # in watts SUNTEMP = 5778 # in Kelvin STARDIST = 3.086e17 # 10 parsecs in meters @@ -24,78 +24,78 @@ def getEnergyCoeff(spectrum, transms, wavelengths): ''' Returns the average flux per wavelength of a star using a specified spectral distribution, for a given passband. - + Parameters: spectrum (1D array): The spectral distribution used for your source (units: watts/(m**3)) transms (1D array): The transmissivities of the passband (units: None) wavelengths (1D array): The appropriate wavelengths for passband (units: meters) - + Returns: energyCoeff (number): The average flux per wavelength (units: watts/(m**2*nm)) - + ''' stepSize = getStepSize(wavelengths) # Units of meters - + denominatorIntegrand = np.multiply(transms, wavelengths) numeratorIntegrand = np.multiply(1e-9*spectrum, denominatorIntegrand) - + numerator = integrate(numeratorIntegrand, stepSize) denominator = integrate(denominatorIntegrand, stepSize) - + energyCoeff = np.divide(numerator, denominator) - + return energyCoeff def getEnergyCoeffs(spectrums, transms, wavelengths): ''' Returns an array of average flux per wavelength for an array of spectral distributions, for a given passband - + Parameters: spectrums (1D array): The spectral distribution used for your sources (units: watts/(m**3)) transms (1D array): The transmissivities of the passband (units: None) wavelengths (1D array): The appropriate wavelengths for passband (units: meters) - + Returns: energyCoeffs (1D array): Array of average flux per wavelength (units: watts/(m**2*nm) ''' energyCoeffs = np.array([getEnergyCoeff(spectrum, transms, wavelengths) for spectrum in spectrums]) - + return energyCoeffs def getAvgEnergy(lum, temp, energyCoeff, distToStar): ''' Returns the average flux per wavelength that detector passband sees - - Parameters: + + Parameters: lum (number): Luminosity of star (units: solar luminosity) temp (number): Temperature of star (units: kelvin) energyCoeff (number): Average flux per wavelength that star emits at given temperature (units: watts/(m**2*nm)) distToStar (number): The distance between the detector and the star (units: meters) - + Returns: avgEnergy (number): Average flux per wavelength that detector passband sees (units: watts/(m**2*nm)) - + ''' starRadius = getStarRadius(lum*SUNLUM, temp) avgEnergy = energyCoeff*(starRadius/distToStar)**2 - + return avgEnergy def getStarMagnitude(lum, temp, energyCoeff, distToStar, zeroPoint): ''' Returns the magnitude of a star for a passband - + Parameters: lum (number): Luminosity of star (units: solar luminosity) temp (number): Temperature of star (units: kelvin) energyCoeff (number): Average flux per wavelength that star emits at given temperature (units: watts/(m**2*nm)) distToStar (number): The distance between the detector and the star (units: meters) zeroPoint (number): zero point of passband (units: none) - + Returns: magnitude (number): Magnitude of a star for a passband (units: mag) ''' @@ -103,174 +103,174 @@ def getStarMagnitude(lum, temp, energyCoeff, distToStar, zeroPoint): #magnitude = -2.5*np.log10(avgEnergy)+zeroPoint magnitude = -2.5*np.log10(avgEnergy/zeroPoint) - + return magnitude def getStarsMagnitudes(lums, temps, energyCoeffs, distToStar, zeroPoint): ''' Returns magnitudes of stars for a passband - + Parameters: lums (1D array): Luminosities of stars (units: solar luminosity) temps (1D array): Temperatures of stars (units: kelvin) energyCoeffs (1D array): Average flux per wavelength that stars emit at given temperatures (units: watts/(m**2*nm)) distToStar (number): The distance between the detector and the star (units: meters) zeroPoint (number): zero point of passband (units: none) - + Returns: magnitudes (1D array): Magnitudes of stars for a passband (units: mag) ''' numValues = len(lums) - + magnitudes = np.array([getStarMagnitude(lums[i], temps[i], energyCoeffs[i], distToStar, zeroPoint) for i in range(numValues)]) - + return magnitudes def getStarMagnitudesOverTime(lums, temps, energyCoeffs, distToStar, zeroPoint): ''' Returns magnitudes of stars for a passband over time (Different rows of 2D arrays correspond to different instances of time) - + Parameters: lums (2D array): Luminosities of stars over time (units: solar luminosity) temps (2D array): Temperatures of stars over time (units: kelvin) energyCoeffs (2D array): Average flux per wavelength that stars emit at given temperatures over time (units: watts/(m**2*nm)) distToStar (number): The distance between the detector and the star (units: meters) zeroPoint (number): zero point of passband (units: none) - + Returns: magnitudes (2D array): Magnitudes of stars for a passband over time (units: mag) ''' numTimes = len(lums) - + magnitudesOverTime = np.array([np.array(getStarsMagnitudes(lums[t], temps[t], energyCoeffs[t], distToStar, zeroPoint)) for t in range(numTimes)]) - + return magnitudesOverTime def getStarMagnitudeMap(lums, temps, energyCoeffs, distToStar, zeroPoint): ''' Returns 2D map of magnitudes for an array of luminosities and temperatures, for a passband - + Parameters: lums (1D array): Range of luminosities temps (1D array): Range of temperatures energyCoeffs (1D array): Average flux per wavelength that stars emit at given temperatures (units: watts/(m**2*nm)) distToStar (number): The distance between the detector and the star (units: meters) zeroPoint (number): zero point of passband (units: none) - + Returns: magGrid (2D array): A 2D array of magnitudes for each point on the luminosity-temperature coordinate grid (units: mag) ''' numTemps = len(temps) numLums = len(lums) - + magGrid = np.zeros([numTemps, numLums]) - + for j in range(numLums): for i in range(numTemps): magGrid[i][j] = getStarMagnitude(lums[i], temps[j], energyCoeffs[j], distToStar, zeroPoint) - + return magGrid def getBinaryMagnitude(lum1, lum2, temp1, temp2, energyCoeff1, energyCoeff2, distToStar, zeroPoint): ''' Returns the magnitude of a binary for a passband - + Parameters: lum1 (number): Luminosity of star 1 (units: solar luminosity) lum2 (number): Luminosity of star 2 (units: solar luminosity) - + temp1 (number): Temperature of star 1 (units: kelvin) temp2 (number): Temperature of star 2 (units: kelvin) - + energyCoeff1 (number): Average flux per wavelength that star 1 emits at given temperature (units: watts/(m**2*nm)) energyCoeff2 (number): Average flux per wavelength that star 2 emits at given temperature (units: watts/(m**2*nm)) - + distToStar (number): The distance between the detector and the star (units: meters) zeroPoint (number): zero point of passband (units: none) - + Returns: binaryMagnitude (number): Magnitude of a binary for a passband (units: mag) - + ''' starRadius1 = getStarRadius(lum1*SUNLUM, temp1) starRadius2 = getStarRadius(lum2*SUNLUM, temp2) - + avgEnergy1 = energyCoeff1*(starRadius1/distToStar)**2 avgEnergy2 = energyCoeff2*(starRadius2/distToStar)**2 - + avgEnergy = avgEnergy1 + avgEnergy2 - + binaryMagnitude = -2.5*np.log10(avgEnergy/zeroPoint) - + return binaryMagnitude def getPlanckDistribution(temp, wavelengths): ''' Returns the Planck Distribution for a given temperature and set of wavelengths - + Parameters: temp (number): Temperature at which distribution is to be calculated (units: Kelvin) wavelengths (1D array): Wavelengths at which distribution is to be calculated (units: meters) - + Returns: planck_dist (1D array): 1D array of values of the planck distribution at the given temperature for the range of given wavelengths (units: watts/(m**3)) - + ''' exponential = np.exp(H*C/(wavelengths*KB*temp)) planck_dist = (2*np.pi*H*C**2)/(wavelengths**5*(exponential-1)) - + return planck_dist def getStarRadius(lum, temp): ''' Returns the radius of a star, given its temperature and luminosity - + Parameters: lum (number): Luminosity of star (units: watts) temp (number): Temperature of star (units: kelvin) - + Returns: starRadius (number): Radius of star with the given luminosity and temperature (units: meters) ''' starRadius = np.sqrt(lum/(4*np.pi*SIGMA*temp**4)) - + return starRadius def integrate(array, stepSize): ''' Returns the left-hand riemann sum of a function in an interval (approximate definite integral), given a step size - + Parameters: array (1D array): An array with the values of your function at a certain interval (units: anything) stepSize (number): The step size used to integrate your function (units: anything really) - + Returns: sum (number): The left-hand riemann sum of the function in the specified interval (units: anything) ''' sum = 0 - + for val in array: sum += val*stepSize - - return sum + + return sum def getStepSize(array): ''' - Returns the step size of an equally spaced array - + Returns the step size of an equally spaced array + Parameters: array (1D array): Equally spaced array (units: anything) - + Returns: stepSize (number): step size of array (units: anything) ''' stepSize = array[1] - array[0] - return stepSize \ No newline at end of file + return stepSize diff --git a/online-docs/_static/css/COMPAS.css b/online-docs/_static/css/COMPAS.css index f145ecf79..6285d940d 100644 --- a/online-docs/_static/css/COMPAS.css +++ b/online-docs/_static/css/COMPAS.css @@ -2,7 +2,7 @@ /* flat-table allows spanning of columns - list-table doesn't... */ /* unfortunately this takes borders of ALL rst tables */ .rst-content table.docutils, .wy-table-bordered-all, table, thead, tbody, tr, td, th { - border: 0 solid transparent !important; + border: 0 solid transparent !important; background-color: transparent !important; background-image: none !important; font-size: 1em !important; @@ -10,10 +10,10 @@ white-space: normal !important; vertical-align: text-top !important; } - + /* This takes all borders off tables with class 'aligned-text' - at least it does for list-table, but doesn't seem to work for flat-table */ .rst-content table.docutils.aligned-text, .wy-table-bordered-all.aligned-text, .aligned-text table, thead, tbody, tr, td, th { - border: 0 solid transparent !important; + border: 0 solid transparent !important; background-color: transparent !important; background-image: none !important; font-size: 1em !important; @@ -21,7 +21,7 @@ white-space: normal !important; vertical-align: text-top !important; } - + /* This puts borders on tables with class 'bordered' - at least it does for list-table, but doesn't seem to work for flat-table */ .rst-content table.docutils.bordered, .wy-table-bordered-all.bordered, .bordered table, .bordered thead, .bordered tbody, .bordered tr, .bordered td, .bordered th { border-width: 1px !important; diff --git a/online-docs/globals.rst b/online-docs/globals.rst index 5180e271f..e64c03701 100644 --- a/online-docs/globals.rst +++ b/online-docs/globals.rst @@ -10,14 +10,14 @@ .. nbsp - insertt a non-breaking space in the html -.. |_| unicode:: 0xA0 +.. |_| unicode:: 0xA0 :trim: .. rst doesn't seem to support nesting decorations (e.g. can't do '**text**' to get 'text' in bold inside quote marks .. this implements bold text and italic text via CSS (along with the corresponding entry in the CSS file) which can then .. be wrapped in quote marks (or whatever else you want to wrap it in) e.g. some text ':boldtext:`bold_text`' -.. (I wanted to just use role :bold: and :italic:, but I think at least :bold: is defined elsewhere in readthedocs... +.. (I wanted to just use role :bold: and :italic:, but I think at least :bold: is defined elsewhere in readthedocs... .. so I made :bolditalictext: consistent) .. role:: boldtext @@ -31,4 +31,3 @@ .. role:: bolditalictext :class: bolditalictext - diff --git a/online-docs/index.rst b/online-docs/index.rst index 0e718c6ab..710c1ce7b 100644 --- a/online-docs/index.rst +++ b/online-docs/index.rst @@ -11,9 +11,9 @@ COMPAS ====== **C**\ ompact **O**\ bject **M**\ ergers: **P**\ opulation **A**\ strophysics and **S**\ tatistics -is a publicly available rapid stellar / binary population synthesis code designed so that evolution prescriptions and model parameters are -easily adjustable. COMPAS draws properties for a binary star system from a set of initial distributions, and evolves it from -zero-age main sequence to the end of its life as two compact remnants. It has been used for inference from observations of +is a publicly available rapid stellar / binary population synthesis code designed so that evolution prescriptions and model parameters are +easily adjustable. COMPAS draws properties for a binary star system from a set of initial distributions, and evolves it from +zero-age main sequence to the end of its life as two compact remnants. It has been used for inference from observations of gravitational-wave mergers, Galactic neutron stars, X-ray binaries, and luminous red novae. `... by` `TeamCOMPAS `_ @@ -31,7 +31,7 @@ Contents Code repository Request an enhancement Report a problem - + ./pages/references ./pages/contact-us ./pages/whats-new @@ -62,4 +62,4 @@ Licence COMPAS is available under the `MIT `_ licence. -Last updated: |today| \ No newline at end of file +Last updated: |today| diff --git a/online-docs/pages/Developer guide/BSE/BSE-class-hierarchy.rst b/online-docs/pages/Developer guide/BSE/BSE-class-hierarchy.rst index 71dbf322c..cc368db92 100644 --- a/online-docs/pages/Developer guide/BSE/BSE-class-hierarchy.rst +++ b/online-docs/pages/Developer guide/BSE/BSE-class-hierarchy.rst @@ -18,37 +18,36 @@ The ``BSE`` inheritance hierarchy is as follows: ``BinaryStar`` ``BaseBinaryStar`` - + ``Star`` → ``BinaryConstituentStar`` (star1) |br| ``Star`` → ``BinaryConstituentStar`` (star2) The main class for binary star evolution is the ``BinaryStar`` class. The ``BinaryStar`` class is a wrapper that abstracts away the details of the binary star and the evolution. Internally the ``BinaryStar`` class maintains a pointer to an object representing the binary star being evolved, with that object being an instance of the ``BaseBinaryStar`` class. The ``BinaryStar`` class maintains a pointer to a second object, -representing the saved state of the binary star being evolved, with that object also being an instance of the ``BaseBinaryStar`` class. The +representing the saved state of the binary star being evolved, with that object also being an instance of the ``BaseBinaryStar`` class. The second object is a copy of the binary star being evolved at some earlier timestep, facilitating reverting the binary star to a previous state. The ``BaseBinaryStar`` class is a container class for the objects that represent the component stars of a binary system. An instance of the ``BaseBinaryStar`` class is a binary system being evolved by COMPAS, and contains a ``BinaryConstituentStar`` class object for each of the component stars (i.e. the primary and secondary stars), as well as data structures and algorithms specific to the evolution of a binary system. -The ``BaseBinaryStar`` class also maintains pointers to the ``BinaryConstituentStar`` class objects considered to be the current donor and -accretor during a mass transfer event, as well as pointers to the ``BinaryConstituentStar`` class objects considered to be the current +The ``BaseBinaryStar`` class also maintains pointers to the ``BinaryConstituentStar`` class objects considered to be the current donor and +accretor during a mass transfer event, as well as pointers to the ``BinaryConstituentStar`` class objects considered to be the current supernova and companion star, should one of the stars undergo a supernova event. The ``BinaryConstituentStar`` class inherits from the ``Star`` class, so objects instantiated from the ``BinaryConstituentStar`` class inherit the characteristics of the ``Star`` class, particularly the stellar evolution model. The ``BinaryConstituentStar`` class defines member variables and functions that pertain specifically to a constituent star of a binary system but that do not (generally) pertain to single stars that are not -part of a binary system (there are some functions that are defined in the ``BaseStar`` class and its derived classes that deal with binary star +part of a binary system (there are some functions that are defined in the ``BaseStar`` class and its derived classes that deal with binary star attributes and behaviour – in some cases the stellar attributes that are required to make these calculations reside in the ``BaseStar`` class so it is easier and cleaner to define the functions there). An instance of the ``BinaryConstituentStar`` class is a single component star of a binary system being evolved by COMPAS, and inhertis from the ``Star``, so will evolve over time through various SSE classes shown in :ref:`fig-1`. The ``BinaryConstituentStar`` class defines additional data -structures and algorithms (to the data structures and algorithms provided by the ``SSE`` classes) required to support the evolution of a binary +structures and algorithms (to the data structures and algorithms provided by the ``SSE`` classes) required to support the evolution of a binary system component star. -The ``BaseBinaryStar`` class is the main class for the underlying binary star object held by the ``BinaryStar`` class. The ``BaseBinaryStar`` -class defines all member variables that pertain specifically to a binary star, and many member functions that provide binary-star specific -functionality. Internally, the ``BaseBinaryStar`` class maintains pointers to the two BinaryConstituentStar class objects that constitute the +The ``BaseBinaryStar`` class is the main class for the underlying binary star object held by the ``BinaryStar`` class. The ``BaseBinaryStar`` +class defines all member variables that pertain specifically to a binary star, and many member functions that provide binary-star specific +functionality. Internally, the ``BaseBinaryStar`` class maintains pointers to the two BinaryConstituentStar class objects that constitute the binary star. - diff --git a/online-docs/pages/Developer guide/BSE/BSE-evolution-model.rst b/online-docs/pages/Developer guide/BSE/BSE-evolution-model.rst index fd89473a5..6f9d9383a 100644 --- a/online-docs/pages/Developer guide/BSE/BSE-evolution-model.rst +++ b/online-docs/pages/Developer guide/BSE/BSE-evolution-model.rst @@ -15,7 +15,7 @@ The high-level binary evolution model is shown in :ref:`Figure 4 `. Figure 4 High-level BSE evolution. -The binary evolution model is driven by the ``Evolve()`` function in the ``BaseBinaryStar`` class, which evolves the star through its entire +The binary evolution model is driven by the ``Evolve()`` function in the ``BaseBinaryStar`` class, which evolves the star through its entire lifetime by doing the following:: if touching @@ -23,30 +23,30 @@ lifetime by doing the following:: else calculate initial time step STOP = false - + DO WHILE NOT STOP AND NOT max iterations: - + evolve a single time step evolve each constituent star a single time step (see the :ref:`SSE evolution model`) - + if error OR unbound OR touching OR Massless Remnant STOP = true else evaluate the binary calculate mass transfer calculate winds mass loss - + if common envelope resolve common envelope else if supernova resolve supernova else resolve mass changes - + evaluate supernovae calculate total energy and angular momentum update magnetic field and spin: both constituent stars - + if unbound OR touching OR merger STOP = true else @@ -58,4 +58,4 @@ lifetime by doing the following:: STOP = true else if NOT max iterations - calculate new time step + calculate new time step diff --git a/online-docs/pages/Developer guide/BSE/BSE.rst b/online-docs/pages/Developer guide/BSE/BSE.rst index 286565173..740ea81e9 100644 --- a/online-docs/pages/Developer guide/BSE/BSE.rst +++ b/online-docs/pages/Developer guide/BSE/BSE.rst @@ -10,4 +10,3 @@ being described by a separate ``C++`` class. BSE-class-hierarchy BSE-evolution-model - diff --git a/online-docs/pages/Developer guide/Developer build/COMPAS-local-build.rst b/online-docs/pages/Developer guide/Developer build/COMPAS-local-build.rst index 99dd5195f..79d708a55 100644 --- a/online-docs/pages/Developer guide/Developer build/COMPAS-local-build.rst +++ b/online-docs/pages/Developer guide/Developer build/COMPAS-local-build.rst @@ -1,9 +1,9 @@ Building COMPAS locally ======================= -A makefile is provided to build COMPAS locally (``Mkaefile``). The Makefile provided defines a number of variables that can be -specified on the command line when ``make`` is run, including variables that allow the user to specify the compiler, the `include` -directory (for source header files), the `lib` directory (for shared libraries) for each external library required by COMPAS, and +A makefile is provided to build COMPAS locally (``Mkaefile``). The Makefile provided defines a number of variables that can be +specified on the command line when ``make`` is run, including variables that allow the user to specify the compiler, the `include` +directory (for source header files), the `lib` directory (for shared libraries) for each external library required by COMPAS, and the COMPAS executable name: **CPP** |br| @@ -17,16 +17,16 @@ the COMPAS executable name: **BOOSTINCDIR** |br| Specifies the `include` directory for the BOOST library. The default value is '/include' - + **BOOSTLIBDIR** |br| Specifies the `lib` directory for the BOOST library. The default value is '/lib'. - + **HDF5INCDIR** |br| Specifies the `include` directory for the HDF5 library. The default value is '/usr/include/hdf5/serial' **HDF5LIBDIR** |br| Specifies the `lib` directory for the HDF5 library. The default value is '/usr/lib/x86_64-linux-gnu/hdf5/serial' - + **EXE** |br| Specifies the name of the COMPAS executable to be built. The default is 'COMPAS' @@ -34,21 +34,21 @@ the COMPAS executable name: For example, typing:: make GCC=c++ EXE=mycompas -j$(nproc) - + will cause the `c++` compiler to be used to create the executable file 'mycompas', using all available cores. The makefile provided also defines several entry points: **clean** |br| - Instructs ``make`` to remove all existing object files (.o), and the COMPAS executable. A subsequent ``make`` is then forced to + Instructs ``make`` to remove all existing object files (.o), and the COMPAS executable. A subsequent ``make`` is then forced to compile all source files and link the resultant object files (and external libraries) into a new executable. **static** |br| Specifies that functions in the external libraries referenced by COMPAS should be statically linked - that is, they are copied into the COMPAS executable. The default executable name for the *static* entry point is `COMPAS_STATIC`. - **fast** |br| + **fast** |br| Adds `-march=native` and `-O3` to the compiler flags. - specifying `-march=native` enables all instruction subsets supported by the compiling machine, thus producing an executable @@ -66,4 +66,3 @@ The makefile provided also defines several entry points: .. rubric:: Footnotes .. [#f1] https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html - diff --git a/online-docs/pages/Developer guide/Developer build/developer-building-compas.rst b/online-docs/pages/Developer guide/Developer build/developer-building-compas.rst index 656747cb3..7ab63c31a 100644 --- a/online-docs/pages/Developer guide/Developer build/developer-building-compas.rst +++ b/online-docs/pages/Developer guide/Developer build/developer-building-compas.rst @@ -13,5 +13,3 @@ to the other makefile. ./COMPAS-local-build ./docker-developer - - \ No newline at end of file diff --git a/online-docs/pages/Developer guide/Developer build/docker-developer.rst b/online-docs/pages/Developer guide/Developer build/docker-developer.rst index ab7e3ba09..ab9aae02a 100644 --- a/online-docs/pages/Developer guide/Developer build/docker-developer.rst +++ b/online-docs/pages/Developer guide/Developer build/docker-developer.rst @@ -5,8 +5,8 @@ Creating a Docker image Overview -------- -Docker simplifies COMPAS deployment by containerizing all dependencies and build tools, -eliminating manual environment configuration across different operating systems and platforms. +Docker simplifies COMPAS deployment by containerizing all dependencies and build tools, +eliminating manual environment configuration across different operating systems and platforms. This enables reliable deployment on cloud platforms and consistent development environments. For information on how to use Docker to run COMPAS, see the :doc:`../../User guide/docker` page. @@ -14,7 +14,7 @@ For information on how to use Docker to run COMPAS, see the :doc:`../../User gui GitHub CI/CD ------------ - + ``Docker`` images of all versions of COMPAS (``dev`` branch) are available at: - `TeamCOMPAS dockerHub page `__ @@ -22,18 +22,18 @@ GitHub CI/CD Building of these images is performed automatically by the ``GitHub`` CI/CD process. -Whenever a push to `TeamCOMPAS/dev `__ occurs, a continuous deployment process +Whenever a push to `TeamCOMPAS/dev `__ occurs, a continuous deployment process automatically -builds\ [#f1]_ a new image and deploys it to both ``dockerHub`` and the ``GitHub Container Registry`` with a `tag`\ [#f2]_ that corresponds to the value of ``VERSION_STRING`` +builds\ [#f1]_ a new image and deploys it to both ``dockerHub`` and the ``GitHub Container Registry`` with a `tag`\ [#f2]_ that corresponds to the value of ``VERSION_STRING`` in ``changelog.h`` (see :doc:`../changelog` for detailed information regarding ``changelog.h``). -At time of writing, `GitHub Actions`\ [#f3]_ facilitates the above process. While this is convenient (because it's free and well -supported) it is somewhat slow - the COMPAS ``Docker`` image is available 5 - 10 minutes after pushing/merging. A future improvement +At time of writing, `GitHub Actions`\ [#f3]_ facilitates the above process. While this is convenient (because it's free and well +supported) it is somewhat slow - the COMPAS ``Docker`` image is available 5 - 10 minutes after pushing/merging. A future improvement may be to create a `runner`\ [#f4]_ locally with a high core count that can be used to compile COMPAS quickly. The Github Actions configuration is in ``/.github/workflows/dockerhub-ci.yml``. -See the `Atlassian CI/CD `__ +See the `Atlassian CI/CD `__ documentation for detailed information regarding the ``GitHub`` CI/CD process. @@ -61,17 +61,17 @@ Dockerfile The Dockerfile\ [#f5]_ defines how the docker image is constructed. -Images are created as a combination of layers. During the build process, each layer is cached and only updated on subsequent builds -if that layer would change. +Images are created as a combination of layers. During the build process, each layer is cached and only updated on subsequent builds +if that layer would change. The Dockerfile for COMPAS is made up of 8 layers: **FROM ubuntu:18.04**\ [#f6]_ |br| Use `Ubuntu 18.04 `__ as a base (provided by Docker Hub) - + **WORKDIR /app/COMPAS**\ [#f7]_ |br| Effectively ``cd /app/COMPAS`` within the container. - + **RUN apt-get update && apt-get install -y ...**\ [#f8]_ |br| Install the required dependencies. @@ -94,8 +94,8 @@ The Dockerfile for COMPAS is made up of 8 layers: **RUN cd src && make -f Makefile.docker -j $(nproc)**\ [#f8]_ |br| Change to the ``src`` directory; make COMPAS using a specific makefile (see below) and as many cores as possible. -A Dockerfile usually ends with a ``CMD`` directive that specifies what command should run when the container is started\ [#f11]_. -The COMPAS Dockerfile doesn't have a ``CMD`` directive because some users will want to run the executable directly and some will +A Dockerfile usually ends with a ``CMD`` directive that specifies what command should run when the container is started\ [#f11]_. +The COMPAS Dockerfile doesn't have a ``CMD`` directive because some users will want to run the executable directly and some will want to use ``runSubmit.py``. @@ -107,7 +107,7 @@ A separate makefile is required for ``Docker`` in this scenario for two reasons: #. To separate compiled files from source files #. To prevent the usage of the ``gcc`` ``-march=native`` compiler option -``-march=native`` is a very useful optimisation for users who compile and run COMPAS on the same machine, however it causes fatal +``-march=native`` is a very useful optimisation for users who compile and run COMPAS on the same machine, however it causes fatal errors when running COMPAS on a machine for which it was not compiled. The ``-march=native`` compiler option selects the CPU for which code should be generated by determining the processor type of the `compiling machine`. Using ``-march=native`` enables all instruction subsets supported by the compiling machine, thus producing an executable file that will perform better than it would @@ -132,4 +132,3 @@ respects. See :doc:`./COMPAS-local-build` for a detailed description of the loc .. [#f9] https://docs.docker.com/engine/reference/builder/#copy .. [#f10] https://docs.docker.com/engine/reference/builder/#env .. [#f11] https://docs.docker.com/engine/reference/builder/#cmd - diff --git a/online-docs/pages/Developer guide/Headers/errorcatalog-dot-h.rst b/online-docs/pages/Developer guide/Headers/errorcatalog-dot-h.rst index 642afaf56..406f88813 100644 --- a/online-docs/pages/Developer guide/Headers/errorcatalog-dot-h.rst +++ b/online-docs/pages/Developer guide/Headers/errorcatalog-dot-h.rst @@ -5,7 +5,7 @@ Error catalog (ErrorCatalog.h) corresponding error strings for those errors. To add a new error, add the symbolic name to the ``ERROR`` enum class, and the corresponding error string to the ``ERROR_CATALOG`` map. - + The key to the ``ERROR_CATALOG`` map is the symbolic name in the ``ERROR`` enum class. The map entry is a tuple containing the ``ERROR_SCOPE`` associated with the error (see below), and the error string. @@ -29,4 +29,3 @@ The ``THROW_ERROR*`` macros (see :doc:`../../Developer guide/Services/services-e A convenience function for retrieving the error text is #defined here: #define ERR_MSG(x) std::get<1>(ERROR_CATALOG.at(x)) - diff --git a/online-docs/pages/Developer guide/Headers/headers.rst b/online-docs/pages/Developer guide/Headers/headers.rst index f926f0acc..3d9ee808d 100644 --- a/online-docs/pages/Developer guide/Headers/headers.rst +++ b/online-docs/pages/Developer guide/Headers/headers.rst @@ -14,4 +14,3 @@ The contents and use of these headers files are described here: ./logtypedefs-dot-h ./enumhash-dot-h ./errorcatalog-dot-h - \ No newline at end of file diff --git a/online-docs/pages/Developer guide/Headers/logtypedefs-dot-h.rst b/online-docs/pages/Developer guide/Headers/logtypedefs-dot-h.rst index 46a618ff6..54a685d0c 100644 --- a/online-docs/pages/Developer guide/Headers/logtypedefs-dot-h.rst +++ b/online-docs/pages/Developer guide/Headers/logtypedefs-dot-h.rst @@ -4,5 +4,5 @@ Logging type definitions (LogTypedefs.h) ``LogTypedefs.h`` is the COMPAS ``C++`` logging type definitions header file. ``LogTypedefs.h`` is where developer-defined types that pertain directly to the COMPAS logging functionality (including the -definitions of the default record composition for the various log files) are defined. Non-logging tyedefs are listed in +definitions of the default record composition for the various log files) are defined. Non-logging tyedefs are listed in ``typedefs.h``. diff --git a/online-docs/pages/Developer guide/Headers/typedefs-dot-h.rst b/online-docs/pages/Developer guide/Headers/typedefs-dot-h.rst index 9822b7005..0ef365869 100644 --- a/online-docs/pages/Developer guide/Headers/typedefs-dot-h.rst +++ b/online-docs/pages/Developer guide/Headers/typedefs-dot-h.rst @@ -28,7 +28,7 @@ Refer to ``EnumHash.h`` for the definition of the type alias ``COMPASUnorderedMa Note that the values allowed for variables of type ``CE_ACCRETION_PRESCRIPTION`` are limited to ``ZERO``, ``CONSTANT``, ``UNIFORM``, and ``MACLEOD`` – anything else will cause a compilation error. -The unordered map ``CE_ACCRETION_PRESCRIPTION_LABEL`` declares a string label for each ``CE_ACCRETION_PRESCRIPTION``, and is indexed by +The unordered map ``CE_ACCRETION_PRESCRIPTION_LABEL`` declares a string label for each ``CE_ACCRETION_PRESCRIPTION``, and is indexed by ``CE_ACCRETION_PRESCRIPTION``. The strings declared in ``CE_ACCRETION_PRESCRIPTION_LABEL`` are used by the Options service to match user input to the required ``CE_ACCRETION_PRESCRIPTION``. These strings can also be used if an English description of the value of a variable is required: instead of just printing an integer value that maps to a ``CE_ACCRETION_PRESCRIPTION``, the string label associated with the diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-oo-abstraction.rst b/online-docs/pages/Developer guide/Programming style/programming-style-oo-abstraction.rst index c3a3c505e..91884e87a 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-oo-abstraction.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-oo-abstraction.rst @@ -1,14 +1,14 @@ Abstraction =========== -For any entity, product, or service, the goal of abstraction is to handle the complexity of the implementation by hiding details that -don’t need to be known in order to use, or consume, the entity, product, or service. In the OOP paradigm, hiding details in this way -enables the consumer to implement more complex logic on top of the provided abstraction without needing to understand the hidden +For any entity, product, or service, the goal of abstraction is to handle the complexity of the implementation by hiding details that +don’t need to be known in order to use, or consume, the entity, product, or service. In the OOP paradigm, hiding details in this way +enables the consumer to implement more complex logic on top of the provided abstraction without needing to understand the hidden implementation details and complexity. (There is no suggestion that consumers shouldn’t understand the implementation details, but they shouldn’t need to in order to consume the entity, product, or service). -Abstraction in ``C++`` is achieved via the use of objects – an object is an instance of a class, and typically corresponds to a -real-world object or entity (in COMPAS, usually a star or binary star). An object maintains the state of an object (via class member -variables), and provides all necessary means of changing the state of the object (by exposing public class member functions (methods)). +Abstraction in ``C++`` is achieved via the use of objects – an object is an instance of a class, and typically corresponds to a +real-world object or entity (in COMPAS, usually a star or binary star). An object maintains the state of an object (via class member +variables), and provides all necessary means of changing the state of the object (by exposing public class member functions (methods)). A class may expose public functions to allow consumers to determine the value of class member variables (“getters”), and to set the value of class member variables (“setters”). diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-oo-encapsulation.rst b/online-docs/pages/Developer guide/Programming style/programming-style-oo-encapsulation.rst index c27aaec63..1aeab08eb 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-oo-encapsulation.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-oo-encapsulation.rst @@ -2,16 +2,16 @@ Encapsulation ============= Encapsulation binds together the data and functions that manipulate the data in an attempt to keep both safe from outside interference and -accidental misuse. An encapsulation paradigm that does not allow calling code to access internal object data and permits access through +accidental misuse. An encapsulation paradigm that does not allow calling code to access internal object data and permits access through functions only is a strong form of abstraction. ``C++`` allows developers to enforce access restrictions explicitly by defining class member variables and functions as private, protected, or public. These keywords are used throughout COMPAS to enforce encapsulation. -There are very few circumstances in which a consumer should change the value of a class member variable directly (via the use of a setter -function) – almost always consumers should present new situational information to an object (via a public member function), and allow the -object to respond to the new information. For example, in COMPAS, there should be almost no reason for a consumer of a star object to -directly change (say) the radius of the star – the consumer should inform the star object of new circumstances or events, and allow the star -object to respond to those events (perhaps changing the value of the radius of the star). Changing a single class member variable directly -introduces the possibility that related class member variables (e.g. other attributes of stars) will not be changed accordingly. Moreover, +There are very few circumstances in which a consumer should change the value of a class member variable directly (via the use of a setter +function) – almost always consumers should present new situational information to an object (via a public member function), and allow the +object to respond to the new information. For example, in COMPAS, there should be almost no reason for a consumer of a star object to +directly change (say) the radius of the star – the consumer should inform the star object of new circumstances or events, and allow the star +object to respond to those events (perhaps changing the value of the radius of the star). Changing a single class member variable directly +introduces the possibility that related class member variables (e.g. other attributes of stars) will not be changed accordingly. Moreover, developers changing the code in the future should, in almost all cases, expect that the state of an object is maintained consistently by the object, and that there should be no unexpected side-effects caused by calling non class-member functions. diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-oo-inheritance.rst b/online-docs/pages/Developer guide/Programming style/programming-style-oo-inheritance.rst index 92a57fb91..677e156d1 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-oo-inheritance.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-oo-inheritance.rst @@ -6,6 +6,6 @@ functions of the parent (base) class are available to the child (derived) class easy re-use of the same procedures and data definitions, in addition to describing real-world relationships in an intuitive way. ``C++`` allows multiple inheritance – a class may inherit from multiple parent classes. -Derived classes can define additional class member variables (using the private, protected, and public access restrictions), which will be +Derived classes can define additional class member variables (using the private, protected, and public access restrictions), which will be available to any descendent classes (subject to inheritance rules), but will only be available to ancestor classes via the normal access methods (getters and setters). diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-oo-polymorphism.rst b/online-docs/pages/Developer guide/Programming style/programming-style-oo-polymorphism.rst index c3a66b5df..e4f0da3c4 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-oo-polymorphism.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-oo-polymorphism.rst @@ -3,9 +3,9 @@ Polymorphism Polymorphism means having many forms. In OOP, polymorphism occurs when there is a hierarchy of classes and they are related by inheritance. -Following the discussion earlier regarding inheritance, in the OOP paradigm, and ``C++`` specifically, derived classes can override methods -defined by ancestor classes, allowing a derived class to implement functions specific to its circumstances. This means that a call to a class -member function will cause a different function to be executed depending on the type of object that invokes the function. Descendent classes +Following the discussion earlier regarding inheritance, in the OOP paradigm, and ``C++`` specifically, derived classes can override methods +defined by ancestor classes, allowing a derived class to implement functions specific to its circumstances. This means that a call to a class +member function will cause a different function to be executed depending on the type of object that invokes the function. Descendent classes of a class that has overridden a base class member function inherit the overridden function (but can override it themselves). -COMPAS makes heavy use of inheritance and polymorphism, especially for the implementation of the different stellar types. \ No newline at end of file +COMPAS makes heavy use of inheritance and polymorphism, especially for the implementation of the different stellar types. diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-style-braces.rst b/online-docs/pages/Developer guide/Programming style/programming-style-style-braces.rst index b946c0291..3237b6864 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-style-braces.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-style-braces.rst @@ -1,7 +1,7 @@ Braces ====== -The placement of braces in ``C++`` code (actually, any code that uses braces to enclose scope) is a contentious issue, with many developers having +The placement of braces in ``C++`` code (actually, any code that uses braces to enclose scope) is a contentious issue, with many developers having long-held, often dogmatic preferences. COMPAS (so far) uses the K&R style (”the one true brace style”) - the style used in the original Unix kernel and Kernighan and Ritchie’s book :doc:`The C Programming Language <../../references>`. @@ -15,5 +15,5 @@ The K&R style puts the opening brace on the same line as the control statement: call_somethingelse(); } -Note also the space between the keyword while and the opening parenthesis, surrounding the ``==`` operator, and between the closing parenthesis +Note also the space between the keyword while and the opening parenthesis, surrounding the ``==`` operator, and between the closing parenthesis and the opening brace. Spaces in those places help with code readability. Surrounding all arithmetic operators with spaces is preferred. diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-style-func-parms.rst b/online-docs/pages/Developer guide/Programming style/programming-style-style-func-parms.rst index 65e849569..831708d96 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-style-func-parms.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-style-func-parms.rst @@ -1,9 +1,9 @@ Function parameters =================== -In most cases, function parameters should be input only – meaning that the values of function parameters should not be changed by the function. -Anything that needs to be changed and returned to the caller should be returned as a functional return. There are a few exceptions to this in COMPAS – +In most cases, function parameters should be input only – meaning that the values of function parameters should not be changed by the function. +Anything that needs to be changed and returned to the caller should be returned as a functional return. There are a few exceptions to this in COMPAS – all were done for performance reasons, and are documented in the code. -To avoid unexpected side-effects, developers should expect (in most cases) that any variables they pass to a function will remain unchanged – all +To avoid unexpected side-effects, developers should expect (in most cases) that any variables they pass to a function will remain unchanged – all changes should be returned as a functional return. diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-style-indentation.rst b/online-docs/pages/Developer guide/Programming style/programming-style-style-indentation.rst index 9e8ca135c..58330433d 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-style-indentation.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-style-indentation.rst @@ -1,9 +1,9 @@ Indentation =========== -There is ongoing debate in the programming community as to whether indentation should be achieved using spaces or tabs (strange, but true...). -The use of spaces is more common. Unfortunately a mix of spaces and tabs doesn’t work well with some editors - we should settle on one method and -try to stick to it. COMPAS (so far) has a mix of both – no matter which convention we choose, once there are instances of both in the code it's -hard to recover. So while using tabs is probably preferred, use whatever is convenient (pragmatism is your friend...). +There is ongoing debate in the programming community as to whether indentation should be achieved using spaces or tabs (strange, but true...). +The use of spaces is more common. Unfortunately a mix of spaces and tabs doesn’t work well with some editors - we should settle on one method and +try to stick to it. COMPAS (so far) has a mix of both – no matter which convention we choose, once there are instances of both in the code it's +hard to recover. So while using tabs is probably preferred, use whatever is convenient (pragmatism is your friend...). COMPAS (mostly) uses an indentation size of 4 spaces - again we should settle on a size and stick to it. diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-style-performance.rst b/online-docs/pages/Developer guide/Programming style/programming-style-style-performance.rst index 04108ef70..e9102979b 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-style-performance.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-style-performance.rst @@ -1,7 +1,7 @@ Performance & optimisation ========================== -In general, COMPAS developers should code for performance – within reason. Bear in mind that many functions will be called many, many thousands of +In general, COMPAS developers should code for performance – within reason. Bear in mind that many functions will be called many, many thousands of times (in some cases, millions) in one execution of the program. - Avoid calculating values inside loops that could be calculated once outside the loop. diff --git a/online-docs/pages/Developer guide/Programming style/programming-style-style.rst b/online-docs/pages/Developer guide/Programming style/programming-style-style.rst index 32c08d55e..ae4c04037 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style-style.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style-style.rst @@ -2,7 +2,7 @@ Programming style & conventions =============================== The goal of coding to a suggested style is readability and maintainability – if many developers implement code in COMPAS with their own coding -style, readability and maintainability will be more difficult than if a consistent style is used throughout the code. Strict adherence isn’t +style, readability and maintainability will be more difficult than if a consistent style is used throughout the code. Strict adherence isn’t really necessary, but it will make it easier on all COMPAS developers if the coding style is consistent throughout. Some elements of programming style: diff --git a/online-docs/pages/Developer guide/Programming style/programming-style.rst b/online-docs/pages/Developer guide/Programming style/programming-style.rst index 20b5156dc..6a72456fb 100644 --- a/online-docs/pages/Developer guide/Programming style/programming-style.rst +++ b/online-docs/pages/Developer guide/Programming style/programming-style.rst @@ -2,7 +2,7 @@ Programming style ================= Everyone has their own preferences and style, and the nature of a project such as COMPAS will reflect that. However, there is a need -to suggest some guidelines for programming style, naming conventions etc. Following is a description of some of the elements of +to suggest some guidelines for programming style, naming conventions etc. Following is a description of some of the elements of programming style and naming conventions used to develop COMPAS v2. These may evolve over time. diff --git a/online-docs/pages/Developer guide/SSE/SSE-class-hierarchy.rst b/online-docs/pages/Developer guide/SSE/SSE-class-hierarchy.rst index f1f0eba59..7bb32105c 100644 --- a/online-docs/pages/Developer guide/SSE/SSE-class-hierarchy.rst +++ b/online-docs/pages/Developer guide/SSE/SSE-class-hierarchy.rst @@ -2,16 +2,16 @@ SSE class hierarchy =================== :ref:`Figure 1 ` shows the ``SSE`` class diagram, where the arrows indicate inheritance. The COMPAS ``C++`` code is implemented -using multiple inheritance, and all stellar classes also inherit directly from the ``BaseStar`` class (arrows not shown in +using multiple inheritance, and all stellar classes also inherit directly from the ``BaseStar`` class (arrows not shown in :ref:`Figure 1 ` for clarity). Each of the stellar classes encapsulates data structures and algorithms specific to the evolutionary phase corresponding to the class. -The main class for ``SSE`` is the ``Star`` class. The ``Star`` class is a wrapper that abstracts away the details of the star and the -evolution. Internally the ``Star`` class maintains a pointer to an object representing the star being evolved, with that object being +The main class for ``SSE`` is the ``Star`` class. The ``Star`` class is a wrapper that abstracts away the details of the star and the +evolution. Internally the ``Star`` class maintains a pointer to an object representing the star being evolved, with that object being an instance of one of the following classes: .. list-table:: - :widths: 25 75 + :widths: 25 75 :header-rows: 0 :class: aligned-text @@ -64,7 +64,7 @@ Several other ``SSE`` classes are defined: These extra classes are included to allow inheritance of common functionality. The ``BaseStar`` class is the main class for the underlying star object held by the ``Star`` class. The ``BaseStar`` class defines all member -variables, and many member functions that provide common functionality. Similarly, the ``MainSequence`` and ``GiantBranch`` classes provide +variables, and many member functions that provide common functionality. Similarly, the ``MainSequence`` and ``GiantBranch`` classes provide repositories for common functionality for main sequence and giant branch stars respectively, and the the ``Remnants`` and ``WhiteDwarfs`` classes provide repositories for common functionality for remnant and white dwarf stars respectively. @@ -82,7 +82,7 @@ provide repositories for common functionality for remnant and white dwarf stars ``CH`` (Chemically Homogeneous) class stars inherit from the ``MS_gt_07`` class because (in this implementation) they are just (large) main sequence stars that have a static radius. -``HG`` (Hertzsprung Gap) class stars inherit from the ``GiantBranch`` class because they share the giant branch parameters described in +``HG`` (Hertzsprung Gap) class stars inherit from the ``GiantBranch`` class because they share the giant branch parameters described in :cite:`Hurley2000`, section 5.2. Each class has its own set of member functions that calculate various attributes of the star according to the phase the class represents (using diff --git a/online-docs/pages/Developer guide/SSE/SSE-evolution-model.rst b/online-docs/pages/Developer guide/SSE/SSE-evolution-model.rst index 252e8605d..de1e9bd69 100644 --- a/online-docs/pages/Developer guide/SSE/SSE-evolution-model.rst +++ b/online-docs/pages/Developer guide/SSE/SSE-evolution-model.rst @@ -92,5 +92,5 @@ The ``ResolveEndOfPhase()`` function does the following:: 10. Calculate Temperature 11. Evolve star to next phase -Each of the calculations in the ``ResolveEndOfPhase()`` function is performed in the context of the star evolving off its current +Each of the calculations in the ``ResolveEndOfPhase()`` function is performed in the context of the star evolving off its current phase to the next phase. The remainder of the code (in general terms) supports these main driver functions. diff --git a/online-docs/pages/Developer guide/SSE/SSE.rst b/online-docs/pages/Developer guide/SSE/SSE.rst index 3fd0acfdd..3108ec83d 100644 --- a/online-docs/pages/Developer guide/SSE/SSE.rst +++ b/online-docs/pages/Developer guide/SSE/SSE.rst @@ -10,4 +10,3 @@ being described by a separate ``C++`` class. SSE-class-hierarchy SSE-evolution-model - diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-debug.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-debug.rst index 259d33656..e32082a3a 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-debug.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-debug.rst @@ -6,13 +6,13 @@ Log::Debug(...) BOOL Log::Debug( STRING p_DbgClass, // the log class of the record to be written. An empty string (””) satisfies // all checks against enabled classes. - INT p_DbgLevel, // the log level of the record to be written. A value of 0 satisfies all + INT p_DbgLevel, // the log level of the record to be written. A value of 0 satisfies all // checks against enabled levels. STRING p_DbgStr // the string to be written to stdout (and optionally to file). ) -Writes ``p_DbgStr`` to stdout and, if logging is active and so configured (via program option ``--debug-to-file``), writes ``p_DbgStr`` +Writes ``p_DbgStr`` to stdout and, if logging is active and so configured (via program option ``--debug-to-file``), writes ``p_DbgStr`` to the debug log file. -Returns a boolean indicating whether the record was written successfully. If an error occurred writing to the debug log file, +Returns a boolean indicating whether the record was written successfully. If an error occurred writing to the debug log file, the log file will be disabled. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-debugWait.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-debugWait.rst index cb20a1eed..4ff6741da 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-debugWait.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-debugWait.rst @@ -6,13 +6,13 @@ Log::DebugWait(...) BOOL Log::DebugWait( STRING p_DbgClass, // the log class of the record to be written. An empty string (””) satisfies // all checks against enabled classes. - INT p_DbgLevel, // the log level of the record to be written. A value of 0 satisfies all + INT p_DbgLevel, // the log level of the record to be written. A value of 0 satisfies all // checks against enabled levels. STRING p_DbgStr // the string to be written to stdout (and optionally to file). ) -Writes ``p_DbgStr`` to stdout and, if logging is active and so configured (via program option ``--debug-to-file``), writes ``p_DbgStr`` +Writes ``p_DbgStr`` to stdout and, if logging is active and so configured (via program option ``--debug-to-file``), writes ``p_DbgStr`` to the debug log file, then waits for user input. -Returns a boolean indicating whether the record was written successfully. If an error occurred writing to the debug log file, +Returns a boolean indicating whether the record was written successfully. If an error occurred writing to the debug log file, the log file will be disabled. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-error.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-error.rst index 9c87879b7..4185a8988 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-error.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-error.rst @@ -7,8 +7,8 @@ Log::Error(p_ErrStr) STRING p_ErrStr // the string to be written to stdout (and optionally to file). ) -Writes ``p_ErrStr`` to stdout and, if logging is active and so configured (via program option ``--errors-to-file``), writes ``p_ErrStr`` +Writes ``p_ErrStr`` to stdout and, if logging is active and so configured (via program option ``--errors-to-file``), writes ``p_ErrStr`` to the error log file. -Returns a boolean indicating whether the record was written successfully. If an error occurred writing to the error log file, +Returns a boolean indicating whether the record was written successfully. If an error occurred writing to the error log file, the log file will be disabled. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-open.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-open.rst index 421ba969b..46ee6b301 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-open.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-open.rst @@ -6,35 +6,35 @@ Log::Open(...) INT Log::Open( STRING p_LogFileName, // the name of the log file to be created and opened. // This should be the filename only – the path, prefix and - // extensions are added by the logging service. If the file - // already exists, the logging service will append a version + // extensions are added by the logging service. If the file + // already exists, the logging service will append a version // number to the name if necessary (see p_Append parameter below). BOOL p_Append, // flag indicating whether the file should be opened in append mode // (i.e. existing data is preserved) and new records written to the - // file appended, or whether a new file should be opened (with + // file appended, or whether a new file should be opened (with // version number if necessary). - BOOL p_TimeStamp, // flag indicating whether timestamps should be written with each + BOOL p_TimeStamp, // flag indicating whether timestamps should be written with each // log file record. - BOOL p_Label, // flag indicating whether a label should be written with each log - // record. This is useful when different types of logging data are + BOOL p_Label, // flag indicating whether a label should be written with each log + // record. This is useful when different types of logging data are // being written to the same log file file. LOGFILE p_StandardLogfile // (optional) the standard log file type for this log file. // If not provided LOGFILE::NONE is used. ) Opens a log file. If the ``p_Append`` parameter is TRUE and a file named ``p_LogFileName`` exists, the existing file will be opened and -the existing contents retained, otherwise a new file will be created and opened (not a Standard Log File – see +the existing contents retained, otherwise a new file will be created and opened (not a Standard Log File – see :doc:`../services-extended-logging`). -The log file container directory is created at the path specified by the ``p_LogBasePath`` parameter passed to the -:doc:`./services-base-level-logging-func-start` function. New log files are created in the log file container directory. ``BSE`` detailed +The log file container directory is created at the path specified by the ``p_LogBasePath`` parameter passed to the +:doc:`./services-base-level-logging-func-start` function. New log files are created in the log file container directory. ``BSE`` detailed log files are created in the ``Detailed_Output`` directory, which is created in the log file container directory (if required). The filename is prefixed by the ``p_LogNamePrefix`` parameter passed to the :doc:`./services-base-level-logging-func-start` function. If a file with the name as given by the ``p_LogFileName`` parameter already exists, and the ``p_Append`` parameter is false, a version -number will be appended to the filename before the extension (this functionality is largely redundant since the implementation of the +number will be appended to the filename before the extension (this functionality is largely redundant since the implementation of the log file container directory). -The integer log file identifier is returned to the caller. A value of −1 indicates the log file was not opened successfully. Multiple +The integer log file identifier is returned to the caller. A value of −1 indicates the log file was not opened successfully. Multiple log files can be open simultaneously – referenced by the identifier returned. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-put.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-put.rst index bb3902409..3911a5f08 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-put.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-put.rst @@ -7,7 +7,7 @@ Log::Put(...) INT p_LogfileId, // the identifier of the log file to be written. STRING p_LogClass, // the log class of the record to be written. An empty string (””) satisfies // all checks against enabled classes. - INT p_LogLevel, // the log level of the record to be written. A value of 0 satisfies all + INT p_LogLevel, // the log level of the record to be written. A value of 0 satisfies all // checks against enabled levels. STRING p_LogStr // the string to be written to the log file. ) diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-say.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-say.rst index 976ba039f..1dc3ef4a7 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-say.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-say.rst @@ -6,7 +6,7 @@ Log::Say(...) VOID Log::Say( STRING p_SayClass, // the log class of the record to be written. An empty string (””) satisfies // all checks against enabled classes. - INT p_SayLevel, // the log level of the record to be written. A value of 0 satisfies all + INT p_SayLevel, // the log level of the record to be written. A value of 0 satisfies all // checks against enabled levels. STRING p_SayStr // the string to be written to stdout. ) diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-start.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-start.rst index 9355227ec..01e7e0828 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-start.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-start.rst @@ -13,16 +13,16 @@ Log::Start(...) STRING[] p_LogClasses, // enabled logging classes (see below). INT p_DbgLevel, // debug level (see below). STRING[] p_DbgClasses, // enabled debug classes (see below). - BOOL p_DbgToFile, // flag indicating whether debug statements should also be + BOOL p_DbgToFile, // flag indicating whether debug statements should also be // written to the log file. - BOOL p_ErrorsToFile, // flag indicating whether error messages should also be + BOOL p_ErrorsToFile, // flag indicating whether error messages should also be // written to the log file. LOGFILETYPE p_LogfileType // the log file type (see below). ) Initialises and starts the logging and debugging service. Logging parameters are set per the program options specified (using default values if no options are specified by the user). The log file container directory is created. If a directory with the -name as given by the containerName parameter already exists, a version number will be appended to the directory name. The +name as given by the containerName parameter already exists, a version number will be appended to the directory name. The ``Run_Details`` file is created within the log file container directory. Any input files specified by the user, such as a grid file and/or a log file definitions file, are copied to the log file container directory. Log files to which debug statements and error messages should be written will be created and opened if required. @@ -34,7 +34,7 @@ Log file types are defined in the enum class ``LOGFILETYPE`` in ``constants.h``. by the ``p_LogfileType`` parameter: .. list-table:: - :widths: 25 75 + :widths: 25 75 :header-rows: 0 :class: aligned-text diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-write.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-write.rst index 89a753930..6bbb4d043 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-write.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging-func-write.rst @@ -7,12 +7,12 @@ Log::Write(...) INT p_LogfileId, // the identifier of the log file to be written. STRING p_LogClass, // the log class of the record to be written. An empty string (””) satisfies // all checks against enabled classes. - INT p_LogLevel, // the log level of the record to be written. A value of 0 satisfies all + INT p_LogLevel, // the log level of the record to be written. A value of 0 satisfies all // checks against enabled levels. STRING p_LogStr // the string to be written to the log file. ) -Writes an unformatted record to the specified log file. If the Log service is enabled, the specified log file is active, and the log +Writes an unformatted record to the specified log file. If the Log service is enabled, the specified log file is active, and the log record ``class`` and ``level`` passed are enabled, the string is written to the file. See :doc:`./services-base-level-logging` for details regarding log record ``class`` and ``level``. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging.rst index faebc506c..81882376e 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Base-level logging/services-base-level-logging.rst @@ -14,7 +14,7 @@ as “Log::Instance()”, so calling the ``Log::Enabled()`` function can be writ LOGGING→Enabled(); -The Log service must be initialised and started before logging and debugging functionality can be used. Initialise and start +The Log service must be initialised and started before logging and debugging functionality can be used. Initialise and start logging by calling the ``Log::Start()`` function:: LOGGING→Start(...) @@ -33,8 +33,8 @@ Log & debug record filtering ---------------------------- The Log service provides a set of functions and macros to manage log files, and to write log and debug records to the log files, -``stdout``, and ``stderr``. Base-level logging allows developers to tag log and debug records with a string ``class``, and an -integer ``level``. The Log service will filter log and debug records by ``class`` and ``level``, and only write those records +``stdout``, and ``stderr``. Base-level logging allows developers to tag log and debug records with a string ``class``, and an +integer ``level``. The Log service will filter log and debug records by ``class`` and ``level``, and only write those records that meet the ``class`` and ``level`` filters specified by the users via the ``--log-level``, ``--log-class``, ``--debug-level``, and ``--debug-classes`` program options. @@ -60,4 +60,3 @@ The Log service provides the following public member functions: ./services-base-level-logging-func-squawk ./services-base-level-logging-func-say ./services-base-level-logging-func-enabled - diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log.rst index c45207540..5021a64ba 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log.rst @@ -22,4 +22,4 @@ Examples:: LOG(SSEfileId, ”This is a log record”); LOG(OutputFile2Id, ”The value of x is ” << x << ” km”); LOG(MyLogfileId, 2, ”Log string”); - LOG(SSEfileId, ”CHeB”, 4, ”This is a CHeB only log record”); \ No newline at end of file + LOG(SSEfileId, ”CHeB”, 4, ”This is a CHeB only log record”); diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_id.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_id.rst index 75afbdc92..55513acee 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_id.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_id.rst @@ -12,11 +12,11 @@ Writes a log record prepended with calling function name to the log file specifi LOG_ID(id, string) // writes 'string' prepended with name of calling function to the // log file - LOG_ID(id, level, string) // writes 'string' prepended with name of calling function to the + LOG_ID(id, level, string) // writes 'string' prepended with name of calling function to the // log file if 'level' <= 'p_LogLevel' in Log::Start() - LOG_ID(id, class, level, string) // writes 'string' prepended with name of calling function to the - // log file if 'class' is in 'p_LogClasses' in Log::Start(), and + LOG_ID(id, class, level, string) // writes 'string' prepended with name of calling function to the + // log file if 'class' is in 'p_LogClasses' in Log::Start(), and // 'level' <= 'p_LogLevel' in Log::Start(). Default class is ””; default level is 0. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_id_if.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_id_if.rst index bf559fff8..eeb02712e 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_id_if.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_id_if.rst @@ -8,4 +8,4 @@ LOG_ID_IF() macro Writes a log record prepended with calling function name to the log file specified by ``id`` if the condition given by ``cond`` is met. -Usage: see :doc:`LOG_ID() ` and :doc:`LOG_IF() `. \ No newline at end of file +Usage: see :doc:`LOG_ID() ` and :doc:`LOG_IF() `. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_if.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_if.rst index ef922b3b9..bb1a6a114 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_if.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-log_if.rst @@ -8,12 +8,12 @@ LOG_IF() macro Writes a log record to the log file specified by ``id`` if the condition given by ``cond`` is met. Usage:: LOG_IF(id, cond, string) // writes 'string' to the log file if 'cond' is TRUE. - - LOG_IF(id, cond, level, string) // writes 'string' to the log file if 'cond' is TRUE and + + LOG_IF(id, cond, level, string) // writes 'string' to the log file if 'cond' is TRUE and // 'level' <= 'p_LogLevel' in Log::Start(). - - LOG_IF(id, cond, class, level, string) // writes 'string' to the log file if 'cond' is TRUE, - // 'class' is in 'p_LogClasses' in Log::Start(), and + + LOG_IF(id, cond, class, level, string) // writes 'string' to the log file if 'cond' is TRUE, + // 'class' is in 'p_LogClasses' in Log::Start(), and // 'level' <= 'p_LogLevel' in Log::Start(). Default class is ””; default level is 0. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-logging.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-logging.rst index f80de91d4..79af31a74 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-logging.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/Logging macros/services-logging-debugging-macros-logging.rst @@ -14,7 +14,7 @@ The logging macros provided by the :doc:`logging service <../services-logging-de |br| The logging macros described above are also provided in a verbose variant. The verbose macros function the same way as their non-verbose -counterparts, with the added functionality that the log records written to the log file will also be written to stdout. The verbose +counterparts, with the added functionality that the log records written to the log file will also be written to stdout. The verbose logging macros are:: LOGV(id, ...) @@ -31,5 +31,5 @@ A further four macros are provided that allow writing directly to stdout rather SAY_IF(cond, ...) SAY_ID IF(cond, ...) -The ``SAY`` macros function the same way as their ``LOG`` counterparts, but write directly to stdout instead of a log file. The ``SAY`` +The ``SAY`` macros function the same way as their ``LOG`` counterparts, but write directly to stdout instead of a log file. The ``SAY`` macros honour the logging classes and level. diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/services-extended-logging.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/services-extended-logging.rst index 839de8ceb..e7297608f 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/services-extended-logging.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/services-extended-logging.rst @@ -1,7 +1,7 @@ Extended logging ================ -The extended logging service supports standard log files for both Single Star Evolution ``(SSE``) and Binary Star +The extended logging service supports standard log files for both Single Star Evolution ``(SSE``) and Binary Star Evolution (``BSE``). The standard log files defined are: @@ -26,7 +26,7 @@ For ``BSE``: The Logging service maintains information about each of the standard log files, and will handle creating, opening, writing and closing the files. For each execution of the COMPAS program, one (and only one) of each of the log files listed above that -pertain to the mode of evolution (``--mode`` option, ``SSE`` or ``BSE``) will be created, except for the ``Detailed_Output`` +pertain to the mode of evolution (``--mode`` option, ``SSE`` or ``BSE``) will be created, except for the ``Detailed_Output`` log files, in which case there will be one log file created for each system (single star or binary star) evolved. The Logging service provides the following public member functions specifically for managing standard log files: @@ -38,9 +38,9 @@ For ``SSE`` log files:: BOOL LogSSEDetailedOutput(CONST T* CONST p_Star, CONST int p_Id, CONST string p_Rec) BOOL LogSSESwitchLog(CONST T* CONST p_Star, CONST string p_Rec) -Each ``SSE`` function is passed a pointer to the single star for which details are to be logged (``p_Star``), and a string to be -written to the log file (``p_Rec``). If ``p_Rec`` is an empty string, the function constructs the log record from the current -attributes of the star and the default record specifier for the log file (see property vectors in ``constants.h``, e.g. +Each ``SSE`` function is passed a pointer to the single star for which details are to be logged (``p_Star``), and a string to be +written to the log file (``p_Rec``). If ``p_Rec`` is an empty string, the function constructs the log record from the current +attributes of the star and the default record specifier for the log file (see property vectors in ``constants.h``, e.g. ``SSE_DETAILED_OUTPUT_REC``). ``LogSSEDetailedOutput()`` is also passed an integer identifier (typically the loop index of the star) that is appended to the log file name (``p_Id``). @@ -55,9 +55,9 @@ For ``BSE`` log files:: BOOL LogBSEDetailedOutput(CONST T* CONST p_Binary, CONST long int p_Id, CONST string p_Rec) BOOL LogBSESwitchLog(CONST T* CONST p_Binary, CONST bool p_PrimarySwitching) -Each ``BSE`` function is passed a pointer to the binary star for which details are to be logged (``p_Binary``), and a string to -be written to the log file (``p_Rec``). If ``p_Rec`` is an empty string, the function constructs the log record from the current -attributes of the binary and the default record specifier for the log file (see property vectors in ``constants.h``, e.g. +Each ``BSE`` function is passed a pointer to the binary star for which details are to be logged (``p_Binary``), and a string to +be written to the log file (``p_Rec``). If ``p_Rec`` is an empty string, the function constructs the log record from the current +attributes of the binary and the default record specifier for the log file (see property vectors in ``constants.h``, e.g. ``BSE_DETAILED_OUTPUT_REC``). ``LogBSEDetailedOutput()`` is also passed an integer identifier (typically the loop index of the binary) that is appended to the log file name (``p_Id``). @@ -81,4 +81,3 @@ Standard log file names are supplied via program options (e.g. ``--logfile-syste The extended logging service always sets the log record ``class`` to the name of the standard log file being written to, and the log record ``level`` to 0. See :doc:`./Base-level logging/services-base-level-logging` for details regarding log record ``class`` and ``level``. - diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/services-logging-debugging-macros-debugging.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/services-logging-debugging-macros-debugging.rst index fede1739e..8a6e3efaa 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/services-logging-debugging-macros-debugging.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/services-logging-debugging-macros-debugging.rst @@ -46,5 +46,5 @@ The ``DBG_WARN`` macros write to stdout via the ``SAY`` macro, so honour the log to the debug or errors files. Note that the ``id`` parameter of the ``LOG`` macros (to specify the logfileId) is not required for the ``DBG`` macros (the -filename to which debug records are written is declared in ``constants.h`` – see the enum class ``LOGFILE`` and associated +filename to which debug records are written is declared in ``constants.h`` – see the enum class ``LOGFILE`` and associated descriptor map ``LOGFILE_DESCRIPTOR``). diff --git a/online-docs/pages/Developer guide/Services/Logging and debugging/services-logging-debugging.rst b/online-docs/pages/Developer guide/Services/Logging and debugging/services-logging-debugging.rst index 362becda5..9a6631e85 100644 --- a/online-docs/pages/Developer guide/Services/Logging and debugging/services-logging-debugging.rst +++ b/online-docs/pages/Developer guide/Services/Logging and debugging/services-logging-debugging.rst @@ -25,11 +25,11 @@ When the base-level logging functionality was created, debugging functionality w debugging and the issuing of warning messages easier. A set of logging macros was also provided to make logging easier. The debug macros are still useful, and their use is encouraged (rather than inserting print statements using ``std::cout`` or ``std::cerr``). -When the ``BSE`` code was refactored, some rudimentary error handling functionality was also provided in the form of the +When the ``BSE`` code was refactored, some rudimentary error handling functionality was also provided in the form of the :doc:`Errors service <../services-error-handling>` an attempt at making error handling easier. Some of the functionality provided by the :doc:`Errors service <../services-error-handling>` supersedes the ``DBG_WARN*`` macros provided as part of the Log class, but the ``DBG_WARN*`` macros are still useful in some circumstances (and in fact are still used in various places in the code). The ``LOG*`` macros are somewhat less -useful, but remain in case the original base-level logging functionality (that which underlies the expanded logging functionality) is used in +useful, but remain in case the original base-level logging functionality (that which underlies the expanded logging functionality) is used in the future (as mentioned above, it could still be useful in some circumstances). The expanded logging functionality introduces Standard Log Files - described in :doc:`services-extended-logging`. diff --git a/online-docs/pages/Developer guide/Services/Program options/services-program-options.rst b/online-docs/pages/Developer guide/Services/Program options/services-program-options.rst index 154908183..da31ec36f 100644 --- a/online-docs/pages/Developer guide/Services/Program options/services-program-options.rst +++ b/online-docs/pages/Developer guide/Services/Program options/services-program-options.rst @@ -6,7 +6,7 @@ A Program Options service is provided, encapsulated in a singleton object (an in The ``Options`` class member variables are private, and public getter functions have been created for the program options currently used in the code. -The Options service can be accessed by referring to the ``Options::Instance()`` object. For example, to retrieve the value of +The Options service can be accessed by referring to the ``Options::Instance()`` object. For example, to retrieve the value of the ``--quiet`` program option, call the ``Options::Quiet()`` getter function:: bool quiet = Options::Instance()→Quiet(); diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-defaultSeed.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-defaultSeed.rst index ba53c6792..0015acf4e 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-defaultSeed.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-defaultSeed.rst @@ -5,4 +5,4 @@ Rand::DefaultSeed() UNSIGNED LONG INT Rand::DefaultSeed() -Returns the ``gsl`` default seed ``gsl_rng_default_seed``. \ No newline at end of file +Returns the ``gsl`` default seed ``gsl_rng_default_seed``. diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-free.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-free.rst index a470c04b5..ba9119485 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-free.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-free.rst @@ -5,4 +5,4 @@ Rand::Free() VOID Rand::Free() -Frees any dynamically allocated memory. \ No newline at end of file +Frees any dynamically allocated memory. diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-initialise.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-initialise.rst index 05e5c221c..2b57c78ff 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-initialise.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-initialise.rst @@ -6,4 +6,4 @@ Rand::Initialise() VOID Rand::Initialise() Initialises the ``gsl`` random number generator. If the environment variable ``GSL_RNG_SEED`` exists, the ``gsl`` random number generator -is seeded with the value of the environment variable, otherwise it is seeded with the current time. \ No newline at end of file +is seeded with the value of the environment variable, otherwise it is seeded with the current time. diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-random1.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-random1.rst index e21545b6a..92e7760fb 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-random1.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-random1.rst @@ -5,4 +5,4 @@ Rand:Random() DOUBLE Rand::Random() -Returns a random floating point number uniformly distributed in the range [0.0, 1.0). \ No newline at end of file +Returns a random floating point number uniformly distributed in the range [0.0, 1.0). diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-random2.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-random2.rst index b2c973723..525ac8eb3 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-random2.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-random2.rst @@ -5,7 +5,7 @@ Rand::Random(p_Lower, p_Upper) DOUBLE Rand::Random(const DOUBLE p_Lower, const DOUBLE p_Upper) -Returns a random floating point number uniformly distributed in the range [``p_Lower``, ``p_Upper``), where ``p_Lower`` +Returns a random floating point number uniformly distributed in the range [``p_Lower``, ``p_Upper``), where ``p_Lower`` :math:`\small \leq` ``p_Upper``. -(``p_Lower`` and ``p_Upper`` will be swapped if ``p_Lower`` :math:`\small \gt` ``p_Upper`` as passed) \ No newline at end of file +(``p_Lower`` and ``p_Upper`` will be swapped if ``p_Lower`` :math:`\small \gt` ``p_Upper`` as passed) diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomGaussian.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomGaussian.rst index ff32530cf..be8901d51 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomGaussian.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomGaussian.rst @@ -5,4 +5,4 @@ Rand::RandomGaussian(p_Sigma) DOUBLE Rand::RandomGaussian(const DOUBLE p_Sigma) -Returns a Gaussian random variate, with mean 0.0 and standard deviation ``p_Sigma``. \ No newline at end of file +Returns a Gaussian random variate, with mean 0.0 and standard deviation ``p_Sigma``. diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomInt1.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomInt1.rst index 456f2aedb..25c7c72d1 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomInt1.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomInt1.rst @@ -5,7 +5,7 @@ Rand::RandomInt(p_Lower, p_Upper) INT Rand::RandomInt(const INT p_Lower, const INT p_Upper) -Returns a random integer number uniformly distributed in the range [``p_Lower``, ``p_Upper``), where ``p_Lower`` +Returns a random integer number uniformly distributed in the range [``p_Lower``, ``p_Upper``), where ``p_Lower`` :math:`\small \leq` ``p_Upper``. -(``p_Lower`` and ``p_Upper`` will be swapped if ``p_Lower`` :math:`\small \gt` ``p_Upper`` as passed) \ No newline at end of file +(``p_Lower`` and ``p_Upper`` will be swapped if ``p_Lower`` :math:`\small \gt` ``p_Upper`` as passed) diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomInt2.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomInt2.rst index 332817d5a..d6569a5fa 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomInt2.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-randomInt2.rst @@ -4,7 +4,7 @@ Rand::RandomInt(p_Upper) :: INT Rand::RandomInt(const INT p_Upper) - + Returns a random integer number uniformly distributed in the range [0, ``p_Upper``), where 0 :math:`\small \leq` ``p_Upper``. - -Returns 0 if ``p_Upper`` :math:`\small \lt` 0. \ No newline at end of file + +Returns 0 if ``p_Upper`` :math:`\small \lt` 0. diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-seed.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-seed.rst index 82f3a793a..e80098c52 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-seed.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers-seed.rst @@ -5,4 +5,4 @@ Rand::Seed(p_Seed) UNSIGNED LONG INT Rand::Seed(const UNSIGNED LONG p_Seed) -Sets the seed for the ``gsl`` random number generator to ``p_Seed``. The return value is the seed. \ No newline at end of file +Sets the seed for the ``gsl`` random number generator to ``p_Seed``. The return value is the seed. diff --git a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers.rst b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers.rst index 5213228e7..a3c9651a9 100644 --- a/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers.rst +++ b/online-docs/pages/Developer guide/Services/Random numbers/services-random-numbers.rst @@ -4,15 +4,15 @@ Random numbers service A Random Number service is provided, with the ``gsl`` Random Number Generator encapsulated in a singleton object (an instantiation of the ``Rand`` class). -The ``Rand`` class member variables are private, and public functions have been created for random number functionality required by +The ``Rand`` class member variables are private, and public functions have been created for random number functionality required by the code. -The Rand service can be accessed by referring to the ``Rand::Instance()`` object. For example, to generate a uniform random floating +The Rand service can be accessed by referring to the ``Rand::Instance()`` object. For example, to generate a uniform random floating point number in the range [0, 1), call the ``Rand::Random()`` function:: double u = Rand::Instance()→Random(); -Since that could become unwieldy, there is a convenience macro to access the Rand service. The macro just defines "RAND" as +Since that could become unwieldy, there is a convenience macro to access the Rand service. The macro just defines "RAND" as "Rand::Instance()", so calling the ``Rand::Random()`` function can be written as:: double u = RAND→Random(); @@ -21,7 +21,7 @@ The Rand service must be initialised before use. Initialise the Rand service by RAND→Initialise(); -Dynamically allocated memory associated with the ``gsl`` random number generator should be returned to the system by calling the +Dynamically allocated memory associated with the ``gsl`` random number generator should be returned to the system by calling the ``Rand::Free()`` function:: RAND→Free(); @@ -43,4 +43,3 @@ The Rand service provides the following public member functions: ./services-random-numbers-randomGaussian ./services-random-numbers-randomInt1 ./services-random-numbers-randomInt2 - diff --git a/online-docs/pages/Developer guide/Services/services-error-handling.rst b/online-docs/pages/Developer guide/Services/services-error-handling.rst index e51795b02..b065ff2af 100644 --- a/online-docs/pages/Developer guide/Services/services-error-handling.rst +++ b/online-docs/pages/Developer guide/Services/services-error-handling.rst @@ -13,7 +13,7 @@ be printed. The current values for scope are: .. list-table:: - :widths: 30 70 + :widths: 30 70 :header-rows: 0 :class: aligned-text @@ -32,7 +32,7 @@ The current values for scope are: * - **FIRST_IN_FUNCTION** - the error will be printed only on the first time it is encountered anywhere in the same function of an object instance in the current execution of COMPAS (i.e. will print more than once if encountered in the same function name in different objects; useful for debugging). -The Errors service provides methods to print both warnings and errors – essentially the same thing (for printing), but warning messages are prepended with +The Errors service provides methods to print both warnings and errors – essentially the same thing (for printing), but warning messages are prepended with ':boldtext:`WARNING:` ', whereas error messages are prepended with ':boldtext:`ERROR:` '. Errors and warnings are printed by using the macros defined in ``ErrorsMacros.h``. They are: @@ -42,7 +42,7 @@ Error macros ------------ :: - + SHOW_ERROR(error_number) // prints the error message associated with error // number (from the error catalog) prepended by // 'ERROR: ' @@ -57,7 +57,7 @@ Error macros SHOW_ERROR_IF(cond, error_number, error_string) // if 'cond' is TRUE, prints the error message // associated with error number (from the error - // catalog) prepended by 'ERROR: ', and appends + // catalog) prepended by 'ERROR: ', and appends // 'error_string' @@ -80,8 +80,8 @@ The ``WARNING`` macros are: Static macros ------------- -An additional set of macros is provided to be used in static functions and other functions that are not contained within an instantiated -object (e.g. main()). +An additional set of macros is provided to be used in static functions and other functions that are not contained within an instantiated +object (e.g. main()). The static ``ERROR`` macros are: @@ -122,7 +122,7 @@ Any object that uses the the ``SHOW_ERROR(_IF)`` and ``SHOW_WARN(_IF)`` macros m OBJECT_TYPE ObjectType()** const { return m ObjectType; } STELLAR_TYPE StellarType()** const { return m StellarType; } -These functions are called by the ``ERROR`` and ``WARNING`` macros. If any of the functions are not applicable to the object, +These functions are called by the ``ERROR`` and ``WARNING`` macros. If any of the functions are not applicable to the object, then they must return ':italictext:`type`::NONE' (all objects should implement ObjectId() correctly). Error and warning messages displayed using the ``SHOW_ERROR(_IF)_STATIC`` and ``SHOW_WARN(_IF)_STATIC`` macros will always contain: @@ -138,7 +138,7 @@ but will not contain: The object id of the calling object (not available in static functions) The object type of the calling object (doesn't add enough information on its own) The stellar type of the calling object (not available in static functions) - + Handling errors at runtime -------------------------- @@ -214,7 +214,7 @@ We have 3 modes for the floating-point error instrumentation: :: Instrumentation not active : This mode is enabled with the option '--fp-error-mode OFF' (This is the default mode). - + This mode is just the default behaviour of the C++ compiler, as described above. In this mode, the program execution will not be interrupted in the event of a floating-point error, but the error reported in the system parameters file will be set to indicate if a floating-point error @@ -223,18 +223,18 @@ We have 3 modes for the floating-point error instrumentation: execution of the program to halt (and, rather obtusely, will report "Floating point exception"). Floating-point traps enabled: This mode is enabled with the option '--fp-error-mode ON'. - + In this mode, floating-point traps 'DIVBYZERO', 'INVALID', 'OVERFLOW', and 'UNDERFLOW' are enabled. When a floating-point operation traps, a 'SIGFPE' signal is raised and the 'SIGFPE' signal handler is invoked, and the signal handler raises a 'runtime_error' exception, with a 'what' argument of - "FPE" (and in this mode we cannot, and do not, differentiate between 'DIVBYZERO', 'INVALID', + "FPE" (and in this mode we cannot, and do not, differentiate between 'DIVBYZERO', 'INVALID', 'OVERFLOW', and 'UNDERFLOW'). The exception raised will cause the execution of the program to halt if it is not caught and managed. We catch 'runtime_error' exceptions in 'Star::Evolve()' for SSE mode, in 'BaseBinaryStar::Evolve()' for BSE mode, and in 'main()' for errors that might occur outside the evolution of stars or binaries. Debug mode : This mode is enabled with the option '--fp-error-mode DEBUG'. - + In this mode, floating-point traps 'DIVBYZERO', 'INVALID', 'OVERFLOW', and 'UNDERFLOW' are enabled. When a floating-point operation traps, a 'SIGFPE' signal is raised and the 'SIGFPE' signal handler is called, but instead of raising a 'runtime_error' exception, the signal handler prints the stack @@ -244,7 +244,7 @@ We have 3 modes for the floating-point error instrumentation: The construction of the stack trace in debug mode happens inside the signal handler, and the functions used to do that are generally not signal safe - but we call 'std::exit()' anyway, so that should not be a problem. - + Throwing errors --------------- @@ -263,15 +263,15 @@ throw an exception and cause the ordinary program flow to be interrupted. These THROW_ERROR_STATIC(error_number, error_string) : displays the error (as described above), then throws exception THROW_ERROR_IF_STATIC(cond, error_number) : if "cond" is TRUE, displays the error (as described above), then throws exception THROW_ERROR_IF_STATIC(cond, error_number, error_string): if "cond" is TRUE, displays the error (as described above), then throws exception - -In each case, the exception thrown by the ``THROW*`` macros is the 'error_number' argument cast as an integer, so it can be caught by using + +In each case, the exception thrown by the ``THROW*`` macros is the 'error_number' argument cast as an integer, so it can be caught by using ``catch (int e)`` and inspecting "e". Writing errors to file ---------------------- -When the user sets the ``--errors-to-file`` program option to ``TRUE`` (``FALSE`` by default), errors and, if the user also sets the +When the user sets the ``--errors-to-file`` program option to ``TRUE`` (``FALSE`` by default), errors and, if the user also sets the ``--enable-warnings`` program option to ``TRUE`` (``FALSE`` by default), warnings will be written to a log file in addition to being displayed on stdout/stderr as they occur. In this case, the ``Log::Start()`` parameter ``p_ErrorsToFile`` will be ``TRUE``, instructing the ``LOGGING`` service to write errors and warnings to a log file. diff --git a/online-docs/pages/Developer guide/Services/services.rst b/online-docs/pages/Developer guide/Services/services.rst index 7b1f7b173..5993b1434 100644 --- a/online-docs/pages/Developer guide/Services/services.rst +++ b/online-docs/pages/Developer guide/Services/services.rst @@ -3,8 +3,8 @@ Services A number of services have been provided to help simplify the code. The code for each service is encapsulated in a singleton object (an instantiation of the relevant class). The singleton design pattern allows the definition of a class that can only be instantiated -once, and that instance effectively exists as a global object available to all the code without having to be passed around as a -parameter. Singletons are a little anti-OO, but provided they are used judiciously are not necessarily a bad thing, and can be very +once, and that instance effectively exists as a global object available to all the code without having to be passed around as a +parameter. Singletons are a little anti-OO, but provided they are used judiciously are not necessarily a bad thing, and can be very useful in certain circumstances. Services provided are: @@ -17,4 +17,3 @@ Services provided are: ./Random numbers/services-random-numbers ./Logging and debugging/services-logging-debugging ./services-error-handling - \ No newline at end of file diff --git a/online-docs/pages/Developer guide/changelog.rst b/online-docs/pages/Developer guide/changelog.rst index a49f6df2b..3c632a1a7 100644 --- a/online-docs/pages/Developer guide/changelog.rst +++ b/online-docs/pages/Developer guide/changelog.rst @@ -15,8 +15,8 @@ Following is a fragment of the change log:: // - restored property names in COMPASUnorderedMap STAR_PROPERTY_LABEL in constants.h (issue #218) (was causing logfile definitions files to be parsed incorrectly) // 02.09.10 IM - Apr 12, 2020 - Minor enhancement: added Mueller & Mandel 2020 remnant mass and kick prescription, MULLERMANDEL // Defect repair: corrected spelling of output help string for MULLER2016 and MULLER2016MAXWELLIAN - // 02.10.01 IM - Apr 14, 2020 - Minor enhancement: - // - moved code so that SSE will also sample SN kicks, following same code branch as BSE + // 02.10.01 IM - Apr 14, 2020 - Minor enhancement: + // - moved code so that SSE will also sample SN kicks, following same code branch as BSE // 02.10.02 SS - Apr 16, 2020 - Bug Fix for issue #105 ; core and envelope masses for HeHG and TPAGB stars // 02.10.03 JR - Apr 17, 2020 - Defect repair: // - added LBV and WR winds to SSE (issue #223) @@ -36,7 +36,7 @@ COMPAS version number Currently the COMPAS version number is set manually whenever changes are made to the code. A planned enhancement is to have the v ersion number increment automatically whenever a github pull request is mmerged. -The version number is formatted as: +The version number is formatted as: `major`\.\ `minor`\ .\ `defect` @@ -66,15 +66,15 @@ release might include: - significant new features - removing deprecated features - integration with other applications - + Major releases typically occur somewhat infrequently. Minor releases -------------- -Minor releases introduce new features to the application. Minor releases are smaller than major -releases - they can be regarded as `edits` to the current version of the application. Minor releases are not a total overhaul - they enhance and +Minor releases introduce new features to the application. Minor releases are smaller than major +releases - they can be regarded as `edits` to the current version of the application. Minor releases are not a total overhaul - they enhance and improve existing functionality. A minor release might include: - limited new features and functionality diff --git a/online-docs/pages/Developer guide/floating-point-comparisons.rst b/online-docs/pages/Developer guide/floating-point-comparisons.rst index 42b49cfd3..5c5e4b3e9 100644 --- a/online-docs/pages/Developer guide/floating-point-comparisons.rst +++ b/online-docs/pages/Developer guide/floating-point-comparisons.rst @@ -2,14 +2,14 @@ Floating-point comparisons ========================== Floating-point comparisons are inherently problematic. Testing floating-point numbers for equality, or even inequality, is fraught with -problems due to the internal representation of floating-point numbers: floatingpoint numbers are stored with a fixed number of binary -digits, which limits their precision and accuracy. The problems with floating-point comparisons are even more evident if one or both of +problems due to the internal representation of floating-point numbers: floatingpoint numbers are stored with a fixed number of binary +digits, which limits their precision and accuracy. The problems with floating-point comparisons are even more evident if one or both of the numbers being compared are the results of (perhaps several) floating-point operations (rather than comparing constants). To avoid the problems associated with floating-point comparisons it is (almost always) better to do any such comparisons with a tolerance -rather than an absolute comparison. To this end, a floating-point comparison function has been provided, and (almost all of) the -floating-point comparisons in the code have been changed to use that function. The function uses both an absolute tolerance and a relative -tolerance, which are both declared in constants.h. Whether the function uses a tolerance or not can be changed by ``#define``-ing or +rather than an absolute comparison. To this end, a floating-point comparison function has been provided, and (almost all of) the +floating-point comparisons in the code have been changed to use that function. The function uses both an absolute tolerance and a relative +tolerance, which are both declared in constants.h. Whether the function uses a tolerance or not can be changed by ``#define``-ing or ``#undef``-ing the ``COMPARE_WITH_TOLERANCE`` flag in ``constants.h`` (so the change is a compile-time change, not run-time). @@ -17,10 +17,10 @@ The compare function is defined in utils.h and is implemented as follows:: static int Compare(const double p_X, const double p_Y) { |br| #ifdef COMPARE WITH TOLERANCE - + return (fabs(p X – p Y) <= max( FLOAT_TOLERANCE_ABSOLUTE, - FLOAT_TOLERANCE_RELATIVE * - max( fabs(p_X), fabs(p Y)))) ? 0 + FLOAT_TOLERANCE_RELATIVE * + max( fabs(p_X), fabs(p Y)))) ? 0 : (p_X < p_Y ? –1 : 1); #else @@ -35,11 +35,11 @@ not defined the comparison is an absolute comparison. The function returns an integer indicating the result of the comparison: .. list-table:: - :widths: 8 92 + :widths: 8 92 :header-rows: 0 :class: aligned-text - * - –1 + * - –1 - indicates that ``p_X`` is considered to be less than ``p_Y`` * - |_| |_| 0 - indicates ``p_X`` and ``p_Y`` are considered to be equal @@ -47,12 +47,12 @@ The function returns an integer indicating the result of the comparison: - indicates that ``p_X`` is considered to be greater than ``p_Y`` The comparison is done using both an absolute tolerance and a relative tolerance. The tolerances can be defined to be the same number, or -different numbers. If the relative tolerance is defined as 0.0, the comparison is done using the absolute tolerance only, and if the +different numbers. If the relative tolerance is defined as 0.0, the comparison is done using the absolute tolerance only, and if the absolute tolerance is defined as 0.0 the comparison is done with the relative tolerance only. -Absolute tolerances are generally more effective when the numbers being compared are small – so using an absolute tolerance of (say) +Absolute tolerances are generally more effective when the numbers being compared are small – so using an absolute tolerance of (say) 0.0000005 is generally effective when comparing single-digit numbers (or so), but is less effective when comparing numbers in the thousands -or millions. For comparisons of larger numbers a relative tolerance is generally more effective (the actual tolerance is wider because the +or millions. For comparisons of larger numbers a relative tolerance is generally more effective (the actual tolerance is wider because the relative tolerance is multiplied by the larger absolute value of the numbers being compared). The tolerances used for the comparison are defined in ``constants.h`` as ``FLOAT_TOLERANCE_ABSOLUTE`` and ``FLOAT_TOLERANCE_RELATIVE``. diff --git a/online-docs/pages/Developer guide/git-workflow.rst b/online-docs/pages/Developer guide/git-workflow.rst index 75f6d7c71..03b9b17a3 100644 --- a/online-docs/pages/Developer guide/git-workflow.rst +++ b/online-docs/pages/Developer guide/git-workflow.rst @@ -29,4 +29,4 @@ The tests will fail if the fiducial binary system does not lead to a binary blac .. literalinclude:: ../../../py_tests/test_data/run.sh :linenos: - :language: bash \ No newline at end of file + :language: bash diff --git a/online-docs/pages/Developer guide/object-ids.rst b/online-docs/pages/Developer guide/object-ids.rst index bbf98b11b..40deccfd7 100644 --- a/online-docs/pages/Developer guide/object-ids.rst +++ b/online-docs/pages/Developer guide/object-ids.rst @@ -1,15 +1,15 @@ Object identifiers ================== -All objects (instantiations of a class) are assigned unique object identifiers of type ``OBJECT_ID`` (unsigned long int - see +All objects (instantiations of a class) are assigned unique object identifiers of type ``OBJECT_ID`` (unsigned long int - see ``constants.h`` for the typedef). The purpose of the unique object id is to aid in object tracking and debugging. **Note that the object id is not the same as, nor it superseded by, the RANDOM_SEED value assigned to each single or binary star**. The RANDOM_SEED is used to seed the random number generator, and can be used to uniquely identify a single or binary star. The object -id is more granular the the RANDOM_SEED. For example, each binary star is comprised of multiple objects: the ``BinaryStar`` object, -which contains two ``BaseBinaryStar`` objects (the object undergoing evolution, and a saved copy); each ``BaseBinaryStar`` object -contains two ``BinaryConstituentStar`` objects (one for each of the constituent stars), and each ``BinaryConstituentStar`` object +id is more granular the the RANDOM_SEED. For example, each binary star is comprised of multiple objects: the ``BinaryStar`` object, +which contains two ``BaseBinaryStar`` objects (the object undergoing evolution, and a saved copy); each ``BaseBinaryStar`` object +contains two ``BinaryConstituentStar`` objects (one for each of the constituent stars), and each ``BinaryConstituentStar`` object inherits from the ``Star`` class, which contains two ``BaseStar`` objects (the underlying star and a saved copy). Whereas the RANDOM_SEED uniquely identifies (for example) a binary star, and so identifies the collection of objects that comprise the binary star, the object ids uniquely identify the constituent objects of the binary star. Object tracking at this lower level cannot be achieved using the RANDOM_SEED, @@ -28,5 +28,5 @@ Objects should expose the following functions:: If any of the functions are not applicable to the object, then they must return "\*::NONE" (all objects should implement ``ObjectId()`` correctly). -Any object that uses the Errors service (i.e. the ``ERRORS`` and ``WARNINGS`` macros) must expose these functions: the functions are -called by the ``ERRORS`` and ``WARNINGS`` macros (:doc:`./Services/services-error-handling`). \ No newline at end of file +Any object that uses the Errors service (i.e. the ``ERRORS`` and ``WARNINGS`` macros) must expose these functions: the functions are +called by the ``ERRORS`` and ``WARNINGS`` macros (:doc:`./Services/services-error-handling`). diff --git a/online-docs/pages/Getting started/getting-started.rst b/online-docs/pages/Getting started/getting-started.rst index f2cc6de8f..537cce7cb 100644 --- a/online-docs/pages/Getting started/getting-started.rst +++ b/online-docs/pages/Getting started/getting-started.rst @@ -194,4 +194,3 @@ Next steps Once you have completed the steps shown above, you're ready to run COMPAS. The :doc:`COMPAS User Guide <../User guide/user-guide>` explains in detail how to run COMPAS, but to check that COMPAS is installed correctly, and to get a taste of what running COMPAS looks like, you could try the :doc:`COMPAS Tutorial <../User guide/Running COMPAS/running-compas>`. - diff --git a/online-docs/pages/User guide/COMPAS output/output.rst b/online-docs/pages/User guide/COMPAS output/output.rst index 3ed80c434..552ed012d 100644 --- a/online-docs/pages/User guide/COMPAS output/output.rst +++ b/online-docs/pages/User guide/COMPAS output/output.rst @@ -1,16 +1,16 @@ COMPAS output ============= -Summary and status information during the evolution of stars is written to stdout; how much is written depends upon the value of the +Summary and status information during the evolution of stars is written to stdout; how much is written depends upon the value of the ``--quiet`` program option. -Detailed information is written to log files (described below). All COMPAS output files are created inside a container directory, specified +Detailed information is written to log files (described below). All COMPAS output files are created inside a container directory, specified by the ``--output-container`` program option. -If detailed output log files are created (see the ``--detailed-output`` program option), they will be created inside a containing directory +If detailed output log files are created (see the ``--detailed-output`` program option), they will be created inside a containing directory named ``Detailed_Output`` within the COMPAS output container directory. -Also created in the COMPAS container directory is a file named ``Run_Details`` in which COMPAS records some details of the run (COMPAS +Also created in the COMPAS container directory is a file named ``Run_Details`` in which COMPAS records some details of the run (COMPAS version, start time, command line program option values etc.). Note that the option values recorded in the Run details file are the values specified on the command line, not the values specified in a ``grid`` file (if used). diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-annotations.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-annotations.rst index 0f955538e..569927355 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-annotations.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-annotations.rst @@ -5,8 +5,8 @@ COMPAS provides functionality that allows users to annotate standard log files. The original motivation for log file annotation functionality was to enable users to describe the contents of custom grid files, but annotations can be used for any reason. With the ability to annotate the log files, users can indicate the origin of various -input data - e.g. the user could indicate what IMF was used to draw initial mass values, or what distribution was used to draw -mass ratio (q), etc. +input data - e.g. the user could indicate what IMF was used to draw initial mass values, or what distribution was used to draw +mass ratio (q), etc. Annotations are written to log files as columns of data (aka datasets in ``HDF5`` files). Annotations are specified via program options, and so can be specified on the command line as well as in grid files. Because annotations are written to log files @@ -51,7 +51,7 @@ Neither header strings, nor annotation strings, may begin with the dash characte as option names before passing them through to COMPAS. COMPAS imposes no limit to the length of an individual annotation header string or annotation string (number of characters), but -there may be practical limits imposed by the underlying system. +there may be practical limits imposed by the underlying system. Using vector option shorthand notation @@ -78,7 +78,7 @@ example above, if the number of annotations expected, as defined by the number o program option is more than 5, then annotations beyond annotation 5 (the last annotation actually specified by the user) will default in the same manner as described above. -Spaces in annotation header strings and annotation strings need to be enclosed in quotes, or the shell parser will parse them as +Spaces in annotation header strings and annotation strings need to be enclosed in quotes, or the shell parser will parse them as separate arguments before passing them through to COMPAS. If the log file type is specified as TXT, then any spaces in annotation header strings and annotation strings need to be enclosed in quotes to avoid the shell parser parsing them as separate arguments, but also need to have enclosing quotes propagated to the logfile, or the spaces will be interpreted as delimiters in the log file - in this @@ -87,7 +87,7 @@ case, the user will need to add enclosing escaped quote characters ('\"') before --notes-hdrs [headerstr1,"\"header str 2\"",headerstr3,...,headerStrN] The shorthand notation is expanded to the notation described above (the COMPAS code just fills in the omitted annotation strings with -the required defaults), so the caveat mentioned above that neither header strings, nor annotation strings, may begin with the dash +the required defaults), so the caveat mentioned above that neither header strings, nor annotation strings, may begin with the dash character ('-') applies to the shorthand notation. Shorthand notation is optional: users may choose to use the notation described above rather than shorthand notation, but in that case @@ -126,10 +126,10 @@ COMPAS provides functionality to allow users to change which properties are to b see :doc:`./standard-logfiles-record-specification`. The property specifier ``PROGRAM_OPTION::NOTES`` can be added to, or removed from, any of the log file record specifiers by the use of this functionality. -Furthermore, because at run-time the number of annotation columns is known (information not known at compile-time), the +Furthermore, because at run-time the number of annotation columns is known (information not known at compile-time), the ``PROGRAM_OPTION::NOTES`` property specifier can (optionally) be indexed to allow the specification of a particular annotation column. -Thus, ``PROGRAM_OPTION::NOTES`` (with no index) indicates *all* annotations columns, whereas ``PROGRAM_OPTION::NOTES[2]`` indicates -annotation column 2 (1-based: the first annotation column is indicated by ``PROGRAM_OPTION::NOTES[1]``). By using the optional index, +Thus, ``PROGRAM_OPTION::NOTES`` (with no index) indicates *all* annotations columns, whereas ``PROGRAM_OPTION::NOTES[2]`` indicates +annotation column 2 (1-based: the first annotation column is indicated by ``PROGRAM_OPTION::NOTES[1]``). By using the optional index, users can add specific annotations columns to, or remove them from, any of the log files. For example, this log file definitions file entry:: @@ -171,7 +171,7 @@ See :doc:`./standard-logfiles-record-specification` for more details. The property ``PROGRAM_OPTION::NOTES`` is included in the default record specifier in ``constants.h`` for both the SSE System Parameters log file, and the BSE System Parameters log file. -Note that whichever configuration method is used to include annotations in log files, if no annotation headers are specified via the +Note that whichever configuration method is used to include annotations in log files, if no annotation headers are specified via the ``notes-hdrs`` program option, no annotations will be included in any log file. @@ -185,4 +185,3 @@ log file(s). In such situations, it is likely that the annotation headers and st for each system in a grid file, and so will be recorded in the ``Run_Details`` file - so removing the ``PROGRAM_OPTION::NOTES`` property from the log file record specifications will prevent them from being repeated needlessly in the log files, and they can be retrieved as required from the ``Run_Details`` file. - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-ce.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-ce.rst index 1b05ecab5..e4cc9bfda 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-ce.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-ce.rst @@ -14,7 +14,7 @@ Default record definition for the BSE Common Envelopes log file:: BINARY_PROPERTY::ECCENTRICITY_POST_COMMON_ENVELOPE, BINARY_PROPERTY::SEMI_MAJOR_AXIS_PRE_COMMON_ENVELOPE, BINARY_PROPERTY::SEMI_MAJOR_AXIS_POST_COMMON_ENVELOPE, - BINARY_PROPERTY::SEMI_MAJOR_AXIS_POST_STAGE_1_CE, + BINARY_PROPERTY::SEMI_MAJOR_AXIS_POST_STAGE_1_CE, BINARY_PROPERTY::ROCHE_LOBE_RADIUS_1_PRE_COMMON_ENVELOPE, BINARY_PROPERTY::ROCHE_LOBE_RADIUS_1_POST_COMMON_ENVELOPE, BINARY_PROPERTY::ROCHE_LOBE_RADIUS_2_PRE_COMMON_ENVELOPE, @@ -56,7 +56,7 @@ Default record definition for the BSE Common Envelopes log file:: STAR_2_PROPERTY::BINDING_ENERGY_LOVERIDGE, STAR_2_PROPERTY::BINDING_ENERGY_LOVERIDGE_WINDS, STAR_2_PROPERTY::BINDING_ENERGY_KRUCKOW, - STAR_2_PROPERTY::CONVECTIVE_ENV_MASS, + STAR_2_PROPERTY::CONVECTIVE_ENV_MASS, BINARY_PROPERTY::MASS_TRANSFER_TRACKER_HISTORY, BINARY_PROPERTY::STELLAR_MERGER, BINARY_PROPERTY::OPTIMISTIC_COMMON_ENVELOPE, @@ -83,4 +83,3 @@ Default record definition for the BSE Common Envelopes log file:: BINARY_PROPERTY::IMMEDIATE_RLOF_POST_COMMON_ENVELOPE, BINARY_PROPERTY::SIMULTANEOUS_RLOF }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-dco.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-dco.rst index ed32798d5..572ddc27a 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-dco.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-dco.rst @@ -5,17 +5,15 @@ Default record definition for the BSE Double Compact Objects log file:: const ANY_PROPERTY_VECTOR BSE_DOUBLE_COMPACT_OBJECTS_REC = { BINARY_PROPERTY::RANDOM_SEED, - BINARY_PROPERTY::SEMI_MAJOR_AXIS_AT_DCO_FORMATION, + BINARY_PROPERTY::SEMI_MAJOR_AXIS_AT_DCO_FORMATION, BINARY_PROPERTY::ECCENTRICITY_AT_DCO_FORMATION, STAR_1_PROPERTY::MASS, STAR_1_PROPERTY::STELLAR_TYPE, - STAR_2_PROPERTY::MASS, + STAR_2_PROPERTY::MASS, STAR_2_PROPERTY::STELLAR_TYPE, BINARY_PROPERTY::TIME_TO_COALESCENCE, BINARY_PROPERTY::TIME, - BINARY_PROPERTY::MERGES_IN_HUBBLE_TIME, - STAR_1_PROPERTY::RECYCLED_NEUTRON_STAR, + BINARY_PROPERTY::MERGES_IN_HUBBLE_TIME, + STAR_1_PROPERTY::RECYCLED_NEUTRON_STAR, STAR_2_PROPERTY::RECYCLED_NEUTRON_STAR }; - - \ No newline at end of file diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-detailed-output.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-detailed-output.rst index e57f25375..f9e9aa67b 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-detailed-output.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-detailed-output.rst @@ -85,4 +85,3 @@ Default record definition for the BSE Detailed Output log file:: BINARY_PROPERTY::RLOF_MASS_TRANSFER_TIMESCALE, BINARY_PROPERTY::RLOF_ACCRETION_EFFICIENCY }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-pulsars.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-pulsars.rst index be92f1978..5dde1dd33 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-pulsars.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-pulsars.rst @@ -24,5 +24,3 @@ Default record definition for the BSE Pulsar Evolution log file:: BINARY_PROPERTY::TIME, BINARY_PROPERTY::DT }; - - \ No newline at end of file diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-rlof.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-rlof.rst index 5dc91b134..b0defc085 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-rlof.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-rlof.rst @@ -43,4 +43,3 @@ Default record definition for the BSE RLOF Parameters log file:: STAR_2_PROPERTY::ZETA_HURLEY, STAR_2_PROPERTY::ZETA_HURLEY_HE }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-supernovae.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-supernovae.rst index f8c250f45..3982e2293 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-supernovae.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-supernovae.rst @@ -9,12 +9,12 @@ Default record definition for the BSE Supernovae log file:: SUPERNOVA_PROPERTY::KICK_MAGNITUDE, SUPERNOVA_PROPERTY::FALLBACK_FRACTION, BINARY_PROPERTY::ORBITAL_VELOCITY_PRE_SUPERNOVA, - BINARY_PROPERTY::DIMENSIONLESS_KICK_MAGNITUDE, + BINARY_PROPERTY::DIMENSIONLESS_KICK_MAGNITUDE, SUPERNOVA_PROPERTY::MEAN_ANOMALY, SUPERNOVA_PROPERTY::SUPERNOVA_THETA, SUPERNOVA_PROPERTY::SUPERNOVA_PHI, SUPERNOVA_PROPERTY::SN_TYPE, - BINARY_PROPERTY::ECCENTRICITY_PRE_SUPERNOVA, + BINARY_PROPERTY::ECCENTRICITY_PRE_SUPERNOVA, BINARY_PROPERTY::ECCENTRICITY, BINARY_PROPERTY::SEMI_MAJOR_AXIS_PRE_SUPERNOVA_RSOL, BINARY_PROPERTY::SEMI_MAJOR_AXIS_RSOL, @@ -38,6 +38,5 @@ Default record definition for the BSE Supernovae log file:: COMPANION_PROPERTY::SPEED, BINARY_PROPERTY::SYSTEMIC_SPEED, SUPERNOVA_PROPERTY::IS_HYDROGEN_POOR, - BINARY_PROPERTY::SUPERNOVA_ORBIT_INCLINATION_ANGLE, + BINARY_PROPERTY::SUPERNOVA_ORBIT_INCLINATION_ANGLE, }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-switchlog.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-switchlog.rst index 204d20eaf..40f165290 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-switchlog.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-switchlog.rst @@ -31,7 +31,7 @@ Note that the BSE SwitchLog file has the following columns automatically appende **STAR_SWITCHING** .. list-table:: - :widths: 20 80 + :widths: 20 80 :header-rows: 0 :class: aligned-text @@ -47,7 +47,7 @@ Note that the BSE SwitchLog file has the following columns automatically appende **SWITCHING_FROM** .. list-table:: - :widths: 20 80 + :widths: 20 80 :header-rows: 0 :class: aligned-text @@ -63,7 +63,7 @@ Note that the BSE SwitchLog file has the following columns automatically appende **SWITCHING_TO** .. list-table:: - :widths: 20 80 + :widths: 20 80 :header-rows: 0 :class: aligned-text @@ -79,7 +79,7 @@ Note that the BSE SwitchLog file has the following columns automatically appende **IS_MERGER** .. list-table:: - :widths: 20 80 + :widths: 20 80 :header-rows: 0 :class: aligned-text @@ -92,5 +92,5 @@ Note that the BSE SwitchLog file has the following columns automatically appende * - Header String: - "IS_MERGER" -These columns will always be automatically appended to each BSE Switch Log record: they cannot be removed via the log file record +These columns will always be automatically appended to each BSE Switch Log record: they cannot be removed via the log file record specifications file. diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-sysparms.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-sysparms.rst index 8f0cbcf02..d7da94e30 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-sysparms.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-sysparms.rst @@ -36,4 +36,3 @@ Default record definition for the BSE System Parameters log file:: BINARY_PROPERTY::ERROR, PROGRAM_OPTION::NOTES }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-system-snapshot.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-system-snapshot.rst index def0e08c1..bdda1d2c9 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-system-snapshot.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-BSE-system-snapshot.rst @@ -85,4 +85,3 @@ Default record definition for the BSE System Snapshot log file:: BINARY_PROPERTY::RLOF_MASS_TRANSFER_TIMESCALE, BINARY_PROPERTY::RLOF_ACCRETION_EFFICIENCY }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-detailed-output.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-detailed-output.rst index b5e4f0bdd..e7ed1b976 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-detailed-output.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-detailed-output.rst @@ -22,4 +22,3 @@ Default record definition for the SSE Detailed Output log file:: STAR_PROPERTY::DOMINANT_MASS_LOSS_RATE, STAR_PROPERTY::TIMESCALE_MS }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-supernovae.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-supernovae.rst index bec4e6fc4..1fa562278 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-supernovae.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-supernovae.rst @@ -8,7 +8,7 @@ Default record definition for the SSE Supernovae log file:: STAR_PROPERTY::DRAWN_KICK_MAGNITUDE, STAR_PROPERTY::KICK_MAGNITUDE, STAR_PROPERTY::FALLBACK_FRACTION, - STAR_PROPERTY::MEAN_ANOMALY, + STAR_PROPERTY::MEAN_ANOMALY, STAR_PROPERTY::SN_TYPE, STAR_PROPERTY::TOTAL_MASS_AT_COMPACT_OBJECT_FORMATION, STAR_PROPERTY::TOTAL_RADIUS_AT_COMPACT_OBJECT_FORMATION, @@ -22,4 +22,3 @@ Default record definition for the SSE Supernovae log file:: STAR_PROPERTY::TIME, STAR_PROPERTY::IS_HYDROGEN_POOR }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-switchlog.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-switchlog.rst index 9ecd23cc4..501547199 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-switchlog.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-switchlog.rst @@ -24,7 +24,7 @@ Note that the SSE SwitchLog file has the following columns automatically appende **SWITCHING_FROM** .. list-table:: - :widths: 20 80 + :widths: 20 80 :header-rows: 0 :class: aligned-text @@ -40,7 +40,7 @@ Note that the SSE SwitchLog file has the following columns automatically appende **SWITCHING_TO** .. list-table:: - :widths: 20 80 + :widths: 20 80 :header-rows: 0 :class: aligned-text @@ -53,5 +53,5 @@ Note that the SSE SwitchLog file has the following columns automatically appende * - Header String: - "SWITCHING_TO" -These columns will always be automatically appended to each SSE Switch Log record: they cannot be removed via the log file record +These columns will always be automatically appended to each SSE Switch Log record: they cannot be removed via the log file record specifications file. diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-sysparms.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-sysparms.rst index ab74767b0..21c883095 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-sysparms.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-sysparms.rst @@ -23,4 +23,3 @@ SSE system parameters PROGRAM_OPTION::WR_FACTOR, PROGRAM_OPTION::NOTES }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-system-snapshot.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-system-snapshot.rst index b79091fac..ffbc9f760 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-system-snapshot.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications-SSE-system-snapshot.rst @@ -22,4 +22,3 @@ Default record definition for the SSE System Snapshot log file:: STAR_PROPERTY::DOMINANT_MASS_LOSS_RATE, STAR_PROPERTY::TIMESCALE_MS }; - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications.rst index 786733766..6344dd47c 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-default-record-specifications.rst @@ -30,5 +30,3 @@ For Binary Star Evolution (BSE): standard-logfiles-default-record-specifications-BSE-pulsars standard-logfiles-default-record-specifications-BSE-rlof standard-logfiles-default-record-specifications-BSE-switchlog - - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-example-definitions-file.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-example-definitions-file.rst index 34684c9be..30a0732bf 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-example-definitions-file.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-example-definitions-file.rst @@ -8,56 +8,56 @@ This file (``COMPAS_Output_Definitions.txt``) is also delivered as part of the C :: # sample standard log file specifications file - + # the ’#’ character and anything following it on a single line is considered a comment # (so, lines starting with ’#’ are comment lines) - + # case is not significant # specifications can span several lines # specifications for the same log file are cumulative # if a log file is not specified in this file, the default specification is used - - + + # SSE Parameters - + # start with the default SSE Parameters specification and add ENV_MASS - + sse_sysparms_rec += { STAR_PROPERTY::ENV_MASS } - + # take the updated SSE Parameters specification and add ANGULAR_MOMENTUM - + sse_sysparms_rec += { STAR_PROPERTY::ANGULAR_MOMENTUM } - + # take the updated SSE Parameters specification and subtract MASS_0 and MDOT - + sse_sysparms_rec -= { STAR_PROPERTY::MASS_0, STAR_PROPERTY::MDOT } - + # SSE Pulsars - + # line ignored (comment). SSE Pulsars specification will be default - + # SSE_Pulsars_Rec = { STAR_PROPERTY::MASS } - + # BSE System Parameters - + bse_sysparms_rec = { # set the BSE System Parameters specification to: BINARY_PROPERTY::ID, # ID of the binary BINARY_PROPERTY::RANDOM_SEED, # RANDOM_SEED for the binary STAR_1_PROPERTY::MZAMS, # MZAMS for Star1 STAR_2_PROPERTY::MZAMS # MZAMS for Star2 } - + # ADD to the BSE System Parameters specification: # SEMI_MAJOR_AXIS_INITIAL for the binary # ECCENTRICITY_INITIAL for the binary # SUPERNOVA_THETA for Star1 and SUPERNOVA_PHI for Star1 - + bse_sysparms_rec += { BINARY_PROPERTY::SEMI_MAJOR_AXIS_INITIAL, BINARY_PROPERTY::ECCENTRICITY_INITIAL, STAR_1_PROPERTY::SUPERNOVA_THETA, STAR_1_PROPERTY::SUPERNOVA_PHI } - + bse_sysparms_rec += { # ADD to the BSE System Parameters specification: SUPERNOVA_PROPERTY::IS_ECSN, # IS_ECSN for the supernova star SUPERNOVA_PROPERTY::IS_SN, # IS_SN for the supernova star @@ -68,50 +68,50 @@ This file (``COMPAS_Output_Definitions.txt``) is also delivered as part of the C SUPERNOVA_PROPERTY::MZAMS, # MZAMS for the supernova star COMPANION_PROPERTY::MZAMS # MZAMS for the companion star } - + # SUBTRACT from the BSE System Parameters specification: # RANDOM_SEED for the binary # ID for the binary # all ANNOTATIONS - + bse_sysparms_rec -= { # SUBTRACT from the BSE System Parameters specification: BINARY_PROPERTY::RANDOM_SEED, # RANDOM_SEED for the binary BINARY_PROPERTY::ID, # ID for the binary PROGRAM_OPTION::NOTES # all ANNOTATIONS } - + bse_sysparms_rec += { PROGRAM_OPTION::NOTES[1], PROGRAM_OPTION::NOTES[3] } # ADD ANNOTATIONS 1 & 3 to the BSE System Parameters specification # BSE Double Compact Objects - + # set the BSE Double Compact Objects specification to MZAMS for Star1, and MZAMS for Star2 - + BSE_DCO_Rec = { STAR_1_PROPERTY::MZAMS, STAR_2_PROPERTY::MZAMS } - + # set the BSE Double Compact Objects specification to empty - nothing will be printed # (file will not be created) - + BSE_DCO_Rec = {} - - + + # BSE Supernovae - + BSE_SNE_Rec = {} # set spec empty - nothing will be printed (file will not be created) - - + + # BSE Common Envelopes - + BSE_CEE_Rec = {} # set spec empty - nothing will be printed (file will not be created) - - + + # BSE Pulsars - + # line ignored (comment). BSE Pulsars specification will be default - + # BSE_Pulsars_Rec = { STAR_1_PROPERTY::MASS, STAR_2_PROPERTY::MASS } - - + + # BSE Detailed Output - + BSE_Detailed_Rec = {} # set spec empty - nothing will be printed (file will not be created) diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-format.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-format.rst index 348bb1b1c..c2ffe906c 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-format.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-format.rst @@ -7,7 +7,7 @@ COMPAS can produce log files in several formats: - Comma Separated Values (``CSV``) - Tab Separated Values (``TSV``) - Plain text: space separated values (``TXT``) - + The log file type is set using the ``--logfile-type`` program option. Standard ``CSV``, ``TSV``, and ``TXT`` log files are human-readable files, and formatted in a similar fashion. Each standard @@ -23,13 +23,13 @@ The header records for all standard ``CSV``, ``TSV``, and ``TXT`` log files are: Column Data Type Names are taken from the set **{ BOOL, INT, FLOAT, STRING }**, where .. list-table:: - :widths: 12 88 + :widths: 12 88 :header-rows: 0 :class: aligned-text * - **BOOL** - indicates the data value will be a boolean value. - * - + * - - Boolean data values will be recorded in the log file in either numerical format (1 or 0, where 1 = TRUE and 0 = FALSE), or string format ("TRUE" or "FALSE"), depending upon the value of the ``--print-bool-as-string`` program option. * - **INT** - indicates the data value will be an integer number. @@ -42,7 +42,7 @@ Column Units is a string indicating the units of the corresponding data values ( "Msol", "AU", etc.). The Column Units value may be blank where units are not applicable, or may be one of: .. list-table:: - :widths: 12 88 + :widths: 12 88 :header-rows: 0 :class: aligned-text @@ -57,7 +57,7 @@ Column Headings are string labels that describe the corresponding data values. T constituent stars of a binary will have appropriate identifiers appended. That is, heading strings for: .. list-table:: - :widths: 38 62 + :widths: 38 62 :header-rows: 0 :class: aligned-text @@ -71,7 +71,7 @@ constituent stars of a binary will have appropriate identifiers appended. That i - will have ":boldtext:`(CP)`" appended: any column with a header with a suffix of ":boldtext:`(CP)`" represents an attribute of the the companion after the supernova event. ``HDF5`` files are not human-readable. The ``HDF5`` file format supports large, complex, heterogeneous data, enabling the data to be stored -in a structured way in a single file. When the ``HDF5`` format is specified for COMPAS log files, a single ``HDF5`` file is produced for +in a structured way in a single file. When the ``HDF5`` format is specified for COMPAS log files, a single ``HDF5`` file is produced for non-detailed output log files, containing all non-detailed output log files described above. Detailed output files are created, as for other logfile types, as individual files (in this case, ``HDF5`` files), in the ’Detailed_Output’ container directory. diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specification-binary.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specification-binary.rst index bd7cf724a..a562bbba7 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specification-binary.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specification-binary.rst @@ -1,7 +1,7 @@ Binary properties ================= -When specifying known properties in a log file record specification record, the property name must be prefixed with +When specifying known properties in a log file record specification record, the property name must be prefixed with the property type. Currently there is a single binary property type available for use: BINARY_PROPERTY. For example, to specify the property ``SEMI_MAJOR_AXIS_PRE_COMMON_ENVELOPE`` for a binary star being evolved in ``BSE``, use:: @@ -63,7 +63,7 @@ Binary Properties * - Description: - Flag to indicate if there has been at least one common envelope event. * - Header String: - - CEE + - CEE .. flat-table:: :widths: 25 75 1 1 @@ -250,7 +250,7 @@ Binary Properties Refer to :doc:`../Handling errors/evolution-status-table` for possible values. * - Header Strings: - Evolution_Status - + .. _binary-props-F: .. _binary-props-G: @@ -292,7 +292,7 @@ Binary Properties - Flag to indicate if either star overflows its Roche lobe immediately following common envelope event. * - Header String: - Immediate_RLOF>CE - + .. _binary-props-J: .. _binary-props-K: @@ -450,19 +450,19 @@ Binary Properties :header-rows: 0 :class: aligned-text - * - NO MASS TRANSFER + * - NO MASS TRANSFER - = 0 - * - MASS TRANSFER STABLE STAR1 -> STAR2 + * - MASS TRANSFER STABLE STAR1 -> STAR2 - = 1 - * - MASS TRANSFER STABLE STAR2 -> STAR1 + * - MASS TRANSFER STABLE STAR2 -> STAR1 - = 2 - * - MASS TRANSFER COMMON ENVELOPE STAR1 -> STAR2 + * - MASS TRANSFER COMMON ENVELOPE STAR1 -> STAR2 - = 3 - * - MASS TRANSFER COMMON ENVELOPE STAR2 -> STAR1 + * - MASS TRANSFER COMMON ENVELOPE STAR2 -> STAR1 - = 4 - * - MASS TRANSFER COMMON ENVELOPE DOUBLE CORE + * - MASS TRANSFER COMMON ENVELOPE DOUBLE CORE - = 5 - * - MASS TRANSFER -> MERGER + * - MASS TRANSFER -> MERGER - = 6 * - Header String: @@ -483,7 +483,7 @@ Binary Properties - Flag to indicate if the binary compact remnants merge within a Hubble time. * - Header String: - Merges_Hubble_Time - + .. _binary-props-N: .. _binary-props-O: @@ -516,7 +516,7 @@ Binary Properties * - Data type: - DOUBLE * - COMPAS variable: - - `derived from` BaseBinaryStar::m_NormalizedOrbitalAngularMomentumVector.xValue() + - `derived from` BaseBinaryStar::m_NormalizedOrbitalAngularMomentumVector.xValue() * - Description: - x-component of the normalized orbital AM unit vector, calculated after a SN in the birth reference frame (with z parallel to birth orbital AM, and x parallel to the LRL vector) * - Header String: @@ -532,7 +532,7 @@ Binary Properties * - Data type: - DOUBLE * - COMPAS variable: - - `derived from` BaseBinaryStar::m_NormalizedOrbitalAngularMomentumVector.yValue() + - `derived from` BaseBinaryStar::m_NormalizedOrbitalAngularMomentumVector.yValue() * - Description: - y-component of the normalized orbital AM unit vector, calculated after a SN in the birth reference frame (with z parallel to birth orbital AM, and x parallel to the LRL vector) * - Header String: @@ -548,7 +548,7 @@ Binary Properties * - Data type: - DOUBLE * - COMPAS variable: - - `derived from` BaseBinaryStar::m_NormalizedOrbitalAngularMomentumVector.zValue() + - `derived from` BaseBinaryStar::m_NormalizedOrbitalAngularMomentumVector.zValue() * - Description: - z-component of the normalized orbital AM unit vector, calculated after a SN in the birth reference frame (with z parallel to birth orbital AM, and x parallel to the LRL vector) * - Header String: @@ -586,7 +586,7 @@ Binary Properties Will be 0.0 for unbound binaries. * - Header String: - Orbital_VelocityaccretionEfficiency * - Description: @@ -697,23 +697,23 @@ Binary Properties :widths: 25 75 1 1 :header-rows: 0 :class: aligned-text - + * - :cspan:`2` **RLOF_MASS_LOSS_RATE** - * - Data type: - DOUBLE * - COMPAS variable: - BaseBinaryStar::m_RLOFDetails.propsPostMT->massLossRateFromDonor - * - Description: + * - Description: - The rate at which mass is lost from the donor (\ :math:`M_\odot`/yr) * - Header String: - MassTransferRateDonor .. flat-table:: :widths: 25 75 1 1 - :header-rows: 0 + :header-rows: 0 :class: aligned-text - + * - :cspan:`2` **RLOF_MASS_TRANSFER_TIMESCALE:** - * - Data type: @@ -738,7 +738,7 @@ Binary Properties * - COMPAS variable: - BaseBinaryStar::m_RLOFDetails.propsPostMT→isCE * - Description: - - Flag to indicate if the RLOF leads to a common-envelope event + - Flag to indicate if the RLOF leads to a common-envelope event * - Header String: - CEE>MT @@ -965,8 +965,8 @@ Binary Properties - Stellar type (per :cite:`Hurley2000`) of the primary star immediately after RLOF. * - Header String: - Stellar_Type(1)>MT - -`Note that this property has the same header string as RLOF_POST_MT_STAR1_STELLAR_TYPE_NAME. It is expected that one or the other is printed in any file, + +`Note that this property has the same header string as RLOF_POST_MT_STAR1_STELLAR_TYPE_NAME. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -984,8 +984,8 @@ but not both. If both are printed then the file will contain two columns with th - Stellar type (per :cite:`Hurley2000`) of the primary star immediately after RLOF. * - Header String: - Stellar_Type(1)>MT - -`Note that this property has the same header string as RLOF_POST_MT_STAR1_STELLAR_TYPE. It is expected that one or the other is printed in any file, + +`Note that this property has the same header string as RLOF_POST_MT_STAR1_STELLAR_TYPE. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1003,8 +1003,8 @@ but not both. If both are printed then the file will contain two columns with th - Stellar type (per :cite:`Hurley2000`) of the secondary star immediately after RLOF. * - Header String: - Stellar_Type(2)>MT - -`Note that this property has the same header string as RLOF_POST_MT_STAR2_STELLAR_TYPE_NAME. It is expected that one or the other is printed in any file, + +`Note that this property has the same header string as RLOF_POST_MT_STAR2_STELLAR_TYPE_NAME. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1022,8 +1022,8 @@ but not both. If both are printed then the file will contain two columns with th - Stellar type (per :cite:`Hurley2000`) of the secondary star immediately after RLOF. * - Header String: - Stellar_Type(2)>MT - -`Note that this property has the same header string as RLOF_POST_MT_STAR2_STELLAR_TYPE. It is expected that one or the other is printed in any file, + +`Note that this property has the same header string as RLOF_POST_MT_STAR2_STELLAR_TYPE. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1266,8 +1266,8 @@ but not both. If both are printed then the file will contain two columns with th - Stellar type (per :cite:`Hurley2000`) of the primary star at the onset of RLOF. * - Header String: - Stellar_Type(1)CE -`Note that this property has the same header string as STELLAR_TYPE_NAME_1_POST_COMMON_ENVELOPE. It is expected that one or the other is printed in any file, +`Note that this property has the same header string as STELLAR_TYPE_NAME_1_POST_COMMON_ENVELOPE. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1779,7 +1779,7 @@ but not both. If both are printed then the file will contain two columns with th * - Header String: - Stellar_Type(1)CE -`Note that this property has the same header string as STELLAR_TYPE_NAME_2_POST_COMMON_ENVELOPE. It is expected that one or the other is printed in any file, +`Note that this property has the same header string as STELLAR_TYPE_NAME_2_POST_COMMON_ENVELOPE. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1817,7 +1817,7 @@ but not both. If both are printed then the file will contain two columns with th * - Header String: - Stellar_Type(2)CE -`Note that this property has the same header string as STELLAR_TYPE_1_POST_COMMON_ENVELOPE. It is expected that one or the other is printed in any file, +`Note that this property has the same header string as STELLAR_TYPE_1_POST_COMMON_ENVELOPE. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1855,7 +1855,7 @@ but not both. If both are printed then the file will contain two columns with th * - Header String: - Stellar_Type(1)CE -`Note that this property has the same header string as STELLAR_TYPE_2_POST_COMMON_ENVELOPE. It is expected that one or the other is printed in any file, but not +`Note that this property has the same header string as STELLAR_TYPE_2_POST_COMMON_ENVELOPE. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1893,7 +1893,7 @@ both. If both are printed then the file will contain two columns with the same h * - Header String: - Stellar_Type(2)` (erg). + - Absolute value of the envelope binding energy calculated as per :doc:`Xu & Li (2010) <../../references>` (erg). * - Header Strings: - BE_Nanjing, BE_Nanjing(1), BE_Nanjing(2), BE_Nanjing(SN), BE_Nanjing(CP) @@ -211,7 +211,7 @@ Following is an alphabetical list of stellar properties available for inclusion * - COMPAS variable: - BinaryConstituentStar::m_CEDetails.preCEE.bindingEnergy * - Description: - - Absolute value of the binding energy at the onset of unstable RLOF leading to the CE (erg). + - Absolute value of the binding energy at the onset of unstable RLOF leading to the CE (erg). * - - `Applies only to constituent stars of a binary system (i.e. does not apply to` ``SSE``\ `).` * - Header Strings: @@ -291,17 +291,17 @@ Following is an alphabetical list of stellar properties available for inclusion - Mass CO_Core@\ CO, Mass_CO_Core@CO(1), Mass_CO_Core@CO(2), Mass_CO_Core@CO(SN), Mass_CO_Core@CO(CP) -.. flat-table:: - :widths: 25 75 1 1 +.. flat-table:: + :widths: 25 75 1 1 :header-rows: 0 :class: aligned-text - + * - :cspan:`2` **CONVECTIVE_ENV_MASS** - * - Data type: - DOUBLE * - COMPAS variable: - - + - * - Description: - Envelope mass calculated using :cite:`Picker2024` (\ :math:`M\odot`). * - Header Strings: @@ -408,19 +408,19 @@ Following is an alphabetical list of stellar properties available for inclusion :header-rows: 0 :class: aligned-text - * - None + * - None - = 0 - * - GB (Giant Branch) + * - GB (Giant Branch) - = 1 - * - LBV (Luminous Blue Variable) + * - LBV (Luminous Blue Variable) - = 2 * - OB (Main Sequence) - = 3 - * - RSG (Red Supergiant) + * - RSG (Red Supergiant) - = 4 * - VMS (Very Massive Main Sequence) - = 5 - * - WR (Wolf-Rayet) + * - WR (Wolf-Rayet) - = 6 * - Header Strings: @@ -437,9 +437,9 @@ Following is an alphabetical list of stellar properties available for inclusion - DOUBLE * - COMPAS variable: - BaseStar::m_Dt - * - Description: + * - Description: - Current timestep (Myr). - * - Header Strings: + * - Header Strings: - dT, dT(1), dT(2), dT(SN), dT(CP) .. flat-table:: @@ -882,7 +882,7 @@ Following is an alphabetical list of stellar properties available for inclusion * - Header Strings: - ID, ID(1), ID(2), ID(SN), ID(CP) -`Note that this property has the same header string as BINARY_PROPERTY::ID & BINARY_PROPERTY::RLOF_CURRENT_ID. It is expected that one or +`Note that this property has the same header string as BINARY_PROPERTY::ID & BINARY_PROPERTY::RLOF_CURRENT_ID. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -901,7 +901,7 @@ the other is printed in any file, but not both. If both are printed then the fil * - Header Strings: - Stellar_Type@\ ZAMS, Stellar_Type@ZAMS(1), Stellar_Type@ZAMS(2), Stellar_Type@ZAMS(SN), Stellar_Type@ZAMS(CP) -`Note that this property has the same header string as INITIAL_STELLAR_TYPE_NAME. It is expected that one or the other is printed in any +`Note that this property has the same header string as INITIAL_STELLAR_TYPE_NAME. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -920,7 +920,7 @@ file, but not both. If both are printed then the file will contain two columns w * - Header Strings: - Stellar_Type@\ ZAMS, Stellar_Type@ZAMS(1), Stellar_Type@ZAMS(2), Stellar_Type@ZAMS(SN), Stellar_Type@ZAMS(CP) -`Note that this property has the same header string as INITIAL_STELLAR_TYPE. It is expected that one or the other is printed in any file, +`Note that this property has the same header string as INITIAL_STELLAR_TYPE. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1130,18 +1130,18 @@ but not both. If both are printed then the file will contain two columns with th - Lambda@CE(1), Lambda@CE(2), Lambda@CE(SN), Lambda@CE(CP) -.. flat-table:: - :widths: 25 75 1 1 +.. flat-table:: + :widths: 25 75 1 1 :header-rows: 0 :class: aligned-text - + * - :cspan:`2` **LAMBDA_CONVECTIVE_ENVELOPE** - - + - * - Data type: - DOUBLE * - COMPAS variable: - - - * - Description: + - + * - Description: - Common-envelope lambda parameter calculated using the :cite:`Picker2024` formalism for the convective portion of the envelope only. * - Header Strings: - Lambda_Convective @@ -1379,7 +1379,7 @@ but not both. If both are printed then the file will contain two columns with th * - Header Strings: - Mass, Mass(1), Mass(2), Mass(SN), Mass(CP) -`Note that this property has the same header string as RLOF_CURRENT_STAR1_MASS & RLOF_CURRENT_STAR2_MASS. It is expected that one or +`Note that this property has the same header string as RLOF_CURRENT_STAR1_MASS & RLOF_CURRENT_STAR2_MASS. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1780,7 +1780,7 @@ the other is printed in any file, but not both. If both are printed then the fil * - Header Strings: - Radius, Radius(1), Radius(2), Radius(SN), Radius(CP) -`Note that this property has the same header string as RLOF_CURRENT_STAR1_RADIUS & RLOF_CURRENT_STAR2_RADIUS. It is expected that one or +`Note that this property has the same header string as RLOF_CURRENT_STAR1_RADIUS & RLOF_CURRENT_STAR2_RADIUS. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1799,8 +1799,8 @@ the other is printed in any file, but not both. If both are printed then the fil * - Header Strings: - SEED, SEED(1), SEED(2), SEED(SN), SEED(CP) -`Note that this property has the same header string as BINARY_PROPERTY::RANDOM_SEED & BINARY_PROPERTY::RLOF_CURRENT_RANDOM_SEED. It is -expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the +`Note that this property has the same header string as BINARY_PROPERTY::RANDOM_SEED & BINARY_PROPERTY::RLOF_CURRENT_RANDOM_SEED. It is +expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1873,7 +1873,7 @@ same header string.` :widths: 20 10 :header-rows: 0 :class: aligned-text - + * - NONE - = 0 * - CCSN @@ -1912,7 +1912,7 @@ same header string.` * - Description: - Magnitude of the velocity of a single star, or the binary's Systemic Velocity for a bound binary (\ :math:`km s^{-1}`). * - Header String: - - ComponentSpeed + - ComponentSpeed .. flat-table:: @@ -1931,7 +1931,7 @@ same header string.` * - Header Strings: - Stellar_Type, Stellar_Type(1), Stellar_Type(2), Stellar_Type(SN), Stellar_Type(CP) -`Note that this property has the same header string as STELLAR_TYPE_NAME. It is expected that one or the other is printed in any file, +`Note that this property has the same header string as STELLAR_TYPE_NAME. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1950,7 +1950,7 @@ but not both. If both are printed then the file will contain two columns with th * - Header Strings: - Stellar_Type, Stellar_Type(1), Stellar_Type(2), Stellar_Type(SN), Stellar_Type(CP) -`Note that this property has the same header string as STELLAR_TYPE. It is expected that one or the other is printed in any file, but +`Note that this property has the same header string as STELLAR_TYPE. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1969,7 +1969,7 @@ not both. If both are printed then the file will contain two columns with the sa * - Header Strings: - Stellar_Type_Prev, Stellar_Type_Prev(1), Stellar_Type_Prev(2), Stellar_Type_Prev(SN), Stellar_Type_Prev(CP) -`Note that this property has the same header string as STELLAR_TYPE_PREV_NAME. It is expected that one or the other is printed in any +`Note that this property has the same header string as STELLAR_TYPE_PREV_NAME. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -1988,7 +1988,7 @@ file, but not both. If both are printed then the file will contain two columns w * - Header Strings: - Stellar_Type_Prev, Stellar_Type_Prev(1), Stellar_Type_Prev(2), Stellar_Type_Prev(SN), Stellar_Type_Prev(CP) -`Note that this property has the same header string as STELLAR_TYPE_PREV. It is expected that one or the other is printed in any file, +`Note that this property has the same header string as STELLAR_TYPE_PREV. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -2122,7 +2122,7 @@ but not both. If both are printed then the file will contain two columns with th - DOUBLE * - COMPAS variable: - BaseStar::m_ThermalTimescale - * - Description: + * - Description: - Thermal timescale (Myr). * - Header Strings: - Tau_Thermal, Tau_Thermal(1), Tau_Thermal(2), Tau_Thermal(SN), Tau_Thermal(CP) @@ -2179,7 +2179,7 @@ but not both. If both are printed then the file will contain two columns with th * - Header Strings: - Time, Time(1), Time(2), Time(SN), Time(CP) -`Note that this property has the same header string as BINARY_PROPERTY::TIME & BINARY_PROPERTY::RLOF_CURRENT_TIME. It is expected that one +`Note that this property has the same header string as BINARY_PROPERTY::TIME & BINARY_PROPERTY::RLOF_CURRENT_TIME. It is expected that one or the other is printed in any file, but not both. If both are printed then the file will contain two columns with the same header string.` .. flat-table:: @@ -2267,7 +2267,7 @@ or the other is printed in any file, but not both. If both are printed then the * - Description: - X-component of the velocity of a single star, or the binary's Systemic Velocity for a bound binary (\ :math:`km s^{-1}`). * - Header String: - - VelocityX + - VelocityX .. flat-table:: :widths: 25 75 1 1 @@ -2299,7 +2299,7 @@ or the other is printed in any file, but not both. If both are printed then the * - Description: - Z-component of the velocity of a single star, or the binary's Systemic Velocity for a bound binary (\ :math:`km s^{-1}`). * - Header String: - - VelocityZ + - VelocityZ .. _stellar-props-W: @@ -2382,13 +2382,13 @@ or the other is printed in any file, but not both. If both are printed then the Supernova events/states ----------------------- -Supernova events/states, both current ("is") and past ("experienced"), are stored within COMPAS as bitmaps. That means different values +Supernova events/states, both current ("is") and past ("experienced"), are stored within COMPAS as bitmaps. That means different values can be ORed or ANDed into the bit map, so that various events or states can be set concurrently. -The values shown below for the ``SN_EVENT`` type are powers of 2 so that they can be used in a bitmap and manipulated with bit-wise logical +The values shown below for the ``SN_EVENT`` type are powers of 2 so that they can be used in a bitmap and manipulated with bit-wise logical operators. Any of the individual supernova event/state types that make up the ``SN_EVENT`` type can be set independently of any other event/state. -`constants.h` defines an enum class for ``SN_EVENT``, and an associated label map, ``SN_EVENT_LABEL``, to provide labels for the events. These +`constants.h` defines an enum class for ``SN_EVENT``, and an associated label map, ``SN_EVENT_LABEL``, to provide labels for the events. These are shown below:: enum class SN_EVENT: int { @@ -2412,7 +2412,7 @@ are shown below:: { SN EVENT::PPISN, "Pulsational Pair Instability Supernova" }, { SN EVENT::USSN, "Ultra Stripped Supernova" }, { SN EVENT::AIC, "Accretion-Induced Collapse" }, - { SN_EVENT::SNIA, "Supernova Type Ia" }, + { SN_EVENT::SNIA, "Supernova Type Ia" }, { SN_EVENT::HeSD, "Helium-shell detonation" }, }; @@ -2451,4 +2451,3 @@ A convenience function (shown below) is provided in ``utils.cpp`` to interpret t return SN EVENT::NONE; } - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specification.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specification.rst index d5742f7b0..04f008004 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specification.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specification.rst @@ -1,11 +1,11 @@ Standard log file record specification ====================================== -The standard log file record specifiers can be changed at run-time by supplying a log file definitions file via the ``--logfile-definitions`` +The standard log file record specifiers can be changed at run-time by supplying a log file definitions file via the ``--logfile-definitions`` program option. This allows users to change what appears in any of the standard COMPAS log files without the need to change the source code or rebuild the COMPAS executable. -The syntax of the definitions file is fairly simple. The definitions file is expected to contain zero or more log file record specifications, as +The syntax of the definitions file is fairly simple. The definitions file is expected to contain zero or more log file record specifications, as explained below. Complete lists of available properties selectable for inclusion (or exclusion) from COMPAS log file are available: @@ -54,7 +54,7 @@ Log file definitions file specification "BSE_RLOF_REC" | # BSE only "BSE_DETAILED_REC" | # BSE only "BSE_SYS_SNAPSHOT_REC" | # BSE only - + ::= "=" | "+=" | "-=" ::= [ ] @@ -78,23 +78,23 @@ Log file definitions file specification ::= valid property name for specified property type (see definitions in constants.h) -The log file definitions may contain comments. Comments are denoted by the hash/pound character ("#"). The hash/pound character and any -text following it on the line in which the hash character appears is ignored by the parser. The hash/pound character can appear anywhere -on a line - if it is the first character then the entire line is a comment and ignored by the parser, or it can follow valid symbols on +The log file definitions may contain comments. Comments are denoted by the hash/pound character ("#"). The hash/pound character and any +text following it on the line in which the hash character appears is ignored by the parser. The hash/pound character can appear anywhere +on a line - if it is the first character then the entire line is a comment and ignored by the parser, or it can follow valid symbols on a line, in which case the symbols before the hash/pound character are parsed and interpreted by the parser. -A log file specification record is initially set to its default value (see :doc:`standard-logfiles-default-record-specifications`). -The log file definitions file informs COMPAS as to the modifications to the default values the user wants. This means that the log file -definitions log file is not mandatory, and if the log file definitions file is not present, or contains no valid record specifiers, the log +A log file specification record is initially set to its default value (see :doc:`standard-logfiles-default-record-specifications`). +The log file definitions file informs COMPAS as to the modifications to the default values the user wants. This means that the log file +definitions log file is not mandatory, and if the log file definitions file is not present, or contains no valid record specifiers, the log file record definitions will remain at their default values. -The assignment operator given in a record specification (```` in the specification above) can be one of "=", "+=", and "-=". The meanings of +The assignment operator given in a record specification (```` in the specification above) can be one of "=", "+=", and "-=". The meanings of these are: "=" means the record specifier should be assigned the list of properties specified in the braced-list following the "=" operator. The value of the record specifier prior to the assignment is discarded, and the new value set as described. - + "+=" means the list of properties specified in the braced-list following the "+=" operator should be appended to the existing value of the record specifier. Note that the new properties are appended to the existing list, so will appear at the end of the list (properties are printed in the order they appear in the list). - + "-=" means the list of properties specified in the braced-list following the "-=" operator should be subtracted from the existing value of the record specifier. The `prop-index` qualifier may only be used for vector program options. @@ -110,7 +110,7 @@ Some example log file definitions file entries are:: STAR_PROPERTY::LUMINOSITY } - BSE_PULSARS_REC += { STAR_1_PROPERTY::LUMINOSITY, STAR_2_PROPERTY::CORE_MASS, + BSE_PULSARS_REC += { STAR_1_PROPERTY::LUMINOSITY, STAR_2_PROPERTY::CORE_MASS, BINARY_PROPERTY::SEMI_MAJOR_AXIS_RSOL, COMPANION PROPERTY::RADIUS } @@ -122,10 +122,10 @@ Some example log file definitions file entries are:: BSE_SYSPARMS_REC -= { PROGRAM_OPTION::NOTES } BSE_SYSPARMS_REC += { PROGRAM_OPTION::NOTES[1], PROGRAM_OPTION::NOTES[3] } - + A full example log file record specifications file is shown in :doc:`standard-logfiles-example-definitions-file`. -The record specifications in the definitions file are processed individually in the sequence they appear in the file, and are cumulative: +The record specifications in the definitions file are processed individually in the sequence they appear in the file, and are cumulative: for record specifications pertaining to the same record name, the output of earlier specifications is input to later specifications. For each record specification: diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specifiers.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specifiers.rst index a55f0baee..25192cd55 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specifiers.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-specifiers.rst @@ -1,12 +1,12 @@ Standard log file record specifiers =================================== -Each standard log file has an associated log file record specifier that defines what data are to be written to the log files. Each record -specifier is a list of known properties that are to be written as the log record for the log file associated with the record specifier. -Default record specifiers for each of the standard log files are shown in :doc:`standard-logfiles-default-record-specifications`. +Each standard log file has an associated log file record specifier that defines what data are to be written to the log files. Each record +specifier is a list of known properties that are to be written as the log record for the log file associated with the record specifier. +Default record specifiers for each of the standard log files are shown in :doc:`standard-logfiles-default-record-specifications`. The standard log file record specifiers can be defined by the user at run-time (see :doc:`standard-logfiles-record-specification`). -When specifying known properties, the property name must be prefixed with the property type. The current list of valid property types +When specifying known properties, the property name must be prefixed with the property type. The current list of valid property types available for use is: - STAR_PROPERTY @@ -17,14 +17,13 @@ available for use is: - BINARY_PROPERTY - PROGRAM_OPTION -The stellar property types (all types except BINARY_PROPERTY AND PROGRAM_OPTION) must be paired with properties from the stellar property list, -the binary property type BINARY_PROPERTY with properties from the binary property list, and the program option type PROGRAM_OPTION with properties +The stellar property types (all types except BINARY_PROPERTY AND PROGRAM_OPTION) must be paired with properties from the stellar property list, +the binary property type BINARY_PROPERTY with properties from the binary property list, and the program option type PROGRAM_OPTION with properties from the program option property list. All standard log files, except the switch log files, have a record type property (column). The record type property is an integer that can be used to identify and filter records within a standard log file. The record type property was introduced primarily to support different types of records in the detailed output files (BSE and SSE), and is currently unly used in those files, but could be useful for other log files. All record types for all standard log files are printed to the log files by default, but records of specific record types can be enabled and disabled using the -appropriate program option (see e.g. ``--logfile-detailed-output-record-types`` in :doc:`../Program options/program-options-list-defaults` for the +appropriate program option (see e.g. ``--logfile-detailed-output-record-types`` in :doc:`../Program options/program-options-list-defaults` for the detailed output files). - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-bse-double-compact-objects.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-bse-double-compact-objects.rst index e5aae3618..699037764 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-bse-double-compact-objects.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-bse-double-compact-objects.rst @@ -5,4 +5,3 @@ Following is a list of the BSE Double Compast Objects file record type numbers a 1. DEFAULT |BR| Default BSE_DOUBLE_COMPACT_OBJECTS file record type - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-sse-pulsar-evolution.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-sse-pulsar-evolution.rst index fd9f05f09..1044f8b0e 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-sse-pulsar-evolution.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-sse-pulsar-evolution.rst @@ -8,4 +8,4 @@ Following is a list of the SSE Pulsar Evolution file record type numbers and cor #. POST_SN |BR| Record was logged immediately following a supernova event #. TIMESTEP_COMPLETED |BR| - Record was logged immediately following the completion of the timestep (after all changes to the star) \ No newline at end of file + Record was logged immediately following the completion of the timestep (after all changes to the star) diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-sse-system-parameters.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-sse-system-parameters.rst index 4cde21fc1..c51493509 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-sse-system-parameters.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types-sse-system-parameters.rst @@ -5,4 +5,3 @@ Following is a list of the SSE System Parameters file record type numbers and co #. DEFAULT |BR| Default SSE_SYSTEM_PARAMETERS file record type - diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types.rst index 249e2d7b9..bb1a0dacc 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles-record-types.rst @@ -11,7 +11,7 @@ support different types of records in the detailed output files (BSE and SSE), b The use case for the detailed output log files is to differentiate between records written to the file when the star or binary and constituent stars are known to be in self-consistent states (that is, the attributes of the star or binary and constituent stars have been correctly and completely updated), and records written to the file, perhaps mid-timestep, when the star or -binary and/or constituent stars may not be self-consistent. Since the record type property can take any value in the range +binary and/or constituent stars may not be self-consistent. Since the record type property can take any value in the range :math:`0..4294967295` there is scope to identify many different events or situations, in any of the standard log files. We may, for example, use different record types to indicate that a detailed output record was written immediately prior to, or immediately following, a particular event or calculation. Or we may want to indicate that a supernovae record was written to the supernovae @@ -22,7 +22,7 @@ Each standard log file has its own set of record types - select a file below to .. toctree:: :maxdepth: 1 - + standard-logfiles-record-types-sse-system-parameters standard-logfiles-record-types-sse-supernovae standard-logfiles-record-types-sse-pulsar-evolution diff --git a/online-docs/pages/User guide/COMPAS output/standard-logfiles.rst b/online-docs/pages/User guide/COMPAS output/standard-logfiles.rst index e04efdbda..1476e46f5 100644 --- a/online-docs/pages/User guide/COMPAS output/standard-logfiles.rst +++ b/online-docs/pages/User guide/COMPAS output/standard-logfiles.rst @@ -1,13 +1,13 @@ Standard log files ================== -COMPAS defines several standard log files that may be produced depending upon the simulation mode (Single Star Evolution (SSE), +COMPAS defines several standard log files that may be produced depending upon the simulation mode (Single Star Evolution (SSE), or Binary Star Evolution (BSE), see the ``--mode`` program option), and the value of various program options. The standard log files are: .. list-table:: - :widths: 32 68 + :widths: 32 68 :header-rows: 0 :class: aligned-text @@ -33,7 +33,7 @@ The standard log files are: - * - SwitchLog - Records detailed information for all stars, or binary stars, at the time of each stellar type switch during evolution. - * - + * - - Enable with program option ``--switch-log``. * - - @@ -53,6 +53,5 @@ The standard log files are: - * - RLOF - Records detailed information RLOF events during BSE. - * - + * - - Enable with program option ``--rlof-printing``. - diff --git a/online-docs/pages/User guide/Handling errors/handling-errors.rst b/online-docs/pages/User guide/Handling errors/handling-errors.rst index 76dcc47a8..09bc13b3c 100644 --- a/online-docs/pages/User guide/Handling errors/handling-errors.rst +++ b/online-docs/pages/User guide/Handling errors/handling-errors.rst @@ -34,7 +34,7 @@ COMPAS output file to an appropriate value (see link below for COMPAS error valu When floating-point error checking is ON (``--fp-error-mode ON``), if a floating-point error is encountered during evolution of a system, evolution of that system will be stopped, and the evoltion status and error values set appropriately. -When floating-point error checking is OFF (``--fp-error-mode OFF``), floating-point errors that occur during the evolution of a +When floating-point error checking is OFF (``--fp-error-mode OFF``), floating-point errors that occur during the evolution of a system will not cause the evolution of that system to stop. However, if a floating-point error does occur during evolution while floating-point error checking is off, the error value in the COMPAS output files will still indicate that a floating-point error occurred. If that happens, users should use the results of the evolution of an affected system with caution. diff --git a/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_ClassCOMPAS.py b/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_ClassCOMPAS.py index f7d700a4e..313e5ca26 100644 --- a/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_ClassCOMPAS.py +++ b/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_ClassCOMPAS.py @@ -68,14 +68,14 @@ def setCOMPASDCOmask( # By default, we mask for BBHs that merge within a Hubble time, assuming # the pessimistic CEE prescription (HG donors cannot survive a CEE) and # not allowing immediate RLOF post-CEE - + stellar_type_1, stellar_type_2, hubble_flag, dco_seeds = \ self.get_COMPAS_variables("DoubleCompactObjects", ["Stellar_Type_1", "Stellar_Type_2", "Merges_Hubble_Time", "SEED"]) if types == "CHE_BBH" or types == "NON_CHE_BBH": stellar_type_1_zams, stellar_type_2_zams, che_ms_1, che_ms_2, sys_seeds = \ self.get_COMPAS_variables("SystemParameters", ["Stellar_Type@ZAMS_1", "Stellar_Type@ZAMS_2", "CH_on_MS_1", "CH_on_MS_2", "SEED"]) - + che_mask = np.logical_and.reduce((stellar_type_1_zams == 16, stellar_type_2_zams == 16, che_ms_1 == True, che_ms_2 == True)) che_seeds = sys_seeds[()][che_mask] @@ -154,7 +154,7 @@ def setGridAndMassEvolved(self): Data.close() def setCOMPASData(self): - + primary_masses, secondary_masses, formation_times, coalescence_times, dco_seeds = \ self.get_COMPAS_variables("DoubleCompactObjects", ["Mass_1", "Mass_2", "Time", "Coalescence_Time", "SEED"]) @@ -198,7 +198,7 @@ def recalculateTrueSolarMassEvolved(self, Mlower, Mupper, binaryFraction): ) def get_COMPAS_variables(self, hdf5_file, var_names): - """ + """ Get a variable or variables from a COMPAS file Args: hdf5_file --> [string] Name of HDF5 subfile (e.g. "DoubleCompactObjects") @@ -249,7 +249,7 @@ def find_star_forming_mass_per_binary_sampling(self, m1=0.01, m2=0.08, m3=0.5, m # only fbin fraction of stars have a secondary (in a binary) binary_mask = binary < self.binaryFraction - + # assign each a random secondary mass, default 0 because single stars have m2=0 (surprisingly :P) secondary_mass = np.zeros(SAMPLES) * u.Msun secondary_mass[binary_mask] = primary_mass[binary_mask] * mass_ratio[binary_mask] @@ -261,14 +261,14 @@ def find_star_forming_mass_per_binary_sampling(self, m1=0.01, m2=0.08, m3=0.5, m primary_mask = np.logical_and(primary_mass >= self.Mlower, primary_mass <= self.Mupper) secondary_mask = secondary_mass > self.m2_min full_mask = np.logical_and(primary_mask, secondary_mask) - + # find the total mass with COMPAS cuts total_mass_COMPAS = np.sum(primary_mass[full_mask]) + np.sum(secondary_mass[full_mask]) # use the totals to find the ratio and return the average mass as well f_mass_sampled = total_mass_COMPAS / total_mass average_mass_COMPAS = total_mass_COMPAS / len(primary_mass[full_mask]) - + # find the average star forming mass evolved per binary in the Universe self.mass_evolved_per_binary = average_mass_COMPAS / f_mass_sampled @@ -277,21 +277,21 @@ def find_star_forming_mass_per_binary_sampling(self, m1=0.01, m2=0.08, m3=0.5, m # ============================================== # def IMF(m, m1=0.01, m2=0.08, m3=0.5, m4=200.0, a12=0.3, a23=1.3, a34=2.3): - """ + """ Calculate the fraction of stellar mass between m and m + dm for a three part broken power law. Default values follow Kroupa (2001) zeta(m) ~ m^(-a_ij) - + Args: m --> [float, list of floats] mass or masses at which to evaluate mi --> [float] masses at which to transition the slope aij --> [float] slope of the IMF between mi and mj - + Returns: zeta(m) --> [float, list of floats] value or values of the IMF at m """ # calculate normalisation constants that ensure the IMF is continuous - b1 = 1 / ( + b1 = 1 / ( (m2**(1 - a12) - m1**(1 - a12)) / (1 - a12) \ + m2**(-(a12 - a23)) * (m3**(1 - a23) - m2**(1 - a23)) / (1 - a23) \ + m2**(-(a12 - a23)) * m3**(-(a23 - a34)) * (m4**(1 - a34) - m3**(1 - a34)) / (1 - a34) @@ -323,20 +323,20 @@ def CDF_IMF(m, m1=0.01, m2=0.08, m3=0.5, m4=200.0, a12=0.3, a23=1.3, a34=2.3): Calculate the fraction of stellar mass between 0 and m for a three part broken power law. Default values follow Kroupa (2001) F(m) ~ int_0^m zeta(m) dm - + Args: m --> [float, list of floats] mass or masses at which to evaluate mi --> [float] masses at which to transition the slope aij --> [float] slope of the IMF between mi and mj - + Returns: zeta(m) --> [float, list of floats] value or values of the IMF at m NOTE: this is implemented recursively, probably not the most efficient if you're using this - intensively but I'm not and it looks prettier so I'm being lazy ¯\_(ツ)_/¯ + intensively but I'm not and it looks prettier so I'm being lazy ¯\_(ツ)_/¯ """ # calculate normalisation constants that ensure the IMF is continuous - b1 = 1 / ( + b1 = 1 / ( (m2**(1 - a12) - m1**(1 - a12)) / (1 - a12) \ + m2**(-(a12 - a23)) * (m3**(1 - a23) - m2**(1 - a23)) / (1 - a23) \ + m2**(-(a12 - a23)) * m3**(-(a23 - a34)) * (m4**(1 - a34) - m3**(1 - a34)) / (1 - a34) @@ -364,21 +364,21 @@ def CDF_IMF(m, m1=0.01, m2=0.08, m3=0.5, m4=200.0, a12=0.3, a23=1.3, a34=2.3): return CDF def inverse_CDF_IMF(U, m1=0.01, m2=0.08, m3=0.5, m4=200, a12=0.3, a23=1.3, a34=2.3): - """ + """ Calculate the inverse CDF for a three part broken power law. Default values follow Kroupa (2001) - + Args: U --> [float, list of floats] A uniform random variable on [0, 1] mi --> [float] masses at which to transition the slope aij --> [float] slope of the IMF between mi and mj - + Returns: zeta(m) --> [float, list of floats] value or values of the IMF at m - NOTE: this is implemented recursively, probably not the most efficient if you're using this intensively but I'm not so I'm being lazy ¯\_(ツ)_/¯ + NOTE: this is implemented recursively, probably not the most efficient if you're using this intensively but I'm not so I'm being lazy ¯\_(ツ)_/¯ """ # calculate normalisation constants that ensure the IMF is continuous - b1 = 1 / ( + b1 = 1 / ( (m2**(1 - a12) - m1**(1 - a12)) / (1 - a12) \ + m2**(-(a12 - a23)) * (m3**(1 - a23) - m2**(1 - a23)) / (1 - a23) \ + m2**(-(a12 - a23)) * m3**(-(a23 - a34)) * (m4**(1 - a34) - m3**(1 - a34)) / (1 - a34) @@ -393,4 +393,4 @@ def inverse_CDF_IMF(U, m1=0.01, m2=0.08, m3=0.5, m4=200, a12=0.3, a23=1.3, a34=2 masses[np.logical_and(U > F1, U <= F2)] = np.power((1 - a12) / b1 * (U[np.logical_and(U > F1, U <= F2)] - F1) + m1**(1 - a12), 1 / (1 - a12)) masses[np.logical_and(U > F2, U <= F3)] = np.power((1 - a23) / b2 * (U[np.logical_and(U > F2, U <= F3)] - F2) + m2**(1 - a23), 1 / (1 - a23)) masses[np.logical_and(U > F3, U <= F4)] = np.power((1 - a34) / b3 * (U[np.logical_and(U > F3, U <= F4)] - F3) + m3**(1 - a34), 1 / (1 - a34)) - return masses \ No newline at end of file + return masses diff --git a/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_FastCosmicIntegration.py b/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_FastCosmicIntegration.py index d5e23670d..d70e3bd48 100644 --- a/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_FastCosmicIntegration.py +++ b/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_FastCosmicIntegration.py @@ -12,7 +12,7 @@ import argparse def calculate_redshift_related_params(max_redshift=10.0, max_redshift_detection=1.0, redshift_step=0.001, z_first_SF = 10.0): - """ + """ Given limits on the redshift, create an array of redshifts, times, distances and volumes Args: max_redshift --> [float] Maximum redshift to use for calculations @@ -67,12 +67,12 @@ def find_sfr(redshifts, a = 0.01, b =2.77, c = 2.90, d = 4.70): def find_metallicity_distribution(redshifts, min_logZ_COMPAS, max_logZ_COMPAS, mu0=0.035, muz=-0.23, sigma_0=0.39, sigma_z=0.0, alpha =0.0, min_logZ =-12.0, max_logZ =0.0, step_logZ = 0.01): - + """ Calculate the distribution of metallicities at different redshifts using a log skew normal distribution - the log-normal distribution is a special case of this log skew normal distribution distribution, and is retrieved by setting - the skewness to zero (alpha = 0). - Based on the method in Neijssel+19. Default values of mu0=0.035, muz=-0.23, sigma_0=0.39, sigma_z=0.0, alpha =0.0, + the log-normal distribution is a special case of this log skew normal distribution distribution, and is retrieved by setting + the skewness to zero (alpha = 0). + Based on the method in Neijssel+19. Default values of mu0=0.035, muz=-0.23, sigma_0=0.39, sigma_z=0.0, alpha =0.0, retrieve the dP/dZ distribution used in Neijssel+19 NOTE: This assumes that metallicities in COMPAS are drawn from a flat in log distribution! Args: @@ -80,7 +80,7 @@ def find_metallicity_distribution(redshifts, min_logZ_COMPAS, max_logZ_COMPAS, redshift_step --> [float] step used in redshift calculation min_logZ_COMPAS --> [float] Minimum logZ value that COMPAS samples max_logZ_COMPAS --> [float] Maximum logZ value that COMPAS samples - + mu0 = 0.035 --> [float] location (mean in normal) at redshift 0 muz = -0.25 --> [float] redshift scaling/evolution of the location sigma_0 = 0.39 --> [float] Scale (variance in normal) at redshift 0 @@ -93,19 +93,19 @@ def find_metallicity_distribution(redshifts, min_logZ_COMPAS, max_logZ_COMPAS, dPdlogZ --> [2D float array] Probability of getting a particular logZ at a certain redshift metallicities --> [list of floats] Metallicities at which dPdlogZ is evaluated p_draw_metallicity --> float Probability of drawing a certain metallicity in COMPAS (float because assuming uniform) - """ + """ ################################## # Log-Linear redshift dependence of sigma sigma = sigma_0* 10**(sigma_z*redshifts) - + ################################## # Follow Langer & Norman 2007? in assuming that mean metallicities evolve in z as: - mean_metallicities = mu0 * 10**(muz * redshifts) - + mean_metallicities = mu0 * 10**(muz * redshifts) + # Now we re-write the expected value of ou log-skew-normal to retrieve mu beta = alpha/(np.sqrt(1 + (alpha)**2)) - PHI = NormDist.cdf(beta * sigma) - mu_metallicities = np.log(mean_metallicities/2. * 1./(np.exp(0.5*sigma**2) * PHI ) ) + PHI = NormDist.cdf(beta * sigma) + mu_metallicities = np.log(mean_metallicities/2. * 1./(np.exp(0.5*sigma**2) * PHI ) ) ################################## # create a range of metallicities (thex-values, or random variables) @@ -125,7 +125,7 @@ def find_metallicity_distribution(redshifts, min_logZ_COMPAS, max_logZ_COMPAS, ################################## # assume a flat in log distribution in metallicity to find probability of drawing Z in COMPAS p_draw_metallicity = 1 / (max_logZ_COMPAS - min_logZ_COMPAS) - + return dPdlogZ, metallicities, p_draw_metallicity @@ -292,9 +292,9 @@ def find_detection_rate(path, dco_type="BBH", weight_column=None, max_redshift=10.0, max_redshift_detection=1.0, redshift_step=0.001, z_first_SF = 10, m1_min=5 * u.Msun, m1_max=150 * u.Msun, m2_min=0.1 * u.Msun, fbin=0.7, aSF = 0.01, bSF = 2.77, cSF = 2.90, dSF = 4.70, - mu0=0.035, muz=-0.23, sigma0=0.39,sigmaz=0., alpha=0.0, + mu0=0.035, muz=-0.23, sigma0=0.39,sigmaz=0., alpha=0.0, min_logZ=-12.0, max_logZ=0.0, step_logZ=0.01, - sensitivity="O1", snr_threshold=8, + sensitivity="O1", snr_threshold=8, Mc_max=300.0, Mc_step=0.1, eta_max=0.25, eta_step=0.01, snr_max=1000.0, snr_step=0.1): """ @@ -365,7 +365,7 @@ def find_detection_rate(path, dco_type="BBH", weight_column=None, assert snr_step < snr_max, "SNR step size must be less than maximum SNR" nonnegative_args = [(max_redshift, "max_redshift"), (max_redshift_detection, "max_redshift_detection"), (m1_min.value, "m1_min"), (m1_max.value, "m1_max"), - (m2_min.value, "m2_min"), (mu0, "mu0"), (sigma0, "sigma0"), + (m2_min.value, "m2_min"), (mu0, "mu0"), (sigma0, "sigma0"), (step_logZ, "step_logZ"), (snr_threshold, "snr_threshold"), (Mc_max, "Mc_max"), (Mc_step, "Mc_step"), (eta_max, "eta_max"), (eta_step, "eta_step"), (snr_max, "snr_max"), (snr_step, "snr_step")] @@ -390,7 +390,7 @@ def find_detection_rate(path, dco_type="BBH", weight_column=None, COMPAS.set_sw_weights(weight_column) COMPAS.find_star_forming_mass_per_binary_sampling() - + assert np.log(np.min(COMPAS.initialZ)) != np.log(np.max(COMPAS.initialZ)), "You cannot perform cosmic integration with just one metallicity" @@ -456,8 +456,8 @@ def append_rates(path, detection_rate, formation_rate, merger_rate, redshifts, C COMPAS --> [Object] Relevant COMPAS data in COMPASData Class n_redshifts_detection --> [int] Number of redshifts in list that should be used to calculate detection rates maxz --> [float] Maximum redshhift up to where we would like to store the data - sensitivity --> [string] Which detector sensitivity you used to calculate rates - dco_type --> [string] Which DCO type you used to calculate rates + sensitivity --> [string] Which detector sensitivity you used to calculate rates + dco_type --> [string] Which DCO type you used to calculate rates mu0 --> [float] metallicity dist: expected value at redshift 0 muz --> [float] metallicity dist: redshift evolution of expected value sigma0 --> [float] metallicity dist: width at redshhift 0 @@ -502,13 +502,13 @@ def append_rates(path, detection_rate, formation_rate, merger_rate, redshifts, C fine_binsize = np.diff(redshifts)[0] #Assunming your redshift bins are equally spaced!! print('fine_binsize', fine_binsize) #Assuming your crude redshift bin is made up of an integer number of fine z-bins!!! - i_per_crude_bin = redshift_binsize/fine_binsize + i_per_crude_bin = redshift_binsize/fine_binsize i_per_crude_bin = int(i_per_crude_bin) ################### # convert crude redshift bins to volumnes and ensure all volumes are in Gpc^3 crude_volumes = cosmology.comoving_volume(redshift_bins).to(u.Gpc**3).value - # split volumes into shells + # split volumes into shells crude_shell_volumes = np.diff(crude_volumes) ################### @@ -523,7 +523,7 @@ def append_rates(path, detection_rate, formation_rate, merger_rate, redshifts, C # The number of merging BBHs that need a weight N_dco = len(merger_rate[:,0]) - + #################### # binned_merger_rate will be the (observed) weights, binned by redshhift binned_merger_rate = np.zeros( (N_dco, len(redshift_bins)-1) )# create an empty list to fill @@ -542,8 +542,8 @@ def append_rates(path, detection_rate, formation_rate, merger_rate, redshifts, C save_redshifts = redshift_bins save_merger_rate = binned_merger_rate save_detection_rate = binned_detection_rate - else: - # To avoid huge filesizes, we don't really want All the data, + else: + # To avoid huge filesizes, we don't really want All the data, # so we're going to save up to some redshift z_index = np.digitize(maxz, redshifts) -1 @@ -641,7 +641,7 @@ def plot_rates(save_dir, formation_rate, merger_rate, detection_rate, redshifts, total_formation_rate = np.sum(formation_rate, axis=0) total_merger_rate = np.sum(merger_rate, axis=0) total_detection_rate = np.sum(detection_rate, axis=0) - + # and across redshifts cumulative_detection_rate = np.cumsum(total_detection_rate) detection_rate_by_binary = np.sum(detection_rate, axis=1) @@ -676,14 +676,14 @@ def plot_rates(save_dir, formation_rate, merger_rate, detection_rate, redshifts, #Plotvalues # Add text upper left corner - axes[0,0].text(0.05,0.8, "mu0=%s \nmuz=%s \nsigma0=%s \nsigmaz=%s \nalpha=%s"%(mu0,muz,sigma0,sigmaz,alpha), transform=axes[0,0].transAxes, size = fs) + axes[0,0].text(0.05,0.8, "mu0=%s \nmuz=%s \nsigma0=%s \nsigmaz=%s \nalpha=%s"%(mu0,muz,sigma0,sigmaz,alpha), transform=axes[0,0].transAxes, size = fs) for ax in axes.flatten(): ax.tick_params(labelsize=0.9*fs) # Save and show :) - plt.savefig(save_dir +'Rate_Info'+"mu0%s_muz%s_alpha%s_sigma0%s_sigmaz%s"%(mu0,muz,alpha,sigma0, sigmaz)+'.png', bbox_inches='tight') - plt.savefig( './Rate_Info'+"mu0%s_muz%s_alpha%s_sigma0%s_sigmaz%s"%(mu0,muz,alpha,sigma0, sigmaz)+'.png', bbox_inches='tight') + plt.savefig(save_dir +'Rate_Info'+"mu0%s_muz%s_alpha%s_sigma0%s_sigmaz%s"%(mu0,muz,alpha,sigma0, sigmaz)+'.png', bbox_inches='tight') + plt.savefig( './Rate_Info'+"mu0%s_muz%s_alpha%s_sigma0%s_sigmaz%s"%(mu0,muz,alpha,sigma0, sigmaz)+'.png', bbox_inches='tight') if show_plot: plt.show() else: @@ -693,7 +693,7 @@ def plot_rates(save_dir, formation_rate, merger_rate, detection_rate, redshifts, ################################################################## -### +### ### Run it! ### ################################################################## @@ -716,10 +716,10 @@ def plot_rates(save_dir, formation_rate, merger_rate, detection_rate, redshifts, parser.add_argument("--snr", dest= 'snr_threshold', help="What SNR threshold required for a detection",type=float, default=8) # Parameters to calculate the representing SF mass (make sure these match YOUR simulation!) - parser.add_argument("--m1min", dest= 'm1_min', help="Minimum primary mass sampled by COMPAS",type=float, default=5.) - parser.add_argument("--m1max", dest= 'm1_max', help="Maximum primary mass sampled by COMPAS",type=float, default=150.) - parser.add_argument("--m2min", dest= 'm2_min', help="Minimum secondary mass sampled by COMPAS",type=float, default=0.1) - parser.add_argument("--fbin", dest= 'fbin', help="Binary fraction used by COMPAS",type=float, default=0.7) + parser.add_argument("--m1min", dest= 'm1_min', help="Minimum primary mass sampled by COMPAS",type=float, default=5.) + parser.add_argument("--m1max", dest= 'm1_max', help="Maximum primary mass sampled by COMPAS",type=float, default=150.) + parser.add_argument("--m2min", dest= 'm2_min', help="Minimum secondary mass sampled by COMPAS",type=float, default=0.1) + parser.add_argument("--fbin", dest= 'fbin', help="Binary fraction used by COMPAS",type=float, default=0.7) # Parameters determining dP/dZ and SFR(z), default options from Neijssel 2019 parser.add_argument("--mu0", dest= 'mu0', help="mean metallicity at redshhift 0",type=float, default=0.035) @@ -727,11 +727,11 @@ def plot_rates(save_dir, formation_rate, merger_rate, detection_rate, redshifts, parser.add_argument("--sigma0", dest= 'sigma0', help="variance in metallicity density distribution, dPdlogZ",type=float, default=0.39) parser.add_argument("--sigmaz", dest= 'sigmaz', help="redshift evolution of variance, dPdlogZ",type=float, default=0.0) parser.add_argument("--alpha", dest= 'alpha', help="skewness of mtallicity density distribution, dPdlogZ",type=float, default=0.0) - parser.add_argument("--aSF", dest= 'aSF', help="Parameter for shape of SFR(z)",type=float, default=0.01) + parser.add_argument("--aSF", dest= 'aSF', help="Parameter for shape of SFR(z)",type=float, default=0.01) parser.add_argument("--bSF", dest= 'bSF', help="Parameter for shape of SFR(z)",type=float, default=2.77) parser.add_argument("--cSF", dest= 'cSF', help="Parameter for shape of SFR(z)",type=float, default=2.90) parser.add_argument("--dSF", dest= 'dSF', help="Parameter for shape of SFR(z)",type=float, default=4.70) - + # Options for the redshift evolution and detector sensitivity parser.add_argument("--dontAppend", dest= 'append_rates', help="Prevent the script from appending your rates to the hdf5 file.", action='store_false', default=True) parser.add_argument("--delete", dest= 'delete_rates', help="Delete the rate group from your hdf5 output file (groupname based on dP/dZ parameters)", action='store_true', default=False) @@ -744,9 +744,9 @@ def plot_rates(save_dir, formation_rate, merger_rate, detection_rate, redshifts, detection_rate, formation_rate, merger_rate, redshifts, COMPAS = find_detection_rate(args.path, dco_type=args.dco_type, weight_column=args.weight_column, max_redshift=args.max_redshift, max_redshift_detection=args.max_redshift_detection, redshift_step=args.redshift_step, z_first_SF= args.z_first_SF, m1_min=args.m1_min*u.Msun, m1_max=args.m1_max*u.Msun, m2_min=args.m2_min*u.Msun, fbin=args.fbin, - aSF = args.aSF, bSF = args.bSF, cSF = args.cSF, dSF = args.dSF, - mu0=args.mu0, muz=args.muz, sigma0=args.sigma0, sigmaz=args.sigmaz, alpha=args.alpha, - sensitivity=args.sensitivity, snr_threshold=args.snr_threshold, + aSF = args.aSF, bSF = args.bSF, cSF = args.cSF, dSF = args.dSF, + mu0=args.mu0, muz=args.muz, sigma0=args.sigma0, sigmaz=args.sigmaz, alpha=args.alpha, + sensitivity=args.sensitivity, snr_threshold=args.snr_threshold, min_logZ=-12.0, max_logZ=0.0, step_logZ=0.01, Mc_max=300.0, Mc_step=0.1, eta_max=0.25, eta_step=0.01, snr_max=1000.0, snr_step=0.1) diff --git a/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_selection_effects.py b/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_selection_effects.py index 9e2cfc6b7..d12d1b0ee 100644 --- a/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_selection_effects.py +++ b/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_selection_effects.py @@ -64,28 +64,28 @@ def detection_probability(m1, m2, redshift, distance, snr_threshold,sensitivity= def SNRinterpolator(sensitivity='design'): """ Returns an Interpolator class instance for a given sensitivity - + This function is a convenience function to generate the interpolator with 'SNR_Grid_IMRPhenomPv2_FD_all_noise.hdf5' and 'SimNoisePSDaLIGODesignSensitivityP1200087'. - + Parameters ---------- sensitivity : str Which detector sensitivity PSD to use. Options are 'design' and 'O1' - + Returns ------- out : Interpolator Interpolator class instance - + Notes ----- The interpolator is only initialized once and then stored in a module level global variable to be reused. """ path = os.path.dirname(os.path.abspath(__file__)) - + if sensitivity == 'design': hdfDatasetName = 'SimNoisePSDaLIGODesignSensitivityP1200087' elif sensitivity == 'O1': @@ -298,4 +298,3 @@ def detection_probability_from_snr(snr_value, snr_threshold, n_thetas=1e6): # If the original arg was 0-dimensional (scalar), return a scalar. return detection_prob[0] return detection_prob.reshape(np.array(snr_value).shape) - diff --git a/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_totalMassEvolvedPerZ.py b/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_totalMassEvolvedPerZ.py index fea5476c4..7a8062be7 100644 --- a/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_totalMassEvolvedPerZ.py +++ b/online-docs/pages/User guide/Post-processing/CHE_paper_tutorial/old_totalMassEvolvedPerZ.py @@ -1,48 +1,48 @@ -import numpy as np +import numpy as np import h5py as h5 #for reading in data def threePartBrokenPowerLaw(x, x1=0.01, x2=0.08, x3=0.5, x4=200, a1=-0.3, \ a2=-1.3, a3=-2.3, C1=1): #Not that everything outside the range x1=x1) & (x=x2) & (x=x3) & (x<=x4) C3 = C1 * (x2**(a1-a2)) * (x3**(a2-a3)) yvalues[mask3] = C3 * (x[mask3]**a3) - + return yvalues def CDFbrokenPowerLaw(x, x1, x2, x3, x4, a1, a2, a3, C1): yvalues = np.zeros(len(x)) - + C2 = float(C1 * (x2**(a1-a2))) C3 = float(C2 * (x3**(a2-a3))) - + N1 = float(((1./(a1+1)) * C1 * (x2**(a1+1))) - ((1./(a1+1)) * C1 * (x1**(a1+1)))) N2 = float(((1./(a2+1)) * C2 * (x3**(a2+1))) - ((1./(a2+1)) * C2 * (x2**(a2+1)))) N3 = float(((1./(a3+1)) * C3 * (x4**(a3+1))) - ((1./(a3+1)) * C3 * (x3**(a3+1)))) - + bottom = N1+N2+N3 - + mask1 = (x>=x1) & (x=x2) & (x=x3) & (x<=x4) top3 = N1 + N2 + (((1./(a3+1)) * C3 * (x[mask3]**(a3+1)) - (1./(a3+1)) * C3 * (x3**(a3+1)))) @@ -52,35 +52,35 @@ def CDFbrokenPowerLaw(x, x1, x2, x3, x4, a1, a2, a3, C1): def invertCDFbrokenPowerLaw(CDF, x1, x2, x3, x4, a1, a2, a3, C1): #I specifically do floats against python rounding when dividing - + #The constants needed C2 = float(C1 * (x2**(a1-a2))) C3 = float(C2 * (x3**(a2-a3))) - + N1 = float(((1./(a1+1)) * C1 * (x2**(a1+1))) - ((1./(a1+1)) * C1 * (x1**(a1+1)))) N2 = float(((1./(a2+1)) * C2 * (x3**(a2+1))) - ((1./(a2+1)) * C2 * (x2**(a2+1)))) N3 = float(((1./(a3+1)) * C3 * (x4**(a3+1))) - ((1./(a3+1)) * C3 * (x3**(a3+1)))) - + bottom = N1+N2+N3 - + CDFx2 = CDFbrokenPowerLaw(np.array([x2,x2]), x1, x2, x3, x4, a1, a2, a3, C1)[0] CDFx3 = CDFbrokenPowerLaw(np.array([x3,x3]), x1, x2, x3, x4, a1, a2, a3, C1)[0] - + xvalues = np.zeros(len(CDF)) - + mask1 = (CDF < CDFx2) xvalues[mask1] = (((CDF[mask1]*(N1+N2+N3)) + \ ( (1./(a1+1))*C1*(x1**(a1+1))))/((1./(a1+1))*C1))**(1./(a1+1)) - + mask2 = (CDFx2<= CDF) & (CDF < CDFx3) xvalues[mask2] = ((((CDF[mask2]*(N1+N2+N3))-(N1)) + \ ( (1./(a2+1))*C2*(x2**(a2+1))))/((1./(a2+1))*C2))**(1./(a2+1)) - - mask3 = (CDFx3<= CDF) + + mask3 = (CDFx3<= CDF) xvalues[mask3] = ((((CDF[mask3]*(N1+N2+N3))-(N1+N2)) + \ ((1./(a3+1))*C3*(x3**(a3+1))))/((1./(a3+1))*C3))**(1./(a3+1)) - + return xvalues @@ -89,7 +89,7 @@ def invertCDFbrokenPowerLaw(CDF, x1, x2, x3, x4, a1, a2, a3, C1): def createSampleUniverse(binaryFraction=1., x1=0.01, x2=0.08, x3=0.5, x4=200, a1=-0.3, \ a2=-1.3, a3=-2.3, C1=1, sampleSize=5000000, Mmin=0.01, Mmax=200): - + binaryFraction = binaryFraction #Given the defined three-part broken powerlaw, @@ -99,7 +99,7 @@ def createSampleUniverse(binaryFraction=1., x1=0.01, x2=0.08, x3=0.5, x4=200, a1 #Mmin and Mmax have to be between x1 and x4 CDFmin = CDFbrokenPowerLaw(np.array([Mmin]), x1, x2, x3, x4, a1, a2, a3, C1) CDFmax = CDFbrokenPowerLaw(np.array([Mmax]), x1, x2, x3, x4, a1, a2, a3, C1) - + #All the random drawing that we need drawM1 = np.random.uniform(CDFmin,CDFmax,sampleSize) drawBinary = np.random.uniform(0,1,sampleSize) @@ -114,7 +114,7 @@ def createSampleUniverse(binaryFraction=1., x1=0.01, x2=0.08, x3=0.5, x4=200, a1 M1 = invertCDFbrokenPowerLaw(drawM1, x1, x2, x3, x4, a1, a2, a3, C1) - #Binary fraction is easier, since we draw between 0-1, every draw with + #Binary fraction is easier, since we draw between 0-1, every draw with #value above binary fraction = single star and every value below is binary #for a single star we set M2=0 Msun. #Note that we assume that the binary Fraction is mass independent @@ -122,7 +122,7 @@ def createSampleUniverse(binaryFraction=1., x1=0.01, x2=0.08, x3=0.5, x4=200, a1 maskBinary = drawBinary < binaryFraction #booleans #again for the secondary we assume the mass ratio distribution to be flat across - #the whole parameter range so then the drawM2 (if it is in a binary) + #the whole parameter range so then the drawM2 (if it is in a binary) #just becomes the mass fraction. M2[maskBinary] = np.multiply(drawM2[maskBinary],M1[maskBinary]) @@ -167,7 +167,7 @@ def totalMassEvolvedPerZ(path=None, Mlower=None, Mupper=None, binaryFraction=0.7 raise TypeError("\n Need to give lower limit M1 of pythonSubmit") if Mupper is None: raise TypeError("\n Need to give upper limit M1 of pythonSubmit") - + M1, M2 = createSampleUniverse(binaryFraction=binaryFraction, x1=x1, x2=x2, x3=x3, x4=x4, \ a1=a1, a2=a2, a3=a3, C1=C1, Mmax=Mmax) diff --git a/online-docs/pages/User guide/Post-processing/hdf5/post-processing-h5copy.rst b/online-docs/pages/User guide/Post-processing/hdf5/post-processing-h5copy.rst index 44370120a..2074e3b12 100644 --- a/online-docs/pages/User guide/Post-processing/hdf5/post-processing-h5copy.rst +++ b/online-docs/pages/User guide/Post-processing/hdf5/post-processing-h5copy.rst @@ -1,9 +1,9 @@ h5copy.py ========= -This program copies ``COMPAS_Output.h5`` ``HDF5`` file(s) [but not ``Detailed_Ouput`` files] to a designated output ``HDF5`` file. -If the output file is an existing ``HDF5`` file, the user can specify whether the existing content should be erased before copying -begins, or whether the copied data should be appended to the existing data. If multiple files are given as input files, the +This program copies ``COMPAS_Output.h5`` ``HDF5`` file(s) [but not ``Detailed_Ouput`` files] to a designated output ``HDF5`` file. +If the output file is an existing ``HDF5`` file, the user can specify whether the existing content should be erased before copying +begins, or whether the copied data should be appended to the existing data. If multiple files are given as input files, the resultant ``HDF5`` file is the concatenation of the input files. Use this program either with: @@ -71,8 +71,8 @@ h5copy usage list of input groups to be excluded (default is all groups will be copied) - Note: if the -x option is specified, it should be specified at the end of the options - list (i.e. the list of input files can't follow the -x option or the list of input + Note: if the -x option is specified, it should be specified at the end of the options + list (i.e. the list of input files can't follow the -x option or the list of input files will be subsumed by the list of groups to be excluded) @@ -82,20 +82,20 @@ h5copy functionality overview Output file ~~~~~~~~~~~ -- If the specified ``HDF5`` output file does not exist, it will be created, and data from the input file(s) will be appended +- If the specified ``HDF5`` output file does not exist, it will be created, and data from the input file(s) will be appended to the new output file. -- If the specified ``HDF5`` output file does exist, and the ``--erase-ouput [-e]`` command-line option is not specified, the - existing output file will be preserved and data from the input file(s) will be appended to the existing output file if the - output file was created with chunking enabled (see :ref:`HDF5-chunking` - only files that were created with chunking enabled +- If the specified ``HDF5`` output file does exist, and the ``--erase-ouput [-e]`` command-line option is not specified, the + existing output file will be preserved and data from the input file(s) will be appended to the existing output file if the + output file was created with chunking enabled (see :ref:`HDF5-chunking` - only files that were created with chunking enabled can be extended). - Attempting to append data to an existing ``HDF5`` file that was not created with chunking enabled will result in the following + Attempting to append data to an existing ``HDF5`` file that was not created with chunking enabled will result in the following message being displayed for each dataset:: Only chunked datasets can be resized - If that happens, using ``h5copy.py`` to copy the output file to a new file will copy the existing data and create the new file + If that happens, using ``h5copy.py`` to copy the output file to a new file will copy the existing data and create the new file with chunking enabled - the newly created file can then be used as a base file to which other files can be appended. - If the specified ``HDF5`` output file does exist, and the ``--erase-ouput [-e]`` command-line option is specified, the existing @@ -106,39 +106,39 @@ Output file Appending data ############## - (a) if a group in an input file already exists in the output file, then the group data (the datasets within the group) will only - be copied if the number of datasets in the input file group matches the number of datasets in the output file group. If there - is a mismatch a warning will be issued and the group will not be copied (but the file copy will continue, just as though the - group had been excluded) - - (b) if a dataset in an input file does not exist in the output file, the dataset will be created, otherwise the data copied will + (a) if a group in an input file already exists in the output file, then the group data (the datasets within the group) will only + be copied if the number of datasets in the input file group matches the number of datasets in the output file group. If there + is a mismatch a warning will be issued and the group will not be copied (but the file copy will continue, just as though the + group had been excluded) + + (b) if a dataset in an input file does not exist in the output file, the dataset will be created, otherwise the data copied will be appended to the existing dataset. Input files ~~~~~~~~~~~ -A list of input filenames and or directory names must be supplied. The list can be a single name. Each name in the list is processed -in order. If a name is the name of a file with the file extension `.h5`, the contents of the file will be copied to the output file, -otherwise it will be ignored. If a name is the name of a directory and the specified recursion level requires that the directory be -processed (see command-line option ``--recursive [-r]``), the program will descend into the directory and process all files and -directories there (directories will be processed depending upon the value of the ``--recursive [-r]`` option), otherwise it will be +A list of input filenames and or directory names must be supplied. The list can be a single name. Each name in the list is processed +in order. If a name is the name of a file with the file extension `.h5`, the contents of the file will be copied to the output file, +otherwise it will be ignored. If a name is the name of a directory and the specified recursion level requires that the directory be +processed (see command-line option ``--recursive [-r]``), the program will descend into the directory and process all files and +directories there (directories will be processed depending upon the value of the ``--recursive [-r]`` option), otherwise it will be ignored. -The command-line option ``--recursive [-r]`` specifies whether recursion is enabled for directory processing, and if it is, to what +The command-line option ``--recursive [-r]`` specifies whether recursion is enabled for directory processing, and if it is, to what depth: - - If the ``--recursive [-r]`` option is not specified, recursion is not enabled and only files in the specified working directory + - If the ``--recursive [-r]`` option is not specified, recursion is not enabled and only files in the specified working directory will be candidates for copying. - - if ``--recursive [-r]`` is specified with no ``depth`` value, recursion is enabled and the depth is not limited - that is, all - files in the specified working directory, and all files in all directories below the specified working directory, will be + - if ``--recursive [-r]`` is specified with no ``depth`` value, recursion is enabled and the depth is not limited - that is, all + files in the specified working directory, and all files in all directories below the specified working directory, will be candidates for copying. - + - If ``--recursive [-r]`` is specified with a specified ``depth`` value, recursion is enabled and the depth is limited to the depth specified - that is, all files in the specified working directory, and all files in all directories `depth` levels below the specified working directory, will be candidates for copying. - + ##################### Input filename filter @@ -163,9 +163,8 @@ files. If ``--exclude [-x]`` is not specified, all groups in all candidate file Erase output ~~~~~~~~~~~~ -If the ``--erase-ouput [-e]`` command-line option is specified and the output file (specified or default) exists, it will be erased before +If the ``--erase-ouput [-e]`` command-line option is specified and the output file (specified or default) exists, it will be erased before copying begins. The ``--erase-ouput [-e]`` command-line option is ignored if the output file does not exist. If ``--erase-ouput [-e]`` is not specified and the output file (specified or default) exists, the existing content will be preserved and any data copied to the file will be appended to the existing data. - diff --git a/online-docs/pages/User guide/Post-processing/hdf5/post-processing-h5view.rst b/online-docs/pages/User guide/Post-processing/hdf5/post-processing-h5view.rst index 09fd1d327..a374f5858 100644 --- a/online-docs/pages/User guide/Post-processing/hdf5/post-processing-h5view.rst +++ b/online-docs/pages/User guide/Post-processing/hdf5/post-processing-h5view.rst @@ -1,8 +1,8 @@ h5view.py ========= -This program displays summary, header, and content information for specified COMPAS ``HDF5`` file(s). It's fairly rudimetary - the -``HDF5`` package provides ``h5dump`` and ``h5ls`` which have far more options than this program - but this program is somewhat +This program displays summary, header, and content information for specified COMPAS ``HDF5`` file(s). It's fairly rudimetary - the +``HDF5`` package provides ``h5dump`` and ``h5ls`` which have far more options than this program - but this program is somewhat COMPAS aware. @@ -50,7 +50,7 @@ Example Typing:: python3 h5view.py compas-output-file.h5 - + will result in summary output of the ``HDF5`` file `compas-output-file.h5` that looks something like this:: Summary of HDF5 file /d/compas/h5out.h5 @@ -78,7 +78,7 @@ h5view functionality overview ----------------------------- ``h5view.py`` displays summary, header and content information for specified COMPAS ``HDF5`` file(s). If none of the command-line -options ``--summary [-S]``, ``--headers [-H]``, or ``--contents [-C]`` are specified, ``--summary [-s]`` is assumed. If any of +options ``--summary [-S]``, ``--headers [-H]``, or ``--contents [-C]`` are specified, ``--summary [-s]`` is assumed. If any of ``--summary [-S]``, ``--headers [-H]``, or ``--contents [-C]`` are specified, then only the option(s) specified are actioned. Displaying summary information @@ -110,16 +110,15 @@ Contents information displays, for each COMPAS file in the ``HDF5`` file: The contents display can be limited in two ways: - (a) The ``--contents [-C]`` option takes and optional argument: an integer number of rows to display. The argument to - ``--contents [-C]`` can be positive or negative: a positive value indicates that the number of rows specified by the + (a) The ``--contents [-C]`` option takes and optional argument: an integer number of rows to display. The argument to + ``--contents [-C]`` can be positive or negative: a positive value indicates that the number of rows specified by the argument should be displayed from the start of the file; a negative value indicates that the number of rows specified - by the (absolute value of the) argument should be displayed from the end of the file. The +ve and -ve arguments to + by the (absolute value of the) argument should be displayed from the end of the file. The +ve and -ve arguments to the ``--contents [-C]`` option are akin the the Unix ``head`` and ``tail`` commands. - (b) The ``--seeds [-V]`` option allows the user to specify a list of SEED values that should be printed. If the - ``--seeds [-V]`` option is specified, only rows containing the seeds specified by the user will be printed - and only + (b) The ``--seeds [-V]`` option allows the user to specify a list of SEED values that should be printed. If the + ``--seeds [-V]`` option is specified, only rows containing the seeds specified by the user will be printed - and only if they are in the entries printed if limited by the ``--contents [-C]`` argument described in (a). - Note that printing only seeds specified in a list of seeds could be slow - we effectively have to look through the + Note that printing only seeds specified in a list of seeds could be slow - we effectively have to look through the entire dataset looking for the seeds required. - diff --git a/online-docs/pages/User guide/Post-processing/hdf5/post-processing-hdf5-info.rst b/online-docs/pages/User guide/Post-processing/hdf5/post-processing-hdf5-info.rst index f403f9efd..8462f5719 100644 --- a/online-docs/pages/User guide/Post-processing/hdf5/post-processing-hdf5-info.rst +++ b/online-docs/pages/User guide/Post-processing/hdf5/post-processing-hdf5-info.rst @@ -25,112 +25,112 @@ Data in ``HDF5`` files are arranged in ``groups`` and ``datasets``: COMPAS column units strings are attached to ``HDF5 datasets`` as ``attributes``. Each dataset in an ``HDF5`` file is broken into `chunks`, where a chunk is defined as a number of dataset entries. In COMPAS, -all datasets are 1-d arrays (columns), so a chunk is defined as a number of values in the 1-d array (or column). Chunking can -be enabled or not, but if chunking is not enabled a dataset cannot be resized - so if chunking is not enabled the size of the -dataset must be known at the time of creation, and the entire dataset created in one go. That doesn't work for COMPAS - even -though we know the number of systems being evolved, we don't know the number of entries we'll have in each of the output log +all datasets are 1-d arrays (columns), so a chunk is defined as a number of values in the 1-d array (or column). Chunking can +be enabled or not, but if chunking is not enabled a dataset cannot be resized - so if chunking is not enabled the size of the +dataset must be known at the time of creation, and the entire dataset created in one go. That doesn't work for COMPAS - even +though we know the number of systems being evolved, we don't know the number of entries we'll have in each of the output log files (and therefore the ``HDF5`` datasests if we're logging to ``HDF5`` files). So, we enable chunking. - + Chunking can improve, or degrade, performance depending upon how it is implemented - mostly related to the chunk size chosen. - + ``Datasets`` are stored inside an ``HDF5`` file as a number of chunks - the chunks are not guaranteed (not even likely) to be contiguous in the file or on the storage media (HDD, SSD etc.). Chunks are mapped/indexed in the ``HDF5`` file using a B-tree, -and the size of the B-tree, and therefore the traversal time, depends directly upon the number of chunks allocated for a +and the size of the B-tree, and therefore the traversal time, depends directly upon the number of chunks allocated for a dataset - so the access time for a chunk increases as the number of chunks in the dataset increases. So many small chunks will degrade performance. - -``Chunks`` are the unit of IO for ``HDF5`` files - all IO to ``HDF5`` is performed on the basis of chunks. This means that + +``Chunks`` are the unit of IO for ``HDF5`` files - all IO to ``HDF5`` is performed on the basis of chunks. This means that whenever dataset values are accessed (read or written (i.e. changed)), if the value is not already in memory, the entire chunk containing the value must be read from, or written to, the storage media - even if the dataset value being accessed is the only value in the chunk. So few large chunks could cause empty, "wasted", space in the ``HDF5`` files (at the end of datasets) - but -they could also adversely affect performance by causing unnecessary IO traffic (although probably not much in the way we access +they could also adversely affect performance by causing unnecessary IO traffic (although probably not much in the way we access data in COMPAS files). - -``HDF5`` files implement a chunk cache on a per-dataset basis. The default size of the chunk cache is $\small{1MB}$, and its -maximum size is $\small{32MB}$. The purpose of the chunk cache is to reduce storage media IO - even with SSDs, memory access is -much faster than storage media access, so the more of the file data that can be kept in memory and maipulated there, the better. -Assuming the datatype of a particular dataset is ``DOUBLE``, and therefore consumes $\small{8}$ bytes of storage space, at its -maximum size the chunk cache for that dataset could hold $\small{4,000,000}$ values - so a single chunk with $\small{4,000,000}$ -values, two chunks with $\small{2,000,000}$ values, four with $\small{1,000,000}$, and so on. Caching a single chunk defeats the -purpose of the cache, so chunk sizes somewhat less that $\small{4,000,000}$ would be most appropriate if the chunk cache is to be + +``HDF5`` files implement a chunk cache on a per-dataset basis. The default size of the chunk cache is $\small{1MB}$, and its +maximum size is $\small{32MB}$. The purpose of the chunk cache is to reduce storage media IO - even with SSDs, memory access is +much faster than storage media access, so the more of the file data that can be kept in memory and maipulated there, the better. +Assuming the datatype of a particular dataset is ``DOUBLE``, and therefore consumes $\small{8}$ bytes of storage space, at its +maximum size the chunk cache for that dataset could hold $\small{4,000,000}$ values - so a single chunk with $\small{4,000,000}$ +values, two chunks with $\small{2,000,000}$ values, four with $\small{1,000,000}$, and so on. Caching a single chunk defeats the +purpose of the cache, so chunk sizes somewhat less that $\small{4,000,000}$ would be most appropriate if the chunk cache is to be utilised. Chunks too big to fit in the cache simply bypass the cache and are read from, or written to, the storage media directly. - -However, the chunk cache is really only useful for random access of the dataset. Most, if not all, of the access in the COMPAS + +However, the chunk cache is really only useful for random access of the dataset. Most, if not all, of the access in the COMPAS context (including post-creation analyses) is serial - the COMPAS code writes the datasets from top to bottom, and later analyses -(generally) read the datasets the same way. Caching the chunks for serial access just introduces overhead that costs memory (not +(generally) read the datasets the same way. Caching the chunks for serial access just introduces overhead that costs memory (not much, to be sure: up to $\small{32MB}$ per open dataset), and degrades performance (albeit it a tiny bit). For that reason we disable -the chunk cache in COMPAS - so all IO to/from an ``HDF5`` file in COMPAS is directly to/from the storage media. (To be clear, +the chunk cache in COMPAS - so all IO to/from an ``HDF5`` file in COMPAS is directly to/from the storage media. (To be clear, post-creation analysis software can disable the cache or not when accessing ``HDF5`` files created by COMPAS - disabling the cache here does not affect how other software accesses the files post-creation). - -So many small chunks is not so good, and neither is just a few very large chunks. So what's the optimum chunk size? That depends + +So many small chunks is not so good, and neither is just a few very large chunks. So what's the optimum chunk size? That depends upon several things, and probably the most important of those are the final size of the dataset and the access pattern. - -As mentioned above, we tend to access datasets serially, and generally from top to bottom, so larger chunks would seem appropriate, -but not so large that we generate ``HDF5`` files with lots of unused space. However, disk space, even SSD space, is cheap, so + +As mentioned above, we tend to access datasets serially, and generally from top to bottom, so larger chunks would seem appropriate, +but not so large that we generate ``HDF5`` files with lots of unused space. However, disk space, even SSD space, is cheap, so trading space against performance is probably a good trade. - + Also as mentioned above, we don't know the final size of (most of) the datasets when creating the ``HDF5`` in COMPAS - though we do -know the number of systems being generated, which allows us to determine an upper bound for at least some of the datasets (though +know the number of systems being generated, which allows us to determine an upper bound for at least some of the datasets (though not for groups such as `BSE_RLOF`). - -One thing we need to keep in mind is that when we create the ``HDF5`` file we write each dataset of a group in the same + +One thing we need to keep in mind is that when we create the ``HDF5`` file we write each dataset of a group in the same iteration - this is analogous to writing a single record in (e.g.) a ``CSV`` log file (the ``HDF5 group`` corresponds to the ``CSV`` file, and the ``HDF5 datasets`` in the group correspond to the columns in the ``CSV`` file). So for each iteration - typically each system evolved (though each timestep for detailed output files) we do as many IOs to the ``HDF5`` file as there are datasets in the group (columns in the file). We are not bound to reading or writing a single chunk at a time - but we are bound to reading or writing an integral multiple of whole chunks at a time. - -We want to reduce the number of storage media accesses when writing (or later reading) the ``HDF5`` files, so larger chunk sizes are -appropriate, but not so large that we create excessively large ``HDF5`` files that have lots of unused space (bearing in mind the + +We want to reduce the number of storage media accesses when writing (or later reading) the ``HDF5`` files, so larger chunk sizes are +appropriate, but not so large that we create excessively large ``HDF5`` files that have lots of unused space (bearing in mind the trade-off mentioned above), especially when we're evolving just a few systems (rather than millions). - + To really optimise IO performance for ``HDF5`` files we'd choose chunk sizes that are close to multiples of storage media block sizes, but that would be too problematic given the number of disparate systems COMPAS could be run on... - -Based on everything written above, and some tests, we've chosen a default chunk size of $\small{100,000}$ (dataset entries) for all + +Based on everything written above, and some tests, we've chosen a default chunk size of $\small{100,000}$ (dataset entries) for all datasets (``HDF5_DEFAULT_CHUNK_SIZE`` in ``constants.h``) for the COMPAS C++ code. This clearly trades performance against storage space. For the (current) default logfile record specifications, per-binary logfile space is about $\small{1K}$ bytes, so in the very worst case -we will waste some space at the end of a COMPAS ``HDF5`` output file, but the performance gain, especially for post-creation analyses, is +we will waste some space at the end of a COMPAS ``HDF5`` output file, but the performance gain, especially for post-creation analyses, is significant. Ensuring the number of systems evolved is an integral multiple of this fixed chunk size will minimise storage space waste. We have chosen a minimum chunk size of $\small{1,000}$ (``HDF5_MINIMUM_CHUNK_SIZE`` in ``constants.h``) for the COMPAS C++ code. If the number of systems being evolved is not less than ``HDF5_MINIMUM_CHUNK_SIZE`` the chunk size used will be the value of the ``hdf5-chunk-size`` program option (either ``HDF5_DEFAULT_CHUNK_SIZE`` or a value specified by the user), but if the number of systems being evolved is less -than ``HDF5_MINIMUM_CHUNK_SIZE`` the chunk size used will be ``HDF5_MINIMUM_CHUNK_SIZE``. This is just so we don't waste too much storage -space when running small tests - and if they are that small performance is probably not going to be much of an issue, so no real trade-off -against storage space. +than ``HDF5_MINIMUM_CHUNK_SIZE`` the chunk size used will be ``HDF5_MINIMUM_CHUNK_SIZE``. This is just so we don't waste too much storage +space when running small tests - and if they are that small performance is probably not going to be much of an issue, so no real trade-off +against storage space. Copying and concatenating HDF5 files with h5copy.py --------------------------------------------------- The chunk size chosen for the COMPAS C++ code determines the chunk size of the logfiles produced by the COMPAS C++ code. If those files -are only ever given to programs such as ``h5copy`` as input files, their chunk size only matters in that it affects the read performance -of the files (the more chunks, and the more smaller chunks, in a dataset of an input file means locating the chunks and reading them takes -longer). That may not be a huge problem depending upon how many input files there are and how big they are. If a COMPAS logfile is used -as a base file and other files are being appended to it via ``h5copy``, then the chunk size of the base output file will be the chunk size -used for writing to the file - that could affect performance if it is too small. We provide command-line options to specify the chunk size +are only ever given to programs such as ``h5copy`` as input files, their chunk size only matters in that it affects the read performance +of the files (the more chunks, and the more smaller chunks, in a dataset of an input file means locating the chunks and reading them takes +longer). That may not be a huge problem depending upon how many input files there are and how big they are. If a COMPAS logfile is used +as a base file and other files are being appended to it via ``h5copy``, then the chunk size of the base output file will be the chunk size +used for writing to the file - that could affect performance if it is too small. We provide command-line options to specify the chunk size in both ``h5copy`` and the COMPAS C++ code so that users have some control over chunksize and performance. -Writing to the output HDF5 file is buffered in both ``h5copy`` and the COMPAS C++ code - we buffer a number of chunks for each open dataset -and write the buffer to the file when the buffer fills (or a partial buffer upon file close if the buffer is not full). This IO buffering is -not ``HDF5`` or filesystem buffering - this is a an internal implementation of ``h5copy`` and the COMPAS C++ code to improve performance. +Writing to the output HDF5 file is buffered in both ``h5copy`` and the COMPAS C++ code - we buffer a number of chunks for each open dataset +and write the buffer to the file when the buffer fills (or a partial buffer upon file close if the buffer is not full). This IO buffering is +not ``HDF5`` or filesystem buffering - this is a an internal implementation of ``h5copy`` and the COMPAS C++ code to improve performance. The IO buffer size can be changed via command-line options in both ``h5copy`` and the COMPAS C++ code. - -Users should bear in mind that the combination of ``HDF5`` chunk size and ``HDF5`` IO buffer size affect performance, storage space, and + +Users should bear in mind that the combination of ``HDF5`` chunk size and ``HDF5`` IO buffer size affect performance, storage space, and memory usage - so they may need to experiment to find a balance that suits their needs. A note on string values ----------------------- -COMPAS writes string data to its ``HDF5`` output files as C-type strings. Python interprets C-type strings in ``HDF5`` files as byte -arrays - regardless of the specified datatype when written (COMPAS writes the strings as ASCII data (as can be seen with ``h5dump``), but +COMPAS writes string data to its ``HDF5`` output files as C-type strings. Python interprets C-type strings in ``HDF5`` files as byte +arrays - regardless of the specified datatype when written (COMPAS writes the strings as ASCII data (as can be seen with ``h5dump``), but Python ignores that). Note that this affects the values in datasets (and attributes) only, not the dataset names (or group names, attribute names, etc.). -The only real impact of this is that if the byte array is printed by Python, it will be displayed as (e.g.) "b'abcde'" rather than just +The only real impact of this is that if the byte array is printed by Python, it will be displayed as (e.g.) "b'abcde'" rather than just "abcde". All operations on the data work as expected - it is just the output that is impacted. If that's an issue, use ``.decode('utf-8')`` to decode the byte array as a Python string variable. @@ -144,7 +144,6 @@ Here str is a byte array and ``print(str)`` will display (e.g.) ``b'abcde'``, bu Here str is a Python string and ``print(str)`` will display (e.g.) ``abcde`` -Note: ``HDF5`` files not created by COMPAS will not (necessarily) exhibit this behaviour, so for ``HDF5`` files created by the existing -post-processing Python scripts the use of ``.decode()`` is not only not necessary, it will fail (because the strings in ``HDF5`` files +Note: ``HDF5`` files not created by COMPAS will not (necessarily) exhibit this behaviour, so for ``HDF5`` files created by the existing +post-processing Python scripts the use of ``.decode()`` is not only not necessary, it will fail (because the strings in ``HDF5`` files created by Python are already Python strings, not byte arrays). - diff --git a/online-docs/pages/User guide/Post-processing/notebooks/CosmicIntegration.py b/online-docs/pages/User guide/Post-processing/notebooks/CosmicIntegration.py index 6dcdbaef6..ed17ed30f 100644 --- a/online-docs/pages/User guide/Post-processing/notebooks/CosmicIntegration.py +++ b/online-docs/pages/User guide/Post-processing/notebooks/CosmicIntegration.py @@ -22,20 +22,20 @@ # # The duration from the birth of the binary until the merger as a double compact object (DCO) can range from a few million years (lifetime of the stars) to more than 100 giga years depending on the evolution of the system. # -# Hence, +# Hence, # 1. DCOs merge at different redshifts # 2. Multiple DCOs merging at a specific redshift could have formed at different times. -# +# # We thus need to know the star formation that went into forming a single system. However, the star formation rate is non-constant over the lifetime of the universe. Furthermore, star formation is heavily dependent on the metallicity of the star forming gas, which also changes over the lifetime of the universe. Combined, we call this the metallicity-specific star formation rate (MSSFR). # # **The cosmic-integration code predicts the merger rate of DCOs along a grid of redshifts and chirp-masses, assuming a model for the MSSFR.** -# This tutorial covers how to use the COMPAS Cosmic Integration python tools (see [Neijssel et al. 2020](https://arxiv.org/abs/1906.08136) for derivations). +# This tutorial covers how to use the COMPAS Cosmic Integration python tools (see [Neijssel et al. 2020](https://arxiv.org/abs/1906.08136) for derivations). # # # ## Load COMPAS BBHs # -# To run the Cosmic-integrator, we need a COMPAS data set with non-constant (preferably, randomly-sampled) metallicity and some number of double compact objects. +# To run the Cosmic-integrator, we need a COMPAS data set with non-constant (preferably, randomly-sampled) metallicity and some number of double compact objects. # # In this tutorial we make a mock-COMPAS dataset. Some realistic example data can be downloaded from our [Zenodo database](https://zenodo.org/communities/compas/?page=1&size=20). # @@ -157,7 +157,7 @@ # ## Bootstrapping # -# You may want to generate $N$ detection-rate matrices using bootstrap samples from the original BBH population. This can be done with: +# You may want to generate $N$ detection-rate matrices using bootstrap samples from the original BBH population. This can be done with: detection_matrix.compute_bootstrapped_rate_matrices( bbh_population, cosmological_model=cosmological_model, snr_grid=snr_grid, diff --git a/online-docs/pages/User guide/Post-processing/notebooks/DataAnalysis.py b/online-docs/pages/User guide/Post-processing/notebooks/DataAnalysis.py index 15bd6a4da..55a55576a 100644 --- a/online-docs/pages/User guide/Post-processing/notebooks/DataAnalysis.py +++ b/online-docs/pages/User guide/Post-processing/notebooks/DataAnalysis.py @@ -48,7 +48,7 @@ import matplotlib.pyplot as plt #for plotting # Import COMPAS specific scripts -compas_root_dir = os.environ['COMPAS_ROOT_DIR'] +compas_root_dir = os.environ['COMPAS_ROOT_DIR'] sys.path.append(compas_root_dir + 'compas_python_utils') from debugging_utils import print_compas_details_dataframe, get_event_history, get_event_strings @@ -77,7 +77,7 @@ print(list(data.keys())) # %% [markdown] -# The output above represents the event categories available from the particular run. If you used the output produced in the previous tutorial, you should see `['BSE_Common_Envelopes', 'BSE_Double_Compact_Objects', 'BSE_RLOF', 'BSE_Supernovae', 'BSE_System_Parameters', 'Run_Details']`. Note that for smaller runs which do not produce any of a particular type of output, the output category will not be created. +# The output above represents the event categories available from the particular run. If you used the output produced in the previous tutorial, you should see `['BSE_Common_Envelopes', 'BSE_Double_Compact_Objects', 'BSE_RLOF', 'BSE_Supernovae', 'BSE_System_Parameters', 'Run_Details']`. Note that for smaller runs which do not produce any of a particular type of output, the output category will not be created. # # Brief description of the categories: # - 'BSE_System_Parameters': Initial state of the binary @@ -103,7 +103,7 @@ print(SPs.keys()) # %% [markdown] -# One of the most important parameters in the COMPAS output is the system seed. The seed represents the unique identifier to a specific system in a simulation. It is also used as the seed value in random number generation, which is useful when trying to reproduce a given system identically. +# One of the most important parameters in the COMPAS output is the system seed. The seed represents the unique identifier to a specific system in a simulation. It is also used as the seed value in random number generation, which is useful when trying to reproduce a given system identically. # # If we want to view the random seeds in the system parameters file, we run @@ -152,15 +152,15 @@ # A useful function that builds off of `get_event_history` is `get_event_strings`, which collects the event information into a succinct string, which may be easier to read (once you get used to the syntax). # # The syntax for the event strings takes the following convention: -# +# # - For MT events: # - P>S, P`, `<` is RLOF (1->2 or 1<-2), `=` is a (successful) CEE, and `&` is a merger. # # - For SN events: -# - P\*SR for star1 the SN progenitor, or +# - P\*SR for star1 the SN progenitor, or # - R\*SP for star2 the SN progenitor, -# - where P is progenitor type, R is remnant type, +# - where P is progenitor type, R is remnant type, # S is state (`i` for intact, `u` for unbound) # - Note that the companion type is not reported in this truncated syntax. # @@ -178,7 +178,7 @@ # %% [markdown] # ## 2. Slicing the data # -# Since the random seed is unique and constant for a given binary, the properties and events of the binary system can be recovered by looking at its seed across different output categories. +# Since the random seed is unique and constant for a given binary, the properties and events of the binary system can be recovered by looking at its seed across different output categories. # # Here we introduce the basics of manipulating the data using the seeds. We provide an example on how we get the initial parameters of systems that ended up forming double compact objects. # @@ -192,15 +192,15 @@ # %% def calculate_total_masses_naive(path_data=None): data = h5.File(path_to_data) - + total_masses = [] - + # Retrieve the categories SPs = data['BSE_System_Parameters'] DCs = data['BSE_Double_Compact_Objects'] - - # For syntax see section 1 - + + # For syntax see section 1 + # Extract parameters of interest seeds_DC = DCs['SEED'][()] seeds_SP = SPs['SEED'][()] @@ -227,7 +227,7 @@ def calculate_total_masses_naive(path_data=None): end = time.time() time_diff_naive = end-start -print('%s seconds, using for loops.' %(time_diff_naive)) +print('%s seconds, using for loops.' %(time_diff_naive)) # %% [markdown] # ### I) Optimizing the above loop @@ -235,7 +235,7 @@ def calculate_total_masses_naive(path_data=None): # #### a - Use built-in numpy routines # %% [markdown] -# Numpy arrays can make use of a powerful library of optimization tools which allow the user to bypass computationally heavy for-loops. +# Numpy arrays can make use of a powerful library of optimization tools which allow the user to bypass computationally heavy for-loops. # # For example, we can speed up the calculation of the element-wise sum of two arrays with: @@ -244,20 +244,20 @@ def calculate_total_masses_naive(path_data=None): m1_zams = SPs['Mass@ZAMS(1)'][()] m2_zams = SPs['Mass@ZAMS(2)'][()] - + m_total_all_systems = np.add(m1_zams, m2_zams) # %% [markdown] # #### b - Use boolean masks in a single file # %% [markdown] -# Where previously we put the condition in an if statement nested within a for loop, now we again make use of boolean masks to filter out the undesired elements. +# Where previously we put the condition in an if statement nested within a for loop, now we again make use of boolean masks to filter out the undesired elements. # # The boolean array must have the same length as the input array. # %% # Create a boolean array from the total mass array which is True -# if the total mass of the corresponding system is less than 40. +# if the total mass of the corresponding system is less than 40. mask_m_tot_less_than_40 = (m_total_all_systems <= 40) @@ -269,7 +269,7 @@ def calculate_total_masses_naive(path_data=None): seeds_m_tot_below_40 = seeds_SP[mask_m_tot_less_than_40] # %% [markdown] -# Note that this works because the order of the two columns (seeds and total masses) are the same. +# Note that this works because the order of the two columns (seeds and total masses) are the same. # # For example, the total mass of the system at index 2 corresponds to the seed at index 2. @@ -281,11 +281,11 @@ def calculate_total_masses_naive(path_data=None): # # Before we continue it is useful to understand how the COMPAS-popsynth printing works. # -# Each simulated system will be initialized only once and so will have only one line in the `BSE_System_Parameters` file. However, lines in `BSE_RLOF` are created whenever a system goes through a mass transfer event, which might happen multiple times for a single system, or potentially not at all. Similarly, in the `BSE_Supernovae` file, you will find at most two lines per system, but possibly none. `BSE_Double_Compact_Objects` lines are printed only when the final system is intact and composed of either Neutron Stars or Black Holes, which is a rare event that happens at most once per system. +# Each simulated system will be initialized only once and so will have only one line in the `BSE_System_Parameters` file. However, lines in `BSE_RLOF` are created whenever a system goes through a mass transfer event, which might happen multiple times for a single system, or potentially not at all. Similarly, in the `BSE_Supernovae` file, you will find at most two lines per system, but possibly none. `BSE_Double_Compact_Objects` lines are printed only when the final system is intact and composed of either Neutron Stars or Black Holes, which is a rare event that happens at most once per system. # # For this reason, it is generally not the case that the system on line $n$ of one file corresponds to the system on line $n$ of another file. # -# In order to match systems across files, we need to extract the seeds of desired systems from one file, and apply them as a mask in the other file. +# In order to match systems across files, we need to extract the seeds of desired systems from one file, and apply them as a mask in the other file. # %% # Example: calculate the primary ZAMS mass of systems which become DCOs (Double Compact Objects) @@ -311,25 +311,25 @@ def calculate_total_masses_naive(path_data=None): # %% def calculate_total_masses_optimized(path_data=None): data = h5.File(path_to_data) - + total_masses = [] - + # Retrieve the categories SPs = data['BSE_System_Parameters'] DCs = data['BSE_Double_Compact_Objects'] - - # For syntax see section 1 - + + # For syntax see section 1 + # Extract parameters of interest seeds_DC = DCs['SEED'][()] seeds_SP = SPs['SEED'][()] m1_zams = SPs['Mass@ZAMS(1)'][()] m2_zams = SPs['Mass@ZAMS(2)'][()] - + m_zams_tot = np.add(m1_zams, m2_zams) mask_seeds_became_DCO = np.isin(seeds_SP, seeds_DC) m_zams_tot_of_DCOs = m_zams_tot[mask_seeds_became_DCO] - + data.close() return m_zams_tot_of_DCOs @@ -345,12 +345,12 @@ def calculate_total_masses_optimized(path_data=None): n_DCos = len(seeds_DC) print('Compare') -print('%s seconds, using For Loops.' %(time_diff_naive)) -print('%s seconds, using Optimizations.' %(time_diff_optimized)) +print('%s seconds, using For Loops.' %(time_diff_naive)) +print('%s seconds, using Optimizations.' %(time_diff_optimized)) print('Using %s DCO systems' %(n_DCos)) # %% [markdown] -# *Note:* The time difference will depend heavily on the number of systems under investigation, as well as the number of bypassed For Loops. If you used the path to the pre-generated tutorial data set, you should see very little improvement. +# *Note:* The time difference will depend heavily on the number of systems under investigation, as well as the number of bypassed For Loops. If you used the path to the pre-generated tutorial data set, you should see very little improvement. # %% # Test that the two arrays are in fact identical @@ -365,9 +365,9 @@ def calculate_total_masses_optimized(path_data=None): # %% def calculate_total_masses_bbh(path_to_data=None): data = h5.File(path_to_data) - + total_masses = [] - + SPs = data['BSE_System_Parameters'] DCs = data['BSE_Double_Compact_Objects'] @@ -377,17 +377,17 @@ def calculate_total_masses_bbh(path_to_data=None): dc_mask_bbh = (stype1 == 14) & (stype2 == 14) seeds_bbh = seeds_DC[dc_mask_bbh] - + # Get info from ZAMS seeds_SP = SPs['SEED'][()] m1_zams = SPs['Mass@ZAMS(1)'][()] m2_zams = SPs['Mass@ZAMS(2)'][()] - - m_zams_tot = np.add(m1_zams, m2_zams) - + + m_zams_tot = np.add(m1_zams, m2_zams) + sp_mask_bbh = np.isin(seeds_SP, seeds_bbh) m_zams_tot_bbh = m_zams_tot[sp_mask_bbh] - + data.close() return m_zams_tot_bbh @@ -401,8 +401,8 @@ def calculate_total_masses_bbh(path_to_data=None): # calculate number of BBH systems n_bbh = len(m_tot_bbh) - -print('%s seconds for all %s BBH systems.' %(time_diff_bbh, n_bbh)) + +print('%s seconds for all %s BBH systems.' %(time_diff_bbh, n_bbh)) # %% [markdown] # Note that the `print_compas_details_dataframe` function can also optionally take a mask as argument. The mask array must have the same length as the data arrays for the given category. @@ -415,16 +415,16 @@ def calculate_total_masses_bbh(path_to_data=None): # %% [markdown] # ### Example 2 # -# The previous example uses the fact that both `BSE_System_Parameters` and `BSE_Double_Compact_Objects` only print at most one line per system. However, as mentioned above, events such as supernovae or mass transfer might happen multiple times to a given system, and as a result there would be multiple occurrences of a given seed in the relevant file. +# The previous example uses the fact that both `BSE_System_Parameters` and `BSE_Double_Compact_Objects` only print at most one line per system. However, as mentioned above, events such as supernovae or mass transfer might happen multiple times to a given system, and as a result there would be multiple occurrences of a given seed in the relevant file. # %% -# Example: Want to investigate CEE events for a given system. -# +# Example: Want to investigate CEE events for a given system. +# # To illustrate the point, we find the seed of the system with the most mass transfer events, one of which is a CEE. seeds_CE = CEs['SEED'][()] uniq_seeds, uniq_counts = np.unique(seeds_MT[np.isin(seeds_MT, seeds_CE)], return_counts=True) -best_seed = uniq_seeds[np.argmax(uniq_counts)] +best_seed = uniq_seeds[np.argmax(uniq_counts)] print_compas_details_dataframe(MTs, best_seed) # %% [markdown] @@ -438,7 +438,7 @@ def calculate_total_masses_bbh(path_to_data=None): # # ### Example 3 # -# Combining masks on the seeds and other data can provide a lot of flexibility to help explore your science case. Imagine you want the primary masses of systems that experienced two core collapse supernovae (CCSNe) and resulted in a double compact object that will merge in a Hubble time. We'll reuse our mock data, with additional information about the types of SN which occurred in each star. +# Combining masks on the seeds and other data can provide a lot of flexibility to help explore your science case. Imagine you want the primary masses of systems that experienced two core collapse supernovae (CCSNe) and resulted in a double compact object that will merge in a Hubble time. We'll reuse our mock data, with additional information about the types of SN which occurred in each star. # %% # Example: get the primary ZAMS masses of systems which experience 2 CCSNe before becoming a DCO @@ -456,22 +456,22 @@ def calculate_total_masses_bbh(path_to_data=None): 1: 'CCSN', 2: 'ECSN', 4: 'PISN', - 8: 'PPISN', + 8: 'PPISN', 16: 'USSN', } # this dictionary is illustrative, but not explicitly used here # Determine which seeds experienced 2 CCSNe mask_ccsn = sn_type == 1 -seeds_ccsn, counts_ccsn = np.unique(seeds_SN[mask_ccsn], return_counts=True) +seeds_ccsn, counts_ccsn = np.unique(seeds_SN[mask_ccsn], return_counts=True) seeds_double_ccsn = seeds_ccsn[counts_ccsn == 2] # Seeds with 2 CCSNe will have a counts_ccsn value of 2 mask_SP_double_ccsn = np.isin(seeds_SP, seeds_double_ccsn) # Determine which systems end up as merging DCOs mask_merges_hubble_time = DCs['Merges_Hubble_Time'][()] == 1 -mask_SP_hubble_time_mergers = np.isin(seeds_SP, seeds_DC[mask_merges_hubble_time]) +mask_SP_hubble_time_mergers = np.isin(seeds_SP, seeds_DC[mask_merges_hubble_time]) -# Combine the 2 masks to get only the correct subset of systems +# Combine the 2 masks to get only the correct subset of systems combined_mask = mask_SP_double_ccsn & mask_SP_hubble_time_mergers m1_zams_masked = m1_zams[combined_mask] @@ -484,7 +484,7 @@ def calculate_total_masses_bbh(path_to_data=None): # %% [markdown] # ## 3. Visualizing the data # -# Although math is the fundamental basis of physics and astrophysics, we cannot always easily convert numbers and equations into a coherent picture. Plotting is therefore a vital tool in bridging the gap between raw data and a deeper scientific understanding. +# Although math is the fundamental basis of physics and astrophysics, we cannot always easily convert numbers and equations into a coherent picture. Plotting is therefore a vital tool in bridging the gap between raw data and a deeper scientific understanding. # # *Disclaimer:* # @@ -563,7 +563,7 @@ def calculate_chirp_mass(m1, m2): ax.tick_params(axis='y', which='major', labelsize=fs_tick, labelcolor='red') ax.grid(False) -# Scatter plot +# Scatter plot ax = axes[1] ax.scatter(m1, m2, color='black') ax.set_title('Component Masses', fontsize=fs_title) diff --git a/online-docs/pages/User guide/Post-processing/notebooks/spin_prescriptions/spin_class.py b/online-docs/pages/User guide/Post-processing/notebooks/spin_prescriptions/spin_class.py index bbb57cfc8..7d8f4a2f6 100644 --- a/online-docs/pages/User guide/Post-processing/notebooks/spin_prescriptions/spin_class.py +++ b/online-docs/pages/User guide/Post-processing/notebooks/spin_prescriptions/spin_class.py @@ -9,55 +9,55 @@ class calculate_spin(object): """ This class calculates the Black Hole (BH) or Neutron Star (NS) spin based on a given spin prescription - It returns the spin of the compact object M1, and compact object M2 + It returns the spin of the compact object M1, and compact object M2 """ - + def __init__(self, data_path=None, spin_model_name='uniform'): - + self.path = data_path - + if (self.path is None): print("Warning: your hdf5 path is set to 'None'") elif not os.path.isfile(data_path): raise ValueError("h5 file not found. Wrong path given?", "path given = %s"%data_path) elif os.path.isfile(data_path): self.h5file = h5.File(data_path) - - + + self.spin_model_name = spin_model_name - - - def random_uniform_spin(self, low, high): + + + def random_uniform_spin(self, low, high): """ returns black hole spins with a random spin value uniformly sampled between 'low' and 'high' """ - - + + sample_size = len(self.h5file['BSE_Double_Compact_Objects']['Mass(1)'][...].squeeze()) - + self.spinM1 = np.random.uniform(low=low, high=high, size=sample_size) self.spinM2 = np.random.uniform(low=low, high=high, size=sample_size) - - + + return self.spinM1, self.spinM2 - - - def fixed_value_spin(self, spin_value): + + + def fixed_value_spin(self, spin_value): """ returns black hole spins with a fixed spin value 'spin_value' """ M1samples = self.h5file['BSE_Double_Compact_Objects']['Mass(1)'][...].squeeze() - + self.spinM1 = np.ones_like(a=M1samples) * spin_value self.spinM2 = np.ones_like(a=M1samples) * spin_value - + return self.spinM1, self.spinM2 - - + + def setCOMPASData(self): """ reads in some of the COMPAS parameters needed from hdf5 file """ - + # """ reads in some of the COMPAS parameters needed from hdf5 file """ @@ -68,61 +68,61 @@ def setCOMPASData(self): self.SEED_dco = fDCO['SEED'][...].squeeze() - - mask_dco_SN = np.in1d(fSN['SEED'][...].squeeze(), self.SEED_dco) # mask in the SNe files the SNe that correspond to our DCO + + mask_dco_SN = np.in1d(fSN['SEED'][...].squeeze(), self.SEED_dco) # mask in the SNe files the SNe that correspond to our DCO # first, remove simulteneous_SN - whichSN = fSN['Supernova_State'][...].squeeze()[mask_dco_SN] + whichSN = fSN['Supernova_State'][...].squeeze()[mask_dco_SN] mask_no_simulteneous_SN = (whichSN[0::2]!=3) & (whichSN[1::2]!=3) - + # remove BNS self.st1 = fDCO['Stellar_Type(1)'][...].squeeze() self.st2 = fDCO['Stellar_Type(2)'][...].squeeze() - + mask_contains_BH = ((self.st1==14) | (self.st2==14)) & (mask_no_simulteneous_SN==1) - - + + mask_dco_ini = np.in1d(fini['SEED'][...].squeeze(), self.SEED_dco[mask_contains_BH]) # update mask removing simulteneous SNe - mask_dco_SN = np.in1d(fSN['SEED'][...].squeeze() , self.SEED_dco[mask_contains_BH]) # update mask removing simulteneous SNe + mask_dco_SN = np.in1d(fSN['SEED'][...].squeeze() , self.SEED_dco[mask_contains_BH]) # update mask removing simulteneous SNe self.st1 = self.st1[mask_contains_BH] self.st2 = self.st2[mask_contains_BH] self.M1 = fDCO['Mass(1)'][...].squeeze()[mask_contains_BH] # Compact object mass [Msun] of the initially more massive star self.M2 = fDCO['Mass(2)'][...].squeeze()[mask_contains_BH] # Compact object mass [Msun] of the initially less massive star - - + + mask_dco_ini = np.in1d(fini['SEED'][...].squeeze(), self.SEED_dco[mask_contains_BH]) # mask in the initial parameter files the SNe that correspond to our DCO that are BHs - mask_dco_SN = np.in1d(fSN['SEED'][...].squeeze(), self.SEED_dco[mask_contains_BH]) # mask in the SNe files the SNe that correspond to our DCO that are BHs - - - self.metallicitySystems = fini['Metallicity@ZAMS(1)'][...].squeeze()[mask_dco_ini] + mask_dco_SN = np.in1d(fSN['SEED'][...].squeeze(), self.SEED_dco[mask_contains_BH]) # mask in the SNe files the SNe that correspond to our DCO that are BHs + + + self.metallicitySystems = fini['Metallicity@ZAMS(1)'][...].squeeze()[mask_dco_ini] whichSN = fSN['Supernova_State'][...].squeeze()[mask_dco_SN] # this is 1 if the initially primary star goes SN and 2 if the secondary goes supernova - whichSN2 = whichSN[1::2] # get whichStar for the first SN (there are 2 SNe for all DCOs) + whichSN2 = whichSN[1::2] # get whichStar for the first SN (there are 2 SNe for all DCOs) mask_SN_is_M1 = (whichSN==1) - mask_SN_is_M2 = (whichSN==2) - - self.separationPreSN2= fSN['SemiMajorAxis= -0.3) & (np.log10(self.PeriodPreSN2) < 0.3)) maskGiveSpin2 = ((self.st2==14) & (self.M2formedSecond==1) & (np.log10(self.PeriodPreSN2) >= -0.3) & (np.log10(self.PeriodPreSN2) < 0.3)) - self.spinM1[maskGiveSpin1] = m_ * np.log10(self.PeriodPreSN2[maskGiveSpin1]) + c_ - self.spinM2[maskGiveSpin2] = m_ * np.log10(self.PeriodPreSN2[maskGiveSpin2]) + c_ - - + self.spinM1[maskGiveSpin1] = m_ * np.log10(self.PeriodPreSN2[maskGiveSpin1]) + c_ + self.spinM2[maskGiveSpin2] = m_ * np.log10(self.PeriodPreSN2[maskGiveSpin2]) + c_ + + return self.spinM1, self.spinM2 - - + + def Z_dependent_spin_param(self, metallicity_range, prescription_name): - """ - returns metallicity dependent spin parameter coefficients of fitting formula for the Geneva or MESA prescription + """ + returns metallicity dependent spin parameter coefficients of fitting formula for the Geneva or MESA prescription by Belczynski et al. (2020); https://www.aanda.org/10.1051/0004-6361/201936528. Prescription_name should be in ['Geneva', 'MESA'] it either returns (Geneva:) b, m_1, m_2, a_low, or (MESA:) a_1, b_1, m_1, a_2 and b_2 """ - - # return coefficients from paragraphs below equation 3 and 4 in Belczysnki et al. (2020) + + # return coefficients from paragraphs below equation 3 and 4 in Belczysnki et al. (2020) if metallicity_range >= 0.010: return [2.258, 16.0, 24.2, 0.13] if prescription_name=='Geneva' else [-0.0016, 0.115, np.inf, np.inf, np.inf] @@ -269,82 +269,82 @@ def Z_dependent_spin_param(self, metallicity_range, prescription_name): return [3.666, 32.0, 38.8, 0.25] if prescription_name=='Geneva' else [-0.0010, 0.125, np.inf, np.inf, np.inf] - + def Geneva(self): ''' - returns spins of the primary (spinM1) and secondary (spinM2) - based on the Geneva BH natal spin model as described in Belczsynski+20 - See Equation 3 and Fig 1 in https://www.aanda.org/10.1051/0004-6361/201936528 + returns spins of the primary (spinM1) and secondary (spinM2) + based on the Geneva BH natal spin model as described in Belczsynski+20 + See Equation 3 and Fig 1 in https://www.aanda.org/10.1051/0004-6361/201936528 this model assumes moderate BH birth spins, with a spin magnitude dependent on metallicity and CO core mass Warning: this function currently assumes the two stars have identical metallicity (add a Z mask to change this) - ''' + ''' - # apply spin model on metallicity ranges that linearly span Z values by Belczysnki (cf. http://arxiv.org/abs/2301.01312) - Z_ranges = [[0.0, 0.0012], [0.0012, 0.004], [0.004, 0.010], [0.010, 1.0]] # Tab. 1 conditions in http://arxiv.org/abs/2301.01312 + # apply spin model on metallicity ranges that linearly span Z values by Belczysnki (cf. http://arxiv.org/abs/2301.01312) + Z_ranges = [[0.0, 0.0012], [0.0012, 0.004], [0.004, 0.010], [0.010, 1.0]] # Tab. 1 conditions in http://arxiv.org/abs/2301.01312 self.setCOMPASData() # read in required COMPAS data (CO mass, and metallicity) - + # loop over four metallicity ranges of prescription for _, Z_range in enumerate(Z_ranges): - + mask_inside_Z = (self.metallicitySystems >= Z_range[0]) & (self.metallicitySystems < Z_range[1]) # mask systems inside metallicity range - b_, m1_, m2_, a_low = self.Z_dependent_spin_param(metallicity_range=Z_range[0], prescription_name='Geneva') # obtains metallcity dependent model coefficients - + b_, m1_, m2_, a_low = self.Z_dependent_spin_param(metallicity_range=Z_range[0], prescription_name='Geneva') # obtains metallcity dependent model coefficients + ### apply Equation 3 in Belczynski et al. (2020) ### - # set spins to max spin value of 0.85 for stars below lower CO core mass (m_1) condition: + # set spins to max spin value of 0.85 for stars below lower CO core mass (m_1) condition: self.spinM1[(self.MassCOM1CoreSN <= m1_)&(mask_inside_Z==1)], self.spinM2[(self.MassCOM2CoreSN <= m1_)&(mask_inside_Z==1)] = 0.85, 0.85 - + # set spins to linear interpolation for CO masses in between m_1 and m_2 (a=-0.088 in eq. 3): mask_spin1 = (self.MassCOM1CoreSN > m1_) & (self.MassCOM1CoreSN < m2_) & (mask_inside_Z==1) mask_spin2 = (self.MassCOM2CoreSN > m1_) & (self.MassCOM2CoreSN < m2_) & (mask_inside_Z==1) self.spinM1[mask_spin1], self.spinM2[mask_spin2] = (-0.088*self.MassCOM1CoreSN[mask_spin1]) + b_, (-0.088*self.MassCOM2CoreSN[mask_spin2]) + b_ - + # set spins to min spin value 'a_low' for stars above lower CO core mass (m_2) condition: self.spinM1[(self.MassCOM1CoreSN >= m2_)&(mask_inside_Z==1)], self.spinM2[(self.MassCOM2CoreSN >= m2_)&(mask_inside_Z==1)] = a_low, a_low return self.spinM1, self.spinM2 - - + + def MESA(self): ''' - returns spins of the primary (spinM1) and secondary (spinM2) - based on the MESA BH natal spin model as described in Belczsynski et al. (2020) - See Equation 4 and Fig 2 in https://www.aanda.org/10.1051/0004-6361/201936528 + returns spins of the primary (spinM1) and secondary (spinM2) + based on the MESA BH natal spin model as described in Belczsynski et al. (2020) + See Equation 4 and Fig 2 in https://www.aanda.org/10.1051/0004-6361/201936528 this model assumes moderate BH birth spins, with a spin magnitude dependent on metallicity and CO core mass Warning: this function currently assumes the two stars have identical metallicity (add a Z mask to change this) - ''' - # MESA spin prescription see from Table 1 in http://arxiv.org/abs/2301.01312 - - # apply spin model on metallicity ranges that linearly span Z values by Belczysnki (cf. http://arxiv.org/abs/2301.01312) - Z_ranges = [[0.0, 0.0012], [0.0012, 0.004], [0.004, 0.010], [0.010, 1.0]] # Tab. 1 conditions in in http://arxiv.org/abs/2301.01312 + ''' + # MESA spin prescription see from Table 1 in http://arxiv.org/abs/2301.01312 + + # apply spin model on metallicity ranges that linearly span Z values by Belczysnki (cf. http://arxiv.org/abs/2301.01312) + Z_ranges = [[0.0, 0.0012], [0.0012, 0.004], [0.004, 0.010], [0.010, 1.0]] # Tab. 1 conditions in in http://arxiv.org/abs/2301.01312 self.setCOMPASData() # read in required COMPAS data (CO mass, and metallicity) - + # loop over four metallicity ranges of prescription for _, Z_range in enumerate(Z_ranges): mask_inside_Z = (self.metallicitySystems >= Z_range[0]) & (self.metallicitySystems < Z_range[1]) # mask systems inside metallicity range - a1_, b1_, a2_, b2_, m1_ = self.Z_dependent_spin_param(metallicity_range=Z_range[0], prescription_name='MESA') # obtains metallcity dependent model coefficients - + a1_, b1_, a2_, b2_, m1_ = self.Z_dependent_spin_param(metallicity_range=Z_range[0], prescription_name='MESA') # obtains metallcity dependent model coefficients + ### apply Equation 4 in Belczynski et al. (2020) ### # set spins to linear interpolation for CO masses in below m_1 condition: mask_spin1 = (self.MassCOM1CoreSN <= m1_)&(mask_inside_Z==1) mask_spin2 = (self.MassCOM2CoreSN <= m1_)&(mask_inside_Z==1) self.spinM1[mask_spin1], self.spinM2[mask_spin2] = (a1_*self.MassCOM1CoreSN[mask_spin1]) + b1_, (a1_*self.MassCOM2CoreSN[mask_spin2]) + b1_ - - - + + + if np.isfinite(m1_): - # set spins to second linear interpolation equation if we are in the Z range where m_1 is not infinite. + # set spins to second linear interpolation equation if we are in the Z range where m_1 is not infinite. mask_spin1 = (self.MassCOM1CoreSN > m1_)&(mask_inside_Z==1) mask_spin2 = (self.MassCOM2CoreSN > m1_)&(mask_inside_Z==1) self.spinM1[mask_spin1], self.spinM2[mask_spin2] = (a2_*self.MassCOM1CoreSN[mask_spin1]) + b2_, (a2_*self.MassCOM2CoreSN[mask_spin2]) + b2_ return self.spinM1, self.spinM2 - + @@ -353,93 +353,93 @@ def MESA(self): class calculate_spin_olderCOMPASdata(object): """ This class calculates the Black Hole (BH) or Neutron Star (NS) spin based on a given spin prescription - It returns the spin of the compact object M1, and compact object M2 + It returns the spin of the compact object M1, and compact object M2 """ - + def __init__(self, data_path=None, spin_model_name='uniform'): - + self.path = data_path - + if (self.path is None): print("Warning: your hdf5 path is set to 'None'") elif not os.path.isfile(data_path): raise ValueError("h5 file not found. Wrong path given?", "path given = %s"%data_path) elif os.path.isfile(data_path): self.h5file = h5.File(data_path) - - + + self.spin_model_name = spin_model_name - - - def random_uniform_spin(self, low, high): + + + def random_uniform_spin(self, low, high): """ returns black hole spins with a random spin value uniformly sampled between 'low' and 'high' """ - - + + sample_size = len(self.h5file['doubleCompactObjects']['M1'][...].squeeze()) - + self.spinM1 = np.random.uniform(low=low, high=high, size=sample_size) self.spinM2 = np.random.uniform(low=low, high=high, size=sample_size) - - + + return self.spinM1, self.spinM2 - - - def fixed_value_spin(self, spin_value): + + + def fixed_value_spin(self, spin_value): """ returns black hole spins with a fixed spin value 'spin_value' """ M1samples = self.h5file['doubleCompactObjects']['M1'][...].squeeze() - + self.spinM1 = np.ones_like(a=M1samples) * spin_value self.spinM2 = np.ones_like(a=M1samples) * spin_value - - + + return self.spinM1, self.spinM2 - - + + def setCOMPASData(self): """ reads in some of the COMPAS parameters needed from hdf5 file """ - + fDCO = self.h5file['doubleCompactObjects'] # hdf5 file with the DCO information fSN = self.h5file['supernovae'] # hdf5 file with the SN information # self.M1 = fDCO['M1'][...].squeeze() # Compact object mass [Msun] of the initially more massive star self.M2 = fDCO['M2'][...].squeeze() # Compact object mass [Msun] of the initially less massive star - self.metallicitySystems = fDCO['Metallicity1'][...].squeeze() - - self.seedsDCO = fDCO['seed'][...].squeeze() # get the seeds in the DCO file - self.seedsSN = fSN['randomSeed'][...].squeeze() # get the seeds in the SN file + self.metallicitySystems = fDCO['Metallicity1'][...].squeeze() + + self.seedsDCO = fDCO['seed'][...].squeeze() # get the seeds in the DCO file + self.seedsSN = fSN['randomSeed'][...].squeeze() # get the seeds in the SN file maskSNdco = np.in1d(self.seedsSN, self.seedsDCO) # mask in the SNe files the SNe that correspond to our DCO whichSN = fSN['whichStar'][...].squeeze()[maskSNdco] # this is 1 if the initially primary star goes SN and 2 if the secondary goes supernova - whichSN2 = whichSN[1::2] # get whichStar for the first SN (there are 2 SNe for all DCOs) - - self.separationPreSN2= fSN['separationBefore'][...].squeeze()[maskSNdco][1::2] # the separation just before each SN in [Rsun], we need only the separation for the second SN to occur, so the [1::2] + whichSN2 = whichSN[1::2] # get whichStar for the first SN (there are 2 SNe for all DCOs) + + self.separationPreSN2= fSN['separationBefore'][...].squeeze()[maskSNdco][1::2] # the separation just before each SN in [Rsun], we need only the separation for the second SN to occur, so the [1::2] self.convert_a_to_P_circular(separation=self.separationPreSN2*u.Rsun, M1=self.M1*u.Msun, M2=self.M2*u.Msun) # obtain the Period before the SNe self.PeriodPreSN2 = self.PeriodPreSN2.to(u.d).value self.MassCOM2CoreSN = fSN['MassCOCoreSN'][...].squeeze()[maskSNdco][1::2] # obtain the CO core mass before the SNe self.MassCOM1CoreSN = fSN['MassCOCoreSN'][...].squeeze()[maskSNdco][0::2] - - self.st1 = fDCO['stellarType1'][...].squeeze() # obtain the final stellar type of the Primary + + self.st1 = fDCO['stellarType1'][...].squeeze() # obtain the final stellar type of the Primary self.st2 = fDCO['stellarType2'][...].squeeze() # obtain the final stellar type of the Secondary - - self.spinM1, self.spinM2 = np.zeros_like(self.M1), np.zeros_like(self.M2) # start by giving all primaries zero spin and all secondaries zero spin + + self.spinM1, self.spinM2 = np.zeros_like(self.M1), np.zeros_like(self.M2) # start by giving all primaries zero spin and all secondaries zero spin # did M1 form in the first SN? self.M1formedSecond = (whichSN2==1) # mask that is 1 if the compact object M1 formed first in the DCO # did M2 form in the first SN? self.M2formedSecond = (whichSN2==2) # mask that is 1 if the compact object M2 formed first in the DCO mask_SN1not1or2 = (whichSN2!=1) & (whichSN2!=2) - - + + self.mWR = fSN['MassStarSN'][...].squeeze()[maskSNdco][1::2] # obtain the CO core mass before the SNe - + def function_f_Bavera21(self, c1, c2, c3): """ - calculates the f() function in Bavera et al (2021) based on given coefficients + calculates the f() function in Bavera et al (2021) based on given coefficients m_WR with units using astropy """ @@ -449,9 +449,9 @@ def function_f_Bavera21(self, c1, c2, c3): f = top/bottom - return f - - + return f + + def convert_a_to_P_circular(self, separation, M1, M2): """calculate Period from separation separation is separation (needs to be given in astropy units) @@ -464,11 +464,11 @@ def convert_a_to_P_circular(self, separation, M1, M2): mu = G*(M1+M2) self.PeriodPreSN2 = 2*np.pi * np.sqrt(separation**3/mu) - + def calculate_alpha_beta_Bavera21(self): """ returns alpha and beta for the Bavera et al. (2021) spin calculation """ # numerical coefficients form text below Eq 2 - # we use the values at helium depletion, since we later on use the C/O core mass. + # we use the values at helium depletion, since we later on use the C/O core mass. c1_alpha, c2_alpha, c3_alpha = 0.059305, 0.035552, 0.270245 c1_beta, c2_beta, c3_beta = 0.026960, 0.011001, 0.420739 @@ -479,99 +479,99 @@ def calculate_alpha_beta_Bavera21(self): - - + + def Bavera21(self): """ Returns spinM1 and spinM2, the spins of the compact objects formed from - the initial most massive star (M1) and initial least massive star (M2), respectively. - - In this approximation only a BH that is formed second can be tidally spun up, if its - pre-SN separation is tight enough. + the initial most massive star (M1) and initial least massive star (M2), respectively. + + In this approximation only a BH that is formed second can be tidally spun up, if its + pre-SN separation is tight enough. based on Eq 1 and 2 from https://arxiv.org/pdf/2105.09077.pdf - - + + """ - - # the following function reads in the COMPAS DCO parameters such as WR mass and sets self.spinM1, self.spinM2 + + # the following function reads in the COMPAS DCO parameters such as WR mass and sets self.spinM1, self.spinM2 # to arrays of zeros - self.setCOMPASData() - + self.setCOMPASData() + ## Calculate spin for the ones that tidally spin up ## - - alpha, beta = self.calculate_alpha_beta_Bavera21() #obtain alpha and beta - + + alpha, beta = self.calculate_alpha_beta_Bavera21() #obtain alpha and beta + # define mask of BHs that can have spin through tidal spin up # if BH (self.st==14) & formed second (self.M1formedFirst==0) & has pre-SN period (WR-BH period) of < 1 day, calculate spin with the approximation maskGiveSpin1 = ((self.st1==14) & (self.M1formedSecond==1)) & (np.log10(self.PeriodPreSN2) < 1) maskGiveSpin2 = ((self.st2==14) & (self.M2formedSecond==1)) & (np.log10(self.PeriodPreSN2) < 1) - - # Bavera approximation: - first_term = (alpha* (np.log10(self.PeriodPreSN2)**2)) - second_term = ( beta * np.log10(self.PeriodPreSN2)) - self.spinM1[maskGiveSpin1] = first_term[maskGiveSpin1] + second_term[maskGiveSpin1] - self.spinM2[maskGiveSpin2] = first_term[maskGiveSpin2] + second_term[maskGiveSpin2] - - #for some binaries the properties fall outside of the fit, we set these artificial to spin 0 + + # Bavera approximation: + first_term = (alpha* (np.log10(self.PeriodPreSN2)**2)) + second_term = ( beta * np.log10(self.PeriodPreSN2)) + self.spinM1[maskGiveSpin1] = first_term[maskGiveSpin1] + second_term[maskGiveSpin1] + self.spinM2[maskGiveSpin2] = first_term[maskGiveSpin2] + second_term[maskGiveSpin2] + + #for some binaries the properties fall outside of the fit, we set these artificial to spin 0 n_negative_spin1 = np.sum(self.spinM1<0) self.spinM1[self.spinM1<0] = np.zeros(n_negative_spin1) n_negative_spin2 = np.sum(self.spinM2<0) self.spinM2[self.spinM2<0] = np.zeros(n_negative_spin2) - - + + return self.spinM1, self.spinM2 - - - - + + + + def Qin21(self): """ Returns spinM1 and spinM2, the spins of the compact objects formed from - the initial most massive star (M1) and initial least massive star (M2), respectively. - - In this approximation only a BH that is formed second can be tidally spun up, if its - pre-SN separation is tight enough. - - see Qin+18, approximation originally given in https://ui.adsabs.harvard.edu/abs/2021MNRAS.504.3682C + the initial most massive star (M1) and initial least massive star (M2), respectively. + + In this approximation only a BH that is formed second can be tidally spun up, if its + pre-SN separation is tight enough. + + see Qin+18, approximation originally given in https://ui.adsabs.harvard.edu/abs/2021MNRAS.504.3682C (and Equation 5 in https://arxiv.org/pdf/2103.02608.pdf) - + """ - - # the following function reads in the COMPAS DCO parameters such as WR mass and sets self.spinM1, self.spinM2 + + # the following function reads in the COMPAS DCO parameters such as WR mass and sets self.spinM1, self.spinM2 # to arrays of zeros - self.setCOMPASData() - - m_, c_ = -5./3, 0.5 # from Qin + 2018 + self.setCOMPASData() - # if BH & formed second and tight enough at WR-BH phase, calculate spin with Qin+18 approximation for systems that have spin 1 + m_, c_ = -5./3, 0.5 # from Qin + 2018 + + # if BH & formed second and tight enough at WR-BH phase, calculate spin with Qin+18 approximation for systems that have spin 1 maskGiveSpin1 = ((self.st1==14) & (self.M1formedSecond==1) & (np.log10(self.PeriodPreSN2) < -0.3)) maskGiveSpin2 = ((self.st2==14) & (self.M2formedSecond==1) & (np.log10(self.PeriodPreSN2) < -0.3)) # the systems above have maximum spin - self.spinM1[maskGiveSpin1] = np.ones(np.sum(maskGiveSpin1)) # fill with ones - self.spinM2[maskGiveSpin2] = np.ones(np.sum(maskGiveSpin2)) # fill with ones - - + self.spinM1[maskGiveSpin1] = np.ones(np.sum(maskGiveSpin1)) # fill with ones + self.spinM2[maskGiveSpin2] = np.ones(np.sum(maskGiveSpin2)) # fill with ones + + # now assign the spin for systems that lie in between the 0 and 1 spin using the fitting formulae maskGiveSpin1 = ((self.st1==14) & (self.M1formedSecond==1) & (np.log10(self.PeriodPreSN2) >= -0.3) & (np.log10(self.PeriodPreSN2) < 0.3)) maskGiveSpin2 = ((self.st2==14) & (self.M2formedSecond==1) & (np.log10(self.PeriodPreSN2) >= -0.3) & (np.log10(self.PeriodPreSN2) < 0.3)) - self.spinM1[maskGiveSpin1] = m_ * np.log10(self.PeriodPreSN2[maskGiveSpin1]) + c_ - self.spinM2[maskGiveSpin2] = m_ * np.log10(self.PeriodPreSN2[maskGiveSpin2]) + c_ - - + self.spinM1[maskGiveSpin1] = m_ * np.log10(self.PeriodPreSN2[maskGiveSpin1]) + c_ + self.spinM2[maskGiveSpin2] = m_ * np.log10(self.PeriodPreSN2[maskGiveSpin2]) + c_ + + return self.spinM1, self.spinM2 - - + + def Z_dependent_spin_param(self, metallicity_range, prescription_name): - """ - returns metallicity dependent spin parameter coefficients of fitting formula for the Geneva or MESA prescription + """ + returns metallicity dependent spin parameter coefficients of fitting formula for the Geneva or MESA prescription by Belczynski et al. (2020); https://www.aanda.org/10.1051/0004-6361/201936528. Prescription_name should be in ['Geneva', 'MESA'] it either returns (Geneva:) b, m_1, m_2, a_low, or (MESA:) a_1, b_1, m_1, a_2 and b_2 """ - - # return coefficients from paragraphs below equation 3 and 4 in Belczysnki et al. (2020) + + # return coefficients from paragraphs below equation 3 and 4 in Belczysnki et al. (2020) if metallicity_range >= 0.010: return [2.258, 16.0, 24.2, 0.13] if prescription_name=='Geneva' else [-0.0016, 0.115, np.inf, np.inf, np.inf] @@ -586,84 +586,78 @@ def Z_dependent_spin_param(self, metallicity_range, prescription_name): return [3.666, 32.0, 38.8, 0.25] if prescription_name=='Geneva' else [-0.0010, 0.125, np.inf, np.inf, np.inf] - + def Geneva(self): ''' - returns spins of the primary (spinM1) and secondary (spinM2) - based on the Geneva BH natal spin model as described in Belczsynski+20 - See Equation 3 and Fig 1 in https://www.aanda.org/10.1051/0004-6361/201936528 + returns spins of the primary (spinM1) and secondary (spinM2) + based on the Geneva BH natal spin model as described in Belczsynski+20 + See Equation 3 and Fig 1 in https://www.aanda.org/10.1051/0004-6361/201936528 this model assumes moderate BH birth spins, with a spin magnitude dependent on metallicity and CO core mass Warning: this function currently assumes the two stars have identical metallicity (add a Z mask to change this) - ''' + ''' - # apply spin model on metallicity ranges that linearly span Z values by Belczysnki (cf. http://arxiv.org/abs/2301.01312) - Z_ranges = [[0.0, 0.0012], [0.0012, 0.004], [0.004, 0.010], [0.010, 1.0]] # Tab. 1 conditions in http://arxiv.org/abs/2301.01312 + # apply spin model on metallicity ranges that linearly span Z values by Belczysnki (cf. http://arxiv.org/abs/2301.01312) + Z_ranges = [[0.0, 0.0012], [0.0012, 0.004], [0.004, 0.010], [0.010, 1.0]] # Tab. 1 conditions in http://arxiv.org/abs/2301.01312 self.setCOMPASData() # read in required COMPAS data (CO mass, and metallicity) - + # loop over four metallicity ranges of prescription for _, Z_range in enumerate(Z_ranges): - + mask_inside_Z = (self.metallicitySystems >= Z_range[0]) & (self.metallicitySystems < Z_range[1]) # mask systems inside metallicity range - b_, m1_, m2_, a_low = self.Z_dependent_spin_param(metallicity_range=Z_range[0], prescription_name='Geneva') # obtains metallcity dependent model coefficients - + b_, m1_, m2_, a_low = self.Z_dependent_spin_param(metallicity_range=Z_range[0], prescription_name='Geneva') # obtains metallcity dependent model coefficients + ### apply Equation 3 in Belczynski et al. (2020) ### # set spins to max spin value of 0.85 for stars below lower CO core mass (m_1) condition: self.spinM1[(self.MassCOM1CoreSN <= m1_)&(mask_inside_Z==1)], self.spinM2[(self.MassCOM2CoreSN <= m1_)&(mask_inside_Z==1)] = 0.85, 0.85 - + # set spins to linear interpolation for CO masses in between m_1 and m_2 (a=-0.088 in eq. 3): mask_spin1 = (self.MassCOM1CoreSN > m1_) & (self.MassCOM1CoreSN < m2_) & (mask_inside_Z==1) mask_spin2 = (self.MassCOM2CoreSN > m1_) & (self.MassCOM2CoreSN < m2_) & (mask_inside_Z==1) self.spinM1[mask_spin1], self.spinM2[mask_spin2] = (-0.088*self.MassCOM1CoreSN[mask_spin1]) + b_, (-0.088*self.MassCOM2CoreSN[mask_spin2]) + b_ - + # set spins to min spin value 'a_low' for stars above lower CO core mass (m_2) condition: self.spinM1[(self.MassCOM1CoreSN >= m2_)&(mask_inside_Z==1)], self.spinM2[(self.MassCOM2CoreSN >= m2_)&(mask_inside_Z==1)] = a_low, a_low return self.spinM1, self.spinM2 - - + + def MESA(self): ''' - returns spins of the primary (spinM1) and secondary (spinM2) - based on the MESA BH natal spin model as described in Belczsynski et al. (2020) - See Equation 4 and Fig 2 in https://www.aanda.org/10.1051/0004-6361/201936528 + returns spins of the primary (spinM1) and secondary (spinM2) + based on the MESA BH natal spin model as described in Belczsynski et al. (2020) + See Equation 4 and Fig 2 in https://www.aanda.org/10.1051/0004-6361/201936528 this model assumes moderate BH birth spins, with a spin magnitude dependent on metallicity and CO core mass Warning: this function currently assumes the two stars have identical metallicity (add a Z mask to change this) - ''' - # MESA spin prescription see from Table 1 in http://arxiv.org/abs/2301.01312 - - # apply spin model on metallicity ranges that linearly span Z values by Belczysnki (cf. http://arxiv.org/abs/2301.01312) - Z_ranges = [[0.0, 0.0012], [0.0012, 0.004], [0.004, 0.010], [0.010, 1.0]] # Tab. 1 conditions in in http://arxiv.org/abs/2301.01312 + ''' + # MESA spin prescription see from Table 1 in http://arxiv.org/abs/2301.01312 + + # apply spin model on metallicity ranges that linearly span Z values by Belczysnki (cf. http://arxiv.org/abs/2301.01312) + Z_ranges = [[0.0, 0.0012], [0.0012, 0.004], [0.004, 0.010], [0.010, 1.0]] # Tab. 1 conditions in in http://arxiv.org/abs/2301.01312 self.setCOMPASData() # read in required COMPAS data (CO mass, and metallicity) - + # loop over four metallicity ranges of prescription for _, Z_range in enumerate(Z_ranges): mask_inside_Z = (self.metallicitySystems >= Z_range[0]) & (self.metallicitySystems < Z_range[1]) # mask systems inside metallicity range - a1_, b1_, a2_, b2_, m1_ = self.Z_dependent_spin_param(metallicity_range=Z_range[0], prescription_name='MESA') # obtains metallcity dependent model coefficients - + a1_, b1_, a2_, b2_, m1_ = self.Z_dependent_spin_param(metallicity_range=Z_range[0], prescription_name='MESA') # obtains metallcity dependent model coefficients + ### apply Equation 4 in Belczynski et al. (2020) ### # set spins to linear interpolation for CO masses in below m_1 condition: mask_spin1 = (self.MassCOM1CoreSN <= m1_)&(mask_inside_Z==1) mask_spin2 = (self.MassCOM2CoreSN <= m1_)&(mask_inside_Z==1) self.spinM1[mask_spin1], self.spinM2[mask_spin2] = (a1_*self.MassCOM1CoreSN[mask_spin1]) + b1_, (a1_*self.MassCOM2CoreSN[mask_spin2]) + b1_ - - - + + + if np.isfinite(m1_): - # set spins to second linear interpolation equation if we are in the Z range where m_1 is not infinite. + # set spins to second linear interpolation equation if we are in the Z range where m_1 is not infinite. mask_spin1 = (self.MassCOM1CoreSN > m1_)&(mask_inside_Z==1) mask_spin2 = (self.MassCOM2CoreSN > m1_)&(mask_inside_Z==1) self.spinM1[mask_spin1], self.spinM2[mask_spin2] = (a2_*self.MassCOM1CoreSN[mask_spin1]) + b2_, (a2_*self.MassCOM2CoreSN[mask_spin2]) + b2_ return self.spinM1, self.spinM2 - - - - - - diff --git a/online-docs/pages/User guide/Program options/program-options-list-defaults.rst b/online-docs/pages/User guide/Program options/program-options-list-defaults.rst index b624a849f..38fd1d5d4 100644 --- a/online-docs/pages/User guide/Program options/program-options-list-defaults.rst +++ b/online-docs/pages/User guide/Program options/program-options-list-defaults.rst @@ -49,7 +49,7 @@ Options: { ALWAYS, GRID, NEVER } |br| Default = GRID .. list-table:: - :widths: 11 80 + :widths: 11 80 :header-rows: 0 :class: aligned-text @@ -57,7 +57,7 @@ Default = GRID - indicates that the program options should be added to the sysparms file * - GRID - indicates that the program options should be added to the sysparms file `only if` - * - + * - - a GRID file is specified, or RANGEs or SETs are specified for options * - NEVER - indicates that the program options should `not` be added to the sysparms file @@ -132,8 +132,8 @@ Default = FALSE Allow main sequence accretors to survive common envelope evolution if other criteria point to survival. |br| Default = TRUE -**--common-envelope-allow-radiative-envelope-survive** |br| -Allow binaries with an evolved component with a radiative envelope to survive the common envelope phase (they always survive in the +**--common-envelope-allow-radiative-envelope-survive** |br| +Allow binaries with an evolved component with a radiative envelope to survive the common envelope phase (they always survive in the `--common-envelope-formalism TWO_STAGE` option). |br| Default = FALSE @@ -149,8 +149,8 @@ Default = 1.0 **--common-envelope-formalism** |br| CE formalism prescription. |br| Options: { ENERGY, TWO_STAGE } |br| -``ENERGY`` is the standard alpha-lambda formalism; ``TWO_STAGE`` is the formalism of Hirai & Mandel (2022) -- the latter always allows radiative-envelope -donors to survive CE, so `--common-envelope-allow-radiative-envelope-survive` option is ignored |br| +``ENERGY`` is the standard alpha-lambda formalism; ``TWO_STAGE`` is the formalism of Hirai & Mandel (2022) -- the latter always allows radiative-envelope +donors to survive CE, so `--common-envelope-allow-radiative-envelope-survive` option is ignored |br| Default = ENERGY **--common-envelope-lambda** |br| @@ -167,11 +167,11 @@ Continuous extrapolation beyond maximum radius range in Nanjing lambda's as impl Default = TRUE **--common-envelope-lambda-nanjing-interpolate-in-mass** |br| -Interpolate Nanjing lambda parameters across different mass models. Only used when ``--common-envelope-lambda-prescription = LAMBDA_NANJING``. Requires ``--common-envelope-lambda-nanjing-enhanced``. |br| +Interpolate Nanjing lambda parameters across different mass models. Only used when ``--common-envelope-lambda-prescription = LAMBDA_NANJING``. Requires ``--common-envelope-lambda-nanjing-enhanced``. |br| Default = TRUE **--common-envelope-lambda-nanjing-interpolate-in-metallicity** |br| -Interpolate Nanjing lambda parameters across population I and population II metallicity models. Only used when ``--common-envelope-lambda-prescription = LAMBDA_NANJING``. Requires ``--common-envelope-lambda-nanjing-enhanced``. |br| +Interpolate Nanjing lambda parameters across population I and population II metallicity models. Only used when ``--common-envelope-lambda-prescription = LAMBDA_NANJING``. Requires ``--common-envelope-lambda-nanjing-enhanced``. |br| Default = TRUE **--common-envelope-lambda-nanjing-use-rejuvenated-mass** |br| @@ -217,7 +217,7 @@ Only used for --envelope-state-prescription = CONVECTIVE_MASS_FRACTION, ignored Default = 0.1 **--convective-envelope-temperature-threshold** |br| -Temperature [K] threshold, below which the envelopes of giants are convective. +Temperature [K] threshold, below which the envelopes of giants are convective. Only used for --envelope-state-prescription = FIXED_TEMPERATURE, ignored otherwise. |br| Default = 5370 @@ -276,7 +276,7 @@ Default = 0.87 Critical mass ratio for MT from a giant star to a non-degenerate accretor. |br| 0 is always stable, < 0 is disabled. |br| Only used for ``--critical-mass-ratio-prescription CLAEYS``, ignored otherwise. |br| -Default shows -1, but this translates to a function of the core mass ratio, as described in Claeys+ 2014. +Default shows -1, but this translates to a function of the core mass ratio, as described in Claeys+ 2014. **--critical-mass-ratio-helium-HG-degenerate-accretor** |br| Critical mass ratio for MT from a helium HG star to a degenerate accretor. |br| @@ -406,7 +406,7 @@ Options: { LEGACY, HURLEY, FIXED_TEMPERATURE, CONVECTIVE_MASS_FRACTION } |br| ``LEGACY`` refers to the model used in Stevenson et al., 2017 |br| ``HURLEY`` refers to the model of Hurley, Pols, Tout, 2002 |br| ``FIXED_TEMPERATURE`` assumes that a deep convective envelope developes only when the temperature drops below ``CONVECTIVE_BOUNDARY_TEMPERATURE`` (Klencki et al., 2020) |br| -``CONVECTIVE_MASS_FRACTION`` means that whether the envelope is labelled convective is determined by the fraction of the envelope's mass which is convective; +``CONVECTIVE_MASS_FRACTION`` means that whether the envelope is labelled convective is determined by the fraction of the envelope's mass which is convective; that threshold can be changed from its default value with the additional option ``--convective-envelope-mass-threshold`` |br| Default = LEGACY @@ -593,9 +593,9 @@ Options: { ZERO, FIXED, FLAT, MAXWELLIAN, BRAYELDRIDGE, MULLER2016, MULLER2016MA ``FIXED`` always sets the magnitude to a fixed value based on supernova type. |br| ``FLAT`` and ``MAXWELLIAN`` draw kicks from uniform or Maxwellian (e.g., Hobbs et al., 2005) distributions, respectively. |br| ``BRAYELDRIDGE`` and ``MULLERMANDEL`` use momentum-preserving kicks from Bray & Eldrigde 2018 and Mandel & Mueller 2020, respectively. |br| -Note that this is independent from ``--remnant-mass-prescription`` to provide flexibility; however, the ``MULLERMANDEL`` |br| +Note that this is independent from ``--remnant-mass-prescription`` to provide flexibility; however, the ``MULLERMANDEL`` |br| kick prescription is intended to be consistently used with the ``MULLERMANDEL`` remnant mass prescription, |br| -as well as with the ``MALTSEV2024`` remnant mass prescription (e.g., if used with other remnant mass prescriptions, +as well as with the ``MALTSEV2024`` remnant mass prescription (e.g., if used with other remnant mass prescriptions, inconsistent black hole kicks may be applied rescaled by fallback fractions). |br| ``MULLER2016`` and ``MULLER2016MAXWELLIAN`` use kicks from Mueller 2016 as implemented in Vigna-Gomez et al., 2018 |br| (reduced by a factor of sqrt(3) in the latter case). |br| @@ -1012,7 +1012,7 @@ Default = 0.45 **--natal-kick-for-PPISN** TRUE indicates PPISN remnants will receive natal kicks via the same prescription as CCSN remnants. |br| FALSE indicates PPISN remnants will receive no natal kicks. |br| -Default = TRUE +Default = TRUE **--neutrino-mass-loss-BH-formation** |br| Assumption about neutrino mass loss during BH formation (works with `FRYER2012` or `FRYER2022` ``--remnant-mass-prescription``, but not `MULLERMANDEL`). |br| @@ -1205,7 +1205,7 @@ Default = TRUE Pulsational pair instability prescription (only relevant when using ``--pulsational-pair-instability``). |br| Options: { HENDRIKS, WOOSLEY, STARTRACK, MARCHANT, FARMER } |br| ``HENDRIKS`` implements the prescription from Hendriks et al. 2023 |br| -``WOOSLEY``, ``STARTRACK`` and ``MARCHANT`` follow Woosley 2017, Belczynski et al. 2016, and Marchant et al. 2018, +``WOOSLEY``, ``STARTRACK`` and ``MARCHANT`` follow Woosley 2017, Belczynski et al. 2016, and Marchant et al. 2018, all as implemented in Stevenson et al. 2019. |br| ``FARMER`` follows Farmer et al. 2019 |br| Default = MARCHANT @@ -1262,27 +1262,27 @@ Default = TRUE **--rocket-kick-magnitude-1** |br| Magnitude of post-SN pulsar rocket kick for the primary, in km/s. |br| -Default = 0.0 +Default = 0.0 **--rocket-kick-magnitude-2** |br| Magnitude of post-SN pulsar rocket kick for the secondary, in km/s. |br| -Default = 0.0 +Default = 0.0 **--rocket-kick-phi-1** |br| The in-plane angle :math:`[0.0, 2pi)` of the rocket kick velocity that primary neutron star receives following the supernova. |br| -Default = 0.0 +Default = 0.0 **--rocket-kick-phi-2** |br| The in-plane angle :math:`[0.0, 2pi)` of the rocket kick velocity that secondary neutron star receives following the supernova. |br| -Default = 0.0 +Default = 0.0 **--rocket-kick-theta-1** |br| The polar angle [0, pi] of the rocket kick velocity that primary neutron star receives following the supernova. 0 is aligned with orbital AM. |br| -Default = 0.0 +Default = 0.0 **--rocket-kick-theta-2** |br| The polar angle :math:`[0, pi]`` of the rocket kick velocity that secondary neutron star receives following the supernova. 0 is aligned with orbital AM. |br| -Default = 0.0 +Default = 0.0 **--rotational-frequency** |br| Initial rotational frequency of the star for SSE (Hz). |br| @@ -1322,7 +1322,7 @@ Default = DECIN2023 |br| :ref:`Back to Top ` **--scale-CHE-mass-loss-with-surface-helium-abundance** |br| -Scale mass loss for chemically homogeneously evolving (CHE) stars with the surface helium abundance. +Scale mass loss for chemically homogeneously evolving (CHE) stars with the surface helium abundance. Transition from OB to WR mass loss towards the end of the main sequence. Default = TRUE @@ -1404,7 +1404,7 @@ Default = ’’ (None) **--timestep-multiplier** |br| Multiplicative factor for timestep duration. |br| |br| -This multiplier is applied after the timesteps are chosen using other program options such as ``--radial-change-fraction`` +This multiplier is applied after the timesteps are chosen using other program options such as ``--radial-change-fraction`` and ``--mass-change-fraction``, and will therefore override expected behaviour. |br| This option can be used in conjunction with ``--timestep-multipliers``, in which case this multiplier, and the appropriate phase-dependent multiplier (specified by ``--timestep-multipliers``) are both applied. |br| @@ -1414,11 +1414,11 @@ This option is primarily intended for debugging/testing of convergence issues ra **--timestep-multipliers** |br| Phase-dependent multiplicative factors for timestep duration. This is a vector option: one or more timestep multiplier values may be specified. |br| See :doc:`Vector program options <./program-options-vector-options>` for option format. |br| -A multiplicative factor can be specified for each phase (stellar type), where the ordinal value (zero-based) of the -option value indicates the stellar type (from ``MS_LTE_07`` to ``CHEMICALLY_HOMOGENEOUS``, see stellar type list at +A multiplicative factor can be specified for each phase (stellar type), where the ordinal value (zero-based) of the +option value indicates the stellar type (from ``MS_LTE_07`` to ``CHEMICALLY_HOMOGENEOUS``, see stellar type list at :doc:`../../Developer guide/Headers/typedefs-dot-h`>). |br| |br| -This multiplier is applied after the timesteps are chosen using other program options such as ``--radial-change-fraction`` and +This multiplier is applied after the timesteps are chosen using other program options such as ``--radial-change-fraction`` and ``--mass-change-fraction``, and will therefore override expected behaviour. |br| This option can be used in conjunction with ``--timestep-multiplier``, in which case that multiplier, and the appropriate phase-dependent multiplier (specified by ``--timestep-multipliers``) are both applied. |br| @@ -1525,7 +1525,7 @@ Go to :ref:`the top of this page ` for the full alphabetical --metallicity-distribution, --metallicity, --metallicity-min, --metallicity-max ---orbital-period-distribution, --orbital-period, --orbital-period-min, --orbital-period-max, --semi-major-axis-distribution, --semi-major-axis, +--orbital-period-distribution, --orbital-period, --orbital-period-min, --orbital-period-max, --semi-major-axis-distribution, --semi-major-axis, --semi-major-axis-min, --semi-major-axis-max, --allow-rlof-at-birth, --allow-touching-at-birth --rotational-velocity-distribution, --rotational-frequency, --rotational-frequency-1, --rotational-frequency-2 @@ -1537,7 +1537,7 @@ Go to :ref:`the top of this page ` for the full alphabetical **Stellar evolution and winds** --check-photon-tiring-limit, --cool-wind-mass-loss-multiplier, --luminous-blue-variable-prescription, --LBV-mass-loss-prescription ---luminous-blue-variable-multiplier, --main-sequence-core-mass-prescription, --mass-loss-prescription, --overall-wind-mass-loss-multiplier, --wolf-rayet-multiplier, +--luminous-blue-variable-multiplier, --main-sequence-core-mass-prescription, --mass-loss-prescription, --overall-wind-mass-loss-multiplier, --wolf-rayet-multiplier, --expel-convective-envelope-above-luminosity-threshold, --luminosity-to-mass-threshold, --scale-CHE-mass-loss-with-surface-helium-abundance --OB-mass-loss, --OB-mass-loss-prescription, --RSG-mass-loss, --RSG-mass-loss-prescription, --VMS-mass-loss, --vms-mass-loss-prescription, --WR-mass-loss, --WR-mass-loss-prescription @@ -1549,28 +1549,28 @@ Go to :ref:`the top of this page ` for the full alphabetical **Mass transfer physics** ---case-bb-stability-prescription, --convective-envelope-temperature-threshold, +--case-bb-stability-prescription, --convective-envelope-temperature-threshold, --convective-envelope-mass-threshold, --critical-mass-ratio-prescription, --critical-mass-ratio-HG-degenerate-accretor, --critical-mass-ratio-HG-non-degenerate-accretor, --critical-mass-ratio-MS-high-mass-degenerate-accretor, --critical-mass-ratio-MS-high-mass-non-degenerate-accretor, --critical-mass-ratio-MS-low-mass-degenerate-accretor, --critical-mass-ratio-MS-low-mass-non-degenerate-accretor, --critical-mass-ratio-giant-degenerate-accretor, --critical-mass-ratio-giant-non-degenerate-accretor, --critical-mass-ratio-helium-HG-degenerate-accretor, ---critical-mass-ratio-helium-HG-non-degenerate-accretor, --critical-mass-ratio-helium-MS-degenerate-accretor, --critical-mass-ratio-helium-MS-non-degenerate-accretor, ---critical-mass-ratio-helium-giant-degenerate-accretor, --critical-mass-ratio-helium-giant-non-degenerate-accretor, --critical-mass-ratio-white-dwarf-degenerate-accretor, ---critical-mass-ratio-white-dwarf-non-degenerate-accretor, --eddington-accretion-factor, --mass-transfer, --use-mass-transfer, --mass-transfer-accretion-efficiency-prescription, ---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, ---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, ---stellar-zeta-prescription, --zeta-adiabatic-arbitrary, --zeta-main-sequence, --zeta-radiative-giant-star - ---circulariseBinaryDuringMassTransfer, --angular-momentum-conservation-during-circularisation, --tides-prescription, +--critical-mass-ratio-helium-HG-non-degenerate-accretor, --critical-mass-ratio-helium-MS-degenerate-accretor, --critical-mass-ratio-helium-MS-non-degenerate-accretor, +--critical-mass-ratio-helium-giant-degenerate-accretor, --critical-mass-ratio-helium-giant-non-degenerate-accretor, --critical-mass-ratio-white-dwarf-degenerate-accretor, +--critical-mass-ratio-white-dwarf-non-degenerate-accretor, --eddington-accretion-factor, --mass-transfer, --use-mass-transfer, --mass-transfer-accretion-efficiency-prescription, +--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, +--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, +--stellar-zeta-prescription, --zeta-adiabatic-arbitrary, --zeta-main-sequence, --zeta-radiative-giant-star + +--circulariseBinaryDuringMassTransfer, --angular-momentum-conservation-during-circularisation, --tides-prescription, --response-to-spin-up --envelope-state-prescription, --common-envelope-alpha, --common-envelope-alpha-thermal, --common-envelope-formalism, ---common-envelope-lambda-prescription, --common-envelope-lambda, ---common-envelope-slope-kruckow, --common-envelope-lambda-multiplier, --common-envelope-lambda-nanjing-enhanced, ---common-envelope-lambda-nanjing-interpolate-in-mass, --common-envelope-lambda-nanjing-interpolate-in-metallicity, ---common-envelope-lambda-nanjing-use_rejuvenated-mass, --common-envelope-allow-main-sequence-survive, --common-envelope-allow-radiative-envelope-survive, ---common-envelope-allow-immediate-RLOF-post-CE-survive, --common-envelope-mass-accretion-prescription, --common-envelope-mass-accretion-constant, ---common-envelope-mass-accretion-min, --common-envelope-mass-accretion-max, --common-envelope-recombination-energy-density, --maximum-mass-donor-nandez-ivanova, +--common-envelope-lambda-prescription, --common-envelope-lambda, +--common-envelope-slope-kruckow, --common-envelope-lambda-multiplier, --common-envelope-lambda-nanjing-enhanced, +--common-envelope-lambda-nanjing-interpolate-in-mass, --common-envelope-lambda-nanjing-interpolate-in-metallicity, +--common-envelope-lambda-nanjing-use_rejuvenated-mass, --common-envelope-allow-main-sequence-survive, --common-envelope-allow-radiative-envelope-survive, +--common-envelope-allow-immediate-RLOF-post-CE-survive, --common-envelope-mass-accretion-prescription, --common-envelope-mass-accretion-constant, +--common-envelope-mass-accretion-min, --common-envelope-mass-accretion-max, --common-envelope-recombination-energy-density, --maximum-mass-donor-nandez-ivanova, --revised-energy-formalism-nandez-ivanova :ref:`Back to Top ` @@ -1579,18 +1579,18 @@ Go to :ref:`the top of this page ` for the full alphabetical **Supernovae** ---remnant-mass-prescription, --fryer-supernova-engine, --fryer-22-fmix, --fryer-22-mcrit, --maximum-neutron-star-mass, --mcbur1, --allow-non-stripped-ECSN, ---neutrino-mass-loss-BH-formation, --neutrino-mass-loss-BH-formation-value, --neutron-star-equation-of-state, --pair-instability-supernovae, --PISN-lower-limit, +--remnant-mass-prescription, --fryer-supernova-engine, --fryer-22-fmix, --fryer-22-mcrit, --maximum-neutron-star-mass, --mcbur1, --allow-non-stripped-ECSN, +--neutrino-mass-loss-BH-formation, --neutrino-mass-loss-BH-formation-value, --neutron-star-equation-of-state, --pair-instability-supernovae, --PISN-lower-limit, --PISN-upper-limit, --PPI-CO-Core-Shift-Hendriks, --PPI-lower-limit, --PPI-upper-limit, --pulsational-pair-instability, --pulsational-pair-instability-prescription ---pulsar-birth-magnetic-field-distribution, --pulsar-birth-magnetic-field-distribution-min, --pulsar-birth-magnetic-field-distribution-max, ---pulsar-birth-spin-period-distribution, --pulsar-birth-spin-period-distribution-min, --pulsar-birth-spin-period-distribution-max, +--pulsar-birth-magnetic-field-distribution, --pulsar-birth-magnetic-field-distribution-min, --pulsar-birth-magnetic-field-distribution-max, +--pulsar-birth-spin-period-distribution, --pulsar-birth-spin-period-distribution-min, --pulsar-birth-spin-period-distribution-max, --pulsar-magnetic-field-decay-massscale, --pulsar-magnetic-field-decay-timescale, --pulsar-minimum-magnetic-field ---kick-magnitude-distribution, --kick-magnitude-sigma-CCSN-BH, --kick-magnitude-sigma-CCSN-NS, --kick-magnitude-sigma-ECSN, --kick-magnitude-sigma-USSN, ---black-hole-kicks, --black-hole-kicks-mode, --fix-dimensionless-kick-magnitude, --kick-magnitude, --kick-magnitude-1, --kick-magnitude-2, --kick-magnitude-min, --kick-magnitude-max, ---kick-magnitude-random, --kick-magnitude-random-1, --kick-magnitude-random-2, --kick-scaling-factor, -muller-mandel-kick-multiplier-BH, ---muller-mandel-kick-multiplier-NS, --muller-mandel-sigma-kick-BH, --muller-mandel-sigma-kick-NS, --USSN-kicks-override-mandel-muller, +--kick-magnitude-distribution, --kick-magnitude-sigma-CCSN-BH, --kick-magnitude-sigma-CCSN-NS, --kick-magnitude-sigma-ECSN, --kick-magnitude-sigma-USSN, +--black-hole-kicks, --black-hole-kicks-mode, --fix-dimensionless-kick-magnitude, --kick-magnitude, --kick-magnitude-1, --kick-magnitude-2, --kick-magnitude-min, --kick-magnitude-max, +--kick-magnitude-random, --kick-magnitude-random-1, --kick-magnitude-random-2, --kick-scaling-factor, -muller-mandel-kick-multiplier-BH, +--muller-mandel-kick-multiplier-NS, --muller-mandel-sigma-kick-BH, --muller-mandel-sigma-kick-NS, --USSN-kicks-override-mandel-muller, --kick-direction, --kick-direction-distribution, --kick-direction-power, --kick-mean-anomaly-1, --kick-mean-anomaly-2, --kick-phi-1, --kick-phi-2, --kick-theta-1, --kick-theta-2 :ref:`Back to Top ` @@ -1599,8 +1599,8 @@ Go to :ref:`the top of this page ` for the full alphabetical **Administrative** ---mode, --number-of-systems, ---emit-gravitational-radiation, --evolve-double-white-dwarfs, --evolve-main-sequence-mergers, --evolve-pulsars, --evolve-unbound-systems, +--mode, --number-of-systems, +--emit-gravitational-radiation, --evolve-double-white-dwarfs, --evolve-main-sequence-mergers, --evolve-pulsars, --evolve-unbound-systems, --include-WD-binaries-as-DCO, --mass-change-fraction, --maximum-evolution-time, --maximum-number-timestep-iterations, --radial-change-fraction, --random-seed, --timestep-multiplier, --timestep-filename, @@ -1610,18 +1610,16 @@ Go to :ref:`the top of this page ` for the full alphabetical --grid, --grid-start-line, --grid-lines-to-process ---add-options-to-sysparms, --debug-classes, --debug-level, --debug-to-file, --detailed-output, --enable-warnings, --errors-to-file, +--add-options-to-sysparms, --debug-classes, --debug-level, --debug-to-file, --detailed-output, --enable-warnings, --errors-to-file, --help, --notes, --notes-hdrs, --population-data-printing, --print-bool-as-string, --quiet, --version ---log-classes, --logfile-definitions, --logfile-name-prefix, --logfile-type, --log-level, --logfile-common-envelopes, --logfile-common-envelopes-record-types, ---logfile-detailed-output, --logfile-detailed-output-record-types, --logfile-double-compact-objects, --logfile-double-compact-objects-record-types, ---logfile-pulsar-evolution, --logfile-pulsar-evolution-record-type, --logfile-rlof-parameters, --logfile-rlof-parameters-record-types, --logfile-supernovae, +--log-classes, --logfile-definitions, --logfile-name-prefix, --logfile-type, --log-level, --logfile-common-envelopes, --logfile-common-envelopes-record-types, +--logfile-detailed-output, --logfile-detailed-output-record-types, --logfile-double-compact-objects, --logfile-double-compact-objects-record-types, +--logfile-pulsar-evolution, --logfile-pulsar-evolution-record-type, --logfile-rlof-parameters, --logfile-rlof-parameters-record-types, --logfile-supernovae, --logfile-supernovae-record-types, --logfile-switch-log, --logfile-system-parameters, --logfile-system-parameters-record-types, --logfile-system-snapshot-log, ---logfile-system-snapshot-log-record-types, --output-container, +--logfile-system-snapshot-log-record-types, --output-container, --output-path, --rlof-printing, --store-input-files, --switch-log, --hdf5-buffer-size, --hdf5-chunk-size --create-YAML-file, YAML-template :ref:`Back to Top ` - - diff --git a/online-docs/pages/User guide/Program options/program-options-ranges.rst b/online-docs/pages/User guide/Program options/program-options-ranges.rst index 5360fee02..0824e84d3 100644 --- a/online-docs/pages/User guide/Program options/program-options-ranges.rst +++ b/online-docs/pages/User guide/Program options/program-options-ranges.rst @@ -13,7 +13,7 @@ where `range-specifier` is defined as: range-identifier[start,count,increment] .. list-table:: - :widths: 19 81 + :widths: 19 81 :header-rows: 0 :class: aligned-text @@ -42,7 +42,7 @@ and with no grid file, would type any of the following:: ./COMPAS --metallicity [0.0001,5,0.0013] ./COMPAS --metallicity r[0.0001,5,0.0013] - + ./COMPAS --metallicity range[0.0001,5,0.0013] In each of the examples above the user has specified, by the use of the `range-specifier`, that five binary stars @@ -59,5 +59,3 @@ and COMPAS would evolve a grid of 50 binaries using the 10 metallicity values an Note that when a range is, or ranges are, specified on the command line, the ``--number-of-systems`` command-line option is ignored. This is to avoid multiple systems with identical initial values being evolved. Ranges and sets can be mixed with grid files, and in that case ranges and sets specified on the command line will be played out for each grid file line. - - \ No newline at end of file diff --git a/online-docs/pages/User guide/Program options/program-options-sets.rst b/online-docs/pages/User guide/Program options/program-options-sets.rst index 0053e4b62..895c04d65 100644 --- a/online-docs/pages/User guide/Program options/program-options-sets.rst +++ b/online-docs/pages/User guide/Program options/program-options-sets.rst @@ -15,7 +15,7 @@ where `set-specifier` is defined as: and .. list-table:: - :widths: 24 76 + :widths: 24 76 :header-rows: 0 :class: aligned-text @@ -28,7 +28,7 @@ where `set-specifier` is defined as: `set-identifier` is mandatory for `set-specifier`. |br| `value`:sub:`i` must be the same data type as `option-name`. - + There should be no spaces inside the brackets ([]). Spaces on the command line are interpreted as argument delimiters by the shell parser before passing the command-line arguments to the COMPAS executable, so if spaces are present inside the brackets the shell parser breaks the set specification into multiple command-line arguments. @@ -52,5 +52,3 @@ should be evolved, using the eccentricity distributions ’THERMALISED’, ’FI Note that when a set is, or sets are, specified on the command line, the ``--number-of-systems`` command-line option is ignored. This is to avoid multiple systems with identical initial values being evolved. Ranges and sets can be mixed with grid files, and in that case ranges and sets specified on the command line will be played out for each grid file line. - - \ No newline at end of file diff --git a/online-docs/pages/User guide/Program options/program-options-vector-options.rst b/online-docs/pages/User guide/Program options/program-options-vector-options.rst index 8b3993a8c..78bb45a25 100644 --- a/online-docs/pages/User guide/Program options/program-options-vector-options.rst +++ b/online-docs/pages/User guide/Program options/program-options-vector-options.rst @@ -30,7 +30,7 @@ option value to default, or just be an empty string). Option values beyond the first value may not begin with the dash character ('-'), because the shell parser will parse them as option names before passing them through to COMPAS (this is a Boost limitation). -COMPAS imposes no limit to the length (number of characters) of an individual option values that are specified as strings, but there may +COMPAS imposes no limit to the length (number of characters) of an individual option values that are specified as strings, but there may be practical limits imposed by the underlying system. @@ -54,7 +54,7 @@ in this manner on the command line they will default to the COMPAS default annot Spaces in option values (in general, but also specifically for vector options) strings need to be enclosed in quotes, or the shell parser will parse them as separate arguments before passing them through to COMPAS. If the log file type is specified as TXT, then any spaces in option -values need to be enclosed in quotes to avoid the shell parser parsing them as separate arguments, but also need to have enclosing quotes +values need to be enclosed in quotes to avoid the shell parser parsing them as separate arguments, but also need to have enclosing quotes propagated to the logfile, or the spaces will be interpreted as delimiters in the log file. e.g. - in the following example, enclosing escaped quote characters ('\"') are added before adding the enclosing quotes:: @@ -66,4 +66,3 @@ so the caveat mentioned above that option values may not begin with the dash cha Shorthand notation is optional: users may choose to use the notation described above rather than shorthand notation, but in that case all option values must be specified (no omissions, no defaults). - diff --git a/online-docs/pages/User guide/Program options/program-options.rst b/online-docs/pages/User guide/Program options/program-options.rst index 0258502c1..41400f2df 100644 --- a/online-docs/pages/User guide/Program options/program-options.rst +++ b/online-docs/pages/User guide/Program options/program-options.rst @@ -25,4 +25,3 @@ COMPAS will issue an error message if ranges or sets are specified for options f program-options-list-defaults See :doc:`./program-options-list-defaults` for a full list of available program options and their default valaues. - diff --git a/online-docs/pages/User guide/Running COMPAS/example/grid_demo.txt b/online-docs/pages/User guide/Running COMPAS/example/grid_demo.txt index b1cb79f98..31944d90a 100644 --- a/online-docs/pages/User guide/Running COMPAS/example/grid_demo.txt +++ b/online-docs/pages/User guide/Running COMPAS/example/grid_demo.txt @@ -1,4 +1,4 @@ --initial-mass-1 35 --initial-mass-2 31 -a 3.5 --metallicity 0.001 --initial-mass-1 31 --initial-mass-2 31 -a 3.5 --metallicity 0.001 --initial-mass-1 40 --initial-mass-2 31 -a 3.5 --metallicity 0.001 ---initial-mass-1 35 --initial-mass-2 25 -a 3.5 --metallicity 0.001 \ No newline at end of file +--initial-mass-1 35 --initial-mass-2 25 -a 3.5 --metallicity 0.001 diff --git a/online-docs/pages/User guide/Running COMPAS/running-compas.rst b/online-docs/pages/User guide/Running COMPAS/running-compas.rst index 086a837f1..ab56bfa08 100644 --- a/online-docs/pages/User guide/Running COMPAS/running-compas.rst +++ b/online-docs/pages/User guide/Running COMPAS/running-compas.rst @@ -12,4 +12,3 @@ There are several ways to run COMPAS: each method suiting different needs: running-via-docker running-detailed-output running-grid - diff --git a/online-docs/pages/User guide/Running COMPAS/running-detailed-output.rst b/online-docs/pages/User guide/Running COMPAS/running-detailed-output.rst index 5a8c5318a..be00c8319 100644 --- a/online-docs/pages/User guide/Running COMPAS/running-detailed-output.rst +++ b/online-docs/pages/User guide/Running COMPAS/running-detailed-output.rst @@ -1,15 +1,15 @@ Running detailed output ========================= -The COMPAS run from the tutorial creates a new directory ``COMPAS_Output``, inside which you will find the following files/directories +The COMPAS run from the tutorial creates a new directory ``COMPAS_Output``, inside which you will find the following files/directories (here we assume ``logfile_type = 'HDF5'`` in the python submit file): **Run_Details** |br| -A record of the COMPAS command-line program options specified for this tutorial (these are the values set by ``compasConfigDefault.yaml`` when using +A record of the COMPAS command-line program options specified for this tutorial (these are the values set by ``compasConfigDefault.yaml`` when using ``runSubmit.py``, or the COMPAS default values if not executing via ``runSubmit.py``). **COMPAS_Output.h5** |br| -The primary output file, containing ``HDF5`` data groups for the relevant output physics. By default, and for a sufficiently large simulation, +The primary output file, containing ``HDF5`` data groups for the relevant output physics. By default, and for a sufficiently large simulation, this will include: - BSE_Common_Envelopes @@ -19,10 +19,10 @@ this will include: - BSE_System_Parameters **Detailed_Output** |br| -This directory contains the detailed output file, ``BSE_Detailed_Output_0.h5``, which records the detailed time evolution of binary. +This directory contains the detailed output file, ``BSE_Detailed_Output_0.h5``, which records the detailed time evolution of binary. This file, and directory, is only produced if ``detailed_output = True`` in the python submit file. -We examine ``BSE_Detailed_Output_0.h5`` to look at the evolution of the two stars. A default python plotting script has been included to +We examine ``BSE_Detailed_Output_0.h5`` to look at the evolution of the two stars. A default python plotting script has been included to visualise the data. Let's run the script:: python3 plot_detailed_evolution.py @@ -41,4 +41,3 @@ This should produce a plot similar to :ref:`Figure 5 `: Figure 5 Example COMPAS run. COMPAS provides many tools for analysing and post-processing the data - see :doc:`../Post-processing/post-processing` for more details. - diff --git a/online-docs/pages/User guide/Running COMPAS/running-grid.rst b/online-docs/pages/User guide/Running COMPAS/running-grid.rst index ad21ef438..f249c0032 100644 --- a/online-docs/pages/User guide/Running COMPAS/running-grid.rst +++ b/online-docs/pages/User guide/Running COMPAS/running-grid.rst @@ -65,4 +65,3 @@ Contents of ``grid_demo.txt``:: Output: .. include:: example/COMPAS_Output/Run_Details - diff --git a/online-docs/pages/User guide/Running COMPAS/running-via-cmdline.rst b/online-docs/pages/User guide/Running COMPAS/running-via-cmdline.rst index e136ef11a..eb8dcdec6 100644 --- a/online-docs/pages/User guide/Running COMPAS/running-via-cmdline.rst +++ b/online-docs/pages/User guide/Running COMPAS/running-via-cmdline.rst @@ -7,10 +7,10 @@ output by writing plain text to the terminal. COMPAS reads input files where nec and a log file definitions file (see :doc:`../COMPAS output/standard-logfiles-record-specification`), and produces output files (see :doc:`../COMPAS output/output`), but these are not interactive. -Command-line applications accept interactive input from the user in a number of ways: one of those is via command-line switches and -arguments, or, more generally, command-line options. This is the method COMPAS uses to interact with the user. +Command-line applications accept interactive input from the user in a number of ways: one of those is via command-line switches and +arguments, or, more generally, command-line options. This is the method COMPAS uses to interact with the user. -A few example COMPAS runs, using a small sample of available program option, are shown below. For detailed information regarding program +A few example COMPAS runs, using a small sample of available program option, are shown below. For detailed information regarding program option use, and a full list of program options available including their default values see :doc:`../Program options/program-options`. @@ -161,4 +161,3 @@ This should produce an output put similar to:: Clock time = 0.0625 CPU seconds Wall time = 0000:00:00 (hhhh:mm:ss) - diff --git a/online-docs/pages/User guide/Running COMPAS/running-via-docker-running.rst b/online-docs/pages/User guide/Running COMPAS/running-via-docker-running.rst index 63a72b220..eac429d84 100644 --- a/online-docs/pages/User guide/Running COMPAS/running-via-docker-running.rst +++ b/online-docs/pages/User guide/Running COMPAS/running-via-docker-running.rst @@ -1,7 +1,7 @@ Running the COMPAS Docker image =============================== -COMPAS can be configured as usual via command line arguments passed to the COMPAS executable or via a ``runSubmit.py`` file in the +COMPAS can be configured as usual via command line arguments passed to the COMPAS executable or via a ``runSubmit.py`` file in the ``Docker`` environment. @@ -21,11 +21,11 @@ To run COMPAS via a ``runSubmit.py`` file, type:: -e COMPAS_INPUT_DIR_PATH=/app/COMPAS/config \ -e COMPAS_LOGS_OUTPUT_DIR_PATH=/app/COMPAS/logs \ teamcompas/compas \ - python3 /app/starts/runSubmit.py + python3 /app/starts/runSubmit.py NOTE: if you decide to execute using ``runSubmit.py``, you will need a ``compasConfigDefault.yaml`` file in the same directory. -This file can be found in the same directory as the ``runSubmit.py``, and contains the default COMPAS choices for stellar and +This file can be found in the same directory as the ``runSubmit.py``, and contains the default COMPAS choices for stellar and binary physics. These choices can be changed by modifying the options available in the ``compasConfigDefault.yaml`` file. NOTE2: when running on a MacOS with the M1 chip that runs on amd64 architecture you likely need to add the line `--platform linux/amd64` to the note above @@ -45,7 +45,7 @@ short for [-i and -t] - provides an interactive terminal\ [#f2]_. mount ```` to ````\ [#f3]_. |br| This time we not only want to read the COMPAS input files (i.e. grid file and/or logfile-definitions file) on the -host from the container, and get the output from COMPAS in the container onto the host machine, we also want to +host from the container, and get the output from COMPAS in the container onto the host machine, we also want to supply a ``runSubmit.py`` to the container from the host machine. **-e VAR_NAME=value** |br| @@ -112,11 +112,11 @@ Environment variables Three new environment variables are used in ``runSubmit.py``. These environment variables are used primarily in the ``Docker`` environment, and are non-breaking changes (i.e. benign to other environments). -``COMPAS_EXECUTABLE_PATH`` specifies where ``runSubmit.py`` looks for the COMPAS executable. This override exists purely for +``COMPAS_EXECUTABLE_PATH`` specifies where ``runSubmit.py`` looks for the COMPAS executable. This override exists purely for ease-of-use from the command line. -`COMPAS_LOGS_OUTPUT_DIR_PATH` specifies where COMPAS output log files are created. The override exists because the mounted directory -(option `-v`) is created before COMPAS runs. COMPAS sees that the directory where it's supposed to put logs already exists, so it +`COMPAS_LOGS_OUTPUT_DIR_PATH` specifies where COMPAS output log files are created. The override exists because the mounted directory +(option `-v`) is created before COMPAS runs. COMPAS sees that the directory where it's supposed to put logs already exists, so it creates a different (i.e. non-mapped) directory for the output log files. `COMPAS_INPUT_DIR_PATH` specifies where input files (such as the ``grid`` file, or ``logfile-definitions`` file are located. @@ -126,7 +126,7 @@ Detached mode ------------- The ``docker run`` examples above use the ``-it`` option. -To run multiple instances of COMPAS, an alternative is to use detached mode (`-d`)\ [#f6]_. In detached mode, containers are run in +To run multiple instances of COMPAS, an alternative is to use detached mode (`-d`)\ [#f6]_. In detached mode, containers are run in the background of the current shell - they do not receive input or display output. Typing:: @@ -155,5 +155,3 @@ to get the container id of interest, then type:: .. [#f4] https://docs.docker.com/engine/reference/run/#env-environment-variables .. [#f5] https://docs.docker.com/engine/reference/run/ .. [#f6] https://docs.docker.com/engine/reference/run/#detached--d - - diff --git a/online-docs/pages/User guide/Running COMPAS/running-via-docker.rst b/online-docs/pages/User guide/Running COMPAS/running-via-docker.rst index 77705dd82..66a8e27e2 100644 --- a/online-docs/pages/User guide/Running COMPAS/running-via-docker.rst +++ b/online-docs/pages/User guide/Running COMPAS/running-via-docker.rst @@ -3,26 +3,26 @@ Running COMPAS via Docker Docker functionality has been added to COMPAS to reduce time and effort required to set up the COMPAS deployment environment. -Instead of having to install and configure several libraries and tools (e.g. ``python``/``pip``, ``numpy``, ``g++``, ``boost``, ``hdf5``) -which can vary considerably between operating systems and existing toolchains, users can instead opt to install ``Docker`` and run COMPAS +Instead of having to install and configure several libraries and tools (e.g. ``python``/``pip``, ``numpy``, ``g++``, ``boost``, ``hdf5``) +which can vary considerably between operating systems and existing toolchains, users can instead opt to install ``Docker`` and run COMPAS with a single command. -This also gives users the ability to run COMPAS on cloud solutions like ``AWS EC2``\ [#f1]_ or ``Google Compute Engine``\ [#f2]_ where hundreds +This also gives users the ability to run COMPAS on cloud solutions like ``AWS EC2``\ [#f1]_ or ``Google Compute Engine``\ [#f2]_ where hundreds of cores can be provisioned without having to manually configure the environment. -``Docker`` works by creating an isolated and standalone environment known as a `container`\ [#f3]_. Containers can be created or destroyed -without affecting the host machine or other containers (containers can still interact with each other and the host machine through mounted +``Docker`` works by creating an isolated and standalone environment known as a `container`\ [#f3]_. Containers can be created or destroyed +without affecting the host machine or other containers (containers can still interact with each other and the host machine through mounted directories/files or exposed ports). -Containers are instances of images. An image is a pre-defined setup/environment that is instantiated when started as a container (containers -are to images what objects are to classes in the OO paradigm)\ [#f4]_. +Containers are instances of images. An image is a pre-defined setup/environment that is instantiated when started as a container (containers +are to images what objects are to classes in the OO paradigm)\ [#f4]_. -Containers are (almost) always run as a ``Linux`` environment. A major benefit of this is the ability to run Linux applications in a ``Windows`` +Containers are (almost) always run as a ``Linux`` environment. A major benefit of this is the ability to run Linux applications in a ``Windows`` or ``macOS`` environment without having to jump through hoops or have a diminished experience. Image definitions can be defined by users (e.g. ``Dockerfiles``); there are also standard images publicly available on ``dockerHub``\ [#f5]_ -This following sections assume ``Docker`` has been installed and is running. For Windows and MacOS users, see +This following sections assume ``Docker`` has been installed and is running. For Windows and MacOS users, see `Docker Desktop `_. @@ -40,4 +40,3 @@ This following sections assume ``Docker`` has been installed and is running. For .. [#f3] https://www.docker.com/resources/what-container .. [#f4] `https://stackoverflow.com/questions/23735149 `_ .. [#f5] https://hub.docker.com/ - diff --git a/online-docs/pages/User guide/Running COMPAS/running-via-python.rst b/online-docs/pages/User guide/Running COMPAS/running-via-python.rst index 920d2e8a0..7d0d3d7f1 100644 --- a/online-docs/pages/User guide/Running COMPAS/running-via-python.rst +++ b/online-docs/pages/User guide/Running COMPAS/running-via-python.rst @@ -1,7 +1,7 @@ Running COMPAS via Python ========================= -A convenient method of managing the many program options provided by COMPAS is to run COMPAS via Python, using a script to manage and +A convenient method of managing the many program options provided by COMPAS is to run COMPAS via Python, using a script to manage and specify the values of the program options. Bundled PyPI executable @@ -27,7 +27,7 @@ or an extracted bundle, set ``COMPAS_EXECUTABLE_PATH`` or ``COMPAS_BUNDLE_ROOT`` An example Python script is provided in the COMPAS suite on github: ``runSubmit.py``. Additionally, the default COMPAS options are specified on ``compasConfigDefault.yaml``. Users should copy the ``runSubmit.py`` and ``runSubmit.py`` scripts and modify the ``compasConfigDefault.yaml`` copy to match their experimental requirements. Refer to the :doc:`Getting started guide <../../Getting started/getting-started>` for more details. To run COMPAS via Python using the ``runSubmit.py`` script provided, set the shell environment variable ``COMPAS_ROOT_DIR`` -to the parent directory of the directory in which the COMPAS executable resides, then type `python /path-to-runSubmit/runSubmit.py`. +to the parent directory of the directory in which the COMPAS executable resides, then type `python /path-to-runSubmit/runSubmit.py`. For example, for Ubuntu Linux, type:: export COMPAS_ROOT_DIR=/path-to-dir @@ -70,7 +70,7 @@ Note that Python prints the Python version, the executes the command to run COMP then runs and produces its usual output. When using Python and a script file (such as `runSubmit.py`) to run COMPAS, care must be taken to specify program option values correctly in the ``compasConfigDefault.yaml`` file. -For example, ranges and sets can be specified for options in the ``compasConfigDefault.yaml`` file, but the range or set parameter must be enclosed in quotes – +For example, ranges and sets can be specified for options in the ``compasConfigDefault.yaml`` file, but the range or set parameter must be enclosed in quotes – otherwise python tries to parse the construct. For example, to specify a set of metallicity values in the Python script file, use:: metallicity = 's[0.001,0.002,0.003,0.007,0.01,0.015,0.02]' diff --git a/online-docs/pages/User guide/docker.rst b/online-docs/pages/User guide/docker.rst index 9c669d86d..7cae95116 100644 --- a/online-docs/pages/User guide/docker.rst +++ b/online-docs/pages/User guide/docker.rst @@ -165,4 +165,4 @@ A separate makefile is required for Docker to: 1. Separate compiled files from source files. 2. Prevent the usage of `-march=native`. -`-march=native` optimizes for the compiling machine's CPU, causing errors when running on a different machine. More information on `-march` can be found `here `__. \ No newline at end of file +`-march=native` optimizes for the compiling machine's CPU, causing errors when running on a different machine. More information on `-march` can be found `here `__. diff --git a/online-docs/pages/User guide/pre-processing.rst b/online-docs/pages/User guide/pre-processing.rst index 39757137b..5e43ee99a 100644 --- a/online-docs/pages/User guide/pre-processing.rst +++ b/online-docs/pages/User guide/pre-processing.rst @@ -171,4 +171,3 @@ In the following example template: - The string beginning with *"# Default: "* and extending to the next *'#'* on line 0011 will not be preserved (but will be replaced by COMPAS). - The string beginning with *"# Options: "* and extending to the next *'#'* (or, in this case because there is no subsequent *'#'*, the end of the line) on line 0011 will not be preserved (but will be replaced by COMPAS). - The comment *"third comment"* on line 0011 will not be preserved - there is no *"# "* prefix, so it will be subsumed by the *"# Options: "* string (which extends from *"# Options: "* to the end of the line). - diff --git a/online-docs/pages/User guide/random-seed.rst b/online-docs/pages/User guide/random-seed.rst index f0107e8f9..a0a3ec310 100644 --- a/online-docs/pages/User guide/random-seed.rst +++ b/online-docs/pages/User guide/random-seed.rst @@ -8,23 +8,23 @@ context. The ``--random-seed`` option can be specified on either, or both, the command line and a :doc:`grid file <./Running COMPAS/running-grid>` line. If the option is not specified on one or the other, the default value is used (see :doc:`./Program options/program-options-list-defaults`). -In general, if the ``--random-seed`` option is specified, the pseudo-random number generator will be seeded using the specified value for -the first star, or binary star, evolved, then for each subsequent star or binary star, the seed value will be incremented by one and the -pseudo-random number generator re-seeded. Seeding the pseudo-random number generator with a known seed for each star, or binary star, +In general, if the ``--random-seed`` option is specified, the pseudo-random number generator will be seeded using the specified value for +the first star, or binary star, evolved, then for each subsequent star or binary star, the seed value will be incremented by one and the +pseudo-random number generator re-seeded. Seeding the pseudo-random number generator with a known seed for each star, or binary star, evolved ensures that the evolution of specific stars, or binary stars, can be reproduced. Consider a single execution of COMPAS effected with the command:: ./COMPAS --random-seed 15 --number-of-systems 100 --metallicity 0.015 -This would evolve 100 binary stars, each with `metallicity = 0.015`, and other initial attributes set to their defaults. The first of the +This would evolve 100 binary stars, each with `metallicity = 0.015`, and other initial attributes set to their defaults. The first of the 100 binary stars will be evolved using the random seed 15, the second 16, the third 17, and so on - each binary star will evolve using a unique random seed. In the example shown above (see Section :doc:`./Program options/program-options-mixing-ranges-sets`), all 104 binary stars would evolve with unique random seed values, ranging from 0 (the default, since the option was not specified on either the command line or in the grid file), to 103. -In both these examples, the random seed was incremented in the context of the command line. In the first example, the random seed was +In both these examples, the random seed was incremented in the context of the command line. In the first example, the random seed was explicitly specified on the command line, and in the second example the random seed defaulted to the command line default. Consider now a single execution of COMPAS, using the grid file ``mygrid.txt``:: @@ -44,28 +44,28 @@ The first binary star evolved is the first line of the grid file. This line does defaults to the command line value. The command line did specify a value for the random seed (12), so that value is used. Since the first line of the grid file is the first binary star evolved, the random seed is not incremented, and the value of 12 is used. -The second binary star evolved is the second line of the grid file. This line does specify the ``--random-seed`` option. Since this is the -first binary star evolved in the context of the random seed specified on the grid file line, the random seed is not incremented, and the value +The second binary star evolved is the second line of the grid file. This line does specify the ``--random-seed`` option. Since this is the +first binary star evolved in the context of the random seed specified on the grid file line, the random seed is not incremented, and the value of 107 is used. The third binary star evolved is the third line of the grid file. This line does specify the ``--random-seed`` option. Since this is the first binary star evolved in the context of the random seed specified on the grid file line, the random seed is not incremented, and the value of 63 is used. -The fourth, fifth, and sixth binary stars evolved are also from the third line of the grid file - a set of four values for eccentricity was +The fourth, fifth, and sixth binary stars evolved are also from the third line of the grid file - a set of four values for eccentricity was specified. Since these are subsequent to the first binary star evolved in the context of the random seed specified on the grid file line, the random seed is incremented, and the values of 64, 65, and 66 are used. -The seventh binary star evolved is the fourth line of the grid file. This line does not specify the ``--random-seed`` option, so the random -seed defaults to the command line value. The command line did specify a value for the random seed (12), so that value is used, but since this -binary star is subsequent to the first binary star evolved in the context of the random seed specified on the command line, the random seed is -incremented. This is the sixth subsequent binary star evolved in the context of the command line (all stars, or binary stars, evolved in a -single execution of COMPAS are evolved in the context of the command line), so the random seed is incremented from 12 to 18 (by 1 for each +The seventh binary star evolved is the fourth line of the grid file. This line does not specify the ``--random-seed`` option, so the random +seed defaults to the command line value. The command line did specify a value for the random seed (12), so that value is used, but since this +binary star is subsequent to the first binary star evolved in the context of the random seed specified on the command line, the random seed is +incremented. This is the sixth subsequent binary star evolved in the context of the command line (all stars, or binary stars, evolved in a +single execution of COMPAS are evolved in the context of the command line), so the random seed is incremented from 12 to 18 (by 1 for each binary star evolved), and the value used for this binary star is 18. -Note that in this example, all binary stars were evolved using a unique random seed. This is because the values specified for the random seeds -via the ``--random-seed`` option were ’well-behaved’. Unfortunately there is no reasonable way to protect the user against specifying duplicate -random seeds – especially since the random seed increments for each star or binary star. If the user chooses to specify multiple grid file lines -with the same random seed, or initial random seeds that would collide with other random seed values and cause duplicates as they increment -through ranges and sets, then there will be duplicate random seeds in the output files. Users should take care when specifying random seeds in +Note that in this example, all binary stars were evolved using a unique random seed. This is because the values specified for the random seeds +via the ``--random-seed`` option were ’well-behaved’. Unfortunately there is no reasonable way to protect the user against specifying duplicate +random seeds – especially since the random seed increments for each star or binary star. If the user chooses to specify multiple grid file lines +with the same random seed, or initial random seeds that would collide with other random seed values and cause duplicates as they increment +through ranges and sets, then there will be duplicate random seeds in the output files. Users should take care when specifying random seeds in grid files via the ``--random-seed`` option. diff --git a/online-docs/pages/User guide/timestep-files.rst b/online-docs/pages/User guide/timestep-files.rst index d0e5e172b..1d48bf897 100644 --- a/online-docs/pages/User guide/timestep-files.rst +++ b/online-docs/pages/User guide/timestep-files.rst @@ -8,7 +8,7 @@ evolve stars/systems instead of calculating a new timestep at each iteration. Th non-comment line of the timesteps file and set the first timestep to that value, then for each iteration during evolution, each subsequent non-blank and non-comment line of the timesteps file is read and the timestep for that iteration set to the value read. -Note that COMPAS will use the timestep exactly as read - the timesteps read from the timesteps file are not quantised by COMPAS, and +Note that COMPAS will use the timestep exactly as read - the timesteps read from the timesteps file are not quantised by COMPAS, and neither will they be truncated to any limit (e.g. ``ABSOLUTE_MINIMUM_TIMESTEP`` from ``constants.h``) or multiplied by any timestep multiplier set by the ``timestep-multiplier`` option. Furthermore, no check will be made after the timestep is taken to limit the radial expansion of the star being evolved. @@ -36,7 +36,7 @@ plain text - COMPAS will read the plain text and convert it to a floating-point # timesteps file for my experiment... # description of file here - + 0.201713464000000 0.201935435000000 @@ -60,4 +60,3 @@ plain text - COMPAS will read the plain text and convert it to a floating-point COMPAS imposes a hard limit of ``1,000,000`` timesteps in a timesteps file. - diff --git a/online-docs/pages/contact-us.rst b/online-docs/pages/contact-us.rst index e75e5d38f..d29833918 100644 --- a/online-docs/pages/contact-us.rst +++ b/online-docs/pages/contact-us.rst @@ -1,6 +1,5 @@ Contact us ========== -Join the `COMPAS User Google Group `__ to engage in discussions with +Join the `COMPAS User Google Group `__ to engage in discussions with COMPAS users and developers, or email your queries to compas-user@googlegroups.com. - diff --git a/online-docs/pages/how-to-cite.rst b/online-docs/pages/how-to-cite.rst index 30cef9ed4..9a354fd78 100644 --- a/online-docs/pages/how-to-cite.rst +++ b/online-docs/pages/how-to-cite.rst @@ -2,16 +2,16 @@ Citing COMPAS ------------- If you use this code or parts of this code for results presented in a scientific publication, we would greatly appreciate you sending -us your paper reference and making your input settings and output data publicly available by uploading it to the COMPAS Zenodo community. +us your paper reference and making your input settings and output data publicly available by uploading it to the COMPAS Zenodo community. -Please also cite: +Please also cite: .. _cite-compas: Team COMPAS: J. Riley `et al.` [:cite:year:`compas2021`]. |_| |_| |_| |_| |_| |_| :download:`Bibtex citation <../COMPAS-2021methodsPaper.bib>` - + Team COMPAS: I. Mandel `et al.` [:cite:year:`compas2025`]. |_| |_| |_| |_| |_| |_| :download:`Bibtex citation <../COMPAS-2025methodsPaper.bib>` - + |br| We would also greatly appreciate an acknowledgement of the form: @@ -33,4 +33,3 @@ If using the COMPAS model of (pulsational) pair instability supernova, please ci If evolving pulsar spins and magnetic fields with COMPAS, please cite :cite:t:`Chattopadhyay2020`. If you use the COMPAS model of chemically homogeneous evolution, please cite :cite:t:`Riley2021`. - diff --git a/online-docs/pages/references.rst b/online-docs/pages/references.rst index a14c868b9..1bc06e3df 100644 --- a/online-docs/pages/references.rst +++ b/online-docs/pages/references.rst @@ -3,4 +3,3 @@ References .. bibliography:: :all: - diff --git a/online-docs/pages/whats-new.rst b/online-docs/pages/whats-new.rst index 04887c1c5..51530de0e 100644 --- a/online-docs/pages/whats-new.rst +++ b/online-docs/pages/whats-new.rst @@ -29,17 +29,17 @@ Following is a brief list of important updates to the COMPAS code. A complete r * Added KLENCKI_LINEAR AM loss, which is linear in the specific AM gamma instead of the orbital separation (as in MACLEOD_LINEAR). -This is based on the variations explored in Klencki+ 2025, and is very similar in construction to the MACLEOD_LINEAR option, +This is based on the variations explored in Klencki+ 2025, and is very similar in construction to the MACLEOD_LINEAR option, with both requiring an interpolation fraction f set by the user. Therefore, the following options are deprecated: - * ``--mass-transfer-jloss-macleod-linear-fraction-degen`` in favor of ``--mass-transfer-jloss-linear-fraction-degen`` - * ``--mass-transfer-jloss-macleod-linear-fraction-non-degen`` in favor of ``--mass-transfer-jloss-linear-fraction-non-degen`` + * ``--mass-transfer-jloss-macleod-linear-fraction-degen`` in favor of ``--mass-transfer-jloss-linear-fraction-degen`` + * ``--mass-transfer-jloss-macleod-linear-fraction-non-degen`` in favor of ``--mass-transfer-jloss-linear-fraction-non-degen`` and the replacement options apply for both MACLEOD_LINEAR and KLENCKI_LINEAR. **03.24.00 August 19, 2025** -* Updated Maltsev remnant mass prescription to include the 3 variants described in Willcox+ 2025 (bimodality paper). +* Updated Maltsev remnant mass prescription to include the 3 variants described in Willcox+ 2025 (bimodality paper). * New related options `--maltsev-fallback` which takes a float between 0 and 1 to specify the fallback fraction, and `--maltsev-mode` with choices `'OPTIMISTIC','PESSIMISTIC','BALANCED'` for the extrapolation prescription (see Willcox+ 2025b) @@ -90,7 +90,7 @@ disabled with ``--mass-loss-prescription zero`` instead of ``use-mass-loss false **03.20.01 May 26, 2025** -* Updates to mass accretion for massive ONe WD +* Updates to mass accretion for massive ONe WD * Changed white dwarf mass-radius relation to use expression from Eggleton 1986, suitable for extremely low-mass white dwarfs. **03.20.00 May 25, 2025** @@ -121,8 +121,8 @@ New command line option: **03.17.03 Apr 14, 2025** -* Neutron stars are now labelled as ``RecycledNS`` when undergoing mass transfer through common envelope (when ``--neutron-star-accretion-in-ce`` is not set to ``ZERO``). -* Removed output option ``RLOF_ONTO_NS`` as it can be retrieved from existing RLOF output info. +* Neutron stars are now labelled as ``RecycledNS`` when undergoing mass transfer through common envelope (when ``--neutron-star-accretion-in-ce`` is not set to ``ZERO``). +* Removed output option ``RLOF_ONTO_NS`` as it can be retrieved from existing RLOF output info. **03.17.00 Mar 22, 2025** @@ -151,7 +151,7 @@ Changes to the treatment of Neutron Star evolution. New command line options: * ``--neutron-star-accretion-in-ce`` to determine how a NS accretes mass in a common envelope -* ``--pulsar-birth-magnetic-field-distribution-mean`` and ``--pulsar-birth-magnetic-field-distribution-sigma`` to determine the birth distribution of the pulsar magnetic field (only relevant when the ``--pulsar-birth-magnetic-field-distribution`` option value is ``NORMAL`` or ``LOGNORMAL``) +* ``--pulsar-birth-magnetic-field-distribution-mean`` and ``--pulsar-birth-magnetic-field-distribution-sigma`` to determine the birth distribution of the pulsar magnetic field (only relevant when the ``--pulsar-birth-magnetic-field-distribution`` option value is ``NORMAL`` or ``LOGNORMAL``) * ``--pulsar-birth-spin-period-distribution-mean`` and ``--pulsar-birth-spin-period-distribution-sigma`` to determine the birth distribution of the pulsar period (only relevant when the ``--pulsar-birth-spin-period-distribution`` option value is ```NORMAL`` or ``LOGNORMAL``) Changed command line option values and defaults: @@ -163,7 +163,7 @@ Changed command line option values and defaults: Changes to the NS-related values in log files: -* The pulsar magnetic field strength is now recorded in ``Gauss`` (was ``Tesla``) +* The pulsar magnetic field strength is now recorded in ``Gauss`` (was ``Tesla``) * The pulsar spin down rate now tracks the pulsar spin period derivative (was spin frequency derivative). * The SSE/BSE_Pulsar_Evolution file default record now includes the pulsar spin period (s) instead of spin frequency. Spin frequency is still tracked and can be added using the ``logfile-definitions`` option * The period of non-spinning neutron stars is now reported as infinity instead of zero @@ -206,7 +206,7 @@ Switchlog merger records come in pairs (one for each star) so that the stellar t **03.09.00 Nov 28, 2024** -Improved nuclear timescale mass transfer: the nuclear timescale mass transfer rate is now set by the requirement that the star +Improved nuclear timescale mass transfer: the nuclear timescale mass transfer rate is now set by the requirement that the star ends the time step just filling its Roche lobe. Fixed several significant mass-transfer issues, such as accretors not gaining mass appropriately and failures in the root solver for fitting the star into the Roche lobe that were leading to artificial common envelopes and mergers. @@ -215,8 +215,8 @@ in the root solver for fitting the star into the Roche lobe that were leading to Updated implementation of the mass transfer stability critical mass ratio tables from the team of Hongwei Ge. We now use all the most up to do date tables they've produced (public or otherwise) from Papers I-V, including -variations for adiabatic and isentropic treatments, variable accretion efficiency, and two different metallicities, -as well as for He stars (albeit only for adiabatic, fully conservative, solar metallicity stars). +variations for adiabatic and isentropic treatments, variable accretion efficiency, and two different metallicities, +as well as for He stars (albeit only for adiabatic, fully conservative, solar metallicity stars). **03.08.00 Nov 18, 2024** @@ -247,7 +247,7 @@ Incorporated the Maltsev+ (2024) prescription for supernova remnant masses. Added new functionality to improve modelling of chemically homogeneous evolution (CHE). The default behaviour remains unchanged. * New command line option `--enable-rotationally-enhanced-mass-loss` to enable rotationally enhanced mass loss following Langer (1998) -* New command line option `--enhance-CHE-lifetimes-luminosities` to enhance CHE lifetimes and luminosities following detailed models from Szecsi et al. (2015) +* New command line option `--enhance-CHE-lifetimes-luminosities` to enhance CHE lifetimes and luminosities following detailed models from Szecsi et al. (2015) * New command line option `--scale-CHE-mass-loss-with-surface-helium-abundance` to switch from OB to WR mass loss for CH stars towards the end of the main sequence * New command line option `--scale-terminal-wind-velocity-with-metallicity-power` to scale the terminal wind velocity with the metallicity @@ -256,7 +256,7 @@ Added new functionality to improve modelling of chemically homogeneous evolution Added recording of ``MASS_TRANSFER_TIMESCALE (NONE, NUCLEAR, THERMAL, CE)``. Now continuing evolution on mergers at birth (stars touching) if ``--resolve-main-sequence-merger``. Changed Sabhahit+ 2023 VMS winds to default to current OB wind prescription if Gamma threshold is not met -Correct the behaviour of the second stage of 2-stage CE to first transfer mass from the star that initiated RLOF; +Correct the behaviour of the second stage of 2-stage CE to first transfer mass from the star that initiated RLOF; now ensuring that the accretor's mass is correctly adjusted Update the fits for the convective envelope mass and radial extent to ensure smooth behaviour Updated treatment of 2-stage common envelope for intermediate mass stars, to smoothly reduce from Hirai & Mandel above 8 solar masses @@ -265,14 +265,14 @@ to classical "full envelope" removal for stars below 2 solar masses. **03.01.06 Aug 30, 2024** Added functionality to allow users to specify if WD-binaries should be included in the BSE DCO file via new option ``--include-WD-binaries-as-DCO``. -When enabled, ``--include-WD-binaries-as-DCO`` changes the definition of "Double Compact Object" from a binary comprised of any two of +When enabled, ``--include-WD-binaries-as-DCO`` changes the definition of "Double Compact Object" from a binary comprised of any two of {Neutron Star, Black Hole} to a binary star comprised of any two of {Helium White Dwarf, Carbon-Oxygen White Dwarf, Oxygen-Neon White Dwarf, Neutron Star, Black Hole}. The default value for the new option is FALSE. **03.01.04 Aug 28, 2024** -* New option `'HENDRIKS'` for `--pulsational-pair-instability-prescription` implementing the prescription for pulsational pair instability mass-loss from Hendricks et al. 2023 (https://arxiv.org/abs/2309.09339). +* New option `'HENDRIKS'` for `--pulsational-pair-instability-prescription` implementing the prescription for pulsational pair instability mass-loss from Hendricks et al. 2023 (https://arxiv.org/abs/2309.09339). * New command line option `--PPI-CO-Core-Shift-Hendriks` for use with the above prescription (see Hendriks+ for an explanation) **03.01.00 Aug 24, 2024** @@ -294,8 +294,8 @@ code effectively ignored these errors (for a detailed explanation of why this wa In COMPAS version 03.00.00 the error handling philosophy has changed, and more coherent and robust error-handling code implemented. The new error-handling philosophy is to stop evolution of a star or binary if an error occurs (including, optionally by a program option, floating-point errors), and record in the (SSE/BSE) system -parameters file the fact that an error occurred, and an error number identifying the error that occurred. This way users can check the system parameters file -at the completion of a run for the disposition of a star or binary and, if the evolution of that star or binary was stopped because an error occurred, the +parameters file the fact that an error occurred, and an error number identifying the error that occurred. This way users can check the system parameters file +at the completion of a run for the disposition of a star or binary and, if the evolution of that star or binary was stopped because an error occurred, the actual error that occurred. Users should refer to the Error Handling documentation in the User Guide (See :doc:`./User guide/Handling errors/handling-errors`). @@ -312,7 +312,7 @@ naming convention we are trying to maintain. The program options deprecated, and #. `--WR-mass-loss` , replaced by `--WR-mass-loss-prescription` (to be consistent with other 'prescription'- type options) #. `--kick-direction` , replaced by `--kick-direction-distribution` (to be consistent with other 'distribution'-type options) #. `--mass-transfer-thermal-limit-accretor`, replaced by `--mass-transfer-thermal-limit-accretor-multiplier` (for consistency and to better describe the option) -#. `--black-hole-kicks` , replaced by `--black-hole-kicks-mode` (for consistency and to better describe the option) +#. `--black-hole-kicks` , replaced by `--black-hole-kicks-mode` (for consistency and to better describe the option) #. `--chemically-homogeneous-evolution` , replaced by `--chemically-homogeneous-evolution-mode` (for consistency and to better describe the option) Deprecated program options will still be available, in tandem with their replacements, for some time (at least six months from the release date of v03.00.00), @@ -362,7 +362,7 @@ Finally, for program option `--mt-rejuvenation-prescription`, the value `NONE` w **02.44.00 Apr 04, 2024** -* Added 'realistic' tides option, which implements dynamical and equilibrium tides using the formalism described in Kapil et al. (2024). +* Added 'realistic' tides option, which implements dynamical and equilibrium tides using the formalism described in Kapil et al. (2024). * Functionality enabled with new option ``--tides-prescription KAPIL2024`` (default is ``NONE``). * Removed old option ``--enable-tides``, which can now be enabled by setting ``--tides-prescription PERFECT``. @@ -407,12 +407,12 @@ Finally, for program option `--mt-rejuvenation-prescription`, the value `NONE` w **02.37.00 Mar 26, 2023** -* Added functionality for WDs to accrete in different regimes. -* New supernova types: SNIA (Type Ia), and HeSD (Helium shell detonation). +* Added functionality for WDs to accrete in different regimes. +* New supernova types: SNIA (Type Ia), and HeSD (Helium shell detonation). **02.36.00 Mar 15, 2023** -* Added functionality to automatically create COMPAS YAML file - adds two new options: ``--create-YAML-file`` and ``YAML-template``. See documentation for details. +* Added functionality to automatically create COMPAS YAML file - adds two new options: ``--create-YAML-file`` and ``YAML-template``. See documentation for details. **Note:** From this release, the default COMPAS YAML file (``compasConfigDefault.yaml``), as distributed, has all COMPAS option entries commented so that the COMPAS default value for the option is used by default. To use a value other than the COMPAS default value, users must uncomment the entry and change the option value to the desired value. @@ -426,7 +426,7 @@ Added mass accretion prescription during CE ``CHEVALIER`` for option ``--common- * Changed header string for ``BINARY_PROPERTY::ROCHE_LOBE_RADIUS_1`` from ``'RocheLobe(1)|a'`` to ``'RocheLobe(1)'`` - same change made for ``BINARY_PROPERTY::ROCHE_LOBE_RADIUS_2``. * Removed ``BINARY_PROPERTY::STAR_TO_ROCHE_LOBE_RADIUS_RATIO_1`` (header string ``'Radius(1)|RL'``) and ``BINARY_PROPERTY::STAR_TO_ROCHE_LOBE_RADIUS_RATIO_2`` (header string ``'Radius(2)|RL'``) from ``BSE_DETAILED_OUTPUT_REC`` (BSE detailed output file default record). Note that both variables are still selectable for output via the logfile-definitions file. - **Note:** These changes will affect post-processing code that consumes the affected variables - users should check their post-processing code. + **Note:** These changes will affect post-processing code that consumes the affected variables - users should check their post-processing code. **02.35.00 Dec 8, 2022** @@ -544,4 +544,3 @@ Added mass accretion prescription during CE ``CHEVALIER`` for option ``--common- * Added Nanjing lambda option to switch between calculation using rejuvenated mass and true birth mass * Added Nanjing lambda mass and metallicity interpolation options * No change in default behaviour - diff --git a/paper.bib b/paper.bib index fc2d27eaa..331cb29ae 100644 --- a/paper.bib +++ b/paper.bib @@ -360,7 +360,3 @@ @ARTICLE{Howitt:2020 adsurl = {https://ui.adsabs.harvard.edu/abs/2020MNRAS.492.3229H}, adsnote = {Provided by the SAO/NASA Astrophysics Data System} } - - - - diff --git a/py_tests/test_binned_integrator.py b/py_tests/test_binned_integrator.py index 39d04bcb6..cec62fa6f 100644 --- a/py_tests/test_binned_integrator.py +++ b/py_tests/test_binned_integrator.py @@ -65,11 +65,3 @@ def test_binned_cosmic_integration(fake_compas_output, test_archive_dir,): fig = detection_matrix.plot() fig.suptitle("Binning during FastCosmicIntegrator") fig.savefig(os.path.join(test_archive_dir, "binned_detection_matrix_plot_v2.png")) - - - - - - - - diff --git a/py_tests/test_data/README.md b/py_tests/test_data/README.md index 156860ac5..8578ecfd4 100644 --- a/py_tests/test_data/README.md +++ b/py_tests/test_data/README.md @@ -9,4 +9,4 @@ compas_run_submit fiducial_bbh_configs.yaml ``` The pytest cache is _not_ cleared locally (but will be cleared on the CI server). -Hence, this may need to be rerun locally if changes are made to COMPAS. \ No newline at end of file +Hence, this may need to be rerun locally if changes are made to COMPAS. diff --git a/py_tests/test_stroopwafel_interface.py b/py_tests/test_stroopwafel_interface.py index 9ff5440a5..60f29e8c3 100644 --- a/py_tests/test_stroopwafel_interface.py +++ b/py_tests/test_stroopwafel_interface.py @@ -4,4 +4,4 @@ @pytest.mark.skip("Not implemented yet") def test_stroopwafel_config(self): self.fail("Not implemented yet") - # TODO: get help with this -- need to make the stroopwafel interface modular \ No newline at end of file + # TODO: get help with this -- need to make the stroopwafel interface modular diff --git a/py_tests/test_total_mass_evolved_per_z.py b/py_tests/test_total_mass_evolved_per_z.py index 3d9ec1aaf..19c85f72f 100644 --- a/py_tests/test_total_mass_evolved_per_z.py +++ b/py_tests/test_total_mass_evolved_per_z.py @@ -65,7 +65,7 @@ def test_analytical_vs_numerical_star_forming_mass_per_binary(fake_compas_output analytical = analytical_star_forming_mass_per_binary_using_kroupa_imf(m1_min, m1_max, m2_min, fbin) numerical = star_forming_mass_per_binary(fake_compas_output, m1_min, m1_max, m2_min, fbin) - + assert numerical > 0 assert analytical > 0 diff --git a/py_tests/test_values.py b/py_tests/test_values.py index 3a64f7590..97a1a471c 100644 --- a/py_tests/test_values.py +++ b/py_tests/test_values.py @@ -3,4 +3,4 @@ M1_MIN = 5 M1_MAX = 100 M2_MIN = 0.1 -F_BIN = None # None = variable f_bin, otherwise fixed value \ No newline at end of file +F_BIN = None # None = variable f_bin, otherwise fixed value diff --git a/src/BH.cpp b/src/BH.cpp index 57550e8cf..b47b06c7f 100755 --- a/src/BH.cpp +++ b/src/BH.cpp @@ -22,7 +22,7 @@ double BH::CalculateNeutrinoMassLoss_Static(const double p_BaryonicMass) { case NEUTRINO_MASS_LOSS_PRESCRIPTION::FIXED_MASS: // FIXED MASS gravitationalMass = p_BaryonicMass - OPTIONS->NeutrinoMassLossValueBH(); break; - + default: // unknown prescription // the only way this can happen is if someone added a NEUTRINO_MASS_LOSS_PRESCRIPTION // and it isn't accounted for in this code. We should not default here, with or without a warning. @@ -88,7 +88,7 @@ DBL_DBL_DBL BH::CalculateCoreCollapseSNParams_Static(const double p_Mass) { case BLACK_HOLE_KICKS_MODE::REDUCED : vK = p_vK * NEUTRON_STAR_MASS / p_BlackHoleMass; break; // kick is reduced by the ratio of the neutron star mass to the black hole mass case BLACK_HOLE_KICKS_MODE::FALLBACK: vK = p_vK * (1.0 - p_FallbackFraction); break; // using the so-called 'fallback' mode for BH kicks - + default: // unknown mode // the only way this can happen is if someone added a BLACK_HOLE_KICKS_MODE // and it isn't accounted for in this code. We should not default here, with or without a warning. diff --git a/src/BH.h b/src/BH.h index ee90b7a05..4078848ec 100755 --- a/src/BH.h +++ b/src/BH.h @@ -12,39 +12,39 @@ class BaseStar; class NS; class BH: virtual public BaseStar, public Remnants { - + public: - + BH() { m_StellarType = STELLAR_TYPE::BLACK_HOLE; }; - + BH(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), Remnants(p_BaseStar) { m_StellarType = STELLAR_TYPE::BLACK_HOLE; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } - + BH* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { BH* clone = new BH(*this, p_Initialise); clone->SetPersistence(p_Persistence); return clone; } - + static BH* Clone(BH& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { BH* clone = new BH(p_Star, p_Initialise); clone->SetPersistence(p_Persistence); return clone; } - + // member functions - alphabetically static DBL_DBL_DBL CalculateCoreCollapseSNParams_Static(const double p_Mass); static double CalculateLuminosityOnPhase_Static() { return 1.0E-10; } // Hurley et al. 2000, eq 96 static double CalculateNeutrinoMassLoss_Static(const double p_BaryonicMass); static double CalculateRadiusOnPhase_Static(const double p_Mass) { return 4.24E-6 * p_Mass; } // Schwarzschild radius of Black Hole - Hurley et al. 2000, eq 94 - + static double ReweightSupernovaKickByMass_Static(const double p_vK, const double p_FallbackFraction, const double p_BlackHoleMass); - - + + protected: - + void Initialise() { // set internal properties to zero to avoid meaningless values @@ -53,11 +53,11 @@ class BH: virtual public BaseStar, public Remnants { m_HeCoreMass = 0.0; m_CoreMass = 0.0; m_Mass0 = 0.0; - + EvolveOnPhase(0.0); } - - + + // member functions - alphabetically double CalculateConvergedMassStepZetaNuclear() const { return 0.0; } double CalculateEddingtonCriticalRate() const { return 2.6E-8 * m_Mass * MYR_TO_YEAR; } // E.g., Marchant+, 2017, Eq. 3, assuming accretion efficiency of 10% @@ -66,7 +66,7 @@ class BH: virtual public BaseStar, public Remnants { double CalculateMomentOfInertia() const { return (2.0 / 5.0) * m_Mass * m_Radius * m_Radius; } double CalculateRadiusOnPhase() const { return CalculateRadiusOnPhase_Static(m_Mass); } // Use class member variables - returns radius in Rsol double CalculateRadiusOnPhase(double p_Mass, double p_Luminosity) const { return CalculateRadiusOnPhase(); } // not a meaningful calculation for BH, ignore arguments - + }; #endif // __BH_h__ diff --git a/src/BaseBinaryStar.cpp b/src/BaseBinaryStar.cpp index 83b551bf2..c1f849adc 100644 --- a/src/BaseBinaryStar.cpp +++ b/src/BaseBinaryStar.cpp @@ -11,7 +11,7 @@ * * Parameter p_Seed is the seed for the random number generator - see main.cpp for an * explanation of how p_Seed is derived. - * + * * Parameter p_Id is the id of the binary - effectively an index - which is added as * a suffix to the filenames of any detailed output files created. */ @@ -23,7 +23,7 @@ BaseBinaryStar::BaseBinaryStar(const unsigned long int p_Seed, const long int p_ ERROR error = ERROR::NONE; SetInitialValues(p_Seed, p_Id); // start construction of the binary - + // generate initial properties of binary // check that the constituent stars are not touching // also check m2 > m2min @@ -43,13 +43,13 @@ BaseBinaryStar::BaseBinaryStar(const unsigned long int p_Seed, const long int p_ // Single stars are provided with a kick structure that specifies the values of the random // number to be used to generate to kick magnitude, and the actual kick magnitude specified - // by the user via program option --kick-magnitude + // by the user via program option --kick-magnitude // // See typedefs.h for the kick structure. // // We can't just pick up the values of the options inside Basestar.cpp because the constituents - // of binaries get different values, so use different options. The Basestar.cpp code doesn't - // know if the star is a single star (SSE) or a constituent of a binary (BSE) - it only knows + // of binaries get different values, so use different options. The Basestar.cpp code doesn't + // know if the star is a single star (SSE) or a constituent of a binary (BSE) - it only knows // that it is a star - so we have to setup the kick structures here for each constituent star. KickParameters kickParameters1; @@ -89,30 +89,30 @@ BaseBinaryStar::BaseBinaryStar(const unsigned long int p_Seed, const long int p_ double mass1 = !OPTIONS->OptionDefaulted("initial-mass-1") // user specified primary mass? ? OPTIONS->InitialMass1() // yes, use it - : utils::SampleInitialMass(OPTIONS->InitialMassFunction(), // no - sample it - OPTIONS->InitialMassFunctionMax(), - OPTIONS->InitialMassFunctionMin(), + : utils::SampleInitialMass(OPTIONS->InitialMassFunction(), // no - sample it + OPTIONS->InitialMassFunctionMax(), + OPTIONS->InitialMassFunctionMin(), OPTIONS->InitialMassFunctionPower()); - double mass2 = 0.0; + double mass2 = 0.0; if (!OPTIONS->OptionDefaulted("initial-mass-2")) { // user specified secondary mass? mass2 = OPTIONS->InitialMass2(); // yes, use it } else { // no - sample it - // first, determine mass ratio q + // first, determine mass ratio q double q = !OPTIONS->OptionDefaulted("mass-ratio") // user specified mass ratio? ? OPTIONS->MassRatio() // yes, use it : utils::SampleMassRatio(OPTIONS->MassRatioDistribution(), // no - sample it - OPTIONS->MassRatioDistributionMax(), + OPTIONS->MassRatioDistributionMax(), OPTIONS->MassRatioDistributionMin()); - mass2 = mass1 * q; // calculate mass2 using mass ratio + mass2 = mass1 * q; // calculate mass2 using mass ratio } double metallicity = !OPTIONS->OptionDefaulted("metallicity") // user specified metallicity? ? OPTIONS->Metallicity() // yes, use it : utils::SampleMetallicity(OPTIONS->MetallicityDistribution(), // no, sample it - OPTIONS->MetallicityDistributionMax(), + OPTIONS->MetallicityDistributionMax(), OPTIONS->MetallicityDistributionMin()); if (!OPTIONS->OptionDefaulted("semi-major-axis")) { // user specified semi-major axis? @@ -127,19 +127,19 @@ BaseBinaryStar::BaseBinaryStar(const unsigned long int p_Seed, const long int p_ OPTIONS->OptionDefaulted("orbital-period-distribution" )) { // user did not specify oprbital period distribution ERROR error; std::tie(error, m_SemiMajorAxis) = utils::SampleSemiMajorAxis(OPTIONS->SemiMajorAxisDistribution(), // yes, sample from semi-major axis distribution (might be default), assumes Opik's law (-1.0 exponent) - OPTIONS->SemiMajorAxisDistributionMax(), + OPTIONS->SemiMajorAxisDistributionMax(), OPTIONS->SemiMajorAxisDistributionMin(), OPIKS_LAW_SEMIMAJOR_AXIS_DISTRIBUTION_POWER, - OPTIONS->OrbitalPeriodDistributionMax(), - OPTIONS->OrbitalPeriodDistributionMin(), - mass1, + OPTIONS->OrbitalPeriodDistributionMax(), + OPTIONS->OrbitalPeriodDistributionMin(), + mass1, mass2); THROW_ERROR_IF(error == ERROR::UNKNOWN_SEMI_MAJOR_AXIS_DISTRIBUTION, error, "Sampling semi-major axis"); // throw error if necessary SHOW_WARN_IF(error == ERROR::NO_CONVERGENCE, error, "Sampling semi-major axis"); // show warning if necessary } else { // no - sample from orbital period distribution - double orbitalPeriod = utils::SampleOrbitalPeriod(OPTIONS->OrbitalPeriodDistribution(), - OPTIONS->OrbitalPeriodDistributionMax(), + double orbitalPeriod = utils::SampleOrbitalPeriod(OPTIONS->OrbitalPeriodDistribution(), + OPTIONS->OrbitalPeriodDistributionMax(), OPTIONS->OrbitalPeriodDistributionMin()); m_SemiMajorAxis = utils::ConvertPeriodInDaysToSemiMajorAxisInAU(mass1, mass2, orbitalPeriod); // calculate semi-major axis from period @@ -150,7 +150,7 @@ BaseBinaryStar::BaseBinaryStar(const unsigned long int p_Seed, const long int p_ m_Eccentricity = !OPTIONS->OptionDefaulted("eccentricity") // user specified eccentricity? ? OPTIONS->Eccentricity() // yes, use it : utils::SampleEccentricity(OPTIONS->EccentricityDistribution(), // no, sample it - OPTIONS->EccentricityDistributionMax(), + OPTIONS->EccentricityDistributionMax(), OPTIONS->EccentricityDistributionMin()); // binary star contains two instances of star to hold masses, radii and luminosities. @@ -171,12 +171,12 @@ BaseBinaryStar::BaseBinaryStar(const unsigned long int p_Seed, const long int p_ rlof = utils::Compare(starToRocheLobeRadiusRatio1, 1.0) > 0 || utils::Compare(starToRocheLobeRadiusRatio2, 1.0) > 0; // either star overflowing Roche Lobe? - if (rlof && OPTIONS->AllowRLOFAtBirth()) { // over-contact binaries at birth allowed? + if (rlof && OPTIONS->AllowRLOFAtBirth()) { // over-contact binaries at birth allowed? m_Flags.massesEquilibratedAtBirth = true; // record that we've equilbrated at birth mass1 = (mass1 + mass2) / 2.0; // equilibrate masses mass2 = mass1; // ditto - + double M = mass1 + mass2; double m1m2 = mass1 * mass2; m_SemiMajorAxis *= 16.0 * m1m2 * m1m2 / (M * M * M * M) * (1.0 - (m_Eccentricity * m_Eccentricity)); // circularise; conserve angular momentum @@ -193,7 +193,7 @@ BaseBinaryStar::BaseBinaryStar(const unsigned long int p_Seed, const long int p_ m_Star2 = !OPTIONS->OptionDefaulted("rotational-frequency-2") // user specified secondary rotational frequency? ? new BinaryConstituentStar(m_RandomSeed, mass2, metallicity, kickParameters2, OPTIONS->RotationalFrequency2() * SECONDS_IN_YEAR) // yes - use it (convert from Hz to cycles per year - see BaseStar::CalculateZAMSAngularFrequency()) : new BinaryConstituentStar(m_RandomSeed, mass2, metallicity, kickParameters2); // no - let it be calculated - + starToRocheLobeRadiusRatio1 = (m_Star1->Radius() * RSOL_TO_AU) / (m_SemiMajorAxis * CalculateRocheLobeRadius_Static(mass1, mass2)); //eccentricity already zero starToRocheLobeRadiusRatio2 = (m_Star2->Radius() * RSOL_TO_AU) / (m_SemiMajorAxis * CalculateRocheLobeRadius_Static(mass2, mass1)); } @@ -289,7 +289,7 @@ void BaseBinaryStar::SetRemainingValues() { m_TotalAngularMomentum = CalculateAngularMomentum(m_SemiMajorAxis, m_Eccentricity, m_Star1->Mass(), m_Star2->Mass(), m_Star1->Omega(), m_Star2->Omega(), momentOfInertia1, momentOfInertia2); m_TotalAngularMomentumPrev = m_TotalAngularMomentum; - + if (OPTIONS->CHEMode() != CHE_MODE::NONE) { // CHE enabled? // CHE enabled; we will assume that the rotational frequency equals the orbital frequency to check for CHE, and, if so, set the frequency to that frequency [generally, any realistic tides on the not-evolved pre MS track should be sufficient to yield a tidally locked binary in this case] @@ -326,7 +326,7 @@ void BaseBinaryStar::SetRemainingValues() { else { if (m_Star2->StellarType() != STELLAR_TYPE::MS_GT_07) (void)m_Star2->SwitchTo(STELLAR_TYPE::MS_GT_07, true); // MS > 0.7 Msol - switch if necessary } - + } double totalMass = m_Star1->Mass() + m_Star2->Mass(); @@ -398,7 +398,7 @@ void BaseBinaryStar::SetRemainingValues() { m_SynchronizationTimescale1 = DEFAULT_INITIAL_DOUBLE_VALUE; m_SynchronizationTimescale2 = DEFAULT_INITIAL_DOUBLE_VALUE; m_CircularizationTimescale = DEFAULT_INITIAL_DOUBLE_VALUE; - + // RLOF details m_RLOFDetails.experiencedRLOF = false; m_RLOFDetails.immediateRLOFPostCEE = false; @@ -423,11 +423,11 @@ void BaseBinaryStar::SetRemainingValues() { m_RLOFDetails.props1.semiMajorAxis = DEFAULT_INITIAL_DOUBLE_VALUE; m_RLOFDetails.props1.eccentricity = DEFAULT_INITIAL_DOUBLE_VALUE; - + m_RLOFDetails.props1.eventCounter = DEFAULT_INITIAL_ULONGINT_VALUE; m_RLOFDetails.props1.time = DEFAULT_INITIAL_DOUBLE_VALUE; - + m_RLOFDetails.props1.accretionEfficiency = DEFAULT_INITIAL_DOUBLE_VALUE; m_RLOFDetails.props1.massLossRateFromDonor = DEFAULT_INITIAL_DOUBLE_VALUE; @@ -454,11 +454,11 @@ void BaseBinaryStar::SetRemainingValues() { m_RLOFDetails.props2.semiMajorAxis = DEFAULT_INITIAL_DOUBLE_VALUE; m_RLOFDetails.props2.eccentricity = DEFAULT_INITIAL_DOUBLE_VALUE; - + m_RLOFDetails.props2.eventCounter = DEFAULT_INITIAL_ULONGINT_VALUE; m_RLOFDetails.props2.time = DEFAULT_INITIAL_DOUBLE_VALUE; - + m_RLOFDetails.props2.accretionEfficiency = DEFAULT_INITIAL_DOUBLE_VALUE; m_RLOFDetails.props2.massLossRateFromDonor = DEFAULT_INITIAL_DOUBLE_VALUE; @@ -650,7 +650,7 @@ COMPAS_VARIABLE BaseBinaryStar::BinaryPropertyValue(const T_ANY_PROPERTY p_Prope case BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_10_2: std::tie(value, std::ignore, std::ignore, std::ignore) = ImKnm2_tidal(); break; case BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_12_2: std::tie(std::ignore, value, std::ignore, std::ignore) = ImKnm2_tidal(); break; case BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_22_2: std::tie(std::ignore, std::ignore, value, std::ignore) = ImKnm2_tidal(); break; - case BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_32_2: std::tie(std::ignore, std::ignore, std::ignore, value) = ImKnm2_tidal(); break; + case BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_32_2: std::tie(std::ignore, std::ignore, std::ignore, value) = ImKnm2_tidal(); break; case BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_10_EQ_1: std::tie(value, std::ignore, std::ignore, std::ignore) = ImKnm1_tidal_eq(); break; case BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_12_EQ_1: std::tie(std::ignore, value, std::ignore, std::ignore) = ImKnm1_tidal_eq(); break; case BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_22_EQ_1: std::tie(std::ignore, std::ignore, value, std::ignore) = ImKnm1_tidal_eq(); break; @@ -680,7 +680,7 @@ COMPAS_VARIABLE BaseBinaryStar::BinaryPropertyValue(const T_ANY_PROPERTY p_Prope // accounted for in this code. We should not default here, with or without a warning - this is a // code defect, so we flag it as an error and that will result in termination of the evolution of // the binary. - // The correct fix for this is to add code for the missing property, or prevent it from being + // The correct fix for this is to add code for the missing property, or prevent it from being // specified in the logfile definitions file. THROW_ERROR(ERROR::UNEXPECTED_BINARY_PROPERTY); // throw error @@ -702,21 +702,21 @@ COMPAS_VARIABLE BaseBinaryStar::BinaryPropertyValue(const T_ANY_PROPERTY p_Prope * COMPANION_PROPERTY - property of the companion to the supernova * BINARY_PROPERTY - property of the binary * PROGRAM_OPTION - program option - * + * * This function handles properties of type: - * + * * STAR_1_PROPERTY, STAR_2_PROPERTY, SUPERNOVA_PROPERTY, COMPANION_PROPERTY, BINARY_PROPERTY, PROGRAM_OPTION - * + * * only - anything else will result in an error being thrown and the evolution of the star (or binary) * terminated. - * + * * This function calls the appropriate helper function to retrieve the value. * * This is the function used to retrieve values for properties required to be printed. * This allows the composition of the log records to be dynamically modified - this is * how we allow users to specify what properties they want recorded in log files. * - * The functional return is the value of the property requested. + * The functional return is the value of the property requested. * * * COMPAS_VARIABLE PropertyValue(const T_ANY_PROPERTY p_Property) const @@ -847,10 +847,10 @@ bool BaseBinaryStar::IsHMXRBinary() const { * * * bool PrintRLOFParameters(const RLOF_RECORD_TYPE p_RecordType) - * + * * @param [IN] p_RecordType Record type to be written * @return Boolean status (true = success, false = failure) - * + * */ bool BaseBinaryStar::PrintRLOFParameters(const RLOF_RECORD_TYPE p_RecordType) { @@ -858,7 +858,7 @@ bool BaseBinaryStar::PrintRLOFParameters(const RLOF_RECORD_TYPE p_RecordType) { if (!OPTIONS->RLOFPrinting()) return ok; // do not print if printing option off - StashRLOFProperties(MT_TIMING::POST_MT); // stash properties immediately post-Mass Transfer + StashRLOFProperties(MT_TIMING::POST_MT); // stash properties immediately post-Mass Transfer if (m_Star1->IsRLOF() || m_Star2->IsRLOF()) { // print if either star is in RLOF m_RLOFDetails.propsPostMT->eventCounter += 1; // every time we print a MT event happened, increment counter @@ -867,7 +867,7 @@ bool BaseBinaryStar::PrintRLOFParameters(const RLOF_RECORD_TYPE p_RecordType) { if (OPTIONS->HMXRBinaries()) { if (IsHMXRBinary()) { // print if star is HMXRB candidate - ok = LOGGING->LogRLOFParameters(this, p_RecordType); + ok = LOGGING->LogRLOFParameters(this, p_RecordType); } } @@ -878,8 +878,8 @@ bool BaseBinaryStar::PrintRLOFParameters(const RLOF_RECORD_TYPE p_RecordType) { /* * Squirrel RLOF properties away * - * Various binary property values are stashed into either the m_RLOFDetails.propsPreMT or - * m_RLOFDetails.propsPostMT struct for use/printing later. + * Various binary property values are stashed into either the m_RLOFDetails.propsPreMT or + * m_RLOFDetails.propsPostMT struct for use/printing later. * The switch is so that pre-MT props store the binary state immediately before EvaluateBinary(), * to avoid recording problems when a stellar type changes twice in one timestep. * @@ -998,7 +998,7 @@ void BaseBinaryStar::SetPostCEEValues(const double p_SemiMajorAxis, * Calculate the time to coalescence for a binary with arbitrary eccentricity * * Mandel 2021 https://iopscience.iop.org/article/10.3847/2515-5172/ac2d35, eq 5 - * + * * Accurate to within 3% over the full range of initial eccentricities up to 0.99999 * Will return time = 0.0 for eccentricities < 0.0 and >= 1.0 * @@ -1038,7 +1038,7 @@ double BaseBinaryStar::CalculateTimeToCoalescence(const double p_SemiMajorAxis, double e0_100 = e0_10 * e0_10 * e0_10 * e0_10 * e0_10 * e0_10 * e0_10 * e0_10 * e0_10 * e0_10; double f = 1.0 - (e0 * e0); double f_3 = f * f * f; - + tC = f <= 0.0 ? 0.0 : tC * (1.0 + 0.27 * e0_10 + 0.33 * e0_20 + 0.2 * e0_100) * f_3 * std::sqrt(f); // check f <= 0.0 just in case a rounding error hurts us } @@ -1085,9 +1085,9 @@ void BaseBinaryStar::ResolveCoalescence() { * @param [IN] p_ImKnm Imaginary [(1,0), (1,2), (2,2), (3,2)] components of the potential tidal Love number of star (unitless) * @param [IN] p_Star Star for which impact on eccentricity is to be calculated * @return Change in Eccentricity for binary (1/yr) - */ + */ double BaseBinaryStar::CalculateDEccentricityTidalDt(const DBL_DBL_DBL_DBL p_ImKnm, const BinaryConstituentStar* p_Star) { - + double massStar = p_Star->Mass(); double radiusStar = p_Star->Radius(); double massCompanion = p_Star == m_Star1 ? m_Star2->Mass() : m_Star1->Mass(); @@ -1098,7 +1098,7 @@ double BaseBinaryStar::CalculateDEccentricityTidalDt(const DBL_DBL_DBL_DBL p_ImK double R1_AU = radiusStar * RSOL_TO_AU; double R1_over_a = R1_AU / m_SemiMajorAxis; double R1_over_a_8 = R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a * R1_over_a; - + // No need to ignore quadratic e order terms during (super) synchronous rotation, since this formula is already linear in eccentricity return -(3.0 / 4.0) * (m_Eccentricity / OrbitalAngularVelocity()) * (1.0 + (massCompanion / massStar)) * (G_AU_Msol_yr * massCompanion / R1_AU / R1_AU / R1_AU) * R1_over_a_8 * ((3.0 * ImK10 / 2.0) - (ImK12 / 4.0) - ImK22 + (49.0 * ImK32 / 4.0)); } @@ -1114,9 +1114,9 @@ double BaseBinaryStar::CalculateDEccentricityTidalDt(const DBL_DBL_DBL_DBL p_ImK * @param [IN] p_ImKnm Imaginary [(1,0), (1,2), (2,2), (3,2)] components of the potential tidal Love number of star (unitless) * @param [IN] p_Star Star for which impact on spin is to be calculated * @return Change in Omega for star (1/yr/yr) - */ + */ double BaseBinaryStar::CalculateDOmegaTidalDt(const DBL_DBL_DBL_DBL p_ImKnm, const BinaryConstituentStar* p_Star) { - + double MoIstar = p_Star->CalculateMomentOfInertiaAU(); double radiusStar = p_Star->Radius(); double massCompanion = p_Star == m_Star1 ? m_Star2->Mass() : m_Star1->Mass(); @@ -1151,13 +1151,13 @@ double BaseBinaryStar::CalculateDOmegaTidalDt(const DBL_DBL_DBL_DBL p_ImKnm, con * @param [IN] p_ImKnm Imaginary [(1,0), (1,2), (2,2), (3,2)] components of the potential tidal Love number of star (unitless) * @param [IN] p_Star Star for which impact on semi-major axis is to be calculated * @return Change in semi-major axis for binary (AU/yr) - */ + */ double BaseBinaryStar::CalculateDSemiMajorAxisTidalDt(const DBL_DBL_DBL_DBL p_ImKnm, const BinaryConstituentStar* p_Star) { - + double massStar = p_Star->Mass(); double radiusStar = p_Star->Radius(); double massCompanion = p_Star == m_Star1 ? m_Star2->Mass() : m_Star1->Mass(); - + double e2 = m_Eccentricity * m_Eccentricity; double e4 = e2 * e2; double e6 = e4 * e2; @@ -1187,36 +1187,36 @@ double BaseBinaryStar::CalculateDSemiMajorAxisTidalDt(const DBL_DBL_DBL_DBL p_Im * * Assign a random supernova kick according to the user specified options and then update the orbit and velocities. * Vector algebra is directly based on Pfahl, Rappaport, Podsiadlowski 2002, Appendix B: - * https://arxiv.org/abs/astro-ph/0106141 + * https://arxiv.org/abs/astro-ph/0106141 * The change of reference basis angles, ThetaE, PhiE, and PsiE, are the standard Euler angles (see vector3d.h) * * Note: the systemic speed is only valid for intact binaries, and component speeds are only valid for disrupted binaries. - * + * * Logic: - * + * * if (Unbound before SN): - * + * * Must be 2nd SN, only need to update starSN component velocity (rotated into previous reference frame). - * + * * else: (Intact before SN) - * + * * Evolve binary according to vector algebra to determine centerofmass velocity, h', e', a', and whether bound or unbound. * Update binary systemic velocity (even if disrupted, just for consistency) - rotate into previous reference frame if needed. - * + * * if now unbound: - * + * * Set m_Unbound to True - should be the only place in the code this is done. - * + * * Continue vector algebra to find v1inf and v2inf. - * Add these values to previous component velocities (rotated if need be) which will be the systemic velocity if this is the 2nd SN. - * + * Add these values to previous component velocities (rotated if need be) which will be the systemic velocity if this is the 2nd SN. + * * For unbound binary, new Euler Angles should be randomized (see vector3d.cpp). - * + * * if still intact: - * + * * Binary systemic velocity has already been set, so just set the component velocities to the same vector. * (this is to make it easier to add just a component velocity later). - * + * * For intact binary, Euler Angles must be calculated according to the vector algebra (see vector3d.h). * * @@ -1227,14 +1227,14 @@ void BaseBinaryStar::ResolveSupernova() { // Functions defined in vector3d.h // Defined here for convenience - undefined later #define cross(x,y) Vector3d::Cross(x, y) -#define dot(x,y) Vector3d::Dot(x, y) +#define dot(x,y) Vector3d::Dot(x, y) #define angleBetween(x,y) Vector3d::AngleBetween(x, y) #define mag Magnitude() #define hat UnitVector() - - // set relevant preSN parameters - m_EccentricityPreSN = m_Eccentricity; - m_SemiMajorAxisPreSN = m_SemiMajorAxis; + + // set relevant preSN parameters + m_EccentricityPreSN = m_Eccentricity; + m_SemiMajorAxisPreSN = m_SemiMajorAxis; double totalMassPreSN = m_Supernova->SN_TotalMassAtCOFormation() + m_Companion->Mass(); // total Mass preSN double reducedMassPreSN = m_Supernova->SN_TotalMassAtCOFormation() * m_Companion->Mass() / totalMassPreSN; // reduced Mass preSN @@ -1244,8 +1244,8 @@ void BaseBinaryStar::ResolveSupernova() { double theta = m_Supernova->SN_Theta(); // angle out of the binary plane double phi = m_Supernova->SN_Phi(); // angle in the binary plane Vector3d natalKickVector = m_Supernova->SN_KickMagnitude() * Vector3d(cos(theta) * cos(phi), cos(theta) * sin(phi), sin(theta)); - - // Define the rocket kick vector - will be 0 if unused. + + // Define the rocket kick vector - will be 0 if unused. // The rocket is aligned with the NS spin axis, which by default is aligned with the pre-SN orbit (0.0, 0.0, 1.0) // Defined here in case the system is already unbound. double rocketTheta = m_Supernova->SN_RocketKickTheta(); // azimuthal angle @@ -1260,8 +1260,8 @@ void BaseBinaryStar::ResolveSupernova() { m_OrbitalVelocityPreSN = 0.0; } else { // no, not unbound - evaluate orbital changes and calculate velocities - // Evolve SN out of binary - + // Evolve SN out of binary + // Pre-SN parameters double semiMajorAxisPrev_km = m_SemiMajorAxis * AU_TO_KM; // semi-Major axis in km double eccentricityPrev = m_Eccentricity; // eccentricity prior to any updates to m_Eccentricity @@ -1270,10 +1270,10 @@ void BaseBinaryStar::ResolveSupernova() { double m1Prev = m_Supernova->SN_TotalMassAtCOFormation(); // supernova pre-SN mass (Msol) double m2Prev = m_Companion->Mass(); // companion pre-SN mass (Msol) double totalMassPrev = m1Prev + m2Prev; // total binary pre-SN mass (Msol) - + // Functions of eccentric anomaly m_Supernova->CalculateSNAnomalies(eccentricityPrev); - double cosEccAnomaly = cos(m_Supernova->SN_EccentricAnomaly()); + double cosEccAnomaly = cos(m_Supernova->SN_EccentricAnomaly()); double sinEccAnomaly = sin(m_Supernova->SN_EccentricAnomaly()); if ((utils::Compare(eccentricityPrev, 0.0) == 0) && m_Companion->IsOneOf(SN_REMNANTS)) { // If circular and first SN, fix eccentric anomaly to 0 cosEccAnomaly = 1; @@ -1293,31 +1293,31 @@ void BaseBinaryStar::ResolveSupernova() { Vector3d relativeVelocityVectorPrev = Vector3d(-fact1 * sinEccAnomaly, fact1 * cosEccAnomaly * sqrt1MinusEccPrevSquared, 0.0); // relative velocity vector, in the m1Prev rest frame (km/s) Vector3d orbitalAngularMomentumVectorPrev = cross(separationVectorPrev, relativeVelocityVectorPrev); // specific orbital angular momentum vector (km^2 s^-1) - Vector3d eccentricityVectorPrev = cross(relativeVelocityVectorPrev, orbitalAngularMomentumVectorPrev) / + Vector3d eccentricityVectorPrev = cross(relativeVelocityVectorPrev, orbitalAngularMomentumVectorPrev) / (G_km_Msol_s * totalMassPrev) - separationVectorPrev.hat; // Laplace-Runge-Lenz vector (magnitude = eccentricity) - m_OrbitalVelocityPreSN = relativeVelocityVectorPrev.mag; // pre-SN orbital velocity (km/s) + m_OrbitalVelocityPreSN = relativeVelocityVectorPrev.mag; // pre-SN orbital velocity (km/s) // Note: In the following, - // orbitalAngularMomentumVectorPrev defines the Z-axis, + // orbitalAngularMomentumVectorPrev defines the Z-axis, // eccentricityVectorPrev defines the X-axis, and // (orbitalAngularMomentumVectorPrev x eccentricityVectorPrev) defines the Y-axis - - // Apply supernova natal kick and mass loss + + // Apply supernova natal kick and mass loss // - // Note: the code allows for mass loss and kick in the companion + // Note: the code allows for mass loss and kick in the companion // (due to ablation), though we currently do not apply these. - + Vector3d companionRecoilVector = Vector3d(0.0, 0.0, 0.0); // km/s - The recoil of the companion due to ablation double m1 = m_Supernova->Mass(); // supernova post-SN mass (Msol) double m2 = m_Companion->Mass(); // companion post-SN mass (Msol) double totalMass = m1 + m2; // total binary post-SN mass (Msol) - double fact2 = totalMassPrev * totalMass; + double fact2 = totalMassPrev * totalMass; double dm1 = (m1Prev - m1); // mass difference of supernova (Msol) double dm2 = (m2Prev - m2); // mass difference of companion (Msol) - Vector3d centerOfMassVelocity = (-m2Prev * dm1 / fact2 + m1Prev * dm2 / fact2) * relativeVelocityVectorPrev + + Vector3d centerOfMassVelocity = (-m2Prev * dm1 / fact2 + m1Prev * dm2 / fact2) * relativeVelocityVectorPrev + (m1 / totalMass) * natalKickVector + (m2 / totalMass) * companionRecoilVector; // post-SN center of mass velocity vector (km/s) Vector3d relativeVelocityVector = relativeVelocityVectorPrev + (natalKickVector - companionRecoilVector); // post-SN relative velocity vector (km/s) @@ -1326,7 +1326,7 @@ void BaseBinaryStar::ResolveSupernova() { double orbitalAngularMomentum = orbitalAngularMomentumVector.mag; // post-SN specific orbital angular momentum (km^2 s^-1) m_NormalizedOrbitalAngularMomentumVector = orbitalAngularMomentumVector/orbitalAngularMomentum; // set unit vector here to make printing out the inclination vector easier - Vector3d eccentricityVector = cross(relativeVelocityVector, orbitalAngularMomentumVector) / + Vector3d eccentricityVector = cross(relativeVelocityVector, orbitalAngularMomentumVector) / (G_km_Msol_s * totalMass) - separationVectorPrev / separationPrev; // post-SN Laplace-Runge-Lenz vector m_Eccentricity = eccentricityVector.mag; // post-SN eccentricity double eccSquared = m_Eccentricity * m_Eccentricity; // useful function of eccentricity @@ -1335,66 +1335,66 @@ void BaseBinaryStar::ResolveSupernova() { m_SemiMajorAxis = semiMajorAxis_km * KM_TO_AU; // post-SN semi-major axis (AU) // Note: similar to above, - // orbitalAngularMomentumVector defines the Z'-axis, + // orbitalAngularMomentumVector defines the Z'-axis, // eccentricityVector defines the X'-axis, and // (orbitalAngularMomentumVector x eccentricityVector) defines the Y'-axis - + UpdateSystemicVelocity(centerOfMassVelocity.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); // update the system velocity with the new center of mass velocity double reducedMass = m_Supernova->Mass() * m_Companion->Mass() / totalMass; // reduced Mass m_Supernova->SetOrbitalEnergyPostSN(CalculateOrbitalEnergy(reducedMass, totalMass, m_SemiMajorAxis)); // orbital energy // Split off and evaluate depending on whether the binary is now bound or unbound if (utils::Compare(m_Eccentricity, 1.0) >= 0) { // unbound? - // yes, unbound + // yes, unbound m_Unbound = true; - // Calculate the asymptotic Center of Mass velocity + // Calculate the asymptotic Center of Mass velocity double relativeVelocityAtInfinity = (G_km_Msol_s*totalMass/orbitalAngularMomentum) * std::sqrt(eccSquared - 1.0); - Vector3d relativeVelocityVectorAtInfinity = relativeVelocityAtInfinity - * (-1.0 * (eccentricityVector.hat / m_Eccentricity) + Vector3d relativeVelocityVectorAtInfinity = relativeVelocityAtInfinity + * (-1.0 * (eccentricityVector.hat / m_Eccentricity) + std::sqrt(1.0 - 1.0 / eccSquared) * cross(orbitalAngularMomentumVector.hat, eccentricityVector.hat)); // Calculate the asymptotic velocities of Star1 (SN) and Star2 (CP) Vector3d component1VelocityVectorAtInfinity = (m2 / totalMass) * relativeVelocityVectorAtInfinity + centerOfMassVelocity; Vector3d component2VelocityVectorAtInfinity = -(m1 / totalMass) * relativeVelocityVectorAtInfinity + centerOfMassVelocity; - // Update the component velocities + // Update the component velocities m_Supernova->UpdateComponentVelocity(component1VelocityVectorAtInfinity.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); m_Companion->UpdateComponentVelocity(component2VelocityVectorAtInfinity.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); - // Set Euler Angles + // Set Euler Angles m_ThetaE = angleBetween(orbitalAngularMomentumVectorPrev, orbitalAngularMomentumVector); // angle between the angular momentum unit vectors, always well defined - m_PhiE = _2_PI * RAND->Random(); - m_PsiE = _2_PI * RAND->Random(); + m_PhiE = _2_PI * RAND->Random(); + m_PsiE = _2_PI * RAND->Random(); } else { // no - binary still bound // Set the component velocites to the system velocity. System velocity was already correctly set above. - + m_Supernova->UpdateComponentVelocity(centerOfMassVelocity.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); m_Companion->UpdateComponentVelocity(centerOfMassVelocity.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); // Calculate Euler angles - see ChangeBasis() in vector.cpp for details m_ThetaE = angleBetween(orbitalAngularMomentumVector, orbitalAngularMomentumVectorPrev); // angle between the angular momentum unit vectors, always well defined - // If the new orbital A.M. is parallel or anti-parallel to the previous orbital A.M., + // If the new orbital A.M. is parallel or anti-parallel to the previous orbital A.M., // then the cross product is not well-defined, and we need to account for degeneracy between eccentricity vectors. // Also, if either eccentricity is 0.0, then the eccentricity vector is not well defined. if ((utils::Compare(m_ThetaE, 0.0) == 0) || (utils::Compare(m_ThetaE, M_PI) == 0)) { // orbitalAngularMomentumVectorPrev parallel or anti-parallel to orbitalAngularMomentumVector if ((utils::Compare(eccentricityPrev, 0.0) == 0) || (utils::Compare(m_Eccentricity, 0.0) == 0)) { // either e_prev or e_now is 0, so eccentricity vector is not well-defined - m_PhiE = _2_PI * RAND->Random(); - m_PsiE = _2_PI * RAND->Random(); - } + m_PhiE = _2_PI * RAND->Random(); + m_PsiE = _2_PI * RAND->Random(); + } else { // both eccentricityVectorPrev and eccentricityVector well-defined if (utils::Compare(m_ThetaE, 0.0) == 0){ // Orbital AM is parallel ? double psiPlusPhi = angleBetween(eccentricityVector, eccentricityVectorPrev); // yes - then psi + phi is constant - m_PhiE = _2_PI * RAND->Random(); + m_PhiE = _2_PI * RAND->Random(); m_PsiE = psiPlusPhi - m_PhiE; } - else { + else { double psiMinusPhi = angleBetween(eccentricityVector, eccentricityVectorPrev); // no - then psi - phi is constant - m_PhiE = _2_PI * RAND->Random(); + m_PhiE = _2_PI * RAND->Random(); m_PsiE = psiMinusPhi + m_PhiE; } } @@ -1412,8 +1412,8 @@ void BaseBinaryStar::ResolveSupernova() { } if ( utils::Compare(m_Eccentricity, 0.0) == 0 ) { // is eccentricityVector well-defined? - m_PsiE = _2_PI * RAND->Random(); // no - set psi random - } + m_PsiE = _2_PI * RAND->Random(); // no - set psi random + } else { // yes - psi is +/- angle between eccentricityVector and orbitalPivotAxis m_PsiE = utils::Compare( dot(eccentricityVector, orbitalAngularMomentumVectorPrev), 0.0) >= 0 // are eccentricityVector and orbitalAngularMomentumVectorPrev in the same hemisphere? ? angleBetween(eccentricityVector, orbitalPivotAxis) // yes - psi in [0,pi) @@ -1421,16 +1421,16 @@ void BaseBinaryStar::ResolveSupernova() { } } - // Note: There is some evidence for evolution of periapsis in mass transferring binaries (see e.g Dosopoulou & Kalogera 2016, 2018). + // Note: There is some evidence for evolution of periapsis in mass transferring binaries (see e.g Dosopoulou & Kalogera 2016, 2018). // This should be investigated in more depth, but until then, we assume that the periapsis *may* evolve, and accordingly randomize // the angle of periapsis around the new orbital angular momentum, (i.e, Psi) - RTW 15/05/20 m_PsiE = _2_PI * RAND->Random(); } - + // account for possible neutrino rocket - see Hirai+ 2024 if (ShouldResolveNeutrinoRocketMechanism()) { - if (IsUnbound()) { // is system unbound? + if (IsUnbound()) { // is system unbound? m_Supernova->UpdateComponentVelocity(rocketKickVector.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); // yes - simply update the component velocity } else { // no - need to update the eccentricity and system velocity @@ -1440,7 +1440,7 @@ void BaseBinaryStar::ResolveSupernova() { Vector3d totalAmVectorPreRocket = orbitalAngularMomentumVector * reducedMass * KM_TO_AU * KM_TO_AU * SECONDS_IN_YEAR; // Msol * AU^2 / yr (orbitalAngularMomentumVector is the specific orbital AM) Vector3d amVectorNormalizedByCircularAmPreRocket = totalAmVectorPreRocket * (averageOrbitalVelocityPreRocket / kGrav); // unitless! double theta_rotation = 3.0 * rocketKickVector.mag * KM_TO_AU * SECONDS_IN_YEAR / (2.0 * averageOrbitalVelocityPreRocket); // rad - need to convert velocities to same units - + // apply hPlus and hMinus support vectors Vector3d hPlusVector = amVectorNormalizedByCircularAmPreRocket + eccentricityVectorPreRocket; Vector3d hMinusVector = amVectorNormalizedByCircularAmPreRocket - eccentricityVectorPreRocket; @@ -1461,32 +1461,32 @@ void BaseBinaryStar::ResolveSupernova() { Vector3d normalizedAngularMomentumVectorPostRocket = 0.5 * (hPlusVector_prime + hMinusVector_prime); Vector3d eccentricityVectorPostRocket = 0.5 * (hPlusVector_prime - hMinusVector_prime); - m_NormalizedOrbitalAngularMomentumVector = normalizedAngularMomentumVectorPostRocket ; - m_Eccentricity = eccentricityVectorPostRocket.mag; + m_NormalizedOrbitalAngularMomentumVector = normalizedAngularMomentumVectorPostRocket ; + m_Eccentricity = eccentricityVectorPostRocket.mag; - UpdateSystemicVelocity(rocketKickVector.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); + UpdateSystemicVelocity(rocketKickVector.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); m_Supernova->UpdateComponentVelocity(rocketKickVector.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); m_Companion->UpdateComponentVelocity(rocketKickVector.ChangeBasis(m_ThetaE, m_PhiE, m_PsiE)); } } #undef hat - #undef mag + #undef mag #undef angleBetween #undef dot #undef cross } - // Do for all systems + // Do for all systems - m_IPrime = m_ThetaE; // inclination angle between preSN and postSN orbital planes + m_IPrime = m_ThetaE; // inclination angle between preSN and postSN orbital planes m_CosIPrime = cos(m_IPrime); (void)PrintSupernovaDetails(); // log record to supernovae logfile m_Supernova->ClearCurrentSNEvent(); #undef hat -#undef mag +#undef mag #undef angleBetween #undef dot #undef cross @@ -1499,12 +1499,12 @@ void BaseBinaryStar::ResolveSupernova() { * the stars as appropriate. * * void EvaluateSupernovae - * + * */ void BaseBinaryStar::EvaluateSupernovae() { m_SupernovaState = SN_STATE::NONE; // not yet determined - + if (m_Star1->IsSNevent()) { // star1 supernova m_SupernovaState = SN_STATE::STAR1; // star1 @@ -1514,10 +1514,10 @@ void BaseBinaryStar::EvaluateSupernovae() { ResolveSupernova(); // resolve supernova } - if (m_Star2->IsSNevent()) { // star2 supernova + if (m_Star2->IsSNevent()) { // star2 supernova m_SupernovaState = m_SupernovaState == SN_STATE::NONE // star1 not supernova? ? SN_STATE::STAR2 // yes - just star2 - : SN_STATE::BOTH; // no - both + : SN_STATE::BOTH; // no - both // resolve star2 supernova m_Supernova = m_Star2; // supernova @@ -1542,7 +1542,7 @@ void BaseBinaryStar::EvaluateSupernovae() { * void ResolveCommonEnvelopeEvent() */ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { - + double alphaCE = OPTIONS->CommonEnvelopeAlpha(); // CE efficiency parameter double eccentricity = Eccentricity(); // current eccentricity (before CEE) @@ -1552,9 +1552,9 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { double rRLd2Rsol = periastronRsol * CalculateRocheLobeRadius_Static(m_Star2->Mass(), m_Star1->Mass()); // Roche-lobe radius at periastron in Rsol at the moment where CEE begins, seen by star2 double omegaSpin1_pre_CE = m_Star1->Omega(); // star1 spin (before CEE) double omegaSpin2_pre_CE = m_Star2->Omega(); // star2 spin (before CEE) - + double semiMajorAxisAfterStage1 = 0.0; // semi-major axis after stage 1 (to remain zero unless using 2-stage CE formalism) - + bool isDonorMS = false; // check for main sequence donor if (OPTIONS->AllowMainSequenceStarToSurviveCommonEnvelope()) { // allow main sequence stars to survive CEE? if (m_Star1->IsOneOf(ALL_MAIN_SEQUENCE)) { // yes - star1 MS_LTE_07, MS_GT_07, CHEMICALLY_HOMOGENEOUS or NAKED_HELIUM_STAR_MS? @@ -1600,13 +1600,13 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { m_Star1->SetPreCEEValues(); // squirrel away pre CEE stellar values for star 1 m_Star2->SetPreCEEValues(); // squirrel away pre CEE stellar values for star 2 SetPreCEEValues(semiMajorAxisRsol, eccentricity, rRLd1Rsol, rRLd2Rsol); // squirrel away pre CEE binary values - + m_MassTransferTimescale = MT_TIMESCALE::CE; m_MassLossRateInRLOF = DBL_MAX; - + // double common envelope phase prescription (Brown 1995) to calculate new semi-major axis // due to the CEE as described in Belczynsky et al. 2002, eq. (12) - + switch (OPTIONS->CommonEnvelopeFormalism()) { case CE_FORMALISM::ENERGY: { @@ -1620,24 +1620,24 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { case CE_FORMALISM::TWO_STAGE: { // two-stage common envelope, Hirai & Mandel (2022) - + double convectiveEnvelopeMass1, maxConvectiveEnvelopeMass1, endOfFirstStageMass1, mass1=m_Star1->Mass(); std::tie(convectiveEnvelopeMass1, maxConvectiveEnvelopeMass1) = m_Star1->CalculateConvectiveEnvelopeMass(); - + double convectiveEnvelopeMass2, maxConvectiveEnvelopeMass2, endOfFirstStageMass2, mass2=m_Star2->Mass(); std::tie(convectiveEnvelopeMass2, maxConvectiveEnvelopeMass2) = m_Star2->CalculateConvectiveEnvelopeMass(); - + //if the total mass > 8 Msun, the mass of the envelope participating in the first stage is the mass of the convective outer envelope (as in the current 2-stage model) //if mass < 2 Msun, the entire envelope participates in the first stage //in between, we linearly interpolate [see issue #1213] - + if (utils::Compare(mass1, 8.0) >= 0) endOfFirstStageMass1 = mass1 - convectiveEnvelopeMass1; else if (utils::Compare(mass1, 2.0) <= 0) endOfFirstStageMass1 = m_Mass1Final; else endOfFirstStageMass1 = m_Mass1Final + (m_MassEnv1 - convectiveEnvelopeMass1) * (mass1 - 2.0) / 6.0; - + if (utils::Compare(mass2, 8.0) >= 0) endOfFirstStageMass2 = mass2 - convectiveEnvelopeMass2; else if (utils::Compare(mass2, 2.0) <= 0) @@ -1645,20 +1645,20 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { else endOfFirstStageMass2 = m_Mass2Final + (m_MassEnv2 - convectiveEnvelopeMass2) * (mass2 - 2.0) / 6.0; - + // stage 1: convective envelope removal on a dynamical timescale; assumes lambda = lambda_He (this still uses the Picker convective envelope mass fit to estimate lambda) double lambda1 = m_Star1->CalculateConvectiveEnvelopeLambdaPicker(std::tie(convectiveEnvelopeMass1, maxConvectiveEnvelopeMass1)); double lambda2 = m_Star2->CalculateConvectiveEnvelopeLambdaPicker(std::tie(convectiveEnvelopeMass2, maxConvectiveEnvelopeMass2)); - + double k1 = m_Star1->IsOneOf(COMPACT_OBJECTS) ? 0.0 : (2.0 / (lambda1 * alphaCE)) * m_Star1->Mass() * (mass1 - endOfFirstStageMass1) / m_Star1->Radius(); double k2 = m_Star2->IsOneOf(COMPACT_OBJECTS) ? 0.0 : (2.0 / (lambda2 * alphaCE)) * m_Star2->Mass() * (mass2 - endOfFirstStageMass2) / m_Star2->Radius(); double k3 = m_Star1->Mass() * m_Star2->Mass() / periastronRsol; // assumes immediate circularisation at periastron at start of CE double k4 = endOfFirstStageMass1 * endOfFirstStageMass2; - + double aFinalRsol = k4 / (k1 + k2 + k3); m_SemiMajorAxis = aFinalRsol * RSOL_TO_AU; semiMajorAxisAfterStage1 = m_SemiMajorAxis; - + // stage 2: radiative envelope removal on a thermal timescale; assumed to be fully non-conservative // transfer the radiative intershell first from the star that is initially in RLOF (i.e., initiating CE) // note that in the case where both stars are in RLOF (m_RLOFDetails.simultaneousRLOF), star 1 is arbitrarily first to transfer its radiative intershell @@ -1671,7 +1671,7 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { m_SemiMajorAxis = CalculateMassTransferOrbit(endOfFirstStageMass2, -(endOfFirstStageMass2 - m_Mass2Final), m_Mass1Final, m_Star1->IsDegenerate(), OPTIONS->CommonEnvelopeSecondStageBeta(), true); } } - + else if (m_Star2->IsRLOF()) { if (utils::Compare(endOfFirstStageMass2 - m_Mass2Final, 0.0) > 0) { m_SemiMajorAxis = CalculateMassTransferOrbit(endOfFirstStageMass2, -(endOfFirstStageMass2 - m_Mass2Final), endOfFirstStageMass1, m_Star1->IsDegenerate(), OPTIONS->CommonEnvelopeSecondStageBeta(), true); @@ -1693,7 +1693,7 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { THROW_ERROR(ERROR::UNKNOWN_CE_FORMALISM); // throw error } - + double rRLdfin1 = m_SemiMajorAxis * CalculateRocheLobeRadius_Static(m_Mass1Final, m_Mass2Final); // Roche-lobe radius in AU after CEE, seen by star1 double rRLdfin2 = m_SemiMajorAxis * CalculateRocheLobeRadius_Static(m_Mass2Final, m_Mass1Final); // Roche-lobe radius in AU after CEE, seen by star2 double rRLdfin1Rsol = rRLdfin1 * AU_TO_RSOL; // Roche-lobe radius in Rsol after CEE, seen by star1 @@ -1706,7 +1706,7 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { // update stellar type after losing its envelope. Star1, Star2 or both if double CEE. if (isDonorMS || (!envelopeFlag1 && !envelopeFlag2) || (m_Star1->IsRLOF() && m_Star1->IsOneOf(WHITE_DWARFS)) || (m_Star2->IsRLOF() && m_Star2->IsOneOf(WHITE_DWARFS))) { // stellar merger - m_MassTransferTrackerHistory = MT_TRACKING::MERGER; + m_MassTransferTrackerHistory = MT_TRACKING::MERGER; m_Flags.stellarMerger = true; } else if ((m_Star1->DetermineEnvelopeType()==ENVELOPE::RADIATIVE && !m_Star1->IsOneOf(ALL_MAIN_SEQUENCE)) || @@ -1722,12 +1722,12 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { m_MassTransferTrackerHistory = MT_TRACKING::MERGER; m_Flags.stellarMerger = true; } - + if (!m_Flags.stellarMerger) { // stellar merger? // no - continue evolution STELLAR_TYPE stellarType1 = m_Star1->StellarType(); // star 1 stellar type before resolving envelope loss STELLAR_TYPE stellarType2 = m_Star2->StellarType(); // star 2 stellar type before resolving envelope loss - + if (envelopeFlag1) { m_Star1->ResolveEnvelopeLossAndSwitch(); // resolve envelope loss for star1 and switch to new stellar type m_Star1->SetOmega(omegaSpin1_pre_CE); // keep the rotation frequency of the core equal to the pre-envelope-loss rotation frequency @@ -1739,7 +1739,7 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { m_Star2->SetOmega(omegaSpin2_pre_CE); // keep the rotation frequency of the core equal to the pre-envelope-loss rotation frequency m_MassTransferTrackerHistory = MT_TRACKING::CE_2_TO_1_SURV; } - + if (m_CEDetails.doubleCoreCE) m_MassTransferTrackerHistory = MT_TRACKING::CE_DOUBLE_SURV; // record history - double CEE @@ -1759,9 +1759,9 @@ void BaseBinaryStar::ResolveCommonEnvelopeEvent() { m_Flags.stellarMerger = true; } } - + (void)PrintCommonEnvelope(); // print (log) common envelope details - + } @@ -1779,7 +1779,7 @@ void BaseBinaryStar::ResolveMainSequenceMerger() { if (!(m_Star1->IsOneOf(MAIN_SEQUENCE) && m_Star2->IsOneOf(MAIN_SEQUENCE) && OPTIONS->EvolveMainSequenceMergers())) return; // resolve MS merger - + double mass1 = m_Star1->Mass(); double mass2 = m_Star2->Mass(); double tau1 = m_Star1->Tau(); @@ -1787,31 +1787,31 @@ void BaseBinaryStar::ResolveMainSequenceMerger() { double TAMSCoreMass1 = m_Star1->TAMSCoreMass(); double TAMSCoreMass2 = m_Star2->TAMSCoreMass(); - + double q = std::min(mass1 / mass2, mass2 / mass1); double phi = 0.3 * q / (1.0 + q) / (1.0 + q); // fraction of mass lost in merger, Wang+ 2022, https://www.nature.com/articles/s41550-021-01597-5 - + double finalMass = (1.0 - phi) * (mass1 + mass2); double initialHydrogenFraction = m_Star1->InitialHydrogenAbundance(); - + double finalHydrogenMass; if ((OPTIONS->MainSequenceCoreMassPrescription() == CORE_MASS_PRESCRIPTION::BRCEK) && (utils::Compare(m_Star1->MZAMS(), BRCEK_LOWER_MASS_LIMIT) >= 0) && (utils::Compare(m_Star2->MZAMS(), BRCEK_LOWER_MASS_LIMIT) >= 0)) { - + // total hydrogen masses (from the core, envelope, and the intermediate region between the core and envelope) double hydrogenMass1 = m_Star1->HydrogenAbundanceCore() * m_Star1->MainSequenceCoreMass() + (m_Star1->HydrogenAbundanceCore() + m_Star1->HydrogenAbundanceSurface()) * (std::min(m_Star1->InitialMainSequenceCoreMass(), m_Star1->Mass()) - m_Star1->MainSequenceCoreMass()) / 2.0 + m_Star1->HydrogenAbundanceSurface() * std::max(m_Star1->Mass() - m_Star1->InitialMainSequenceCoreMass(), 0.0); double hydrogenMass2 = m_Star2->HydrogenAbundanceCore() * m_Star2->MainSequenceCoreMass() + (m_Star2->HydrogenAbundanceCore() + m_Star2->HydrogenAbundanceSurface()) * (std::min(m_Star2->InitialMainSequenceCoreMass(), m_Star2->Mass()) - m_Star2->MainSequenceCoreMass()) / 2.0 + m_Star2->HydrogenAbundanceSurface() * std::max(m_Star2->Mass() - m_Star2->InitialMainSequenceCoreMass(), 0.0); - + // final hydrogen mass in the merger product, assuming that the lost mass comes from the envelope of the star with higher surface hydrogen abundance finalHydrogenMass = hydrogenMass1 + hydrogenMass2 - (m_Star1->Mass() + m_Star2->Mass() - finalMass) * std::max(m_Star1->HydrogenAbundanceSurface(), m_Star2->HydrogenAbundanceSurface()); } else finalHydrogenMass = finalMass * initialHydrogenFraction - tau1 * TAMSCoreMass1 * initialHydrogenFraction - tau2 * TAMSCoreMass2 * initialHydrogenFraction; - + m_SemiMajorAxis = std::numeric_limits::infinity(); // set separation to infinity to avoid subsequent fake interactions with a massless companion (RLOF, CE, etc.) - + m_Star1->UpdateAfterMerger(finalMass, finalHydrogenMass); - + m_Star2->SwitchTo(STELLAR_TYPE::MASSLESS_REMNANT); } @@ -1861,25 +1861,25 @@ double BaseBinaryStar::CalculateGammaAngularMomentumLoss_Static(const double p_D switch (gammaPrescription) { // which prescription? - case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::JEANS : gamma = p_AccretorMass / p_DonorMass; break; // vicinity of the donor + case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::JEANS : gamma = p_AccretorMass / p_DonorMass; break; // vicinity of the donor case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::ISOTROPIC_RE_EMISSION: gamma = p_DonorMass / p_AccretorMass; break; // vicinity of the accretor - + case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::ARBITRARY : gamma = OPTIONS->MassTransferJloss(); break; - case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::CIRCUMBINARY_RING: { // based on the assumption that a_ring = 2*a, Vinciguerra+, 2020 + case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::CIRCUMBINARY_RING: { // based on the assumption that a_ring = 2*a, Vinciguerra+, 2020 double sumMasses = p_DonorMass + p_AccretorMass; gamma = (M_SQRT2 * sumMasses * sumMasses) / (p_DonorMass * p_AccretorMass); } break; - + case MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::MACLEOD_LINEAR : { // linear interpolation on separation between accretor and L2 point // Interpolate linearly in separation between a_acc and a_L2, both normalized to units of separation a double q = p_AccretorMass / p_DonorMass; double qPlus1 = 1.0 + q; double aL2 = std::sqrt(M_SQRT2); // roughly, coincides with CIRCUMBINARY_RING def above double aAcc = 1.0 / qPlus1; - double fMacleod = p_IsAccretorDegenerate - ? OPTIONS->MassTransferJlossLinearFractionDegen() + double fMacleod = p_IsAccretorDegenerate + ? OPTIONS->MassTransferJlossLinearFractionDegen() : OPTIONS->MassTransferJlossLinearFractionNonDegen(); double aGamma = aAcc + (aL2 - aAcc) * fMacleod; gamma = aGamma * aGamma * qPlus1 * qPlus1 / q; @@ -1894,8 +1894,8 @@ double BaseBinaryStar::CalculateGammaAngularMomentumLoss_Static(const double p_D double aAcc = 1.0 / qPlus1; double gammaL2 = aL2 * aL2 * qPlus1SquaredByQ; double gammaAcc = aAcc * aAcc * qPlus1SquaredByQ; - double fKlencki = p_IsAccretorDegenerate - ? OPTIONS->MassTransferJlossLinearFractionDegen() + double fKlencki = p_IsAccretorDegenerate + ? OPTIONS->MassTransferJlossLinearFractionDegen() : OPTIONS->MassTransferJlossLinearFractionNonDegen(); gamma = gammaAcc + (gammaL2 - gammaAcc) * fKlencki; } break; @@ -1919,8 +1919,8 @@ double BaseBinaryStar::CalculateGammaAngularMomentumLoss_Static(const double p_D * Pols et al. notes; Belczynski et al. 2008, eq 32, 33 * * - * double CalculateMassTransferOrbit (const double p_DonorMass, - * const double p_DeltaMassDonor, + * double CalculateMassTransferOrbit (const double p_DonorMass, + * const double p_DeltaMassDonor, * const double p_AccretorMass, const bool p_IsAccretorDegenerate, * const double p_FractionAccreted @@ -1942,7 +1942,7 @@ double BaseBinaryStar::CalculateMassTransferOrbit(const double p const bool p_IsCommonEnvelope) { double semiMajorAxis = m_SemiMajorAxis; - + if (utils::Compare(p_DeltaMassDonor, 0.0) < 0) { // mass loss from donor? controlled_stepper_type controlled_stepper; @@ -1968,7 +1968,7 @@ double BaseBinaryStar::CalculateMassTransferOrbit(const double p integrate_adaptive(controlled_stepper, ode{ p_DonorMass, p_AccretorMass, p_FractionAccreted, p_IsAccretorDegenerate, p_IsCommonEnvelope }, x, 0.0, p_DeltaMassDonor, p_DeltaMassDonor / 1000.0); semiMajorAxis = x[0]; } - + return semiMajorAxis; } @@ -2008,7 +2008,7 @@ double BaseBinaryStar::CalculateZetaRocheLobe(const double p_jLoss, const double * * JR: todo: flesh-out this documentation * - * + * * void CalculateWindsMassLoss(double p_Dt) * * @param [IN] p_Dt Time step @@ -2031,7 +2031,7 @@ void BaseBinaryStar::CalculateWindsMassLoss(double p_Dt) { double mWinds2 = m_Star2->CalculateMassLossValues(p_Dt, true); // calculate new values assuming mass loss applied double aWinds = m_SemiMajorAxisPrev * (m_Star1->Mass() + m_Star2->Mass()) / (mWinds1 + mWinds2); // new semi-major axis after wind mass loss, integrated to ensure a*M conservation - + m_Star1->SetMassLossDiff(mWinds1 - m_Star1->Mass()); // JR: todo: find a better way? m_Star2->SetMassLossDiff(mWinds2 - m_Star2->Mass()); // JR: todo: find a better way? @@ -2050,61 +2050,61 @@ void BaseBinaryStar::CalculateWindsMassLoss(double p_Dt) { * Perform mass transfer if required and update individual stars accordingly * * Updates class member variables - * + * * * void CalculateMassTransfer(const double p_Dt) * * @param [IN] p_Dt timestep in Myr */ void BaseBinaryStar::CalculateMassTransfer(const double p_Dt) { - + InitialiseMassTransfer(); // initialise - even if not using mass transfer (sets some flags we might need) - + if (Unbound()) return; // do nothing for unbound binaries - + if (!OPTIONS->UseMassTransfer()) return; // mass transfer not enabled - nothing to do - + if (!m_Star1->IsRLOF() && !m_Star2->IsRLOF()) return; // neither star is overflowing its Roche Lobe - no mass transfer - nothing to do - + if (OPTIONS->CHEMode() != CHE_MODE::NONE && HasTwoOf({STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS}) && HasStarsTouching()) { // CHE enabled and both stars CH? m_Flags.stellarMerger = true; return; } - + if (HasOneOf({STELLAR_TYPE::MASSLESS_REMNANT})) return; // one of the stars is already a massless remnant, nothing to do - + if (m_Star1->IsRLOF() && m_Star2->IsRLOF()) { // both stars overflowing their Roche Lobe? m_CEDetails.CEEnow = true; // yes - common envelope event - no mass transfer return; // and return - nothing (else) to do } - + // one, and only one, star is overflowing its Roche Lobe - resolve mass transfer m_Donor = m_Star2->IsRLOF() ? m_Star2 : m_Star1; // donor is primary unless secondary is overflowing its Roche Lobe m_Accretor = m_Star2->IsRLOF() ? m_Star1 : m_Star2; // accretor is secondary unless secondary is overflowing its Roche Lobe - + m_Donor->UpdateMassTransferDonorHistory(); // add event to MT history of the donor - + // Calculate accretion fraction if stable // This passes the accretor's Roche lobe radius to m_Accretor->CalculateThermalMassAcceptanceRate() // just in case MT_THERMALLY_LIMITED_VARIATION::RADIUS_TO_ROCHELOBE is used; otherwise, the radius input is ignored double accretorRLradius = CalculateRocheLobeRadius_Static(m_Accretor->Mass(), m_Donor->Mass()) * AU_TO_RSOL * m_SemiMajorAxis * (1.0 - m_Eccentricity); bool donorIsHeRich = m_Donor->IsOneOf(He_RICH_TYPES); - + double jLoss = m_JLoss; // specific angular momentum with which mass is lost during non-conservative mass transfer, current timestep if (OPTIONS->MassTransferAngularMomentumLossPrescription() != MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::ARBITRARY) { // arbitrary angular momentum loss prescription? jLoss = CalculateGammaAngularMomentumLoss(); // no - re-calculate angular momentum } - + m_MassTransferTimescale = MT_TIMESCALE::NONE; // initial reset double donorMassLossRateThermal = m_Donor->CalculateThermalMassLossRate(); - + std::tie(std::ignore, m_FractionAccreted) = m_Accretor->CalculateMassAcceptanceRate(donorMassLossRateThermal, m_Accretor->CalculateThermalMassAcceptanceRate(accretorRLradius), donorIsHeRich); double massDiffDonor = MassLossToFitInsideRocheLobe(this, m_Donor, m_Accretor, m_FractionAccreted, 0.0); // use root solver to determine how much mass should be lost from the donor to allow it to fit within the Roche lobe, fixed beta double betaThermal = m_FractionAccreted; // may need these later if the mass transfer proceeds on a thermal timescale, so we store them to avoid recomputing double massDiffDonorThermal = massDiffDonor; - + // can the mass transfer happen on a nuclear timescale? if (m_Donor->IsOneOf(NON_COMPACT_OBJECTS)) { // if MT_ACCRETION_EFFICIENCY_PRESCRIPTION::FIXED_FRACTION, then CalculateMassAcceptanceRate() already computed the correct m_FractionAccreted and massDiffDonor (no difference between nuclear and thermal timescale MT) @@ -2115,7 +2115,7 @@ void BaseBinaryStar::CalculateMassTransfer(const double p_Dt) { std::tie(std::ignore, m_FractionAccreted) = m_Accretor->CalculateMassAcceptanceRate(massDiffDonor/m_Dt, m_Accretor->CalculateThermalMassAcceptanceRate(accretorRLradius), donorIsHeRich); } - + // check that the star really would have consistently fit into the Roche lobe double zetaEquilibrium = m_Donor->CalculateZetaEquilibrium(); double zetaLobe = CalculateZetaRocheLobe(jLoss, m_FractionAccreted); @@ -2134,7 +2134,7 @@ void BaseBinaryStar::CalculateMassTransfer(const double p_Dt) { m_MassLossRateInRLOF = donorMassLossRateThermal; m_MassTransferTimescale = MT_TIMESCALE::THERMAL; } - + double aInitial = m_SemiMajorAxis; // semi-major axis in default units, AU, current timestep double aFinal; // semi-major axis in default units, AU, after next timestep @@ -2144,14 +2144,14 @@ void BaseBinaryStar::CalculateMassTransfer(const double p_Dt) { bool caseBBAlwaysStableOntoNSBH = OPTIONS->CaseBBStabilityPrescription() == CASE_BB_STABILITY_PRESCRIPTION::ALWAYS_STABLE_ONTO_NSBH; bool donorIsHeHGorHeGB = m_Donor->IsOneOf({ STELLAR_TYPE::NAKED_HELIUM_STAR_HERTZSPRUNG_GAP, STELLAR_TYPE::NAKED_HELIUM_STAR_GIANT_BRANCH }); bool accretorIsNSorBH = m_Accretor->IsOneOf({ STELLAR_TYPE::NEUTRON_STAR, STELLAR_TYPE::BLACK_HOLE }); - bool accretorIsWD = m_Accretor->IsOneOf(WHITE_DWARFS); + bool accretorIsWD = m_Accretor->IsOneOf(WHITE_DWARFS); // Determine stability bool isUnstable = false; if (donorIsHeHGorHeGB && (caseBBAlwaysStable || caseBBAlwaysUnstable || (caseBBAlwaysStableOntoNSBH && !accretorIsNSorBH))) { // determine stability based on case BB isUnstable = (caseBBAlwaysUnstable || (caseBBAlwaysStableOntoNSBH && !accretorIsNSorBH)); // already established that donor is HeHG or HeGB - need to check if new case BB prescriptions are added } - else if (accretorIsWD && (m_Accretor->WhiteDwarfAccretionRegime() == ACCRETION_REGIME::HELIUM_WHITE_DWARF_HYDROGEN_ACCUMULATION)) { + else if (accretorIsWD && (m_Accretor->WhiteDwarfAccretionRegime() == ACCRETION_REGIME::HELIUM_WHITE_DWARF_HYDROGEN_ACCUMULATION)) { isUnstable = true; if (!m_Donor->IsOneOf(GIANTS)) m_Flags.stellarMerger = true; } @@ -2169,7 +2169,7 @@ void BaseBinaryStar::CalculateMassTransfer(const double p_Dt) { m_CEDetails.CEEnow = true; } else { // stable MT - + double envMassDonor = m_Donor->Mass() - m_Donor->CoreMass(); bool isEnvelopeRemoved = false; @@ -2210,18 +2210,18 @@ void BaseBinaryStar::CalculateMassTransfer(const double p_Dt) { aFinal = CalculateMassTransferOrbit(m_Donor->Mass(), massDiffDonor, *m_Accretor, m_FractionAccreted, false); // calculate new orbit m_aMassTransferDiff = aFinal - aInitial; // set change in orbit (semi-major axis) - + STELLAR_TYPE stellarTypeDonor = m_Donor->StellarType(); // donor stellar type before resolving envelope loss - + if (isEnvelopeRemoved) { // if this was an envelope stripping episode, resolve envelope loss m_Donor->ResolveEnvelopeLossAndSwitch(); // resolve envelope loss for the donor and switch to new stellar type m_Donor->SetOmega(omegaDonor_pre_MT); // keep the rotation frequency of the core equal to the pre-envelope-loss rotation frequency } - + if (m_Donor->StellarType() != stellarTypeDonor) { // stellar type change? (void)PrintDetailedOutput(m_Id, BSE_DETAILED_RECORD_TYPE::STELLAR_TYPE_CHANGE_DURING_MT); // yes - print (log) detailed output } - + // Check if this was stable mass transfer after a CEE if (m_CEDetails.CEEcount > 0 && !m_RLOFDetails.stableRLOFPostCEE) { m_RLOFDetails.stableRLOFPostCEE = m_MassTransferTrackerHistory == MT_TRACKING::STABLE_2_TO_1_SURV || @@ -2229,9 +2229,9 @@ void BaseBinaryStar::CalculateMassTransfer(const double p_Dt) { } } } - + // Check for recycled pulsars. Not considering CEE as a way of recycling NSs. - if (!m_CEDetails.CEEnow && m_Accretor->IsOneOf({ STELLAR_TYPE::NEUTRON_STAR })) { // accretor is a neutron star, system is not in CE + if (!m_CEDetails.CEEnow && m_Accretor->IsOneOf({ STELLAR_TYPE::NEUTRON_STAR })) { // accretor is a neutron star, system is not in CE m_Accretor->SetRecycledNS(); // accretor is (was) a recycled NS } else if (m_CEDetails.CEEnow && m_Accretor->IsOneOf({ STELLAR_TYPE::NEUTRON_STAR }) @@ -2258,7 +2258,7 @@ void BaseBinaryStar::CalculateMassTransfer(const double p_Dt) { * @return Root found: will be -1.0 if no acceptable real root found */ double BaseBinaryStar::MassLossToFitInsideRocheLobe(BaseBinaryStar *p_Binary, BinaryConstituentStar *p_Donor, BinaryConstituentStar *p_Accretor, double p_FractionAccreted, double p_MaximumAccretedMass) { - + const boost::uintmax_t maxit = ADAPTIVE_RLOF_MAX_ITERATIONS; // Limit to maximum iterations. boost::uintmax_t it = maxit; // Initially our chosen max iterations, but updated with actual. @@ -2271,12 +2271,12 @@ double BaseBinaryStar::MassLossToFitInsideRocheLobe(BaseBinaryStar *p_Binary, Bi // - if the solution is not acceptable, we reduce the search step size and try again // - if we reach the maximum number of search step reduction iterations, or the search step factor reduces to 1.0 (so search step size = 0.0), // we stop and return a negative value for the root (indicating no root found) - + double guess = ADAPTIVE_RLOF_FRACTION_DONOR_GUESS * p_Donor->Mass(); // Rough guess at solution double factorFrac = ADAPTIVE_RLOF_SEARCH_FACTOR_FRAC; // search step size factor fractional part double factor = 1.0 + factorFrac; // factor to determine search step size (size = guess * factor) - + std::pair root(-1.0, -1.0); // initialise root - default return std::size_t tries = 0; // number of tries bool done = false; // finished (found root or exceed maximum tries)? @@ -2341,7 +2341,7 @@ double BaseBinaryStar::MassLossToFitInsideRocheLobe(BaseBinaryStar *p_Binary, Bi } } } - + return root.first + (root.second - root.first) / 2.0; // Midway between brackets is our result, if necessary we could return the result as an interval here. } @@ -2355,13 +2355,13 @@ double BaseBinaryStar::MassLossToFitInsideRocheLobe(BaseBinaryStar *p_Binary, Bi void BaseBinaryStar::InitialiseMassTransfer() { m_MassTransferTrackerHistory = MT_TRACKING::NO_MASS_TRANSFER; // Initiating flag, every timestep, to NO_MASS_TRANSFER. If it undergoes to MT or CEE, it should change. - + m_MassTransferTimescale = MT_TIMESCALE::NONE; m_MassLossRateInRLOF = 0.0; m_Star1->InitialiseMassTransfer(m_CEDetails.CEEnow, m_SemiMajorAxis, m_Eccentricity); // initialise mass transfer for star1 m_Star2->InitialiseMassTransfer(m_CEDetails.CEEnow, m_SemiMajorAxis, m_Eccentricity); // initialise mass transfer for star2 - + if (m_Star1->IsRLOF() || m_Star2->IsRLOF()) { // either star overflowing its Roche Lobe? // yes - mass transfer if not both CH if (OPTIONS->CHEMode() != CHE_MODE::NONE && HasTwoOf({STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS})) { // CHE enabled and both stars CH? @@ -2392,7 +2392,7 @@ void BaseBinaryStar::InitialiseMassTransfer() { m_SemiMajorAxis *= 16.0 * m1m2 * m1m2 / (M * M * M * M) * (1.0 - (m_Eccentricity * m_Eccentricity)); // circularise; conserve angular momentum m_Eccentricity = 0.0; // now circular } - + m_Star1->InitialiseMassTransfer(m_CEDetails.CEEnow, m_SemiMajorAxis, m_Eccentricity); // re-initialise mass transfer for star1 m_Star2->InitialiseMassTransfer(m_CEDetails.CEEnow, m_SemiMajorAxis, m_Eccentricity); // re-initialise mass transfer for star2 @@ -2412,7 +2412,7 @@ void BaseBinaryStar::InitialiseMassTransfer() { m_Star1->InitialiseMassTransfer(m_CEDetails.CEEnow, m_SemiMajorAxis, m_Eccentricity); // re-initialise mass transfer for star1 m_Star2->InitialiseMassTransfer(m_CEDetails.CEEnow, m_SemiMajorAxis, m_Eccentricity); // re-initialise mass transfer for star2 - + // Update previous timestep values to those of the circularised binary to serve as a baseline for future updates. m_SemiMajorAxisPrev = m_SemiMajorAxis; m_EccentricityPrev = m_Eccentricity; @@ -2552,7 +2552,7 @@ void BaseBinaryStar::ResolveMassChanges() { STELLAR_TYPE stellarType1 = m_Star1->StellarTypePrev(); // star 1 stellar type before updating attributes STELLAR_TYPE stellarType2 = m_Star2->StellarTypePrev(); // star 2 stellar type before updating attributes - + double extraAngularMomentumChangeOrbit = 0.0; // star1 @@ -2561,7 +2561,7 @@ void BaseBinaryStar::ResolveMassChanges() { // no need to resolve mass changes if the mass has already been updated if (utils::Compare(m_Star1->MassPrev(), m_Star1->Mass()) == 0) { // resolve mass changes if mass not already updated double massChange = m_Star1->MassLossDiff() + m_Star1->MassTransferDiff(); // mass change due to winds and mass transfer - + if (utils::Compare(massChange, 0.0) != 0) { // winds/mass transfer changes mass? // yes - calculate new angular momentum if(utils::Compare(massChange, 0.0) < 0) { @@ -2575,12 +2575,12 @@ void BaseBinaryStar::ResolveMassChanges() { m_Star1->UpdateAttributes(0.0, 0.0, true); m_Star1->SetAngularMomentum(m_Star1->AngularMomentum() + angularMomentumChangeStar); } - + if(utils::Compare(massChange, 0.0) > 0) // check if star has super-Keplerian angular momentum after mass gain and adjust orbit extraAngularMomentumChangeOrbit += ResolveAccretionAngularMomentumGain(m_Star1, m_Star2, massChange); } } - + // rinse and repeat for star2 // determine if the star's mass has already been updated // (a sign that ResolveEnvelopeLossAndSwitch() has been called after the full envelope was stripped) @@ -2600,7 +2600,7 @@ void BaseBinaryStar::ResolveMassChanges() { m_Star2->UpdateAttributes(0.0, 0.0, true); m_Star2->SetAngularMomentum(m_Star2->AngularMomentum() + angularMomentumChangeStar); } - + if(utils::Compare(massChange, 0.0) > 0) // check if star has super-Keplerian angular momentum after mass gain and adjust orbit extraAngularMomentumChangeOrbit += ResolveAccretionAngularMomentumGain(m_Star2, m_Star1, massChange); } @@ -2621,8 +2621,8 @@ void BaseBinaryStar::ResolveMassChanges() { m_SemiMajorAxis = m_SemiMajorAxis * (1.0 + fractionalChangeAngularMomentum) * (1.0 + fractionalChangeAngularMomentum); // angular momentum is proportional to the square root of the semimajor axis } } - - // envelope ejection for convective envelope stars exceeding threshold luminosity to mass ratio: + + // envelope ejection for convective envelope stars exceeding threshold luminosity to mass ratio: // assume the entire envelope was lost on timescales long relative to the orbit if (m_Star1->EnvelopeJustExpelledByPulsations() || m_Star2->EnvelopeJustExpelledByPulsations()) { // update separation in response to pulsational mass loss @@ -2658,12 +2658,12 @@ void BaseBinaryStar::ResolveMassChanges() { * @return Change in orbital angular momentum due to accretion-induced spin-up */ double BaseBinaryStar::ResolveAccretionAngularMomentumGain(BinaryConstituentStar *p_Accretor, BinaryConstituentStar *p_Donor, double p_MassChange) { - + double extraAngularMomentumChangeOrbit = 0.0; // return value double angularMomentumChangeStar; switch (OPTIONS->ResponseToSpinUp()) { - + case RESPONSE_TO_SPIN_UP::KEPLERIAN_LIMIT: { double keplerianFrequency = p_Accretor->OmegaBreak(); // ignore mass and radius change at this stage double maxAngularMomentumGain = p_Accretor->CalculateMomentOfInertiaAU() * keplerianFrequency - p_Accretor->AngularMomentum(); @@ -2679,7 +2679,7 @@ double BaseBinaryStar::ResolveAccretionAngularMomentumGain(BinaryConstituentStar p_Accretor->UpdateAttributes(0.0, 0.0, true); p_Accretor->SetAngularMomentum(p_Accretor->AngularMomentum() + angularMomentumChangeStar); // note that because stellar properties have been updated, the actual angular momentum may be slightly over or under the Keplerian limit } break; - + case RESPONSE_TO_SPIN_UP::TRANSFER_TO_ORBIT: { double initialAngularMomentum = p_Accretor->AngularMomentum(); (void)p_Accretor->UpdateAttributes(p_MassChange, 0.0); // update mass for star @@ -2693,7 +2693,7 @@ double BaseBinaryStar::ResolveAccretionAngularMomentumGain(BinaryConstituentStar p_Accretor->SetAngularMomentum(std::min(m_Accretor->AngularMomentum() + angularMomentumChangeStar, maxAngularMomentum)); extraAngularMomentumChangeOrbit = - (p_Accretor->AngularMomentum() - initialAngularMomentum); } break; - + case RESPONSE_TO_SPIN_UP::NO_LIMIT: { (void)p_Accretor->UpdateAttributes(p_MassChange, 0.0); // update mass for star p_Accretor->UpdateInitialMass(); // update effective initial mass of star (MS, HG & HeMS) @@ -2704,7 +2704,7 @@ double BaseBinaryStar::ResolveAccretionAngularMomentumGain(BinaryConstituentStar p_Accretor->SetAngularMomentum(m_Accretor->AngularMomentum() + angularMomentumChangeStar); extraAngularMomentumChangeOrbit = -angularMomentumChangeStar; } break; - + default: // unknown prescription // the only way this can happen is if someone added a RESPONSE_TO_SPIN_UP // and it isn't accounted for in this code. We should not default here, with or without a warning. @@ -2712,7 +2712,7 @@ double BaseBinaryStar::ResolveAccretionAngularMomentumGain(BinaryConstituentStar // be flagged as an error and result in termination of the evolution of the binary. // The correct fix for this is to add code for the missing prescription or, if the missing // prescription is superfluous, remove it from the option. - + THROW_ERROR(ERROR::UNKNOWN_RESPONSE_TO_SPIN_UP); } @@ -2723,7 +2723,7 @@ double BaseBinaryStar::ResolveAccretionAngularMomentumGain(BinaryConstituentStar /* * Process tides if required * - * + * * void BaseBinaryStar::ProcessTides(const double p_Dt) * * @param [in] p_Dt Timestep (in Myr) @@ -2733,10 +2733,10 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { if (!m_Unbound) { // binary bound? // yes - process tides if enabled double omega = OrbitalAngularVelocity(); - + switch (OPTIONS->TidesPrescription()) { // which tides prescription? case TIDES_PRESCRIPTION::NONE: { // NONE - tides not enabled - + // do nothing, except for CHE stars which are allowed to remain CHE // if at least one star is CHE, then circularize the binary and synchronize only the CHE stars conserving total angular momentum @@ -2749,7 +2749,7 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { cheI1 = m_Star1->CalculateMomentOfInertiaAU(); cheLtot += m_Star1->AngularMomentum(); } - + if (m_Star2->StellarType() == STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS) { cheI2 = m_Star2->CalculateMomentOfInertiaAU(); cheLtot += m_Star2->AngularMomentum(); @@ -2759,8 +2759,8 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { if (omegaSync >= 0.0) { // root found? (don't use utils::Compare() here) // yes if (m_Star1->StellarType() == STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS){m_Star1->SetOmega(omegaSync);} - if (m_Star2->StellarType() == STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS){m_Star2->SetOmega(omegaSync);} - + if (m_Star2->StellarType() == STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS){m_Star2->SetOmega(omegaSync);} + m_SemiMajorAxis = std::cbrt(G_AU_Msol_yr * (m_Star1->Mass() + m_Star2->Mass()) / omegaSync / omegaSync); // re-calculate semi-major axis m_Eccentricity = 0.0; // circularise m_TotalAngularMomentum = CalculateAngularMomentum(); // re-calculate total angular momentum @@ -2771,13 +2771,13 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { if (m_Star2->StellarType() == STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS){m_Star2->SetOmega(omega);} } } - + } break; - + case TIDES_PRESCRIPTION::KAPIL2026: { // KAPIL2026 // Evolve binary semi-major axis, eccentricity, and spin of each star based on Kapil et al., 2026 - double jTotPrev = CalculateAngularMomentum(); + double jTotPrev = CalculateAngularMomentum(); DBL_DBL_DBL_DBL ImKnm1_tidal = m_Star1->CalculateImKnmTidal(omega, m_SemiMajorAxis, m_Star2->Mass()); DBL_DBL_DBL_DBL ImKnm2_tidal = m_Star2->CalculateImKnmTidal(omega, m_SemiMajorAxis, m_Star1->Mass()); @@ -2790,36 +2790,36 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { double DOmega1Dt_tidal = CalculateDOmegaTidalDt(ImKnm1_tidal, m_Star1); // change in spin from star1 double DOmega2Dt_tidal = CalculateDOmegaTidalDt(ImKnm2_tidal, m_Star2); // change in spin from star2 - + // limit change in stellar and orbital properties from tides to a maximum fraction of the current value double fraction_tidal_change = 1.0; fraction_tidal_change = std::min(fraction_tidal_change, std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * OrbitalAngularVelocity() / (DOmega1Dt_tidal * p_Dt * MYR_TO_YEAR))); fraction_tidal_change = std::min(fraction_tidal_change, std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * OrbitalAngularVelocity() / (DOmega2Dt_tidal * p_Dt * MYR_TO_YEAR))); fraction_tidal_change = std::min(fraction_tidal_change, std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * m_SemiMajorAxis / ((DSemiMajorAxis1Dt_tidal + DSemiMajorAxis2Dt_tidal) * p_Dt * MYR_TO_YEAR))); fraction_tidal_change = std::min(fraction_tidal_change, std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * m_Eccentricity / ((DEccentricity1Dt_tidal + DEccentricity2Dt_tidal) * p_Dt * MYR_TO_YEAR))); - + m_SemiMajorAxis = m_SemiMajorAxis + fraction_tidal_change * ((DSemiMajorAxis1Dt_tidal + DSemiMajorAxis2Dt_tidal) * p_Dt * MYR_TO_YEAR); // evolve separation m_Eccentricity = m_Eccentricity + fraction_tidal_change * ((DEccentricity1Dt_tidal + DEccentricity2Dt_tidal) * p_Dt * MYR_TO_YEAR); // evolve eccentricity - + // correct stellar spins by an overall constant to enforce total angular momentum conservation while preserving spin ratio // corrective_factor = (L_orb_i + I*omega1_i + I*omega2_i - L_orb_f) / (I1*omega1_f + I2*omega2_f) // corrective_factor should be 1.0 if angular momentum is conserved properly by the secular equations - double angular_momentum_orbital = CalculateOrbitalAngularMomentum(m_Star1->Mass(), m_Star2->Mass(), m_SemiMajorAxis, m_Eccentricity); + double angular_momentum_orbital = CalculateOrbitalAngularMomentum(m_Star1->Mass(), m_Star2->Mass(), m_SemiMajorAxis, m_Eccentricity); double omega1Proposed = m_Star1->Omega() + fraction_tidal_change * (DOmega1Dt_tidal * p_Dt * MYR_TO_YEAR); // evolve star 1 spin double omega2Proposed = m_Star2->Omega() + fraction_tidal_change * (DOmega2Dt_tidal * p_Dt * MYR_TO_YEAR); // evolve star 2 spin double omega_corrective_factor = (jTotPrev - angular_momentum_orbital) / (m_Star1->CalculateMomentOfInertiaAU() * omega1Proposed + m_Star2->CalculateMomentOfInertiaAU() * omega2Proposed); omega_corrective_factor = std::isinf(omega_corrective_factor) || std::isnan(omega_corrective_factor) ? 1.0 : omega_corrective_factor; - + m_Star1->SetOmega(omega1Proposed * omega_corrective_factor); m_Star2->SetOmega(omega2Proposed * omega_corrective_factor); m_CircularizationTimescale = - m_Eccentricity / (DEccentricity1Dt_tidal + DEccentricity2Dt_tidal) * YEAR_TO_MYR; // Circularization timescale in Myr (for output files) m_CircularizationTimescale = (std::isnan(m_CircularizationTimescale) || std::isinf(m_CircularizationTimescale))? 0.0 : m_CircularizationTimescale; // check for NaN or Inf for circular binaries - + m_SynchronizationTimescale1 = - (m_Star1->Omega() - omega) / DOmega1Dt_tidal * YEAR_TO_MYR; // Synchronization timescale for Star1 in Myr (for output files) m_SynchronizationTimescale1 = (std::isnan(m_SynchronizationTimescale1) || std::isinf(m_SynchronizationTimescale1))? 0.0 : m_SynchronizationTimescale1; // check for NaN or Inf for synchronized binaries - + m_SynchronizationTimescale2 = - (m_Star2->Omega() - omega) / DOmega2Dt_tidal * YEAR_TO_MYR; // Synchronization timescale for Star2 in Myr (for output files) m_SynchronizationTimescale2 = (std::isnan(m_SynchronizationTimescale2) || std::isinf(m_SynchronizationTimescale2))? 0.0 : m_SynchronizationTimescale2; // check for NaN or Inf for synchronized binaries @@ -2846,14 +2846,14 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { m_OrbitalAngularMomentum = CalculateOrbitalAngularMomentum(m_Star1->Mass(), m_Star2->Mass(), m_SemiMajorAxis, m_Eccentricity); } else { // no (real) root found - + // no real root found - push the binary to a common envelope // place the constituent star closest to RLOF at RLOF and use that to // calculate semi-major axis, then use that to calculate omega - + double ratio1 = m_Star1->StarToRocheLobeRadiusRatio(m_SemiMajorAxis, m_Star1->Mass()); // star 1 ratio of radius to Roche lobe radius double ratio2 = m_Star2->StarToRocheLobeRadiusRatio(m_SemiMajorAxis, m_Star2->Mass()); // star 2 ratio of radius to Roche lobe radius - + double radius; double mass1; double mass2; @@ -2867,13 +2867,13 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { mass1 = m_Star2->Mass(); mass2 = m_Star1->Mass(); } - + m_Eccentricity = 0.0; // assume circular m_SemiMajorAxis = radius * RSOL_TO_AU / CalculateRocheLobeRadius_Static(mass1, mass2); // new semi-major axis - should tip into CE } } break; - case TIDES_PRESCRIPTION::ZAHN1977: { + case TIDES_PRESCRIPTION::ZAHN1977: { // Evolve binary semi-major axis, eccentricity, and spin of each star based on Zahn (1977) double envMass1, envMassMax1; std::tie(envMass1, envMassMax1) = m_Star1->CalculateConvectiveEnvelopeMass(); @@ -2917,16 +2917,16 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { double w32_1 = (3.0 * omega - 2.0 * omega1); double w32_2 = (3.0 * omega - 2.0 * omega2); - + // Compute equilibrium tidal Love numbers based on Zahn (1977), Eq. (4.1), (4.2) - double ImK22_Zahn_Equilibrium1 = 2.0 * kOverT1 * (R1_AU * R1_AU * R1_AU / (G_AU_Msol_yr * m_Star1->Mass())) * w22_1; + double ImK22_Zahn_Equilibrium1 = 2.0 * kOverT1 * (R1_AU * R1_AU * R1_AU / (G_AU_Msol_yr * m_Star1->Mass())) * w22_1; ImK22_Zahn_Equilibrium1 = std::isnan(ImK22_Zahn_Equilibrium1) ? 0.0 : ImK22_Zahn_Equilibrium1; // check for NaN - double ImK22_Zahn_Equilibrium2 = 2.0 * kOverT2 * (R2_AU * R2_AU * R2_AU / (G_AU_Msol_yr * m_Star2->Mass())) * w22_2; + double ImK22_Zahn_Equilibrium2 = 2.0 * kOverT2 * (R2_AU * R2_AU * R2_AU / (G_AU_Msol_yr * m_Star2->Mass())) * w22_2; ImK22_Zahn_Equilibrium2 = std::isnan(ImK22_Zahn_Equilibrium2) ? 0.0 : ImK22_Zahn_Equilibrium2; // check for NaN - double ImK10_Zahn_Equilibrium1 = 2.0 * kOverT1 * (R1_AU * R1_AU * R1_AU / (G_AU_Msol_yr * m_Star1->Mass())) * w10; + double ImK10_Zahn_Equilibrium1 = 2.0 * kOverT1 * (R1_AU * R1_AU * R1_AU / (G_AU_Msol_yr * m_Star1->Mass())) * w10; ImK10_Zahn_Equilibrium1 = std::isnan(ImK10_Zahn_Equilibrium1) ? 0.0 : ImK10_Zahn_Equilibrium1; // check for NaN - double ImK10_Zahn_Equilibrium2 = 2.0 * kOverT2 * (R2_AU * R2_AU * R2_AU / (G_AU_Msol_yr * m_Star2->Mass())) * w10; + double ImK10_Zahn_Equilibrium2 = 2.0 * kOverT2 * (R2_AU * R2_AU * R2_AU / (G_AU_Msol_yr * m_Star2->Mass())) * w10; ImK10_Zahn_Equilibrium2 = std::isnan(ImK10_Zahn_Equilibrium2) ? 0.0 : ImK10_Zahn_Equilibrium2; // check for NaN double ImK12_Zahn_Equilibrium1 = 2.0 * kOverT1 * (R1_AU * R1_AU * R1_AU / (G_AU_Msol_yr * m_Star1->Mass())) * w12_1; @@ -2954,12 +2954,12 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { ImK12_Zahn_Dynamical1 = std::isnan(ImK12_Zahn_Dynamical1) ? 0.0 : ImK12_Zahn_Dynamical1; // check for NaN double ImK12_Zahn_Dynamical2 = std::copysign(1.0, w12_2) * E2_Dynamical_Zahn2 * std::pow(std::sqrt(R2_AU * R2_AU * R2_AU / (G_AU_Msol_yr * m_Star2->Mass())) * std::abs(w12_2), 8.0/3.0); ImK12_Zahn_Dynamical2 = std::isnan(ImK12_Zahn_Dynamical2) ? 0.0 : ImK12_Zahn_Dynamical2; // check for NaN - + double ImK32_Zahn_Dynamical1 = std::copysign(1.0, w32_1) * E2_Dynamical_Zahn1 * std::pow(std::sqrt(R1_AU * R1_AU * R1_AU / (G_AU_Msol_yr * m_Star1->Mass())) * std::abs(w32_1), 8.0/3.0); ImK32_Zahn_Dynamical1 = std::isnan(ImK32_Zahn_Dynamical1) ? 0.0 : ImK32_Zahn_Dynamical1; // check for NaN double ImK32_Zahn_Dynamical2 = std::copysign(1.0, w32_2) * E2_Dynamical_Zahn2 * std::pow(std::sqrt(R2_AU * R2_AU * R2_AU / (G_AU_Msol_yr * m_Star2->Mass())) * std::abs(w32_2), 8.0/3.0); ImK32_Zahn_Dynamical2 = std::isnan(ImK32_Zahn_Dynamical2) ? 0.0 : ImK32_Zahn_Dynamical2; // check for NaN - + // Combine equilibrium and dynamical tidal Love numbers DBL_DBL_DBL_DBL ImKnm1_tidal = std::make_tuple(ImK10_Zahn_Equilibrium1+ImK10_Zahn_Dynamical1, ImK12_Zahn_Equilibrium1+ImK12_Zahn_Dynamical1, ImK22_Zahn_Equilibrium1 + ImK22_Zahn_Dynamical1, ImK32_Zahn_Equilibrium1 + ImK32_Zahn_Dynamical1); DBL_DBL_DBL_DBL ImKnm2_tidal = std::make_tuple(ImK10_Zahn_Equilibrium2+ImK10_Zahn_Dynamical2, ImK12_Zahn_Equilibrium2+ImK12_Zahn_Dynamical2, ImK22_Zahn_Equilibrium2 + ImK22_Zahn_Dynamical2, ImK32_Zahn_Equilibrium2 + ImK32_Zahn_Dynamical2); @@ -2973,25 +2973,25 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { double DOmega1Dt_tidal = CalculateDOmegaTidalDt(ImKnm1_tidal, m_Star1); // change in spin from star1 double DOmega2Dt_tidal = CalculateDOmegaTidalDt(ImKnm2_tidal, m_Star2); // change in spin from star2 - + // limit change in stellar and orbital properties from tides to a maximum fraction of the current value double fraction_tidal_change = 1.0; fraction_tidal_change = std::min(fraction_tidal_change, std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * OrbitalAngularVelocity() / (DOmega1Dt_tidal * p_Dt * MYR_TO_YEAR))); fraction_tidal_change = std::min(fraction_tidal_change, std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * OrbitalAngularVelocity() / (DOmega2Dt_tidal * p_Dt * MYR_TO_YEAR))); fraction_tidal_change = std::min(fraction_tidal_change, std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * m_SemiMajorAxis / ((DSemiMajorAxis1Dt_tidal + DSemiMajorAxis2Dt_tidal) * p_Dt * MYR_TO_YEAR))); fraction_tidal_change = std::min(fraction_tidal_change, std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * m_Eccentricity / ((DEccentricity1Dt_tidal + DEccentricity2Dt_tidal) * p_Dt * MYR_TO_YEAR))); - + m_Star1->SetOmega(m_Star1->Omega() + fraction_tidal_change * (DOmega1Dt_tidal * p_Dt * MYR_TO_YEAR)); // evolve star 1 spin m_Star2->SetOmega(m_Star2->Omega() + fraction_tidal_change * (DOmega2Dt_tidal * p_Dt * MYR_TO_YEAR)); // evolve star 2 spin m_SemiMajorAxis = m_SemiMajorAxis + fraction_tidal_change * ((DSemiMajorAxis1Dt_tidal + DSemiMajorAxis2Dt_tidal) * p_Dt * MYR_TO_YEAR); // evolve separation m_Eccentricity = m_Eccentricity + fraction_tidal_change * ((DEccentricity1Dt_tidal + DEccentricity2Dt_tidal) * p_Dt * MYR_TO_YEAR); // evolve eccentricity - + m_CircularizationTimescale = - m_Eccentricity / (DEccentricity1Dt_tidal + DEccentricity2Dt_tidal) * YEAR_TO_MYR; // Circularization timescale in Myr (for output files) m_CircularizationTimescale = (std::isnan(m_CircularizationTimescale) || std::isinf(m_CircularizationTimescale))? 0.0 : m_CircularizationTimescale; // check for NaN or Inf for circular binaries - + m_SynchronizationTimescale1 = - (m_Star1->Omega() - omega) / DOmega1Dt_tidal * YEAR_TO_MYR; // Synchronization timescale for Star1 in Myr (for output files) m_SynchronizationTimescale1 = (std::isnan(m_SynchronizationTimescale1) || std::isinf(m_SynchronizationTimescale1))? 0.0 : m_SynchronizationTimescale1; // check for NaN or Inf for synchronized binaries - + m_SynchronizationTimescale2 = - (m_Star2->Omega() - omega) / DOmega2Dt_tidal * YEAR_TO_MYR; // Synchronization timescale for Star2 in Myr (for output files) m_SynchronizationTimescale2 = (std::isnan(m_SynchronizationTimescale2) || std::isinf(m_SynchronizationTimescale2))? 0.0 : m_SynchronizationTimescale2; // check for NaN or Inf for synchronized binaries @@ -3031,7 +3031,7 @@ void BaseBinaryStar::ProcessTides(const double p_Dt) { * @return Root found: will be -1.0 if no acceptable real root found */ double BaseBinaryStar::OmegaAfterSynchronisation(const double p_M1, const double p_M2, const double p_I1, const double p_I2, const double p_Ltot, const double p_Guess) { - + const boost::uintmax_t maxit = TIDES_OMEGA_MAX_ITERATIONS; // maximum iterations for root finder boost::uintmax_t it = maxit; // initially max iterations, but updated with actual count @@ -3063,7 +3063,7 @@ double BaseBinaryStar::OmegaAfterSynchronisation(const double p_M1, const double while (!done) { // while no acceptable root found bool isRising = func(p_Guess) >= func(p_Guess * factor) ? false : true; // gradient direction from guess to upper search increment - + // run the root finder // regardless of any exceptions or errors, display any problems as a warning, then // check if the root returned is within tolerance - so even if the root finder @@ -3123,9 +3123,9 @@ double BaseBinaryStar::OmegaAfterSynchronisation(const double p_M1, const double * This function uses Peters 1964 to approximate the effects of GW emission with two steps: * - Calculate the change in semi-major axis (m_SemiMajorAxis) per time given by eq 5.6. * - Calculate the change in eccentricity (m_Eccentricity) per time given by eq 5.7. - * + * * m_DaDtGW and m_DeDtGW are updated so that they can be used to calculate the timestep dynamically. - * + * * * void CalculateGravitationalRadiation() */ @@ -3154,10 +3154,10 @@ void BaseBinaryStar::CalculateGravitationalRadiation() { /* * Emit a GW based on the effects calculated by BaseBinaryStar::CalculateGravitationalRadiation(). - * + * * This function updates the semi-major axis, eccentricity, and previous eccentricity values * (m_SemiMajorAxis, m_Eccentricity, m_SemiMajorAxisPrev, and m_EccentricityPrev) as a result of emitting GWs. - * + * * * void EmitGravitationalRadiation(const double p_Dt) * @@ -3172,21 +3172,21 @@ void BaseBinaryStar::EmitGravitationalWave(const double p_Dt) { // Update the eccentricity m_Eccentricity += m_DeDtGW * p_Dt; - // Save values as previous timestep - m_SemiMajorAxisPrev = m_SemiMajorAxis; + // Save values as previous timestep + m_SemiMajorAxisPrev = m_SemiMajorAxis; m_EccentricityPrev = m_Eccentricity; } -/* +/* * Choose a timestep based on the parameters of the binary. * - * Returns a timestep based on the minimal timesteps of the component stars, + * Returns a timestep based on the minimal timesteps of the component stars, * adjusted if relevant by the orbital evolution due to GW radiation - * + * * * double ChooseTimestep(const double p_Multiplier) - * + * * @param [IN] p_Factor factor applied to timestep (in addition to multipliers) * @return new timestep in Myr */ @@ -3205,21 +3205,21 @@ double BaseBinaryStar::ChooseTimestep(const double p_Factor) { if ((utils::Compare(radiusToRL1 * (1.0 + 2.0 * OPTIONS->RadialChangeFraction()), 1.0) >= 0 && utils::Compare(radiusToRL1 * (1.0 + 0.5 * OPTIONS->RadialChangeFraction()), 1.0) <= 0) || (utils::Compare(radiusToRL2 * (1.0 + 2.0 * OPTIONS->RadialChangeFraction()), 1.0) >= 0 && utils::Compare(radiusToRL2 * (1.0 + 0.5 * OPTIONS->RadialChangeFraction()), 1.0) <= 0)) dt /= 2.0; - + // limit time step for stars losing mass on nuclear timescale if (utils::Compare(radiusToRL1 * (1.0 + 0.5 * OPTIONS->RadialChangeFraction()), 1.0) > 0) dt = std::min(dt, 0.5 * OPTIONS->RadialChangeFraction() * m_Star1->CalculateRadialExpansionTimescaleDuringMassTransfer()); if (utils::Compare(radiusToRL2 * (1.0 + 0.5 * OPTIONS->RadialChangeFraction()), 1.0) > 0) dt = std::min(dt, 0.5 * OPTIONS->RadialChangeFraction() * m_Star2->CalculateRadialExpansionTimescaleDuringMassTransfer()); - + if (OPTIONS->EmitGravitationalRadiation()) { // emitting GWs? dt = std::min(dt, -1.0E-2 * m_SemiMajorAxis / m_DaDtGW); // yes - reduce timestep if necessary to ensure that the orbital separation does not change by more than ~1% per timestep due to GW emission } - + if (OPTIONS->TidesPrescription() == TIDES_PRESCRIPTION::KAPIL2026) { // tides prescription = KAPIL2026 - // yes - need to adjust dt + // yes - need to adjust dt double omega = OrbitalAngularVelocity(); - + DBL_DBL_DBL_DBL ImKnm1_tidal = m_Star1->CalculateImKnmTidal(omega, m_SemiMajorAxis, m_Star2->Mass()); DBL_DBL_DBL_DBL ImKnm2_tidal = m_Star2->CalculateImKnmTidal(omega, m_SemiMajorAxis, m_Star1->Mass()); @@ -3228,12 +3228,12 @@ double BaseBinaryStar::ChooseTimestep(const double p_Factor) { double DEccentricity1Dt_tidal = CalculateDEccentricityTidalDt(ImKnm1_tidal, m_Star1); double DEccentricity2Dt_tidal = CalculateDEccentricityTidalDt(ImKnm2_tidal, m_Star2); - + double DOmega1Dt_tidal = CalculateDOmegaTidalDt(ImKnm1_tidal, m_Star1); double DOmega2Dt_tidal = CalculateDOmegaTidalDt(ImKnm2_tidal, m_Star2); - + // Ensure that the change in orbital and spin properties due to tides in a single timestep is constrained (to 1 percent by default) - // Limit the spin evolution of each star based on the orbital frequency rather than its spin frequency, since tides should not cause major problems until synchronization. + // Limit the spin evolution of each star based on the orbital frequency rather than its spin frequency, since tides should not cause major problems until synchronization. double Dt_SemiMajorAxis1Tidal = utils::Compare(DSemiMajorAxis1Dt_tidal, 0.0) == 0 ? dt : std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * m_SemiMajorAxis / DSemiMajorAxis1Dt_tidal) * YEAR_TO_MYR; double Dt_SemiMajorAxis2Tidal = utils::Compare(DSemiMajorAxis2Dt_tidal, 0.0) == 0 ? dt : std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * m_SemiMajorAxis / DSemiMajorAxis2Dt_tidal) * YEAR_TO_MYR; double Dt_SemiMajorAxisTidal = std::min(Dt_SemiMajorAxis1Tidal, Dt_SemiMajorAxis2Tidal); @@ -3245,7 +3245,7 @@ double BaseBinaryStar::ChooseTimestep(const double p_Factor) { double Dt_Omega1Tidal = utils::Compare(DOmega1Dt_tidal, 0.0) == 0 ? dt : std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * omega / DOmega1Dt_tidal) * YEAR_TO_MYR; double Dt_Omega2Tidal = utils::Compare(DOmega2Dt_tidal, 0.0) == 0 ? dt : std::abs(TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC * omega / DOmega2Dt_tidal) * YEAR_TO_MYR; double Dt_OmegaTidal = std::min(Dt_Omega1Tidal, Dt_Omega2Tidal); - + dt = std::min(dt, std::min(Dt_SemiMajorAxisTidal, std::min(Dt_EccentricityTidal, Dt_OmegaTidal))); } } @@ -3268,7 +3268,7 @@ double BaseBinaryStar::ChooseTimestep(const double p_Factor) { * - calculate total energy and angular momentum after mass changes * - update pulsar parameters * - * + * * void EvaluateBinary(const double p_Dt) * * @param [in] p_Dt Timestep (in Myr) @@ -3294,7 +3294,7 @@ void BaseBinaryStar::EvaluateBinary(const double p_Dt) { EvaluateSupernovae(); // evaluate supernovae (both stars) - immediate event (void)PrintDetailedOutput(m_Id, BSE_DETAILED_RECORD_TYPE::POST_SN); // print (log) detailed output if (HasOneOf({ STELLAR_TYPE::NEUTRON_STAR })) { - (void)PrintPulsarEvolutionParameters(BSE_PULSAR_RECORD_TYPE::POST_SN); // print (log) pulsar evolution parameters + (void)PrintPulsarEvolutionParameters(BSE_PULSAR_RECORD_TYPE::POST_SN); // print (log) pulsar evolution parameters } } else { @@ -3303,7 +3303,7 @@ void BaseBinaryStar::EvaluateBinary(const double p_Dt) { if (HasStarsTouching()) { // if stars emerged from mass transfer as touching, it's a merger m_Flags.stellarMerger = true; - + // Set Roche lobe flags for both stars so that they show correct RLOF status m_Star1->SetRocheLobeFlags(m_CEDetails.CEEnow, m_SemiMajorAxis, m_Eccentricity); // set Roche lobe flags for star1 m_Star2->SetRocheLobeFlags(m_CEDetails.CEEnow, m_SemiMajorAxis, m_Eccentricity); // set Roche lobe flags for star2 @@ -3317,7 +3317,7 @@ void BaseBinaryStar::EvaluateBinary(const double p_Dt) { EvaluateSupernovae(); // evaluate supernovae (both stars) if mass changes are responsible for a supernova (void)PrintDetailedOutput(m_Id, BSE_DETAILED_RECORD_TYPE::POST_SN); // print (log) detailed output if (HasOneOf({ STELLAR_TYPE::NEUTRON_STAR })) { - (void)PrintPulsarEvolutionParameters(BSE_PULSAR_RECORD_TYPE::POST_SN); // print (log) pulsar evolution parameters + (void)PrintPulsarEvolutionParameters(BSE_PULSAR_RECORD_TYPE::POST_SN); // print (log) pulsar evolution parameters } } @@ -3361,7 +3361,7 @@ void BaseBinaryStar::EvolveOneTimestepPreamble(const double p_Dt) { * necessary, and return the error value to the caller. We don't rethrow exceptions * here - we expect th ecaller to examine the error return and do whatever is required * to manage any errors. - * + * * * ERROR EvolveOneTimestep(const double p_Dt, const int p_LogFileId) * @@ -3372,7 +3372,7 @@ ERROR BaseBinaryStar::EvolveOneTimestep(const double p_Dt) { EvolveOneTimestepPreamble(p_Dt); - try { + try { m_Star1->AgeOneTimestep(p_Dt, true); // Age the primary one timestep and switch to the new stellar type if necessary m_Star2->AgeOneTimestep(p_Dt, true); // Age the secondary one timestep and switch to the new stellar type if necessary @@ -3468,7 +3468,7 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { // - don't quantise // - don't apply timestep multiplier // (we assume user wants the timesteps in the file) - // + // // Open question: should we clamp this to NUCLEAR_MINIMUM_TIMESTEP? dt = timesteps[0]; } @@ -3484,7 +3484,7 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { dt = ChooseTimestep(0.001); // calculate timestep - make first step small } - unsigned long int stepNum = 1; + unsigned long int stepNum = 1; while (evolutionStatus == EVOLUTION_STATUS::CONTINUE) { // perform binary evolution - iterate over timesteps until told to stop @@ -3495,7 +3495,7 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { EvaluateBinary(dt); // evaluate the binary at this timestep (void)PrintDetailedOutput(m_Id, BSE_DETAILED_RECORD_TYPE::POST_BINARY_TIMESTEP); // print (log) detailed output - + (void)PrintRLOFParameters(); // print (log) RLOF parameters // check for reasons to not continue evolution @@ -3530,9 +3530,9 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { if (evolutionStatus == EVOLUTION_STATUS::CONTINUE) { // continue evolution? // yes if (HasOneOf({ STELLAR_TYPE::NEUTRON_STAR })) { - (void)PrintPulsarEvolutionParameters(BSE_PULSAR_RECORD_TYPE::POST_BINARY_TIMESTEP); // print (log) pulsar evolution parameters + (void)PrintPulsarEvolutionParameters(BSE_PULSAR_RECORD_TYPE::POST_BINARY_TIMESTEP); // print (log) pulsar evolution parameters } - + if (IsDCO() && !IsUnbound()) { // bound double compact object? if (m_DCOFormationTime == DEFAULT_INITIAL_DOUBLE_VALUE) { // DCO not yet evaluated -- to ensure that the coalescence is only resolved once ResolveCoalescence(); // yes - resolve coalescence @@ -3558,8 +3558,8 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { else if (!OPTIONS->EvolveDoubleWhiteDwarfs() && IsWDandWD()) { // double WD and their evolution is not enabled? evolutionStatus = EVOLUTION_STATUS::WD_WD; // yes - do not evolve double WD systems } - else if ((HasOneOf({ STELLAR_TYPE::MASSLESS_REMNANT }) && !OPTIONS->EvolveMainSequenceMergers()) || - IsMRandRemant()) { // at least one massless remnant and not evolving MS merger products, or is MR + stellar remnant + else if ((HasOneOf({ STELLAR_TYPE::MASSLESS_REMNANT }) && !OPTIONS->EvolveMainSequenceMergers()) || + IsMRandRemant()) { // at least one massless remnant and not evolving MS merger products, or is MR + stellar remnant if (IsMRandNS() && OPTIONS->EvolvePulsars()){ // However, keep evolving if the stellar remnant is a neutron star and we are evolving pulsars evolutionStatus = EVOLUTION_STATUS::CONTINUE; } @@ -3586,7 +3586,7 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { // don't use utils::Compare() here - not for time/age bool printSysSnapshotRec = false; // so we only print this timestep once - + // age threshold // we print a record each timestep that either star crosses the threshold from below // notes: @@ -3599,7 +3599,7 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { for (size_t threshold = 0; threshold < OPTIONS->SystemSnapshotAgeThresholds().size(); threshold++) { // for each system snapshot age threshold double thresholdValue = OPTIONS->SystemSnapshotAgeThresholds(threshold); // this threshold value - + // flag need to print (log) system snapshot record // we don't want to print multiple records for the same timestep, so we flag need rather than print here printSysSnapshotRec |= m_SystemSnapshotAgeFlags1[threshold] < 0.0 && m_Star1->Age() >= thresholdValue; // star1 @@ -3635,18 +3635,18 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { // yes // if user selects to emit GWs, calculate the effects of radiation // - note that this is placed before the call to ChooseTimestep() because when - // emitting GWs the timestep is a function of gravitational radiation + // emitting GWs the timestep is a function of gravitational radiation if (OPTIONS->EmitGravitationalRadiation()) CalculateGravitationalRadiation(); m_Star2->UpdatePreviousTimestepDuration(); // update stellar property for star2 m_Star1->UpdatePreviousTimestepDuration(); // update stellar property for star1 - + if (usingProvidedTimesteps) { // user-provided timesteps? // select a timestep // - don't quantise // - don't apply timestep multiplier // (we assume user wants the timesteps in the file) - // + // // Open question: should we clamp this to NUCLEAR_MINIMUM_TIMESTEP? dt = timesteps[stepNum]; } @@ -3680,7 +3680,7 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { fetestexcept(FE_UNDERFLOW)) m_Error = ERROR::FLOATING_POINT_ERROR; // floating-point error feclearexcept(FE_ALL_EXCEPT); // clear all FE traps - + } catch (const std::runtime_error& e) { // catch runtime exceptions // anything we catch here should not already have been displayed to the user, @@ -3711,4 +3711,3 @@ EVOLUTION_STATUS BaseBinaryStar::Evolve() { return evolutionStatus; } - diff --git a/src/BaseBinaryStar.h b/src/BaseBinaryStar.h index d6a416351..2fec6fefe 100644 --- a/src/BaseBinaryStar.h +++ b/src/BaseBinaryStar.h @@ -48,7 +48,7 @@ class BaseBinaryStar { m_Unbound = p_Star.m_Unbound; m_DCOFormationTime = p_Star.m_DCOFormationTime; - + m_Dt = p_Star.m_Dt; m_Eccentricity = p_Star.m_Eccentricity; @@ -58,7 +58,7 @@ class BaseBinaryStar { m_EccentricityPrev = p_Star.m_EccentricityPrev; m_Flags = p_Star.m_Flags; - + m_FractionAccreted = p_Star.m_FractionAccreted; m_CosIPrime = p_Star.m_CosIPrime; @@ -71,14 +71,14 @@ class BaseBinaryStar { m_MassEnv1 = p_Star.m_MassEnv1; m_MassEnv2 = p_Star.m_MassEnv2; - + m_MassLossRateInRLOF = p_Star.m_MassLossRateInRLOF; m_aMassLossDiff = p_Star.m_aMassLossDiff; m_MassTransfer = p_Star.m_MassTransfer; m_aMassTransferDiff = p_Star.m_aMassTransferDiff; - + m_MassTransferTimescale = p_Star.m_MassTransferTimescale; m_MassTransferTrackerHistory = p_Star.m_MassTransferTrackerHistory; @@ -103,8 +103,8 @@ class BaseBinaryStar { m_SystemicVelocity = p_Star.m_SystemicVelocity; m_NormalizedOrbitalAngularMomentumVector = p_Star.m_NormalizedOrbitalAngularMomentumVector; m_ThetaE = p_Star.m_ThetaE; - m_PhiE = p_Star.m_PhiE; - m_PsiE = p_Star.m_PsiE; + m_PhiE = p_Star.m_PhiE; + m_PsiE = p_Star.m_PsiE; m_Time = p_Star.m_Time; m_TimePrev = p_Star.m_TimePrev; @@ -310,7 +310,7 @@ class BaseBinaryStar { BinaryCEDetailsT m_CEDetails; // Common Event details double m_CircularizationTimescale; - + bool m_Unbound; // Binary unbound? double m_Dt; // Timestep @@ -336,7 +336,7 @@ class BaseBinaryStar { double m_FractionAccreted; // Fraction of mass accreted from the donor during mass transfer double m_CosIPrime; - double m_IPrime; + double m_IPrime; double m_JLoss; // Specific angular momentum with which mass is lost during non-conservative mass transfer @@ -345,14 +345,14 @@ class BaseBinaryStar { double m_MassEnv1; // Star1 envelope mass in Msol double m_MassEnv2; // Star2 envelope mass in Msol - + double m_MassLossRateInRLOF; // Rate of mass loss from donor during mass transfer (Msol/Myr) double m_aMassLossDiff; bool m_MassTransfer; double m_aMassTransferDiff; - + MT_TIMESCALE m_MassTransferTimescale; MT_TRACKING m_MassTransferTrackerHistory; @@ -375,9 +375,9 @@ class BaseBinaryStar { Vector3d m_SystemicVelocity; // Systemic velocity vector, relative to ZAMS Center of Mass Vector3d m_NormalizedOrbitalAngularMomentumVector; // Orbital AM vector postSN, in preSN frame double m_ThetaE; // Euler Theta - double m_PhiE; // Euler Phi + double m_PhiE; // Euler Phi double m_PsiE; // Euler Psi - + double m_Time; // Physical simulation time double m_TimePrev; // Previous simulation time double m_TimeToCoalescence; // Coalescence time @@ -439,7 +439,7 @@ class BaseBinaryStar { double CalculateDEccentricityTidalDt(const DBL_DBL_DBL_DBL p_ImKnm, const BinaryConstituentStar* p_Star); double CalculateDOmegaTidalDt(const DBL_DBL_DBL_DBL p_ImKnm, const BinaryConstituentStar* p_Star); double CalculateDSemiMajorAxisTidalDt(const DBL_DBL_DBL_DBL p_ImKnm, const BinaryConstituentStar* p_Star); - + static double CalculateGammaAngularMomentumLoss_Static(const double p_DonorMass, const double p_AccretorMass, const bool p_IsAccretorDegenerate, const bool p_IsCommonEnvelope); double CalculateGammaAngularMomentumLoss(const double p_DonorMass, const double p_AccretorMass) { return CalculateGammaAngularMomentumLoss_Static(p_DonorMass, p_AccretorMass, m_Accretor->IsDegenerate(), false); } double CalculateGammaAngularMomentumLoss() { return CalculateGammaAngularMomentumLoss(m_Donor->Mass(), m_Accretor->Mass()); } @@ -454,15 +454,15 @@ class BaseBinaryStar { const double p_FractionAccreted, const bool p_IsCommonEnvelope); - + double CalculateMassTransferOrbit(const double p_DonorMass, - const double p_DeltaMassDonor, - BinaryConstituentStar& p_Accretor, + const double p_DeltaMassDonor, + BinaryConstituentStar& p_Accretor, const double p_FractionAccreted, const bool p_IsCommonEnvelope) { return CalculateMassTransferOrbit(p_DonorMass, p_DeltaMassDonor, p_Accretor.Mass(), p_Accretor.IsDegenerate(), p_FractionAccreted, p_IsCommonEnvelope); } - - + + void CalculateWindsMassLoss(double p_Dt); void InitialiseMassTransfer(); @@ -504,8 +504,8 @@ class BaseBinaryStar { void ResolveMainSequenceMerger(); void ResolveMassChanges(); void ResolveSupernova(); - - + + void SetInitialValues(const unsigned long int p_Seed, const long int p_Id); @@ -523,10 +523,10 @@ class BaseBinaryStar { const double p_RocheLobe2to1); bool ShouldResolveNeutrinoRocketMechanism() const { return (OPTIONS->RocketKickMagnitude1() > 0) || (OPTIONS->RocketKickMagnitude2() > 0); } - + void StashRLOFProperties(const MT_TIMING p_Which); - void UpdateSystemicVelocity(Vector3d p_newVelocity) { m_SystemicVelocity += p_newVelocity; } + void UpdateSystemicVelocity(Vector3d p_newVelocity) { m_SystemicVelocity += p_newVelocity; } // printing functions @@ -543,35 +543,35 @@ class BaseBinaryStar { } bool PrintRLOFParameters(const RLOF_RECORD_TYPE p_RecordType = RLOF_RECORD_TYPE::DEFAULT); - - bool PrintSystemParameters(const BSE_SYSPARMS_RECORD_TYPE p_RecordType = BSE_SYSPARMS_RECORD_TYPE::DEFAULT) const { + + bool PrintSystemParameters(const BSE_SYSPARMS_RECORD_TYPE p_RecordType = BSE_SYSPARMS_RECORD_TYPE::DEFAULT) const { return LOGGING->LogBSESystemParameters(this, p_RecordType); } - - bool PrintSystemSnapshotLog(const BSE_SYSTEM_SNAPSHOT_RECORD_TYPE p_RecordType = BSE_SYSTEM_SNAPSHOT_RECORD_TYPE::DEFAULT) const { + + bool PrintSystemSnapshotLog(const BSE_SYSTEM_SNAPSHOT_RECORD_TYPE p_RecordType = BSE_SYSTEM_SNAPSHOT_RECORD_TYPE::DEFAULT) const { return LOGGING->LogBSESystemSnapshotLog(this, p_RecordType); } - + bool PrintDetailedOutput(const long int p_Id, const BSE_DETAILED_RECORD_TYPE p_RecordType) const { return OPTIONS->DetailedOutput() ? LOGGING->LogBSEDetailedOutput(this, p_Id, p_RecordType) : true; } - + bool PrintDoubleCompactObjects(const DCO_RECORD_TYPE p_RecordType = DCO_RECORD_TYPE::DEFAULT) const { return LOGGING->LogDoubleCompactObject(this, p_RecordType); } - + bool PrintCommonEnvelope(const CE_RECORD_TYPE p_RecordType = CE_RECORD_TYPE::DEFAULT) const { return LOGGING->LogCommonEnvelope(this, p_RecordType); } - + bool PrintPulsarEvolutionParameters(const BSE_PULSAR_RECORD_TYPE p_RecordType) const { return OPTIONS->EvolvePulsars() ? LOGGING->LogBSEPulsarEvolutionParameters(this, p_RecordType) : true; } - + bool PrintSupernovaDetails(const BSE_SN_RECORD_TYPE p_RecordType = BSE_SN_RECORD_TYPE::DEFAULT) const { return LOGGING->LogBSESupernovaDetails(this, p_RecordType); } - + /* * Functor for MassLossToFitInsideRocheLobe() * @@ -585,13 +585,13 @@ class BaseBinaryStar { * @param [IN] p_FractionAccreted The fraction of the donated mass accreted by the accretor (if known in advance, otherwise zero) * @param [IN] p_Dt Time step duration (relevant for nuclear timescale mass transfer) * @param [IN] p_Error (Address of variable to record) Error encountered in functor - * + * * Function: calculate radius difference after mass loss * T RadiusEqualsRocheLobeFunctor(double const& p_dM) - * + * * @param [IN] p_dM Mass to be donated * @return Difference between star's Roche Lobe radius and radius after mass loss - */ + */ template struct RadiusEqualsRocheLobeFunctor { RadiusEqualsRocheLobeFunctor(BaseBinaryStar *p_Binary, BinaryConstituentStar *p_Donor, BinaryConstituentStar *p_Accretor, double p_FractionAccreted, double p_Dt, ERROR *p_Error) { @@ -613,22 +613,22 @@ class BaseBinaryStar { double accretorMass = m_Accretor->Mass(); // use stale value of accretor RL radius -- this is only relevant for nuclear timescale MT, when the change in accretor RL radius should be small double accretorRLradius = CalculateRocheLobeRadius_Static(accretorMass, donorMass) * AU_TO_RSOL * m_Binary->SemiMajorAxis() * (1.0 - m_Binary->Eccentricity()); - + // beta is the actual accretion efficiency; if p_FractionAccreted is negative (placeholder // for nuclear timescale accretion efficiency, for which the total accretion mass over the // duration of the timestep is known), then must estimate it on the fly for consistency double beta = m_FractionAccreted; if (utils::Compare(beta, 0.0) < 0) { std::tie(std::ignore, beta) = m_Accretor->CalculateMassAcceptanceRate(p_dM / m_Dt, - m_Accretor->CalculateThermalMassAcceptanceRate(accretorRLradius), + m_Accretor->CalculateThermalMassAcceptanceRate(accretorRLradius), m_Donor->IsOneOf(He_RICH_TYPES)); } - + double semiMajorAxis = m_Binary->CalculateMassTransferOrbit(donorMass, -p_dM , *m_Accretor, beta, false); double RLRadius = semiMajorAxis * (1.0 - m_Binary->Eccentricity()) * CalculateRocheLobeRadius_Static(donorMass - p_dM, accretorMass + (beta * p_dM)) * AU_TO_RSOL; - + double radiusAfterMassLoss = m_Donor->CalculateRadiusOnMassChange(-p_dM); - + return (RLRadius - radiusAfterMassLoss); } private: @@ -642,9 +642,9 @@ class BaseBinaryStar { double MassLossToFitInsideRocheLobe(BaseBinaryStar *p_Binary, BinaryConstituentStar *p_Donor, BinaryConstituentStar *p_Accretor, double p_FractionAccreted, double p_MaximumAccretedMass); - + double OmegaAfterSynchronisation(const double p_M1, const double p_M2, const double p_I1, const double p_I2, const double p_Ltot, const double p_Guess); - + }; #endif // __BaseBinaryStar_h__ diff --git a/src/BaseStar.cpp b/src/BaseStar.cpp index 629eb6703..5f0e1b185 100755 --- a/src/BaseStar.cpp +++ b/src/BaseStar.cpp @@ -27,7 +27,7 @@ BaseStar::BaseStar() { } -BaseStar::BaseStar(const unsigned long int p_RandomSeed, +BaseStar::BaseStar(const unsigned long int p_RandomSeed, const double p_MZAMS, const double p_Metallicity, const KickParameters p_KickParameters, @@ -45,7 +45,7 @@ BaseStar::BaseStar(const unsigned long int p_RandomSeed, m_CHE = false; // initially m_EvolutionStatus = EVOLUTION_STATUS::CONTINUE; // initially - + // Initialise member variables from input parameters // (kick parameters initialised below - see m_SupernovaDetails) m_RandomSeed = p_RandomSeed; @@ -138,7 +138,7 @@ BaseStar::BaseStar(const unsigned long int p_RandomSeed, m_Temperature = m_TZAMS; m_TotalMassLossRate = DEFAULT_INITIAL_DOUBLE_VALUE; m_ComponentVelocity = Vector3d(); - + m_OmegaCHE = CalculateOmegaCHE(m_MZAMS, m_Metallicity); m_OmegaZAMS = p_RotationalFrequency >= 0.0 // valid rotational frequency passed in? ? _2_PI * p_RotationalFrequency // yes - convert from cycles/yr to rad/yr and use it @@ -161,7 +161,7 @@ BaseStar::BaseStar(const unsigned long int p_RandomSeed, m_MassPrev = m_MZAMS; m_RadiusPrev = m_RZAMS; m_DtPrev = DEFAULT_INITIAL_DOUBLE_VALUE; - + // Supernova details m_SupernovaDetails.initialKickParameters = p_KickParameters; @@ -236,9 +236,9 @@ BaseStar::BaseStar(const unsigned long int p_RandomSeed, * PROGRAM_OPTION - program option * * This function handles properties of type: - * + * * STAR_PROPERTY, STAR_1_PROPERTY, STAR_2_PROPERTY, SUPERNOVA_PROPERTY, COMPANION_PROPERTY - * + * * only - anything else will result in an error being thrown and the evolution of the star (or binary) * terminated. * @@ -246,7 +246,7 @@ BaseStar::BaseStar(const unsigned long int p_RandomSeed, * This allows the composition of the log records to be dynamically modified - this is * how we allow users to specify what properties they want recorded in log files. * - * The functional return is the value of the property requested. + * The functional return is the value of the property requested. * * * COMPAS_VARIABLE StellarPropertyValue(const T_ANY_PROPERTY p_Property) @@ -294,7 +294,7 @@ COMPAS_VARIABLE BaseStar::StellarPropertyValue(const T_ANY_PROPERTY p_Property) case ANY_STAR_PROPERTY::CONVECTIVE_ENV_MASS: std::tie(value, std::ignore) = CalculateConvectiveEnvelopeMass(); break; case ANY_STAR_PROPERTY::CORE_MASS: value = CoreMass(); break; case ANY_STAR_PROPERTY::CORE_MASS_AT_COMPACT_OBJECT_FORMATION: value = SN_CoreMassAtCOFormation(); break; - case ANY_STAR_PROPERTY::CORE_RADIUS_AT_COMPACT_OBJECT_FORMATION: value = SN_CoreRadiusAtCOFormation(); break; + case ANY_STAR_PROPERTY::CORE_RADIUS_AT_COMPACT_OBJECT_FORMATION: value = SN_CoreRadiusAtCOFormation(); break; case ANY_STAR_PROPERTY::DRAWN_KICK_MAGNITUDE: value = SN_DrawnKickMagnitude(); break; case ANY_STAR_PROPERTY::DOMINANT_MASS_LOSS_RATE: value = DominantMassLossRate(); break; case ANY_STAR_PROPERTY::DT: value = Dt(); break; @@ -401,7 +401,7 @@ COMPAS_VARIABLE BaseStar::StellarPropertyValue(const T_ANY_PROPERTY p_Property) // accounted for in this code. We should not default here, with or without a warning - this is a // code defect, so we flag it as an error and that will result in termination of the evolution of // the star or binary. - // The correct fix for this is to add code for the missing property, or prevent it from being + // The correct fix for this is to add code for the missing property, or prevent it from being // specified in the logfile definitions file. THROW_ERROR(ERROR::UNEXPECTED_STELLAR_PROPERTY); // throw error @@ -425,11 +425,11 @@ COMPAS_VARIABLE BaseStar::StellarPropertyValue(const T_ANY_PROPERTY p_Property) * PROGRAM_OPTION - program option * * This function calls the appropriate helper function to retrieve the value. - * + * * This function handles properties of type: - * + * * STAR_PROPERTY, PROGRAM_OPTION - * + * * only - anything else will result in an error being thrown and the evolution of the star (or binary) * terminated. * @@ -437,7 +437,7 @@ COMPAS_VARIABLE BaseStar::StellarPropertyValue(const T_ANY_PROPERTY p_Property) * This allows the composition of the log records to be dynamically modified - this is * how we allow users to specify what properties they want recorded in log files. * - * The functional return is the value of the property requested. + * The functional return is the value of the property requested. * * * COMPAS_VARIABLE PropertyValue(const T_ANY_PROPERTY p_Property) const @@ -816,7 +816,7 @@ double BaseStar::CalculateAlpha4() const { double MHeF_5 = MHeF * MHeF * MHeF * MHeF * MHeF; // pow() is slow - use multiplication double tBGB_MHeF = CalculateLifetimeToBGB(MHeF); // tBGB for mass M = MHeF double tHe_MHeF = tBGB_MHeF * (b[41] * PPOW(MHeF, b[42]) + b[43] * MHeF_5) / (b[44] + MHeF_5); - + return ((tHe_MHeF - b[39]) / b[39]); #undef massCutoffs @@ -1028,21 +1028,21 @@ double BaseStar::CalculateLambdaKruckow(const double p_Radius, const double p_Al } -/* +/* * Wrapper function to return Nanjing lambda based on options - * - * + * + * * double BaseStar::CalculateLambdaNanjing() - * + * * @return Common envelope lambda parameter - */ + */ double BaseStar::CalculateLambdaNanjing() const { double lambda = 0.0; // return value double mass = m_MZAMS; if (OPTIONS->CommonEnvelopeLambdaNanjingUseRejuvenatedMass()) mass = m_Mass0; // use rejuvenated mass to calculate lambda instead of true birth mass - + if (OPTIONS->CommonEnvelopeLambdaNanjingEnhanced()) { // if using enhanced Nanjing lambdas STELLAR_POPULATION pop = utils::Compare(m_Metallicity, LAMBDA_NANJING_ZLIMIT) < 0 ? STELLAR_POPULATION::POPULATION_II : STELLAR_POPULATION::POPULATION_I; if (OPTIONS->CommonEnvelopeLambdaNanjingInterpolateInMass()) { @@ -1063,7 +1063,7 @@ double BaseStar::CalculateLambdaNanjing() const { } } } - else { + else { lambda = CalculateLambdaNanjingStarTrack(mass, m_Metallicity); } @@ -1071,16 +1071,16 @@ double BaseStar::CalculateLambdaNanjing() const { } -/* +/* * Calculate mass- and metallicity-interpolated Nanjing lambda - * - * + * + * * double BaseStar::CalculateMassAndZInterpolatedLambdaNanjing(const double p_Mass, const double p_Z) - * + * * @param [IN] p_Mass Mass / Msun to evaluate lambda with * @param [IN] p_Z Metallicity * @return Common envelope lambda parameter - */ + */ double BaseStar::CalculateMassAndZInterpolatedLambdaNanjing(const double p_Mass, const double p_Z) const { double lambda = 0.0; // return value @@ -1101,16 +1101,16 @@ double BaseStar::CalculateMassAndZInterpolatedLambdaNanjing(const double p_Mass, } -/* +/* * Interpolate Nanjing lambda in mass for a given metallicity - * - * + * + * * double BaseStar::CalculateMassInterpolatedLambdaNanjing(const double p_Mass, const int p_StellarPop) - * + * * @param [IN] p_StellarPop Stellar population (POP_I or POP_II) * @param [IN] p_Mass Mass / Msun to evaluate lambda with * @return Common envelope lambda parameter - */ + */ double BaseStar::CalculateMassInterpolatedLambdaNanjing(const double p_Mass, const STELLAR_POPULATION p_StellarPop) const { double lambda = 0.0; // return value @@ -1138,20 +1138,20 @@ double BaseStar::CalculateMassInterpolatedLambdaNanjing(const double p_Mass, con } -/* +/* * Interpolate Nanjing lambda in metallicity for a given mass - * - * + * + * * double BaseStar::alculateZInterpolatedLambdaNanjing(const double p_Z, const int p_MassInd) - * + * * @param [IN] p_Z Metallicity * @param [IN] p_MassIndex Index specifying donor mass (see NANJING_MASSES in constants.h) * @return Common envelope lambda parameter - */ + */ double BaseStar::CalculateZInterpolatedLambdaNanjing(const double p_Z, const int p_MassIndex) const { double lambda = 0.0; // return value - + if (utils::Compare(m_Metallicity, LAMBDA_NANJING_POPII_Z) < 0) { lambda = CalculateLambdaNanjingEnhanced(p_MassIndex, STELLAR_POPULATION::POPULATION_II); // use lambda for pop. II metallicity } @@ -1168,19 +1168,19 @@ double BaseStar::CalculateZInterpolatedLambdaNanjing(const double p_Z, const int } -/* +/* * Returns index in NANJING_MASSES corresponding to nearest mass model computed by Xu & Li (2010) - * - * + * + * * double BaseStar::FindLambdaNanjingNearestMassIndex(const double p_Mass) - * + * * @param [IN] p_Mass Mass * @return Index in NANJING_MASSES - */ + */ double BaseStar::FindLambdaNanjingNearestMassIndex(const double p_Mass) const { if (p_Mass < NANJING_MASSES_MIDPOINTS[0]) return 0.0; // if M < midpoint of lowermost bin, use lambda for the 1 Msun model - + if (p_Mass >= NANJING_MASSES_MIDPOINTS.back()) return NANJING_MASSES.size() - 1.0; // if M >= midpoint of uppermost bin, use lambda for the 100 Msun model return utils::BinarySearch(NANJING_MASSES_MIDPOINTS, p_Mass)[1]; // search for upper and lower mass bin edges @@ -1197,18 +1197,18 @@ double BaseStar::FindLambdaNanjingNearestMassIndex(const double p_Mass) const { /* * Calculate zeta, the adiabatic donor radial response to mass loss * - * double BaseStar::CalculateZetaAdiabatic() + * double BaseStar::CalculateZetaAdiabatic() * * @return Adiabatic exponent zeta = dlnR/dlnM */ -double BaseStar::CalculateZetaAdiabatic() { - +double BaseStar::CalculateZetaAdiabatic() { + double zetaStar = 0.0; // return value switch (OPTIONS->StellarZetaPrescription()) { - case ZETA_PRESCRIPTION::SOBERMAN: - case ZETA_PRESCRIPTION::HURLEY: + case ZETA_PRESCRIPTION::SOBERMAN: + case ZETA_PRESCRIPTION::HURLEY: case ZETA_PRESCRIPTION::ARBITRARY: zetaStar = CalculateZetaConstantsByEnvelope(OPTIONS->StellarZetaPrescription()); break; @@ -1238,7 +1238,7 @@ double BaseStar::CalculateZetaAdiabatic() { * @return Adiabatic exponent */ double BaseStar::CalculateZetaAdiabaticHurley2002(const double p_CoreMass) const{ - + if (utils::Compare(p_CoreMass, m_Mass) >= 0) return 0.0; // if the object is all core, the calculation is meaningless double m = p_CoreMass / m_Mass; @@ -1258,7 +1258,7 @@ double BaseStar::CalculateZetaAdiabaticHurley2002(const double p_CoreMass) const * @return Adiabatic exponent */ double BaseStar::CalculateZetaAdiabaticSPH(const double p_CoreMass) const { - + if (utils::Compare(p_CoreMass, m_Mass) >= 0) return 0.0; // if the object is all core, the calculation is meaningless (and would result in division by zero) double m = p_CoreMass / m_Mass; // eq (57) Soberman, Phinney, vdHeuvel (1997) @@ -1279,7 +1279,7 @@ double BaseStar::CalculateZetaAdiabaticSPH(const double p_CoreMass) const { * @return Critical mass ratio */ double BaseStar::CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, const double p_massTransferEfficiencyBeta) { - + double qCrit = 0.0; // return value switch (OPTIONS->QCritPrescription()) { @@ -1287,10 +1287,10 @@ double BaseStar::CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, c case QCRIT_PRESCRIPTION::NONE: // a safe placeholder; really, we should not be calling this function if there is the prescription is "NONE" qCrit = 0.0; break; - - case QCRIT_PRESCRIPTION::GE: + + case QCRIT_PRESCRIPTION::GE: case QCRIT_PRESCRIPTION::GE_IC: - qCrit = CalculateCriticalMassRatioGeEtAl(OPTIONS->QCritPrescription(), p_massTransferEfficiencyBeta); + qCrit = CalculateCriticalMassRatioGeEtAl(OPTIONS->QCritPrescription(), p_massTransferEfficiencyBeta); break; case QCRIT_PRESCRIPTION::CLAEYS: @@ -1300,7 +1300,7 @@ double BaseStar::CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, c case QCRIT_PRESCRIPTION::HURLEY_HJELLMING_WEBBINK: qCrit = CalculateCriticalMassRatioHurleyHjellmingWebbink(); break; - + default: // unknown prescription // the only way this can happen is if someone added a QCRIT_PRESCRIPTION // and it isn't accounted for in this code. We should not default here, with or without a warning. @@ -1496,9 +1496,9 @@ double BaseStar::CalculateInitialEnvelopeMass_Static(const double p_Mass) { * Calculate mass loss rate enhancement for rapidly rotating stars * * Langer 1998 (https://ui.adsabs.harvard.edu/abs/1998A%26A...329..551L/abstract) eq 3 - * + * * The exponent originally comes from Bjorkman & Cassinelli 1993 (https://ui.adsabs.harvard.edu/abs/1993ApJ...409..429B/abstract), - * based on a fit to data from Friend & Abbott 1986 (https://ui.adsabs.harvard.edu/abs/1986ApJ...311..701F/abstract) + * based on a fit to data from Friend & Abbott 1986 (https://ui.adsabs.harvard.edu/abs/1986ApJ...311..701F/abstract) * * double CalculateMassLossRateEnhancementRotation() * @@ -1558,9 +1558,9 @@ double BaseStar::CalculateMassLossRateKudritzkiReimers() const { * @return Nieuwenhuijzen & de Jager mass-loss rate for massive stars (in Msol yr^-1) */ double BaseStar::CalculateMassLossRateNieuwenhuijzenDeJager() const { - + double rate = 0.0; - + if (utils::Compare(m_Luminosity, NJ_MINIMUM_LUMINOSITY) > 0) { // check for minimum luminosity double smoothTaper = min(1.0, (m_Luminosity - 4000.0) / 500.0); // smooth taper between no mass loss and mass loss rate = std::sqrt((m_Metallicity / ZSOL_HURLEY)) * smoothTaper * 9.6E-15 * PPOW(m_Radius, 0.81) * PPOW(m_Luminosity, 1.24) * PPOW(m_Mass, 0.16); @@ -1578,14 +1578,14 @@ double BaseStar::CalculateMassLossRateNieuwenhuijzenDeJager() const { * See text surrounding Equation 6 in Bjorklund et al. 2022 (https://arxiv.org/abs/2203.08218) * * double CalculateOpacity_Static(const double p_HeliumAbundanceSurface) - * + * * @return Opacity in SI units (m^2/kg) * */ double BaseStar::CalculateOpacity_Static(const double p_HeliumAbundanceSurface) { const double iHe = 2.0; // Helium ionisation state - For O stars, doubly ionised helium - double YHe = p_HeliumAbundanceSurface; // Star's surface helium abundance + double YHe = p_HeliumAbundanceSurface; // Star's surface helium abundance double kappa_e_cgs = 0.4 * (1.0 + iHe * YHe) / (1.0 + 4.0 * YHe); // cgs units cm^2/g double kappa_e_SI = kappa_e_cgs * OPACITY_CGS_TO_SI; // Convert to SI units - m^2/kg @@ -1598,9 +1598,9 @@ double BaseStar::CalculateOpacity_Static(const double p_HeliumAbundanceSurface) * Calculate the Eddington Luminosity L_edd for this star * * See e.g., above Equation 6 in Bjorklund et al. 2022 (https://arxiv.org/abs/2203.08218) - * + * * double CalculateEddingtonLuminosity_Static(const double p_Mass, const double p_HeliumAbundanceSurface) - * + * * @param [IN] p_Mass Mass in Msol * @param [IN] p_HeliumAbundanceSurface Helium abundance * @return Eddington luminosity in solar luminosities @@ -1609,7 +1609,7 @@ double BaseStar::CalculateOpacity_Static(const double p_HeliumAbundanceSurface) double BaseStar::CalculateEddingtonLuminosity_Static(const double p_Mass, const double p_HeliumAbundanceSurface) { double kappa_SI = CalculateOpacity_Static(p_HeliumAbundanceSurface); // Determine opacity - + double top = 4.0 * M_PI * G * C * p_Mass * MSOL_TO_KG; double bot = kappa_SI; double L_Edd = top / bot; @@ -1621,8 +1621,8 @@ double BaseStar::CalculateEddingtonLuminosity_Static(const double p_Mass, const /* * Calculate the Eddington factor (L/L_Edd) as required by CalculateMassLossRateBjorklund * see text surrounding Equation 6 in https://arxiv.org/abs/2203.08218 - * - * + * + * * double CalculateMassLossRateBjorklundEddingtonFactor() * * @return Eddington factor @@ -1630,7 +1630,7 @@ double BaseStar::CalculateEddingtonLuminosity_Static(const double p_Mass, const double BaseStar::CalculateMassLossRateBjorklundEddingtonFactor() const { const double YHe = 0.1; // assumed constant by Bjorklund et al. - + double Ledd = CalculateEddingtonLuminosity_Static(m_Mass, YHe); // W double LoverLedd = (m_Luminosity * LSOLW) / Ledd; // Dimensionless @@ -1642,13 +1642,13 @@ double BaseStar::CalculateMassLossRateBjorklundEddingtonFactor() const { /* * Calculate the mass loss rate for massive OB stars according to the prescription from Bjorklund et al. 2022 * See Equation 7 and surrounding text in https://arxiv.org/abs/2203.08218 - * + * * This prescription is calibrated to the following ranges: * 10^4.5 < L / Lsol < 10^6 * 15,000 < Teff / K < 50,000 * 15 < M / Msol < 80 - * Z Zsol, Z_LMC = 0.5 * Zsol and Z_SMC = 0.2 * Zsol, with Zsol = 0.014 - * + * Z Zsol, Z_LMC = 0.5 * Zsol and Z_SMC = 0.2 * Zsol, with Zsol = 0.014 + * * * double CalculateMassLossRateOBBjorklund2022() * @@ -1661,7 +1661,7 @@ double BaseStar::CalculateMassLossRateOBBjorklund2022() const { double logZ = log10(m_Metallicity / 0.014); double logL = log10(m_Luminosity / 1.0E6); double Teff = m_Temperature * TSOL; // convert effective temperature to Kelvin - double logTeff = log10(Teff / 45000.0); + double logTeff = log10(Teff / 45000.0); double Meff = m_Mass * (1.0 - Gamma); double logMeff = log10(Meff / 45.0); @@ -1684,8 +1684,8 @@ double BaseStar::CalculateMassLossRateOBBjorklund2022() const { * Calculate LBV-like mass loss rate for stars beyond the Humphreys-Davidson limit (Humphreys & Davidson 1994) * * Sets class member variable m_LBVphaseFlag if necessary - * - * + * + * * double CalculateMassLossRateLBV(const LBV_MASS_LOSS_PRESCRIPTION p_LBVprescription) * * @param [IN] p_LBVprescription Which LBV prescription to use @@ -1699,7 +1699,7 @@ double BaseStar::CalculateMassLossRateLBV(const LBV_MASS_LOSS_PRESCRIPTION p_LBV if ((utils::Compare(m_Luminosity, LBV_LUMINOSITY_LIMIT_STARTRACK) > 0) && (utils::Compare(HDlimitfactor, 1.0) > 0)) { // check if luminous blue variable m_LBVphaseFlag = true; // mark the star as LBV m_DominantMassLossRate = MASS_LOSS_TYPE::LBV; // set the dominant mass loss rate - + switch (p_LBVprescription) { // decide which LBV prescription to use case LBV_MASS_LOSS_PRESCRIPTION::ZERO: @@ -1738,7 +1738,7 @@ double BaseStar::CalculateMassLossRateLBV(const LBV_MASS_LOSS_PRESCRIPTION p_LBV * Calculate LBV-like mass loss rate for stars beyond the Humphreys-Davidson limit (Humphreys & Davidson 1994) * * Hurley+ 2000 Section 7.1 a few equation after Eq. 106 (Equation not labelled) - * + * * * double CalculateMassLossRateLBVHurley(const double p_HDlimitfactor) * @@ -1755,7 +1755,7 @@ double BaseStar::CalculateMassLossRateLBVHurley(const double p_HDlimitfactor) co * Calculate LBV-like mass loss rate for stars beyond the Humphreys-Davidson limit (Humphreys & Davidson 1994) * * Belczynski et al. 2010, eq 8 - * + * * * double CalculateMassLossRateLBVBelczynski() * @@ -1830,7 +1830,7 @@ double BaseStar::CalculateMassLossRateOBVink2001() const { double rate = 0.0; // default return value - double teff = m_Temperature * TSOL; + double teff = m_Temperature * TSOL; if (utils::Compare(teff, VINK_MASS_LOSS_MINIMUM_TEMP) >= 0 && utils::Compare(teff, VINK_MASS_LOSS_BISTABILITY_TEMP) <= 0) { double v = 1.3; // v_inf/v_esc @@ -1877,7 +1877,7 @@ double BaseStar::CalculateMassLossRateOBVink2001() const { * features two bi-stability jumps, at T1 and T2 * offset = {"cold":-5.99,"inter":-6.688,"hot":-6.697} * - * + * * double CalculateMassLossRateOBVinkSander2021() * * @return Mass loss rate for hot OB stars in Msol yr^-1 @@ -1889,7 +1889,7 @@ double BaseStar::CalculateMassLossRateOBVinkSander2021() const { const double zExp2001 = 0.85; const double zExp = 0.42; - double teff = m_Temperature * TSOL; + double teff = m_Temperature * TSOL; double Gamma = EDDINGTON_PARAMETER_FACTOR * m_Luminosity / m_Mass; double charrho = -14.94 + (3.1857 * Gamma) + (zExp * LogMetallicityXiAnders()); double T2 = ( 61.2 + (2.59 * charrho) ) * 1000.0; // typically around 25000.0, higher jump first as in Vink python recipe @@ -1952,13 +1952,13 @@ double BaseStar::CalculateMassLossRateOBVinkSander2021() const { * * https://arxiv.org/pdf/1712.03321.pdf * - * + * * double CalculateMassLossRateOBKrticka2018() * * @return Mass loss rate for hot OB stars in Msol yr^-1 */ double BaseStar::CalculateMassLossRateOBKrticka2018() const { - + double logMdot = -5.70 + 0.50 * LogMetallicityXiAsplund() + (1.61 - 0.12 * LogMetallicityXiAsplund()) * log10(m_Luminosity / 1.0E6); return PPOW(10.0, logMdot); @@ -1969,13 +1969,13 @@ double BaseStar::CalculateMassLossRateOBKrticka2018() const { * Calculate mass loss rate for RSG stars using the Beasor+2020 prescription * * https://arxiv.org/pdf/2001.07222.pdf eq 4. - * - * fit corrected slightly in Decin 2023, eq E.1 + * + * fit corrected slightly in Decin 2023, eq E.1 * https://arxiv.org/pdf/2303.09385.pdf - * + * * corrected again by Beasor+2023, https://ui.adsabs.harvard.edu/abs/2023MNRAS.524.2460B/abstract * - * + * * double CalculateMassLossRateRSGBeasor2020() * * @return Mass loss rate for RSG stars in Msol yr^-1 @@ -1990,10 +1990,10 @@ double BaseStar::CalculateMassLossRateRSGBeasor2020() const { /* * Calculate mass loss rate for RSG stars using the Decin2023 prescription - * + * * https://arxiv.org/pdf/2303.09385.pdf eq 6. * - * + * * double CalculateMassLossRateRSGDecin2023() * * @return Mass loss rate for RSG stars in Msol yr^-1 @@ -2008,7 +2008,7 @@ double BaseStar::CalculateMassLossRateRSGDecin2023() const { * Third order polynomial in log Luminosity. * https://arxiv.org/pdf/2303.09385.pdf eq 6. * - * + * * double CalculateMassLossRateRSGYang2023() * * @return Mass loss rate for RSG stars in Msol yr^-1 @@ -2026,9 +2026,9 @@ double BaseStar::CalculateMassLossRateRSGYang2023() const { /* * Calculate mass loss rate for RSG stars using the Kee + 2021 prescription * - * https://arxiv.org/pdf/2101.03070.pdf eqs 5, 13, 14, 25. + * https://arxiv.org/pdf/2101.03070.pdf eqs 5, 13, 14, 25. + * * - * * double CalculateMassLossRateRSGKee2021() * * @return Mass loss rate for RSG stars in Msol yr^-1 @@ -2039,10 +2039,10 @@ double BaseStar::CalculateMassLossRateRSGKee2021() const { const double k_b = 1.38E-23; // Boltzmann Constant in J K^-1 const double sigma = 5.67E-8; // Stefan Boltzmann constant W m^-2 K^-4 const double m_h = 1.67E-27; // mass of hydrogen in Kg - const double kappa = 0.01 * OPACITY_CGS_TO_SI; // Given after Eq. 16 + const double kappa = 0.01 * OPACITY_CGS_TO_SI; // Given after Eq. 16 double teff = TSOL * m_Temperature; // in K - + double R_SI = sqrt((m_Luminosity * LSOLW) / (4.0 * M_PI * sigma * PPOW(teff, 4.0))); double M_SI = m_Mass * MSOL_TO_KG; double cs = sqrt(k_b * teff / m_h); @@ -2050,14 +2050,14 @@ double BaseStar::CalculateMassLossRateRSGKee2021() const { double vesc = sqrt(2.0 * G * (M_SI) / (R_SI)); // m/s, not vesc,eff double Rpmod = G * (M_SI) * (1.0 - gamma) / (2.0 * ((cs * cs) + (vturb * vturb))); // modified parker radius, in m - double rho = (4.0 / 3.0) * (Rpmod / (kappa * (R_SI) * (R_SI))) * + double rho = (4.0 / 3.0) * (Rpmod / (kappa * (R_SI) * (R_SI))) * (exp(-(2.0 * Rpmod / (R_SI)) + (3.0 / 2.0))) / (1.0 - exp(-2.0 * Rpmod / (R_SI))); double MdotAnalytical = 4.0 * M_PI * rho * sqrt(cs * cs + vturb * vturb) * Rpmod * Rpmod; // in kg/s double factor = PPOW(((vturb / 17000.0) / (vesc / 60000.0)), 1.30); // non-isothermal correction factor - return factor * MdotAnalytical * SECONDS_IN_YEAR / MSOL_TO_KG; -} + return factor * MdotAnalytical * SECONDS_IN_YEAR / MSOL_TO_KG; +} /* @@ -2065,7 +2065,7 @@ double BaseStar::CalculateMassLossRateRSGKee2021() const { * A kinked function of L and M * https://arxiv.org/pdf/2309.08657.pdf eqs 1 and 2 * - * + * * double CalculateMassLossRateRSGVinkSabhahit2023() * * @return Mass loss rate for RSG stars in Msol yr^-1 @@ -2094,7 +2094,7 @@ double BaseStar::CalculateMassLossRateRSGVinkSabhahit2023() const { * * https://arxiv.org/pdf/2002.05168.pdf * - * + * * double CalculateMassLossRateVMSBestenlehner2020() * * @return Mass loss rate for hot OB stars in Msol yr^-1 @@ -2102,7 +2102,7 @@ double BaseStar::CalculateMassLossRateRSGVinkSabhahit2023() const { double BaseStar::CalculateMassLossRateVMSBestenlehner2020() const { const double alpha = 0.39; // CAK force multiplier - const double logMdotZero = -4.78; // from substituting LogMdotTrans and Gamma_e trans into eq 12. + const double logMdotZero = -4.78; // from substituting LogMdotTrans and Gamma_e trans into eq 12. double gamma = EDDINGTON_PARAMETER_FACTOR * m_Luminosity / m_Mass; // Eddington Parameter, not metallicity specific as in the publication double logMdot = logMdotZero + ((1.0 / alpha) + 0.5) * log10(gamma) - (((1.0 - alpha) / alpha) + 2.0) * log10(1.0 - gamma); @@ -2116,7 +2116,7 @@ double BaseStar::CalculateMassLossRateVMSBestenlehner2020() const { * * https://arxiv.org/pdf/1105.0556.pdf * - * + * * double CalculateMassLossRateVMSVink2011() * * @return Mass loss rate for very massive stars in Msol yr^-1 @@ -2141,7 +2141,7 @@ double BaseStar::CalculateMassLossRateVMSVink2011() const { * * https://arxiv.org/pdf/2306.11785.pdf * - * + * * double CalculateMassLossRateVMSSabhahit2023() * * @return Mass loss rate in Msol yr^-1 @@ -2150,11 +2150,11 @@ double BaseStar::CalculateMassLossRateVMSSabhahit2023() { double gamma = EDDINGTON_PARAMETER_FACTOR * m_Luminosity / m_Mass; // Eddington Parameter, independent of surface composition double Mswitch = PPOW(m_Metallicity, -1.574) * 0.0615 + 18.10; // obtained from a powerlaw fit to table 2, given teff=45kK - double Lswitch = PPOW(10, (-1.91 * m_Log10Metallicity + 2.36)); // loglinear fits to table 2 + double Lswitch = PPOW(10, (-1.91 * m_Log10Metallicity + 2.36)); // loglinear fits to table 2 double Mdotswitch = PPOW(10, (-1.86 * m_Log10Metallicity - 8.90)); double gammaswitch = EDDINGTON_PARAMETER_FACTOR * Lswitch / Mswitch; - double Mdot; + double Mdot; if (utils::Compare(gamma, gammaswitch) > 0) { Mdot = Mdotswitch * PPOW((m_Luminosity / Lswitch) , 4.77) * PPOW((m_Mass/Mswitch) , -3.99); } @@ -2167,10 +2167,10 @@ double BaseStar::CalculateMassLossRateVMSSabhahit2023() { /* - * Calculate mass loss for main sequence stars. - * Switches prescription based on program options. + * Calculate mass loss for main sequence stars. + * Switches prescription based on program options. + * * - * * double CalculateMassLossRateOB(const OB_MASS_LOSS_PRESCRIPTION p_OB_MassLossPrescription) * * @param [IN] p_OBMassLossPrescription OB Mass loss prescription to use @@ -2178,10 +2178,10 @@ double BaseStar::CalculateMassLossRateVMSSabhahit2023() { */ double BaseStar::CalculateMassLossRateOB(const OB_MASS_LOSS_PRESCRIPTION p_OB_MassLossPrescription) { - double rate = 0.0; // default return value + double rate = 0.0; // default return value m_DominantMassLossRate = MASS_LOSS_TYPE::OB; // set dominant mass loss rate - + switch (p_OB_MassLossPrescription) { // decide which prescription to use case OB_MASS_LOSS_PRESCRIPTION::ZERO : rate = 0.0; break; case OB_MASS_LOSS_PRESCRIPTION::VINK2001 : rate = CalculateMassLossRateOBVink2001(); break; @@ -2208,10 +2208,10 @@ double BaseStar::CalculateMassLossRateOB(const OB_MASS_LOSS_PRESCRIPTION p_OB_Ma /* - * Calculate mass loss for RSG stars (Red Supergiant). - * Switches prescription based on program options. - * - * + * Calculate mass loss for RSG stars (Red Supergiant). + * Switches prescription based on program options. + * + * * double CalculateMassLossRateRSG(const RSG_MASS_LOSS_PRESCRIPTION p_RSG_MassLossPrescription) * * @param [IN] p_RSG_MassLossPrescription RSG Mass loss prescription to use @@ -2219,14 +2219,14 @@ double BaseStar::CalculateMassLossRateOB(const OB_MASS_LOSS_PRESCRIPTION p_OB_Ma */ double BaseStar::CalculateMassLossRateRSG(const RSG_MASS_LOSS_PRESCRIPTION p_RSG_MassLossPrescription) { - double rate = 0.0; // default return value + double rate = 0.0; // default return value switch (p_RSG_MassLossPrescription) { // decide which prescription to use case RSG_MASS_LOSS_PRESCRIPTION::ZERO : rate = 0.0; break; - case RSG_MASS_LOSS_PRESCRIPTION::VINKSABHAHIT2023: rate = CalculateMassLossRateRSGVinkSabhahit2023(); break; + case RSG_MASS_LOSS_PRESCRIPTION::VINKSABHAHIT2023: rate = CalculateMassLossRateRSGVinkSabhahit2023(); break; case RSG_MASS_LOSS_PRESCRIPTION::BEASOR2020 : rate = CalculateMassLossRateRSGBeasor2020(); break; case RSG_MASS_LOSS_PRESCRIPTION::DECIN2023 : rate = CalculateMassLossRateRSGDecin2023(); break; - case RSG_MASS_LOSS_PRESCRIPTION::YANG2023 : rate = CalculateMassLossRateRSGYang2023(); break; + case RSG_MASS_LOSS_PRESCRIPTION::YANG2023 : rate = CalculateMassLossRateRSGYang2023(); break; case RSG_MASS_LOSS_PRESCRIPTION::KEE2021 : rate = CalculateMassLossRateRSGKee2021(); break; case RSG_MASS_LOSS_PRESCRIPTION::NJ90 : rate = CalculateMassLossRateNieuwenhuijzenDeJager(); break; @@ -2249,10 +2249,10 @@ double BaseStar::CalculateMassLossRateRSG(const RSG_MASS_LOSS_PRESCRIPTION p_RSG /* - * Calculate mass loss for very massive MS stars, >100Msol. - * Switches prescription based on program options. + * Calculate mass loss for very massive MS stars, >100Msol. + * Switches prescription based on program options. + * * - * * double CalculateMassLossRateVMS(const VMS_MASS_LOSS_PRESCRIPTION p_VMS_MassLossPrescription) * * @param [IN] p_VMS_MassLossPrescription VMS Mass loss prescription to use @@ -2260,7 +2260,7 @@ double BaseStar::CalculateMassLossRateRSG(const RSG_MASS_LOSS_PRESCRIPTION p_RSG */ double BaseStar::CalculateMassLossRateVMS(const VMS_MASS_LOSS_PRESCRIPTION p_VMS_MassLossPrescription) { - double rate = 0.0; + double rate = 0.0; switch (p_VMS_MassLossPrescription) { // decide which prescription to use case VMS_MASS_LOSS_PRESCRIPTION::ZERO : rate = 0.0; break; @@ -2289,10 +2289,10 @@ double BaseStar::CalculateMassLossRateVMS(const VMS_MASS_LOSS_PRESCRIPTION p_VMS /* * Calculate the mass-loss rate for Wolf-Rayet stars according to the * prescription of Sander & Vink 2020 (https://arxiv.org/abs/2009.01849) - * + * * Use the luminosity prescription given by Equation 13 (see section 3.4.1) - * - * + * + * * double CalculateMassLossRateWolfRayetSanderVink2020(const double p_Mu) * * @param [IN] p_Mu Small envelope parameter (see Hurley et al. 2000, eq 97 & 98) @@ -2324,14 +2324,14 @@ double BaseStar::CalculateMassLossRateWolfRayetSanderVink2020(const double p_Mu) /* - * Calculate the correction to the mass-loss rates for Wolf-Rayet stars + * Calculate the correction to the mass-loss rates for Wolf-Rayet stars * as a function of effective temperature, according to the * prescription of Sander et al. 2023 (https://arxiv.org/abs/2301.01785) - * + * * Use the correction given in Eq. 18, with the effective temperature * (what they refer to as T_\star in Eq. 1) as T_eff,crit - * - * + * + * * double CalculateMassLossRateWolfRayetTemperatureCorrectionSander2023(const double p_Mdot) * * @param [IN] p_Mdot Uncorrected mass-loss rate (in Msol yr^{-1}) @@ -2340,7 +2340,7 @@ double BaseStar::CalculateMassLossRateWolfRayetSanderVink2020(const double p_Mu) double BaseStar::CalculateMassLossRateWolfRayetTemperatureCorrectionSander2023(const double p_Mdot) const { if (p_Mdot <= 0.0) return 0.0; // nothing to adjust - + const double teffRef = 141.0E3; // reference effective temperature in Kelvin const double teffMin = 100.0E3; // minimum effective temperature in Kelvin to apply correction @@ -2355,7 +2355,7 @@ double BaseStar::CalculateMassLossRateWolfRayetTemperatureCorrectionSander2023(c else { logMdotCorrected = logMdotUncorrected; } - + return PPOW(10.0, logMdotCorrected); } @@ -2363,10 +2363,10 @@ double BaseStar::CalculateMassLossRateWolfRayetTemperatureCorrectionSander2023(c /* * Calculate the mass-loss rate for helium stars according to the * prescription of Vink 2017 (https://ui.adsabs.harvard.edu/abs/2017A%26A...607L...8V/abstract) - * + * * See their Eq. 1 - * - * + * + * * double CalculateMassLossRateHeliumStarVink2017() * * @return Mass loss rate (in Msol yr^{-1}) @@ -2382,13 +2382,13 @@ double BaseStar::CalculateMassLossRateHeliumStarVink2017() const { /* * Calculate the mass-loss rate for Wolf--Rayet stars according to the * prescription of Shenar et al. 2019 (https://ui.adsabs.harvard.edu/abs/2019A%26A...627A.151S/abstract) - * + * * See their Eq. 6 and Table 5 - * + * * We use the fitting coefficients for hydrogen rich WR stars (e.g., WNh) * The C4 (X_He) term is = 0 and is omitted - * - * + * + * * double CalculateMassLossRateWolfRayetShenar2019() * * @return Mass loss rate (in Msol yr^{-1}) @@ -2403,7 +2403,7 @@ double BaseStar::CalculateMassLossRateWolfRayetShenar2019() const { const double C3 = -0.12; const double C5 = 0.74; - double logMdot = C1 + (C2 * log10(m_Luminosity)) + (C3 * log10(teff)) + (C5 * m_Log10Metallicity); + double logMdot = C1 + (C2 * log10(m_Luminosity)) + (C3 * log10(teff)) + (C5 * m_Log10Metallicity); return PPOW(10.0, logMdot); } @@ -2415,7 +2415,7 @@ double BaseStar::CalculateMassLossRateWolfRayetShenar2019() const { * * According to Hurley et al. 2000 * - * + * * double CalculateMassLossRateHurley() * * @return Mass loss rate in Msol per year @@ -2429,7 +2429,7 @@ double BaseStar::CalculateMassLossRateHurley() { * Calculate the dominant mass loss mechanism and associated rate for the star at the current evolutionary phase * Follows the implementation in StarTrack * - * + * * double CalculateMassLossRateBelczynski2010() * * @return Mass loss rate in Msol per year @@ -2440,7 +2440,7 @@ double BaseStar::CalculateMassLossRateBelczynski2010() { double LBVRate = CalculateMassLossRateLBV(OPTIONS->LBVMassLossPrescription()); // start with LBV winds (can be, and is often, 0.0) double otherWindsRate = 0.0; - if (m_DominantMassLossRate != MASS_LOSS_TYPE::LBV || + if (m_DominantMassLossRate != MASS_LOSS_TYPE::LBV || OPTIONS->LBVMassLossPrescription() == LBV_MASS_LOSS_PRESCRIPTION::HURLEY_ADD ) { // check whether we should add other winds to the LBV winds (always for HURLEY_ADD prescription, only if not in LBV regime for others) double teff = m_Temperature * TSOL; // change to Kelvin so it can be compared with values as stated in Vink prescription @@ -2448,7 +2448,7 @@ double BaseStar::CalculateMassLossRateBelczynski2010() { otherWindsRate = CalculateMassLossRateHurley() * OPTIONS->CoolWindMassLossMultiplier(); // apply cool wind mass loss multiplier } else { // hot stars, add Vink et al. 2001 winds (ignoring bistability jump) - + otherWindsRate = CalculateMassLossRateOBVink2001(); m_DominantMassLossRate = MASS_LOSS_TYPE::OB; } @@ -2471,10 +2471,10 @@ double BaseStar::CalculateMassLossRateBelczynski2010() { * very massive star (VMS) winds, OB star winds. * Furthermore, LBV winds are computed separately, and, if non-zero, either replace other mass loss * or are added to other wind mass loss if LBV_MASS_LOSS_PRESCRIPTION::HURLEY_ADD is used. - * + * * * double CalculateMassLossRateMerritt2025() - * + * * @return Mass loss rate in Msol per year */ double BaseStar::CalculateMassLossRateMerritt2025() { @@ -2486,7 +2486,7 @@ double BaseStar::CalculateMassLossRateMerritt2025() { double teff = TSOL * m_Temperature; // calculate other winds rate - if (m_DominantMassLossRate != MASS_LOSS_TYPE::LBV || + if (m_DominantMassLossRate != MASS_LOSS_TYPE::LBV || OPTIONS->LBVMassLossPrescription() == LBV_MASS_LOSS_PRESCRIPTION::HURLEY_ADD ) { // check whether we should add other winds to the LBV winds (always for HURLEY_ADD prescription, only if not in LBV regime for others) if ((utils::Compare(teff, RSG_MAXIMUM_TEMP) < 0) && // teff < max temp for RSG winds? @@ -2494,7 +2494,7 @@ double BaseStar::CalculateMassLossRateMerritt2025() { (IsOneOf(GIANTS) || m_StellarType == STELLAR_TYPE::HERTZSPRUNG_GAP)) { // must be core helium burning giant(CHeB, FGB, EAGB, TPAGB), or HG otherWindsRate = CalculateMassLossRateRSG(OPTIONS->RSGMassLossPrescription()); // yes - use RSG mass loss rate m_DominantMassLossRate = MASS_LOSS_TYPE::RSG; // set dominant mass loss rate - } + } else if (utils::Compare(teff, VINK_MASS_LOSS_MINIMUM_TEMP) < 0) { // cool stars, add Hurley et al 2000 winds (NJ90) otherWindsRate = CalculateMassLossRateHurley() * OPTIONS->CoolWindMassLossMultiplier(); // apply cool wind mass loss multiplier } @@ -2571,11 +2571,11 @@ double BaseStar::CalculateMassLossRate() { mDot *= OPTIONS->OverallWindMassLossMultiplier(); // apply overall wind mass loss multiplier } - + mDot = min(mDot, MAXIMUM_WIND_MASS_LOSS_RATE); // cap winds at a maximum mass loss rate (typically 0.1 solar masses per year) to avoid convergence issues - + UpdateTotalMassLossRate(-mDot); // update total mass loss rate - + return mDot; } @@ -2643,7 +2643,7 @@ void BaseStar::ResolveMassLoss(double p_Dt) { double mass = CalculateMassLossValues(p_Dt, true); // calculate new values assuming mass loss applied double angularMomentumChange = (2.0 / 3.0) * (mass - m_Mass) * m_Radius * RSOL_TO_AU * m_Radius * RSOL_TO_AU * Omega(); - + // JR: this is here to keep attributes in sync BSE vs SSE // Supernovae are caught in UpdateAttributesAndAgeOneTimestep() // Don't resolve envelope loss here (JR: we're not going to switch anyway... need to revisit this) @@ -2859,13 +2859,13 @@ double BaseStar::CalculateMassAccretedForCO(const double p_Mass, * * This is so that a string is passed to the output, not a vector of stellar types. * - * std::string BaseStar::GetMassTransferDonorHistoryString() + * std::string BaseStar::GetMassTransferDonorHistoryString() * * @return string of dash-separated stellar type numbers */ std::string BaseStar::GetMassTransferDonorHistoryString() const { - ST_VECTOR mtHistVec = m_MassTransferDonorHistory; + ST_VECTOR mtHistVec = m_MassTransferDonorHistory; std::string mtHistStr = ""; if (mtHistVec.empty()) { // this star was never a donor for MT @@ -2954,7 +2954,7 @@ double BaseStar::CalculateTemperatureKelvinOnPhase(const double p_Luminosity, co * * * double CalculateOStarRotationalVelocityAnalyticCDF_Static(const double p_Ve) - * + * * @param [IN] p_vE Rotational velocity (in km s^-1) at which to calculate CDF * @return The CDF for the rotational velocity */ @@ -2968,12 +2968,12 @@ double BaseStar::CalculateOStarRotationalVelocityAnalyticCDF_Static(const double boost::math::inverse_gamma_distribution<> gammaComponent(alpha, beta); // (shape, scale) = (alpha, beta) boost::math::normal_distribution<> normalComponent(mu, sigma); - + // Compute CDF at zero rotational velocity -- the CDF should be relative to this quantity double CDFzero = (iGamma * boost::math::cdf(gammaComponent, 0.0)) + ((1.0 - iGamma) * boost::math::cdf(normalComponent, 0.0)); - + double CDFunnormalised = (iGamma * boost::math::cdf(gammaComponent, p_Ve)) + ((1.0 - iGamma) * boost::math::cdf(normalComponent, p_Ve)); - + return ((CDFunnormalised-CDFzero) / (1.0 - CDFzero)); } @@ -3008,12 +3008,12 @@ double BaseStar::CalculateOStarRotationalVelocity() { // - if the solution is not acceptable, we reduce the search step size and try again // - if we reach the maximum number of search step reduction iterations, or the search step factor reduces to 1.0 (so search step size = 0.0), // we stop and return a negative value for the root (indicating no root found) - + double guess = 100.0; // guess at 100 km s^-1 (arbitrary initial guess) double factorFrac = ADAPTIVE_RV_SEARCH_FACTOR_FRAC; // search step size factor fractional part double factor = 1.0 + factorFrac; // factor to determine search step size (size = guess * factor) - + std::pair root(-1.0, -1.0); // initialise root - default return std::size_t tries = 0; // number of tries bool done = false; // finished (found root or exceed maximum tries)? @@ -3073,7 +3073,7 @@ double BaseStar::CalculateOStarRotationalVelocity() { } } } - + return root.first + (root.second - root.first) / 2.0; // Midway between brackets is our result, if necessary we could return the result as an interval here. } @@ -3216,33 +3216,33 @@ double BaseStar::CalculateOmegaCHE(const double p_MZAMS, const double p_Metallic /* - * Calculate the Dynamical tides contribution to the l=2, (n,m) = [(1,0), (1,2), (2,2), (3,2)] imaginary components of the + * Calculate the Dynamical tides contribution to the l=2, (n,m) = [(1,0), (1,2), (2,2), (3,2)] imaginary components of the * potential tidal Love number * * Gravity Waves, Core boundary: * Zahn, 1977, Eq. (5.5) , with the value of E_2 coming from Kushnir et al., 2017, by comparing Eq. (8) to Eq. (1) - * + * * Gravity Waves, Envelope Boundary: * Ahuir et al, 2021, Eq. (131) - * + * * Inertial Waves, Convective Envelope: * Ogilvie, 2013, Eq. (B3) - * + * * DBL_DBL_DBL_DBL CalculateImKnmDynamical(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) * * @param [IN] p_Omega Orbital angular frequency (1/yr) * @param [IN] p_SemiMajorAxis Semi-major axis of binary (AU) * @param [IN] p_M2 Mass of companion star (Msol) - * @return [(1,0), (1,2), (2,2), (3,2)] Imaginary components of the + * @return [(1,0), (1,2), (2,2), (3,2)] Imaginary components of the * potential tidal Love number, Dynamical tides only (unitless) */ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) const { - + double coreMass = CalculateConvectiveCoreMass(); double envMass, envMassMax; std::tie(envMass, envMassMax) = CalculateConvectiveEnvelopeMass(); - + double radIntershellMass = m_Mass - coreMass - envMass; // refers to the combined mass of non-convective layers double radiusAU = m_Radius * RSOL_TO_AU; @@ -3250,13 +3250,13 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do double convectiveEnvRadiusAU = CalculateRadialExtentConvectiveEnvelope() * RSOL_TO_AU; double radiusIntershellAU = radiusAU - convectiveEnvRadiusAU; // Outer radial coordinate of radiative intershell, or inner radial coordinate of convective envelope - // There should be no Dynamical tides if the entire star is convective, i.e. if there are no convective-radiative boundaries. + // There should be no Dynamical tides if the entire star is convective, i.e. if there are no convective-radiative boundaries. // If so, return 0.0 for all dynamical components of ImKnm. // This condition should be true for low-mass MS stars (<= 0.35 Msol) at ZAMS. if (utils::Compare(radIntershellMass/m_Mass, TIDES_MINIMUM_FRACTIONAL_EXTENT) <= 0 || utils::Compare(radiusIntershellAU, coreRadiusAU) <= 0) { - return std::make_tuple(0.0, 0.0, 0.0, 0.0); + return std::make_tuple(0.0, 0.0, 0.0, 0.0); } - + double R_3 = radiusAU * radiusAU * radiusAU; double R3OverG_M = (R_3 / G_AU_Msol_yr / m_Mass); double sqrtR3OverG_M = std::sqrt(R3OverG_M); @@ -3272,7 +3272,7 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do double k32GravityEnv = 0.0; double k22InertialEnv = 0.0; // inertial Wave dissipation, envelope - + double omegaSpin = Omega(); double twoOmegaSpin = omegaSpin + omegaSpin; @@ -3280,9 +3280,9 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do double w12 = ((p_Omega) - twoOmegaSpin); double w22 = ((p_Omega + p_Omega) - twoOmegaSpin); double w32 = ((p_Omega + p_Omega + p_Omega) - twoOmegaSpin); - + // Assume that GW dissipation from core boundary is only efficient if the radiative region extends to the surface, i.e. there is no convective envelope. - if (utils::Compare(coreRadiusAU/radiusAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) > 0 && utils::Compare(coreMass/m_Mass, TIDES_MINIMUM_FRACTIONAL_EXTENT) > 0 && utils::Compare(convectiveEnvRadiusAU/radiusAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) < 0 && utils::Compare(envMass/m_Mass, TIDES_MINIMUM_FRACTIONAL_EXTENT) < 0) { + if (utils::Compare(coreRadiusAU/radiusAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) > 0 && utils::Compare(coreMass/m_Mass, TIDES_MINIMUM_FRACTIONAL_EXTENT) > 0 && utils::Compare(convectiveEnvRadiusAU/radiusAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) < 0 && utils::Compare(envMass/m_Mass, TIDES_MINIMUM_FRACTIONAL_EXTENT) < 0) { constexpr double beta2Dynamical = 1.0; constexpr double rhoFactorDynamcial = 0.1; double coreRadiusOverRadius = coreRadiusAU / radiusAU; @@ -3317,7 +3317,7 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do double s32_4_3 = s32 * std::cbrt(s32); double s32_8_3 = s32_4_3 * s32_4_3; k32GravityCore = E2Core * std::copysign(s32_8_3, w32); - if (std::isnan(k32GravityCore)) k32GravityCore = 0.0; + if (std::isnan(k32GravityCore)) k32GravityCore = 0.0; } double rint_3 = radiusIntershellAU * radiusIntershellAU * radiusIntershellAU; @@ -3325,12 +3325,12 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do double gamma = (envMass / (R_3 - rint_3)) / (radIntershellMass / (rint_3 - rc_3)); // There is no GW or IW dissipation from the envelope boundary if no convective envelope - if ((utils::Compare(convectiveEnvRadiusAU / radiusAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) > 0) || (utils::Compare(envMass / m_Mass, TIDES_MINIMUM_FRACTIONAL_EXTENT) > 0)) { + if ((utils::Compare(convectiveEnvRadiusAU / radiusAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) > 0) || (utils::Compare(envMass / m_Mass, TIDES_MINIMUM_FRACTIONAL_EXTENT) > 0)) { constexpr double dynPrefactor = 3.207452512782476; // 3^(11/3) * Gamma(1/3)^2 / 40 PI constexpr double m_l_factor_22 = 0.091720201358184; // (l(l+1))^{-4/3}, assuming l=2 double cbrtdNdlnr = std::cbrt(G_AU_Msol_yr * radIntershellMass / radiusIntershellAU / radiusIntershellAU / (radiusAU - radiusIntershellAU)); - + double alpha = radiusIntershellAU / radiusAU; double oneMinusAlpha = 1.0 - alpha; double beta = radIntershellMass / m_Mass; @@ -3343,13 +3343,13 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do double oneMinusAlpha_3 = 1.0 - alpha_3; double beta_2 = beta * beta; - + double oneMinusGamma = 1.0 - gamma; double oneMinusGamma_2 = oneMinusGamma * oneMinusGamma; double alpha_2_3Minus_1 = (alpha * 2.0 / 3.0) - 1.0; // Assume GW dissipation from the envelope boundary only acts if the radiative zone extends to the core, i.e. if there is no convective core. - if (utils::Compare(coreRadiusAU/radiusAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) < 0) { + if (utils::Compare(coreRadiusAU/radiusAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) < 0) { double Epsilon = alpha_11 * envMass / m_Mass * oneMinusGamma_2 * alpha_2_3Minus_1 * alpha_2_3Minus_1 / beta_2 / oneMinusAlpha_3 / oneMinusAlpha_2; double R3_Epsilon_dNdlnr_factor = R3OverG_M * Epsilon / cbrtdNdlnr; double E2Envelope = dynPrefactor * m_l_factor_22 * R3_Epsilon_dNdlnr_factor; @@ -3358,30 +3358,30 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do double w10_4_3 = w10 * std::cbrt(w10); double w10_8_3 = w10_4_3 * w10_4_3; k10GravityEnv = E2Envelope * std::copysign(w10_8_3, w10); - if (std::isnan(k10GravityEnv)) k10GravityEnv = 0.0; + if (std::isnan(k10GravityEnv)) k10GravityEnv = 0.0; // (l=2, n=1, m=2), Gravity Wave dissipation from envelope boundary double w12_4_3 = w12 * std::cbrt(w12); double w12_8_3 = w12_4_3 * w12_4_3; k12GravityEnv = E2Envelope * std::copysign(w12_8_3, w12); - if (std::isnan(k12GravityEnv)) k12GravityEnv = 0.0; + if (std::isnan(k12GravityEnv)) k12GravityEnv = 0.0; // (l=2, n=2, m=2), Gravity Wave dissipation from envelope boundary double w22_4_3 = w22 * std::cbrt(w22); double w22_8_3 = w22_4_3 * w22_4_3; k22GravityEnv = E2Envelope * std::copysign(w22_8_3, w22); - if (std::isnan(k22GravityEnv)) k22GravityEnv = 0.0; + if (std::isnan(k22GravityEnv)) k22GravityEnv = 0.0; // (l=2, n=3, m=2), Gravity Wave dissipation from envelope boundary double w32_4_3 = w32 * std::cbrt(w32); double w32_8_3 = w32_4_3 * w32_4_3; k32GravityEnv = E2Envelope * std::copysign(w32_8_3, w32); - if (std::isnan(k32GravityEnv)) k32GravityEnv = 0.0; + if (std::isnan(k32GravityEnv)) k32GravityEnv = 0.0; } // (l=2, n=2, m=2), Inertial Wave dissipation, convective envelope - // IW dissipation is only efficient for highly spinning stars, as in Esseldeurs, et al., 2024 - if (utils::Compare(twoOmegaSpin, p_Omega) >= 0) { + // IW dissipation is only efficient for highly spinning stars, as in Esseldeurs, et al., 2024 + if (utils::Compare(twoOmegaSpin, p_Omega) >= 0) { double epsilonIW_2 = omegaSpin * omegaSpin * R3OverG_M; double oneMinusAlpha_4 = oneMinusAlpha_2 * oneMinusAlpha_2; double bracket1 = 1.0 + (2.0 * alpha) + (3.0 * alpha_2) + (3.0 * alpha_3 / 2.0); @@ -3389,7 +3389,7 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do double bracket3 = 1.0 + (3.0 * gamma / 2.0) + (5.0 * alpha_3 / (2.0 * gamma) * (1.0 + (gamma / 2.0) - (3.0* gamma * gamma / 2.0))) - (9.0 / 4.0 * oneMinusGamma * alpha_5); k22InertialEnv = (100.0 * M_PI / 63.0) * epsilonIW_2 * (alpha_5 / (1.0 - alpha_5)) * oneMinusGamma_2 * oneMinusAlpha_4 * bracket1 * bracket1 * bracket2 / bracket3 / bracket3; k22InertialEnv = std::copysign(k22InertialEnv, w22); - if (std::isnan(k22InertialEnv)) k22InertialEnv = 0.0; + if (std::isnan(k22InertialEnv)) k22InertialEnv = 0.0; } } @@ -3399,9 +3399,9 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do /* - * Calculate the Equilibrium tides contribution to the l=2, (n,m) = [(1,0), (1,2), (2,2), (3,2)] imaginary components of the + * Calculate the Equilibrium tides contribution to the l=2, (n,m) = [(1,0), (1,2), (2,2), (3,2)] imaginary components of the * potential tidal Love number - * + * * Barker (2020), Eqs. (20) to (27), (l=2, n=2, m=2 mode only). * * DBL_DBL_DBL_DBL CalculateImKnmEquilibrium(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) @@ -3409,7 +3409,7 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmDynamical(const double p_Omega, const do * @param [IN] p_Omega Orbital angular frequency (1/yr) * @param [IN] p_SemiMajorAxis Semi-major axis of binary (AU) * @param [IN] p_M2 Mass of companion star (Msol) - * @return [(1,0), (1,2), (2,2), (3,2)] Imaginary components of the + * @return [(1,0), (1,2), (2,2), (3,2)] Imaginary components of the * potential tidal Love number, Equilibrium tides only (unitless) */ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmEquilibrium(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) const { @@ -3420,10 +3420,10 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmEquilibrium(const double p_Omega, const double rEnvAU = CalculateRadialExtentConvectiveEnvelope() * RSOL_TO_AU; double envMass, envMassMax; std::tie(envMass, envMassMax) = CalculateConvectiveEnvelopeMass(); - + double rOutAU = m_Radius * RSOL_TO_AU; // outer boundary of convective envelope double rInAU = (rOutAU - rEnvAU); // inner boundary of convective envelope - + if (utils::Compare(rEnvAU/rOutAU, TIDES_MINIMUM_FRACTIONAL_EXTENT) <= 0 || utils::Compare(envMass/m_Mass, TIDES_MINIMUM_FRACTIONAL_EXTENT) <= 0 || std::isnan(envMass)) return std::make_tuple(0.0, 0.0, 0.0, 0.0); // skip calculations if there is no convective envelope (to avoid Imk22 = NaN) double rOut_2 = rOutAU * rOutAU; @@ -3461,14 +3461,14 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmEquilibrium(const double p_Omega, const double k2_prefactor = (224.0 * M_PI / 15.0) * (rOut_9 - rIn_9) * rhoConv / G_AU_Msol_yr / M_2 / rOut_5; // (l=2, n=1, m=0), Viscous dissipation, convective envelope - double omega_t_10 = std::abs(w10); + double omega_t_10 = std::abs(w10); double omega_tOverOmega_c_10 = omega_t_10 / omegaConv; double nuTidal10 = vl_5; - if (utils::Compare(omega_tOverOmega_c_10, 5.0) > 0) { + if (utils::Compare(omega_tOverOmega_c_10, 5.0) > 0) { nuTidal10 = vl25OverRoot20 / omega_tOverOmega_c_10 / omega_tOverOmega_c_10; } else if (utils::Compare(omega_tOverOmega_c_10, 0.01) > 0) { - nuTidal10 = vlOver2 / std::sqrt(omega_tOverOmega_c_10); + nuTidal10 = vlOver2 / std::sqrt(omega_tOverOmega_c_10); } double k10Equilibrium = k2_prefactor * nuTidal10 * omega_t_10; if (std::isnan(k10Equilibrium)) k10Equilibrium = 0.0; @@ -3476,14 +3476,14 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmEquilibrium(const double p_Omega, const // (l=2, n=1, m=2), Viscous dissipation, convective envelope - double omega_t_12 = std::abs(w12); + double omega_t_12 = std::abs(w12); double omega_tOverOmega_c_12 = omega_t_12 / omegaConv; double nuTidal12 = vl_5; - if (utils::Compare(omega_tOverOmega_c_12, 5.0) > 0) { + if (utils::Compare(omega_tOverOmega_c_12, 5.0) > 0) { nuTidal12 = vl25OverRoot20 / omega_tOverOmega_c_12 / omega_tOverOmega_c_12; } else if (utils::Compare(omega_tOverOmega_c_12, 0.01) > 0) { - nuTidal12 = vlOver2 / std::sqrt(omega_tOverOmega_c_12); + nuTidal12 = vlOver2 / std::sqrt(omega_tOverOmega_c_12); } double k12Equilibrium = k2_prefactor * nuTidal12 * omega_t_12; if (std::isnan(k12Equilibrium)) k12Equilibrium = 0.0; @@ -3491,14 +3491,14 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmEquilibrium(const double p_Omega, const // (l=2, n=2, m=2), Viscous dissipation, convective envelope - double omega_t_22 = std::abs(w22); + double omega_t_22 = std::abs(w22); double omega_tOverOmega_c_22 = omega_t_22 / omegaConv; double nuTidal22 = vl_5; - if (utils::Compare(omega_tOverOmega_c_22, 5.0) > 0) { + if (utils::Compare(omega_tOverOmega_c_22, 5.0) > 0) { nuTidal22 = vl25OverRoot20 / omega_tOverOmega_c_22 / omega_tOverOmega_c_22; } else if (utils::Compare(omega_tOverOmega_c_22, 0.01) > 0) { - nuTidal22 = vlOver2 / std::sqrt(omega_tOverOmega_c_22); + nuTidal22 = vlOver2 / std::sqrt(omega_tOverOmega_c_22); } double k22Equilibrium = k2_prefactor * nuTidal22 * omega_t_22; if (std::isnan(k22Equilibrium)) k22Equilibrium = 0.0; @@ -3506,14 +3506,14 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmEquilibrium(const double p_Omega, const // (l=2, n=3, m=2), Viscous dissipation, convective envelope - double omega_t_32 = std::abs(w32); + double omega_t_32 = std::abs(w32); double omega_t_over_omega_c_32 = omega_t_32 / omegaConv; double nuTidal32 = vl_5; - if (utils::Compare(omega_t_over_omega_c_32, 5.0) > 0) { + if (utils::Compare(omega_t_over_omega_c_32, 5.0) > 0) { nuTidal32 = vl25OverRoot20 / omega_t_over_omega_c_32 / omega_t_over_omega_c_32; } else if (utils::Compare(omega_t_over_omega_c_32, 0.01) > 0) { - nuTidal32 = vlOver2 / std::sqrt(omega_t_over_omega_c_32); + nuTidal32 = vlOver2 / std::sqrt(omega_t_over_omega_c_32); } double k32Equilibrium = k2_prefactor * nuTidal32 * omega_t_32; if (std::isnan(k32Equilibrium)) k32Equilibrium = 0.0; @@ -3525,7 +3525,7 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmEquilibrium(const double p_Omega, const /* - * Calculate the l=2, (n,m) = [(1,0), (1,2), (2,2), (3,2)] imaginary components of the potential tidal Love number + * Calculate the l=2, (n,m) = [(1,0), (1,2), (2,2), (3,2)] imaginary components of the potential tidal Love number * by combining Equilibrium and Dynamical tidal contributions. * * DBL_DBL_DBL_DBL CalculateImKnmTidal(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) @@ -3533,17 +3533,17 @@ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmEquilibrium(const double p_Omega, const * @param [IN] p_Omega Orbital angular frequency (1/yr) * @param [IN] p_SemiMajorAxis Semi-major axis of binary (AU) * @param [IN] p_M2 Mass of companion star (Msol) - * @return [(1,0), (1,2), (2,2), (3,2)] Imaginary components of the + * @return [(1,0), (1,2), (2,2), (3,2)] Imaginary components of the * potential tidal Love number (unitless) */ DBL_DBL_DBL_DBL BaseStar::CalculateImKnmTidal(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) const { - + double Imk10Dynamical, Imk12Dynamical, Imk22Dynamical, Imk32Dynamical; std::tie(Imk10Dynamical, Imk12Dynamical, Imk22Dynamical, Imk32Dynamical) = CalculateImKnmDynamical(p_Omega, p_SemiMajorAxis, p_M2); double Imk10Equilibrium, Imk12Equilibrium, Imk22Equilibrium, Imk32Equilibrium; std::tie(Imk10Equilibrium, Imk12Equilibrium, Imk22Equilibrium, Imk32Equilibrium) = CalculateImKnmEquilibrium(p_Omega, p_SemiMajorAxis, p_M2); - + // return combined ImKnm terms; return std::make_tuple(Imk10Dynamical + Imk10Equilibrium, Imk12Dynamical + Imk12Equilibrium, Imk22Dynamical + Imk22Equilibrium, Imk32Dynamical + Imk32Equilibrium); } @@ -3618,11 +3618,11 @@ double BaseStar::CalculateDynamicalTimescale_Static(const double p_Mass, const d /* * Calculate thermal timescale * - * pre-factor from Kalogera & Webbink 1996 (https://arxiv.org/abs/astro-ph/9508072), equation 2, + * pre-factor from Kalogera & Webbink 1996 (https://arxiv.org/abs/astro-ph/9508072), equation 2, * combined with p_Mass * p_EnvMass case from equation 61 from https://arxiv.org/abs/astro-ph/0201220 for k in {2,3,4,5,6,8,9} * [note that equation 61 of BSE (https://arxiv.org/abs/astro-ph/0201220) approximates this with a value a factor of 3 smaller] - * - * + * + * * double CalculateThermalTimescale(const double p_Radius) const * * @param [IN] p_Radius Radius in Rsol @@ -3630,7 +3630,7 @@ double BaseStar::CalculateDynamicalTimescale_Static(const double p_Mass, const d * * The p_Radius parameter is to accommodate the call (of this function) in BaseBinaryStar::CalculateMassTransfer() */ -double BaseStar::CalculateThermalTimescale(const double p_Radius) const { +double BaseStar::CalculateThermalTimescale(const double p_Radius) const { return 31.4 * m_Mass * (m_Mass == m_CoreMass ? m_Mass : m_Mass - m_CoreMass) / (p_Radius * m_Luminosity); // G*Msol^2/(Lsol*Rsol) ~ 31.4 Myr (~ 30 Myr in Kalogera & Webbink) } @@ -3677,7 +3677,7 @@ double BaseStar::CalculateRadialExpansionTimescale_Static(const STELLAR_TYPE p_S * @return Radial expansion timescale */ double BaseStar::CalculateRadialExpansionTimescaleDuringMassTransfer() { - + // We create and age it slightly to determine how the radius will change. // To be sure the clone does not participate in logging, we set its persistence to EPHEMERAL. BaseStar *clone = Clone(OBJECT_PERSISTENCE::EPHEMERAL, false); // do not re-initialise the clone @@ -3840,18 +3840,18 @@ double BaseStar::DrawRemnantKickMuller(const double p_COCoreMass) const { /* * Draw kick magnitude per Mandel and Mueller, 2020 * - * double DrawRemnantKickMullerMandel(const double p_COCoreMass, + * double DrawRemnantKickMullerMandel(const double p_COCoreMass, * const double p_Rand, * const double p_RemnantMass) - * + * * @param [IN] p_COCoreMass Carbon Oxygen core mass of exploding star (Msol) * @param [IN] p_Rand Random number between 0 and 1 used for drawing from the distribution * @param [IN] p_RemnantMass Mass of the remnant (Msol) * @return Drawn kick magnitude (km s^-1) */ -double BaseStar::DrawRemnantKickMullerMandel(const double p_COCoreMass, +double BaseStar::DrawRemnantKickMullerMandel(const double p_COCoreMass, const double p_Rand, - const double p_RemnantMass) const { + const double p_RemnantMass) const { double remnantKick; double muKick = 0.0; double sigmaKick = 0.0; @@ -3868,12 +3868,12 @@ double BaseStar::DrawRemnantKickMullerMandel(const double p_COCoreMass, double quantile0 = gsl_cdf_gaussian_P(-1.0, sigmaKick); //quantile of -1 in the Gaussian CDF; the goal is to draw from the cut-off Gaussian since the kick must exceed 0 double rand = quantile0 + p_Rand * (1.0 - quantile0); remnantKick = muKick * (1.0 + gsl_cdf_gaussian_Pinv(rand, sigmaKick)); - + // Mandel * Mueller 2020 call for USSN kicks to be treated in the same way as CCSN kicks; however, if this override flag is set, set the USSN kick to be equal to the user-provided magnitude if (utils::SNEventType(m_SupernovaDetails.events.current) == SN_EVENT::USSN && OPTIONS->USSNKicksOverrideMandelMuller() ) { remnantKick = OPTIONS->KickMagnitudeDistributionSigmaForUSSN(); } - + return remnantKick; } @@ -3952,7 +3952,7 @@ double BaseStar::DrawSNKickMagnitude(const double p_Sigma, else kickMagnitude = DrawKickMagnitudeDistributionMaxwell(p_Sigma, p_Rand); } break; - + default: // unknown prescription // the only way this can happen is if someone added a KICK_MAGNITUDE_DISTRIBUTION // and it isn't accounted for in this code. We should not default here, with or without a warning. @@ -4001,9 +4001,9 @@ double BaseStar::CalculateSNKickMagnitude(const double p_RemnantMass, const doub sigma = OPTIONS->KickMagnitudeDistributionSigmaForUSSN(); break; - case SN_EVENT::AIC: // AIC have 0 kick - case SN_EVENT::SNIA: // SNIA have 0 kick - case SN_EVENT::HeSD: // HeSD have 0 kick + case SN_EVENT::AIC: // AIC have 0 kick + case SN_EVENT::SNIA: // SNIA have 0 kick + case SN_EVENT::HeSD: // HeSD have 0 kick sigma = 0.0; break; @@ -4018,7 +4018,7 @@ double BaseStar::CalculateSNKickMagnitude(const double p_RemnantMass, const doub sigma = OPTIONS->KickMagnitudeDistributionSigmaCCSN_NS(); // yes else if (p_StellarType == STELLAR_TYPE::BLACK_HOLE) // no - black hole? sigma = OPTIONS->KickMagnitudeDistributionSigmaCCSN_BH(); // yes - else // unexpected stellar type - shouldn't happen + else // unexpected stellar type - shouldn't happen error = ERROR::UNEXPECTED_STELLAR_TYPE; // set error value } break; @@ -4044,14 +4044,14 @@ double BaseStar::CalculateSNKickMagnitude(const double p_RemnantMass, const doub error = ERROR::UNKNOWN_SN_EVENT; // set error value } - + if (error == ERROR::NONE) { // check for errors // no errors - draw kick magnitude vK = DrawSNKickMagnitude(sigma, m_SupernovaDetails.COCoreMassAtCOFormation, m_SupernovaDetails.kickMagnitudeRandom, p_EjectaMass, p_RemnantMass); } } else { // user supplied kick parameters and wants to use supplied kick magnitude, so ... - vK = m_SupernovaDetails.initialKickParameters.magnitude; // ... use it + vK = m_SupernovaDetails.initialKickParameters.magnitude; // ... use it } if (error == ERROR::NONE) { // check for errors @@ -4090,7 +4090,7 @@ void BaseStar::CalculateSNAnomalies(const double p_Eccentricity) { std::tie(error, m_SupernovaDetails.eccentricAnomaly, m_SupernovaDetails.trueAnomaly) = utils::SolveKeplersEquation(m_SupernovaDetails.meanAnomaly, p_Eccentricity); - if (error == ERROR::NO_CONVERGENCE) { THROW_ERROR(error, "Solving Kepler's equation"); } // no convergence - throw error + if (error == ERROR::NO_CONVERGENCE) { THROW_ERROR(error, "Solving Kepler's equation"); } // no convergence - throw error else if (error == ERROR::OUT_OF_BOUNDS ) { THROW_ERROR(error, "Eccentric anomaly"); } // eccentric anomaly out of bounds - throw error return; @@ -4171,7 +4171,7 @@ double BaseStar::CalculateConvectiveEnvelopeBindingEnergy(const double p_TotalMa * @return Lambda binding energy parameter for the outer convective envelope */ double BaseStar::CalculateConvectiveEnvelopeLambdaPicker(const DBL_DBL p_convectiveEnvelopeMass) const { - + double envMass, envMassMax; std::tie(envMass, envMassMax) = p_convectiveEnvelopeMass; double m2 = 0.0023 * m_Log10Metallicity * m_Log10Metallicity + 0.0088 * m_Log10Metallicity + 0.013; // Eq. (12) and Table 1 of Picker, Hirai, Mandel (2024) @@ -4179,7 +4179,7 @@ double BaseStar::CalculateConvectiveEnvelopeLambdaPicker(const DBL_DBL p_convect double logLambda = envMass / envMassMax > 0.3 ? 0.42 * envMass / envMassMax + b1 : 0.3 * 0.42 + b1; - + return exp(logLambda); } @@ -4219,7 +4219,7 @@ bool BaseStar::IsOneOf(const STELLAR_TYPE_LIST p_List) const { * @return Timestep */ double BaseStar::CalculateTimestep() { - + double radialExpansionTimescale = CalculateRadialExpansionTimescale(); double massChangeTimescale = CalculateMassChangeTimescale(); double dt = 0.0; @@ -4229,7 +4229,7 @@ double BaseStar::CalculateTimestep() { if (radialExpansionTimescale > 0.0) // non-positive means it could not be computed (e.g., just after stellar type change) dt = dt <= 0.0 ? OPTIONS->RadialChangeFraction() * radialExpansionTimescale : min(dt, OPTIONS->RadialChangeFraction() * radialExpansionTimescale); - + // the GBParams and Timescale calculations need to be done // before the timestep calculation - since the binary code // calls this functiom, the GBParams and Timescale functions @@ -4238,15 +4238,15 @@ double BaseStar::CalculateTimestep() { CalculateTimescales(); // calculate timescales dt = dt <= 0.0 ? ChooseTimestep(m_Age) : min(dt, ChooseTimestep(m_Age)); - + // there is a chance that mass loss from winds is much faster than previously estimated if, say, LBV winds have turned on // we therefore precompute the mass loss rate to avoid taking an overly long timestep, despite the extra computational costs double massChangeWinds = m_Mass - CalculateMassLossValues(dt, false); if(utils::Compare(massChangeWinds, 0.0) != 0) dt = min(dt, OPTIONS->MassChangeFraction() * (dt * m_Mass / fabs(massChangeWinds))); - + dt = max(round(dt / TIMESTEP_QUANTUM) * TIMESTEP_QUANTUM, NUCLEAR_MINIMUM_TIMESTEP); - + return dt; } @@ -4296,7 +4296,7 @@ void BaseStar::UpdateAttributesAndAgeOneTimestepPreamble(const double p_DeltaMas m_MassPrev = m_Mass; m_RadiusPrev = m_Radius; } - + // the GBParams and Timescale calculations need to be done before taking the timestep - since // the binary code ultimately calls this via UpdateAttributesAndAgeOneTimestep(), the GBParams // and Timescale functions are called here. @@ -4381,7 +4381,7 @@ STELLAR_TYPE BaseStar::UpdateAttributesAndAgeOneTimestep(const double p_DeltaMas else { stellarType = ResolveSupernova(); // handle supernova if (stellarType == m_StellarType) { // still on phase? - + UpdateAttributesAndAgeOneTimestepPreamble(p_DeltaMass, p_DeltaMass0, p_DeltaTime); // apply mass changes and save current values if required if (p_ForceRecalculate || // force recalculate? @@ -4396,7 +4396,7 @@ STELLAR_TYPE BaseStar::UpdateAttributesAndAgeOneTimestep(const double p_DeltaMas stellarType = EvolveOnPhase(p_DeltaTime); // evolve on phase if (stellarType == m_StellarType) { // need to switch to new stellar type? stellarType = ResolveEndOfPhase(p_ResolveEnvelopeLoss); // no - check for need to move off phase - } + } } } } @@ -4420,7 +4420,7 @@ STELLAR_TYPE BaseStar::EvolveOnPhase(const double p_DeltaTime) { STELLAR_TYPE stellarType = m_StellarType; if (ShouldEvolveOnPhase()) { // evolve timestep on phase - + UpdateMainSequenceCoreMass(p_DeltaTime, -m_Mdot); // update core mass, relevant for MS stars m_Tau = CalculateTauOnPhase(); @@ -4435,8 +4435,8 @@ STELLAR_TYPE BaseStar::EvolveOnPhase(const double p_DeltaTime) { m_HeliumAbundanceCore = CalculateHeliumAbundanceCoreOnPhase(); m_HeliumAbundanceSurface = CalculateHeliumAbundanceSurfaceOnPhase(); m_HydrogenAbundanceCore = CalculateHydrogenAbundanceCoreOnPhase(); - m_HydrogenAbundanceSurface = CalculateHydrogenAbundanceSurfaceOnPhase(); - + m_HydrogenAbundanceSurface = CalculateHydrogenAbundanceSurfaceOnPhase(); + std::tie(m_Radius, stellarType) = CalculateRadiusAndStellarTypeOnPhase(); // radius and possibly new stellar type m_Mu = CalculatePerturbationMuOnPhase(); @@ -4479,7 +4479,7 @@ STELLAR_TYPE BaseStar::ResolveEndOfPhase(const bool p_ResolveEnvelopeLoss) { if (p_ResolveEnvelopeLoss) stellarType = ResolveEnvelopeLoss(); // if required, resolve envelope loss if it occurs if (stellarType == m_StellarType) { // staying on phase? - + m_Tau = CalculateTauAtPhaseEnd(); m_COCoreMass = CalculateCOCoreMassAtPhaseEnd(); diff --git a/src/BaseStar.h b/src/BaseStar.h index 233282e8e..1f12352e7 100644 --- a/src/BaseStar.h +++ b/src/BaseStar.h @@ -16,18 +16,18 @@ class BaseStar { - + public: - + BaseStar(); - + BaseStar(const unsigned long int p_RandomSeed, const double p_MZAMS, const double p_Metallicity, const KickParameters p_KickParameters, const double p_RotationalVelocity = -1.0); - - + + /* * The following Clone() functions should be used to clone a star - any steller type, including BaseStar. * The BaseStar functions will never actually be executed - the derived functions will be called as required. @@ -60,13 +60,13 @@ class BaseStar { * (Default is `true`) * @return (pointer to) The cloned star */ - + virtual BaseStar* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { return this; } static BaseStar* Clone(BaseStar* p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { return p_Star; } - + virtual ~BaseStar() {} - - + + // object identifiers - all classes have these OBJECT_ID ObjectId() const { return m_ObjectId; } OBJECT_TYPE ObjectType() const { return OBJECT_TYPE::BASE_STAR; } @@ -74,8 +74,8 @@ class BaseStar { STELLAR_TYPE InitialStellarType() const { return m_InitialStellarType; } STELLAR_TYPE StellarType() const { return m_StellarType; } STELLAR_TYPE StellarTypePrev() const { return m_StellarTypePrev; } - - + + // getters - alphabetically double Age() const { return m_Age; } double AngularMomentum() const { return m_AngularMomentum; } @@ -182,74 +182,74 @@ class BaseStar { double VelocityZ() const { return m_ComponentVelocity.zValue(); } virtual ACCRETION_REGIME WhiteDwarfAccretionRegime() const { return ACCRETION_REGIME::ZERO; } double XExponent() const { return m_XExponent; } - - + + // setters void SetAngularMomentum(double p_AngularMomentum) { m_AngularMomentum = std::max(p_AngularMomentum, 0.0); } void SetInitialType(const STELLAR_TYPE p_InitialType) { m_InitialStellarType = p_InitialType; } void SetError(const ERROR p_Error) { m_Error = p_Error; } void SetObjectId(const OBJECT_ID p_ObjectId) { m_ObjectId = p_ObjectId; } void SetPersistence(const OBJECT_PERSISTENCE p_Persistence) { m_ObjectPersistence = p_Persistence; } - + void SetOmega(double p_Omega) { SetAngularMomentum(CalculateMomentOfInertiaAU() * p_Omega); } - + void SetSNCurrentEvent(const SN_EVENT p_SNEvent) { m_SupernovaDetails.events.current |= p_SNEvent; } // Set supernova primary event/state for current timestep void SetSNPastEvent(const SN_EVENT p_SNEvent) { m_SupernovaDetails.events.past |= p_SNEvent; } // Set supernova primary event/state for any past timestep - + void SetEvolutionStatus(const EVOLUTION_STATUS p_EvolutionStatus) { m_EvolutionStatus = p_EvolutionStatus; } // Set evolution status (typically final outcome) for star void UpdateComponentVelocity(const Vector3d p_NewVelocity) { m_ComponentVelocity += p_NewVelocity; } - + void UpdateMassTransferDonorHistory(); - + void UpdatePreviousTimestepDuration() { m_DtPrev = m_Dt; } - - - + + + // member functions - alphabetically void ApplyMassTransferRejuvenationFactor() { m_Age *= CalculateMassTransferRejuvenationFactor(); } // Apply age rejuvenation factor - + double CalculateBindingEnergy(const double p_CoreMass, const double p_EnvMass, const double p_Radius, const double p_Lambda) const; virtual double CalculateConvectiveCoreMass() const {return 0.0;} virtual double CalculateConvectiveCoreRadius() const {return 0.0;} - + double CalculateConvectiveEnvelopeBindingEnergy(const double p_TotalMass, const double p_ConvectiveEnvelopeMass, const double p_Radius, const double p_Lambda) const; - + double CalculateConvectiveEnvelopeLambdaPicker(const DBL_DBL p_ConvectiveEnvelopeMass) const; virtual DBL_DBL CalculateConvectiveEnvelopeMass() const { return std::tuple (0.0, 0.0); } - + virtual double CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, const double p_massTransferEfficiencyBeta); virtual double CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { return 0.0; } // Default is 0.0 virtual double CalculateCriticalMassRatioGeEtAl(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) { return InterpolateGeEtAlQCrit(p_qCritPrescription, p_massTransferEfficiencyBeta); } virtual double CalculateCriticalMassRatioHurleyHjellmingWebbink() const { return 0.0; } // Default is 0.0 - + double CalculateDynamicalTimescale() const { return CalculateDynamicalTimescale_Static(m_Mass, m_Radius); } // Use class member variables - + double CalculateEddingtonLuminosity() const { return CalculateEddingtonLuminosity_Static(m_Mass, m_HeliumAbundanceSurface); } // Use class member variables - + double CalculateEddyTurnoverTimescale() const; - + virtual void CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams) { } // Default is NO-OP virtual void CalculateGBParams() { CalculateGBParams(m_Mass0, m_GBParams); } // Use class member variables - + double CalculateInitialHeliumAbundance() const { return 0.24 + 2.0 * m_Metallicity; } // Pols et al. 1998 double CalculateInitialHydrogenAbundance() const { return 0.76 - 3.0 * m_Metallicity; } // Pols et al. 1998 - + virtual DBL_DBL_DBL_DBL CalculateImKnmDynamical(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) const; virtual DBL_DBL_DBL_DBL CalculateImKnmEquilibrium(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) const ; virtual DBL_DBL_DBL_DBL CalculateImKnmTidal(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) const; - + virtual double CalculateLambdaDewi() const { return 1.0; } // Default for stellar types with no LamdaDewi definitions - 1.0 is benign double CalculateLambdaKruckow(const double p_Radius, const double p_Alpha) const; double CalculateLambdaKruckow() const { return CalculateLambdaKruckow(m_Radius, OPTIONS->CommonEnvelopeSlopeKruckow()); } virtual double CalculateLambdaLoveridge(const double p_EnvMass, const bool p_IsMassLoss = false) const { return 1.0; } // Default for non giant branch stars - 1.0 is benign double CalculateLambdaLoveridge() const { return CalculateLambdaLoveridge(m_Mass - m_CoreMass, false); } double CalculateLambdaNanjing() const; - + DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, - const double p_AccretorMassRate); + const double p_AccretorMassRate); virtual DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, const double p_AccretorMassRate, const bool p_IsHeRich) { return CalculateMassAcceptanceRate(p_DonorMassRate, p_AccretorMassRate); } // Ignore the He content for non-WDs @@ -258,16 +258,16 @@ class BaseStar { const double p_CompanionMass, const double p_CompanionRadius, const double p_CompanionEnvelope) const; - + double CalculateMassChangeTimescale() const { return CalculateMassChangeTimescale_Static(m_StellarType, m_StellarTypePrev, m_Mass, m_MassPrev, m_DtPrev); } // Use class member variables double CalculateMassLossValues(double p_Dt, const bool p_UpdateMDot = false); virtual double CalculateMomentOfInertia() const { return (0.1 * (m_Mass) * m_Radius * m_Radius); } // Defaults to MS. k2 = 0.1 as defined in Hurley et al. 2000, after eq 109 virtual double CalculateMomentOfInertiaAU() const { return CalculateMomentOfInertia() * RSOL_TO_AU * RSOL_TO_AU; } - + double CalculateNuclearMassLossRate() { return m_Mass / CalculateRadialExpansionTimescaleDuringMassTransfer(); } - + double CalculateOmegaCHE(const double p_MZAMS, const double p_Metallicity) const; double CalculateOpacity() const { return CalculateOpacity_Static(m_HeliumAbundanceSurface); } // Use class member variables @@ -275,13 +275,13 @@ class BaseStar { double CalculateRadialChange() const { return (utils::Compare(m_RadiusPrev,0)<=0)? 0 : std::abs(m_Radius - m_RadiusPrev) / m_RadiusPrev; } // Return fractional radial change (if previous radius is negative or zero, return 0 to avoid NaN double CalculateRadialExpansionTimescale() const { return CalculateRadialExpansionTimescale_Static(m_StellarType, m_StellarTypePrev, m_Radius, m_RadiusPrev, m_DtPrev); } // Use class member variables - + double CalculateRadialExpansionTimescaleDuringMassTransfer(); - + virtual double CalculateRadialExtentConvectiveEnvelope() const { return 0.0; } // Default for stars with no convective envelope - + virtual double CalculateRadiusOnMassChange(double p_dM) { return Radius(); } // NO-OP - + virtual double CalculateRemnantRadius() const { return Radius(); } // Relevant for MS stars, over-written for GB stars @@ -301,7 +301,7 @@ class BaseStar { double CalculateZetaAdiabatic(); virtual double CalculateZetaConstantsByEnvelope(ZETA_PRESCRIPTION p_ZetaPrescription) { return 0.0; } // Use inheritance hierarchy - + virtual double CalculateZetaEquilibrium() { return 0.0; } void ClearCurrentSNEvent() { m_SupernovaDetails.events.current = SN_EVENT::NONE; } // Clear supernova event/state for current timestep @@ -311,10 +311,10 @@ class BaseStar { virtual ENVELOPE DetermineEnvelopeType() const { return ENVELOPE::REMNANT; } // Default is REMNANT - but should never be called virtual MT_CASE DetermineMassTransferTypeAsDonor() const { return MT_CASE::OTHER; } // Not A, B, C, or NONE - + void HaltWinds() { m_Mdot = 0.0; } // Disable wind mass loss in current time step (e.g., if star is a donor or accretor in a RLOF episode) - virtual double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, + virtual double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) { return 0.0; } // Placeholder, use interpolator for either H-rich or H-poor stars void ResetEnvelopeExpulsationByPulsations() { m_EnvelopeJustExpelledByPulsations = false; } @@ -334,15 +334,15 @@ class BaseStar { virtual void ResolveMassLoss(double p_Dt); virtual void ResolveShellChange(const double p_AccretedMass) { } // Default does nothing, use inheritance for WDs. - + void SetStellarTypePrev(const STELLAR_TYPE p_StellarTypePrev) { m_StellarTypePrev = p_StellarTypePrev; } - + virtual bool ShouldEnvelopeBeExpelledByPulsations() const { return false; } // Default is that there is no envelope expulsion by pulsations virtual void SpinDownIsolatedPulsar(const double p_Stepsize) { } // Default is NO-OP virtual double TAMSCoreMass() const { return 0.0; } // Except MS stars - + virtual void UpdateAfterMerger(double p_Mass, double p_HydrogenMass) { } // Default is NO-OP virtual void UpdateAgeAfterMassLoss() { } // Default is NO-OP @@ -361,11 +361,11 @@ class BaseStar { const double p_Epsilon) { } // Default is NO-OP virtual void UpdateMainSequenceCoreMass(const double p_Dt, const double p_TotalMassLossRate) { } // Set core mass for Main Sequence stars; default is NO-OP - + virtual void UpdateTotalMassLossRate(const double p_MassLossRate) { m_TotalMassLossRate = p_MassLossRate; } // m_TotalMassLossRate = -m_Mdot in SSE, during a mass transfer episode m_TotalMassLossRate = m_MassLossRateInRLOF - + // printing functions - bool PrintDetailedOutput(const int p_Id, const SSE_DETAILED_RECORD_TYPE p_RecordType) const { + bool PrintDetailedOutput(const int p_Id, const SSE_DETAILED_RECORD_TYPE p_RecordType) const { return OPTIONS->DetailedOutput() ? LOGGING->LogSSEDetailedOutput(this, p_Id, p_RecordType) : true; // Write record to SSE Detailed Output log file } @@ -377,7 +377,7 @@ class BaseStar { return LOGGING->LogSSESupernovaDetails(this, p_RecordType); // Write record to SSE Supernovae log file } - bool PrintSwitchLog() const { + bool PrintSwitchLog() const { return OPTIONS->SwitchLog() ? (LOGGING->ObjectSwitchingPersistence() == OBJECT_PERSISTENCE::PERMANENT ? LOGGING->LogSSESwitchLog(this) : true) : true; // Write record to SSE Switchlog log file } @@ -397,13 +397,13 @@ class BaseStar { STELLAR_TYPE m_StellarType; // Stellar type defined in Hurley et al. 2000 ERROR m_Error; // Records most recent error encountered for this star - + // member variables - alphabetical in groups bool m_CHE; // CHE flag - true if the star spent entire MS as a CH star; false if evolved CH->MS EVOLUTION_STATUS m_EvolutionStatus; // Status of evolution for this star (typically final outcome e.g. DONE, TIMES_UP, etc.) - + // Stellar variables unsigned long int m_RandomSeed; // Seeds the random number generator for this star @@ -470,7 +470,7 @@ class BaseStar { // constants only calculated once - double m_BaryonicMassOfMaximumNeutronStarMass; // baryonic mass of MaximumNeutronStarMass + double m_BaryonicMassOfMaximumNeutronStarMass; // baryonic mass of MaximumNeutronStarMass // JR: // I initially implemented the following vectors as unordered_maps. The code worked @@ -504,10 +504,10 @@ class BaseStar { SupernovaDetailsT m_SupernovaDetails; // Supernova attributes PulsarDetailsT m_PulsarDetails; // Pulsar attributes - // Star vector velocity + // Star vector velocity Vector3d m_ComponentVelocity; // Isolated star velocity vector (binary's center-of-mass velocity for bound binary) - // Star mass transfer history + // Star mass transfer history ST_VECTOR m_MassTransferDonorHistory; // List of MT donor stellar types - mostly relevant for binary stars // member functions - alphabetically @@ -549,7 +549,7 @@ class BaseStar { virtual double CalculateHeliumAbundanceSurfaceOnPhase() const { return m_HeliumAbundanceSurface; } // Default is NO-OP virtual double CalculateHydrogenAbundanceCoreOnPhase() const { return m_HydrogenAbundanceCore; } // Default is NO-OP - virtual double CalculateHydrogenAbundanceSurfaceOnPhase() const { return m_HydrogenAbundanceSurface; } // Default is NO-OP + virtual double CalculateHydrogenAbundanceSurfaceOnPhase() const { return m_HydrogenAbundanceSurface; } // Default is NO-OP static double CalculateHeRateConstant_Static() { return HE_RATE_CONSTANT; } // Only >= CHeB stars need AHe, but no drama if other stars calculate (retrieve it) - it's only a constant (we could just use the constant inline...) static double CalculateHHeRateConstant_Static() { return HHE_RATE_CONSTANT; } // Only TPAGB stars need AHHe, but no drama if other stars calculate (retrieve it) - it's only a constant (we could just use the constant inline...) @@ -579,7 +579,7 @@ class BaseStar { const double p_Mass, const double p_MassPrev, const double p_DtPrev); - + void CalculateMassCutoffs(const double p_Metallicity, const double p_LogMetallicityXi, DBL_VECTOR &p_MassCutoffs); virtual double CalculateMassLossRate(); @@ -730,7 +730,7 @@ class BaseStar { double ReweightSupernovaKickByMass(const double p_vK, const double p_FallbackFraction, const double p_BlackHoleMass) { return p_vK; } // Default is not to re-weight, except for black holes where the --black-hole-kicks-prescription option is relevant - + virtual void SetSNHydrogenContent() { m_SupernovaDetails.isHydrogenPoor = false; } // Default is false bool ShouldBeMasslessRemnant() const { return (m_Mass <= 0.0 || m_StellarType == STELLAR_TYPE::MASSLESS_REMNANT); } diff --git a/src/BinaryConstituentStar.cpp b/src/BinaryConstituentStar.cpp index 3c5452cae..98b9fd1fc 100644 --- a/src/BinaryConstituentStar.cpp +++ b/src/BinaryConstituentStar.cpp @@ -195,7 +195,7 @@ void BinaryConstituentStar::CalculateCommonEnvelopeValues() { case CE_LAMBDA_PRESCRIPTION::KRUCKOW: m_CEDetails.lambda = CalculateLambdaKruckow(); break; - + case CE_LAMBDA_PRESCRIPTION::DEWI: m_CEDetails.lambda = CalculateLambdaDewi(); break; @@ -208,15 +208,15 @@ void BinaryConstituentStar::CalculateCommonEnvelopeValues() { // The correct fix for this is to add code for the missing prescription or, if the missing // prescription is superfluous, remove it from the option. - THROW_ERROR(ERROR::UNKNOWN_CE_LAMBDA_PRESCRIPTION); // throw error + THROW_ERROR(ERROR::UNKNOWN_CE_LAMBDA_PRESCRIPTION); // throw error } if (utils::Compare(m_CEDetails.lambda, 0.0) <= 0) m_CEDetails.lambda = 0.0; // force non-positive lambda to 0 m_CEDetails.lambda *= OPTIONS->CommonEnvelopeLambdaMultiplier(); // multiply by constant (program option, default = 1.0) - + m_CEDetails.bindingEnergy = CalculateBindingEnergy(CoreMass(), Mass() - CoreMass(), Radius(), m_CEDetails.lambda); - + // properties relevant for the Hirai & Mandel (2022) formalism double maxConvectiveEnvelopeMass; std::tie(m_CEDetails.convectiveEnvelopeMass, maxConvectiveEnvelopeMass) = CalculateConvectiveEnvelopeMass(); @@ -266,9 +266,9 @@ double BinaryConstituentStar::CalculateCircularisationTimescale(const double p_S double rOverAPow10 = rOverA * rOverA * rOverA * rOverA * rOverA * rOverA * rOverA * rOverA * rOverA * rOverA; // use multiplication - pow() is slow double rOverAPow21Over2 = rOverAPow10 * rOverA * std::sqrt(rOverA); // sqrt() is faster than pow() - double secondOrderTidalCoeff = 1.592E-09 * PPOW(Mass(), 2.84); // aka E_2. + double secondOrderTidalCoeff = 1.592E-09 * PPOW(Mass(), 2.84); // aka E_2. double freeFallFactor = std::sqrt(G_AU_Msol_yr * Mass() / rInAUPow3); - + timescale = 1.0 / ((21.0 / 2.0) * freeFallFactor * q2 * PPOW(1.0 + q2, 11.0/6.0) * secondOrderTidalCoeff * rOverAPow21Over2); } break; @@ -396,7 +396,7 @@ double BinaryConstituentStar::StarToRocheLobeRadiusRatio(const double p_SemiMajo // JR: note, this will (probably) fail if option --fp-error-mode is not OFF (the calculation that resulted in p_SemiMajorAxis = inf will (probably) result in a trap) // Maybe use !std::isfinite(p_SemiMajorAxis) to ensure p_SemiMajorAxis is not NaN or inf if ((utils::Compare(p_SemiMajorAxis, 0.0) <= 0) || (utils::Compare(p_Eccentricity, 1.0) > 0) || isinf(p_SemiMajorAxis)) return 0.0; - + double rocheLobeRadius = BaseBinaryStar::CalculateRocheLobeRadius_Static(Mass(), m_Companion->Mass()); return (Radius() * RSOL_TO_AU) / (rocheLobeRadius * p_SemiMajorAxis * (1.0 - p_Eccentricity)); } @@ -421,17 +421,16 @@ void BinaryConstituentStar::InitialiseMassTransfer(const bool p_CommonEnvelope, } -/* +/* * Set class member variable m_MassTransferDiff based on the mass gained or lost during MT. * * Also modify changes to the H/He shell (relevant only for WDs) * - * void SetMassTransferDiffAndResolveWDShellChange(const double p_MassTransferDiff) + * void SetMassTransferDiffAndResolveWDShellChange(const double p_MassTransferDiff) * - * @param [IN] p_MassTransferDiff The amount of mass lost or gained by the star + * @param [IN] p_MassTransferDiff The amount of mass lost or gained by the star */ void BinaryConstituentStar::SetMassTransferDiffAndResolveWDShellChange(const double p_MassTransferDiff) { - m_MassTransferDiff = p_MassTransferDiff; + m_MassTransferDiff = p_MassTransferDiff; ResolveShellChange(p_MassTransferDiff); // only applies to WDs } - diff --git a/src/BinaryConstituentStar.h b/src/BinaryConstituentStar.h index 17710ce99..07d16f0a3 100644 --- a/src/BinaryConstituentStar.h +++ b/src/BinaryConstituentStar.h @@ -18,9 +18,9 @@ class BinaryConstituentStar: virtual public Star { BinaryConstituentStar() : Star() { }; - BinaryConstituentStar(const unsigned long int p_RandomSeed, - const double p_Mass, - const double p_Metallicity, + BinaryConstituentStar(const unsigned long int p_RandomSeed, + const double p_Mass, + const double p_Metallicity, const KickParameters p_KickParameters, const double p_RotationalVelocity = -1.0) : Star(p_RandomSeed, p_Mass, p_Metallicity, p_KickParameters, p_RotationalVelocity) { @@ -50,7 +50,7 @@ class BinaryConstituentStar: virtual public Star { m_CEDetails.postCEE.radialExpansionTimescale = DEFAULT_INITIAL_DOUBLE_VALUE; m_Flags.recycledNS = false; - + m_MassLossDiff = DEFAULT_INITIAL_DOUBLE_VALUE; m_MassTransferDiff = DEFAULT_INITIAL_DOUBLE_VALUE; @@ -97,34 +97,34 @@ class BinaryConstituentStar: virtual public Star { /* * This function should be used to clone a BinaryConstituentStar. - * + * * Important: - * + * * This function returns a pointer, created by the 'new' operator. The 'new' operator dynamically allocates * memory on the heap, not the stack, which is why it is available to the caller of this function after this * function has exited and its stack frame collapsed. It is the responsibility of the caller of this function * to delete the pointer returned when it is no longer required so that the allocated memory is return to the * pool of available memory - failing to do so will cause a memory leak and the program will eventually exhaust * available memory and fail. The preferred usage pattern is: - * + * * T* ptr = Clone(obj, persistence) * ... * ... * delete ptr; ptr = nullptr; - * - * + * + * * template * static BinaryConstituentStar* Clone(BinaryConstituentStar& p_Star, const OBJECT_PERSISTENCE p_Persistence) - * + * * @param [IN] p_Star (address of) The star to be cloned * @param [IN] p_Persistence Specifies the object persistence to be assigned to the cloned star. * If the cloned star is intended to be used temporarily (e.g. for hypothesis testing), * persistence should be EPHEMERAL, otherwise PERMANENT. * @return (pointer to) The cloned star */ - static BinaryConstituentStar* Clone(BinaryConstituentStar& p_Star, const OBJECT_PERSISTENCE p_Persistence) { - BinaryConstituentStar* ptr = new BinaryConstituentStar(p_Star); - ptr->SetPersistence(p_Persistence); + static BinaryConstituentStar* Clone(BinaryConstituentStar& p_Star, const OBJECT_PERSISTENCE p_Persistence) { + BinaryConstituentStar* ptr = new BinaryConstituentStar(p_Star); + ptr->SetPersistence(p_Persistence); return ptr; } static BinaryConstituentStar* Clone(BinaryConstituentStar& p_Star) { return Clone(p_Star, p_Star.ObjectPersistence()); } @@ -211,8 +211,8 @@ class BinaryConstituentStar: virtual public Star { m_Companion->Radius(), m_Companion->MassPreCEE() - m_Companion->CoreMassAtCEE()); ResolveAccretion(m_MassTransferDiff); - - } + + } void SetPostCEEValues(); void SetPreCEEValues(); @@ -223,9 +223,9 @@ class BinaryConstituentStar: virtual public Star { void UpdateMagneticFieldAndSpin(const bool p_CommonEnvelope, const double p_Stepsize, - const double p_Epsilon) { Star::UpdateMagneticFieldAndSpin(p_CommonEnvelope, - ExperiencedRecycledNS(), - p_Stepsize, + const double p_Epsilon) { Star::UpdateMagneticFieldAndSpin(p_CommonEnvelope, + ExperiencedRecycledNS(), + p_Stepsize, m_MassTransferDiff * MSOL_TO_G, p_Epsilon); } @@ -261,7 +261,7 @@ class BinaryConstituentStar: virtual public Star { BinaryConstituentStar *m_Companion; - // member functions - alphabetically + // member functions - alphabetically }; #endif // __BinaryConstituentStar_h__ diff --git a/src/BinaryStar.cpp b/src/BinaryStar.cpp index 42c4c0229..f804601ff 100644 --- a/src/BinaryStar.cpp +++ b/src/BinaryStar.cpp @@ -57,17 +57,17 @@ bool BinaryStar::RevertState() { /* * Print BSE Switch Log record - * + * * Called from main() when SIGUSR1 received - raised by Star::SwitchTo() to indicate a stellar type switch. * Here we use the switch parameters stored in the LOGGING service singleton by Star:SwitchTo() to determine * whether it is the primary or the secondary switching, then call BinaryStar::PrintSwitchLog() with the * appropriate parameters to print the log file record. - * + * * BinaryStar::PrintSwitchLog() * * @return Boolean flag indicating success/failure (true = success) */ -bool BinaryStar::PrintSwitchLog() { +bool BinaryStar::PrintSwitchLog() { bool result = true; diff --git a/src/BinaryStar.h b/src/BinaryStar.h index 3ad50ed3e..47024e761 100755 --- a/src/BinaryStar.h +++ b/src/BinaryStar.h @@ -18,7 +18,7 @@ class BinaryStar { * * Parameter p_Seed is the seed for the random number generator - see main.cpp for an * explanation of how p_Seed is derived. - * + * * Parameter p_Id is the id of the binary - effectively an index - which is added as * a suffix to the filenames of any detailed output files created. */ diff --git a/src/CH.cpp b/src/CH.cpp index b9fd47d8b..c048bd6fd 100755 --- a/src/CH.cpp +++ b/src/CH.cpp @@ -3,15 +3,15 @@ /* * Calculate the helium abundance in the core of the star - * - * Currently just a simple linear model from the initial helium abundance to + * + * Currently just a simple linear model from the initial helium abundance to * the maximum helium abundance (assuming that all hydrogen is converted to - * helium). - * + * helium). + * * Should be updated to match detailed models. * * double CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) - * + * * @param [IN] p_Tau Fraction of main sequence lifetime * * @return Helium abundance in the core (Y_c) @@ -25,11 +25,11 @@ double CH::CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const { /* * Calculate the helium abundance at the surface of the star - * + * * Since the star is homogeneous, the core and the surface have the same abundances - * + * * double CalculateHeliumAbundanceSurfaceOnPhase(const double p_Tau) - * + * * @param [IN] p_Tau Fraction of main sequence lifetime * * @return Helium abundance at the surface (Y_s) @@ -44,14 +44,14 @@ double CH::CalculateHeliumAbundanceSurfaceOnPhase(const double p_Tau) const { /* * Calculate the hydrogen abundance in the core of the star - * - * Currently just a simple linear model. Assumes that hydrogen in the core of - * the star is burned to helium at a constant rate throughout the lifetime. - * + * + * Currently just a simple linear model. Assumes that hydrogen in the core of + * the star is burned to helium at a constant rate throughout the lifetime. + * * Should be updated to match detailed models. * * double CalculateHydrogenAbundanceCoreOnPhase(const double p_Tau) - * + * * @param [IN] p_Tau Fraction of main sequence lifetime * * @return Hydrogen abundance in the core (X_c) @@ -63,13 +63,13 @@ double CH::CalculateHydrogenAbundanceCoreOnPhase(const double p_Tau) const { /* * Calculate the hydrogen abundance at the surface of the star - * + * * Since the star is homogeneous, the core and the surface have the same abundances * * double CalculateHydrogenAbundanceSurfaceOnPhase(const double p_Tau) - * + * * @param [IN] p_Tau Fraction of main sequence lifetime - * + * * @return Hydrogen abundance at the surface (X_s) */ double CH::CalculateHydrogenAbundanceSurfaceOnPhase(const double p_Tau) const { @@ -79,11 +79,11 @@ double CH::CalculateHydrogenAbundanceSurfaceOnPhase(const double p_Tau) const { /* * Calculate the log of the ratio of the lifetimes of a CH star and a normal star of the same mass (log(t_CHE/t_MS)) - * + * * Polynomial fit derived using IZw18 and IZw18CHE BOoST models from Szecsi et al. 2020 (https://arxiv.org/abs/2004.08203) * * double CalculateLogLifetimeRatio(const double p_Mass) - * + * * @param [IN] p_Mass Mass in Msol * * @return Log of the ratio of the lifetimes (log(t_CHE/t_MS)) of a CHE star to a normal star of the same mass @@ -132,7 +132,7 @@ double CH::CalculateLifetimeRatio(const double p_Mass) const { * Calculate the ratio of the log luminosities (logL_CH / logL_MS) of a CH star and a normal star of the same mass * * Polynomial fit derived using IZw18 and IZw18CHE BOoST models from Szecsi et al. 2020 (https://arxiv.org/abs/2004.08203) - * + * * double CalculateLogLuminosityRatio(const double p_Mass, const double p_Tau) * * @param [IN] p_Mass Mass in Msol @@ -141,13 +141,13 @@ double CH::CalculateLifetimeRatio(const double p_Mass) const { * @return Ratio of log luminosities of a CHE star to a normal star of the same mass and age */ double CH::CalculateLogLuminosityRatio(const double p_Mass, const double p_Tau) const { - + // Define some variables double logLuminosityRatio = 1.0; // log(L_CH) / log(L_MS) // If user wants to increase CH MS luminosity, calculate the ratio of CH to MS luminosity if (OPTIONS->EnhanceCHELifetimesLuminosities()) { - + // Polynomial fits to the ratio of logL in models from Szecsi et al., derived using np.polynomial.Polynomial double x = log10(p_Mass); double x2 = x * x; @@ -164,17 +164,17 @@ double CH::CalculateLogLuminosityRatio(const double p_Mass, const double p_Tau) // Make enhancement grow from 1 to logLuminosityRatio over main-sequence logLuminosityRatio = 1.0 + (logLuminosityRatio - 1.0) * p_Tau * p_Tau; - + return logLuminosityRatio; } /* * Calculate the luminosity of a CH star on the main sequence - * + * * Start with the luminosity of a 'normal' (non-CH) star of the same mass/metallicity etc. - * Then multiply that luminosity by the ratio of luminosities - * + * Then multiply that luminosity by the ratio of luminosities + * * double CalculateLuminosityOnPhase(const double p_Time, const double p_Mass, const double p_LZAMS) * * @param [IN] p_Time Time (after ZAMS) in Myr @@ -184,7 +184,7 @@ double CH::CalculateLogLuminosityRatio(const double p_Mass, const double p_Tau) */ double CH::CalculateLuminosityOnPhase(const double p_Time, const double p_Mass, const double p_LZAMS) const { - // First, calculate the standard main sequence luminosity + // First, calculate the standard main sequence luminosity double MSluminosity = MainSequence::CalculateLuminosityOnPhase(p_Time, p_Mass, p_LZAMS); // Then, calculate the ratio of the standard luminosity to the CHE luminosity [log(L_CH) / log(L_MS)] @@ -280,7 +280,7 @@ void CH::UpdateAgeAfterMassLoss() { tMSprime *= lifetimeRatio; m_Age *= tMSprime / tMS; - + CalculateTimescales(m_Mass, m_Timescales); } @@ -317,13 +317,13 @@ double CH::CalculateMassLossFractionOB(const double p_HeAbundanceSurface) const /* - * Calculate the dominant mass loss mechanism and associated rate for the star + * Calculate the dominant mass loss mechanism and associated rate for the star * at the current evolutionary phase - * + * * According to Belczynski et al. 2010 prescription - based on implementation in StarTrack * * Modifications for CH stars - * + * * double CalculateMassLossRateBelczynski2010() * * @return Mass loss rate in Msol per year @@ -364,15 +364,15 @@ double CH::CalculateMassLossRateBelczynski2010() { /* - * Calculate the dominant mass loss mechanism and associated rate for the star + * Calculate the dominant mass loss mechanism and associated rate for the star * at the current evolutionary phase - * + * * According to Merritt et al. 2024 prescription * * Modifications for CH stars - * + * * double CalculateMassLossRateMerritt2025() - * + * * @return Mass loss rate in Msol per year */ double CH::CalculateMassLossRateMerritt2025() { @@ -384,7 +384,7 @@ double CH::CalculateMassLossRateMerritt2025() { double fractionOB = 1.0; // Initialised to 1.0 to allow us to use the OB mass loss rate by default // Calculate OB mass loss rate according to the chosen prescription - MdotOB = BaseStar::CalculateMassLossRateOB(OPTIONS->OBMassLossPrescription()); + MdotOB = BaseStar::CalculateMassLossRateOB(OPTIONS->OBMassLossPrescription()); // If user wants to transition between OB and WR mass loss rates if (OPTIONS->ScaleCHEMassLossWithSurfaceHeliumAbundance()) { @@ -393,8 +393,8 @@ double CH::CalculateMassLossRateMerritt2025() { // cloning it, so that we can ask it what its mass loss rate would be if it were // a HeMS star HeMS *clone = HeMS::Clone((HeMS&)static_cast(*this), OBJECT_PERSISTENCE::EPHEMERAL, false); // Do not initialise so that we can use same mass, luminosity, radius etc - MdotWR = clone->CalculateMassLossRateMerritt2025(); // Calculate WR mass loss rate - delete clone; clone = nullptr; // return the memory allocated for the clone + MdotWR = clone->CalculateMassLossRateMerritt2025(); // Calculate WR mass loss rate + delete clone; clone = nullptr; // return the memory allocated for the clone // Calculate weight for combining these into total mass-loss rate fractionOB = CalculateMassLossFractionOB(m_HeliumAbundanceSurface); @@ -420,7 +420,7 @@ STELLAR_TYPE CH::EvolveToNextPhase() { if (m_Age < m_Timescales[static_cast(TIMESCALE::tMS)]) { // evolving off because of age? stellarType = STELLAR_TYPE::MS_GT_07; // no - must have spun down - evolve as MS star now m_CHE = false; // evolved CH->MS - + // if BRCEK core mass calculations enabled, initialise the core mass based on current mass and central helium fraction if ((OPTIONS->MainSequenceCoreMassPrescription() == CORE_MASS_PRESCRIPTION::BRCEK) && (utils::Compare(m_MZAMS, BRCEK_LOWER_MASS_LIMIT) >= 0)) m_MainSequenceCoreMass = MainSequence::CalculateInitialMainSequenceCoreMass(m_Mass, m_HeliumAbundanceCore); @@ -434,4 +434,3 @@ STELLAR_TYPE CH::EvolveToNextPhase() { return stellarType; } - diff --git a/src/CH.h b/src/CH.h index 1e52ec789..e2539a6fb 100755 --- a/src/CH.h +++ b/src/CH.h @@ -18,22 +18,22 @@ class CH: virtual public BaseStar, public MS_gt_07 { public: CH() { m_StellarType = STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS; }; - + CH(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), MS_gt_07(p_BaseStar) { m_StellarType = STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } CH* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - CH* clone = new CH(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + CH* clone = new CH(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static CH* Clone(CH& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - CH* clone = new CH(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + CH* clone = new CH(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -57,7 +57,7 @@ class CH: virtual public BaseStar, public MS_gt_07 { double CalculateHydrogenAbundanceCoreOnPhase() const { return CalculateHydrogenAbundanceCoreOnPhase(m_Tau); }; double CalculateHydrogenAbundanceSurfaceOnPhase(const double p_Tau) const; double CalculateHydrogenAbundanceSurfaceOnPhase() const { return CalculateHydrogenAbundanceSurfaceOnPhase(m_Tau); }; - + // Lifetime double CalculateLogLifetimeRatio(const double p_Mass) const; double CalculateLifetimeRatio(const double p_Mass) const; @@ -69,27 +69,27 @@ class CH: virtual public BaseStar, public MS_gt_07 { double CalculateLuminosityAtPhaseEnd() const { return CalculateLuminosityAtPhaseEnd(m_Mass0); } // Use class member variables double CalculateLuminosityOnPhase(const double p_Time, const double p_Mass, const double p_LZAMS) const; - double CalculateLuminosityOnPhase() const { return CalculateLuminosityOnPhase(m_Age, m_Mass0, m_LZAMS0); } + double CalculateLuminosityOnPhase() const { return CalculateLuminosityOnPhase(m_Age, m_Mass0, m_LZAMS0); } // Mass loss rate double CalculateMassLossRateBelczynski2010(); double CalculateMassLossRateMerritt2025(); double CalculateMassLossFractionOB(const double p_HeAbundanceSurface) const; - + // Radius double CalculateRadiusOnPhase() const { return m_RZAMS; } // Constant from birth double CalculateRadiusAtPhaseEnd() const { return CalculateRadiusOnPhase(); } // Same as on phase // Timescales void CalculateTimescales(const double p_Mass, DBL_VECTOR &p_Timescales); - void CalculateTimescales() { return BaseStar::CalculateTimescales(); }; + void CalculateTimescales() { return BaseStar::CalculateTimescales(); }; STELLAR_TYPE EvolveToNextPhase(); bool ShouldEvolveOnPhase() const { return m_Age < m_Timescales[static_cast(TIMESCALE::tMS)] && (OPTIONS->OptimisticCHE() || Omega() >= m_OmegaCHE); } // Evolve on CHE phase if age in MS timescale and spinning at least as fast as CHE threshold void UpdateAgeAfterMassLoss(); - + void UpdateMainSequenceCoreMass(const double p_Dt, const double p_TotalMassLossRate) { }; // Do not use core mass calculations during CHE phase }; diff --git a/src/CHeB.cpp b/src/CHeB.cpp index 392495701..31a33665a 100755 --- a/src/CHeB.cpp +++ b/src/CHeB.cpp @@ -11,13 +11,13 @@ /* * Calculate the helium abundance in the core of the star - * + * * Currently just a simple linear model. Should be updated to match detailed models. * * double CalculateHeliumAbundanceCore(const double p_Tau) - * + * * @param [IN] p_Tau Fraction of main sequence lifetime - * + * * @return Helium abundance in the core (Y_c) */ double CHeB::CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const { @@ -48,10 +48,10 @@ void CHeB::CalculateTimescales(const double p_Mass, DBL_VECTOR &p_Timescales) { timescales(tHe) = CalculateLifetimeOnPhase(p_Mass); timescales(tau_BL) = CalculateLifetimeOnBluePhase(p_Mass); - // JR: The blue loop on CHeB can be 0-length/duration (see Hurley et al., 2000, section 5.3, - // particularly eq 58 and beyond). COMPAS does not allow for a 0-length blue loop - some of - // the equations used (e.g. to calculate Radius) result in nan or inf. As a temporary workaround - // until we work out how to skip the blue loop (when it is 0-length) we will set the length of a + // JR: The blue loop on CHeB can be 0-length/duration (see Hurley et al., 2000, section 5.3, + // particularly eq 58 and beyond). COMPAS does not allow for a 0-length blue loop - some of + // the equations used (e.g. to calculate Radius) result in nan or inf. As a temporary workaround + // until we work out how to skip the blue loop (when it is 0-length) we will set the length of a // 0-length blue loop to the absolute minimum timestep (currently ~100 seconds). // // Note that this works around a long-standing problem, which was worked around in legacy COMPAS @@ -60,7 +60,7 @@ void CHeB::CalculateTimescales(const double p_Mass, DBL_VECTOR &p_Timescales) { // if(brackets ==0){brackets = 1e-12;} //If zero gives R=NaN Coen Neijssel 10-01-2017 // // The workaround implemented here is closer to the source of the problem (the blue loop does not - // actually exist for some stars), and maybe a bit more meaningful (we're just using a very short + // actually exist for some stars), and maybe a bit more meaningful (we're just using a very short // duration blue loop instead of a no duration (non-existent) one) if (timescales(tau_BL) <= 0.0) timescales(tau_BL) = ABSOLUTE_MINIMUM_TIMESTEP; // don't use utils::Compare() here @@ -141,7 +141,7 @@ double CHeB::CalculateLambdaDewi() const { * * @param [IN] p_MassIndex Mass index * @param [IN] p_StellarPop The stellar population for metallicity (POP I or POP II) - * + * * @return Nanjing lambda for use in common envelope */ double CHeB::CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR_POPULATION p_StellarPop) const { @@ -510,7 +510,7 @@ double CHeB::CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR * * @param [IN] p_Mass Mass * @param [IN] p_Metallicity Metallicity - * + * * @return Nanjing lambda for use in common envelope */ double CHeB::CalculateLambdaNanjingStarTrack(const double p_Mass, const double p_Metallicity) const { @@ -1374,7 +1374,7 @@ double CHeB::CalculateBluePhaseFBL(const double p_Mass) { * @param [IN] p_Mass Mass in Msol * @return Relative lifetime of blue phase of Core Helium Burning, clamped to [0, 1] */ -double CHeB::CalculateLifetimeOnBluePhase(const double p_Mass) { +double CHeB::CalculateLifetimeOnBluePhase(const double p_Mass) { #define b m_BnCoefficients // for convenience and readability - undefined at end of function #define massCutoffs(x) m_MassCutoffs[static_cast(MASS_CUTOFF::x)] // for convenience and readability - undefined at end of function @@ -1441,16 +1441,16 @@ bool CHeB::ShouldEvolveOnPhase() const { * @return ENVELOPE::{ RADIATIVE, CONVECTIVE, REMNANT } */ ENVELOPE CHeB::DetermineEnvelopeType() const { - + ENVELOPE envelope = ENVELOPE::CONVECTIVE; // default envelope type - + switch (OPTIONS->EnvelopeStatePrescription()) { // which envelope prescription? - + case ENVELOPE_STATE_PRESCRIPTION::LEGACY: case ENVELOPE_STATE_PRESCRIPTION::HURLEY: envelope = ENVELOPE::CONVECTIVE; break; - + case ENVELOPE_STATE_PRESCRIPTION::FIXED_TEMPERATURE: // envelope is radiative if temperature exceeds fixed threshold, otherwise convective envelope = utils::Compare(Temperature() * TSOL, OPTIONS->ConvectiveEnvelopeTemperatureThreshold()) > 0 ? ENVELOPE::RADIATIVE : ENVELOPE::CONVECTIVE; @@ -1462,7 +1462,7 @@ ENVELOPE CHeB::DetermineEnvelopeType() const { std::tie(convectiveEnvelopeMass, convectiveEnvelopeMassMax) = CalculateConvectiveEnvelopeMass(); envelope = utils::Compare(convectiveEnvelopeMass / (m_Mass - m_CoreMass), OPTIONS->ConvectiveEnvelopeMassThreshold()) > 0 ? ENVELOPE::CONVECTIVE : ENVELOPE::RADIATIVE; break; - + default: // unknown prescription // the only way this can happen is if someone added an ENVELOPE_STATE_PRESCRIPTION // and it isn't accounted for in this code. We should not default here, with or without a warning. @@ -1471,9 +1471,9 @@ ENVELOPE CHeB::DetermineEnvelopeType() const { // The correct fix for this is to add code for the missing prescription or, if the missing // prescription is superfluous, remove it from the option. - THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_STATE_PRESCRIPTION); // throw error + THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_STATE_PRESCRIPTION); // throw error } - + return envelope; } @@ -1532,7 +1532,7 @@ double CHeB::ChooseTimestep(const double p_Time) const { STELLAR_TYPE CHeB::ResolveEnvelopeLoss(bool p_Force) { #define timescales(x) m_Timescales[static_cast(TIMESCALE::x)] // for convenience and readability - undefined at end of function STELLAR_TYPE stellarType = m_StellarType; - + if (ShouldEnvelopeBeExpelledByPulsations()) m_EnvelopeJustExpelledByPulsations = true; if (p_Force || utils::Compare(m_CoreMass, m_Mass) >= 0 || m_EnvelopeJustExpelledByPulsations ) { // Envelope loss diff --git a/src/CHeB.h b/src/CHeB.h index 97f486be2..0efcef46a 100755 --- a/src/CHeB.h +++ b/src/CHeB.h @@ -17,22 +17,22 @@ class CHeB: virtual public BaseStar, public FGB { public: CHeB() { m_StellarType = STELLAR_TYPE::CORE_HELIUM_BURNING; }; - + CHeB(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), FGB(p_BaseStar, false) { m_StellarType = STELLAR_TYPE::CORE_HELIUM_BURNING; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } CHeB* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - CHeB* clone = new CHeB(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + CHeB* clone = new CHeB(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static CHeB* Clone(CHeB& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - CHeB* clone = new CHeB(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + CHeB* clone = new CHeB(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -81,18 +81,18 @@ class CHeB: virtual public BaseStar, public FGB { double CalculateHeCoreMassAtPhaseEnd() const { return m_CoreMass; } double CalculateHeliumAbundanceCoreAtPhaseEnd() const { return CalculateHeliumAbundanceCoreOnPhase(); } - double CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const; - double CalculateHeliumAbundanceCoreOnPhase() const { return CalculateHeliumAbundanceCoreOnPhase(m_Tau); } // Use class member variables - + double CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const; + double CalculateHeliumAbundanceCoreOnPhase() const { return CalculateHeliumAbundanceCoreOnPhase(m_Tau); } // Use class member variables + double CalculateHeliumAbundanceSurfaceAtPhaseEnd() const { return CalculateHeliumAbundanceSurfaceOnPhase(); } - double CalculateHeliumAbundanceSurfaceOnPhase() const { return m_InitialHeliumAbundance; } // Use class member variables - - double CalculateHydrogenAbundanceCoreAtPhaseEnd() const { return CalculateHydrogenAbundanceCoreOnPhase(); } - double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; } // Core is hydrogen exhausted - - double CalculateHydrogenAbundanceSurfaceAtPhaseEnd() const { return CalculateHydrogenAbundanceSurfaceOnPhase(); } + double CalculateHeliumAbundanceSurfaceOnPhase() const { return m_InitialHeliumAbundance; } // Use class member variables + + double CalculateHydrogenAbundanceCoreAtPhaseEnd() const { return CalculateHydrogenAbundanceCoreOnPhase(); } + double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; } // Core is hydrogen exhausted + + double CalculateHydrogenAbundanceSurfaceAtPhaseEnd() const { return CalculateHydrogenAbundanceSurfaceOnPhase(); } double CalculateHydrogenAbundanceSurfaceOnPhase() const { return m_InitialHydrogenAbundance; } // Use class member variables - + double CalculateLambdaDewi() const; double CalculateLambdaNanjingStarTrack(const double p_Mass, const double p_Metallicity) const; diff --git a/src/COWD.cpp b/src/COWD.cpp index 11b4b310d..39f4d7574 100755 --- a/src/COWD.cpp +++ b/src/COWD.cpp @@ -15,8 +15,8 @@ STELLAR_TYPE COWD::EvolveToNextPhase() { if (m_OffCenterIgnition) { stellarType = STELLAR_TYPE::OXYGEN_NEON_WHITE_DWARF; } - else { - stellarType = m_HeShellDetonation ? ResolveHeSD() : ResolveSNIa(); + else { + stellarType = m_HeShellDetonation ? ResolveHeSD() : ResolveSNIa(); } return stellarType; } diff --git a/src/COWD.h b/src/COWD.h index f3aebab0f..14809a46a 100755 --- a/src/COWD.h +++ b/src/COWD.h @@ -15,32 +15,32 @@ class COWD: virtual public BaseStar, public WhiteDwarfs { public: COWD() { m_StellarType = STELLAR_TYPE::CARBON_OXYGEN_WHITE_DWARF; }; - + COWD(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), WhiteDwarfs(p_BaseStar) { m_StellarType = STELLAR_TYPE::CARBON_OXYGEN_WHITE_DWARF; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } COWD* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - COWD* clone = new COWD(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + COWD* clone = new COWD(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static COWD* Clone(COWD& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - COWD* clone = new COWD(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + COWD* clone = new COWD(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } // member functions - static double CalculateLuminosityOnPhase_Static(const double p_Mass, - const double p_Time, - const double p_Metallicity) { return WhiteDwarfs::CalculateLuminosityOnPhase_Static(p_Mass, - p_Time, - p_Metallicity, + static double CalculateLuminosityOnPhase_Static(const double p_Mass, + const double p_Time, + const double p_Metallicity) { return WhiteDwarfs::CalculateLuminosityOnPhase_Static(p_Mass, + p_Time, + p_Metallicity, WD_Baryon_Number.at(STELLAR_TYPE::CARBON_OXYGEN_WHITE_DWARF)); } protected: @@ -52,13 +52,13 @@ class COWD: virtual public BaseStar, public WhiteDwarfs { m_HeShellDetonation = false; m_OffCenterIgnition = false; m_AccretionRegime = ACCRETION_REGIME::ZERO; - + EvolveOnPhase(0.0); } double CalculateHeliumAbundanceCoreOnPhase() const { return 0.0; }; double CalculateHeliumAbundanceSurfaceOnPhase() const { return 0.0; }; - + double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; }; double CalculateHydrogenAbundanceSurfaceOnPhase() const { return 0.0; }; @@ -67,10 +67,10 @@ class COWD: virtual public BaseStar, public WhiteDwarfs { const double p_Metallicity) const { return CalculateLuminosityOnPhase_Static(p_Mass, p_Time, p_Metallicity); } double CalculateLuminosityOnPhase() const { return CalculateLuminosityOnPhase(m_Mass, m_Age, m_Metallicity); } // Use class member variables - + STELLAR_TYPE EvolveToNextPhase(); - bool IsSupernova() const { return m_HeShellDetonation || IsMassAboveChandrasekhar(); }; - bool ShouldEvolveOnPhase() const { return m_OffCenterIgnition ? false : !IsSupernova(); }; // From https://ui.adsabs.harvard.edu/abs/2017MNRAS.472.1593W/abstract around the end of section 3.2. Also, allows SN. + bool IsSupernova() const { return m_HeShellDetonation || IsMassAboveChandrasekhar(); }; + bool ShouldEvolveOnPhase() const { return m_OffCenterIgnition ? false : !IsSupernova(); }; // From https://ui.adsabs.harvard.edu/abs/2017MNRAS.472.1593W/abstract around the end of section 3.2. Also, allows SN. }; diff --git a/src/EAGB.cpp b/src/EAGB.cpp index 0d4384d9d..8acaee152 100755 --- a/src/EAGB.cpp +++ b/src/EAGB.cpp @@ -61,10 +61,10 @@ void EAGB::CalculateTimescales(const double p_Mass, DBL_VECTOR &p_Timescales) { * * * double CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR_POPULATION p_StellarPop) - * + * * @param [IN] p_MassIndex Mass index * @param [IN] p_StellarPop The stellar population for metallicity (POP I or POP II) - * + * * @return Nanjing lambda for use in common envelope */ double EAGB::CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR_POPULATION p_StellarPop) const { @@ -397,7 +397,7 @@ double EAGB::CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR * * @param [IN] p_Mass Mass * @param [IN] p_Metallicity Metallicity - * + * * @return Nanjing lambda for use in common envelope */ double EAGB::CalculateLambdaNanjingStarTrack(const double p_Mass, const double p_Metallicity) const { @@ -907,7 +907,7 @@ double EAGB::CalculateMassLossRateHurley() { double rateKR = CalculateMassLossRateKudritzkiReimers(); double rateVW = CalculateMassLossRateVassiliadisWood(); double rateWR = CalculateMassLossRateWolfRayet(m_Mu); - + m_DominantMassLossRate = MASS_LOSS_TYPE::GB; double dominantRate = std::max(rateNJ, rateKR); dominantRate = std::max(rateVW, dominantRate); @@ -1046,7 +1046,7 @@ STELLAR_TYPE EAGB::ResolveEnvelopeLoss(bool p_Force) { m_Age = HeGB::CalculateAgeOnPhase_Static(m_Mass, m_COCoreMass, timescales(tHeMS), m_GBParams); - HeHG::CalculateGBParams_Static(m_Mass0, m_Mass, LogMetallicityXiHurley(), m_MassCutoffs, m_AnCoefficients, m_BnCoefficients, m_GBParams); + HeHG::CalculateGBParams_Static(m_Mass0, m_Mass, LogMetallicityXiHurley(), m_MassCutoffs, m_AnCoefficients, m_BnCoefficients, m_GBParams); m_Luminosity = HeGB::CalculateLuminosityOnPhase_Static(m_COCoreMass, gbParams(B), gbParams(D)); double R1, R2; diff --git a/src/EAGB.h b/src/EAGB.h index 4affc95fb..d318e7bf5 100755 --- a/src/EAGB.h +++ b/src/EAGB.h @@ -17,22 +17,22 @@ class EAGB: virtual public BaseStar, public CHeB { public: EAGB() { m_StellarType = STELLAR_TYPE::EARLY_ASYMPTOTIC_GIANT_BRANCH; }; - + EAGB(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), CHeB(p_BaseStar, false) { m_StellarType = STELLAR_TYPE::EARLY_ASYMPTOTIC_GIANT_BRANCH; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } EAGB* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - EAGB* clone = new EAGB(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + EAGB* clone = new EAGB(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static EAGB* Clone(EAGB& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - EAGB* clone = new EAGB(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + EAGB* clone = new EAGB(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } diff --git a/src/ErrorCatalog.h b/src/ErrorCatalog.h index 8a28a7c06..41a2debef 100644 --- a/src/ErrorCatalog.h +++ b/src/ErrorCatalog.h @@ -7,7 +7,7 @@ // // To add a new error, add the symbolic name to the ERROR enum class, and the corresponding error string // to the ERROR_CATALOG map. -// +// // The key to the ERROR_CATALOG map is the symbolic name in the ERROR enum class. The map entry is a // tuple containing the ERROR_SCOPE associated with the error (see below), and the error string. @@ -42,7 +42,7 @@ enum class ERROR: int { ADDED_EXCESS_AM_TO_STARS, // attempted to add more angular momentum to stars than was available in a binary AMBIGUOUS_REMNANT_MASS_PRESCRIPTION, // remnant mass unclear from available parameters ARGUMENT_RANGE_COUNT_EXPECTED_ULINT, // expected an unsigned long integer for range count for option - ARGUMENT_RANGE_NOT_SUPPORTED, // argument range not supported for option + ARGUMENT_RANGE_NOT_SUPPORTED, // argument range not supported for option ARGUMENT_RANGE_NUM_PARMS, // argument range requires exactly three parameters ARGUMENT_RANGE_PARMS_EXPECTED_FP, // expected a floating point number for range start and increment for option ARGUMENT_RANGE_PARMS_EXPECTED_INT, // expected an integer for range parameters for option @@ -168,7 +168,7 @@ enum class ERROR: int { UNKNOWN_KICK_MAGNITUDE_DISTRIBUTION, // unknown kick magnitude distribution UNKNOWN_LOGFILE, // unknown log file UNKNOWN_LBV_MASS_LOSS_PRESCRIPTION, // unknown LBV mass loss prescription - UNKNOWN_MALTSEV_MODE, // unknown maltsev mode + UNKNOWN_MALTSEV_MODE, // unknown maltsev mode UNKNOWN_MT_ACCRETION_EFFICIENCY_PRESCRIPTION, // unknown mass transfer accretion efficiency prescription UNKNOWN_MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION, // unknown mass transfer angular momentum loss prescription UNKNOWN_MASS_LOSS_PRESCRIPTION, // unknown mass loss prescription diff --git a/src/Errors.cpp b/src/Errors.cpp index f9dd3cdd5..beb816b49 100755 --- a/src/Errors.cpp +++ b/src/Errors.cpp @@ -25,7 +25,7 @@ * an object (i.e. will print twice if encountered in the same function name in different objects) * * - * The Errors class provides methods to print both warnings and errors - essentially the same thing, but warning messages are prefixed + * The Errors class provides methods to print both warnings and errors - essentially the same thing, but warning messages are prefixed * with "WARNING:", whereas error messages are prefixed with "ERROR:". * * Errors and warnings are printed by using the macros defined in ErrorsMacros.h. They are: @@ -52,10 +52,10 @@ * The function name of the calling function * * Notes: - * - * An additional set of macros is provided to be used in static functions and other functions that are not contained within an instantiated + * + * An additional set of macros is provided to be used in static functions and other functions that are not contained within an instantiated * object (e.g. main()). These are: - * + * * Static error macros: * * SHOW_ERROR_STATIC(error_number) : prints "ERROR: " followed by the error message associated with "error_number" (from the error catalog) @@ -80,7 +80,7 @@ * The object type of the calling object (doesn't add enough information on its own) * The stellar type of the calling object (not available in static functions) * - * + * * Any object that uses the non-static SHOW_* macros *must* expose the following functions: * * OBJECT_ID ObjectId() (would typically return m_ObjectId) @@ -89,8 +89,8 @@ * * The functions are called, by the SHOW_ERROR* and SHOW_WARN* macros. If any of the functions are not applicable to the object, then they * must return "*::NONE" (all objects should implement ObjectId() correctly) - * - * + * + * * Another additional set of macros is provided, for both static and non-static functions, that will, after displaying an error (as described above), * throw an exception and cause the ordinary program flow to be interrupted. These are: * @@ -103,9 +103,9 @@ * THROW_ERROR_STATIC(error_number, error_string) : displays the error (as described above), then throws exception * THROW_ERROR_IF_STATIC(cond, error_number) : if "cond" is TRUE, displays the error (as described above), then throws exception * THROW_ERROR_IF_STATIC(cond, error_number, error_string): if "cond" is TRUE, displays the error (as described above), then throws exception - * + * * In each case, the exception thrown by the THROW* macros is "error_number" cast as an integer, so it can be caught by using "catch (int e)" and inspecting "e". - * + * */ diff --git a/src/Errors.h b/src/Errors.h index b92a5979f..c09685f93 100755 --- a/src/Errors.h +++ b/src/Errors.h @@ -83,14 +83,14 @@ // "Floating point exception"). // // This mode is enabled with the option '--fp-error-mode OFF' (This is the default mode). -// +// // 1: floating-point traps enabled - floating-point traps DIVBYZERO, INVALID, OVERFLOW, and UNDERFLOW are enabled. // In this mode, when a floating-point operation traps, a SIGFPE is raised and the // SIGFPE signal handler is called, and the signal handler raises a runtime_error // exception, with a what argument of "FPE" (and in this mode we cannot, and do not, // differentiate between DIVBYZERO, INVALID, OVERFLOW, and UNDERFLOW). The exception // raised will cause the execution of the program to halt if it is not caught and -// managed. We catch runtime_error exceptions in Star::Evolve() for SSE mode, in +// managed. We catch runtime_error exceptions in Star::Evolve() for SSE mode, in // BaseBinaryStar::Evolve() for BSE mode, and in main() for errors that might occur // outside the evolution of stars or binaries. // diff --git a/src/FGB.cpp b/src/FGB.cpp index 7043291ad..a6c9cc674 100755 --- a/src/FGB.cpp +++ b/src/FGB.cpp @@ -132,7 +132,7 @@ double FGB::CalculateTauOnPhase() const { double FGB::ChooseTimestep(const double p_Time) const { #define timescales(x) m_Timescales[static_cast(TIMESCALE::x)] // for convenience and readability - undefined at end of function - double dtk = utils::Compare(p_Time, timescales(tMx_FGB)) <= 0 // ah because timescales[4,5,6] are not calculated yet JR: todo: ?but... timescales[4] is used if this is true...? (and 5 if not) + double dtk = utils::Compare(p_Time, timescales(tMx_FGB)) <= 0 // ah because timescales[4,5,6] are not calculated yet JR: todo: ?but... timescales[4] is used if this is true...? (and 5 if not) ? 0.02 * (timescales(tinf1_FGB) - p_Time) : 0.02 * (timescales(tinf2_FGB) - p_Time); @@ -183,7 +183,7 @@ STELLAR_TYPE FGB::ResolveEnvelopeLoss(bool p_Force) { m_CoreMass = m_HeCoreMass; m_Mass = m_CoreMass; m_COCoreMass = 0.0; - + if (utils::Compare(m_Mass0, massCutoffs(MHeF)) < 0) { // Star evolves to Helium White Dwarf stellarType = STELLAR_TYPE::HELIUM_WHITE_DWARF; diff --git a/src/FGB.h b/src/FGB.h index da52ca229..2699efe9b 100755 --- a/src/FGB.h +++ b/src/FGB.h @@ -17,22 +17,22 @@ class FGB: virtual public BaseStar, public HG { public: FGB() { m_StellarType = STELLAR_TYPE::FIRST_GIANT_BRANCH; }; - + FGB(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), HG(p_BaseStar, false) { m_StellarType = STELLAR_TYPE::FIRST_GIANT_BRANCH; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } FGB* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - FGB* clone = new FGB(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + FGB* clone = new FGB(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static FGB* Clone(FGB& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - FGB* clone = new FGB(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + FGB* clone = new FGB(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -41,7 +41,7 @@ class FGB: virtual public BaseStar, public HG { void Initialise() { CalculateTimescales(); // Initialise timescales m_Age = m_Timescales[static_cast(TIMESCALE::tBGB)]; // Set age appropriately - + EvolveOnPhase(0.0); } @@ -55,7 +55,7 @@ class FGB: virtual public BaseStar, public HG { double CalculateCoreMassOnPhase(const double p_Mass, const double p_Time) const; double CalculateCoreMassOnPhase() const { return CalculateCoreMassOnPhase(m_Mass0, m_Age); } // Use class member variables - double CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { return GiantBranch::CalculateCriticalMassRatioClaeys14(p_AccretorIsDegenerate); } // Skip HG + double CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { return GiantBranch::CalculateCriticalMassRatioClaeys14(p_AccretorIsDegenerate); } // Skip HG double CalculateCriticalMassRatioHurleyHjellmingWebbink() const { return GiantBranch::CalculateCriticalMassRatioHurleyHjellmingWebbink(); } double CalculateHeCoreMassAtPhaseEnd() const { return CalculateHeCoreMassOnPhase(); } // Same as on phase @@ -73,7 +73,7 @@ class FGB: virtual public BaseStar, public HG { double CalculateTauAtPhaseEnd() const { return m_Tau; } // NO-OP double CalculateTauOnPhase() const; - + double CalculateZetaEquilibrium() { return 0.0; } // At lowest order, giants with a convective envelope have radii that are insensitive to mass loss (but see Hurley+ 2002, Eq. 56 and Hurley+ 2000, Eq. 47) double ChooseTimestep(const double p_Time) const; diff --git a/src/GiantBranch.cpp b/src/GiantBranch.cpp index 244a9d2bc..c76f43b9c 100644 --- a/src/GiantBranch.cpp +++ b/src/GiantBranch.cpp @@ -292,17 +292,17 @@ void GiantBranch::CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams) * * This function exists to facilitate the calculation of gbParams in EAGB::ResolveEnvelopeLoss() for the * stellar type to which the star will evolve. The calculations of some of the stellar attributes there - * depend on new gbParams. + * depend on new gbParams. * JR: This really needs to be revisited one day - these calculations should really be performed after - * switching to the new stellar type, but other calculations are done (in the legacy code) before the + * switching to the new stellar type, but other calculations are done (in the legacy code) before the * switch (see evolveOneTimestep() in star.cpp for EAGB stars in the legacy code). * * - * void CalculateGBParams_Static(const double p_Mass, - * const double p_LogMetallicityXi, - * const DBL_VECTOR &p_MassCutoffs, - * const DBL_VECTOR &p_AnCoefficients, - * const DBL_VECTOR &p_BnCoefficients,* + * void CalculateGBParams_Static(const double p_Mass, + * const double p_LogMetallicityXi, + * const DBL_VECTOR &p_MassCutoffs, + * const DBL_VECTOR &p_AnCoefficients, + * const DBL_VECTOR &p_BnCoefficients,* * DBL_VECTOR &p_GBParams) * * @param [IN] p_Mass Mass in Msol @@ -312,11 +312,11 @@ void GiantBranch::CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams) * @param [IN] p_BnCoefficients b(n) coefficients * @param [IN/OUT] p_GBParams Giant Branch Parameters - calculated here */ -void GiantBranch::CalculateGBParams_Static(const double p_Mass, - const double p_LogMetallicityXi, - const DBL_VECTOR &p_MassCutoffs, - const DBL_VECTOR &p_AnCoefficients, - const DBL_VECTOR &p_BnCoefficients, +void GiantBranch::CalculateGBParams_Static(const double p_Mass, + const double p_LogMetallicityXi, + const DBL_VECTOR &p_MassCutoffs, + const DBL_VECTOR &p_AnCoefficients, + const DBL_VECTOR &p_BnCoefficients, DBL_VECTOR &p_GBParams) { #define gbParams(x) p_GBParams[static_cast(GBP::x)] // for convenience and readability - undefined at end of function @@ -389,7 +389,7 @@ void GiantBranch::PerturbLuminosityAndRadius() { double s = CalculatePerturbationS(m_Mu, m_Mass); double r = CalculatePerturbationR(m_Mu, m_Mass, m_Radius, Rc); - m_Luminosity = Lc * PPOW((m_Luminosity / Lc), s); + m_Luminosity = Lc * PPOW((m_Luminosity / Lc), s); m_Radius = Rc * PPOW((m_Radius / Rc), r); } } @@ -687,7 +687,7 @@ double GiantBranch::CalculateRemnantRadius() const { double GiantBranch::CalculateRadialExtentConvectiveEnvelope() const{ double convectiveEnvelopeMass, convectiveEnvelopeMassMax; std::tie(convectiveEnvelopeMass, convectiveEnvelopeMassMax) = CalculateConvectiveEnvelopeMass(); - if (utils::Compare(convectiveEnvelopeMass, 0.0) <= 0 || utils::Compare(convectiveEnvelopeMassMax, 0.0) <= 0 ) return 0.0; // massless convective envelope has zero radial extent + if (utils::Compare(convectiveEnvelopeMass, 0.0) <= 0 || utils::Compare(convectiveEnvelopeMassMax, 0.0) <= 0 ) return 0.0; // massless convective envelope has zero radial extent return std::sqrt(convectiveEnvelopeMass/convectiveEnvelopeMassMax) * (m_Radius - CalculateConvectiveCoreRadius()); } @@ -723,7 +723,7 @@ double GiantBranch::CalculateCoreMassAtBAGB(const double p_Mass) const { * Hurley et al. 2000, eq 66 * * Static version required by CalculateGBParams_Static() - * + * * * double CalculateCoreMassAtBAGB_Static(const double p_Mass, const DBL_VECTOR &p_BnCoefficients) * @@ -757,11 +757,11 @@ double GiantBranch::CalculateCoreMassAtBGB(const double p_Mass, const DBL_VECTOR #define massCutoffs(x) m_MassCutoffs[static_cast(MASS_CUTOFF::x)] // for convenience and readability - undefined at end of function if (utils::Compare(p_Mass, massCutoffs(MHeF)) <= 0) return 0.0; // No McBGB for stars with mass below the helium flash threshold, see text above Eq. (44) of Hurley+ (2000) - + double luminosity = GiantBranch::CalculateLuminosityAtPhaseBase_Static(massCutoffs(MHeF), m_AnCoefficients); double Mc_MHeF = BaseStar::CalculateCoreMassGivenLuminosity_Static(luminosity, p_GBParams); double c = (Mc_MHeF * Mc_MHeF * Mc_MHeF * Mc_MHeF) - (MC_L_C1 * PPOW(massCutoffs(MHeF), MC_L_C2)); // pow() is slow - use multiplication - + return std::min((0.95 * gbParams(McBAGB)), std::sqrt(std::sqrt(c + (MC_L_C1 * PPOW(p_Mass, MC_L_C2))))); // sqrt is much faster than PPOW() #undef massCutoffs @@ -787,9 +787,9 @@ double GiantBranch::CalculateCoreMassAtBGB(const double p_Mass, const DBL_VECTOR * @param [IN] p_GBParams Giant Branch parameters * @return Core mass at the Base of the Giant Branch in Msol */ -double GiantBranch::CalculateCoreMassAtBGB_Static(const double p_Mass, - const DBL_VECTOR &p_MassCutoffs, - const DBL_VECTOR &p_AnCoefficients, +double GiantBranch::CalculateCoreMassAtBGB_Static(const double p_Mass, + const DBL_VECTOR &p_MassCutoffs, + const DBL_VECTOR &p_AnCoefficients, const DBL_VECTOR &p_GBParams) { #define gbParams(x) p_GBParams[static_cast(GBP::x)] // for convenience and readability - undefined at end of function #define massCutoffs(x) p_MassCutoffs[static_cast(MASS_CUTOFF::x)] // for convenience and readability - undefined at end of function @@ -913,21 +913,21 @@ double GiantBranch::CalculateMassLossRateHurley() { * Assumes this star is the donor; relevant accretor details are passed as parameters. * Critical mass ratio is defined as qCrit = mAccretor/mDonor. * - * double GiantBranch::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) + * double GiantBranch::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) * * @param [IN] p_AccretorIsDegenerate Boolean indicating if accretor in degenerate (true = degenerate) - * @return Critical mass ratio for unstable MT + * @return Critical mass ratio for unstable MT */ double GiantBranch::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { double qCrit; - + if (p_AccretorIsDegenerate) { // degenerate accretor qCrit = OPTIONS->MassTransferCriticalMassRatioGiantDegenerateAccretor(); } - else { // non-degenerate accretor + else { // non-degenerate accretor qCrit = OPTIONS->MassTransferCriticalMassRatioGiantNonDegenerateAccretor(); - if (qCrit < 0.0) { // default value of -1 recalculates qCrit with the following function + if (qCrit < 0.0) { // default value of -1 recalculates qCrit with the following function double coreMassRatio = m_HeCoreMass / m_Mass; double coreMassRatio_4 = coreMassRatio * coreMassRatio * coreMassRatio * coreMassRatio * coreMassRatio; double x = BaseStar::CalculateGBRadiusXExponent(); // x from Hurley et al 2000, Eq. 47 - Depends on composition @@ -947,14 +947,14 @@ double GiantBranch::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDe * Assumes this star is the donor. * Critical mass ratio is defined as qCrit = mAccretor/mDonor. * - * double GiantBranch::CalculateCriticalMassRatioHurleyHjellmingWebbink() + * double GiantBranch::CalculateCriticalMassRatioHurleyHjellmingWebbink() * - * @return Critical mass ratio for unstable MT + * @return Critical mass ratio for unstable MT */ double GiantBranch::CalculateCriticalMassRatioHurleyHjellmingWebbink() const { - + double qCrit = 0.362 + 1.0 / (3.0 * (1.0 - CoreMass() / Mass())); // Defined as mDonor/mAccretor in Hurley et al. 2002, equation found after eq. 57 (no label) - + return 1.0 / qCrit; } @@ -969,15 +969,15 @@ double GiantBranch::CalculateCriticalMassRatioHurleyHjellmingWebbink() const { * @return Adiabatic exponent */ double GiantBranch::CalculateZetaConvectiveEnvelopeGiant(ZETA_PRESCRIPTION p_ZetaPrescription) { - + double zeta = 0.0; // default value switch (p_ZetaPrescription) { // which prescription? - + case ZETA_PRESCRIPTION::HURLEY: // HURLEY: Hurley, Tout, and Pols, 2002, eq 56 zeta = CalculateZetaAdiabaticHurley2002(m_CoreMass); break; - + case ZETA_PRESCRIPTION::ARBITRARY: // ARBITRARY: user program options thermal zeta value zeta = OPTIONS->ZetaAdiabaticArbitrary(); break; @@ -995,9 +995,9 @@ double GiantBranch::CalculateZetaConvectiveEnvelopeGiant(ZETA_PRESCRIPTION p_Zet // The correct fix for this is to add code for the missing prescription or, if the missing // prescription is superfluous, remove it from ZETA_PRESCRIPTION - or find and fix the code defect. - THROW_ERROR(ERROR::UNKNOWN_ZETA_PRESCRIPTION); // throw error + THROW_ERROR(ERROR::UNKNOWN_ZETA_PRESCRIPTION); // throw error } - + return zeta; } @@ -1015,14 +1015,14 @@ double GiantBranch::CalculateZetaConvectiveEnvelopeGiant(ZETA_PRESCRIPTION p_Zet * @return mass-radius response exponent Zeta */ double GiantBranch::CalculateZetaConstantsByEnvelope(ZETA_PRESCRIPTION p_ZetaPrescription) { - + double zeta = 0.0; // default value - + switch (DetermineEnvelopeType()) { // which envelope type? case ENVELOPE::RADIATIVE: zeta = OPTIONS->ZetaRadiativeEnvelopeGiant(); break; - + case ENVELOPE::CONVECTIVE: zeta = CalculateZetaConvectiveEnvelopeGiant(p_ZetaPrescription); break; @@ -1042,7 +1042,7 @@ double GiantBranch::CalculateZetaConstantsByEnvelope(ZETA_PRESCRIPTION p_ZetaPre THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_TYPE); // throw error } - + return zeta; } @@ -1059,7 +1059,7 @@ double GiantBranch::CalculateZetaConstantsByEnvelope(ZETA_PRESCRIPTION p_ZetaPre * @return Tuple containing the mass of the outer convective envelope and its maximum value */ DBL_DBL GiantBranch::CalculateConvectiveEnvelopeMass() const { - + double MinterfMcoref = -0.023 * m_Log10Metallicity - 0.0023; // eq. (8) of Picker+ 2024 // We need the temperature of the star just after BAGB, which is the temperature at the @@ -1077,20 +1077,20 @@ DBL_DBL GiantBranch::CalculateConvectiveEnvelopeMass() const { clone->UpdateAttributesAndAgeOneTimestep(0.0, 0.0, 0.0, true); // otherwise, temperature not updated double Tmin = clone->Temperature(); // get temperature of clone delete clone; clone = nullptr; // return the memory allocated for the clone - + // Use Eq. 6 of Mandel, Hirai, Picker (2024) rather than Eq. 6 of Picker+ 2024 for Tonset to avoid issues caused by // differences between temperatures in MESA models (used in Picker+ fits) and Pols models (used in Hurley+ SSE tracks) double Tonset = Tmin / std::min(0.695 - 0.057 * m_Log10Metallicity, 0.95); // eq. (6) of Mandel, Hirai, Picker, 2024 - + double mCoreFinal = CalculateCoreMassAtBAGB(m_Mass0); double mConvMax = std::max(m_Mass - mCoreFinal * (1.0 + MinterfMcoref), 0.0); // eq. (9) of Picker+ 2024 - // Picker+ 2024 fits were only made for stars above 8.0 solar masses, with runs down to 5.0 solar masses, + // Picker+ 2024 fits were only made for stars above 8.0 solar masses, with runs down to 5.0 solar masses, // so using the final core mass as an approximate threshold of validity if(utils::Compare(mCoreFinal, 1.5) < 0) mConvMax = std::max(m_Mass - mCoreFinal, 0.0); // unlike massive stars, intermediate-mass stars have almost no radiative intershell at maximum convective envelope extent - + double convectiveEnvelopeMass = mConvMax / (1.0 + exp(4.6 * (Tmin + Tonset - 2.0 * m_Temperature) / (Tmin - Tonset))); // eq. (7) of Picker+ 2024 - + return std::tuple (convectiveEnvelopeMass, mConvMax); } @@ -1142,16 +1142,16 @@ double GiantBranch::CalculateLifetimeToHeIgnition(const double p_Mass, const dou /* * Calculate moment of inertia * - * Hurley et al., 2000, paragraph immediately following eq 109 + * Hurley et al., 2000, paragraph immediately following eq 109 + * * - * * double GiantBranch::CalculateMomentOfInertia() - * + * * @return Moment of inertia (Msol AU^2) */ double GiantBranch::CalculateMomentOfInertia() const { double Rc = CalculateRemnantRadius(); - + return (0.1 * (m_Mass - m_CoreMass) * m_Radius * m_Radius) + (0.21 * m_CoreMass * Rc * Rc); } @@ -1200,7 +1200,7 @@ STELLAR_TYPE GiantBranch::CalculateRemnantTypeByMuller2016(const double p_COCore * double CalculateRemnantMassBySchneider2020(const double p_COCoreMass, const bool p_UseSchneiderAlt) * * @param [IN] p_COCoreMass COCoreMass in Msol - * @param [IN] p_UseSchneiderAlt Whether to use the Schneider alt prescription + * @param [IN] p_UseSchneiderAlt Whether to use the Schneider alt prescription * @return Remnant mass in Msol */ double GiantBranch::CalculateRemnantMassBySchneider2020(const double p_COCoreMass, const bool p_UseSchneiderAlt) { @@ -1234,7 +1234,7 @@ double GiantBranch::CalculateRemnantMassBySchneider2020(const double p_COCoreMas else if (utils::Compare(p_COCoreMass, 12.925) < 0) { logRemnantMass = log10(0.03357 * p_COCoreMass + 1.31780); } else { logRemnantMass = 0.01940 * p_COCoreMass + 0.98462; } } - else { + else { // alternative prescription if (utils::Compare(p_COCoreMass, 6.357) < 0) { logRemnantMass = log10(0.04199 * p_COCoreMass + 1.28128); } else if (utils::Compare(p_COCoreMass, 7.311) < 0) { logRemnantMass = -0.02466 * p_COCoreMass + 1.28070; } @@ -1276,9 +1276,9 @@ double GiantBranch::CalculateRemnantMassBySchneider2020(const double p_COCoreMas // The correct fix for this is to add code for the missing MT_CASE or, if the missing MT_CASE is // incorrect/superfluous, remove it from the possible MT_CASE values. - THROW_ERROR(ERROR::UNKNOWN_MT_CASE); // throw error + THROW_ERROR(ERROR::UNKNOWN_MT_CASE); // throw error } - + // convert to linear value, and limit to the pre-SN He Core mass return std::min(PPOW(10.0, logRemnantMass), m_SupernovaDetails.HeCoreMassAtCOFormation); } @@ -1300,9 +1300,9 @@ double GiantBranch::CalculateRemnantMassByMaltsev2024(const double p_COCoreMass, ST_VECTOR mtHist = MassTransferDonorHistory(); // mass transfer history vector MT_CASE massTransferCase = MT_CASE::OTHER; double log10Z = m_Log10Metallicity - LOG10_ZSOL_ASPLUND; // log_{10} (Z/Zsol), for convenience - constexpr double log10_1 = 0; // useful for the limits later - constexpr double log10_1_div_10 = -1; // useful for the limits later - constexpr double log10_1_div_50 = -1.69897; // useful for the limits later + constexpr double log10_1 = 0; // useful for the limits later + constexpr double log10_1_div_10 = -1; // useful for the limits later + constexpr double log10_1_div_50 = -1.69897; // useful for the limits later double M1, M2, M3; // Z-dependent boundary values for SN outcomes (see Maltsev+ 2025) double remnantMass; @@ -1316,21 +1316,21 @@ double GiantBranch::CalculateRemnantMassByMaltsev2024(const double p_COCoreMass, } else { // Determine MT history - this will tell us which Schneider MT case prescription should be used - double log10Z_bounded; // This is really log10(Z/Zsol), so it is 0 for Z=Zsol, -1 for Z=Zsol/10 and log10(1/50) for ... - switch (OPTIONS->MaltsevMode()) { + double log10Z_bounded; // This is really log10(Z/Zsol), so it is 0 for Z=Zsol, -1 for Z=Zsol/10 and log10(1/50) for ... + switch (OPTIONS->MaltsevMode()) { - case MALTSEV_MODE::OPTIMISTIC: + case MALTSEV_MODE::OPTIMISTIC: log10Z_bounded = log10Z; break; - case MALTSEV_MODE::BALANCED: + case MALTSEV_MODE::BALANCED: log10Z_bounded = std::min(std::max(log10Z, log10_1_div_50), log10_1); break; - case MALTSEV_MODE::PESSIMISTIC: + case MALTSEV_MODE::PESSIMISTIC: log10Z_bounded = std::min(std::max(log10Z, log10_1_div_10), log10_1); break; - default: + default: // Unrecognized MALTSEV_MODE. Only possible if a new one is added but an - // extra flag is not created here. + // extra flag is not created here. THROW_ERROR(ERROR::UNKNOWN_MALTSEV_MODE); // throw error } @@ -1344,7 +1344,7 @@ double GiantBranch::CalculateRemnantMassByMaltsev2024(const double p_COCoreMass, massTransferCase = newStar->DetermineMassTransferTypeAsDonor(); // get MT type as donor delete newStar; newStar = nullptr; // return the memory allocated for the new star } - + // If self-stripped, re-classify as Case B if (massTransferCase == MT_CASE::NONE && HydrogenAbundanceSurface() == 0.0) massTransferCase = MT_CASE::B; // if a star was stripped by winds, treat it as if it experienced Case B mass transfer @@ -1387,7 +1387,7 @@ double GiantBranch::CalculateRemnantMassByMaltsev2024(const double p_COCoreMass, THROW_ERROR(ERROR::UNKNOWN_MT_CASE); // throw error } - + if( utils::Compare(p_COCoreMass, M3) >=0 || (utils::Compare(p_COCoreMass, M1) >= 0 && utils::Compare(p_COCoreMass, M2) <= 0) ) { // Complete fallback into BH m_SupernovaDetails.fallbackFraction = 1; @@ -1422,10 +1422,10 @@ double GiantBranch::CalculateRemnantMassByMaltsev2024(const double p_COCoreMass, */ double GiantBranch::CalculateRemnantMassByMullerMandel(const double p_COCoreMass, const double p_HeCoreMass) { - double remnantMass = 0.0; + double remnantMass = 0.0; double pBH = 0.0; double pCompleteCollapse = 0.0; - + if (utils::Compare(p_COCoreMass, MULLERMANDEL_M1) < 0 || utils::Compare(p_HeCoreMass, OPTIONS->MaximumNeutronStarMass()) <= 0 ) pBH = 0.0; else if (utils::Compare(p_COCoreMass, MULLERMANDEL_M3) < 0) @@ -1514,18 +1514,18 @@ double GiantBranch::CalculateRemnantNSMassMullerMandel(const double p_COCoreMass * @return Remnant mass in Msol */ double GiantBranch::CalculateFallbackBHMassMullerMandel(const double p_COCoreMass, const double p_HeCoreMass) { - + double remnantMass = 0.0; std::size_t iterations = 0; - + while (iterations++ < MULLERMANDEL_REMNANT_MASS_MAX_ITERATIONS && (utils::Compare(remnantMass, OPTIONS->MaximumNeutronStarMass()) < 0 || utils::Compare(remnantMass, p_HeCoreMass) > 0)) { remnantMass = MULLERMANDEL_MUBH * p_COCoreMass + RAND->RandomGaussian(MULLERMANDEL_SIGMABH); } - + if (iterations >= MULLERMANDEL_REMNANT_MASS_MAX_ITERATIONS) // failure to find a solution implies a narrow range; just pick a midpoint in this case remnantMass = (OPTIONS->MaximumNeutronStarMass() + p_HeCoreMass) / 2.0; - + return remnantMass; } @@ -1545,7 +1545,7 @@ double GiantBranch::CalculateRemnantMassByMuller2016(const double p_Mass, const if (utils::Compare(p_COCoreMass, 1.372) < 0) { // Not explicitly pointed out in Appendix B of Vigna-Gomez+2018 but assumed for continuity and simplicity // Muller+2016 didn't go as low as this in CO Core mass (see Figure A1 in that paper) - remnantMass = 1.21; + remnantMass = 1.21; } else if (utils::Compare(p_COCoreMass, 1.49) < 0) { remnantMass = 1.21 - (0.4 * (p_COCoreMass - 1.372)); } else if (utils::Compare(p_COCoreMass, 1.65) < 0) { remnantMass = 1.16; } @@ -1596,14 +1596,14 @@ double GiantBranch::CalculateGravitationalRemnantMass(const double p_BaryonicRem double root; - // decide whether to calculate GravitationalRemnantMass from Fryer+2012, Eq.13 for Neutron Star or Black Hole - // then calculate GravitationalRemnantMass - + // decide whether to calculate GravitationalRemnantMass from Fryer+2012, Eq.13 for Neutron Star or Black Hole + // then calculate GravitationalRemnantMass + if (utils::Compare(p_BaryonicRemnantMass, m_BaryonicMassOfMaximumNeutronStarMass) < 0) { std::tie(error, root) = utils::SolveQuadratic(0.075, 1.0, -p_BaryonicRemnantMass); // Neutron Star if (error == ERROR::NO_REAL_ROOTS) THROW_ERROR(error); - } + } else { // Black hole root = BH::CalculateNeutrinoMassLoss_Static(p_BaryonicRemnantMass); // Convert to gravitational mass due to neutrino mass loss } @@ -1775,7 +1775,7 @@ std::tuple GiantBranch::CalculateRemnantMassByFryer2012(const do baryonicRemnantMass = CalculateBaryonicRemnantMass(mProto, fallbackMass); gravitationalRemnantMass = CalculateGravitationalRemnantMass(baryonicRemnantMass); break; - + default: // unknown prescription // the only way this can happen is if someone added an SN_ENGINE // and it isn't accounted for in this code. We should not default here, with or without a warning. @@ -1815,14 +1815,14 @@ std::tuple GiantBranch::CalculateRemnantMassByFryer2022(const do double fmix = OPTIONS->Fryer22fmix(); double fact = p_COCoreMass / fmix; - baryonicRemnantMass = 1.2 + 0.05 * fmix + 0.01 * fact * fact + exp(fmix * (p_COCoreMass - OPTIONS->Fryer22Mcrit())) ; // equation 5. + baryonicRemnantMass = 1.2 + 0.05 * fmix + 0.01 * fact * fact + exp(fmix * (p_COCoreMass - OPTIONS->Fryer22Mcrit())) ; // equation 5. baryonicRemnantMass = std::min(baryonicRemnantMass, p_Mass); // clamp baryonicRemnantMass to total mass // Now the proto mass, which is only used for the calculation of kicks, will // still be calculated using the DELAYED/RAPID prescriptions from Fryer 2012 switch (OPTIONS->FryerSupernovaEngine()) { // which SN_ENGINE? - case SN_ENGINE::DELAYED: + case SN_ENGINE::DELAYED: mProto = CalculateProtoCoreMassDelayed(p_COCoreMass); fallbackMass = std::max(0.0, baryonicRemnantMass - mProto); // fallbackMass larger than 0 @@ -1831,7 +1831,7 @@ std::tuple GiantBranch::CalculateRemnantMassByFryer2022(const do gravitationalRemnantMass = CalculateGravitationalRemnantMass(baryonicRemnantMass); break; - case SN_ENGINE::RAPID: + case SN_ENGINE::RAPID: mProto = FRYER_PROTO_CORE_MASS_RAPID; fallbackMass = std::max(0.0, baryonicRemnantMass - mProto); // fallbackMass larger than 0 @@ -1839,7 +1839,7 @@ std::tuple GiantBranch::CalculateRemnantMassByFryer2022(const do fallbackFraction = std::max(0.0, std::min(1.0, fallbackFraction)); // make sure the fb fraction lies between 0-1 gravitationalRemnantMass = CalculateGravitationalRemnantMass(baryonicRemnantMass); break; - + default: // unknown prescription // the only way this can happen is if someone added an SN_ENGINE // and it isn't accounted for in this code. We should not default here, with or without a warning. @@ -1850,7 +1850,7 @@ std::tuple GiantBranch::CalculateRemnantMassByFryer2022(const do THROW_ERROR(ERROR::UNKNOWN_SN_ENGINE); // throw error } - + return std::make_tuple(gravitationalRemnantMass, fallbackFraction); } @@ -1961,13 +1961,13 @@ STELLAR_TYPE GiantBranch::ResolveCoreCollapseSN() { m_Mass = CalculateRemnantMassBySchneider2020Alt(m_COCoreMass); m_SupernovaDetails.fallbackFraction = utils::Compare(m_Mass, OPTIONS->MaximumNeutronStarMass() ) > 0 ? (m_Mass - NEUTRON_STAR_MASS) / (mass - NEUTRON_STAR_MASS) : 0.0; // fallback fraction of mass beyond proto-neutron-star for BH formation and kicks break; - + case REMNANT_MASS_PRESCRIPTION::MALTSEV2024: // Maltsev+ 2024 m_Mass = CalculateRemnantMassByMaltsev2024(m_COCoreMass, m_HeCoreMass); // fallback fraction determined internally break; - - + + default: // unknown prescription // the only way this can happen is if someone added a REMNANT_MASS_PRESCRIPTION // and it isn't accounted for in this code. We should not default here, with or without a warning. @@ -1978,7 +1978,7 @@ STELLAR_TYPE GiantBranch::ResolveCoreCollapseSN() { THROW_ERROR(ERROR::UNKNOWN_REMNANT_MASS_PRESCRIPTION); // throw error } - + // Set the stellar type to which the star should evolve (either use prescription or MAXIMUM_NS_MSS) if (OPTIONS->RemnantMassPrescription() == REMNANT_MASS_PRESCRIPTION::MULLER2016) { stellarType = CalculateRemnantTypeByMuller2016(m_COCoreMass); @@ -2037,7 +2037,7 @@ STELLAR_TYPE GiantBranch::ResolveElectronCaptureSN() { m_HeCoreMass = m_Mass; m_COCoreMass = m_Mass; m_Mass0 = m_Mass; - + SetSNCurrentEvent(SN_EVENT::ECSN); // electron capture SN happening now SetSNPastEvent(SN_EVENT::ECSN); // ... and will be a past event @@ -2138,7 +2138,7 @@ STELLAR_TYPE GiantBranch::ResolvePulsationalPairInstabilitySN() { } break; case PPI_PRESCRIPTION::FARMER: { // Farmer et al. 2019 http://dx.doi.org/10.3847/1538-4357/ab518b - double totalMassPrePPISN = m_Mass; // save the total stellar mass + double totalMassPrePPISN = m_Mass; // save the total stellar mass // three cases: if (utils::Compare(m_COCoreMass, FARMER_PPISN_UPP_LIM_LIN_REGIME) < 0) { m_Mass = m_COCoreMass + 4.0; // a linear relation below CO core masses of 38 Msun @@ -2158,28 +2158,28 @@ STELLAR_TYPE GiantBranch::ResolvePulsationalPairInstabilitySN() { m_Mass = m_COCoreMass; } - m_Mass = std::min(totalMassPrePPISN, m_Mass); // check if remnant mass is bigger than total mass + m_Mass = std::min(totalMassPrePPISN, m_Mass); // check if remnant mass is bigger than total mass } break; - - case PPI_PRESCRIPTION::HENDRIKS: { + + case PPI_PRESCRIPTION::HENDRIKS: { // Prescription from Hendriks et al. 2023 (https://arxiv.org/abs/2309.09339) // Based on Renzo et al. 2022 (https://iopscience.iop.org/article/10.3847/2515-5172/ac503e) - // + // // Suggest using --PPI-upper-limit 80.0 and --PISN-lower-limit 80.0 double DeltaMPPICOShift = OPTIONS->PulsationalPairInstabilityCOCoreShiftHendriks(); double DeltaMPPIExtraML = 0.0; // Make an option? Currently does nothing - // Equation (6) of Hendricks et al. 2023 + // Equation (6) of Hendricks et al. 2023 double PPIOnset = m_COCoreMass - DeltaMPPICOShift - 34.8; double PPIOnsetSquared = PPIOnset * PPIOnset; double PPIOnsetCubed = PPIOnsetSquared * PPIOnset; double firstTerm = (0.0006 * m_Log10Metallicity + 0.0054) * PPIOnsetCubed; double secondTerm = 0.0013 * PPIOnsetSquared; double DeltaMPPI = firstTerm - secondTerm + DeltaMPPIExtraML; - + DeltaMPPI = std::max(DeltaMPPI, 0.0); // DeltaMPPI, the amount of the He core that's lost in pulsations, is non-negative - m_Mass = std::max(m_HeCoreMass - DeltaMPPI, 0.0); // Remnant mass should be non-negative + m_Mass = std::max(m_HeCoreMass - DeltaMPPI, 0.0); // Remnant mass should be non-negative m_Mass = m_Mass > 10.0 ? m_Mass : 0.0; // If the predicted remnant mass is below 10 Msun, set it equal to 0 (assume a PISN) } break; @@ -2203,7 +2203,7 @@ STELLAR_TYPE GiantBranch::ResolvePulsationalPairInstabilitySN() { SetSNPastEvent(SN_EVENT::PPISN); // ... and will be a past event stellarType = STELLAR_TYPE::BLACK_HOLE; // -> black hole - + m_Luminosity = BH::CalculateLuminosityOnPhase_Static(); // black hole luminosity m_Radius = BH::CalculateRadiusOnPhase_Static(m_Mass); // Schwarzschild radius (not correct for rotating BH) m_Temperature = CalculateTemperatureOnPhase(m_Luminosity, m_Radius); @@ -2242,7 +2242,7 @@ STELLAR_TYPE GiantBranch::ResolveSupernova() { m_SupernovaDetails.coreRadiusAtCOFormation = CalculateConvectiveCoreRadius(); double snMass = CalculateInitialSupernovaMass(); // calculate SN initial mass - + SetSNHydrogenContent(); // set H-rich or H-poor JR: why don't we do this when we initialise the star at change of stellar type? if ( OPTIONS->UsePulsationalPairInstability() && @@ -2263,13 +2263,13 @@ STELLAR_TYPE GiantBranch::ResolveSupernova() { else { // Core Collapse Supernova stellarType = ResolveCoreCollapseSN(); // BH or NS } - + // check if the SN actually happened if (utils::IsOneOf(stellarType, { STELLAR_TYPE::NEUTRON_STAR, STELLAR_TYPE::BLACK_HOLE, STELLAR_TYPE::MASSLESS_REMNANT })) { // SN happened if (utils::SNEventType(m_SupernovaDetails.events.current) != SN_EVENT::PISN && !utils::IsOneOf(stellarType, { STELLAR_TYPE::MASSLESS_REMNANT })) CalculateSNKickMagnitude(m_Mass, m_SupernovaDetails.totalMassAtCOFormation - m_Mass, stellarType); - + if (!utils::IsOneOf(stellarType, { STELLAR_TYPE::NEUTRON_STAR })) m_SupernovaDetails.rocketKickMagnitude = 0; // only NSs can get rocket kicks diff --git a/src/GiantBranch.h b/src/GiantBranch.h index e9d8e4de7..3a85d50dc 100755 --- a/src/GiantBranch.h +++ b/src/GiantBranch.h @@ -18,9 +18,9 @@ class GiantBranch: virtual public BaseStar, public MainSequence { public: GiantBranch(){}; - + GiantBranch(const BaseStar &p_BaseStar) : BaseStar(p_BaseStar), MainSequence(p_BaseStar) {} - + double CalculateRemnantRadius() const; protected: @@ -45,15 +45,15 @@ class GiantBranch: virtual public BaseStar, public MainSequence { static double CalculateCoreMass_Luminosity_Lx_Static(const DBL_VECTOR &p_GBParams); static double CalculateCoreMass_Luminosity_Mx_Static(const DBL_VECTOR &p_GBParams); - double CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const; - double CalculateCriticalMassRatioHurleyHjellmingWebbink() const; + double CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const; + double CalculateCriticalMassRatioHurleyHjellmingWebbink() const; void CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams); static void CalculateGBParams_Static(const double p_Mass, const double p_LogMetallicityXi, const DBL_VECTOR &p_MassCutoffs, const DBL_VECTOR &p_AnCoefficients, const DBL_VECTOR &p_BnCoefficients, DBL_VECTOR &p_GBParams); void CalculateGBParams() { CalculateGBParams(m_Mass0, m_GBParams); } // Use class member variables static double CalculateHRateConstant_Static(const double p_Mass); - + virtual double CalculateInitialSupernovaMass() const { return m_Mass; } // Use class member variables double CalculateLifetimeToHeIgnition(const double p_Mass, const double p_Tinf1_FGB, const double p_Tinf2_FGB); @@ -114,7 +114,7 @@ class GiantBranch: virtual public BaseStar, public MainSequence { virtual double CalculateRemnantLuminosity() const; STELLAR_TYPE CalculateRemnantTypeByMuller2016(const double p_COCoreMass); - + double CalculateThermalMassLossRate() const { return (m_Mass - m_CoreMass) / CalculateThermalTimescale(); } // Use class member variables @@ -131,11 +131,11 @@ class GiantBranch: virtual public BaseStar, public MainSequence { STELLAR_TYPE ResolveElectronCaptureSN(); STELLAR_TYPE ResolvePairInstabilitySN(); STELLAR_TYPE ResolvePulsationalPairInstabilitySN(); - + void UpdateAgeAfterMassLoss() { } // NO-OP for most stellar types void UpdateInitialMass() { } // NO-OP for most stellar types - + void UpdateMainSequenceCoreMass(const double p_Dt, const double p_TotalMassLossRate) { } // NO-OP for most stellar types }; diff --git a/src/HG.cpp b/src/HG.cpp index c0f2c3497..d417349f1 100755 --- a/src/HG.cpp +++ b/src/HG.cpp @@ -79,7 +79,7 @@ double HG::CalculateLambdaDewi() const { * @return Common envelope lambda parameter */ double HG::CalculateLambdaLoveridge(const double p_EnvMass, const bool p_IsMassLoss) const { - + // find closest metallicity covered by Loveridge et al. 2011 // (see LOVERIDGE_METALLICITY and LOVERIDGE_METALLICITYValue) @@ -133,7 +133,7 @@ double HG::CalculateLambdaLoveridge(const double p_EnvMass, const bool p_IsMassL logBindingEnergy += 33.29866; // + logBE0 double bindingEnergy = PPOW(10.0, logBindingEnergy); - + double lambda = utils::Compare(bindingEnergy, 0.0) > 0 && utils::Compare(1.0 / bindingEnergy, 0.0) > 0 && utils::Compare(p_EnvMass, MAXIMUM_MASS_LOSS_FRACTION * m_Mass) > 0 ? (G_CGS * m_Mass * MSOL_TO_G * p_EnvMass * MSOL_TO_G) / (m_Radius * RSOL_TO_AU * AU_TO_CM * bindingEnergy) : 1.0; // default to 1.0 (usual lambda default) if binding energy is not sensible [sometimes can be infinite if logBindingEnergy is too high] or if envelope mass is too low to reliably evaluate lambda [can be zero] @@ -149,10 +149,10 @@ double HG::CalculateLambdaLoveridge(const double p_EnvMass, const bool p_IsMassL * * * double CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR_POPULATION p_StellarPop) - * + * * @param [IN] p_MassIndex Mass index * @param [IN] p_StellarPop The stellar population for metallicity (POP I or POP II) - * + * * @return Nanjing lambda for use in common envelope */ double HG::CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR_POPULATION p_StellarPop) const { @@ -478,7 +478,7 @@ double HG::CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR_P * * @param [IN] p_Mass Mass * @param [IN] p_Metallicity Metallicity - * + * * @return Nanjing lambda for use in common envelope */ double HG::CalculateLambdaNanjingStarTrack(const double p_Mass, const double p_Metallicity) const { @@ -891,7 +891,7 @@ double HG::CalculateRadiusOnPhase(const double p_Mass, const double p_Tau, const #define massCutoffs(x) m_MassCutoffs[static_cast(MASS_CUTOFF::x)] // for convenience and readability - undefined at end of function #define timescales(x) m_Timescales[static_cast(TIMESCALE::x)] // for convenience and readability - undefined at end of function - double RTMS; + double RTMS; if ((OPTIONS->MainSequenceCoreMassPrescription() == CORE_MASS_PRESCRIPTION::BRCEK) && (utils::Compare(m_MZAMS, BRCEK_LOWER_MASS_LIMIT) >= 0)) // p_Mass generally has the value of m_Mass0, but since m_Mass is used for radius calculations on the MS and m_Mass0 // is updated to a new value when BRCEK prescription is used, we need to use m_Mass here to keep radius continuous @@ -907,7 +907,7 @@ double HG::CalculateRadiusOnPhase(const double p_Mass, const double p_Tau, const // yes // rMinHe is Hurley et al. 2000, eq 55 - first part (M >= MHeF) double m_b28 = PPOW(p_Mass, b[28]); // pow() is slow - do it once only - double rMinHe = ((b[24] * p_Mass) + (PPOW((b[25] * p_Mass), b[26]) * m_b28)) / (b[27] + m_b28); // this is 'rmin' in Hurley sse + double rMinHe = ((b[24] * p_Mass) + (PPOW((b[25] * p_Mass), b[26]) * m_b28)) / (b[27] + m_b28); // this is 'rmin' in Hurley sse double lum = GiantBranch::CalculateLuminosityAtHeIgnition_Static(p_Mass, m_Alpha1, massCutoffs(MHeF), b); @@ -916,9 +916,9 @@ double HG::CalculateRadiusOnPhase(const double p_Mass, const double p_Tau, const // calculate radius at He ignition for MFGB < p_Mass < HM // Hurley et al. 2000, eq 50 - + rx = std::min(rMinHe, ry); - + if (utils::Compare(p_Mass, HIGH_MASS_THRESHOLD) < 0) { double mu = log10(p_Mass / HIGH_MASS_THRESHOLD) / log10(massCutoffs(MFGB) / HIGH_MASS_THRESHOLD); rx = rMinHe * PPOW(RGB / rMinHe, mu); @@ -1020,13 +1020,13 @@ double HG::CalculateCoreMassOnPhase(const double p_Mass, const double p_Time) co */ double HG::CalculateCoreMassOnPhaseIgnoringPreviousCoreMass(const double p_Mass, const double p_Time) const { #define timescales(x) m_Timescales[static_cast(TIMESCALE::x)] // for convenience and readability - undefined at end of function - + double McEHG = CalculateCoreMassAtPhaseEnd(p_Mass); double rhoHG = CalculateRho(p_Mass); double tau = (p_Time - timescales(tMS)) / (timescales(tBGB) - timescales(tMS)); - + return (((1.0 - tau) * rhoHG) + tau) * McEHG; - + #undef timescales } @@ -1039,10 +1039,10 @@ double HG::CalculateCoreMassOnPhaseIgnoringPreviousCoreMass(const double p_Mass, * Assumes this star is the donor; relevant accretor details are passed as parameters. * Critical mass ratio is defined as qCrit = mAccretor/mDonor. * - * double HG::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) + * double HG::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) * * @param [IN] p_AccretorIsDegenerate Boolean indicating if accretor in degenerate (true = degenerate) - * @return Critical mass ratio for unstable MT + * @return Critical mass ratio for unstable MT */ double HG::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { @@ -1051,7 +1051,7 @@ double HG::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) qCrit = p_AccretorIsDegenerate ? OPTIONS->MassTransferCriticalMassRatioHGDegenerateAccretor() // degenerate accretor : OPTIONS->MassTransferCriticalMassRatioHGNonDegenerateAccretor(); // non-degenerate accretor - + return qCrit; } @@ -1100,7 +1100,7 @@ void HG::UpdateAgeAfterMassLoss() { double tMSprime = MainSequence::CalculateLifetimeOnPhase(m_Mass0, tBGBprime); m_Age = tMSprime + (((tBGBprime - tMSprime) / (tBGB - tMS)) * (m_Age - tMS)); - + CalculateTimescales(m_Mass0, m_Timescales); } @@ -1124,26 +1124,26 @@ void HG::UpdateAgeAfterMassLoss() { * @return ENVELOPE::{ RADIATIVE, CONVECTIVE, REMNANT } */ ENVELOPE HG::DetermineEnvelopeType() const { - + ENVELOPE envelope = ENVELOPE::RADIATIVE; // default envelope type - + switch (OPTIONS->EnvelopeStatePrescription()) { // which envelope prescription? - + case ENVELOPE_STATE_PRESCRIPTION::LEGACY: envelope = ENVELOPE::RADIATIVE; break; - + case ENVELOPE_STATE_PRESCRIPTION::HURLEY: // eq. (39,40) of Hurley+ (2002) and end of section 7.2 of Hurley+ (2000) describe gradual // growth of convective envelope over HG, but we approximate it as already convective here envelope = ENVELOPE::CONVECTIVE; break; - + case ENVELOPE_STATE_PRESCRIPTION::FIXED_TEMPERATURE: // envelope is radiative if temperature exceeds fixed threshold, otherwise convective envelope = utils::Compare(Temperature() * TSOL, OPTIONS->ConvectiveEnvelopeTemperatureThreshold()) > 0 ? ENVELOPE::RADIATIVE : ENVELOPE::CONVECTIVE; break; - + case ENVELOPE_STATE_PRESCRIPTION::CONVECTIVE_MASS_FRACTION: // envelope is labeled convective when the convective mass exceeds a fixed fraction of the envelope mass double convectiveEnvelopeMass, convectiveEnvelopeMassMax; @@ -1159,9 +1159,9 @@ ENVELOPE HG::DetermineEnvelopeType() const { // The correct fix for this is to add code for the missing prescription or, if the missing // prescription is superfluous, remove it from the option. - THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_STATE_PRESCRIPTION); // throw error + THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_STATE_PRESCRIPTION); // throw error } - + return envelope; } @@ -1181,7 +1181,7 @@ double HG::ChooseTimestep(const double p_Time) const { #define timescales(x) m_Timescales[static_cast(TIMESCALE::x)] // for convenience and readability - undefined at end of function double dtk = 0.05 * (timescales(tBGB) - timescales(tMS)); - double dte = timescales(tBGB) - p_Time; + double dte = timescales(tBGB) - p_Time; return std::max(std::min(dtk, dte), NUCLEAR_MINIMUM_TIMESTEP); @@ -1238,7 +1238,7 @@ STELLAR_TYPE HG::ResolveEnvelopeLoss(bool p_Force) { stellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_MS; m_Mass0 = m_Mass; - m_Radius = HeMS::CalculateRadiusAtZAMS_Static(m_Mass); + m_Radius = HeMS::CalculateRadiusAtZAMS_Static(m_Mass); m_Luminosity = HeMS::CalculateLuminosityAtZAMS_Static(m_Mass); m_Age = 0.0; // can't use Hurley et al. 2000, eq 76 here - timescales(tHe) not calculated yet } @@ -1269,7 +1269,7 @@ STELLAR_TYPE HG::EvolveToNextPhase() { } else { stellarType = STELLAR_TYPE::CORE_HELIUM_BURNING; - } + } return stellarType; diff --git a/src/HG.h b/src/HG.h index 915872ea3..37b57811e 100755 --- a/src/HG.h +++ b/src/HG.h @@ -15,43 +15,43 @@ class BaseStar; class GiantBranch; class HG: virtual public BaseStar, public GiantBranch { - + public: - + HG() { m_StellarType = STELLAR_TYPE::HERTZSPRUNG_GAP; }; - + HG(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), GiantBranch(p_BaseStar) { m_StellarType = STELLAR_TYPE::HERTZSPRUNG_GAP; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } - + HG* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { HG* clone = new HG(*this, p_Initialise); clone->SetPersistence(p_Persistence); return clone; } - + static HG* Clone(HG& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { HG* clone = new HG(p_Star, p_Initialise); clone->SetPersistence(p_Persistence); return clone; } - + MT_CASE DetermineMassTransferTypeAsDonor() const { return MT_CASE::B; } // Always case B - - + + protected: - + void Initialise() { - + m_Tau = 0.0; // Start of phase - + // update stellar properties at start of HG phase (since core definition changes) CalculateGBParams(); CalculateTimescales(); // Initialise timescales m_Age = m_Timescales[static_cast(TIMESCALE::tMS)]; // Set age appropriately - + // update effective "initial" mass (m_Mass0) so that core mass matches main sequence core mass // (only relevant if MANDEL or BRCEK main sequence core mass prescription is used) if (utils::Compare(CalculateCoreMassOnPhase(m_Mass0, m_Age), std::min(m_Mass, MainSequenceCoreMass())) < 0 || @@ -67,63 +67,63 @@ class HG: virtual public BaseStar, public GiantBranch { } EvolveOnPhase(0.0); } - - + + // member functions - alphabetically double CalculateCOCoreMassAtPhaseEnd() const { return 0.0; } // McCO(HG) = 0.0 double CalculateCOCoreMassOnPhase() const { return 0.0; } // McCO(HG) = 0.0 - + double CalculateCoreMassAt2ndDredgeUp(const DBL_VECTOR &p_GBParams) { return p_GBParams[static_cast(GBP::McDU)]; } // NO-OP double CalculateCoreMassAtPhaseEnd(const double p_Mass) const; double CalculateCoreMassAtPhaseEnd() const { return CalculateCoreMassAtPhaseEnd(m_Mass0); } // Use class member variables double CalculateCoreMassOnPhase(const double p_Mass, const double p_Time) const; double CalculateCoreMassOnPhase() const { return CalculateCoreMassOnPhase(m_Mass0, m_Age); } // Use class member variables double CalculateCoreMassOnPhaseIgnoringPreviousCoreMass(const double p_Mass, const double p_Time) const; // Ignore previous core mass constraint when computing expected core mass - + double CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const; double CalculateCriticalMassRatioHurleyHjellmingWebbink() const { return HURLEY_HJELLMING_WEBBINK_QCRIT_HG; } - + double CalculateHeCoreMassAtPhaseEnd() const { return m_CoreMass; } // McHe(HG) = Core Mass double CalculateHeCoreMassOnPhase() const { return m_CoreMass; } // McHe(HG) = Core Mass - + double CalculateHeliumAbundanceCoreAtPhaseEnd() const { return 1.0 - m_Metallicity; } double CalculateHeliumAbundanceCoreOnPhase() const { return 1.0 - m_Metallicity; } // Use class member variables - + double CalculateHeliumAbundanceSurfaceAtPhaseEnd() const { return CalculateHeliumAbundanceSurfaceOnPhase(); } double CalculateHeliumAbundanceSurfaceOnPhase() const { return m_HeliumAbundanceSurface; } // Use class member variables - + double CalculateHydrogenAbundanceCoreAtPhaseEnd() const { return CalculateHydrogenAbundanceCoreOnPhase(); } double CalculateHydrogenAbundanceCoreOnPhase(const double p_Tau) const; double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; } // Star has exhausted hydrogen in its core - + double CalculateHydrogenAbundanceSurfaceAtPhaseEnd() const { return CalculateHydrogenAbundanceSurfaceOnPhase(); } double CalculateHydrogenAbundanceSurfaceOnPhase() const { return m_HydrogenAbundanceSurface; } // Use class member variables - - - + + + double CalculateLambdaDewi() const; double CalculateLambdaLoveridge(const double p_EnvMass, const bool p_IsMassLoss = false) const; double CalculateLambdaNanjingStarTrack(const double p_Mass, const double p_Metallicity) const; double CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR_POPULATION p_StellarPop) const; - + double CalculateLuminosityAtPhaseEnd(const double p_Mass) const; double CalculateLuminosityAtPhaseEnd() const { return CalculateLuminosityAtPhaseEnd(m_Mass0);} // Use class member variables double CalculateLuminosityOnPhase(const double p_Age, const double p_Mass) const; double CalculateLuminosityOnPhase() const { return CalculateLuminosityOnPhase(m_Age, m_Mass0); } // Use class member variables - + double CalculateMassTransferRejuvenationFactor() { return 1.0; } - + double CalculateRadiusAtPhaseEnd(const double p_Mass) const; double CalculateRadiusAtPhaseEnd() const { return CalculateRadiusAtPhaseEnd(m_Mass); } // Use class member variables double CalculateRadiusOnPhase(const double p_Mass, const double p_Tau, const double p_RZAMS) const; double CalculateRadiusOnPhase() const { return CalculateRadiusOnPhase(m_Mass0, m_Tau, m_RZAMS0); } // Use class member variables double CalculateRadiusOnPhase(const double p_Mass, const double p_Luminosity) const { return GiantBranch::CalculateRadiusOnPhase(p_Mass, p_Luminosity); } // Treats HG stars as GB stars - + double CalculateRho(const double p_Mass) const; double CalculateTauAtPhaseEnd() const { return 1.0; } // tau = 1.0 at end of HG double CalculateTauOnPhase() const; - + double CalculateZetaEquilibrium() { return -std::numeric_limits::infinity(); } // Nuclear timescale MT should be impossible from HG stars that evolve on a thermal timescale double ChooseTimestep(const double p_Time) const; @@ -149,7 +149,7 @@ class HG: virtual public BaseStar, public GiantBranch { void UpdateInitialMass(); // Per Hurley et al. 2000, section 7.1 - + /* * Functor for Mass0ToMatchDesiredCoreMass() * @@ -159,10 +159,10 @@ class HG: virtual public BaseStar, public GiantBranch { * * @param [IN] p_Star (Pointer to) The star under examination * @param [IN] p_DesiredCoreMass The desired core mass - * + * * Function: core mass difference after mass loss * T RadiusEqualsRocheLobeFunctor(double const& p_dM) - * + * * @param [IN] p_GuessMass0 Guess for Mass0 * @return Difference between estimated core mass (based on p_GuessMass0) and desired core mass (p_DesiredCoreMass) */ @@ -173,7 +173,7 @@ class HG: virtual public BaseStar, public GiantBranch { m_DesiredCoreMass = p_DesiredCoreMass; } T operator()(double const& p_GuessMass0) { - + // We need an estimate of the core mass of the star so we clone the star without // initialisation (i.e. we leave it where it is on the phase) so we can calculate // and query its core mass. @@ -181,7 +181,7 @@ class HG: virtual public BaseStar, public GiantBranch { // To ensure the clone does not participate in logging, we set its persistence to EPHEMERAL. HG *clone = m_Star->Clone(OBJECT_PERSISTENCE::EPHEMERAL, false); - clone->UpdateAttributesAndAgeOneTimestep(0.0, p_GuessMass0 - clone->Mass0(), 0.0, true); // update clone's mass and age it one timestep + clone->UpdateAttributesAndAgeOneTimestep(0.0, p_GuessMass0 - clone->Mass0(), 0.0, true); // update clone's mass and age it one timestep double coreMassEstimate = clone->CalculateCoreMassOnPhase(p_GuessMass0, clone->Age()); // calculate clone's core mass delete clone; clone = nullptr; // return the memory allocated for the clone @@ -191,8 +191,8 @@ class HG: virtual public BaseStar, public GiantBranch { HG *m_Star; double m_DesiredCoreMass; }; - - + + /* * Root solver to determine "initial" mass (m_Mass0) based on desired core mass * @@ -221,7 +221,7 @@ class HG: virtual public BaseStar, public GiantBranch { // we stop and return a negative value for the root (indicating no root found) double guess = p_Star->Mass(); // rough guess at solution - + double factorFrac = ADAPTIVE_MASS0_SEARCH_FACTOR_FRAC; // search step size factor fractional part double factor = 1.0 + factorFrac; // factor to determine search step size (size = guess * factor) @@ -230,7 +230,7 @@ class HG: virtual public BaseStar, public GiantBranch { bool done = false; // finished (found root or exceed maximum tries)? Mass0YieldsDesiredCoreMassFunctor func = Mass0YieldsDesiredCoreMassFunctor(p_Star, p_DesiredCoreMass); while (!done) { // while no acceptable root found - + bool isRising = func((const double)guess) >= func((const double)guess * factor) ? false : true; // gradient direction from guess to upper search increment // run the root finder @@ -281,7 +281,7 @@ class HG: virtual public BaseStar, public GiantBranch { } } } - + return root.first + (root.second - root.first) / 2.0; // midway between brackets is our result, if necessary we could return the result as an interval here. } }; diff --git a/src/HeGB.cpp b/src/HeGB.cpp index eb6a7d888..a418bbeef 100755 --- a/src/HeGB.cpp +++ b/src/HeGB.cpp @@ -94,7 +94,7 @@ double HeGB::CalculateRadiusOnPhase(const double p_Mass, const double p_Luminosi * * Hurley et al. 2000, eqs 85, 86, 87 & 88 * - * Calls CalculateRadiusOnPhase_Static() and returns the minimum of R1 and R2. + * Calls CalculateRadiusOnPhase_Static() and returns the minimum of R1 and R2. * Returns stellr type to which star should evolve based on radius calculated. * * @@ -207,7 +207,7 @@ double HeGB::CalculateCoreMassOnPhase_Static(const double p_Mass, double LtHe = HeMS::CalculateLuminosityAtPhaseEnd_Static(p_Mass); double tinf1 = p_tHeMS + ((1.0 / (p1 * gbParams(AHe) * gbParams(D))) * PPOW(gbParams(D) / LtHe, p1_p)); double tx = tinf1 - (tinf1 - p_tHeMS) * PPOW((LtHe / gbParams(Lx)), p1_p); - + if (utils::Compare(p_Time, tx) > 0) { double q1 = gbParams(q) - 1.0; double tinf2 = tx + ((1.0 / (q1 * gbParams(AHe) * gbParams(B))) * PPOW(gbParams(B) / gbParams(Lx), q1 / gbParams(q))); @@ -231,18 +231,18 @@ double HeGB::CalculateCoreMassOnPhase_Static(const double p_Mass, * Assumes this star is the donor; relevant accretor details are passed as parameters. * Critical mass ratio is defined as qCrit = mAccretor/mDonor. * - * double HeGB::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) + * double HeGB::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) * * @param [IN] p_AccretorIsDegenerate Boolean indicating if accretor in degenerate (true = degenerate) - * @return Critical mass ratio for unstable MT + * @return Critical mass ratio for unstable MT */ double HeGB::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { double qCrit; - + qCrit = p_AccretorIsDegenerate ? OPTIONS->MassTransferCriticalMassRatioHeliumGiantDegenerateAccretor() // degenerate accretor : OPTIONS->MassTransferCriticalMassRatioHeliumGiantNonDegenerateAccretor(); // non-degenerate accretor - + return qCrit; } diff --git a/src/HeGB.h b/src/HeGB.h index 56dc03824..45e5667a8 100755 --- a/src/HeGB.h +++ b/src/HeGB.h @@ -17,7 +17,7 @@ class HeGB: virtual public BaseStar, public HeHG { public: HeGB() { m_StellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_GIANT_BRANCH; }; - + HeGB(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), HeHG(p_BaseStar, false) { STELLAR_TYPE currentStellarType = m_StellarType; // Stellar type evolving from m_StellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_GIANT_BRANCH; // Set stellar type @@ -25,15 +25,15 @@ class HeGB: virtual public BaseStar, public HeHG { } HeGB* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - HeGB* clone = new HeGB(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + HeGB* clone = new HeGB(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static HeGB* Clone(HeGB& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - HeGB* clone = new HeGB(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + HeGB* clone = new HeGB(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -66,13 +66,13 @@ class HeGB: virtual public BaseStar, public HeHG { double CalculateRadiusOnPhase(const double p_Mass, const double p_Luminosity) const; double CalculateRadiusOnPhase() const { return CalculateRadiusOnPhase(m_Mass, m_Luminosity); } - - double CalculateZetaEquilibrium() { return 0.0; } // At lowest order, giants with a convective envelope have radii that are insensitive to mass loss + + double CalculateZetaEquilibrium() { return 0.0; } // At lowest order, giants with a convective envelope have radii that are insensitive to mass loss std::tuple CalculateRadiusAndStellarTypeOnPhase(const double p_Mass, const double p_Luminosity) const; std::tuple CalculateRadiusAndStellarTypeOnPhase() const { return CalculateRadiusAndStellarTypeOnPhase(m_Mass, m_Luminosity); } - - ENVELOPE DetermineEnvelopeType() const { return ENVELOPE::CONVECTIVE; } // Always CONVECTIVE + + ENVELOPE DetermineEnvelopeType() const { return ENVELOPE::CONVECTIVE; } // Always CONVECTIVE }; #endif // __HeGB_h__ diff --git a/src/HeHG.cpp b/src/HeHG.cpp index de947ab54..1ff8e2ceb 100755 --- a/src/HeHG.cpp +++ b/src/HeHG.cpp @@ -81,17 +81,17 @@ void HeHG::CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams) { * * This function exists to facilitate the calculation of gbParams in EAGB::ResolveEnvelopeLoss() for the * stellar type to which the star will evolve. The calculations of some of the stellar attributes there - * depend on new gbParams. + * depend on new gbParams. * JR: This really needs to be revisited one day - these calculations should really be performed after - * switching to the new stellar type, but other calculations are done (in the legacy code) before the + * switching to the new stellar type, but other calculations are done (in the legacy code) before the * switch (see evolveOneTimestep() in star.cpp for EAGB stars in the legacy code). * * - * void CalculateGBParams_Static(const double p_Mass0, - * const double p_Mass, - * const double p_LogMetallicityXi, - * const DBL_VECTOR &p_MassCutoffs, - * const DBL_VECTOR &p_AnCoefficients, + * void CalculateGBParams_Static(const double p_Mass0, + * const double p_Mass, + * const double p_LogMetallicityXi, + * const DBL_VECTOR &p_MassCutoffs, + * const DBL_VECTOR &p_AnCoefficients, * const DBL_VECTOR &p_BnCoefficients, * DBL_VECTOR &p_GBParams) * @@ -103,16 +103,16 @@ void HeHG::CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams) { * @param [IN] p_BnCoefficients b(n) coefficients * @param [IN/OUT] p_GBParams Giant Branch Parameters - calculated here */ -void HeHG::CalculateGBParams_Static(const double p_Mass0, - const double p_Mass, - const double p_LogMetallicityXi, - const DBL_VECTOR &p_MassCutoffs, - const DBL_VECTOR &p_AnCoefficients, - const DBL_VECTOR &p_BnCoefficients, +void HeHG::CalculateGBParams_Static(const double p_Mass0, + const double p_Mass, + const double p_LogMetallicityXi, + const DBL_VECTOR &p_MassCutoffs, + const DBL_VECTOR &p_AnCoefficients, + const DBL_VECTOR &p_BnCoefficients, DBL_VECTOR &p_GBParams) { #define gbParams(x) p_GBParams[static_cast(GBP::x)] // for convenience and readability - undefined at end of function - + GiantBranch::CalculateGBParams_Static(p_Mass, p_LogMetallicityXi, p_MassCutoffs, p_AnCoefficients, p_BnCoefficients, p_GBParams); // calculate common values (actually, all) // recalculate HeHG specific values @@ -128,7 +128,7 @@ void HeHG::CalculateGBParams_Static(const double p_Mass0, // should return to this and understand desired behavior - *ILYA* gbParams(p) = CalculateCoreMass_Luminosity_p_Static(p_Mass, p_MassCutoffs); gbParams(q) = CalculateCoreMass_Luminosity_q_Static(p_Mass, p_MassCutoffs); - + gbParams(McBAGB) = p_Mass0; gbParams(McBGB) = GiantBranch::CalculateCoreMassAtBGB_Static(p_Mass, p_MassCutoffs, p_AnCoefficients, p_GBParams); @@ -160,7 +160,7 @@ double HeHG::CalculateLuminosityOnPhase() const { * Uses Helium Giant Branch radius * * - * double CalculateRadiusOnPhase(double p_Mass, double p_Luminosity) + * double CalculateRadiusOnPhase(double p_Mass, double p_Luminosity) * * @param [IN] p_Mass Mass in Msol * @param [IN] p_Luminosity Luminosity in Lsol @@ -181,7 +181,7 @@ double HeHG::CalculateRadiusOnPhase(double p_Mass, double p_Luminosity) const { * * Hurley et al. 2000, eqs 85, 86, 87 & 88 * - * Calls CalculateRadiusOnPhase_Static() and returns the minimum of R1 and R2. + * Calls CalculateRadiusOnPhase_Static() and returns the minimum of R1 and R2. * Returns stellar type to which star should evolve based on radius calculated. * * @@ -200,7 +200,7 @@ std::tuple HeHG::CalculateRadiusAndStellarTypeOnPhase(con std::tie(R1, R2) = HeGB::CalculateRadiusOnPhase_Static(p_Mass, p_Luminosity); radius = std::min(R1, R2); - + if (utils::Compare(R1, R2) >= 0) { stellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_GIANT_BRANCH; } @@ -277,7 +277,7 @@ double HeHG::CalculateRemnantRadius() const { * * @param [IN] p_Mass Mass * @param [IN] p_Metallicity Metallicity - * + * * @return Nanjing lambda for use in common envelope */ double HeHG::CalculateLambdaNanjingStarTrack(const double p_Mass, const double p_Metallicity) const { @@ -308,25 +308,25 @@ double HeHG::CalculateLambdaNanjingStarTrack(const double p_Mass, const double p * @return ENVELOPE::{ RADIATIVE, CONVECTIVE, REMNANT } */ ENVELOPE HeHG::DetermineEnvelopeType() const { - + ENVELOPE envelope = ENVELOPE::RADIATIVE; // default envelope type - + switch (OPTIONS->EnvelopeStatePrescription()) { // which envelope prescription? - + case ENVELOPE_STATE_PRESCRIPTION::LEGACY: envelope = ENVELOPE::RADIATIVE; // default treatment break; - + case ENVELOPE_STATE_PRESCRIPTION::HURLEY: // eq. (39,40) of Hurley+ (2002) and end of section 7.2 of Hurley+ (2000) describe gradual // growth of convective envelope over HG, but we approximate it as already convective here envelope = ENVELOPE::CONVECTIVE; break; - + case ENVELOPE_STATE_PRESCRIPTION::FIXED_TEMPERATURE: envelope = utils::Compare(Temperature() * TSOL, OPTIONS->ConvectiveEnvelopeTemperatureThreshold()) > 0 ? ENVELOPE::RADIATIVE : ENVELOPE::CONVECTIVE; // Envelope is radiative if temperature exceeds fixed threshold, otherwise convective break; - + case ENVELOPE_STATE_PRESCRIPTION::CONVECTIVE_MASS_FRACTION: // envelope is labeled convective when the convective mass exceeds a fixed fraction of the envelope mass double convectiveEnvelopeMass, convectiveEnvelopeMassMax; @@ -342,9 +342,9 @@ ENVELOPE HeHG::DetermineEnvelopeType() const { // The correct fix for this is to add code for the missing prescription or, if the missing // prescription is superfluous, remove it from the option. - THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_STATE_PRESCRIPTION); // throw error + THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_STATE_PRESCRIPTION); // throw error } - + return envelope; } @@ -357,19 +357,19 @@ ENVELOPE HeHG::DetermineEnvelopeType() const { * Assumes this star is the donor; relevant accretor details are passed as parameters. * Critical mass ratio is defined as qCrit = mAccretor/mDonor. * - * double HeHG::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) + * double HeHG::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) * * @param [IN] p_AccretorIsDegenerate Boolean indicating if accretor in degenerate (true = degenerate) - * @return Critical mass ratio for unstable MT + * @return Critical mass ratio for unstable MT */ double HeHG::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { double qCrit; - + qCrit = p_AccretorIsDegenerate ? OPTIONS->MassTransferCriticalMassRatioHeliumHGDegenerateAccretor() // degenerate accretor : OPTIONS->MassTransferCriticalMassRatioHeliumHGNonDegenerateAccretor(); // non-degenerate accretor - + return qCrit; } @@ -445,9 +445,9 @@ bool HeHG::ShouldEvolveOnPhase() const { STELLAR_TYPE HeHG::ResolveEnvelopeLoss(bool p_Force) { STELLAR_TYPE stellarType = m_StellarType; - + if (ShouldEnvelopeBeExpelledByPulsations()) m_EnvelopeJustExpelledByPulsations = true; - + if (p_Force || utils::Compare(m_CoreMass, m_Mass) >= 0 || m_EnvelopeJustExpelledByPulsations) { // Envelope lost - determine what type of star to form m_Mass = std::min(m_CoreMass, m_Mass); @@ -477,7 +477,7 @@ bool HeHG::IsSupernova() const { if (utils::Compare(m_CoreMass, m_Mass) == 0) { // special case of ultra-stripped-star -- go SN immediately if over ECSN limit return (utils::Compare(m_Mass, MECS) > 0); } - + return (utils::Compare(m_COCoreMass, CalculateCoreMassAtSupernova_Static(MECS, m_GBParams[static_cast(GBP::McBAGB)])) >= 0); // Go supernova if CO core mass large enough } diff --git a/src/HeHG.h b/src/HeHG.h index 9b45a45d5..06d049d26 100755 --- a/src/HeHG.h +++ b/src/HeHG.h @@ -17,29 +17,29 @@ class HeHG: virtual public BaseStar, public HeMS { public: HeHG() { m_StellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_HERTZSPRUNG_GAP; }; - + HeHG(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), HeMS(p_BaseStar, false) { m_StellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_HERTZSPRUNG_GAP; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } HeHG* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - HeHG* clone = new HeHG(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + HeHG* clone = new HeHG(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static HeHG* Clone(HeHG& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - HeHG* clone = new HeHG(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + HeHG* clone = new HeHG(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } // member functions double CalculateConvectiveCoreRadius () const { return std::min(5.0 * CalculateRemnantRadius(), m_Radius); } // Last paragraph of section 6 of Hurley+ 2000 static void CalculateGBParams_Static(const double p_Mass0, const double p_Mass, const double p_LogMetallicityXi, const DBL_VECTOR &p_MassCutoffs, const DBL_VECTOR &p_AnCoefficients, const DBL_VECTOR &p_BnCoefficients, DBL_VECTOR &p_GBParams); - + double CalculateRemnantRadius() const; protected: @@ -50,7 +50,7 @@ class HeHG: virtual public BaseStar, public HeMS { // Age for HeHG is calculated before switching - // can get here via EvolveOneTimestep() and ResolveEnvelopeLoss(), // and Age is calculated differently in those cases - + // Update stellar properties at start of HeHG phase (since core definition changes) CalculateGBParams(); @@ -61,7 +61,7 @@ class HeHG: virtual public BaseStar, public HeMS { // member functions - aphabetically double CalculateCOCoreMassAtPhaseEnd() const { return m_COCoreMass; } //*ILYA* check // NO-OP double CalculateCOCoreMassOnPhase() const; - + double CalculateConvectiveCoreMass() const { return m_CoreMass; } double CalculateCoreMassAtBAGB() const { return m_Mass0; } // McBAGB = M0 (Hurely et al. 2000, discussion just before eq 89) @@ -76,10 +76,10 @@ class HeHG: virtual public BaseStar, public HeMS { double CalculateHeCoreMassAtPhaseEnd() const { return CalculateHeCoreMassOnPhase(); } // Same as on phase double CalculateHeCoreMassOnPhase() const { return m_Mass; } // NO-OP - + double CalculateHeliumAbundanceCoreAtPhaseEnd() const { return 0.0; } double CalculateHeliumAbundanceCoreOnPhase() const { return 0.0; } - + double CalculateHydrogenAbundanceCoreAtPhaseEnd() const { return 0.0; } double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; } @@ -97,7 +97,7 @@ class HeHG: virtual public BaseStar, public HeMS { double CalculatePerturbationMuAtPhaseEnd() const { return m_Mu; } // NO-OP double CalculateRadiusAtPhaseEnd() const { return m_Radius; } // NO-OP - + double CalculateRadiusOnMassChange(double p_dM) { return CalculateRadiusOnPhase(m_Mass + p_dM, m_Luminosity); } double CalculateRadiusOnPhase() const { return CalculateRadiusOnPhase(m_Mass, m_Luminosity); } double CalculateRadiusOnPhase(double p_Mass, double p_Luminosity) const; @@ -116,9 +116,9 @@ class HeHG: virtual public BaseStar, public HeMS { void CalculateTimescales(const double p_Mass, DBL_VECTOR &p_Timescales); void CalculateTimescales() { CalculateTimescales(m_Mass0, m_Timescales); } // Use class member variables - + double CalculateZetaConstantsByEnvelope(ZETA_PRESCRIPTION p_ZetaPrescription) { return GiantBranch::CalculateZetaConstantsByEnvelope(p_ZetaPrescription); } // Calculate Zetas as for other giant stars (HeMS stars were an exception) - + double CalculateZetaEquilibrium() { return -std::numeric_limits::infinity(); } // Nuclear timescale MT should be impossible from HG stars that evolve on a thermal timescale double ChooseTimestep(const double p_Time) const; @@ -130,7 +130,7 @@ class HeHG: virtual public BaseStar, public HeMS { bool IsEndOfPhase() const { return !ShouldEvolveOnPhase(); } bool IsSupernova() const; double CalculateInitialSupernovaMass() const; - + void PerturbLuminosityAndRadius() { GiantBranch::PerturbLuminosityAndRadius(); } // NO-OP STELLAR_TYPE ResolveEnvelopeLoss(bool p_Force = false); diff --git a/src/HeMS.cpp b/src/HeMS.cpp index 96e7f0580..aac176a48 100755 --- a/src/HeMS.cpp +++ b/src/HeMS.cpp @@ -10,13 +10,13 @@ /* * Calculate the helium abundance in the core of the star - * + * * Currently just a simple linear model. Should be updated to match detailed models. * * double CalculateHeliumAbundanceCore(const double p_Tau) - * + * * @param [IN] p_Tau Fraction of main sequence lifetime - * + * * @return Helium abundance in the core (Y_c) */ double HeMS::CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const { @@ -77,7 +77,7 @@ void HeMS::CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams) { gbParams(p) = CalculateCoreMass_Luminosity_p_Static(p_Mass, m_MassCutoffs); gbParams(q) = CalculateCoreMass_Luminosity_q_Static(p_Mass, m_MassCutoffs); - + gbParams(Mx) = GiantBranch::CalculateCoreMass_Luminosity_Mx_Static(p_GBParams); // depends on B, D, p & q - recalculate if any of those are changed gbParams(Lx) = GiantBranch::CalculateCoreMass_Luminosity_Lx_Static(p_GBParams); // depends on B, D, p, q & Mx - recalculate if any of those are changed @@ -178,7 +178,7 @@ double HeMS::CalculateConvectiveCoreRadius() const { // // The clone should not evolve, and so should not log anything, but to be sure the // clone does not participate in logging, we set its persistence to EPHEMERAL. - + HeHG *clone = HeHG::Clone(static_cast(const_cast(*this)), OBJECT_PERSISTENCE::EPHEMERAL); double finalConvectiveCoreRadius = clone->CalculateConvectiveCoreRadius(); // get core radius from clone delete clone; clone = nullptr; // return the memory allocated for the clone @@ -274,7 +274,7 @@ double HeMS::CalculateConvectiveCoreMass() const { // // The clone should not evolve, and so should not log anything, but to be sure the // clone does not participate in logging, we set its persistence to EPHEMERAL. - + HeHG *clone = HeHG::Clone(static_cast(const_cast(*this)), OBJECT_PERSISTENCE::EPHEMERAL, true); double finalConvectiveCoreMass = clone->CoreMass(); // get core mass from clone delete clone; clone = nullptr; // return the memory allocated for the clone @@ -335,7 +335,7 @@ double HeMS::CalculateMassTransferRejuvenationFactor() { double HeMS::CalculateMassLossRateHurley() { double rateNJ = CalculateMassLossRateNieuwenhuijzenDeJager(); double rateKR = CalculateMassLossRateKudritzkiReimers(); - double rateWR = OPTIONS->WolfRayetFactor() * CalculateMassLossRateWolfRayet(0.0); // use mu = 0.0 for Helium stars + double rateWR = OPTIONS->WolfRayetFactor() * CalculateMassLossRateWolfRayet(0.0); // use mu = 0.0 for Helium stars m_DominantMassLossRate = MASS_LOSS_TYPE::GB; double dominantRate = std::max(rateNJ, rateKR); @@ -360,19 +360,19 @@ double HeMS::CalculateMassLossRateHurley() { */ double HeMS::CalculateMassLossRateBelczynski2010() { m_DominantMassLossRate = MASS_LOSS_TYPE::WR; - return OPTIONS->WolfRayetFactor() * CalculateMassLossRateWolfRayetZDependent(0.0); + return OPTIONS->WolfRayetFactor() * CalculateMassLossRateWolfRayetZDependent(0.0); } /* * Calculate the mass-loss rate for Wolf--Rayet stars according to the * prescription of Shenar et al. 2019 (https://ui.adsabs.harvard.edu/abs/2019A%26A...627A.151S/abstract) - * + * * See their Eq. 6 and Table 5 - * - * We use the fitting coefficients for hydrogen poor WR stars + * + * We use the fitting coefficients for hydrogen poor WR stars * The C4 (X_He) term is = 0 and is omitted - * + * * double CalculateMassLossRateWolfRayetShenar2019() * * @@ -389,16 +389,16 @@ double HeMS::CalculateMassLossRateWolfRayetShenar2019() const { const double C3 = -0.07; const double C5 = 0.89; - logMdot = C1 + (C2 * log10(m_Luminosity)) + (C3 * log10(Teff)) + (C5 * m_Log10Metallicity); + logMdot = C1 + (C2 * log10(m_Luminosity)) + (C3 * log10(Teff)) + (C5 * m_Log10Metallicity); - return PPOW(10.0, logMdot); // Mdot + return PPOW(10.0, logMdot); // Mdot } /* * Calculate the mass loss rate for helium stars in the updated prescription * Uses Sander & Vink 2020 for Wolf--Rayet stars - * + * * double CalculateMassLossRateMerritt2025() * * @return Mass loss rate in Msol per year @@ -471,19 +471,19 @@ double HeMS::CalculateMassLossRateMerritt2025() { * Assumes this star is the donor; relevant accretor details are passed as parameters. * Critical mass ratio is defined as qCrit = mAccretor/mDonor. * - * double HeMS::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) + * double HeMS::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) * * @param [IN] p_AccretorIsDegenerate Boolean indicating if accretor in degenerate (true = degenerate) - * @return Critical mass ratio for unstable MT + * @return Critical mass ratio for unstable MT */ double HeMS::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { double qCrit; - + qCrit = p_AccretorIsDegenerate ? OPTIONS->MassTransferCriticalMassRatioHeliumMSDegenerateAccretor() // degenerate accretor : OPTIONS->MassTransferCriticalMassRatioHeliumMSNonDegenerateAccretor(); // non-degenerate accretor - + return qCrit; } @@ -534,7 +534,7 @@ void HeMS::UpdateAgeAfterMassLoss() { double tHeMSprime = CalculateLifetimeOnPhase_Static(m_Mass); m_Age *= tHeMSprime / tHeMS; - + CalculateTimescales(m_Mass, m_Timescales); } @@ -629,22 +629,22 @@ STELLAR_TYPE HeMS::EvolveToNextPhase() { -/* +/* * Interpolate Ge+ Critical Mass Ratios, for H-poor stars - * + * * Function to interpolate in mass and radius to calculate the stellar response of a He star to mass loss. * Functionally works the same as the interpolator for H-rich stars, except that there is only one variation - * for the H-poor stars. + * for the H-poor stars. * - * Function takes no input (unlike in the H-rich case) because the existing table only applies for fully conservative + * Function takes no input (unlike in the H-rich case) because the existing table only applies for fully conservative * mass transfer and the GE fully adiabatic response, not the artificially isentropic one. Also only for Z=Zsol. * - * Interpolation is done linearly in logM and logR. - * + * Interpolation is done linearly in logM and logR. + * * double HeMS::InterpolateGeEtAlQCrit() - * + * * @return Interpolated value of either the critical mass ratio or zeta for given stellar mass / radius - */ + */ double HeMS::InterpolateGeEtAlQCrit() { // Get vector of masses from qCritTable @@ -655,73 +655,73 @@ double HeMS::InterpolateGeEtAlQCrit() { INT_VECTOR indices = utils::BinarySearch(massesFromQCritTable, m_Mass); int lowerMassIndex = indices[0]; int upperMassIndex = indices[1]; - + if (lowerMassIndex == -1) { // if masses are out of range, set to endpoints - lowerMassIndex = 0; + lowerMassIndex = 0; upperMassIndex = 1; - } - else if (upperMassIndex == -1) { - lowerMassIndex = massesFromQCritTable.size() - 2; + } + else if (upperMassIndex == -1) { + lowerMassIndex = massesFromQCritTable.size() - 2; upperMassIndex = massesFromQCritTable.size() - 1; - } - + } + // Get vector of radii from qCritTable for the lower and upper mass indices std::vector logRadiusVectorLowerMass = std::get<0>(radiiQCritsFromQCritTable[lowerMassIndex]); std::vector logRadiusVectorUpperMass = std::get<0>(radiiQCritsFromQCritTable[upperMassIndex]); - // Get the qCrit vector for the lower and upper mass bounds + // Get the qCrit vector for the lower and upper mass bounds std::vector qCritVectorLowerMass = std::get<1>(radiiQCritsFromQCritTable[lowerMassIndex]); std::vector qCritVectorUpperMass = std::get<1>(radiiQCritsFromQCritTable[upperMassIndex]); - + // Get vector of radii from qCritTable for both lower and upper masses INT_VECTOR indicesR0 = utils::BinarySearch(logRadiusVectorLowerMass, log10(m_Radius)); int lowerRadiusLowerMassIndex = indicesR0[0]; int upperRadiusLowerMassIndex = indicesR0[1]; - + if (lowerRadiusLowerMassIndex == -1) { // if radii are out of range, set to endpoints - lowerRadiusLowerMassIndex = 0; - upperRadiusLowerMassIndex = 1; + lowerRadiusLowerMassIndex = 0; + upperRadiusLowerMassIndex = 1; } - else if (upperRadiusLowerMassIndex == -1) { - lowerRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 2; - upperRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 1; + else if (upperRadiusLowerMassIndex == -1) { + lowerRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 2; + upperRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 1; } - + INT_VECTOR indicesR1 = utils::BinarySearch(logRadiusVectorUpperMass, log10(m_Radius)); int lowerRadiusUpperMassIndex = indicesR1[0]; int upperRadiusUpperMassIndex = indicesR1[1]; - + if (lowerRadiusUpperMassIndex == -1) { // if radii are out of range, set to endpoints - lowerRadiusUpperMassIndex = 0; - upperRadiusUpperMassIndex = 1; + lowerRadiusUpperMassIndex = 0; + upperRadiusUpperMassIndex = 1; } - else if (upperRadiusUpperMassIndex == -1) { - lowerRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 2; - upperRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 1; + else if (upperRadiusUpperMassIndex == -1) { + lowerRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 2; + upperRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 1; } - + // Set the 4 boundary points for the 2D interpolation double qLowLow = qCritVectorLowerMass[lowerRadiusLowerMassIndex]; double qLowUpp = qCritVectorLowerMass[upperRadiusLowerMassIndex]; double qUppLow = qCritVectorUpperMass[lowerRadiusUpperMassIndex]; double qUppUpp = qCritVectorUpperMass[upperRadiusUpperMassIndex]; - + double lowerLogRadiusLowerMass = logRadiusVectorLowerMass[lowerRadiusLowerMassIndex]; double upperLogRadiusLowerMass = logRadiusVectorLowerMass[upperRadiusLowerMassIndex]; double lowerLogRadiusUpperMass = logRadiusVectorUpperMass[lowerRadiusUpperMassIndex]; double upperLogRadiusUpperMass = logRadiusVectorUpperMass[upperRadiusUpperMassIndex]; - + double logLowerMass = log10(massesFromQCritTable[lowerMassIndex]); double logUpperMass = log10(massesFromQCritTable[upperMassIndex]); - + // Interpolate on logR first, then logM, using nearest neighbor for extrapolation double logRadius = log10(m_Radius); double qCritLowerMass = (logRadius < lowerLogRadiusLowerMass) ? qLowLow : (logRadius > upperLogRadiusLowerMass) ? qLowUpp : qLowLow + (logRadius - lowerLogRadiusLowerMass) / (upperLogRadiusLowerMass - lowerLogRadiusLowerMass) * (qLowUpp - qLowLow); double qCritUpperMass = (logRadius < lowerLogRadiusUpperMass) ? qUppLow - : (logRadius > upperLogRadiusUpperMass) ? qUppUpp + : (logRadius > upperLogRadiusUpperMass) ? qUppUpp : qUppLow + (logRadius - lowerLogRadiusUpperMass) / (upperLogRadiusUpperMass - lowerLogRadiusUpperMass) * (qUppUpp - qUppLow); double logMass = log10(m_Mass); diff --git a/src/HeMS.h b/src/HeMS.h index 08a4786f3..5fe4f19cb 100644 --- a/src/HeMS.h +++ b/src/HeMS.h @@ -20,22 +20,22 @@ class HeMS: virtual public BaseStar, public TPAGB { public: HeMS() { m_StellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_MS; }; - + HeMS(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), TPAGB(p_BaseStar, false) { m_StellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_MS; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } HeMS* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - HeMS* clone = new HeMS(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + HeMS* clone = new HeMS(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static HeMS* Clone(HeMS& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - HeMS* clone = new HeMS(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + HeMS* clone = new HeMS(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -52,7 +52,7 @@ class HeMS: virtual public BaseStar, public TPAGB { static DBL_DBL CalculateRadiusAtPhaseEnd_Static(const double p_Mass, const double p_Luminosity); static double CalculateRadiusAtZAMS_Static(const double p_Mass); static double CalculateRadiusOnPhase_Static(const double p_Mass, const double p_Tau); - + double CalculateRemnantRadius() const { return Radius(); } MT_CASE DetermineMassTransferTypeAsDonor() const { return MT_CASE::OTHER; } // Not A, B, C, or NONE @@ -64,7 +64,7 @@ class HeMS: virtual public BaseStar, public TPAGB { // initialise surface abundances m_HydrogenAbundanceSurface = 0.0; m_HeliumAbundanceSurface = 1.0 - m_Metallicity; - + CalculateTimescales(); // JR: Age for HeMS is partially calculated before switching - // can get here from various places in ResolveEnvelopeLoss(), @@ -100,16 +100,16 @@ class HeMS: virtual public BaseStar, public TPAGB { // Abundances double CalculateHeliumAbundanceCoreAtPhaseEnd() const { return CalculateHeliumAbundanceCoreOnPhase(); } double CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const; - double CalculateHeliumAbundanceCoreOnPhase() const { return CalculateHeliumAbundanceCoreOnPhase(m_Tau); } // Use class member variables - + double CalculateHeliumAbundanceCoreOnPhase() const { return CalculateHeliumAbundanceCoreOnPhase(m_Tau); } // Use class member variables + double CalculateHeliumAbundanceSurfaceAtPhaseEnd() const { return CalculateHeliumAbundanceSurfaceOnPhase(); } - double CalculateHeliumAbundanceSurfaceOnPhase() const { return m_HeliumAbundanceSurface; } // Use class member variables + double CalculateHeliumAbundanceSurfaceOnPhase() const { return m_HeliumAbundanceSurface; } // Use class member variables - double CalculateHydrogenAbundanceCoreAtPhaseEnd() const { return CalculateHydrogenAbundanceCoreOnPhase(); } + double CalculateHydrogenAbundanceCoreAtPhaseEnd() const { return CalculateHydrogenAbundanceCoreOnPhase(); } double CalculateHydrogenAbundanceCoreOnPhase(const double p_Tau) const { return 0.0; } - double CalculateHydrogenAbundanceCoreOnPhase() const { return CalculateHydrogenAbundanceCoreOnPhase(m_Tau); } // Use class member variables + double CalculateHydrogenAbundanceCoreOnPhase() const { return CalculateHydrogenAbundanceCoreOnPhase(m_Tau); } // Use class member variables - double CalculateHydrogenAbundanceSurfaceAtPhaseEnd() const { return CalculateHydrogenAbundanceSurfaceOnPhase(); } + double CalculateHydrogenAbundanceSurfaceAtPhaseEnd() const { return CalculateHydrogenAbundanceSurfaceOnPhase(); } double CalculateHydrogenAbundanceSurfaceOnPhase() const { return m_HydrogenAbundanceSurface; } // Use class member variables double CalculateInitialSupernovaMass() const { return GiantBranch::CalculateInitialSupernovaMass(); } // Use GiantBranch @@ -149,7 +149,7 @@ class HeMS: virtual public BaseStar, public TPAGB { void CalculateTimescales(const double p_Mass, DBL_VECTOR &p_Timescales); void CalculateTimescales() { CalculateTimescales(m_Mass0, m_Timescales); } // Use class member variables - + double CalculateZetaConstantsByEnvelope(ZETA_PRESCRIPTION p_ZetaPrescription) { return OPTIONS->ZetaMainSequence(); } // A HeMS star is treated as any other MS star for Zeta calculation purposes double CalculateZetaEquilibrium() { return MainSequence::CalculateZetaEquilibrium(); } // A HeMS star is treated as any other MS star for Zeta calculation purposes @@ -159,9 +159,9 @@ class HeMS: virtual public BaseStar, public TPAGB { ENVELOPE DetermineEnvelopeType() const { return ENVELOPE::RADIATIVE; } // Always RADIATIVE - double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, + double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) { return InterpolateGeEtAlQCrit(); } // The function arguments are irrelavant for He stars, for now - double InterpolateGeEtAlQCrit(); + double InterpolateGeEtAlQCrit(); bool IsEndOfPhase() const { return !ShouldEvolveOnPhase(); } bool IsSupernova() const { return false; } // Not here diff --git a/src/HeWD.cpp b/src/HeWD.cpp index 9d8f60423..8e663a3db 100755 --- a/src/HeWD.cpp +++ b/src/HeWD.cpp @@ -8,7 +8,7 @@ * (b) the retention efficiency parameter * * - * For He WDs, we calculate the mass accretion rate following the + * For He WDs, we calculate the mass accretion rate following the * StarTrack prescription (Belczynski+ 2008, sect 5.7.1). * https://ui.adsabs.harvard.edu/abs/2008ApJS..174..223B/abstract * @@ -22,7 +22,7 @@ DBL_DBL HeWD::CalculateMassAcceptanceRate(const double p_DonorMassRate, const bool p_IsHeRich) { m_AccretionRegime = DetermineAccretionRegime(p_DonorMassRate, p_IsHeRich); // Check if accretion leads to stage switch for WDs and returns retention efficiency as well. - + double acceptanceRate = 0.0; // acceptance mass rate - default = 0.0 double fractionAccreted = m_AccretionRegime == ACCRETION_REGIME::HELIUM_WHITE_DWARF_HYDROGEN_FLASHES ? 0.0 : 1.0; // accretion fraction - default = 1.0, but flashes restrict accumulation @@ -30,14 +30,14 @@ DBL_DBL HeWD::CalculateMassAcceptanceRate(const double p_DonorMassRate, const bo } -/* +/* * Determine the WD accretion regime based on the MT rate and whether the donor is He rich. Also, - * initialize Sub-Chandrasekhar SN Ia or rejuvenation (evolution into HeMS) when necessary, by - * changing the value of m_IsSubChandrasekharTypeIa or m_ShouldRejuvenate (respectively). + * initialize Sub-Chandrasekhar SN Ia or rejuvenation (evolution into HeMS) when necessary, by + * changing the value of m_IsSubChandrasekharTypeIa or m_ShouldRejuvenate (respectively). * * The accretion regime is one of the options listed in enum ACCRETION_REGIME (constants.h) * - * ACCRETION_REGIME DetermineAccretionRegime(const double p_DonorMassLossRate, const bool p_HeRich) + * ACCRETION_REGIME DetermineAccretionRegime(const double p_DonorMassLossRate, const bool p_HeRich) * * @param [IN] p_DonorMassRate Donor mass loss rate, in units of Msol / Myr * @param [IN] p_HeRich Whether the accreted material is helium-rich or not @@ -53,7 +53,7 @@ ACCRETION_REGIME HeWD::DetermineAccretionRegime(const double p_DonorMassRate, co if (utils::Compare(m_Mass, massSubCh) >= 0 ) { m_IsSubChandrasekharTypeIa = true; } - } + } else { regime = ACCRETION_REGIME::HELIUM_WHITE_DWARF_HELIUM_IGNITION; // Could lift degeneracy and evolve into He MS. Requires minimum mass ! on top of the shell size if (utils::Compare(m_Mass, HEWD_MINIMUM_MASS_IGNITION) >= 0) { @@ -62,18 +62,18 @@ ACCRETION_REGIME HeWD::DetermineAccretionRegime(const double p_DonorMassRate, co if (utils::Compare(m_HeShell, mCritHeShell) >= 0) { m_ShouldRejuvenate = true; } - } + } else { m_ShouldRejuvenate = true; } } } - } + } else { double Mcrit = m_L0Ritter * PPOW(m_Mass, m_LambdaRitter) / (m_XRitter * Q_HYDROGEN_BURNING); // Eq. 60 in Belczynski+ 2008. 6e18 is the energy yield of H burning in ergs/g. if (utils::Compare(Mdot, Mcrit) <= 0) { regime = ACCRETION_REGIME::HELIUM_WHITE_DWARF_HYDROGEN_FLASHES; // Flashes restrict accumulation - } + } else { regime = ACCRETION_REGIME::HELIUM_WHITE_DWARF_HYDROGEN_ACCUMULATION; // Material piles up on the WD. Leads to merger or CEE. } @@ -99,9 +99,9 @@ STELLAR_TYPE HeWD::EvolveToNextPhase() { m_Radius = HeMS::CalculateRadiusAtZAMS_Static(m_CoreMass); m_Luminosity = HeMS::CalculateLuminosityAtZAMS_Static(m_CoreMass); m_Tau = 0; - stellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_MS; + stellarType = STELLAR_TYPE::NAKED_HELIUM_STAR_MS; } - else { + else { stellarType = ResolveSNIa(); // currently, assume a Type Ia from a HeWD is the same as other WDs. May want to vary in the future } return stellarType; diff --git a/src/HeWD.h b/src/HeWD.h index 9c73909d2..8ed86ad03 100755 --- a/src/HeWD.h +++ b/src/HeWD.h @@ -17,22 +17,22 @@ class HeWD: virtual public BaseStar, public WhiteDwarfs { public: HeWD() { m_StellarType = STELLAR_TYPE::HELIUM_WHITE_DWARF; }; - + HeWD(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), WhiteDwarfs(p_BaseStar) { m_StellarType = STELLAR_TYPE::HELIUM_WHITE_DWARF; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } HeWD* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - HeWD* clone = new HeWD(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + HeWD* clone = new HeWD(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static HeWD* Clone(HeWD& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - HeWD* clone = new HeWD(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + HeWD* clone = new HeWD(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -53,10 +53,10 @@ class HeWD: virtual public BaseStar, public WhiteDwarfs { m_L0Ritter = Calculatel0Ritter(); m_XRitter = CalculateXRitter(); m_LambdaRitter = CalculateLambdaRitter(); - m_IsSubChandrasekharTypeIa = false; + m_IsSubChandrasekharTypeIa = false; m_ShouldRejuvenate = false; m_AccretionRegime = ACCRETION_REGIME::ZERO; - + EvolveOnPhase(0.0); } @@ -64,10 +64,10 @@ class HeWD: virtual public BaseStar, public WhiteDwarfs { // member functions - alphabetically double CalculateHeliumAbundanceCoreOnPhase() const { return 1.0 - m_Metallicity; } double CalculateHeliumAbundanceSurfaceOnPhase() const { return 1.0 - m_Metallicity; } - + double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; } double CalculateHydrogenAbundanceSurfaceOnPhase() const { return 0.0; } - + double CalculateLambdaDewi() const { return BaseStar::CalculateLambdaDewi(); } double CalculateLambdaNanjingStarTrack(const double p_Mass, const double p_Metallicity) const { return BaseStar::CalculateLambdaNanjingStarTrack(0.0, 0.0); } double CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLAR_POPULATION p_StellarPop) const { return CalculateLambdaNanjingStarTrack(0.0, 0.0); } @@ -77,7 +77,7 @@ class HeWD: virtual public BaseStar, public WhiteDwarfs { double CalculateLuminosityOnPhase() const { return CalculateLuminosityOnPhase_Static(m_Mass, m_Age, m_Metallicity); } // Use class member variables DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, - const bool p_IsHeRich); + const bool p_IsHeRich); DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, const double p_AccretorMassRate, const bool p_IsHeRich) { return CalculateMassAcceptanceRate(p_DonorMassRate, p_IsHeRich); } // Ignore the input accretion rate for WDs @@ -88,8 +88,8 @@ class HeWD: virtual public BaseStar, public WhiteDwarfs { std::tuple CalculateRadiusAndStellarTypeOnPhase() const { return BaseStar::CalculateRadiusAndStellarTypeOnPhase(); } STELLAR_TYPE EvolveToNextPhase(); // Allow evolution, either SN or Rejuvenation - bool IsSupernova() const { return m_IsSubChandrasekharTypeIa; } // Go supernova if mass and He shell are large enough; - bool ShouldEvolveOnPhase() const { return m_ShouldRejuvenate ? false : !IsSupernova(); } + bool IsSupernova() const { return m_IsSubChandrasekharTypeIa; } // Go supernova if mass and He shell are large enough; + bool ShouldEvolveOnPhase() const { return m_ShouldRejuvenate ? false : !IsSupernova(); } }; diff --git a/src/Log.cpp b/src/Log.cpp index ca4e3824c..7ebe659ba 100644 --- a/src/Log.cpp +++ b/src/Log.cpp @@ -20,11 +20,11 @@ Log* Log::Instance() { /* * Open the run details file inside the HDF5 container (if logging to HDF5 files) - * + * * Creates the file (group) inside the HDF5 container, and creates the columns * (datasets) required. Columns (datasets) are created for the preamble/stats - * information written to the run details file: - * + * information written to the run details file: + * * - COMPAS version (STRING: 'xx.yy.zz') * - run start time (STRING: formatted system time) * - run end time (STRING: formatted system time) @@ -32,8 +32,8 @@ Log* Log::Instance() { * - number of objects (stars/binaries) created (INT) * - CPU (clock) time (DOUBLE: seconds) * - Wall (elapsed) time (STRING: 'hhhh:mm:ss') - * - Actual random seed used (UNSIGNED LONG INT) * - * + * - Actual random seed used (UNSIGNED LONG INT) * + * * as well as columns (datasets) for each of the program options (whether the * use specified them on the commandline or not). * @@ -48,15 +48,15 @@ Log* Log::Instance() { * - 'USER_SUPPLIED' : indicates the user supplied a value, and the user-supplied value was used * - 'DEFAULT_USED' : indicates the user did not supply a value, and the COMPAS C++ default value was used * - 'CALCULATED' : the value was calculated by COMPAS - * + * * None of the run details columns have assocatied "units" (we could add them for the preamble/stats * datasets, but too hard to work them out for the program options - we could with a bit more coding, * but I don't really think we need them here (we've not had them in the run details file in the past * and it hasn't caused a problem)) - * - * + * + * * bool Log::OpenHDF5RunDetailsFile(const string p_Filename) - * + * * @param [IN] p_Filename The run details filename (group name for the HDF5 file) * @return Boolean status - true = created ok; false = open failed */ @@ -66,12 +66,12 @@ bool Log::OpenHDF5RunDetailsFile(const string p_Filename) { bool ok = true; // return value - // The run details file is not treated as a standard logfile, so we need to + // The run details file is not treated as a standard logfile, so we need to // open it manually rather than have Log::StandardLogFileDetails() open it. // // Note that the HDF5 run details file columns (datasets) have the "units" attribute // set to '-' for all columns (datasets) - the contents of the run details file are - // just a reflection of the values supplied by the user (or calculated by COMPAS), + // just a reflection of the values supplied by the user (or calculated by COMPAS), // so no units. m_Run_Details_H5_File.fileId = m_HDF5ContainerId; // record run details HDF5 fileid - just the HDF5 container id @@ -85,7 +85,7 @@ bool Log::OpenHDF5RunDetailsFile(const string p_Filename) { (void)H5Gclose(h5GroupId); // close the group ok = false; // fail } - else { // group does not exist/is not open + else { // group does not exist/is not open h5GroupId = H5Gcreate(m_HDF5ContainerId, h5GroupName.c_str(), 0, H5P_DEFAULT, H5P_DEFAULT); // create the group if (h5GroupId < 0) { // group created ok? Squawk("ERROR: Error creating HDF5 group with name " + h5GroupName); // no - announce error @@ -109,7 +109,7 @@ bool Log::OpenHDF5RunDetailsFile(const string p_Filename) { // // We also create columns (datasets) for each of the program options. // - // All columns (datasets) in the HDF5 copy of the run details file have a + // All columns (datasets) in the HDF5 copy of the run details file have a // "shadow" column (dataset) that has '-Derivation' appended to its name. // (Not strictly necessary for the preamble/stats columns (datasets), but // included for consistency). @@ -144,7 +144,7 @@ bool Log::OpenHDF5RunDetailsFile(const string p_Filename) { Squawk("ERROR: Unknown property for HDF5 file with name " + m_HDF5ContainerName); // announce error ok = false; // fail } - + if (ok) { // have valid property h5DatasetName = std::get<0>(runDetails); // dataset name TYPENAME compasType = std::get<1>(runDetails); // COMPAS data type @@ -201,10 +201,10 @@ bool Log::OpenHDF5RunDetailsFile(const string p_Filename) { if (!ok) break; // something went wrong - fail } } - } + } } return ok; -} +} /* @@ -218,7 +218,7 @@ bool Log::OpenHDF5RunDetailsFile(const string p_Filename) { * be ignored. In this way logging and, in particular, debugging statements can be made throughout the code and activated * or deactivated at runtime by specifying the enabled classes and application logging and debugging levels (via commandline * parameters). - * + * * Any error here disables logging. * * @@ -316,7 +316,7 @@ void Log::Start(const string p_LogBasePathString, // (since we're now using c++17 should look at using fs rather than boost - after grace period to let users migrate to c++17) if (m_LogBasePathString != ".") { // CWD? - if (!boost::filesystem::exists(m_LogBasePathString)) { // no - user-specifed base path already exists? + if (!boost::filesystem::exists(m_LogBasePathString)) { // no - user-specifed base path already exists? std::tie(error, errStr, m_LogPathsCreated) = utils::CreateDirectories(m_LogBasePathString); // no - create directories if (error != ERROR::NONE) { // ok? DBG_WARN(ERR_MSG(ERROR::UNABLE_TO_CREATE_DIRECTORY) + " '" + m_LogBasePathString + "': Using CWD"); // no - show warning @@ -374,7 +374,7 @@ void Log::Start(const string p_LogBasePathString, Squawk("Logging disabled"); // show disabled warning m_Enabled = false; // disable } - + } catch (...) { // unhandled problem... Squawk("ERROR: Unable to create log file container with name " + dirName); // announce error @@ -396,7 +396,7 @@ void Log::Start(const string p_LogBasePathString, string fileExt = "." + LOGFILETYPEFileExt.at(OPTIONS->LogfileType()); // file extension for HDF5 files string h5Filename = m_LogBasePathString + "/" + m_LogContainerName + "/" + m_HDF5ContainerName + fileExt; // full filename with path, container, and extension ("/" works on Uni*x and Windows) m_HDF5ContainerId = H5Fcreate(h5Filename.c_str(), H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT); // create HDF5 container file - if (m_HDF5ContainerId < 0) { // created ok? + if (m_HDF5ContainerId < 0) { // created ok? Squawk("ERROR: Unable to create HDF5 container file with file name " + h5Filename); // no - announce error Squawk("Logging disabled"); // show disabled warning m_Enabled = false; // disable logging @@ -468,7 +468,7 @@ void Log::Start(const string p_LogBasePathString, /* * Stop logging * - * Closes any open logfiles + * Closes any open logfiles * * * void Stop() @@ -482,10 +482,10 @@ void Log::Start(const string p_LogBasePathString, */ void Log::Stop(std::tuple p_ObjectStats) { - if (m_Enabled) { // only need to do most of this if logging is enabled + if (m_Enabled) { // only need to do most of this if logging is enabled // get some run stats - + double cpuSeconds = (clock() - m_ClockStart) / (double) CLOCKS_PER_SEC; // stop CPU timer and calculate seconds m_WallEnd = std::chrono::system_clock::now(); // stop wall timer @@ -513,11 +513,11 @@ void Log::Stop(std::tuple p_ObjectStats) { // update run details file if (m_LogfileType == LOGFILETYPE::HDF5) { // logging to HDF5 files? - + bool ok = true; // status // yes - write run details data to HDF5 output file // update run HDF5 details file - + string h5DatasetName; string derivation; int dSetIdx; @@ -534,7 +534,7 @@ void Log::Stop(std::tuple p_ObjectStats) { Squawk("ERROR: Unknown property for HDF5 file with name " + m_HDF5ContainerName); // announce error ok = false; // fail } - + if (ok) { // have valid property h5DatasetName = std::get<0>(runDetails); // dataset name dSetIdx = idx * 2; @@ -549,30 +549,30 @@ void Log::Stop(std::tuple p_ObjectStats) { m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(ss.str()); // add write data to buffer ss.str(std::string());ss.clear(); break; - + case RUN_DETAILS_COLUMNS::RUN_END: // Run_End ss << std::ctime(&timeEnd); // get end time string m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(ss.str()); // add write data to buffer ss.str(std::string());ss.clear(); break; - + case RUN_DETAILS_COLUMNS::OBJECTS_REQUESTED: // Objects_Requested m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(objectsRequested); // add write data to buffer if (objectsRequested >= 0 && (int)OPTIONS->nObjectsToEvolve() == objectsRequested) derivation = "USER_SUPPLIED"; // should be right most of the time (not critical) break; - + case RUN_DETAILS_COLUMNS::OBJECTS_CREATED: // Objects_Created m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(objectsCreated); // add write data to buffer break; - + case RUN_DETAILS_COLUMNS::CLOCK_TIME: // Clock_Time (CPU seconds) m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(cpuSeconds); // add write data to buffer break; - + case RUN_DETAILS_COLUMNS::WALL_TIME: // Wall_Time (elapsed time: hhhh:mm:ss) m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(wallTime); // add write data to buffer break; - + case RUN_DETAILS_COLUMNS::ACTUAL_RANDOM_SEED: // Actual_Random_Seed m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(actualRandomSeed); // add write data to buffer break; @@ -616,8 +616,8 @@ void Log::Stop(std::tuple p_ObjectStats) { case TYPENAME::INT : m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stoi(strValue)); break; case TYPENAME::LONGINT : m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stol(strValue)); break; case TYPENAME::LONGLONGINT : m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stoll(strValue)); break; - case TYPENAME::ULONGINT : m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stoul(strValue)); break; - case TYPENAME::ULONGLONGINT: m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stoull(strValue)); break; + case TYPENAME::ULONGINT : m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stoul(strValue)); break; + case TYPENAME::ULONGLONGINT: m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stoull(strValue)); break; case TYPENAME::FLOAT : m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stof(strValue)); break; case TYPENAME::DOUBLE : m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stod(strValue)); break; case TYPENAME::LONGDOUBLE : m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(std::stold(strValue)); break; @@ -630,7 +630,7 @@ void Log::Stop(std::tuple p_ObjectStats) { else m_Run_Details_H5_File.dataSets[dSetIdx].buf.push_back(strValue == "TRUE" ? true : false); break; - + default: // invalid datatype Squawk("ERROR: Invalid datatype for HDF5 dataset with name " + h5DatasetName); // announce error ok = false; // fail @@ -653,7 +653,7 @@ void Log::Stop(std::tuple p_ObjectStats) { } if (!ok) break; // something went wrong } - } + } catch (const std::out_of_range& e) { // type conversion failed Squawk("ERROR: Error converting option value to correct datatype for HDF5 dataset with name " + h5DatasetName); // announce error ok = false; @@ -667,28 +667,28 @@ void Log::Stop(std::tuple p_ObjectStats) { // update run details text file string filename = m_LogBasePathString + "/" + m_LogContainerName + "/" + RUN_DETAILS_FILE_NAME; // run details filename with container name - try { + try { m_RunDetailsFile << utils::SplashScreen(false) << std::endl; // write splash string with version number to file - // record start time and whether evolving single stars or binaries + // record start time and whether evolving single stars or binaries if (OPTIONS->EvolutionMode() == EVOLUTION_MODE::SSE) m_RunDetailsFile << "Start generating stars at " << std::ctime(&timeStart) << std::endl; else m_RunDetailsFile << "Start generating binaries at " << std::ctime(&timeStart) << std::endl; - // record end time and whether evolving single stars or binaries + // record end time and whether evolving single stars or binaries if (OPTIONS->EvolutionMode() == EVOLUTION_MODE::SSE) { m_RunDetailsFile << "Generated " << std::to_string(objectsCreated) << " of " << (objectsRequested < 0 ? "" : std::to_string(objectsRequested)) << " stars requested" << std::endl; m_RunDetailsFile << "\nEnd generating stars at " << std::ctime(&timeEnd) << std::endl; } else { m_RunDetailsFile << "Generated " << std::to_string(objectsCreated) << " of " << (objectsRequested < 0 ? "" : std::to_string(objectsRequested)) << " binaries requested" << std::endl; - m_RunDetailsFile << "\nEnd generating binaries at " << std::ctime(&timeEnd) << std::endl; + m_RunDetailsFile << "\nEnd generating binaries at " << std::ctime(&timeEnd) << std::endl; } m_RunDetailsFile << "Clock time = " << cpuSeconds << " CPU seconds" << std::endl; // record cpu seconds - m_RunDetailsFile << "Wall time = " << wallTime << " (hhhh:mm:ss)" << std::endl; // wall time + m_RunDetailsFile << "Wall time = " << wallTime << " (hhhh:mm:ss)" << std::endl; // wall time // add commandline options // moved this code here from Options.cpp @@ -788,7 +788,7 @@ void Log::Stop(std::tuple p_ObjectStats) { * - TXT : the file extension is "txt" (Plain text file), and the delimiter is the SPACE character (" ") * - HDF5: the file extension is "h5" (Hierarchical Data Format, version 5). HDF5 files are not delimited. * - * + * * int Open(const string p_LogFileName, const bool p_Append, const bool p_TimeStamp, const bool p_Label, const LOGFILE p_StandardLogfile) * * @param [IN] p_LogFileName The name of the logfile to be created and opened - filename only - path, prefix and extension are added @@ -802,9 +802,9 @@ void Log::Stop(std::tuple p_ObjectStats) { int Log::Open(const string p_LogFileName, const bool p_Append, const bool p_Timestamp, const bool p_Label, const LOGFILE p_StandardLogfile) { bool ok = true; - int id = -1; + int id = -1; - if (m_Enabled) { // logging enabled? + if (m_Enabled) { // logging enabled? string basename = m_LogBasePathString + "/" + m_LogContainerName + "/" + m_LogNamePrefix + p_LogFileName; // base filename with path and container ("/" works on Uni*x and Windows) string fileext = LOGFILETYPEFileExt.at(OPTIONS->LogfileType()); // file extension @@ -825,7 +825,7 @@ int Log::Open(const string p_LogFileName, const bool p_Append, const bool p_Time // not already contain a group corresponding to this logfile - that is created here. // // for detailed output files (SSE and BSE) the containing HDF5 file is a separate - // HDF5 file for each detailed output file. Detailed output HDF5 files do not + // HDF5 file for each detailed output file. Detailed output HDF5 files do not // contain groups - the datasets (columns) are written directly to the file. hid_t h5FileId = -1; // HDF5 file id @@ -849,7 +849,7 @@ int Log::Open(const string p_LogFileName, const bool p_Append, const bool p_Time ok = false; // fail } } - else { // yes - group exists and is open + else { // yes - group exists and is open if (p_Append) { // that's ok if we're appending - are we appending? if (H5Gclose(h5GroupId) < 0) { // group closed ok? Squawk("ERROR: Error closing HDF5 group with name " + h5GroupName); // no - announce error @@ -874,7 +874,7 @@ int Log::Open(const string p_LogFileName, const bool p_Append, const bool p_Time // record attributes // find an empty slot in m_Logfiles vector if there is one // this way is a bit slower for opening logfiles, but faster for writing to them - id = -1; + id = -1; for(unsigned int index = 0; index < m_Logfiles.size(); index++) { if (!m_Logfiles[index].active) { // empty slot? id = index; // yes - use it @@ -917,7 +917,7 @@ int Log::Open(const string p_LogFileName, const bool p_Append, const bool p_Time attr.active = false; // for now... m_Logfiles.push_back(std::move(attr)); // append to vector } - + try { m_Logfiles[id].file.open(filename, std::ios::out | std::ios::app); // create fs log file m_Logfiles[id].file.exceptions(std::ofstream::failbit | std::ofstream::badbit); // enable exceptions on log file @@ -1015,7 +1015,7 @@ bool Log::Close_(const int p_LogfileId) { } // try closing the group - even if closing datasets failed - if (m_Logfiles[p_LogfileId].logfiletype != LOGFILE::SSE_DETAILED_OUTPUT && + if (m_Logfiles[p_LogfileId].logfiletype != LOGFILE::SSE_DETAILED_OUTPUT && m_Logfiles[p_LogfileId].logfiletype != LOGFILE::BSE_DETAILED_OUTPUT) { // detailed output file? if (m_Logfiles[p_LogfileId].h5File.groupId >= 0) { // no - HDF5 group open? @@ -1079,7 +1079,7 @@ void Log::Squawk(const string p_SquawkStr) { * @return Boolean indicating whether record should be logged/debug string should be written */ bool Log::DoIt(const string p_Class, const int p_Level, const STR_VECTOR p_EnabledClasses, const int p_EnabledLevel) { - + bool doIt = (p_Level <= p_EnabledLevel); // first check level if (doIt) { // now check class @@ -1173,10 +1173,10 @@ bool Log::Write(const int p_LogfileId, const string p_LogClass, const int p_LogL * Disable the specified log file if errors occur. * * - * bool Write(const id p_LogfileId, - * const string p_LogClass, - * const int p_LogLevel, - * const std::vector p_LogRecordValues, + * bool Write(const id p_LogfileId, + * const string p_LogClass, + * const int p_LogLevel, + * const std::vector p_LogRecordValues, * const bool p_Flush) * * @param [IN] p_LogfileId The id of the log file to which the log string should be written @@ -1185,10 +1185,10 @@ bool Log::Write(const int p_LogfileId, const string p_LogClass, const int p_LogL * @param [IN] p_LogRecordValues Vector of COMPAS_VARIABLE values to be written * @return Boolean indicating whether record was written successfully */ -bool Log::Write(const int p_LogfileId, - const string p_LogClass, - const int p_LogLevel, - const std::vector p_LogRecordValues, +bool Log::Write(const int p_LogfileId, + const string p_LogClass, + const int p_LogLevel, + const std::vector p_LogRecordValues, const bool p_Flush) { bool result = false; @@ -1207,7 +1207,7 @@ bool Log::Write(const int p_LogfileId, /* * Write a string record to specified log file with no class or level check - internal use only * Used for CSV, TSV, and TXT files - * + * * Disable the specified log file if errors occur. * * @@ -1246,9 +1246,9 @@ bool Log::Write_(const int p_LogfileId, const string p_LogStr) { /* * Write data from buffer to HDF5 files - * + * * This is where the real work is done for HDF5 files - * + * * Note that the first parameter, p_H5file, will be modified * (the contents of the write buf will be cleared after writing) * @@ -1264,7 +1264,7 @@ bool Log::WriteHDF5_(h5AttrT& p_H5file, const string p_H5filename, const size_t herr_t ok = 0; // return value - // setup write: + // setup write: // - create dataspaces // - extend dataset // - setup hyperslab @@ -1282,7 +1282,7 @@ bool Log::WriteHDF5_(h5AttrT& p_H5file, const string p_H5filename, const size_t Squawk("ERROR: Unable to allocate memory to write to HDF5 group for log file " + p_H5filename); // no - announce error ok = -1; // fail } - else { // yes - memory dataspace created ok + else { // yes - memory dataspace created ok h5Dims[0] = dSetCurrentSize + bufSize; // new size for dataset if ((ok = H5Dset_extent(dSet, h5Dims)) < 0) { // extend dataset - ok? Squawk("ERROR: Unable to extend file to write to HDF5 group for log file " + p_H5filename); // no - announce error @@ -1304,7 +1304,7 @@ bool Log::WriteHDF5_(h5AttrT& p_H5file, const string p_H5filename, const size_t if ((ok = H5Sselect_hyperslab(h5FSpace, H5S_SELECT_SET, h5Start, NULL, h5Count, NULL)) < 0) { // hyperslab setup ok? Squawk("ERROR: Unable to set location to write to HDF5 group for log file " + p_H5filename); // no - announce error } - } + } } } @@ -1346,7 +1346,7 @@ bool Log::WriteHDF5_(h5AttrT& p_H5file, const string p_H5filename, const size_t case TYPENAME::SN_EVENT : v = static_cast(boost::get(p_H5file.dataSets[p_DataSetIdx].buf[i])); break; case TYPENAME::SN_STATE : v = static_cast(boost::get(p_H5file.dataSets[p_DataSetIdx].buf[i])); break; case TYPENAME::EVOLUTION_STATUS: v = static_cast(boost::get(p_H5file.dataSets[p_DataSetIdx].buf[i])); break; - default: + default: Squawk("ERROR: Unable to format data to write to HDF5 group for log file " + p_H5filename); // announce error ok = -1; // fail } @@ -1418,7 +1418,7 @@ bool Log::WriteHDF5_(h5AttrT& p_H5file, const string p_H5filename, const size_t string v = p_H5file.dataSets[p_DataSetIdx].dataType == TYPENAME::BOOL // bool variable (printing as string "TRUE" or "FALSE")? ? boost::get(p_H5file.dataSets[p_DataSetIdx].buf[i]) ? string("TRUE") : string("FALSE") // yes : boost::get(p_H5file.dataSets[p_DataSetIdx].buf[i]); // no, regular STRING variable - + buf[i] = fixedLength ? utils::PadTrailingSpaces(v, elemLen) : v; } COMPAS_VARIABLE_VECTOR().swap(p_H5file.dataSets[p_DataSetIdx].buf); @@ -1443,7 +1443,7 @@ bool Log::WriteHDF5_(h5AttrT& p_H5file, const string p_H5filename, const size_t } ok = H5Dwrite(dSet, dType, h5Dspace, h5FSpace, H5P_DEFAULT, (const void *)cBuf); // write the data - + // release allocated memory for (size_t i = 0; i < bufSize; i++) { delete[] cBuf[i]; @@ -1465,7 +1465,7 @@ bool Log::WriteHDF5_(h5AttrT& p_H5file, const string p_H5filename, const size_t /* * Write a multi-value record to specified log file with no class or level check - internal use only * Used for HDF5 files - * + * * This is where (most of) the work is done * * Disable the specified log file if errors occur. @@ -1506,17 +1506,17 @@ bool Log::Write_(const int p_LogfileId, const std::vector p_Log } if ((m_Logfiles[p_LogfileId].h5File.dataSets[idx].buf.size() >= m_Logfiles[p_LogfileId].h5File.IOBufSize) || p_Flush) { // need to write? - ok = WriteHDF5_(m_Logfiles[p_LogfileId].h5File, m_Logfiles[p_LogfileId].name, idx); // do the write + ok = WriteHDF5_(m_Logfiles[p_LogfileId].h5File, m_Logfiles[p_LogfileId].name, idx); // do the write } } } } } } - else { // logging not enabled or not active + else { // logging not enabled or not active // construct a log record and display it on stderr - string logRecord = ""; + string logRecord = ""; for (auto &value : p_LogRecordValues) { string valueStr = boost::apply_visitor(FormatVariantValueDefault(), value); // format value @@ -2021,7 +2021,7 @@ std::tuple Log::GetStandardLogfileKey(const int p_FileId) { * to support writing to the (new) SSE Supernova logfile (it was written specifically for that * purpose, but was left general enough to retrieve the properties and format vector for any * of the logfiles). - * + * * The reason this function is needed is that because we (currently) save the state of a * single star in SSE and revert to the previous state if we find we've evolved too far and * possibly missed something interesting, we can't write a record to the SSE supernova file @@ -2031,19 +2031,19 @@ std::tuple Log::GetStandardLogfileKey(const int p_FileId) { * records other than the header if we never write to them), so even if we could unwind the * write, we might have a file created that may never have data records written to it (we * could specifically check for that and delete the file, but that's a little inelegant - - * better to not create the file in the first place). So, this function will enable me to - * format a SSE Supernova record at the right time, but delay writing it to after we decide + * better to not create the file in the first place). So, this function will enable me to + * format a SSE Supernova record at the right time, but delay writing it to after we decide * that we'll accept the current state and not revert. - * + * * With hindsight, Log::StandardLogFileDetails() should probably have been written with this * part separated out. Ideally Log::StandardLogFileDetails() would call this function to get * these details - that way if we ever need to change how this is done we don't need to change * it in two places. Although, this function needs to be able to get the properties even if * the file is not open... Still, should be able to put the code in one place instead of two. - * But Log::StandardLogFileDetails() is, the way it was initially written, a bit too complex + * But Log::StandardLogFileDetails() is, the way it was initially written, a bit too complex * (this whole flexible printing code is a complex beast - unfortunately it has to be to get * it to work) and this code is a bit too intertwined to easily and quickly disentangle it from - * Log::StandardLogFileDetails() - that's probably a good code cleanup to do some time in the + * Log::StandardLogFileDetails() - that's probably a good code cleanup to do some time in the * future, but for now this will have to suffice. * * @@ -2111,7 +2111,7 @@ std::tuple Log::GetStandardLogFile annotations = m_BSE_SysParms_Notes; // logfile annotations // check whether to add program option columns to BSE_SYSTEM_PARAMETERS file and add them if required - if ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::ALWAYS) || // always add option columns? + if ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::ALWAYS) || // always add option columns? ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::GRID) && // add for grids? (!OPTIONS->GridFilename().empty() || OPTIONS->CommandLineGrid()))) { // have grid file or ranges/sets? // yes - add program options @@ -2156,7 +2156,7 @@ std::tuple Log::GetStandardLogFile annotations = m_SSE_SysParms_Notes; // logfile annotations // check whether to add program option columns to SSE_SYSTEM_PARAMETERS file and add them if required - if ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::ALWAYS) || // always add option columns? + if ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::ALWAYS) || // always add option columns? ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::GRID) && // add for grids? (!OPTIONS->GridFilename().empty() || OPTIONS->CommandLineGrid()))) { // have grid file or ranges/sets? // yes - add program options @@ -2185,7 +2185,7 @@ std::tuple Log::GetStandardLogFile for (auto &property : recordProperties) { // for each property to be included in the log record ANY_PROPERTY_TYPE propertyType = boost::apply_visitor(VariantPropertyType(), property); // property type - + string fmtStr = ""; switch (propertyType) { // which property type? @@ -2258,8 +2258,8 @@ std::tuple Log::GetStandardLogFile /* * Determine HDF5 datatype from COMPAS datatype - * - * + * + * * hid_t Log::GetHDF5DataType(const TYPENAME p_COMPASdatatype, const int p_FieldWidth) * * @param [IN] p_COMPASdatatype COMPAS datatype @@ -2269,7 +2269,7 @@ std::tuple Log::GetStandardLogFile * @return HDF5 datatype */ hid_t Log::GetHDF5DataType(const TYPENAME p_COMPASdatatype, const int p_FieldWidth, const STRING_QUALIFIER p_StringQualifier) { - + hid_t h5DataType = -1; // HDF5 datatype - return value switch (p_COMPASdatatype) { // which COMPAS datatype? @@ -2319,8 +2319,8 @@ hid_t Log::GetHDF5DataType(const TYPENAME p_COMPASdatatype, const int p_FieldWid /* * Create a dataset subordinate to a group in an HDF5 file - * - * + * + * * hid_t Log::CreateHDF5Dataset(const string p_Filename, const hid_t p_GroupId, const string p_DatasetName, const hid_t p_H5DataType, const string p_UnitsStr, const size_t p_HDF5ChunkSize) * * @param [IN] p_Filename The filename of the HDF5 file (for error logging) @@ -2350,13 +2350,13 @@ hid_t Log::CreateHDF5Dataset(const string p_Filename, const hid_t p_GroupId, con } else { // yes - chunk size set ok // create HDF5 dataset - string h5DsetName = p_DatasetName; // dataset name + string h5DsetName = p_DatasetName; // dataset name h5DsetName = utils::trim(h5DsetName); // remove leading and trailing blanks h5Dset = H5Dcreate(p_GroupId, // create the dataset in group p_GroupId h5DsetName.c_str(), // dataset name p_H5DataType, // datatype h5Dspace, // dataspace - H5P_DEFAULT, // dataset link property list + H5P_DEFAULT, // dataset link property list h5CPlist, // dataset creation property list H5P_DEFAULT); // dataset access property list if (h5Dset < 0) { // dataset created ok? @@ -2380,7 +2380,7 @@ hid_t Log::CreateHDF5Dataset(const string p_Filename, const hid_t p_GroupId, con h5Dset = -1; // fail } } - (void)H5Aclose(h5Attr); // close attribute + (void)H5Aclose(h5Attr); // close attribute } } (void)H5Sclose(h5CPlist); // close creation property list @@ -2446,7 +2446,7 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin fileDetails.recordProperties = m_BSE_DCO_Rec; fileDetails.annotations = m_BSE_DCO_Notes; break; - + case LOGFILE::BSE_PULSAR_EVOLUTION: // BSE_PULSAR_EVOLUTION fileDetails.filename = OPTIONS->LogfilePulsarEvolution(); fileDetails.recordTypes = OPTIONS->LogfilePulsarEvolutionRecordTypes(); @@ -2489,7 +2489,7 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin fileDetails.annotations = m_BSE_SysParms_Notes; // check whether to add program option columns to BSE_SYSTEM_PARAMETERS file and add them if required - if ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::ALWAYS) || // always add option columns? + if ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::ALWAYS) || // always add option columns? ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::GRID) && // add for grids? (!OPTIONS->GridFilename().empty() || OPTIONS->CommandLineGrid()))) { // have grid file or ranges/sets? // yes - add program options @@ -2539,7 +2539,7 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin fileDetails.annotations = m_SSE_SysParms_Notes; // check whether to add program option columns to SSE_SYSTEM_PARAMETERS file and add them if required - if ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::ALWAYS) || // always add option columns? + if ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::ALWAYS) || // always add option columns? ((OPTIONS->AddOptionsToSysParms() == ADD_OPTIONS_TO_SYSPARMS::GRID) && // add for grids? (!OPTIONS->GridFilename().empty() || OPTIONS->CommandLineGrid()))) { // have grid file or ranges/sets? // yes - add program options @@ -2608,8 +2608,8 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin } } break; - default: // unknown logfile - fileDetails.filename = ""; + default: // unknown logfile + fileDetails.filename = ""; fileDetails.recordProperties = {}; Squawk(ERR_MSG(ERROR::UNKNOWN_LOGFILE) + ": Logging disabled for this file"); // announce error } @@ -2633,14 +2633,14 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin // check if file already exists - if it does, add a version number before creating new file // no append for detailed output files, so no need to open existing files for appending - + int version = 0; // logfile version number if required - start at 1 while (utils::FileExists(h5Filename)) { // file already exists? h5Filename = m_LogBasePathString + "/" + m_LogContainerName + "/" + fileDetails.filename + "_" + std::to_string(++version) + fileExt; // yes - add a version number and generate new filename } m_HDF5DetailedId = H5Fcreate(h5Filename.c_str(), H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT); // create HDF5 detailed file - if (m_HDF5DetailedId < 0) { // created ok? + if (m_HDF5DetailedId < 0) { // created ok? Squawk("ERROR: Unable to create HDF5 detailed file with file name " + h5Filename); // no - announce error Squawk("Logging disabled"); // show disabled warning m_Enabled = false; // disable logging @@ -2796,7 +2796,7 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin // ( i) the star switching - 1 = primary, 2 = secondary // ( ii) the steller type from which the star is switching // (iii) the stellar type to which the star is switching - // ( iv) boolean flag indicating whether a merger occurred + // ( iv) boolean flag indicating whether a merger occurred // // These are hard-coded here rather than in the *_PROPERTY_DETAIL maps in // constants.h so that they will always be present in the switch file - @@ -2845,7 +2845,7 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin // except the switch files (BSE_SWITCH_LOG and SSE_SWITCH_LOG). // // This is hard-coded here rather than in the *_PROPERTY_DETAIL maps in constants.h - // so that it will always be present in the logfile - this way users can't add or + // so that it will always be present in the logfile - this way users can't add or // remove it at runtime via the logfile-definitions option. if (p_Logfile != LOGFILE::BSE_SWITCH_LOG && p_Logfile != LOGFILE::SSE_SWITCH_LOG) { // BSE Switch Log or SSE Switch Log @@ -2867,13 +2867,13 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin // - write header/units/types strings for CSV/TSV/TXT files if (OPTIONS->LogfileType() == LOGFILETYPE::HDF5) { // logging to HDF5 files? for (size_t idx = 0; idx < fileDetails.hdrStrings.size(); idx++) { // for each property - - size_t chunkSize = OPTIONS->nObjectsToEvolve() < HDF5_MINIMUM_CHUNK_SIZE || - p_Logfile == LOGFILE::SSE_DETAILED_OUTPUT || + + size_t chunkSize = OPTIONS->nObjectsToEvolve() < HDF5_MINIMUM_CHUNK_SIZE || + p_Logfile == LOGFILE::SSE_DETAILED_OUTPUT || p_Logfile == LOGFILE::BSE_DETAILED_OUTPUT ? HDF5_MINIMUM_CHUNK_SIZE : OPTIONS->HDF5ChunkSize(); // chunk size size_t IOBufSize = OPTIONS->HDF5BufferSize() * chunkSize; // IO buffer size - + m_Logfiles[fileDetails.id].h5File.chunkSize = chunkSize; // record chunk size for file m_Logfiles[fileDetails.id].h5File.IOBufSize = IOBufSize; // record IO buf size for file @@ -2891,16 +2891,16 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin m_Logfiles[fileDetails.id].h5File.dataSets[idx].h5DataType = h5DataType; // record HDF5 data type // create HDF5 dataset - hid_t h5Dset = CreateHDF5Dataset(fileDetails.filename, - m_Logfiles[fileDetails.id].h5File.groupId, - utils::trim(fileDetails.hdrStrings[idx]), - h5DataType, + hid_t h5Dset = CreateHDF5Dataset(fileDetails.filename, + m_Logfiles[fileDetails.id].h5File.groupId, + utils::trim(fileDetails.hdrStrings[idx]), + h5DataType, utils::trim(fileDetails.unitsStrings[idx]), chunkSize); if (h5Dset < 0) { // created ok? ok = false; // no - fail } - + m_Logfiles[fileDetails.id].h5File.dataSets[idx].dataSetId = h5Dset; // record dataset id } } @@ -2927,7 +2927,7 @@ LogfileDetailsT Log::StandardLogFileDetails(const LOGFILE p_Logfile, const strin if (!(ok = Put_(fileDetails.id, fullUnitsStr))) { // units string written ok? Squawk(ERR_MSG(ERROR::FILE_WRITE_ERROR) + ": Units String"); // no - show warning } - else { + else { if (!(ok = Put_(fileDetails.id, fullHdrsStr))) { // header string written ok? Squawk(ERR_MSG(ERROR::FILE_WRITE_ERROR) + ": Header String"); // no - show warning } @@ -3110,7 +3110,7 @@ void Log::PrintLogfileRecordDetails(const ANY_PROPERTY_VECTOR& p_LogfileRecord, * const BOOL_VECTOR p_AddNotes, * const BOOL_VECTOR p_SubtractNotes) * - * + * * @param [IN] p_Logfile the logfile for which the record specifier should be updated * @param [IN] p_UseDefaultProps indicates whether the default properties of the given logfile should be * be used as the base set of properties. If p_UseDefaultProps is true, @@ -3224,10 +3224,10 @@ void Log::UpdateLogfileRecordSpecs(const LOGFILE p_Logfile, case ANY_PROPERTY_TYPE::T_COMPANION_PROPERTY: isSubtract = boost::get(baseProperty) == boost::get(subtractProperty); break; // STAR_1_PROPERTY case ANY_PROPERTY_TYPE::T_BINARY_PROPERTY : isSubtract = boost::get(baseProperty) == boost::get(subtractProperty); break; // BINARY_PROPERTY case ANY_PROPERTY_TYPE::T_PROGRAM_OPTION : { // PROGRAM_OPTION - + PROGRAM_OPTION thisBaseProperty = boost::get(baseProperty); // base property PROGRAM_OPTION thisSubtractProperty = boost::get(subtractProperty); // property to be subtracted - + isSubtract = thisBaseProperty == thisSubtractProperty; // should subtract (nominally)? if (isSubtract && thisBaseProperty == PROGRAM_OPTION::NOTES) { // subtracting PROGRAM_OPTION::NOTES? @@ -3265,11 +3265,11 @@ void Log::UpdateLogfileRecordSpecs(const LOGFILE p_Logfile, case ANY_PROPERTY_TYPE::T_SUPERNOVA_PROPERTY: isAlready = boost::get(addProperty) == boost::get(newProperty); break; // SUPERNOVA_PROPERTY case ANY_PROPERTY_TYPE::T_COMPANION_PROPERTY: isAlready = boost::get(addProperty) == boost::get(newProperty); break; // STAR_1_PROPERTY case ANY_PROPERTY_TYPE::T_BINARY_PROPERTY : isAlready = boost::get(addProperty) == boost::get(newProperty); break; // BINARY_PROPERTY - case ANY_PROPERTY_TYPE::T_PROGRAM_OPTION : { // PROGRAM_OPTION - + case ANY_PROPERTY_TYPE::T_PROGRAM_OPTION : { // PROGRAM_OPTION + PROGRAM_OPTION thisNewProperty = boost::get(newProperty); // new property PROGRAM_OPTION thisAddProperty = boost::get(addProperty); // property to be added - + isAlready = thisNewProperty == thisAddProperty; // should add (nominally)? if (isAlready && thisNewProperty == PROGRAM_OPTION::NOTES) { // adding PROGRAM_OPTION::NOTES? @@ -3363,7 +3363,7 @@ void Log::UpdateLogfileRecordSpecs(const LOGFILE p_Logfile, * ::= [ ] * * ::= "::" [ ] - * + * * ::= " " | EOL * * ::= "," | @@ -3535,7 +3535,7 @@ bool Log::UpdateAllLogfileRecordSpecs() { currentLogfileType = std::get<4>(LOGFILE_DESCRIPTOR.at(currentLogfile)); // and type (STELLAR or BINARY) addProps = {}; // start with empty set of properties to be added subtractProps = {}; // start with empty set of properties to be subtracted - addNotes = BOOL_VECTOR(OPTIONS->NotesHdrs().size(), false); // start with no annotations to be added + addNotes = BOOL_VECTOR(OPTIONS->NotesHdrs().size(), false); // start with no annotations to be added subtractNotes = BOOL_VECTOR(OPTIONS->NotesHdrs().size(), false); // start with no annotations to be subtracted expecting = TOKEN_TYPE::ASSIGN; // now expecting assignment operator {"=", "-=", "+="} @@ -3747,7 +3747,7 @@ bool Log::UpdateAllLogfileRecordSpecs() { } else if (propNameStr[5] == '[' && propNameStr[propNameStr.length() - 1] == ']') { // possibly - indexed? size_t idxLen = propNameStr.length() - 7; // possibly... - if (idxLen > 0) { // length of index value > 0? + if (idxLen > 0) { // length of index value > 0? // indexed - check for valid index try { size_t lastChar; // for conversion @@ -3780,7 +3780,7 @@ bool Log::UpdateAllLogfileRecordSpecs() { error = ERROR::EXPECTED_POSITIVE_INTEGER; // set error - expected an integer index > 0 errorPos += 22; // caret position for error } - } + } } } diff --git a/src/Log.h b/src/Log.h index 3ca691105..5fbbbebd7 100755 --- a/src/Log.h +++ b/src/Log.h @@ -70,19 +70,19 @@ using std::string; * some circumstances). * * JR, September 2019 - * - * - * + * + * + * * HDF5 File Support * ================= - * + * * Further note: support for HDF5 was added to the existing log functionality, which was written * assuming separate files for each of the log file (system parameters, DCOs, SNe, etc.). That * existing functionality has been maintained, and HDF5 added as an option available to the user. * HDF5 support in the code has been shoe-horned into the existing functionality, so although * there is only a single HDF5 output file (except for detailed output files), each of the groups - * within the HDF5 file is treated in the logging code as a separate file - because that's how it - * was originally written, and we just use the existing infrastructure and fit the HDF5 support + * within the HDF5 file is treated in the logging code as a separate file - because that's how it + * was originally written, and we just use the existing infrastructure and fit the HDF5 support * into that framework. That makes the HDF5 logging code a bit awkward at times, but it works... * * @@ -93,7 +93,7 @@ using std::string; * is just a brain dump of my reading/research over the past week or so, and it could very well * be based on my misunderstanding of what I have read - so if anyone notices something I've * misunderstood please let me know so I can improve the code.) - * + * * * Data in HDF5 files are arranged in groups and datasets. * @@ -108,61 +108,61 @@ using std::string; * * Each dataset in an HDF5 files is broken into "chunks", where a chunk is defined as a number of dataset * entries ("chunks" and "chunking" are HDF5 terms). In COMPAS, all datasets are 1-d arrays (columns), so - * a chunk is defined as a number of values in the 1-d array (or column). Chunking can be enabled or not, - * but if chunking is not* enabled a dataset cannot be resized - so if chunking is not enabled the size of - * the dataset must be known at the time of creation, and the entire dataset created in one go. That doesn't - * work for COMPAS - even though we know the number of systems being evolved, we don't know the number of - * entries we'll have in each of the output log files (and therefore the HDF5 datasests if we're logging to + * a chunk is defined as a number of values in the 1-d array (or column). Chunking can be enabled or not, + * but if chunking is not* enabled a dataset cannot be resized - so if chunking is not enabled the size of + * the dataset must be known at the time of creation, and the entire dataset created in one go. That doesn't + * work for COMPAS - even though we know the number of systems being evolved, we don't know the number of + * entries we'll have in each of the output log files (and therefore the HDF5 datasests if we're logging to * HDF5 files). So, we enable chunking. - * + * * Chunking can improve, or degrade, performance depending upon how it is implemented - mostly related to * the chunk size chosen. - * + * * Datasets are stored inside an HDF5 file as a number of chunks - the chunks are not guaranteed (not even * likely) to be contiguous in the file or on the storage media (HDD, SSD etc.). Chunks are mapped/indexed - * in the HDF5 file using a B-tree, and the size of the B-tree, and therefore the traversal time, depends + * in the HDF5 file using a B-tree, and the size of the B-tree, and therefore the traversal time, depends * directly upon the number of chunks allocated for a dataset - so the access time for a chunk increases as * the number of chunks in the dataset increases. So many small chunks will degrade performance. - * + * * Chunks are the unit of IO for HDF5 files - all IO to HDF5 is performed on the basis of chunks. This means * that whenever dataset values are accessed (read or written (i.e. changed)), if the value is not already in * memory, the entire chunk containing the value must be read from, or written to, the storage media - even - * if the dataset value being accessed is the only value in the chunk. So few large chunks could cause + * if the dataset value being accessed is the only value in the chunk. So few large chunks could cause * empty, "wasted", space in the HDF5 files (at the end of datasets) - but they could also adversely affect * performance by causing unnecessary IO traffic (although probably not much in the way we access data in COMPAS * files). - * + * * HDF5 files implement a chunk cache on a per-dataset basis. The default size of the chunk cache is 1MB, and * its maximum size is 32MB. The purpose of the chunk cache is to reduce storage media IO - even with SSDs, * memory access is way faster than storage media access, so the more of the file data that can be kept in * memory and maipulated there, the better. Assuming the datatype of a particular dataset is DOUBLE, and * therefore consumes 8 bytes of storage space, at its maximum size the chunk cache for that dataset could hold - * 4,000,000 values - so a single chuck with 4,000,000 values, two chunks with 2,000,000 values, four with + * 4,000,000 values - so a single chuck with 4,000,000 values, two chunks with 2,000,000 values, four with * 1,000,000, and so on. Caching a single chunk defeats the purpose of the cache, so chunk sizes somewhat less * that 4,000,000 would be most appropriate if the chunk cache is to be utilised. Chunks too big to fit in the * cache simply bypass the cache and are read from, or written to, the storage media directly. - * + * * However, the chunk cache is really only useful for random access of the dataset. Most, if not all, of the * access in the COMPAS context (including post-creation analyses) is serial - the COMPAS code writes the * datasets from top to bottom, and later analyses (generally) read the datasets the same way. Caching the - * chunks for serial access just introduces overhead that costs memory (not much, to be sure: up to 32MB per + * chunks for serial access just introduces overhead that costs memory (not much, to be sure: up to 32MB per * open dataset), and degrades performance (albeit it a tiny bit). For that reason I disable the chunk cache * in COMPAS - so all IO to/from an HDF5 file in COMPAS is directly to/from the storage media. (To be clear, - * post-creation analysis software can disable the cache or not when accessing HDF5 files created by COMPAS - + * post-creation analysis software can disable the cache or not when accessing HDF5 files created by COMPAS - * disabling the cache here does not affect how other software accesses the files post-creation). - * + * * So many small chunks is not so good, and neither is just a few very large chunks. So what's the optimum * chunk size? It depends upon several things, and probably the most important of those are the final size * of the dataset and the access pattern. - * - * As mentioned above, we tend to access datasets serially, and generally from to to bottom, so larger chunks - * would seem appropriate, but not so large that we generate HDF5 files with lots of unused space. However, + * + * As mentioned above, we tend to access datasets serially, and generally from to to bottom, so larger chunks + * would seem appropriate, but not so large that we generate HDF5 files with lots of unused space. However, * disk space, even SSD space, is cheap, so trading space against performance is probably a good trade. - * + * * Also as mentioned above, we don't know the final size of (most of) the datasets when creating the HDF5 in * COMPAS - though we do know the number of systems being generated, which allows us to determine an upper * bound for at least some of the datasets (though not for groups such as BSE_RLOF). - * + * * One thing we need to keep in mind is that when we create the HDF5 file we write each dataset of a group * in the same iteration - this is analogous to writing a single record in (e.g.) a CSV log file (the HDF5 * group corresponds to the CSV file, and the HDF5 datasets in the group correspond to the columns in the @@ -170,34 +170,34 @@ using std::string; * output files) we do as many IOs to the HDF5 file as there are datasets in the group (columns in the file). * We are not bound to reading or writing a single chunk at a time - but we are bound to reading or writing * an integral multiple of whole chunks at a time. - * + * * We want to reduce the number of storage media accesses when writing (or later reading) the HDF5 files, so * larger chunk sizes are appropriate, but not so large that we create excessively large HDF5 files that have * lots of unused space (bearing in mind the trade-off mentioned above), especially when were evolving just * a few systems (rather than millions). - * + * * To really optimise IO performance for HDF5 files we'd choose chunk sizes that are close to multiples of * storage media block sizes, but I chose not to go down that rathole... - * + * * Based on everything written above, and some tests, I've chosen a default chunk size of 100,000 (dataset * entries) for all datasets (HDF5_DEFAULT_CHUNK_SIZE in constants.h). This clearly trades performance against * storage space. For the (current) default logfile record specifications, per-binary logfile space is about - * 1K bytes, so in the very worst case we will waste some space at the end of an HDF5 output file, but the - * performance gain, especially for post-creation analyses, is significant. Ensuring the number of systems + * 1K bytes, so in the very worst case we will waste some space at the end of an HDF5 output file, but the + * performance gain, especially for post-creation analyses, is significant. Ensuring the number of systems * evolved is an integral multiple of this fixed chunk size will minimise storage space waste. - * + * * I have added the program option --hdf5-chunk-size to allow users to specify the chunk size - the option * value defaults to HDF5_DEFAULT_CHUNK_SIZE. - * + * * I have chosen a minimum chunk size of 1000 (HDF5_MINIMUM_CHUNK_SIZE in constants.h). If the number of * systems being evolved is >= HDF5_MINIMUM_CHUNK_SIZE the chunk size used will be the value of the hdf5-chunk-size - * program option (either HDF5_DEFAULT_CHUNK_SIZE or a value specified by the user), but if the number of + * program option (either HDF5_DEFAULT_CHUNK_SIZE or a value specified by the user), but if the number of * systems being evolved is < HDF5_MINIMUM_CHUNK_SIZE the chunk size used will be HDF5_MINIMUM_CHUNK_SIZE. * This is just so we don't waste too much storage space when running small tests - and if they are that small - * performance is probably not going to be much of an issue, so no real trade-off against storage space. + * performance is probably not going to be much of an issue, so no real trade-off against storage space. * Detailed output files will use a chunk size of HDF5_MINIMUM_CHUNK_SIZE on the basis that detailed output * files generally don't have many thousands of records. - * + * * IO to HDF5 files is buffered in COMPAS - we buffer a number of chunks for each open dataset and write the * buffer to the file when the buffer fills (or a partial buffer upon file close if the buffer is not full). * This IO buffering is not HDF5 or filesystem buffering - this is a COMPAS-internal implementation to improve @@ -206,17 +206,17 @@ using std::string; * for all columns in the file, there are fewer IO operations to logfiles of type other than HDF5 (1 per system * being evolved) and so IO to logfiles of type other than HDF5 has a far less significant impact on performance * than does IO to HDF5 logfiles (where column (dataset) data is written individually). - * + * * The default HDF5 IO buffer size is defined in constants.h - HDF5_DEFAULT_IO_BUFFER_SIZE - and I have set it - * to just 1 - so by default no buffering happens. I have added the program option --hdf5-buffer-size to allow - * users to specify the buffer size - the option value defaults to HDF5_DEFAULT_IO_BUFFER_SIZE. The HDF5 IO + * to just 1 - so by default no buffering happens. I have added the program option --hdf5-buffer-size to allow + * users to specify the buffer size - the option value defaults to HDF5_DEFAULT_IO_BUFFER_SIZE. The HDF5 IO * buffer size is specified as a number of chunks. Users should increase the buffer size for better performance * if memory space allows it. - * + * * Users should bear in mind that the combination of HDF5 chunk size and HDF5 IO buffer size affect performance, * storage space, and memory usage - so they may need to experiment to find a balance that suits their needs. - * - * + * + * * String values stored in HDF5 files * ================================== * @@ -225,58 +225,58 @@ using std::string; * writes the strings as ASCII data (as can be seen with h5dump), but Python ignores that). Note that * this affects the values in datasets (and attributes) only, not the dataset names (or group names, * attribute names, etc.). - * + * * The only real impact of this is that if the byte array is printed by Python, it will be displayed * as (e.g.) "b'abcde'" rather than just "abcde". All operations on the data work as expected - it * is just the output that is impacted. If that's an issue, use .decode('utf-8') to decode the byte * array as a Python string variable. E.g. - * + * * str = h5File[Group][Dataset][0] * str is a byte array and print(str) will display (e.g.) b'abcde' - * + * * but - * + * * str = h5File[Group][Dataset][0].decode('utf-8') * str is a Python string and print(str) will display (e.g.) abcde * - * + * * JR, January 2021 - * - * - * + * + * + * * Annotations * =========== - * - * We have added functionality to allow users to annotate log files. The original motivation for + * + * We have added functionality to allow users to annotate log files. The original motivation for * annotation functionality was to enable users to describe the contents of custom grid files, but * annotations can be used for any reason. With the ability to annotate the log files, the users - * can indicate the origin of various input data - e.g. the user could indicate what IMF was used - * to draw initial mass values, or what distribution was used to draw mass ratio (q), etc. - * + * can indicate the origin of various input data - e.g. the user could indicate what IMF was used + * to draw initial mass values, or what distribution was used to draw mass ratio (q), etc. + * * Annotations are written to log files as columns of data (aka datasets in HDF5 files). * Annotations are specified via program options, and so can be specified on the command line as * well as in grid files. Because annotations are written to log files as columns of data, we * have provided functionality to provide headers for the columns, as well as the actual data * for the columns (the annotations). Two new program options are provided: - * - * --notes-hdrs + * + * --notes-hdrs * Allows users to specify header strings for annotation columns. Can only be specified on the * command line. Allows users to specify one or more annotation header strings: this is a vector * program option. Usage is: - * + * * --notes-hdrs headerstr1 headerstr2 headerstr3 ... headerstrN - * + * * Note that header strings are separated by a space character. There is no limit to the number * of header strings specified, and the number specified defines the number of annotations allowed. * - * + * * --notes * Allows users to specify annotations. Can be specified on the command line and in a grid file. * Allows users to specify one or more annotation strings: this is a vector program option. Usage * is: - * + * * --notes annotation1 annotation2 annotation3 ... annotationN - * + * * Note that annotation strings are separated by a space character. The number of annotation * strings is limited to the number of annotation header strings specified (via the --notes-hdrs * program option). If more annotation strings are specified than header strings, the excess @@ -286,30 +286,30 @@ using std::string; * default) - leaving an annotation string blank would be ambiguous (as to which annotation string * had been left blank), and specifying "" as an annotation string would be ambiguous (as to whether * the use wanted the annotation string to default, or just be a blank string). - * + * * Because this notation could become awkward, and to allow for default annotations, a shorthand * notation for vector program options has been provided (see notes in Options.h for details). - * + * * Usage using the shorthand notation is: - * + * * --notes-hdrs [headerstr1,headerstr2,headerstr3,...,headerStrN] - * + * * --notes [annotation1,annotation2,annotation3,...,annotationN] - * + * * Because the parameters are bounded by the brackets, and delimited by commas (and so are now * positional), users can omit specific annotations: - * + * * --notes [,,annotation3,,annotation5] - * + * * In the example above, annotations 1, 2, 4, and those beyond annotation 5 have been omitted. * Annotations 1, 2 & 4 will default - if they are specified in this manner on a grid line they will - * default to the correspodning annotation specified on the command line; if they are specified in - * this manner on the command line they will default to the COMPAS default annotation (the empty - * string). If the number of annotations expected, as defined by the number of annotation headers + * default to the correspodning annotation specified on the command line; if they are specified in + * this manner on the command line they will default to the COMPAS default annotation (the empty + * string). If the number of annotations expected, as defined by the number of annotation headers * specified via the --notes-hdrs program option is more than 5, then annotations beyond annotation 5 * (the last annotation actually specified by the user) will default in the same manner as described * above. - * + * * Note that any spaces in annotation header strings and annotation strings need to be enclosed in * quotes, or the shell parser will parse them as separate arguments. If the logfile type is * specified as TXT, then any spaces in annotation header strings and annotation strings need to @@ -317,24 +317,24 @@ using std::string; * need to have enclosing quotes propagated to the logfile, or the spaces will be interpreted as * delimiters in the logfile - in this cae, the user will need to add enclosing escaped quote * characters ('\"') before adding the enclosing quotes. e.g.: - * + * * --notes-hdrs [headerstr1,"\"header str 2\"",headerstr3,...,headerStrN] - * + * * (Note that this is true of all string program option values - spaces that are to be propagated to * TXT logfiles need to be enclosed in escaped quotes). - * - * + * + * * JR, October 2021 - * - * - * + * + * + * * Record Types * ============ - * + * * All standard logfiles, except the switch log files, now have a record type property (column). The record - * type property is of type LOGRECORDTYPE, which is a typedef for unsigned int (unsigned int allows up to + * type property is of type LOGRECORDTYPE, which is a typedef for unsigned int (unsigned int allows up to * 4294967296 different integer record types (per standard log file - that should be plenty...). - * + * * The record type property can be used to identify and filter records within a standard log file. The * functionality was introduced primarily to support different types of records in the detailed output files * (BSE and SSE), but could be useful for other log files. @@ -344,20 +344,20 @@ using std::string; * of the binary and constituent stars have been correctly and completely updated), and records written to the * file, perhaps mid-timestep, when the binary and/or constituent stars may not be self-consistent. Since the * record type property can take any value in the range 0..4294967295 there is scope to identify many different - * events or situations, in any of the standard log files. We may want, for example, to indicate that a detailed - * output record was written immediately prior to, or immediately following, a particular event or calculation. - * Or we may want to indicate that a supernovae record was written to the supernovae file prior to the SN event, - * and another record following the SN event. Or for the RLOF file we may want to differentiate between records + * events or situations, in any of the standard log files. We may want, for example, to indicate that a detailed + * output record was written immediately prior to, or immediately following, a particular event or calculation. + * Or we may want to indicate that a supernovae record was written to the supernovae file prior to the SN event, + * and another record following the SN event. Or for the RLOF file we may want to differentiate between records * written pre-MT and post_MT - the possibilities are (almost) limitless. - * - * Each standard log file has its own set of record types, as defined in constants.h (e.g. for the BSE Detailed + * + * Each standard log file has its own set of record types, as defined in constants.h (e.g. for the BSE Detailed * Output file, see 'enum class BSE_DETAILED_RECORD_TYPE' in constants.h). The idea is to use positive integers * to specify the record type, then record types can be ORed together to form a record type bitmap which can be * checked to determine which record type to print (set by program options). - * - * + * + * * JR, August 2022 - * + * */ @@ -464,7 +464,7 @@ class Log { m_HDF5DetailedId = -1; // no HDF5 detailed file open initially m_LogBasePathString = "."; // default log file base path string (CWD) m_LogPathsCreated = {}; // assume already exists (for now) - m_LogContainerName = DEFAULT_OUTPUT_CONTAINER_NAME; // default log file container name + m_LogContainerName = DEFAULT_OUTPUT_CONTAINER_NAME; // default log file container name m_LogNamePrefix = ""; // default log file name prefix m_LogfileType = DEFAULT_LOGFILE_TYPE; // default log file type m_LogLevel = 0; // default log level - log everything @@ -589,7 +589,7 @@ class Log { // logfile annotation specifications // - // these are just vectors of booleans, each with size equalling the number of annotations defined by the + // these are just vectors of booleans, each with size equalling the number of annotations defined by the // user-specified option '--notes-hdrs' (OPTIONS->NotesHdrs()) // // the boolean value indicates whether the respective annotation should be recorded in the @@ -621,7 +621,7 @@ class Log { BOOL_VECTOR m_SSE_Sys_Snapshot_Notes = BOOL_VECTOR(OPTIONS->NotesHdrs().size(), false); // the following block of variables support the BSE Switch Log file - + OBJECT_ID m_ObjectIdSwitching; // the object id of the Star object switching stellar type OBJECT_TYPE m_ObjectSwitchingType; // the object type of the Star object switching stellar type OBJECT_PERSISTENCE m_ObjectSwitchingPersistence; // the object persistence of the Star object switching stellar type @@ -648,9 +648,9 @@ class Log { BOOL_VECTOR logFileAnnotations; // logfile annotations vector }; - delayedWriteDetailsT m_SSESupernovae_DelayedWrite; // SSE_Supernovae delayed write details -*/ - + delayedWriteDetailsT m_SSESupernovae_DelayedWrite; // SSE_Supernovae delayed write details +*/ + // the following block of variables support the run details file std::ofstream m_RunDetailsFile; // run details file @@ -709,17 +709,17 @@ class Log { * * This function constructs a log record to be written to one of the standard COMPAS logfiles. * The record to be constructed is identified by the logfile to which it is to be written, and the data - * is assembled on-the-fly - except possibly for the parameter p_SpecifiedProperty (see below). The + * is assembled on-the-fly - except possibly for the parameter p_SpecifiedProperty (see below). The * star from which the data should be gathered is passed as a parameter, as is the logfile for which the * record should be constructed. The logfile record properties and format vector appropriate to the * specified logfile are also passed as parameters - this function does not need to retrieve/construct * them. * - * This function will, if the value of parameter p_UseSpecifiedValue is true, replace the value of any + * This function will, if the value of parameter p_UseSpecifiedValue is true, replace the value of any * property in the record matching the value of the parameter p_SpecifiedProperty with the value specified * by the parameter p_SpecifiedPropertyValue. (See the variant function GetLogStandardRecord() for an * explanation of why p_UseSpecifiedValue is required). - * + * * * template * std::tuple GetLogStandardRecord(const LOGFILE p_LogFile, @@ -742,7 +742,7 @@ class Log { * should be used to replace values retrieved from p_Star * @param [IN] p_SpecifiedProperty The property type of the value to be replaced by p_SpecifiedPropertyValue * @param [IN] p_SpecifiedPropertyValue The value of the property to be replaced - * + * * @return tuple containing * - String formatted as log file record - empty string if an error occurred * - Vector of property values - empty vector if an error occurred @@ -766,7 +766,7 @@ class Log { string logRecord = ""; // for CSV, TSV, TXT files: the record to be written to the log file COMPAS_VARIABLE_VECTOR logRecordValues = {}; // for HDF5 files: vector of values to be written - + // set delimiter based on logfile type string delimiter = ""; // default switch (OPTIONS->LogfileType()) { @@ -786,7 +786,7 @@ class Log { int index = 0; for (auto &property : p_RecordProperties) { // for each property to be included in the log record ANY_PROPERTY_TYPE thisPropertyType = boost::apply_visitor(VariantPropertyType(), property); // get property type for this property - + boost::variant fmtStr(p_FmtVector[index++]); // format string for this property // program option NOTES is special... @@ -871,7 +871,7 @@ class Log { if (ok) { - // if we are writing to the SSE Switch file we add two pre-defined columns to + // if we are writing to the SSE Switch file we add two pre-defined columns to // the log record. These are: // // ( i) the stellar type from which the star is switching @@ -931,7 +931,7 @@ class Log { // except the switch files (BSE_SWITCH_LOG and SSE_SWITCH_LOG). // // This is hard-coded here rather than in the *_PROPERTY_DETAIL maps in constants.h - // so that it will always be present in the logfile - this way users can't add or + // so that it will always be present in the logfile - this way users can't add or // remove it at runtime via the logfile-definitions option. if (p_LogFile != LOGFILE::BSE_SWITCH_LOG && p_LogFile != LOGFILE::SSE_SWITCH_LOG) { // switch file? @@ -950,18 +950,18 @@ class Log { /* - * This variant of GetLogStandardRecord() is here because I can't readily figure out how to - * have an optional parameter in a template function if not providing that optional parameter + * This variant of GetLogStandardRecord() is here because I can't readily figure out how to + * have an optional parameter in a template function if not providing that optional parameter * doesn't give the compiler enough context to deduce the type of the template type. - * + * * Clear as mud? Well, for the declaration of GetLogStandardRecord() above, template type T2 * can't be deduced if the parameter p_SpecifiedPropertyValue is not supplied - even if it * is given a default value in the parameter list. There must be a way of making it work, but - * I can't see it - and I don't want to spend any more time trying to figure it out. Maybe + * I can't see it - and I don't want to spend any more time trying to figure it out. Maybe * later. In the meantime, this method works. - * + * * See description of GetLogStandardRecord() for functionality and parameter descriptions. - * + * */ template std::tuple GetLogStandardRecord(const LOGFILE p_LogFile, @@ -971,14 +971,14 @@ class Log { const STR_VECTOR p_FmtVector, const BOOL_VECTOR p_Annotations) { - return GetLogStandardRecord(p_LogFile, + return GetLogStandardRecord(p_LogFile, p_RecordType, - p_Star, - p_RecordProperties, - p_FmtVector, + p_Star, + p_RecordProperties, + p_FmtVector, p_Annotations, - false, - ANY_STAR_PROPERTY::STELLAR_TYPE, + false, + ANY_STAR_PROPERTY::STELLAR_TYPE, STELLAR_TYPE::NONE); } @@ -1000,7 +1000,7 @@ class Log { * file status (open, closed) and contents, will be unchanged by this function. Similarly, if the * log level for this record indicates that the record should not be logged, no changes will be made * by this function. - * + * * * template * bool LogStandardRecord(const string p_LogClass, @@ -1057,7 +1057,7 @@ class Log { * constructed. Parameters are the same except for an additional parameter in each case: for * HDF5 files the extra parameter is a vector of values, and for non-HDF5 files the parameter * is a string. - * + * * See description of GetLogStandardRecord() for functionality and parameter descriptions. */ @@ -1174,7 +1174,7 @@ class Log { bool Write(const int p_LogfileId, const string p_LogClass, const int p_LogLevel, const string p_LogStr); bool Write(const int p_LogfileId, const string p_LogClass, const int p_LogLevel, const COMPAS_VARIABLE_VECTOR p_LogRecordValues, const bool p_Flush = false); - + bool Put(const int p_LogfileId, const string p_LogClass, const int p_LogLevel, const string p_LogStr); bool Put(const int p_LogfileId, const string p_LogClass, const int p_LogLevel, const COMPAS_VARIABLE_VECTOR p_LogRecordValues); @@ -1187,12 +1187,12 @@ class Log { void Say(const string p_SayClass, const int p_SayLevel, const string p_SayStr); - // SetSwitchParameters is called by Star::SwitchTo to set the parameters + // SetSwitchParameters is called by Star::SwitchTo to set the parameters // to be written to the Switch Log file void SetSwitchParameters(const OBJECT_ID p_ObjectIdSwitching, const OBJECT_TYPE p_ObjectSwitchingType, - const OBJECT_PERSISTENCE p_ObjectSwitchingPersistence, - const STELLAR_TYPE p_TypeSwitchingFrom, + const OBJECT_PERSISTENCE p_ObjectSwitchingPersistence, + const STELLAR_TYPE p_TypeSwitchingFrom, const STELLAR_TYPE p_TypeSwitchingTo) { m_ObjectIdSwitching = p_ObjectIdSwitching; // the object id of the Star object switching stellar type m_ObjectSwitchingType = p_ObjectSwitchingType; // the object type of the Star object switching stellar type @@ -1213,7 +1213,7 @@ class Log { std::tuple GetStandardLogFileRecordDetails(const LOGFILE p_Logfile); template - bool LogBSEDetailedOutput(const T* const p_Binary, + bool LogBSEDetailedOutput(const T* const p_Binary, const long int p_Id, const BSE_DETAILED_RECORD_TYPE p_RecordType) { return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::BSE_DETAILED_OUTPUT)), 0, LOGFILE::BSE_DETAILED_OUTPUT, static_cast(p_RecordType), p_Binary, "_" + std::to_string(abs(p_Id))); } @@ -1224,11 +1224,11 @@ class Log { template bool LogBSESupernovaDetails(const T* const p_Binary, const BSE_SN_RECORD_TYPE p_RecordType) { return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::BSE_SUPERNOVAE)), 0, LOGFILE::BSE_SUPERNOVAE, static_cast(p_RecordType), p_Binary); } - + template bool LogBSESwitchLog(const T* const p_Binary, const bool p_PrimarySwitching, const bool p_IsMerger) { m_PrimarySwitching = p_PrimarySwitching; - m_SwitchIsMerger = p_IsMerger; + m_SwitchIsMerger = p_IsMerger; return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::BSE_SWITCH_LOG)), 0, LOGFILE::BSE_SWITCH_LOG, 1U, p_Binary); } @@ -1237,9 +1237,9 @@ class Log { const BSE_SYSPARMS_RECORD_TYPE p_RecordType) { return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::BSE_SYSTEM_PARAMETERS)), 0, LOGFILE::BSE_SYSTEM_PARAMETERS, static_cast(p_RecordType), p_Binary); } template - bool LogBSESystemSnapshotLog(const T* const p_Binary, + bool LogBSESystemSnapshotLog(const T* const p_Binary, const BSE_SYSTEM_SNAPSHOT_RECORD_TYPE p_RecordType) { return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::BSE_SYSTEM_SNAPSHOT_LOG)), 0, LOGFILE::BSE_SYSTEM_SNAPSHOT_LOG, static_cast(p_RecordType), p_Binary); } - + template bool LogCommonEnvelope(const T* const p_Binary, const CE_RECORD_TYPE p_RecordType) { return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::BSE_COMMON_ENVELOPES)), 0, LOGFILE::BSE_COMMON_ENVELOPES, static_cast(p_RecordType), p_Binary); } @@ -1268,9 +1268,9 @@ class Log { const SSE_SYSPARMS_RECORD_TYPE p_RecordType) { return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::SSE_SYSTEM_PARAMETERS)), 0, LOGFILE::SSE_SYSTEM_PARAMETERS, static_cast(p_RecordType), p_Star); } template - bool LogSSESystemSnapshotLog(const T* const p_Star, + bool LogSSESystemSnapshotLog(const T* const p_Star, const SSE_SYSTEM_SNAPSHOT_RECORD_TYPE p_RecordType) { return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::SSE_SYSTEM_SNAPSHOT_LOG)), 0, LOGFILE::SSE_SYSTEM_SNAPSHOT_LOG, static_cast(p_RecordType), p_Star); } - + template bool LogSSEPulsarEvolutionParameters(const T* const p_Star, const SSE_PULSAR_RECORD_TYPE p_RecordType) { return LogStandardRecord(std::get<2>(LOGFILE_DESCRIPTOR.at(LOGFILE::SSE_PULSAR_EVOLUTION)), 0, LOGFILE::SSE_PULSAR_EVOLUTION, static_cast(p_RecordType), p_Star); } diff --git a/src/LogTypedefs.h b/src/LogTypedefs.h index cb99c198f..82bbfbf85 100644 --- a/src/LogTypedefs.h +++ b/src/LogTypedefs.h @@ -119,13 +119,13 @@ enum class STRING_QUALIFIER: int { NONE, FIXED_LENGTH, VARIABLE_LENGTH }; // !!! The STAR_PROPERTIES #define below defines the STELLAR variables allowed !!! // !!! for logfile record definition - if a property is not on the list it !!! // !!! cannot be selected for inclusion in a logfile via the !!! -// !!! --logfile-definitions option. !!! +// !!! --logfile-definitions option. !!! // !!! !!! // !!! The enum classes STAR_PROPERTY, BINARY_PROPERTY, and PROGRAM_OPTION !!! // !!! defined below defines the STELLAR and BINARY properties, and the !!! // !!! PROGRAM_OPTIONs allowed for logfile record definition - if a property is !!! // !!! not on those lists it cannot be selected for inclusion in a logfile via !!! -// !!! --logfile-definitions option. !!! +// !!! --logfile-definitions option. !!! // !!! !!! // !!! *NOTE* !!! // !!! The following enum classes and maps are not where header strings should !!! @@ -471,7 +471,7 @@ enum class ANY_STAR_PROPERTY: int { STAR_PROPERTIES }; // Symbolic names for variables of binary stars that can be selected for printing // BINARY_PROPERTY refers to a binary star of type BaseBinaryStar) for BSE // -// Properties only need to be here if they are required to be available for +// Properties only need to be here if they are required to be available for // printing in the logfiles - all keys present here should also be in BINARY_PROPERTY_LABEL // and BINARY_PROPERTY_DETAIL enum class BINARY_PROPERTY: int { @@ -525,9 +525,9 @@ enum class BINARY_PROPERTY: int { RLOF_POST_MT_STAR2_MASS, RLOF_POST_MT_STAR1_RADIUS, RLOF_POST_MT_STAR2_RADIUS, - RLOF_POST_MT_STAR1_TEFF, + RLOF_POST_MT_STAR1_TEFF, RLOF_POST_MT_STAR2_TEFF, - RLOF_POST_MT_STAR1_LUM, + RLOF_POST_MT_STAR1_LUM, RLOF_POST_MT_STAR2_LUM, RLOF_POST_MT_STAR1_RLOF, RLOF_POST_MT_STAR2_RLOF, @@ -543,9 +543,9 @@ enum class BINARY_PROPERTY: int { RLOF_PRE_MT_STAR2_MASS, RLOF_PRE_MT_STAR1_RADIUS, RLOF_PRE_MT_STAR2_RADIUS, - RLOF_PRE_MT_STAR1_TEFF, + RLOF_PRE_MT_STAR1_TEFF, RLOF_PRE_MT_STAR2_TEFF, - RLOF_PRE_MT_STAR1_LUM, + RLOF_PRE_MT_STAR1_LUM, RLOF_PRE_MT_STAR2_LUM, RLOF_PRE_MT_STAR1_RLOF, RLOF_PRE_MT_STAR2_RLOF, @@ -629,7 +629,7 @@ enum class BINARY_PROPERTY: int { // map BINARY_PROPERTY to string identifying the property // for lookup by the printing functions // -// Property names only need to be here if they are required to be available for +// Property names only need to be here if they are required to be available for // printing in the logfiles - all keys present here should also be in BINARY_PROPERTY // and BINARY_PROPERTY_DETAIL const COMPASUnorderedMap BINARY_PROPERTY_LABEL = { @@ -760,7 +760,7 @@ const COMPASUnorderedMap BINARY_PROPERTY_LABEL = { { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_10_2, "TIDAL_POTENTIAL_LOVE_NUMBER_10_2" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_12_2, "TIDAL_POTENTIAL_LOVE_NUMBER_12_2" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_22_2, "TIDAL_POTENTIAL_LOVE_NUMBER_22_2" }, - { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_32_2, "TIDAL_POTENTIAL_LOVE_NUMBER_32_2" }, + { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_32_2, "TIDAL_POTENTIAL_LOVE_NUMBER_32_2" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_10_EQ_1, "TIDAL_POTENTIAL_LOVE_NUMBER_10_EQ_1" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_12_EQ_1, "TIDAL_POTENTIAL_LOVE_NUMBER_12_EQ_1" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_22_EQ_1, "TIDAL_POTENTIAL_LOVE_NUMBER_22_EQ_1" }, @@ -768,7 +768,7 @@ const COMPASUnorderedMap BINARY_PROPERTY_LABEL = { { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_10_EQ_2, "TIDAL_POTENTIAL_LOVE_NUMBER_10_EQ_2" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_12_EQ_2, "TIDAL_POTENTIAL_LOVE_NUMBER_12_EQ_2" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_22_EQ_2, "TIDAL_POTENTIAL_LOVE_NUMBER_22_EQ_2" }, - { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_32_EQ_2, "TIDAL_POTENTIAL_LOVE_NUMBER_32_EQ_2" }, + { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_32_EQ_2, "TIDAL_POTENTIAL_LOVE_NUMBER_32_EQ_2" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_10_DYN_1, "TIDAL_POTENTIAL_LOVE_NUMBER_10_DYN_1" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_12_DYN_1, "TIDAL_POTENTIAL_LOVE_NUMBER_12_DYN_1" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_22_DYN_1, "TIDAL_POTENTIAL_LOVE_NUMBER_22_DYN_1" }, @@ -776,7 +776,7 @@ const COMPASUnorderedMap BINARY_PROPERTY_LABEL = { { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_10_DYN_2, "TIDAL_POTENTIAL_LOVE_NUMBER_10_DYN_2" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_12_DYN_2, "TIDAL_POTENTIAL_LOVE_NUMBER_12_DYN_2" }, { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_22_DYN_2, "TIDAL_POTENTIAL_LOVE_NUMBER_22_DYN_2" }, - { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_32_DYN_2, "TIDAL_POTENTIAL_LOVE_NUMBER_32_DYN_2" }, + { BINARY_PROPERTY::TIDAL_POTENTIAL_LOVE_NUMBER_32_DYN_2, "TIDAL_POTENTIAL_LOVE_NUMBER_32_DYN_2" }, { BINARY_PROPERTY::TIME, "TIME" }, { BINARY_PROPERTY::TIME_TO_COALESCENCE, "TIME_TO_COALESCENCE" }, { BINARY_PROPERTY::TOTAL_ANGULAR_MOMENTUM, "TOTAL_ANGULAR_MOMENTUM" }, @@ -805,9 +805,9 @@ enum class PROGRAM_OPTION: int { ANG_MOM_CONSERVATION_DURING_CIRCULARISATION, BLACK_HOLE_KICKS_MODE, - + CASE_BB_STABILITY_PRESCRIPTION, - + CHECK_PHOTON_TIRING_LIMIT, CHE_MODE, @@ -988,7 +988,7 @@ enum class PROGRAM_OPTION: int { RANDOM_SEED_CMDLINE, REMNANT_MASS_PRESCRIPTION, - + RESPONSE_TO_SPIN_UP, ROCKET_KICK_MAGNITUDE_1, @@ -1002,7 +1002,7 @@ enum class PROGRAM_OPTION: int { ROTATIONAL_FREQUENCY, ROTATIONAL_FREQUENCY_1, ROTATIONAL_FREQUENCY_2, - + SCALE_CHE_MASS_LOSS_SURF_HE_ABUNDANCE, SCALE_TERMINAL_WIND_VEL_METALLICITY_POWER, SEMI_MAJOR_AXIS, @@ -1013,7 +1013,7 @@ enum class PROGRAM_OPTION: int { STELLAR_ZETA_PRESCRIPTION, TIDES_PRESCRIPTION, - + USSN_KICKS_OVERRIDE_MANDEL_MULLER, WR_FACTOR, @@ -1042,9 +1042,9 @@ const COMPASUnorderedMap PROGRAM_OPTION_LABEL = { { PROGRAM_OPTION::ANG_MOM_CONSERVATION_DURING_CIRCULARISATION, "ANG_MOM_CONSERVATION_DURING_CIRCULARISATION" }, { PROGRAM_OPTION::BLACK_HOLE_KICKS_MODE, "BLACK_HOLE_KICKS_MODE" }, - + { PROGRAM_OPTION::CASE_BB_STABILITY_PRESCRIPTION, "CASE_BB_STABILITY_PRESCRIPTION" }, - + { PROGRAM_OPTION::CHECK_PHOTON_TIRING_LIMIT, "CHECK_PHOTON_TIRING_LIMIT" }, { PROGRAM_OPTION::CHE_MODE, "CHE_MODE" }, @@ -1074,7 +1074,7 @@ const COMPASUnorderedMap PROGRAM_OPTION_LABEL = { { PROGRAM_OPTION::ECCENTRICITY_DISTRIBUTION_MIN, "ECCENTRICITY_DISTRIBUTION_MIN" }, { PROGRAM_OPTION::EDDINGTON_ACCRETION_FACTOR, "EDDINGTON_ACCRETION_FACTOR" }, { PROGRAM_OPTION::ENABLE_ROTATIONALLY_ENHANCED_MASS_LOSS, "ENABLE_ROTATIONALLY_ENHANCED_MASS_LOSS" }, - { PROGRAM_OPTION::ENHANCE_CHE_LIFETIMES_LUMINOSITIES, "ENHANCE_CHE_LIFETIMES_LUMINOSITIES" }, + { PROGRAM_OPTION::ENHANCE_CHE_LIFETIMES_LUMINOSITIES, "ENHANCE_CHE_LIFETIMES_LUMINOSITIES" }, { PROGRAM_OPTION::ENVELOPE_STATE_PRESCRIPTION, "ENVELOPE_STATE_PRESCRIPTION" }, { PROGRAM_OPTION::EVOLUTION_MODE, "EVOLUTION_MODE" }, @@ -1232,7 +1232,7 @@ const COMPASUnorderedMap PROGRAM_OPTION_LABEL = { { PROGRAM_OPTION::ROTATIONAL_FREQUENCY, "ROTATIONAL_FREQUENCY" }, { PROGRAM_OPTION::ROTATIONAL_FREQUENCY_1, "ROTATIONAL_FREQUENCY_1" }, { PROGRAM_OPTION::ROTATIONAL_FREQUENCY_2, "ROTATIONAL_FREQUENCY_2" }, - + { PROGRAM_OPTION::SCALE_CHE_MASS_LOSS_SURF_HE_ABUNDANCE, "SCALE_CHE_MASS_LOSS_SURF_HE_ABUNDANCE" }, { PROGRAM_OPTION::SCALE_TERMINAL_WIND_VEL_METALLICITY_POWER, "SCALE_TERMINAL_WIND_VEL_METALLICITY_POWER" }, { PROGRAM_OPTION::SEMI_MAJOR_AXIS, "SEMI_MAJOR_AXIS" }, @@ -1243,7 +1243,7 @@ const COMPASUnorderedMap PROGRAM_OPTION_LABEL = { { PROGRAM_OPTION::STELLAR_ZETA_PRESCRIPTION, "STELLAR_ZETA_PRESCRIPTION" }, { PROGRAM_OPTION::TIDES_PRESCRIPTION, "TIDES_PRESCRIPTION" }, - + { PROGRAM_OPTION::USSN_KICKS_OVERRIDE_MANDEL_MULLER, "USSN_KICKS_OVERRIDE_MANDEL_MULLER" }, { PROGRAM_OPTION::WR_FACTOR, "WR_FACTOR" }, @@ -1312,7 +1312,7 @@ typedef std::tuple PROPERTY_DETAIL // to individual stars, whether they be a single star being evolved for SSE, or one of the // constituent stars being evolved as part of a binary for BSE // -// Properties only need to be here if they are required to be available for printing in +// Properties only need to be here if they are required to be available for printing in // the logfiles - all keys present here should also be in the STAR_PROPERTIES #define and // STAR_PROPERTIES_LABEL const std::map ANY_STAR_PROPERTY_DETAIL = { @@ -1398,7 +1398,7 @@ const std::map ANY_STAR_PROPERTY_DETAIL = { { ANY_STAR_PROPERTY::MASS_0, { TYPENAME::DOUBLE, "Mass_0", "Msol", 24, 15}}, { ANY_STAR_PROPERTY::MASS_LOSS_DIFF, { TYPENAME::DOUBLE, "dmWinds", "Msol", 24, 15}}, { ANY_STAR_PROPERTY::MASS_TRANSFER_DIFF, { TYPENAME::DOUBLE, "dmMT", "Msol", 24, 15}}, - { ANY_STAR_PROPERTY::MASS_TRANSFER_DONOR_HISTORY, { TYPENAME::STRING, "MT_Donor_Hist", "-", 16, 1 }}, + { ANY_STAR_PROPERTY::MASS_TRANSFER_DONOR_HISTORY, { TYPENAME::STRING, "MT_Donor_Hist", "-", 16, 1 }}, { ANY_STAR_PROPERTY::MDOT, { TYPENAME::DOUBLE, "Mdot", "Msol yr^-1", 24, 15}}, { ANY_STAR_PROPERTY::METALLICITY, { TYPENAME::DOUBLE, "Metallicity@ZAMS", "-", 24, 15}}, { ANY_STAR_PROPERTY::MOMENT_OF_INERTIA, { TYPENAME::DOUBLE, "Moment_Of_Inertia", "Msol Rsol^2", 24, 15}}, @@ -1459,7 +1459,7 @@ const std::map ANY_STAR_PROPERTY_DETAIL = { // Records the details of BINARY properties. The BINARY properties are those that pertain // to exclusively to a binary star - not the constituent stars that make up the binary // -// Properties only need to be here if they are required to be available for printing in +// Properties only need to be here if they are required to be available for printing in // the logfiles - all keys present here should also be in BINARY_PROPERTY and BINARY_PROPERTY_LABEL const std::map BINARY_PROPERTY_DETAIL = { { BINARY_PROPERTY::CIRCULARIZATION_TIMESCALE, { TYPENAME::DOUBLE, "Tau_Circ", "Myr", 24, 15}}, @@ -1488,9 +1488,9 @@ const std::map BINARY_PROPERTY_DETAIL = { { BINARY_PROPERTY::MASS_TRANSFER_TRACKER_HISTORY, { TYPENAME::MT_TRACKING, "MT_History", "-", 4, 1 }}, { BINARY_PROPERTY::MERGES_IN_HUBBLE_TIME, { TYPENAME::BOOL, "Merges_Hubble_Time", "State", 0, 0 }}, { BINARY_PROPERTY::OPTIMISTIC_COMMON_ENVELOPE, { TYPENAME::BOOL, "Optimistic_CE", "State", 0, 0 }}, - { BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_X, { TYPENAME::DOUBLE, "Orbital_AM_Vector>SN_X", "-", 24, 15}}, - { BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_Y, { TYPENAME::DOUBLE, "Orbital_AM_Vector>SN_Y", "-", 24, 15}}, - { BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_Z, { TYPENAME::DOUBLE, "Orbital_AM_Vector>SN_Z", "-", 24, 15}}, + { BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_X, { TYPENAME::DOUBLE, "Orbital_AM_Vector>SN_X", "-", 24, 15}}, + { BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_Y, { TYPENAME::DOUBLE, "Orbital_AM_Vector>SN_Y", "-", 24, 15}}, + { BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_Z, { TYPENAME::DOUBLE, "Orbital_AM_Vector>SN_Z", "-", 24, 15}}, { BINARY_PROPERTY::ORBITAL_ANGULAR_VELOCITY, { TYPENAME::DOUBLE, "Orbital_Angular_Velocity", "kms^-1", 24, 15}}, { BINARY_PROPERTY::ORBITAL_VELOCITY_PRE_SUPERNOVA, { TYPENAME::DOUBLE, "Orb_VelocityCE", "Rsol", 24, 15}}, @@ -1572,7 +1572,7 @@ const std::map BINARY_PROPERTY_DETAIL = { { BINARY_PROPERTY::STELLAR_TYPE_NAME_1_PRE_COMMON_ENVELOPE, { TYPENAME::STRING, "Stellar_Type(1)CE", "-", 42, 1 }}, { BINARY_PROPERTY::STELLAR_TYPE_NAME_2_PRE_COMMON_ENVELOPE, { TYPENAME::STRING, "Stellar_Type(2) BINARY_PROPERTY_DETAIL = { // map PROGRAM_OPTION_DETAIL // Records the details of PROGRAM_OPTION properties. // -// Options only need to be here if they are required to be available for printing in +// Options only need to be here if they are required to be available for printing in // the logfiles - all keys present here should also be in PROGRAM_OPTION and PROGRAM_OPTION_LABEL // // Note that header strings here should be prefixed with "PO_" to differentiate them from stellar/binary @@ -1633,13 +1633,13 @@ const std::map PROGRAM_OPTION_DETAIL = { { PROGRAM_OPTION::ANG_MOM_CONSERVATION_DURING_CIRCULARISATION, { TYPENAME::BOOL, "PO_Conserve_AngMom@Circ", "Flag", 0, 0 }}, { PROGRAM_OPTION::BLACK_HOLE_KICKS_MODE, { TYPENAME::INT, "PO_BH_Kicks_Mode", "-", 4, 1 }}, - + { PROGRAM_OPTION::CASE_BB_STABILITY_PRESCRIPTION, { TYPENAME::INT, "PO_BB_Mass_xFer_Stblty_Prscrptn", "-", 4, 1 }}, - + { PROGRAM_OPTION::CHECK_PHOTON_TIRING_LIMIT, { TYPENAME::BOOL, "PO_Check_Photon_Tiring_Limit", "Flag", 0, 0 }}, { PROGRAM_OPTION::CHE_MODE, { TYPENAME::INT, "PO_CHE_Mode", "-", 4, 1 }}, - + { PROGRAM_OPTION::CIRCULARISE_BINARY_DURING_MT, { TYPENAME::BOOL, "PO_Circularise@MT", "Flag", 0, 0 }}, { PROGRAM_OPTION::COMMON_ENVELOPE_ALPHA, { TYPENAME::DOUBLE, "PO_CE_Alpha", "-", 24, 15}}, @@ -1758,7 +1758,7 @@ const std::map PROGRAM_OPTION_DETAIL = { { PROGRAM_OPTION::MT_CRIT_MR_HE_MS_NON_DEGENERATE_ACCRETOR, { TYPENAME::DOUBLE, "PO_MT_Crit_MR_HE_MS_NonDeg_Acc", "-", 24, 15}}, { PROGRAM_OPTION::MT_CRIT_MR_WD_DEGENERATE_ACCRETOR, { TYPENAME::DOUBLE, "PO_MT_Crit_MR_WD_Deg_Acc", "-", 24, 15}}, { PROGRAM_OPTION::MT_CRIT_MR_WD_NONDEGENERATE_ACCRETOR, { TYPENAME::DOUBLE, "PO_MT_Crit_MR_WD_NonDeg_Acc", "-", 24, 15}}, - + { PROGRAM_OPTION::MT_FRACTION_ACCRETED, { TYPENAME::DOUBLE, "PO_MT_Fraction_Accreted", "-", 24, 15}}, { PROGRAM_OPTION::MT_JLOSS, { TYPENAME::DOUBLE, "PO_MT_JLoss", "-", 24, 15}}, { PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_DEGEN, { TYPENAME::DOUBLE, "PO_MT_JLoss_Linear_Frac_Degen", "-", 24, 15}}, @@ -1770,7 +1770,7 @@ const std::map PROGRAM_OPTION_DETAIL = { { PROGRAM_OPTION::MULLER_MANDEL_KICK_MULTIPLIER_NS, { TYPENAME::DOUBLE, "PO_MM_Kick_Multiplier_NS", "-", 24, 15}}, { PROGRAM_OPTION::MULLER_MANDEL_SIGMA_KICK_BH, { TYPENAME::DOUBLE, "PO_MM_Sigma_Kick_BH", "-", 24, 15}}, { PROGRAM_OPTION::MULLER_MANDEL_SIGMA_KICK_NS, { TYPENAME::DOUBLE, "PO_MM_Sigma_Kick_NS", "-", 24, 15}}, - + { PROGRAM_OPTION::NEUTRINO_MASS_LOSS_ASSUMPTION_BH, { TYPENAME::INT, "PO_Neutrino_Mass_Loss_Assmptn", "-", 4, 1 }}, { PROGRAM_OPTION::NEUTRINO_MASS_LOSS_VALUE_BH, { TYPENAME::DOUBLE, "PO_Neutrino_Mass_Loss_Value", "-", 24, 15}}, @@ -1811,7 +1811,7 @@ const std::map PROGRAM_OPTION_DETAIL = { { PROGRAM_OPTION::RANDOM_SEED_CMDLINE, { TYPENAME::ULONGINT, "PO_SEED(CMDLINE)", "-", 12, 1 }}, { PROGRAM_OPTION::REMNANT_MASS_PRESCRIPTION, { TYPENAME::INT, "PO_Remnant_Mass_Prscrptn", "-", 4, 1 }}, - + { PROGRAM_OPTION::RESPONSE_TO_SPIN_UP, { TYPENAME::INT, "PO_Response_To_Spin_Up", "-", 4, 1 }}, { PROGRAM_OPTION::ROCKET_KICK_MAGNITUDE_1, { TYPENAME::DOUBLE, "PO_Rocket_Kick_Magnitude(1)", "kms^-1", 24, 15}}, @@ -1825,7 +1825,7 @@ const std::map PROGRAM_OPTION_DETAIL = { { PROGRAM_OPTION::ROTATIONAL_FREQUENCY, { TYPENAME::DOUBLE, "PO_Rotational_Frequency", "Hz", 24, 15}}, { PROGRAM_OPTION::ROTATIONAL_FREQUENCY_1, { TYPENAME::DOUBLE, "PO_Rotational_Frequency(1)", "Hz", 24, 15}}, { PROGRAM_OPTION::ROTATIONAL_FREQUENCY_2, { TYPENAME::DOUBLE, "PO_Rotational_Frequency(2)", "Hz", 24, 15}}, - + { PROGRAM_OPTION::SCALE_CHE_MASS_LOSS_SURF_HE_ABUNDANCE, { TYPENAME::BOOL, "PO_Scale_CHE_Mass_Loss_Surf_He_Abundance", "flag", 0, 0}}, { PROGRAM_OPTION::SCALE_TERMINAL_WIND_VEL_METALLICITY_POWER, { TYPENAME::DOUBLE, "PO_Scale_Terminal_Wind_Vel_Metallicity_Power", "-", 24, 15}}, { PROGRAM_OPTION::SEMI_MAJOR_AXIS, { TYPENAME::DOUBLE, "PO_Semi-Major_Axis", "AU", 24, 15}}, @@ -1836,7 +1836,7 @@ const std::map PROGRAM_OPTION_DETAIL = { { PROGRAM_OPTION::STELLAR_ZETA_PRESCRIPTION, { TYPENAME::INT, "PO_Stellar_Zeta_Prscrptn", "-", 4, 1 }}, { PROGRAM_OPTION::TIDES_PRESCRIPTION, { TYPENAME::INT, "PO_Tides_Prscrptn", "-", 4, 1 }}, - + { PROGRAM_OPTION::USSN_KICKS_OVERRIDE_MANDEL_MULLER, { TYPENAME::BOOL, "PO_USSN_Kicks_Override_Mandel_Muller", "flag", 0, 0}}, { PROGRAM_OPTION::WR_FACTOR, { TYPENAME::DOUBLE, "PO_WR_Factor", "-", 24, 15}}, @@ -1961,8 +1961,8 @@ enum class SSE_SYSTEM_SNAPSHOT_RECORD_TYPE: unsigned int { // these must be left as default values - their order can be changed with the caveat that the sentinel "SENTINEL" must stay at the end // it's a bit of a hack, but it lets me iterate over the enum enum class RUN_DETAILS_COLUMNS: int { COMPAS_VERSION, - RUN_START, - RUN_END, + RUN_START, + RUN_END, OBJECTS_REQUESTED, OBJECTS_CREATED, CLOCK_TIME, @@ -2163,16 +2163,16 @@ const ANY_PROPERTY_VECTOR BSE_DETAILED_OUTPUT_REC = { // const ANY_PROPERTY_VECTOR BSE_DOUBLE_COMPACT_OBJECTS_REC = { BINARY_PROPERTY::RANDOM_SEED, - BINARY_PROPERTY::SEMI_MAJOR_AXIS_AT_DCO_FORMATION, + BINARY_PROPERTY::SEMI_MAJOR_AXIS_AT_DCO_FORMATION, BINARY_PROPERTY::ECCENTRICITY_AT_DCO_FORMATION, STAR_1_PROPERTY::MASS, STAR_1_PROPERTY::STELLAR_TYPE, - STAR_2_PROPERTY::MASS, + STAR_2_PROPERTY::MASS, STAR_2_PROPERTY::STELLAR_TYPE, BINARY_PROPERTY::TIME_TO_COALESCENCE, BINARY_PROPERTY::TIME, - BINARY_PROPERTY::MERGES_IN_HUBBLE_TIME, - STAR_1_PROPERTY::RECYCLED_NEUTRON_STAR, + BINARY_PROPERTY::MERGES_IN_HUBBLE_TIME, + STAR_1_PROPERTY::RECYCLED_NEUTRON_STAR, STAR_2_PROPERTY::RECYCLED_NEUTRON_STAR }; @@ -2267,7 +2267,7 @@ const ANY_PROPERTY_VECTOR BSE_SUPERNOVAE_REC = { SUPERNOVA_PROPERTY::SUPERNOVA_THETA, SUPERNOVA_PROPERTY::SUPERNOVA_PHI, SUPERNOVA_PROPERTY::SN_TYPE, - BINARY_PROPERTY::ECCENTRICITY_PRE_SUPERNOVA, + BINARY_PROPERTY::ECCENTRICITY_PRE_SUPERNOVA, BINARY_PROPERTY::ECCENTRICITY, BINARY_PROPERTY::SEMI_MAJOR_AXIS_PRE_SUPERNOVA_RSOL, BINARY_PROPERTY::SEMI_MAJOR_AXIS_RSOL, @@ -2291,7 +2291,7 @@ const ANY_PROPERTY_VECTOR BSE_SUPERNOVAE_REC = { COMPANION_PROPERTY::SPEED, BINARY_PROPERTY::SYSTEMIC_SPEED, SUPERNOVA_PROPERTY::IS_HYDROGEN_POOR, - BINARY_PROPERTY::SUPERNOVA_ORBIT_INCLINATION_ANGLE, + BINARY_PROPERTY::SUPERNOVA_ORBIT_INCLINATION_ANGLE, BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_X, BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_Y, BINARY_PROPERTY::ORBITAL_ANGULAR_MOMENTUM_VECTOR_Z, @@ -2502,7 +2502,7 @@ const ANY_PROPERTY_VECTOR SSE_SUPERNOVAE_REC = { STAR_PROPERTY::DRAWN_KICK_MAGNITUDE, STAR_PROPERTY::KICK_MAGNITUDE, STAR_PROPERTY::FALLBACK_FRACTION, - STAR_PROPERTY::MEAN_ANOMALY, + STAR_PROPERTY::MEAN_ANOMALY, STAR_PROPERTY::SN_TYPE, STAR_PROPERTY::TOTAL_MASS_AT_COMPACT_OBJECT_FORMATION, STAR_PROPERTY::TOTAL_RADIUS_AT_COMPACT_OBJECT_FORMATION, diff --git a/src/MR.h b/src/MR.h index e258e1d3f..b6e7ef9e3 100755 --- a/src/MR.h +++ b/src/MR.h @@ -15,22 +15,22 @@ class MR: virtual public BaseStar, public Remnants { public: MR() { m_StellarType = STELLAR_TYPE::MASSLESS_REMNANT; }; - + MR(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), Remnants(p_BaseStar) { m_StellarType = STELLAR_TYPE::MASSLESS_REMNANT; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } MR* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - MR* clone = new MR(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + MR* clone = new MR(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static MR* Clone(MR& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - MR* clone = new MR(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + MR* clone = new MR(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -53,7 +53,7 @@ class MR: virtual public BaseStar, public Remnants { // member functions double CalculateMomentOfInertia() const { return 0.0; } // No moment of inertia for massless remnants - use 0.0 double CalculateMomentOfInertiaAU() const { return 0.0; } // No moment of inertia for massless remnants - use 0.0 - + double ChooseTimestep(const double p_Time) const { return std::numeric_limits::max(); } // Can take arbitrarily long time steps for massless remnants -- nothing is happening void SetPulsarParameters() const { } // NO-OP diff --git a/src/MS_gt_07.cpp b/src/MS_gt_07.cpp index 6d68dc898..634e6d61a 100755 --- a/src/MS_gt_07.cpp +++ b/src/MS_gt_07.cpp @@ -68,19 +68,19 @@ double MS_gt_07::CalculateMassTransferRejuvenationFactor() { * Assumes this star is the donor; relevant accretor details are passed as parameters. * Critical mass ratio is defined as qCrit = mAccretor/mDonor. * - * double MS_gt_07::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) + * double MS_gt_07::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) * * @param [IN] p_AccretorIsDegenerate Boolean indicating if accretor in degenerate (true = degenerate) - * @return Critical mass ratio for unstable MT + * @return Critical mass ratio for unstable MT */ double MS_gt_07::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { double qCrit; - + qCrit = p_AccretorIsDegenerate ? OPTIONS->MassTransferCriticalMassRatioMSHighMassDegenerateAccretor() // degenerate accretor : OPTIONS->MassTransferCriticalMassRatioMSHighMassNonDegenerateAccretor(); // non-degenerate accretor - + return qCrit; } @@ -94,25 +94,25 @@ double MS_gt_07::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegen * @return ENVELOPE::{ RADIATIVE, CONVECTIVE, REMNANT } */ ENVELOPE MS_gt_07::DetermineEnvelopeType() const { - + ENVELOPE envelope = ENVELOPE::RADIATIVE; // default envelope type - + switch (OPTIONS->EnvelopeStatePrescription()) { // which envelope prescription? - + case ENVELOPE_STATE_PRESCRIPTION::LEGACY: envelope = ENVELOPE::RADIATIVE; break; - + case ENVELOPE_STATE_PRESCRIPTION::HURLEY: // there is some convective envelope for stars below 1.25 solar masses according to Eq. (36) of Hurley+ (2002), but we simplify envelope = utils::Compare(m_Mass, 1.25) < 0 ? ENVELOPE::CONVECTIVE : ENVELOPE::RADIATIVE; break; - + case ENVELOPE_STATE_PRESCRIPTION::FIXED_TEMPERATURE: // envelope is radiative if temperature exceeds fixed threshold, otherwise convective envelope = utils::Compare(Temperature() * TSOL, OPTIONS->ConvectiveEnvelopeTemperatureThreshold()) > 0 ? ENVELOPE::RADIATIVE : ENVELOPE::CONVECTIVE; break; - + case ENVELOPE_STATE_PRESCRIPTION::CONVECTIVE_MASS_FRACTION: // envelope is labeled convective when the convective mass exceeds a fixed fraction of the envelope mass double convectiveEnvelopeMass, convectiveEnvelopeMassMax; @@ -128,8 +128,8 @@ ENVELOPE MS_gt_07::DetermineEnvelopeType() const { // The correct fix for this is to add code for the missing prescription or, if the missing // prescription is superfluous, remove it from the option. - THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_STATE_PRESCRIPTION); // throw error + THROW_ERROR(ERROR::UNKNOWN_ENVELOPE_STATE_PRESCRIPTION); // throw error } - + return envelope; } diff --git a/src/MS_gt_07.h b/src/MS_gt_07.h index e4bb2ffa4..4b1c34018 100755 --- a/src/MS_gt_07.h +++ b/src/MS_gt_07.h @@ -17,22 +17,22 @@ class MS_gt_07: virtual public BaseStar, public MainSequence { public: MS_gt_07() { m_StellarType = STELLAR_TYPE::MS_GT_07; }; - + MS_gt_07(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), MainSequence(p_BaseStar) { m_StellarType = STELLAR_TYPE::MS_GT_07; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } MS_gt_07* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - MS_gt_07* clone = new MS_gt_07(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + MS_gt_07* clone = new MS_gt_07(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static MS_gt_07* Clone(MS_gt_07& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - MS_gt_07* clone = new MS_gt_07(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + MS_gt_07* clone = new MS_gt_07(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -41,7 +41,7 @@ class MS_gt_07: virtual public BaseStar, public MainSequence { void Initialise() { CalculateTimescales(); // Initialise timescales // Age for MS_GT_07 is carried over from CH stars switching to MS after spinning down, so not set to 0.0 here - + // Initialise core mass, luminosity, radius, and temperature if Brcek core mass prescription is used // Only do this once - this should not be done if a CH star spins down and becomes a MS star (when using CHE_MODE::PESSIMISTIC) if (OPTIONS->MainSequenceCoreMassPrescription() == CORE_MASS_PRESCRIPTION::BRCEK && // Brcek core mass prescription? diff --git a/src/MS_lte_07.cpp b/src/MS_lte_07.cpp index 84931db8c..b65376e9d 100755 --- a/src/MS_lte_07.cpp +++ b/src/MS_lte_07.cpp @@ -11,18 +11,18 @@ * Assumes this star is the donor; relevant accretor details are passed as parameters. * Critical mass ratio is defined as qCrit = mAccretor/mDonor. * - * double MS_lte_07::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) + * double MS_lte_07::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) * * @param [IN] p_AccretorIsDegenerate Boolean indicating if accretor in degenerate (true = degenerate) - * @return Critical mass ratio for unstable MT + * @return Critical mass ratio for unstable MT */ double MS_lte_07::CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { double qCrit; - + qCrit = p_AccretorIsDegenerate ? OPTIONS->MassTransferCriticalMassRatioMSLowMassDegenerateAccretor() // degenerate accretor : OPTIONS->MassTransferCriticalMassRatioMSLowMassNonDegenerateAccretor(); // non-degenerate accretor - + return qCrit; } diff --git a/src/MS_lte_07.h b/src/MS_lte_07.h index 1bbe1ec8f..7c1d3084d 100755 --- a/src/MS_lte_07.h +++ b/src/MS_lte_07.h @@ -17,22 +17,22 @@ class MS_lte_07: virtual public BaseStar, public MainSequence { public: MS_lte_07() { m_StellarType = STELLAR_TYPE::MS_LTE_07; }; - + MS_lte_07(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), MainSequence(p_BaseStar) { m_StellarType = STELLAR_TYPE::MS_LTE_07; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } MS_lte_07* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - MS_lte_07* clone = new MS_lte_07(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + MS_lte_07* clone = new MS_lte_07(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static MS_lte_07* Clone(MS_lte_07& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - MS_lte_07* clone = new MS_lte_07(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + MS_lte_07* clone = new MS_lte_07(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } diff --git a/src/MainSequence.cpp b/src/MainSequence.cpp index fd04da585..58f121f5a 100644 --- a/src/MainSequence.cpp +++ b/src/MainSequence.cpp @@ -12,23 +12,23 @@ /* * Calculate the helium abundance in the core of the star - * - * Currently just a simple linear model from the initial helium abundance to + * + * Currently just a simple linear model from the initial helium abundance to * the maximum helium abundance (assuming that all hydrogen is converted to - * helium). - * + * helium). + * * When tau = 0, heliumAbundanceCore = m_InitialHeliumAbundance * When tau = 1, heliumAbundanceCore = heliumAbundanceCoreMax = 1.0 - m_Metallicity - * + * * Should be updated to match detailed models. * * double CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) - * + * * @param [IN] p_Tau Fraction of main sequence lifetime * @return Helium abundance in the core (Y_c) */ double MainSequence::CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const { - + // If BRCEK core mass prescription is used, core helium abundance is calculated with the core mass return ((OPTIONS->MainSequenceCoreMassPrescription() == CORE_MASS_PRESCRIPTION::BRCEK) && (utils::Compare(m_MZAMS, BRCEK_LOWER_MASS_LIMIT) >= 0)) ? m_HeliumAbundanceCore @@ -38,19 +38,19 @@ double MainSequence::CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) con /* * Calculate the hydrogen abundance in the core of the star - * - * Currently just a simple linear model. Assumes that hydrogen in the core of - * the star is burned to helium at a constant rate throughout the lifetime. - * + * + * Currently just a simple linear model. Assumes that hydrogen in the core of + * the star is burned to helium at a constant rate throughout the lifetime. + * * Should be updated to match detailed models. * * double CalculateHydrogenAbundanceCoreOnPhase(const double p_Tau) - * + * * @param [IN] p_Tau Fraction of main sequence lifetime * @return Hydrogen abundance in the core (X_c) */ double MainSequence::CalculateHydrogenAbundanceCoreOnPhase(const double p_Tau) const { - + // If BRCEK core mass prescription is used, core helium abundance is calculated with the core mass return ((OPTIONS->MainSequenceCoreMassPrescription() == CORE_MASS_PRESCRIPTION::BRCEK) && (utils::Compare(m_MZAMS, BRCEK_LOWER_MASS_LIMIT) >= 0)) ? 1.0 - m_HeliumAbundanceCore - m_Metallicity @@ -287,7 +287,7 @@ double MainSequence::CalculateLuminosityAtPhaseEnd(const double p_Mass) const { double MainSequence::CalculateLuminosityOnPhase(const double p_Time, const double p_Mass, const double p_LZAMS) const { #define a m_AnCoefficients // for convenience and readability - undefined at end of function #define timescales(x) m_Timescales[static_cast(TIMESCALE::x)] // for convenience and readability - undefined at end of function - + // If BRCEK core prescription is used, return luminosity from Shikauchi et al. (2024) during core hydrogen burning (valid for MZAMS >= 15 Msol) or // luminosity that smoothly connects MS and HG during MS hook (valid for MZAMS >= BRCEK_LOWER_MASS_LIMIT); do not use Shikauchi luminosity // prescription during CHE @@ -299,7 +299,7 @@ double MainSequence::CalculateLuminosityOnPhase(const double p_Time, const doubl return CalculateLuminosityShikauchi(m_MainSequenceCoreMass, m_HeliumAbundanceCore); } } - + const double epsilon = 0.01; double LTMS = CalculateLuminosityAtPhaseEnd(p_Mass); @@ -340,17 +340,17 @@ double MainSequence::CalculateLuminosityOnPhase(const double p_Time, const doubl */ double MainSequence::CalculateLuminosityShikauchi(const double p_CoreMass, const double p_HeliumAbundanceCore) const { DBL_VECTOR L_COEFFICIENTS = std::get<2>(SHIKAUCHI_COEFFICIENTS); - + // common factors double logMixingCoreMass = std::log10(p_CoreMass); double logMixingCoreMass_2 = logMixingCoreMass * logMixingCoreMass; double logMixingCoreMass_3 = logMixingCoreMass_2 * logMixingCoreMass; - + double heliumAbundanceCore_2 = p_HeliumAbundanceCore * p_HeliumAbundanceCore; double heliumAbundanceCore_3 = heliumAbundanceCore_2 * p_HeliumAbundanceCore; - + double logL = L_COEFFICIENTS[0] * logMixingCoreMass + L_COEFFICIENTS[1] * p_HeliumAbundanceCore + L_COEFFICIENTS[2] * logMixingCoreMass * p_HeliumAbundanceCore + L_COEFFICIENTS[3] * logMixingCoreMass_2 + L_COEFFICIENTS[4] * heliumAbundanceCore_2 + L_COEFFICIENTS[5] * logMixingCoreMass_3 + L_COEFFICIENTS[6] * heliumAbundanceCore_3 + L_COEFFICIENTS[7] * logMixingCoreMass_2 * p_HeliumAbundanceCore + L_COEFFICIENTS[8] * logMixingCoreMass * heliumAbundanceCore_2 + L_COEFFICIENTS[9] * logMixingCoreMass_3 * logMixingCoreMass + L_COEFFICIENTS[10] * heliumAbundanceCore_3 * p_HeliumAbundanceCore + L_COEFFICIENTS[11] * logMixingCoreMass * heliumAbundanceCore_3 + L_COEFFICIENTS[12] * logMixingCoreMass_2 * heliumAbundanceCore_2 + L_COEFFICIENTS[13] * logMixingCoreMass_3 * p_HeliumAbundanceCore + L_COEFFICIENTS[14]; - + return PPOW(10.0, logL); } @@ -375,18 +375,18 @@ double MainSequence::CalculateLuminosityTransitionToHG(const double p_Mass, cons HG *clone = HG::Clone(static_cast(const_cast(*this)), OBJECT_PERSISTENCE::EPHEMERAL); double luminosityTAMS = clone->Luminosity(); // Get luminosity from clone (with updated Mass0) delete clone; clone = nullptr; // Return the memory allocated for the clone - + double ageAtHookStart = 0.99 * timescales(tMS); - + double luminosityAtHookStart; if (utils::Compare(m_MZAMS, std::max(15.0, BRCEK_LOWER_MASS_LIMIT)) >= 0) luminosityAtHookStart = CalculateLuminosityShikauchi(m_MainSequenceCoreMass, m_HeliumAbundanceCore); // In the hook, core helium abundance fixed at 1-Z and core mass is not changing else luminosityAtHookStart = CalculateLuminosityOnPhase(ageAtHookStart, p_Mass, p_LZAMS); // Do not use Shikauchi luminosity for MZAMS < 15 Msun - + // Linear interpolation return (luminosityAtHookStart * (timescales(tMS) - p_Age) + luminosityTAMS * (p_Age - ageAtHookStart)) / (timescales(tMS) - ageAtHookStart); - + #undef timescales } @@ -564,9 +564,9 @@ double MainSequence::CalculateRadiusOnPhase(const double p_Mass, const double p_ if (utils::Compare(p_Tau, 0.99) > 0) // star in MS hook? return CalculateRadiusTransitionToHG(p_Mass, p_Tau, p_RZAMS); } - + double radius = m_Radius; - + const double epsilon = 0.01; double tBGB = CalculateLifetimeToBGB(p_Mass); double tMS = CalculateLifetimeOnPhase(p_Mass, tBGB); @@ -597,21 +597,21 @@ double MainSequence::CalculateRadiusOnPhase(const double p_Mass, const double p_ logRMS_RZAMS -= deltaR * (tau1_3 - tau2_3); // ibid, eq 13, part 5 radius = p_RZAMS * PPOW(10.0, logRMS_RZAMS); // rewrite Hurley et al. 2000, eq 13 for R(t) - + // If BRCEK prescription is used and star was stripped below its initial core mass, radius needs to be adjusted if (OPTIONS->MainSequenceCoreMassPrescription() == CORE_MASS_PRESCRIPTION::BRCEK && utils::Compare(m_MZAMS, BRCEK_LOWER_MASS_LIMIT) >= 0) { - + double heliumAbundanceSurface = m_HeliumAbundanceSurface; if (utils::Compare(p_Mass, m_InitialMainSequenceCoreMass) < 0) // By tracing the helium profile in the star, calculate how the surface helium abundance changes if mass drops below the initial core mass heliumAbundanceSurface = m_HeliumAbundanceCoreOut + (p_Mass - m_MainSequenceCoreMass) * (m_HeliumAbundanceSurface - m_HeliumAbundanceCoreOut) / (m_InitialMainSequenceCoreMass - m_MainSequenceCoreMass); - + // Factor that scales radius based on surface helium abundance double surfaceAbundanceFactor = (utils::Compare(m_HeliumAbundanceCore, m_InitialHeliumAbundance) != 0) ? (heliumAbundanceSurface - m_InitialHeliumAbundance) / (m_HeliumAbundanceCore - m_InitialHeliumAbundance) : 0.0; - + radius = radius + (p_RZAMS - radius) * surfaceAbundanceFactor; } - + return radius; #undef a @@ -626,7 +626,7 @@ double MainSequence::CalculateRadiusOnPhase(const double p_Mass, const double p_ * * * double CalculateRadiusTransitionToHG(const double p_Mass, const double p_Tau) - + * @param [IN] p_Mass Mass in Msol * @param [IN] p_Tau Fractional age on Main Sequence * @param [IN] p_RZAMS Zero Age Main Sequence (ZAMS) Radius @@ -638,9 +638,9 @@ double MainSequence::CalculateRadiusTransitionToHG(const double p_Mass, const do // stripped as this prevents radius expansion during the hook, and delays possible mass transfer to the start of HG double radiusTAMS = std::min(clone->Radius(), m_Radius); // Get radius from clone (with updated Mass0) delete clone; clone = nullptr; // Return the memory allocated for the clone - + double radiusAtHookStart = CalculateRadiusOnPhase(p_Mass, 0.99, p_RZAMS); // Hook starts at Tau = 0.99 - + return (radiusAtHookStart * (1.0 - p_Tau) + radiusTAMS * (p_Tau - 0.99)) / 0.01; // Linear interpolation } @@ -683,9 +683,9 @@ double MainSequence::CalculateRadialExtentConvectiveEnvelope() const { */ double MainSequence::CalculateConvectiveCoreRadius() const { if(utils::Compare(m_Mass, 1.25) < 0) return 0.0; // low-mass star with a radiative core - + double convectiveCoreRadiusZAMS = m_Mass * (0.06 + 0.05 * exp(-m_Mass / 61.57)); - + // We need TAMSCoreRadius, which is just the core radius at the start of the HG phase. // Since we are on the main sequence here, we can clone this object as an HG object // and, as long as it is initialised (to correctly set Tau to 0.0 on the HG phase), @@ -741,9 +741,9 @@ DBL_DBL MainSequence::CalculateConvectiveEnvelopeMass() const { double massEnvelope0 = m_Mass; if (utils::Compare(m_Mass, 0.35) > 0) massEnvelope0 = 0.35 * (1.25 - m_Mass) * (1.25 - m_Mass) / 0.81; - + double massEnvelope = massEnvelope0 * sqrt(sqrt(1.0 - m_Tau)); - + return std::tuple (massEnvelope, massEnvelope0); } @@ -763,7 +763,7 @@ DBL_DBL MainSequence::CalculateConvectiveEnvelopeMass() const { * @return Tuple containing convective core mass and core helium abundance */ DBL_DBL MainSequence::CalculateMainSequenceCoreMassBrcek(const double p_Dt, const double p_MassLossRate) { - + // get Shikauchi coefficients DBL_VECTOR ALPHA_COEFFICIENTS = std::get<0>(SHIKAUCHI_COEFFICIENTS); DBL_VECTOR FMIX_COEFFICIENTS = std::get<1>(SHIKAUCHI_COEFFICIENTS); @@ -772,19 +772,19 @@ DBL_DBL MainSequence::CalculateMainSequenceCoreMassBrcek(const double p_Dt, cons auto fmix = [&](double mass) { return FMIX_COEFFICIENTS[0] + FMIX_COEFFICIENTS[1] * std::exp(-mass / FMIX_COEFFICIENTS[2]); }; // Shikauchi et al. (2024), eq (A3) double alpha = PPOW(10.0, std::max(-2.0, ALPHA_COEFFICIENTS[1] * m_MainSequenceCoreMass + ALPHA_COEFFICIENTS[2])) + ALPHA_COEFFICIENTS[0]; // ibid, eq (A2) double g = SHIKAUCHI_DELTA_COEFFICIENTS[1] * m_MainSequenceCoreMass + SHIKAUCHI_DELTA_COEFFICIENTS[2]; // ibid, eq (A7) - + double delta; if (p_MassLossRate <= 0.0) delta = std::min(PPOW(10.0, -SHIKAUCHI_DELTA_COEFFICIENTS[0] * (m_HeliumAbundanceCore - m_InitialHeliumAbundance) / (1.0 - m_InitialHeliumAbundance - m_Metallicity) + g), 1.0); // ibid, eq (A6) else delta = PPOW(2.0, -(m_HeliumAbundanceCore - m_InitialHeliumAbundance) / (1.0 - m_InitialHeliumAbundance - m_Metallicity)); // updated prescription for mass gain - + double deltaYc = CalculateLuminosityOnPhase() / (Q_CNO * m_MainSequenceCoreMass) * p_Dt; // Change in central helium fraction; ibid, eq (12) double deltaMass = p_MassLossRate * p_Dt * MYR_TO_YEAR; // Total mass lost/gained double deltaCoreMassML = m_MainSequenceCoreMass * delta * ((m_Mass + deltaMass) * fmix(m_Mass + deltaMass) / (m_Mass * fmix(m_Mass)) - 1); // Change in core mass due to mass loss/gain double deltaCoreMassNatural = -alpha / (1 - alpha * m_HeliumAbundanceCore) * deltaYc * m_MainSequenceCoreMass; // Change in core mass due to natural decay; ibid, eq (4) double deltaCoreMass = deltaCoreMassNatural + deltaCoreMassML; // Total difference in core mass - + double newMixingCoreMass = std::min(m_MainSequenceCoreMass + deltaCoreMass, BRCEK_CORE_MASS_TO_MASS_RATIO_LIMIT * (m_Mass + deltaMass)); // New mixing core mass, always has to be smaller than the total mass double newCentralHeliumFraction = std::min(m_HeliumAbundanceCore + deltaYc, 1.0 - m_Metallicity); // New central helium fraction, capped at 1-Z @@ -821,7 +821,7 @@ DBL_DBL MainSequence::CalculateMainSequenceCoreMassBrcek(const double p_Dt, cons } m_HeliumAbundanceCoreOut = newCentralHeliumFraction; // If core did not grow, Y_out = Y_c } - + return std::tuple (newMixingCoreMass, std::min(newCentralHeliumFraction, 1.0 - m_Metallicity)); } @@ -838,7 +838,7 @@ DBL_DBL MainSequence::CalculateMainSequenceCoreMassBrcek(const double p_Dt, cons * @return Mass of the convective core at ZAMS or after merger in Msol */ double MainSequence::CalculateInitialMainSequenceCoreMass(const double p_Mass, const double p_HeliumAbundanceCore) const { - + double fmix = 0.0; // At ZAMS, use the approach from Shikauchi+ (2024) if (utils::Compare(p_HeliumAbundanceCore, m_InitialHeliumAbundance) == 0) { @@ -876,14 +876,14 @@ void MainSequence::UpdateMainSequenceCoreMass(const double p_Dt, const double p_ // In the Hurley et al. (2000) formalism, MS stars do not have a distinct core and core evolution is not tracked mainSequenceCoreMass = 0.0; break; - - case CORE_MASS_PRESCRIPTION::MANDEL: + + case CORE_MASS_PRESCRIPTION::MANDEL: // Calculate the minimum core mass of a main sequence star that loses mass through Case A mass transfer as the core mass of a TAMS star, scaled by the fractional age. // Only applied to donors as part of binary evolution, not applied to SSE if ((OPTIONS->RetainCoreMassDuringCaseAMassTransfer()) && (p_MassLossRate < 0.0) && (utils::Compare(p_MassLossRate, -m_Mdot) != 0)) mainSequenceCoreMass = std::max(m_MainSequenceCoreMass, CalculateTauOnPhase() * TAMSCoreMass()); break; - + case CORE_MASS_PRESCRIPTION::BRCEK: // Set core mass following Shikauchi et al. (2024) and account for rejuvenation if core grows // MZAMS >= BRCEK_LOWER_MASS_LIMIT? BRCEK prescription valid @@ -992,7 +992,7 @@ void MainSequence::UpdateAgeAfterMassLoss() { double tMS = m_Timescales[static_cast(TIMESCALE::tMS)]; double tBGBprime = CalculateLifetimeToBGB(m_Mass); double tMSprime = MainSequence::CalculateLifetimeOnPhase(m_Mass, tBGBprime); - + m_Age *= tMSprime / tMS; CalculateTimescales(m_Mass, m_Timescales); // must update timescales } @@ -1013,7 +1013,7 @@ double MainSequence::CalculateZetaEquilibrium() { return zetaEquilibrium; } - + /////////////////////////////////////////////////////////////////////////////////////// @@ -1091,13 +1091,13 @@ double MainSequence::ChooseTimestep(const double p_Time) const { STELLAR_TYPE MainSequence::ResolveEnvelopeLoss(bool p_Force) { STELLAR_TYPE stellarType = m_StellarType; - + if (p_Force || utils::Compare(m_Mass, 0.0) <= 0) { // envelope loss stellarType = STELLAR_TYPE::MASSLESS_REMNANT; m_Radius = 0.0; m_Mass = 0.0; } - + return stellarType; } @@ -1118,11 +1118,11 @@ double MainSequence::TAMSCoreMass() const { // // The clone should not evolve, and so should not log anything, but to be sure the // clone does not participate in logging, we set its persistence to EPHEMERAL. - + HG *clone = HG::Clone(static_cast(const_cast(*this)), OBJECT_PERSISTENCE::EPHEMERAL); double TAMSCoreMass = clone->CoreMass(); // get core mass from clone delete clone; clone = nullptr; // return the memory allocated for the clone - + return TAMSCoreMass; } @@ -1145,49 +1145,49 @@ void MainSequence::UpdateAfterMerger(double p_Mass, double p_HydrogenMass) { m_Mass = p_Mass; m_Mass0 = m_Mass; m_MainSequenceCoreMass = 0.0; - + double initialHydrogenFraction = m_InitialHydrogenAbundance; - + CalculateTimescales(); CalculateGBParams(); - + m_Tau = (initialHydrogenFraction - p_HydrogenMass / m_Mass) / initialHydrogenFraction; // assumes uniformly mixed merger product and a uniform rate of H fusion on main sequence - + m_Age = m_Tau * timescales(tMS); - + m_HeliumAbundanceCore = 1.0 - m_Metallicity - p_HydrogenMass / p_Mass; m_HydrogenAbundanceCore = 1.0 - m_Metallicity - m_HeliumAbundanceCore; - + m_HeliumAbundanceSurface = m_HeliumAbundanceCore; // abundances are the same throughout the star, assuming uniform mixing after merger m_HydrogenAbundanceSurface = m_HydrogenAbundanceCore; - + if ((OPTIONS->MainSequenceCoreMassPrescription() == CORE_MASS_PRESCRIPTION::BRCEK) && (utils::Compare(m_MZAMS, BRCEK_LOWER_MASS_LIMIT) >= 0)) { m_InitialMainSequenceCoreMass = CalculateInitialMainSequenceCoreMass(p_Mass, m_HeliumAbundanceCore); // update initial mixing core mass m_MainSequenceCoreMass = m_InitialMainSequenceCoreMass; // update core mass } - + UpdateAttributesAndAgeOneTimestep(0.0, 0.0, 0.0, true); - + #undef timescales } -/* +/* * Interpolate Ge+ Critical Mass Ratios, for H-rich stars - * + * * Function takes input QCRIT_PRESCRIPTION, currently either of the prescriptions for critical mass ratios * from Ge et al. (2020), GE or GE_IC. The first is the full adiabatic response, the second assumes * artificially isentropic envelopes. From private communication with Ge, we have an updated datatable that * includes qCrit for fully conservative and fully non-conservative MT, so we now interpolate on those as well. * * Interpolation is done linearly in logM, logR, and logZ - * - * double BaseStar::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) - * + * + * double BaseStar::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) + * * @param [IN] p_qCritPrescription Adopted critical mass ratio prescription * @param [IN] p_massTransferEfficiencyBeta Mass transfer accretion efficiency * @return Interpolated value of either the critical mass ratio or zeta for given stellar mass / radius - */ + */ double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) { // Iterate over the two QCRIT_GE tables to get the qcrits at each metallicity @@ -1204,26 +1204,26 @@ double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPres INT_VECTOR indices = utils::BinarySearch(massesFromQCritTable, m_Mass); int lowerMassIndex = indices[0]; int upperMassIndex = indices[1]; - + if (lowerMassIndex == -1) { // if masses are out of range, set to endpoints - lowerMassIndex = 0; + lowerMassIndex = 0; upperMassIndex = 1; - } - else if (upperMassIndex == -1) { - lowerMassIndex = massesFromQCritTable.size() - 2; + } + else if (upperMassIndex == -1) { + lowerMassIndex = massesFromQCritTable.size() - 2; upperMassIndex = massesFromQCritTable.size() - 1; - } - + } + // Get vector of radii from qCritTable for the lower and upper mass indices std::vector logRadiusVectorLowerMass = std::get<0>(radiiQCritsFromQCritTable[lowerMassIndex]); std::vector logRadiusVectorUpperMass = std::get<0>(radiiQCritsFromQCritTable[upperMassIndex]); - - // Get the qCrit vector for the lower and upper mass bounds + + // Get the qCrit vector for the lower and upper mass bounds std::vector qCritVectorUpperEffLowerMass; std::vector qCritVectorUpperEffUpperMass; std::vector qCritVectorLowerEffLowerMass; std::vector qCritVectorLowerEffUpperMass; - + // Set the appropriate qCrit vector, depends on MT eff and whether you use GE STD or IC if (p_qCritPrescription == QCRIT_PRESCRIPTION::GE) { if (p_massTransferEfficiencyBeta > 0.5) { @@ -1255,34 +1255,34 @@ double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPres } } - + // Get vector of radii from qCritTable for both lower and upper masses INT_VECTOR indicesR0 = utils::BinarySearch(logRadiusVectorLowerMass, log10(m_Radius)); int lowerRadiusLowerMassIndex = indicesR0[0]; int upperRadiusLowerMassIndex = indicesR0[1]; - + if (lowerRadiusLowerMassIndex == -1) { // if radii are out of range, set to endpoints - lowerRadiusLowerMassIndex = 0; - upperRadiusLowerMassIndex = 1; + lowerRadiusLowerMassIndex = 0; + upperRadiusLowerMassIndex = 1; } - else if (upperRadiusLowerMassIndex == -1) { - lowerRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 2; - upperRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 1; + else if (upperRadiusLowerMassIndex == -1) { + lowerRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 2; + upperRadiusLowerMassIndex = logRadiusVectorLowerMass.size() - 1; } - + INT_VECTOR indicesR1 = utils::BinarySearch(logRadiusVectorUpperMass, log10(m_Radius)); int lowerRadiusUpperMassIndex = indicesR1[0]; int upperRadiusUpperMassIndex = indicesR1[1]; - + if (lowerRadiusUpperMassIndex == -1) { // if radii are out of range, set to endpoints - lowerRadiusUpperMassIndex = 0; - upperRadiusUpperMassIndex = 1; + lowerRadiusUpperMassIndex = 0; + upperRadiusUpperMassIndex = 1; } - else if (upperRadiusUpperMassIndex == -1) { - lowerRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 2; - upperRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 1; + else if (upperRadiusUpperMassIndex == -1) { + lowerRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 2; + upperRadiusUpperMassIndex = logRadiusVectorUpperMass.size() - 1; } - + // Set the 4 boundary points for the 2D interpolation double qUppLowLow = qCritVectorUpperEffLowerMass[lowerRadiusLowerMassIndex]; double qUppLowUpp = qCritVectorUpperEffLowerMass[upperRadiusLowerMassIndex]; @@ -1292,7 +1292,7 @@ double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPres double qLowLowUpp = qCritVectorLowerEffLowerMass[upperRadiusLowerMassIndex]; double qLowUppLow = qCritVectorLowerEffUpperMass[lowerRadiusUpperMassIndex]; double qLowUppUpp = qCritVectorLowerEffUpperMass[upperRadiusUpperMassIndex]; - + double lowerLogRadiusLowerMass = logRadiusVectorLowerMass[lowerRadiusLowerMassIndex]; double upperLogRadiusLowerMass = logRadiusVectorLowerMass[upperRadiusLowerMassIndex]; double lowerLogRadiusUpperMass = logRadiusVectorUpperMass[lowerRadiusUpperMassIndex]; @@ -1300,7 +1300,7 @@ double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPres double logLowerMass = log10(massesFromQCritTable[lowerMassIndex]); double logUpperMass = log10(massesFromQCritTable[upperMassIndex]); - + // Interpolate on logR first, then logM, then on the efficiency, using nearest neighbor for extrapolation double logRadius = log10(m_Radius); double qCritUpperEffLowerMass = (logRadius < lowerLogRadiusLowerMass) ? qUppLowLow @@ -1315,7 +1315,7 @@ double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPres double qCritLowerEffUpperMass = (logRadius < lowerLogRadiusUpperMass) ? qLowUppLow : (logRadius > upperLogRadiusUpperMass) ? qLowUppUpp : qLowUppLow + (logRadius - lowerLogRadiusUpperMass) / (upperLogRadiusUpperMass - lowerLogRadiusUpperMass) * (qLowUppUpp - qLowUppLow); - + double logMass = log10(m_Mass); double interpolatedQCritUpperEff = (logMass < logLowerMass) ? qCritUpperEffLowerMass : (logMass > logUpperMass) ? qCritUpperEffUpperMass @@ -1331,7 +1331,7 @@ double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPres } double logZlo = -3; // log10(0.001) double logZhi = LOG10_ZSOL_HURLEY; // log10(0.02) - + return qCritPerMetallicity[1] + (m_Log10Metallicity - logZhi)*(qCritPerMetallicity[1] - qCritPerMetallicity[0])/(logZhi - logZlo); } @@ -1345,15 +1345,15 @@ double MainSequence::InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPres * @return Tuple containing vectors of coefficients for the specified metallicity */ std::tuple MainSequence::InterpolateShikauchiCoefficients(const double p_Metallicity) const { - + DBL_VECTOR alphaCoeff(3, 0.0); DBL_VECTOR fmixCoeff(3, 0.0); DBL_VECTOR lCoeff(15, 0.0); - + // Skip calculation if BRCEK core prescription is not used if (OPTIONS->MainSequenceCoreMassPrescription() != CORE_MASS_PRESCRIPTION::BRCEK) return std::tuple (alphaCoeff, fmixCoeff, lCoeff); - + double logZ = std::log10(p_Metallicity); // Coefficients are given for these metallicities @@ -1368,7 +1368,7 @@ std::tuple MainSequence::InterpolateShikauc double high_middle = high - middle; double logZ_low = logZ - low; double logZ_middle = logZ - middle; - + // Linear extrapolation (constant) for metallicity lower than the lowest bound if (utils::Compare(logZ, low) <= 0) { alphaCoeff = SHIKAUCHI_ALPHA_COEFFICIENTS[0]; @@ -1399,6 +1399,6 @@ std::tuple MainSequence::InterpolateShikauc fmixCoeff = SHIKAUCHI_FMIX_COEFFICIENTS[2]; lCoeff = SHIKAUCHI_L_COEFFICIENTS[2]; } - + return std::tuple (alphaCoeff, fmixCoeff, lCoeff); } diff --git a/src/MainSequence.h b/src/MainSequence.h index d378b1559..9a378f7db 100644 --- a/src/MainSequence.h +++ b/src/MainSequence.h @@ -19,11 +19,11 @@ class MainSequence: virtual public BaseStar { MainSequence(const BaseStar& p_BaseStar) : BaseStar(p_BaseStar) {} MT_CASE DetermineMassTransferTypeAsDonor() const { return MT_CASE::A; } // Always case A - + const std::tuple SHIKAUCHI_COEFFICIENTS = InterpolateShikauchiCoefficients(m_Metallicity); // Interpolate Shikauchi coefficients for the given metallicity protected: - + // member variables double m_HeliumAbundanceCoreOut = m_InitialHeliumAbundance; // Helium abundance just outside the core, used for rejuvenation calculations @@ -54,19 +54,19 @@ class MainSequence: virtual public BaseStar { double CalculateHeCoreMassOnPhase() const { return 0.0; } // McHe(MS) = 0.0 double CalculateHeliumAbundanceCoreAtPhaseEnd() const { return CalculateHeliumAbundanceCoreOnPhase(); } - double CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const; - double CalculateHeliumAbundanceCoreOnPhase() const { return CalculateHeliumAbundanceCoreOnPhase(m_Tau); } // Use class member variables - + double CalculateHeliumAbundanceCoreOnPhase(const double p_Tau) const; + double CalculateHeliumAbundanceCoreOnPhase() const { return CalculateHeliumAbundanceCoreOnPhase(m_Tau); } // Use class member variables + double CalculateHeliumAbundanceSurfaceAtPhaseEnd() const { return CalculateHeliumAbundanceSurfaceOnPhase(); } double CalculateHeliumAbundanceSurfaceOnPhase() const { return m_HeliumAbundanceSurface; } // Use class member variables - - double CalculateHydrogenAbundanceCoreAtPhaseEnd() const { return CalculateHydrogenAbundanceCoreOnPhase(); } - double CalculateHydrogenAbundanceCoreOnPhase(const double p_Tau) const; - double CalculateHydrogenAbundanceCoreOnPhase() const { return CalculateHydrogenAbundanceCoreOnPhase(m_Tau); } // Use class member variables - - double CalculateHydrogenAbundanceSurfaceAtPhaseEnd() const { return CalculateHydrogenAbundanceSurfaceOnPhase(); } + + double CalculateHydrogenAbundanceCoreAtPhaseEnd() const { return CalculateHydrogenAbundanceCoreOnPhase(); } + double CalculateHydrogenAbundanceCoreOnPhase(const double p_Tau) const; + double CalculateHydrogenAbundanceCoreOnPhase() const { return CalculateHydrogenAbundanceCoreOnPhase(m_Tau); } // Use class member variables + + double CalculateHydrogenAbundanceSurfaceAtPhaseEnd() const { return CalculateHydrogenAbundanceSurfaceOnPhase(); } double CalculateHydrogenAbundanceSurfaceOnPhase() const { return m_HydrogenAbundanceSurface; } // Use class member variables - + double CalculateLifetimeOnPhase(const double p_Mass, const double p_TBGB) const; double CalculateLuminosityAtPhaseEnd(const double p_Mass) const; @@ -84,7 +84,7 @@ class MainSequence: virtual public BaseStar { double CalculateRadialExtentConvectiveEnvelope() const; double CalculateRadiusOnMassChange(double p_dM) { return CalculateRadiusOnPhase(m_Mass + p_dM, m_Tau, CalculateRadiusAtZAMS(m_Mass + p_dM)); } - + double CalculateRadiusOnPhase(const double p_Mass, const double p_Tau, const double p_RZAMS) const; double CalculateRadiusAtPhaseEnd(const double p_Mass, const double p_RZAMS) const; @@ -92,7 +92,7 @@ class MainSequence: virtual public BaseStar { double CalculateRadiusOnPhase() const { return CalculateRadiusOnPhase(m_Mass, m_Tau, m_RZAMS0); } // Use class member variables double CalculateRadiusOnPhase(const double p_Mass, const double p_Luminosity) const { return Radius(); } // Not a meaningful function for MS stars double CalculateRadiusTransitionToHG(const double p_Mass, const double p_Tau, const double p_RZAMS) const; - + double CalculateTauAtPhaseEnd() const { return 1.0; } // tau = 1.0 at end of MS double CalculateTauOnPhase() const; @@ -107,11 +107,11 @@ class MainSequence: virtual public BaseStar { void EvolveOneTimestepPreamble(); STELLAR_TYPE EvolveToNextPhase() { return STELLAR_TYPE::HERTZSPRUNG_GAP; } - double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, + double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta); // RTW do I need a const here? - + std::tuple InterpolateShikauchiCoefficients(const double p_Metallicity) const; - + bool IsEndOfPhase() const { return !ShouldEvolveOnPhase(); } // Phase ends when age at or after MS timescale void PerturbLuminosityAndRadius() { } // NO-OP @@ -119,13 +119,13 @@ class MainSequence: virtual public BaseStar { STELLAR_TYPE ResolveEnvelopeLoss(bool p_Force = false); bool ShouldEvolveOnPhase() const { return (m_Age < m_Timescales[static_cast(TIMESCALE::tMS)]); } // Evolve on MS phase if age in MS timescale - + double TAMSCoreMass() const; void UpdateInitialMass() { m_Mass0 = m_Mass; } // Per Hurley et al. 2000, section 7.1 - + void UpdateAfterMerger(double p_Mass, double p_HydrogenMass); - + void UpdateAgeAfterMassLoss(); // Per Hurley et al. 2000, section 7.1 void UpdateMainSequenceCoreMass(const double p_Dt, const double p_MassLossRate); diff --git a/src/Makefile b/src/Makefile index c5b9ba5ed..941426e4d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -106,7 +106,7 @@ ifneq ($(filter fast staticfast,$(MAKECMDGOALS)),) endif # might need -Wno-vla-cxx-extension for clang>18? -EXTRA_WARN_SUPPRESS := -Wno-vla-extension +EXTRA_WARN_SUPPRESS := -Wno-vla-extension CXXFLAGS := -std=c++17 -Wall $(OPTFLAGS) $(CXXFLAGS_SPECIFIC) $(EXTRA_WARN_SUPPRESS) ICFLAGS := -I$(GSLINCDIR) -I$(BOOSTINCDIR) -I$(HDF5INCDIR) -I. diff --git a/src/NS.cpp b/src/NS.cpp index b199db7f0..3842cf470 100755 --- a/src/NS.cpp +++ b/src/NS.cpp @@ -8,8 +8,8 @@ * Hurley et al. 2000, eq 93 * * Called from CalculateCoreCollapseSNParams_Static(), so must be static. - * - * + * + * * double CalculateLuminosityOnPhase_Static(const double p_Mass, const double p_Time) * * @param [IN] p_Mass Mass in Msol @@ -29,7 +29,7 @@ double NS::CalculateLuminosityOnPhase_Static(const double p_Mass, const double p * Hence, timestep is chosen to be small when pulsar is young, and is slowly increased * as the pulsar ages. * - * + * * double ChooseTimestep(const double p_Time) * * @param [IN] p_Time Current age of star in Myr @@ -57,8 +57,8 @@ double NS::ChooseTimestep(const double p_Time) const { * Calculate Neutron Star radius according to selected equation of state (by commandline option) * * Indirectly called from CalculateCoreCollapseSNParams_Static(), so must be static. - * - * + * + * * double CalculateRadiusOnPhaseInKM(const double p_Mass) * * @param [IN] p_Mass Mass in Msol @@ -118,8 +118,8 @@ double NS::CalculateRadiusOnPhaseInKM_Static(const double p_Mass) { * Calculate core collapse Supernova parameters * * Called from GiantBranch, so must be static. - * - * + * + * * DBL_DBL_DBL CalculateCoreCollapseSNParams_Static(const double p_Mass) * * @param [IN] p_Mass Mass in Msol @@ -136,8 +136,8 @@ DBL_DBL_DBL NS::CalculateCoreCollapseSNParams_Static(const double p_Mass) { /* * Calculate the spin period of a Pulsar at birth according to selected distribution (by commandline option) - * Users should note that when choosing the NOSPIN option, - * pulsar spin frequency is set to 0 and spin period is infinity. + * Users should note that when choosing the NOSPIN option, + * pulsar spin frequency is set to 0 and spin period is infinity. * * double CalculateBirthSpinPeriod() * @@ -203,13 +203,13 @@ double NS::CalculateBirthMagneticField() { double maximum = OPTIONS->PulsarBirthMagneticFieldDistributionMax(); double minimum = OPTIONS->PulsarBirthMagneticFieldDistributionMin(); - + log10B = minimum + (RAND->Random() * (maximum - minimum)); } break; case PULSAR_BIRTH_MAGNETIC_FIELD_DISTRIBUTION::UNIFORM: { // UNIFORM flat distribution used in Kiel et al 2008 https://arxiv.org/abs/0805.0059 (log10B0min = 11, log10B0max = 13.5 see section 3.4 and Table 1.) - + double maximum = PPOW(10.0, OPTIONS->PulsarBirthMagneticFieldDistributionMax()); double minimum = PPOW(10.0, OPTIONS->PulsarBirthMagneticFieldDistributionMin()); @@ -247,7 +247,7 @@ double NS::CalculateBirthMagneticField() { /* * Calculate the moment of inertia for a Neutron Star using a model independent relation between * the moment of inertia, mass and radius of a neutron star - return MoI in CGS. - * + * * Uses m_Mass and m_Radius to calculate moment of inertia. * * Raithel et al. 2016, eq 8 in https://arxiv.org/abs/1603.06594 @@ -269,15 +269,15 @@ double NS::CalculateMomentOfInertiaCGS_Static(const double p_Mass, const double * Calculate the spin down rate for isolated Neutron Stars in cgs * * See Equation 5 in https://arxiv.org/abs/2406.11428 - * Note that magnetic and rotational axes are orthogonal, leading to sin^2(alpha) = 1 in this equation. - * A model with evolving alpha will be implemented in a future version. - * + * Note that magnetic and rotational axes are orthogonal, leading to sin^2(alpha) = 1 in this equation. + * A model with evolving alpha will be implemented in a future version. + * * Calculates spindown with P and Pdot, then converts to OmegaDot for recording in the log file. - * Evolution of the inclination between pulsar magnetic and rotational axes will be considered in a future version. + * Evolution of the inclination between pulsar magnetic and rotational axes will be considered in a future version. * * double CalculateSpinDownRate(const double p_Omega, const double p_MomentOfInteria, const double p_MagField, const double p_Radius) * - * @param [IN] p_Period Pulsar spin period (s). + * @param [IN] p_Period Pulsar spin period (s). * @param [IN] p_MomentOfInteria Moment of Inertia of the Neutron Star (g cm^2) * @param [IN] p_MagField Magnetic field (Gauss ) * @param [IN] p_Radius Radius of the Neutron Star (kilometres) @@ -289,22 +289,22 @@ double NS::CalculateSpinDownRate(const double p_Period, const double p_MomentOfI double cgsRadius = p_Radius * KM_TO_CM; // radius in cm double radius_6 = cgsRadius * cgsRadius * cgsRadius * cgsRadius * cgsRadius * cgsRadius; - + double magField_2 = p_MagField * p_MagField; constexpr double _8_PI_2 = 8.0 * PI_2; constexpr double _3_C_3 = 3.0E6 * C * C * C; // 3.0 * (C * 100.0) * (C * 100.0) * (C * 100.0) double pDotTop = _8_PI_2 * radius_6 * magField_2; double pDotBottom = _3_C_3 * p_MomentOfInteria * p_Period; - double pDot = pDotTop / pDotBottom; // period derivative - - return pDot; + double pDot = pDotTop / pDotBottom; // period derivative + + return pDot; } /* * Calculate and set pulsar parameters at birth of pulsar. - * Users should note that when choosing the NOSPIN option, - * pulsar spin frequency is set to 0 and spin period is infinity. + * Users should note that when choosing the NOSPIN option, + * pulsar spin frequency is set to 0 and spin period is infinity. * * Modifies the following class member variables: * @@ -315,32 +315,32 @@ double NS::CalculateSpinDownRate(const double p_Period, const double p_MomentOfI * m_PulsarDetails.magneticField * m_PulsarDetails.spinDownRate * m_PulsarDetails.spinFrequency - * - * + * + * * void CalculateAndSetPulsarParameters() */ void NS::CalculateAndSetPulsarParameters() { - m_PulsarDetails.magneticField = PPOW(10.0, CalculateBirthMagneticField()); // magnetic field in Gauss + m_PulsarDetails.magneticField = PPOW(10.0, CalculateBirthMagneticField()); // magnetic field in Gauss m_PulsarDetails.spinPeriod = CalculateBirthSpinPeriod(); // spin period in s m_MomentOfInertia_CGS = CalculateMomentOfInertiaCGS(); // MoI in CGS g cm^2 - - m_PulsarDetails.spinFrequency = _2_PI / m_PulsarDetails.spinPeriod; - m_PulsarDetails.birthPeriod = m_PulsarDetails.spinPeriod; - m_PulsarDetails.spinDownRate = CalculateSpinDownRate(m_PulsarDetails.spinPeriod, m_MomentOfInertia_CGS, m_PulsarDetails.magneticField, m_Radius * RSOL_TO_KM); - m_PulsarDetails.birthSpinDownRate = m_PulsarDetails.spinDownRate; + m_PulsarDetails.spinFrequency = _2_PI / m_PulsarDetails.spinPeriod; + m_PulsarDetails.birthPeriod = m_PulsarDetails.spinPeriod; + + m_PulsarDetails.spinDownRate = CalculateSpinDownRate(m_PulsarDetails.spinPeriod, m_MomentOfInertia_CGS, m_PulsarDetails.magneticField, m_Radius * RSOL_TO_KM); + m_PulsarDetails.birthSpinDownRate = m_PulsarDetails.spinDownRate; m_AngularMomentum_CGS = m_MomentOfInertia_CGS * m_PulsarDetails.spinFrequency; // in CGS g cm^2 s^-1 } /* * Update the magnetic field and spins of isolated pulsar - * Users should note that when pulsar is not spinning, - * this function exits without changing anything. - * Note that we assume the rotational and magnetic axis + * Users should note that when pulsar is not spinning, + * this function exits without changing anything. + * Note that we assume the rotational and magnetic axis * are orthogonal and are not evolved in the current model. - * A model with evolving alpha will be implemented in a future version. + * A model with evolving alpha will be implemented in a future version. * * Modifies the following class member variables: * @@ -362,34 +362,34 @@ void NS::SpinDownIsolatedPulsar(const double p_Stepsize) { double radius_6 = radius_3 * radius_3; constexpr double _8_PI_2 = 8.0 * PI_2; constexpr double _3_C_3 = 3.0E6 * C * C * C; // 3.0 * (C * 100.0) * (C * 100.0) * (C * 100.0) - - double initialMagField = m_PulsarDetails.magneticField; + + double initialMagField = m_PulsarDetails.magneticField; double initialSpinPeriod = m_PulsarDetails.spinPeriod; - + // calculate the decay of magnetic field for an isolated neutron star - // see Equation 6 in arXiv:0903.3538v2 + // see Equation 6 in arXiv:0903.3538v2 if (utils::Compare(initialMagField, NS::NS_MAG_FIELD_LOWER_LIMIT) < 0) { - // if magnetic field is already lower than the lower limit, + // if magnetic field is already lower than the lower limit, // set it to the value at the beginning of the timestep. m_PulsarDetails.magneticField = initialMagField; } else { - m_PulsarDetails.magneticField = NS::NS_MAG_FIELD_LOWER_LIMIT + (initialMagField - NS::NS_MAG_FIELD_LOWER_LIMIT) * std::exp(-p_Stepsize / NS::NS_DECAY_TIME_SCALE); // update pulsar magnetic field in cgs. + m_PulsarDetails.magneticField = NS::NS_MAG_FIELD_LOWER_LIMIT + (initialMagField - NS::NS_MAG_FIELD_LOWER_LIMIT) * std::exp(-p_Stepsize / NS::NS_DECAY_TIME_SCALE); // update pulsar magnetic field in cgs. } // calculate the spin down rate for isolated neutron stars // see Equation 3 in arxiv:2406.11428 - // Note that magnetic and rotational axes are orthogonal, leading to sin^2(alpha) = 1 in this equation. - // The rest of the calculations are carried out in cgs. + // Note that magnetic and rotational axes are orthogonal, leading to sin^2(alpha) = 1 in this equation. + // The rest of the calculations are carried out in cgs. double constant2 = (_8_PI_2 * radius_6) / (_3_C_3 * m_MomentOfInertia_CGS); double term1 = NS::NS_MAG_FIELD_LOWER_LIMIT * NS::NS_MAG_FIELD_LOWER_LIMIT * p_Stepsize; double term2 = NS::NS_DECAY_TIME_SCALE * NS::NS_MAG_FIELD_LOWER_LIMIT * ( m_PulsarDetails.magneticField - initialMagField); double term3 = (NS::NS_DECAY_TIME_SCALE / 2.0) * ((m_PulsarDetails.magneticField * m_PulsarDetails.magneticField) - (initialMagField * initialMagField)); double Psquared = 2.0 * constant2 * (term1 - term2 - term3) + (initialSpinPeriod * initialSpinPeriod); - + m_PulsarDetails.spinPeriod = std::sqrt(Psquared); m_PulsarDetails.spinFrequency = _2_PI / m_PulsarDetails.spinPeriod; // pulsar spin frequency - m_PulsarDetails.spinDownRate = CalculateSpinDownRate(m_PulsarDetails.spinPeriod, m_MomentOfInertia_CGS, m_PulsarDetails.magneticField, m_Radius * RSOL_TO_KM) ; + m_PulsarDetails.spinDownRate = CalculateSpinDownRate(m_PulsarDetails.spinPeriod, m_MomentOfInertia_CGS, m_PulsarDetails.magneticField, m_Radius * RSOL_TO_KM) ; m_AngularMomentum_CGS = m_PulsarDetails.spinFrequency * m_MomentOfInertia_CGS; // angular momentum of star in CGS } @@ -398,12 +398,12 @@ void NS::SpinDownIsolatedPulsar(const double p_Stepsize) { /* * Calculate the change in angular momentum wrt mass (dJ/dM) of a neutron star when it accretes mass through RLOF * Note: this function uses CGS units and requires parameters in CGS units where applicable - * + * * See sec. 2.2.1 in arxiv:1912.02415 - * + * * * double DeltaJByAccretion_Static(const double p_Mass, const double p_Radius_6, const double p_MagField, const double p_SpinFrequency, const double p_mDot, const double p_Epsilon) - * + * * @param [IN] p_Mass Initial mass of the NS (g) * @param [IN] p_Radius_6 (Radius of the NS (cm))^6 (for performance - so it isn't calculated at every integration step) * @param [IN] p_MagField NS magnetic field strength at the beginning of accretion (Gauss) @@ -415,13 +415,13 @@ void NS::SpinDownIsolatedPulsar(const double p_Stepsize) { double NS::DeltaJByAccretion_Static(const double p_Mass, const double p_Radius_6, const double p_MagField, const double p_SpinFrequency, const double p_mDot, const double p_Epsilon) { // calculate the Alfven radius for an accreting neutron star - // see eq 10 in arxiv:1912.02415 + // see eq 10 in arxiv:1912.02415 double p = p_Radius_6 * p_Radius_6 / (p_mDot * p_mDot * p_Mass); double q = PPOW(p, 1.0 / 7.0); double magneticRadius = ALFVEN_CONST * q * PPOW(p_MagField, 4.0 / 7.0) / 2.0; // Alfven radius / 2.0 (cm) - + // calculate the difference in the keplerian angular velocity at the magnetic radius and surface angular velocity of the NS - // see eq 2 in 1994MNRAS.269..455J / eq 9 in arxiv:1912.02415 + // see eq 2 in 1994MNRAS.269..455J / eq 9 in arxiv:1912.02415 double omegaK = std::sqrt(G_CGS * p_Mass / magneticRadius) / magneticRadius; // rad/s double vDiff = omegaK - p_SpinFrequency; // rad/s @@ -432,28 +432,28 @@ double NS::DeltaJByAccretion_Static(const double p_Mass, const double p_Radius_6 /* * Update the magnetic field and spins of neutron stars in the following situations: * Note 1 : this function uses CGS units and requires parameters in CGS units where applicable - * Note 2 : Users should note that when pulsar is not spinning (frequency or magnetic field == 0), + * Note 2 : Users should note that when pulsar is not spinning (frequency or magnetic field == 0), * pulsar spin period is set to infinity and all other parameters to 0. - * + * * 1). Isolated or post mass-transfer spin-down of neutron star - * 2). Neutron star in interacting binary system experiencing mass-transfer induced spin change for - * 2.1). Roche Lobe overflow, and - * 2.2). Common Envelope - * + * 2). Neutron star in interacting binary system experiencing mass-transfer induced spin change for + * 2.1). Roche Lobe overflow, and + * 2.2). Common Envelope + * * Modifies the following class member variables: * * m_AngularMomentum_CGS - * m_MomentOfInertia_CGS + * m_MomentOfInertia_CGS * m_PulsarDetails.spinFrequency * m_PulsarDetails.spinPeriod * m_PulsarDetails.magneticField * m_PulsarDetails.spinDownRate * * - * void UpdateMagneticFieldAndSpin(const bool p_CommonEnvelope, - * const bool p_RecycledNS, - * const double p_Stepsize, - * const double p_MassGain, + * void UpdateMagneticFieldAndSpin(const bool p_CommonEnvelope, + * const bool p_RecycledNS, + * const double p_Stepsize, + * const double p_MassGain, * const double p_Epsilon) * * @param [IN] p_CommonEnvelope Boolean flag indicating whether there there is a common envelope @@ -471,32 +471,32 @@ void NS::UpdateMagneticFieldAndSpin(const bool p_CommonEnvelope, const bool p_Re double massG = m_Mass * MSOL_TO_G; // mass in g double radiusCM = m_Radius * RSOL_TO_CM; // radius in cm - m_MomentOfInertia_CGS = CalculateMomentOfInertiaCGS(); - double jAcc = std::sqrt(G_CGS * massG * radiusCM) * p_MassGain; + m_MomentOfInertia_CGS = CalculateMomentOfInertiaCGS(); + double jAcc = std::sqrt(G_CGS * massG * radiusCM) * p_MassGain; m_AngularMomentum_CGS += jAcc; // angular momentum of the accreted material as it falls onto the surface of the NS if (utils::Compare(m_PulsarDetails.magneticField, NS::NS_MAG_FIELD_LOWER_LIMIT) < 0) { - // if magnetic field is already lower than the lower limit, + // if magnetic field is already lower than the lower limit, // set it to the lower limit value. m_PulsarDetails.magneticField = NS::NS_MAG_FIELD_LOWER_LIMIT; } else { - m_PulsarDetails.magneticField = (m_PulsarDetails.magneticField - NS::NS_MAG_FIELD_LOWER_LIMIT) * std::exp(-p_MassGain / G_TO_KG / NS::NS_DECAY_MASS_SCALE) + NS::NS_MAG_FIELD_LOWER_LIMIT; // eq. 12 in arxiv:1912.02415 + m_PulsarDetails.magneticField = (m_PulsarDetails.magneticField - NS::NS_MAG_FIELD_LOWER_LIMIT) * std::exp(-p_MassGain / G_TO_KG / NS::NS_DECAY_MASS_SCALE) + NS::NS_MAG_FIELD_LOWER_LIMIT; // eq. 12 in arxiv:1912.02415 } - + double previousSpinFrequency = m_PulsarDetails.spinFrequency; m_PulsarDetails.spinFrequency = m_AngularMomentum_CGS / m_MomentOfInertia_CGS; m_PulsarDetails.spinPeriod = _2_PI / m_PulsarDetails.spinFrequency; double fDot = (m_PulsarDetails.spinFrequency - previousSpinFrequency) / p_Stepsize; - + m_PulsarDetails.spinDownRate = -fDot * m_PulsarDetails.spinPeriod * m_PulsarDetails.spinPeriod / _2_PI; - } + } else if (utils::Compare(p_MassGain, 0.0) > 0 && - utils::Compare(m_PulsarDetails.spinPeriod, 0.001) > 0 && + utils::Compare(m_PulsarDetails.spinPeriod, 0.001) > 0 && (!p_CommonEnvelope || (p_CommonEnvelope && OPTIONS->NeutronStarAccretionInCE() == NS_ACCRETION_IN_CE::DISK))) { // pulsar recycling through accretion // recycling happens for pulsars with spin period larger than 1 ms and in a binary system with mass transfer // the pulsar being recycled is either in a common envelope, or should have started the recycling process in previous time steps - + // solve for the angular momentum of the NS after accretion // the accretor will gain p_MassGain g over p_Stepsize seconds @@ -534,19 +534,19 @@ void NS::UpdateMagneticFieldAndSpin(const bool p_CommonEnvelope, const bool p_Re double m = p_Mass + p_MassDelta; double B = (p_MagField - NS::NS_MAG_FIELD_LOWER_LIMIT) * std::exp(-p_MassDelta / NS::NS_DECAY_MASS_SCALE) + NS::NS_MAG_FIELD_LOWER_LIMIT; double f = x[0] / CalculateMomentOfInertiaCGS_Static(m, p_Radius); - dxdm[0] = DeltaJByAccretion_Static(m, p_Radius_6, B, f, p_Mdot, p_Epsilon); + dxdm[0] = DeltaJByAccretion_Static(m, p_Radius_6, B, f, p_Mdot, p_Epsilon); } }; // integrate controlled_stepper_type stepper; (void)integrate_adaptive(stepper, ode{ initialMass, radius, radius_6, initialMagField, mDot, p_Epsilon }, x, 0.0, p_MassGain, massSlice); - + // final values m_AngularMomentum_CGS = x[0]; m_MomentOfInertia_CGS = CalculateMomentOfInertiaCGS_Static(massFinal, radius); if (utils::Compare(initialMagField, NS::NS_MAG_FIELD_LOWER_LIMIT) < 0) { - // if magnetic field is already lower than the lower limit, + // if magnetic field is already lower than the lower limit, // set it to the lower limit value. m_PulsarDetails.magneticField = NS::NS_MAG_FIELD_LOWER_LIMIT; } @@ -555,33 +555,33 @@ void NS::UpdateMagneticFieldAndSpin(const bool p_CommonEnvelope, const bool p_Re } m_PulsarDetails.spinFrequency = m_AngularMomentum_CGS / m_MomentOfInertia_CGS; m_PulsarDetails.spinPeriod = _2_PI / m_PulsarDetails.spinFrequency; - double fDot = (m_AngularMomentum_CGS - initialAngularMomentum_CGS) / m_MomentOfInertia_CGS / p_Stepsize; // eq. 11 in arxiv:1912.02415 + double fDot = (m_AngularMomentum_CGS - initialAngularMomentum_CGS) / m_MomentOfInertia_CGS / p_Stepsize; // eq. 11 in arxiv:1912.02415 m_PulsarDetails.spinDownRate = -fDot * m_PulsarDetails.spinPeriod * m_PulsarDetails.spinPeriod / _2_PI; - } - else { // otherwise... + } + else { // otherwise... SpinDownIsolatedPulsar(p_Stepsize); // ...treat the pulsar as isolated - spin down } } -/* +/* * Resolve common envelope accretion * * For stellar types other than Black hole or Neutron Star just set the star's mass to the parameter passed * For Black holes or Neutron Stars calculate the mass accreted during a CE * * - * double ResolveCommonEnvelopeAccretion(const double p_FinalMass, - * const double p_CompanionMass, - * const double p_CompanionRadius, + * double ResolveCommonEnvelopeAccretion(const double p_FinalMass, + * const double p_CompanionMass, + * const double p_CompanionRadius, * const double p_CompanionEnvelope) * * @param [IN] p_FinalMass Mass of the accreting object post mass transfer (Msol) (not used here) * @param [IN] p_CompanionMass Mass of the companion * @param [IN] p_CompanionRadius Radius of the companion * @param [IN] p_CompanionEnvelope Envelope of the companion pre-CE - * @return Mass delta - * + * @return Mass delta + * */ double NS::ResolveCommonEnvelopeAccretion(const double p_FinalMass, const double p_CompanionMass, @@ -589,4 +589,3 @@ double NS::ResolveCommonEnvelopeAccretion(const double p_FinalMass, const double p_CompanionEnvelope) { return CalculateMassAccretedForCO(Mass(), p_CompanionMass, p_CompanionRadius, p_CompanionEnvelope); } - diff --git a/src/NS.h b/src/NS.h index a789371e6..b797b8b06 100755 --- a/src/NS.h +++ b/src/NS.h @@ -25,9 +25,9 @@ class NS: virtual public BaseStar, public Remnants { ALFVEN_CONST = PPOW(2.0 * PI_2 / G_CGS, 1.0 / 7.0); NS_MAG_FIELD_LOWER_LIMIT = PPOW(10.0, OPTIONS->PulsarLog10MinimumMagneticField()); NS_DECAY_MASS_SCALE = OPTIONS->PulsarMagneticFieldDecayMassscale() * MSOL_TO_G; - NS_DECAY_TIME_SCALE = OPTIONS->PulsarMagneticFieldDecayTimescale() * MYR_TO_YEAR * SECONDS_IN_YEAR; + NS_DECAY_TIME_SCALE = OPTIONS->PulsarMagneticFieldDecayTimescale() * MYR_TO_YEAR * SECONDS_IN_YEAR; }; - + NS(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), Remnants(p_BaseStar) { m_StellarType = STELLAR_TYPE::NEUTRON_STAR; // Set stellar type @@ -36,21 +36,21 @@ class NS: virtual public BaseStar, public Remnants { ALFVEN_CONST = PPOW(2.0 * PI_2 / G_CGS, 1.0 / 7.0); NS_MAG_FIELD_LOWER_LIMIT = PPOW(10.0, OPTIONS->PulsarLog10MinimumMagneticField()); NS_DECAY_MASS_SCALE = OPTIONS->PulsarMagneticFieldDecayMassscale() * MSOL_TO_G; - NS_DECAY_TIME_SCALE = OPTIONS->PulsarMagneticFieldDecayTimescale() * MYR_TO_YEAR * SECONDS_IN_YEAR; + NS_DECAY_TIME_SCALE = OPTIONS->PulsarMagneticFieldDecayTimescale() * MYR_TO_YEAR * SECONDS_IN_YEAR; if (p_Initialise) Initialise(); // Initialise if required } NS* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - NS* clone = new NS(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + NS* clone = new NS(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static NS* Clone(NS& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - NS* clone = new NS(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + NS* clone = new NS(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -63,7 +63,7 @@ class NS: virtual public BaseStar, public Remnants { static inline double ALFVEN_CONST { 0.0 }; // Constant for calculating Alfven radius - CGS units (mu0 = 1.0) static inline double NS_MAG_FIELD_LOWER_LIMIT { 0.0 }; static inline double NS_DECAY_MASS_SCALE { 0.0 }; - static inline double NS_DECAY_TIME_SCALE { 0.0 }; + static inline double NS_DECAY_TIME_SCALE { 0.0 }; // member functions - alphabetically @@ -75,16 +75,16 @@ class NS: virtual public BaseStar, public Remnants { protected: - + void Initialise() { - + // set internal properties to zero to avoid meaningless values m_Age = 0.0; m_COCoreMass = 0.0; m_HeCoreMass = 0.0; m_CoreMass = 0.0; m_Mass0 = 0.0; - + EvolveOnPhase(0.0); CalculateAndSetPulsarParameters(); @@ -101,26 +101,26 @@ class NS: virtual public BaseStar, public Remnants { double CalculateBirthMagneticField(); double CalculateBirthSpinPeriod(); - + double CalculateCriticalMassRatioHurleyHjellmingWebbink() const { return 0.0; } static double CalculateLuminosityOnPhase_Static(const double p_Mass, const double p_Time); double CalculateLuminosityOnPhase() const { return CalculateLuminosityOnPhase_Static(m_Mass, m_Age); } // Use class member variables double CalculateMassLossRate() { return 0.0; } // Ensure that NSs don't lose mass in winds - - static double CalculateMomentOfInertiaCGS_Static(const double p_Mass, const double p_Radius); // MoI in CGS + + static double CalculateMomentOfInertiaCGS_Static(const double p_Mass, const double p_Radius); // MoI in CGS double CalculateMomentOfInertiaCGS() const { return CalculateMomentOfInertiaCGS_Static(m_Mass * MSOL_TO_G, m_Radius * RSOL_TO_CM); } // MOI in CGS - use member variables double CalculateMomentOfInertia() const { return CalculateMomentOfInertiaCGS() / MSOL_TO_G / RSOL_TO_CM / RSOL_TO_CM; } // MoI (default is solar units) static double CalculateRadiusOnPhaseInKM_Static(const double p_Mass); // Radius on phase in km static double CalculateRadiusOnPhase_Static(const double p_Mass) { return CalculateRadiusOnPhaseInKM_Static(p_Mass) * KM_TO_RSOL; } // Radius on phase in Rsol double CalculateRadiusOnPhase() const { return CalculateRadiusOnPhase_Static(m_Mass); } // Radius on phase in Rsol - + double CalculateRadiusOnPhase(double p_Mass, double p_Luminosity) const { return CalculateRadiusOnPhase(); } // not a meaningful calculation for NS, ignore arguments double CalculateSpinDownRate(const double p_Omega, const double p_MomentOfInteria, const double p_MagField, const double p_Radius) const; - + void CalculateTimescales(const double p_Mass, DBL_VECTOR &p_Timescales) { } // not a meaningful calculation for NS and BH void CalculateTimescales() { } // not a meaningful calculation for NS and BH @@ -132,7 +132,7 @@ class NS: virtual public BaseStar, public Remnants { const double p_CompanionMass = 0.0, const double p_CompanionRadius = 0.0, const double p_CompanionEnvelope = 0.0); - + bool ShouldEvolveOnPhase() const { return (m_Mass <= OPTIONS->MaximumNeutronStarMass()); } // Evolve as a neutron star unless mass > maximum neutron star mass (e.g. through accretion) void SpinDownIsolatedPulsar(const double p_Stepsize); void UpdateMagneticFieldAndSpin(const bool p_CommonEnvelope, diff --git a/src/ONeWD.cpp b/src/ONeWD.cpp index 0439a3c9c..327248802 100755 --- a/src/ONeWD.cpp +++ b/src/ONeWD.cpp @@ -35,4 +35,3 @@ bool ONeWD::IsSupernova() const { STELLAR_TYPE ONeWD::EvolveToNextPhase() { return ResolveAIC(); } - diff --git a/src/ONeWD.h b/src/ONeWD.h index a0103b5d8..d7bf5c712 100755 --- a/src/ONeWD.h +++ b/src/ONeWD.h @@ -15,31 +15,31 @@ class ONeWD: virtual public BaseStar, public WhiteDwarfs { public: ONeWD() { m_StellarType = STELLAR_TYPE::OXYGEN_NEON_WHITE_DWARF; }; - + ONeWD(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), WhiteDwarfs(p_BaseStar) { m_StellarType = STELLAR_TYPE::OXYGEN_NEON_WHITE_DWARF; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } ONeWD* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - ONeWD* clone = new ONeWD(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + ONeWD* clone = new ONeWD(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static ONeWD* Clone(ONeWD& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - ONeWD* clone = new ONeWD(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + ONeWD* clone = new ONeWD(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } // member functions - static double CalculateLuminosityOnPhase_Static(const double p_Mass, - const double p_Time, - const double p_Metallicity) { return WhiteDwarfs::CalculateLuminosityOnPhase_Static(p_Mass, - p_Time, - p_Metallicity, + static double CalculateLuminosityOnPhase_Static(const double p_Mass, + const double p_Time, + const double p_Metallicity) { return WhiteDwarfs::CalculateLuminosityOnPhase_Static(p_Mass, + p_Time, + p_Metallicity, WD_Baryon_Number.at(STELLAR_TYPE::OXYGEN_NEON_WHITE_DWARF)); } protected: @@ -51,7 +51,7 @@ class ONeWD: virtual public BaseStar, public WhiteDwarfs { m_HShell = 0.0; // Initialize hydrogen shell m_HeShell = 0.0; // Initialize helium shell m_AccretionRegime = ACCRETION_REGIME::ZERO; - + EvolveOnPhase(0.0); } @@ -60,10 +60,10 @@ class ONeWD: virtual public BaseStar, public WhiteDwarfs { double CalculateHeliumAbundanceCoreOnPhase() const { return 0.0; }; double CalculateHeliumAbundanceSurfaceOnPhase() const { return 0.0; }; - + double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; }; double CalculateHydrogenAbundanceSurfaceOnPhase() const { return 0.0; }; - + double CalculateLuminosityOnPhase(const double p_Mass, const double p_Time, const double p_Metallicity) const { return CalculateLuminosityOnPhase_Static(p_Mass, p_Time, p_Metallicity); } @@ -72,9 +72,9 @@ class ONeWD: virtual public BaseStar, public WhiteDwarfs { STELLAR_TYPE EvolveToNextPhase(); - bool IsSupernova() const; - bool ShouldEvolveOnPhase() const; - + bool IsSupernova() const; + bool ShouldEvolveOnPhase() const; + }; #endif // __ONeWD_h__ diff --git a/src/Options.cpp b/src/Options.cpp index ec62db46c..bcb27eba7 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -92,7 +92,7 @@ /* */ /* 13. Add the new option to the default YAML file template in yaml.h if required. While */ /* this is not mandatory, it does help to keep the YAML file ordered and consequently */ -/* relatively easy to read and search for options. */ +/* relatively easy to read and search for options. */ /* */ /******************************************************************************************/ @@ -131,17 +131,17 @@ namespace fs = boost::filesystem; namespace std { // this is required to set default value for boost program options of type STR_VECTOR (std::vector) - std::ostream& operator<<(std::ostream &os, const STR_VECTOR &vec) { + std::ostream& operator<<(std::ostream &os, const STR_VECTOR &vec) { for (auto item : vec) os << item << " "; - return os; + return os; } // this is required to set default value for boost program options of type DBL_VECTOR (std::vector) - std::ostream& operator<<(std::ostream &os, const DBL_VECTOR &vec) { - for (auto item : vec) os << item << " "; - return os; + std::ostream& operator<<(std::ostream &os, const DBL_VECTOR &vec) { + for (auto item : vec) os << item << " "; + return os; } -} +} #define OPT_VALUE1(optName, optValue, fallback) ((m_GridLine.optionValues.m_Populated && \ @@ -164,24 +164,24 @@ Options* Options::Instance() { #define WARNUSER(warnStr) { std::cerr << warnStr << std::endl; } #define WARNUSER_IF(cond, warnStr) { if (cond) WARNUSER(warnStr) } - + /* * Initialise option values - * + * * This function initialises the values of the options - this is where the defaults * are set. If a user does not specify an option, either on the commandline or in * a grid file, the default values are taken from here. - * + * * Note this is a class OptionValues function. - * - * + * + * * void Options::OptionValues::Initialise() - * + * */ void Options::OptionValues::Initialise() { - m_Populated = false; + m_Populated = false; // set all options to their default values @@ -251,7 +251,7 @@ void Options::OptionValues::Initialise() { m_TimestepMultiplier = 1.0; m_TimestepMultipliers.clear(); - + // Initial mass options m_InitialMass = 5.0; m_InitialMass1 = 5.0; @@ -286,15 +286,15 @@ void Options::OptionValues::Initialise() { m_OrbitalPeriod = 0.1; // Only used if user specified and semi-major axis not specified // There is a single distribution available for orbital period (and actually, - // eventually, it will be the case for all initial attributes that we have a - // single "convenience" distribution available in the C++ code - we expect + // eventually, it will be the case for all initial attributes that we have a + // single "convenience" distribution available in the C++ code - we expect // users will sample outside the C++ code (with Stroopwafel etc.) so that we // don't have to code and maintain everybody's favourite distribution inside // the C++ code). // // The orbital period distribution will only used if it is specified by the // user AND semi-major axis (--semi-major-axis), orbital period (--orbital-period), - // and semi-major axis distribution (--semi-major-axis-distribution) are NOT + // and semi-major axis distribution (--semi-major-axis-distribution) are NOT // specified by the user. // // This --orbital-period-distribution option exists even though there is no real @@ -308,7 +308,7 @@ void Options::OptionValues::Initialise() { // Eccentricity m_Eccentricity = 0.0; - m_EccentricityDistribution.type = ECCENTRICITY_DISTRIBUTION::ZERO; + m_EccentricityDistribution.type = ECCENTRICITY_DISTRIBUTION::ZERO; m_EccentricityDistribution.typeString = ECCENTRICITY_DISTRIBUTION_LABEL.at(m_EccentricityDistribution.type); m_EccentricityDistributionMin = 0.0; m_EccentricityDistributionMax = 1.0; @@ -332,7 +332,7 @@ void Options::OptionValues::Initialise() { // Kick magnitude m_KickMagnitude = 0.0; m_KickMagnitude1 = 0.0; - m_KickMagnitude2 = 0.0; + m_KickMagnitude2 = 0.0; m_MullerMandelKickBH = MULLERMANDEL_KICKBH; m_MullerMandelKickNS = MULLERMANDEL_KICKNS; @@ -353,7 +353,7 @@ void Options::OptionValues::Initialise() { m_KickPhi2 = 0.0; // actual value set later // Theta - m_KickTheta1 = 0.0; // actual value set later + m_KickTheta1 = 0.0; // actual value set later m_KickTheta2 = 0.0; // actual value set later // Black hole kicks mode @@ -367,10 +367,10 @@ void Options::OptionValues::Initialise() { // Rocket kicks m_RocketKickMagnitude1 = 0.0; m_RocketKickMagnitude2 = 0.0; - m_RocketKickPhi1 = 0.0; - m_RocketKickPhi2 = 0.0; - m_RocketKickTheta1 = 0.0; - m_RocketKickTheta2 = 0.0; + m_RocketKickPhi1 = 0.0; + m_RocketKickPhi2 = 0.0; + m_RocketKickTheta1 = 0.0; + m_RocketKickTheta2 = 0.0; // Chemically Homogeneous Evolution Mode m_CheMode.type = CHE_MODE::PESSIMISTIC; @@ -406,25 +406,25 @@ void Options::OptionValues::Initialise() { m_UsePulsationalPairInstability = true; m_PulsationalPairInstabilityLowerLimit = 35.0; // Belczynski+ 2016 is 45 Msol m_PulsationalPairInstabilityUpperLimit = 60.0; // Belczynski+ 2016 is 65 Msol - + m_PulsationalPairInstabilityCOCoreShiftHendriks = 0.0; // Shift in CO Core mass in Hendriks+23 m_PulsationalPairInstabilityPrescription.type = PPI_PRESCRIPTION::MARCHANT; m_PulsationalPairInstabilityPrescription.typeString = PPI_PRESCRIPTION_LABEL.at(m_PulsationalPairInstabilityPrescription.type); m_MaximumNeutronStarMass = 2.5; // StarTrack is 3.0 - + m_mCBUR1 = MCBUR1HURLEY; // Hurley value, Fryer+ and Belczynski+ use 1.83 // Output path m_OutputPathString = "."; m_OutputContainerName = DEFAULT_OUTPUT_CONTAINER_NAME; - + // Mass loss options m_CheckPhotonTiringLimit = false; - + m_EnableRotationallyEnhancedMassLoss = false; m_ExpelConvectiveEnvelopeAboveLuminosityThreshold = false; m_LuminosityToMassThreshold = 4.2; // Podsiadlowski, private communication @@ -486,7 +486,7 @@ void Options::OptionValues::Initialise() { m_MassTransferJloss = 1.0; m_MassTransferJlossLinearFractionDegen = 0.5; m_MassTransferJlossLinearFractionNonDegen = 0.5; - + m_MassTransferAngularMomentumLossPrescription.type = MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION::ISOTROPIC_RE_EMISSION; m_MassTransferAngularMomentumLossPrescription.typeString = MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION_LABEL.at(m_MassTransferAngularMomentumLossPrescription.type); @@ -495,7 +495,7 @@ void Options::OptionValues::Initialise() { m_MassTransferRejuvenationPrescription.typeString = MT_REJUVENATION_PRESCRIPTION_LABEL.at(m_MassTransferRejuvenationPrescription.type); // Mass transfer critical mass ratios - defined here as (accretor mass / donor mass) - // A value of 0.0 means the mass transfer will always be stable + // A value of 0.0 means the mass transfer will always be stable m_QCritPrescription.type = QCRIT_PRESCRIPTION::NONE; // Assume no critical mass ratio prescription m_QCritPrescription.typeString = QCRIT_PRESCRIPTION_LABEL.at(m_QCritPrescription.type); @@ -512,7 +512,7 @@ void Options::OptionValues::Initialise() { m_MassTransferCriticalMassRatioGiantNonDegenerateAccretor = -1.0; // Value not used! Claeys+ 2014 uses an equation in mass-radius exponent and core mass (equivalent to Hurley zeta adiabatic definition), so if -1, this value is overwritten later m_MassTransferCriticalMassRatioGiantDegenerateAccretor = 0.87; // Claeys+ 2014 = 0.87 - m_MassTransferCriticalMassRatioHeliumMSNonDegenerateAccretor = 0.0; // Claeys+ 2014 = unspecified + m_MassTransferCriticalMassRatioHeliumMSNonDegenerateAccretor = 0.0; // Claeys+ 2014 = unspecified m_MassTransferCriticalMassRatioHeliumMSDegenerateAccretor = 0.0; // Claeys+ 2014 = unspecified m_MassTransferCriticalMassRatioHeliumHGNonDegenerateAccretor = 0.25; // Claeys+ 2014 = 0.25 @@ -549,7 +549,7 @@ void Options::OptionValues::Initialise() { // Accretion during common envelope m_CommonEnvelopeMassAccretionPrescription.type = CE_ACCRETION_PRESCRIPTION::ZERO; m_CommonEnvelopeMassAccretionPrescription.typeString = CE_ACCRETION_PRESCRIPTION_LABEL.at(m_CommonEnvelopeMassAccretionPrescription.type); - + m_CommonEnvelopeMassAccretionMin = 0.04; m_CommonEnvelopeMassAccretionMax = 0.1; m_CommonEnvelopeMassAccretionConstant = 0.0; @@ -557,7 +557,7 @@ void Options::OptionValues::Initialise() { // Common envelope formalism m_CommonEnvelopeFormalism.type = CE_FORMALISM::ENERGY; m_CommonEnvelopeFormalism.typeString = CE_FORMALISM_LABEL.at(m_CommonEnvelopeFormalism.type); - + // Common envelope lambda prescription m_CommonEnvelopeLambdaPrescription.type = CE_LAMBDA_PRESCRIPTION::NANJING; m_CommonEnvelopeLambdaPrescription.typeString = CE_LAMBDA_PRESCRIPTION_LABEL.at(m_CommonEnvelopeLambdaPrescription.type); @@ -624,7 +624,7 @@ void Options::OptionValues::Initialise() { // Response to super-critical spin-up prescription m_ResponseToSpinUp.type = RESPONSE_TO_SPIN_UP::TRANSFER_TO_ORBIT; m_ResponseToSpinUp.typeString = RESPONSE_TO_SPIN_UP_LABEL.at(m_ResponseToSpinUp.type); - + // Rotational velocity distribution options m_RotationalVelocityDistribution.type = ROTATIONAL_VELOCITY_DISTRIBUTION::ZERO; m_RotationalVelocityDistribution.typeString = ROTATIONAL_VELOCITY_DISTRIBUTION_LABEL.at(m_RotationalVelocityDistribution.type); @@ -648,7 +648,7 @@ void Options::OptionValues::Initialise() { m_LogLevel = 0; m_LogClasses.clear(); - // Logfiles + // Logfiles m_LogfileDefinitionsFilename = ""; m_LogfileNamePrefix = ""; m_LogfileType.type = LOGFILETYPE::HDF5; @@ -674,7 +674,7 @@ void Options::OptionValues::Initialise() { m_AddOptionsToSysParms.type = ADD_OPTIONS_TO_SYSPARMS::GRID; m_AddOptionsToSysParms.typeString = ADD_OPTIONS_TO_SYSPARMS_LABEL.at(m_AddOptionsToSysParms.type); - + m_HDF5BufferSize = HDF5_DEFAULT_IO_BUFFER_SIZE; m_HDF5ChunkSize = HDF5_DEFAULT_CHUNK_SIZE; @@ -693,12 +693,12 @@ void Options::OptionValues::Initialise() { * This function populates the Boost options_description object with all defined * options. The options strings are associated with the variable to be populated * for each option, and the default values are defined. - * + * * Note that both parameters are modified here. - * - * + * + * * bool AddOptions(OptionValues *p_Options, po::options_description *p_OptionsDescription) - * + * * @param [IN/OUT] p_Options Object containing option values * @param [IN/OUT] p_OptionsDescription options_description onject * @return Boolean result: @@ -797,11 +797,11 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt // switches ( - "help,h", + "help,h", po::bool_switch(), "Print this help message (-h is short form, --help includes more information)" ) ( - "version,v", + "version,v", po::bool_switch(), "Print COMPAS version string" ) @@ -821,33 +821,33 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ( "allow-non-stripped-ECSN", - po::value(&p_Options->m_AllowNonStrippedECSN)->default_value(p_Options->m_AllowNonStrippedECSN)->implicit_value(true), + po::value(&p_Options->m_AllowNonStrippedECSN)->default_value(p_Options->m_AllowNonStrippedECSN)->implicit_value(true), ("Allow ECSN to occur in unstripped progenitors (default = " + std::string(p_Options->m_AllowNonStrippedECSN ? "TRUE" : "FALSE") + ")").c_str() ) ( - "allow-rlof-at-birth", - po::value(&p_Options->m_AllowRLOFAtBirth)->default_value(p_Options->m_AllowRLOFAtBirth)->implicit_value(true), + "allow-rlof-at-birth", + po::value(&p_Options->m_AllowRLOFAtBirth)->default_value(p_Options->m_AllowRLOFAtBirth)->implicit_value(true), ("Allow binaries that have one or both stars in RLOF at birth to evolve (default = " + std::string(p_Options->m_AllowRLOFAtBirth ? "TRUE" : "FALSE") + ")").c_str() ) ( - "allow-touching-at-birth", - po::value(&p_Options->m_AllowTouchingAtBirth)->default_value(p_Options->m_AllowTouchingAtBirth)->implicit_value(true), + "allow-touching-at-birth", + po::value(&p_Options->m_AllowTouchingAtBirth)->default_value(p_Options->m_AllowTouchingAtBirth)->implicit_value(true), ("Allow binaries that are touching at birth to evolve (default = " + std::string(p_Options->m_AllowTouchingAtBirth ? "TRUE" : "FALSE") + ")").c_str() ) ( - "angular-momentum-conservation-during-circularisation", - po::value(&p_Options->m_AngularMomentumConservationDuringCircularisation)->default_value(p_Options->m_AngularMomentumConservationDuringCircularisation)->implicit_value(true), + "angular-momentum-conservation-during-circularisation", + po::value(&p_Options->m_AngularMomentumConservationDuringCircularisation)->default_value(p_Options->m_AngularMomentumConservationDuringCircularisation)->implicit_value(true), ("Conserve angular momentum when binary is circularised when entering a Mass Transfer episode (default = " + std::string(p_Options->m_AngularMomentumConservationDuringCircularisation ? "TRUE" : "FALSE") + ")").c_str() ) ( "check-photon-tiring-limit", - po::value(&p_Options->m_CheckPhotonTiringLimit)->default_value(p_Options->m_CheckPhotonTiringLimit)->implicit_value(true), + po::value(&p_Options->m_CheckPhotonTiringLimit)->default_value(p_Options->m_CheckPhotonTiringLimit)->implicit_value(true), ("Check the photon tiring limit hasn't been exceeded by wind mass loss (default = " + std::string(p_Options->m_CheckPhotonTiringLimit ? "TRUE" : "FALSE") + ")").c_str() ) ( - "circularise-binary-during-mass-transfer", - po::value(&p_Options->m_CirculariseBinaryDuringMassTransfer)->default_value(p_Options->m_CirculariseBinaryDuringMassTransfer)->implicit_value(true), + "circularise-binary-during-mass-transfer", + po::value(&p_Options->m_CirculariseBinaryDuringMassTransfer)->default_value(p_Options->m_CirculariseBinaryDuringMassTransfer)->implicit_value(true), ("Circularise binary when it enters a Mass Transfer episode (default = " + std::string(p_Options->m_CirculariseBinaryDuringMassTransfer ? "TRUE" : "FALSE") + ")").c_str() ) ( @@ -856,8 +856,8 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ("Allow immediate post CE RLOF to survive common envelope evolution (default = " + std::string(p_Options->m_AllowImmediateRLOFpostCEToSurviveCommonEnvelope ? "TRUE" : "FALSE") + ")").c_str() ) ( - "common-envelope-allow-main-sequence-survive", - po::value(&p_Options->m_AllowMainSequenceStarToSurviveCommonEnvelope)->default_value(p_Options->m_AllowMainSequenceStarToSurviveCommonEnvelope)->implicit_value(true), + "common-envelope-allow-main-sequence-survive", + po::value(&p_Options->m_AllowMainSequenceStarToSurviveCommonEnvelope)->default_value(p_Options->m_AllowMainSequenceStarToSurviveCommonEnvelope)->implicit_value(true), ("Allow main sequence stars to survive common envelope evolution (default = " + std::string(p_Options->m_AllowMainSequenceStarToSurviveCommonEnvelope ? "TRUE" : "FALSE") + ")").c_str() ) ( @@ -887,38 +887,38 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ) ( - "debug-to-file", - po::value(&p_Options->m_DebugToFile)->default_value(p_Options->m_DebugToFile)->implicit_value(true), + "debug-to-file", + po::value(&p_Options->m_DebugToFile)->default_value(p_Options->m_DebugToFile)->implicit_value(true), ("Write debug statements to file (default = " + std::string(p_Options->m_DebugToFile ? "TRUE" : "FALSE") + ")").c_str() ) ( - "detailed-output", - po::value(&p_Options->m_DetailedOutput)->default_value(p_Options->m_DetailedOutput)->implicit_value(true), + "detailed-output", + po::value(&p_Options->m_DetailedOutput)->default_value(p_Options->m_DetailedOutput)->implicit_value(true), ("Print detailed output to file (default = " + std::string(p_Options->m_DetailedOutput ? "TRUE" : "FALSE") + ")").c_str() ) ( - "enable-rotationally-enhanced-mass-loss", - po::value(&p_Options->m_EnableRotationallyEnhancedMassLoss)->default_value(p_Options->m_EnableRotationallyEnhancedMassLoss)->implicit_value(true), + "enable-rotationally-enhanced-mass-loss", + po::value(&p_Options->m_EnableRotationallyEnhancedMassLoss)->default_value(p_Options->m_EnableRotationallyEnhancedMassLoss)->implicit_value(true), ("Enable rotationally enhanced mass loss for rapidly rotating stars following Langer 1998 (default = " + std::string(p_Options->m_EnableRotationallyEnhancedMassLoss ? "TRUE" : "FALSE") + ")").c_str() ) ( - "enable-warnings", - po::value(&p_Options->m_EnableWarnings)->default_value(p_Options->m_EnableWarnings)->implicit_value(true), + "enable-warnings", + po::value(&p_Options->m_EnableWarnings)->default_value(p_Options->m_EnableWarnings)->implicit_value(true), ("Display warning messages to stdout (default = " + std::string(p_Options->m_EnableWarnings ? "TRUE" : "FALSE") + ")").c_str() ) ( - "enhance-CHE-lifetimes-luminosities", - po::value(&p_Options->m_EnhanceCHELifetimesLuminosities)->default_value(p_Options->m_EnhanceCHELifetimesLuminosities)->implicit_value(true), + "enhance-CHE-lifetimes-luminosities", + po::value(&p_Options->m_EnhanceCHELifetimesLuminosities)->default_value(p_Options->m_EnhanceCHELifetimesLuminosities)->implicit_value(true), ("Whether to enhance the lifetimes and luminosities of chemically homogeneously evolving (CHE) stars relative to SSE main sequence lifetimes/luminosities (default = " + std::string(p_Options->m_EnhanceCHELifetimesLuminosities ? "TRUE" : "FALSE") + ")").c_str() ) ( - "errors-to-file", - po::value(&p_Options->m_ErrorsToFile)->default_value(p_Options->m_ErrorsToFile)->implicit_value(true), + "errors-to-file", + po::value(&p_Options->m_ErrorsToFile)->default_value(p_Options->m_ErrorsToFile)->implicit_value(true), ("Write error messages to file (default = " + std::string(p_Options->m_ErrorsToFile ? "TRUE" : "FALSE") + ")").c_str() ) ( - "evolve-double-white-dwarfs", - po::value(&p_Options->m_EvolveDoubleWhiteDwarfs)->default_value(p_Options->m_EvolveDoubleWhiteDwarfs)->implicit_value(true), + "evolve-double-white-dwarfs", + po::value(&p_Options->m_EvolveDoubleWhiteDwarfs)->default_value(p_Options->m_EvolveDoubleWhiteDwarfs)->implicit_value(true), ("Evolve Double White Dwarfs (default = " + std::string(p_Options->m_EvolveDoubleWhiteDwarfs ? "TRUE" : "FALSE") + ")").c_str() ) ( @@ -927,18 +927,18 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ("Continue evolving main sequence merger products (default = " + std::string(p_Options->m_EvolveMainSequenceMergers ? "TRUE" : "FALSE") + ")").c_str() ) ( - "evolve-pulsars", - po::value(&p_Options->m_EvolvePulsars)->default_value(p_Options->m_EvolvePulsars)->implicit_value(true), + "evolve-pulsars", + po::value(&p_Options->m_EvolvePulsars)->default_value(p_Options->m_EvolvePulsars)->implicit_value(true), ("Evolve pulsars (default = " + std::string(p_Options->m_EvolvePulsars ? "TRUE" : "FALSE") + ")").c_str() ) ( - "evolve-unbound-systems", - po::value(&p_Options->m_EvolveUnboundSystems)->default_value(p_Options->m_EvolveUnboundSystems)->implicit_value(true), + "evolve-unbound-systems", + po::value(&p_Options->m_EvolveUnboundSystems)->default_value(p_Options->m_EvolveUnboundSystems)->implicit_value(true), ("Continue evolving stars even if the binary is disrupted (default = " + std::string(p_Options->m_EvolveUnboundSystems ? "TRUE" : "FALSE") + ")").c_str() ) ( - "emit-gravitational-radiation", - po::value(&p_Options->m_EmitGravitationalRadiation)->default_value(p_Options->m_EmitGravitationalRadiation)->implicit_value(true), + "emit-gravitational-radiation", + po::value(&p_Options->m_EmitGravitationalRadiation)->default_value(p_Options->m_EmitGravitationalRadiation)->implicit_value(true), ("Emit gravitational radiation at each timestep of binary evolution (default = " + std::string(p_Options->m_EmitGravitationalRadiation ? "TRUE" : "FALSE") + ")").c_str() ) ( @@ -966,56 +966,56 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ) ( - "pair-instability-supernovae", - po::value(&p_Options->m_UsePairInstabilitySupernovae)->default_value(p_Options->m_UsePairInstabilitySupernovae)->implicit_value(true), + "pair-instability-supernovae", + po::value(&p_Options->m_UsePairInstabilitySupernovae)->default_value(p_Options->m_UsePairInstabilitySupernovae)->implicit_value(true), ("Enable pair instability supernovae (PISN) (default = " + std::string(p_Options->m_UsePairInstabilitySupernovae ? "TRUE" : "FALSE") + ")").c_str() ) ( - "population-data-printing", - po::value(&p_Options->m_PopulationDataPrinting)->default_value(p_Options->m_PopulationDataPrinting)->implicit_value(true), + "population-data-printing", + po::value(&p_Options->m_PopulationDataPrinting)->default_value(p_Options->m_PopulationDataPrinting)->implicit_value(true), ("Print details of population (default = " + std::string(p_Options->m_PopulationDataPrinting ? "TRUE" : "FALSE") + ")").c_str() ) ( - "print-bool-as-string", - po::value(&p_Options->m_PrintBoolAsString)->default_value(p_Options->m_PrintBoolAsString)->implicit_value(true), + "print-bool-as-string", + po::value(&p_Options->m_PrintBoolAsString)->default_value(p_Options->m_PrintBoolAsString)->implicit_value(true), ("Print boolean properties as 'TRUE' or 'FALSE' (default = " + std::string(p_Options->m_PrintBoolAsString ? "TRUE" : "FALSE") + ")").c_str() ) ( - "pulsational-pair-instability", - po::value(&p_Options->m_UsePulsationalPairInstability)->default_value(p_Options->m_UsePulsationalPairInstability)->implicit_value(true), + "pulsational-pair-instability", + po::value(&p_Options->m_UsePulsationalPairInstability)->default_value(p_Options->m_UsePulsationalPairInstability)->implicit_value(true), ("Enable mass loss due to pulsational-pair-instability (PPI) (default = " + std::string(p_Options->m_UsePulsationalPairInstability ? "TRUE" : "FALSE") + ")").c_str() ) ( - "quiet", - po::value(&p_Options->m_Quiet)->default_value(p_Options->m_Quiet)->implicit_value(true), + "quiet", + po::value(&p_Options->m_Quiet)->default_value(p_Options->m_Quiet)->implicit_value(true), ("Suppress printing (default = " + std::string(p_Options->m_Quiet ? "TRUE" : "FALSE") + ")").c_str() ) - + ( "retain-core-mass-during-caseA-mass-transfer", po::value(&p_Options->m_RetainCoreMassDuringCaseAMassTransfer)->default_value(p_Options->m_RetainCoreMassDuringCaseAMassTransfer)->implicit_value(true), ("Retain approximate core mass of a case A donor as a minimum core at end of MS or HeMS (default = " + std::string(p_Options->m_RetainCoreMassDuringCaseAMassTransfer ? "TRUE" : "FALSE") + ")").c_str() ) ( - "revised-energy-formalism-nandez-ivanova", - po::value(&p_Options->m_RevisedEnergyFormalismNandezIvanova)->default_value(p_Options->m_RevisedEnergyFormalismNandezIvanova)->implicit_value(true), + "revised-energy-formalism-nandez-ivanova", + po::value(&p_Options->m_RevisedEnergyFormalismNandezIvanova)->default_value(p_Options->m_RevisedEnergyFormalismNandezIvanova)->implicit_value(true), ("Enable revised energy formalism (default = " + std::string(p_Options->m_RevisedEnergyFormalismNandezIvanova ? "TRUE" : "FALSE") + ")").c_str() ) ( - "rlof-printing", - po::value(&p_Options->m_RlofPrinting)->default_value(p_Options->m_RlofPrinting)->implicit_value(true), + "rlof-printing", + po::value(&p_Options->m_RlofPrinting)->default_value(p_Options->m_RlofPrinting)->implicit_value(true), ("Enable output parameters before/after RLOF (default = " + std::string(p_Options->m_RlofPrinting ? "TRUE" : "FALSE") + ")").c_str() ) ( - "store-input-files", - po::value(&p_Options->m_StoreInputFiles)->default_value(p_Options->m_StoreInputFiles)->implicit_value(true), + "store-input-files", + po::value(&p_Options->m_StoreInputFiles)->default_value(p_Options->m_StoreInputFiles)->implicit_value(true), ("Store input files in output container (default = " + std::string(p_Options->m_StoreInputFiles ? "TRUE" : "FALSE") + ")").c_str() ) ( - "switch-log", - po::value(&p_Options->m_SwitchLog)->default_value(p_Options->m_SwitchLog)->implicit_value(true), + "switch-log", + po::value(&p_Options->m_SwitchLog)->default_value(p_Options->m_SwitchLog)->implicit_value(true), ("Print switch log to file (default = " + std::string(p_Options->m_SwitchLog ? "TRUE" : "FALSE") + ")").c_str() ) ( @@ -1024,8 +1024,8 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ("Whether to transition mass loss rates for chemically homogeneously evolving (CHE) between OB mass loss rates and Wolf-Rayet (WR) mass loss rates as a function of the surface helium abundance (Ys) as described by Yoon et al. 2006 (default = " + std::string(p_Options->m_ScaleCHEMassLossWithSurfaceHeliumAbundance ? "TRUE" : "FALSE") + ")").c_str() ) ( - "use-mass-transfer", - po::value(&p_Options->m_UseMassTransfer)->default_value(p_Options->m_UseMassTransfer)->implicit_value(true), + "use-mass-transfer", + po::value(&p_Options->m_UseMassTransfer)->default_value(p_Options->m_UseMassTransfer)->implicit_value(true), ("Enable mass transfer (default = " + std::string(p_Options->m_UseMassTransfer ? "TRUE" : "FALSE") + ")").c_str() ) ( @@ -1034,14 +1034,14 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ("Whether to use user-defined USSN kicks (as a fixed value) in lieu of the Mandel & Muller kick prescription for USSNe (default = " + std::string(p_Options->m_USSNKicksOverrideMandelMuller ? "TRUE" : "FALSE") + ")").c_str() ) - // numerical options - alphabetically grouped by type + // numerical options - alphabetically grouped by type // unsigned long ( - "random-seed", - po::value(&p_Options->m_RandomSeed)->default_value(p_Options->m_RandomSeed), + "random-seed", + po::value(&p_Options->m_RandomSeed)->default_value(p_Options->m_RandomSeed), ("Random seed to use (default = " + std::to_string(p_Options->m_RandomSeed) + ")").c_str() ) @@ -1049,88 +1049,88 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt // int / unsigned int ( - "debug-level", - po::value(&p_Options->m_DebugLevel)->default_value(p_Options->m_DebugLevel), + "debug-level", + po::value(&p_Options->m_DebugLevel)->default_value(p_Options->m_DebugLevel), ("Determines which print statements are displayed for debugging (default = " + std::to_string(p_Options->m_DebugLevel) + ")").c_str() ) ( - "grid-start-line", - po::value(&p_Options->m_GridStartLine)->default_value(p_Options->m_GridStartLine), + "grid-start-line", + po::value(&p_Options->m_GridStartLine)->default_value(p_Options->m_GridStartLine), ("Specifies which line of the grid file is processed first (0-based) (default = " + std::to_string(p_Options->m_GridStartLine) + ")").c_str() ) ( - "grid-lines-to-process", - po::value(&p_Options->m_GridLinesToProcess)->default_value(p_Options->m_GridLinesToProcess), + "grid-lines-to-process", + po::value(&p_Options->m_GridLinesToProcess)->default_value(p_Options->m_GridLinesToProcess), ("Specifies how many grid lines should be processed (from the start line - see grid-start-line) (default = " + (p_Options->m_GridLinesToProcess == std::numeric_limits::max() ? "Process to EOF" : std::to_string(p_Options->m_GridLinesToProcess)) + ")").c_str() ) ( - "hdf5-chunk-size", - po::value(&p_Options->m_HDF5ChunkSize)->default_value(p_Options->m_HDF5ChunkSize), + "hdf5-chunk-size", + po::value(&p_Options->m_HDF5ChunkSize)->default_value(p_Options->m_HDF5ChunkSize), ("HDF5 file dataset chunk size (number of dataset entries, default = " + std::to_string(p_Options->m_HDF5ChunkSize) + ")").c_str() ) ( - "hdf5-buffer-size", - po::value(&p_Options->m_HDF5BufferSize)->default_value(p_Options->m_HDF5BufferSize), + "hdf5-buffer-size", + po::value(&p_Options->m_HDF5BufferSize)->default_value(p_Options->m_HDF5BufferSize), ("HDF5 file dataset IO buffer size (number of chunks, default = " + std::to_string(p_Options->m_HDF5BufferSize) + ")").c_str() ) ( - "logfile-common-envelopes-record-types", - po::value(&p_Options->m_LogfileCommonEnvelopesRecordTypes)->default_value(p_Options->m_LogfileCommonEnvelopesRecordTypes), + "logfile-common-envelopes-record-types", + po::value(&p_Options->m_LogfileCommonEnvelopesRecordTypes)->default_value(p_Options->m_LogfileCommonEnvelopesRecordTypes), ("Enabled record types for BSE Common Envelopes logfile (default = " + std::to_string(p_Options->m_LogfileCommonEnvelopesRecordTypes) + ")").c_str() ) ( - "logfile-detailed-output-record-types", - po::value(&p_Options->m_LogfileDetailedOutputRecordTypes)->default_value(p_Options->m_LogfileDetailedOutputRecordTypes), + "logfile-detailed-output-record-types", + po::value(&p_Options->m_LogfileDetailedOutputRecordTypes)->default_value(p_Options->m_LogfileDetailedOutputRecordTypes), ("Enabled record types for Detailed Output logfile (default = " + std::to_string(p_Options->m_LogfileDetailedOutputRecordTypes) + ")").c_str() ) ( - "logfile-double-compact-objects-record-types", - po::value(&p_Options->m_LogfileDoubleCompactObjectsRecordTypes)->default_value(p_Options->m_LogfileDoubleCompactObjectsRecordTypes), + "logfile-double-compact-objects-record-types", + po::value(&p_Options->m_LogfileDoubleCompactObjectsRecordTypes)->default_value(p_Options->m_LogfileDoubleCompactObjectsRecordTypes), ("Enabled record types for Double Compact Objects logfile (default = " + std::to_string(p_Options->m_LogfileDoubleCompactObjectsRecordTypes) + ")").c_str() ) ( - "logfile-pulsar-evolution-record-types", - po::value(&p_Options->m_LogfilePulsarEvolutionRecordTypes)->default_value(p_Options->m_LogfilePulsarEvolutionRecordTypes), + "logfile-pulsar-evolution-record-types", + po::value(&p_Options->m_LogfilePulsarEvolutionRecordTypes)->default_value(p_Options->m_LogfilePulsarEvolutionRecordTypes), ("Enabled record types for Pulsar Evolution logfile (default = " + std::to_string(p_Options->m_LogfilePulsarEvolutionRecordTypes) + ")").c_str() ) ( - "logfile-rlof-parameters-record-types", - po::value(&p_Options->m_LogfileRLOFParametersRecordTypes)->default_value(p_Options->m_LogfileRLOFParametersRecordTypes), + "logfile-rlof-parameters-record-types", + po::value(&p_Options->m_LogfileRLOFParametersRecordTypes)->default_value(p_Options->m_LogfileRLOFParametersRecordTypes), ("Enabled record types for BSE RLOF Parameters logfile ( default = " + std::to_string(p_Options->m_LogfileRLOFParametersRecordTypes) + ")").c_str() ) ( - "logfile-supernovae-record-types", - po::value(&p_Options->m_LogfileSupernovaeRecordTypes)->default_value(p_Options->m_LogfileSupernovaeRecordTypes), + "logfile-supernovae-record-types", + po::value(&p_Options->m_LogfileSupernovaeRecordTypes)->default_value(p_Options->m_LogfileSupernovaeRecordTypes), ("Enabled record types for Supernovae logfile (default = " + std::to_string(p_Options->m_LogfileSupernovaeRecordTypes) + ")").c_str() ) ( - "logfile-system-snapshot-log-record-types", - po::value(&p_Options->m_LogfileSystemSnapshotLogRecordTypes)->default_value(p_Options->m_LogfileSystemSnapshotLogRecordTypes), + "logfile-system-snapshot-log-record-types", + po::value(&p_Options->m_LogfileSystemSnapshotLogRecordTypes)->default_value(p_Options->m_LogfileSystemSnapshotLogRecordTypes), ("Enabled record types for System Snapshot logfile (default = " + std::to_string(p_Options->m_LogfileSystemSnapshotLogRecordTypes) + ")").c_str() ) ( - "logfile-system-parameters-record-types", - po::value(&p_Options->m_LogfileSystemParametersRecordTypes)->default_value(p_Options->m_LogfileSystemParametersRecordTypes), + "logfile-system-parameters-record-types", + po::value(&p_Options->m_LogfileSystemParametersRecordTypes)->default_value(p_Options->m_LogfileSystemParametersRecordTypes), ("Enabled record types for System Parameters logfile (default = " + std::to_string(p_Options->m_LogfileSystemParametersRecordTypes) + ")").c_str() ) ( - "log-level", - po::value(&p_Options->m_LogLevel)->default_value(p_Options->m_LogLevel), + "log-level", + po::value(&p_Options->m_LogLevel)->default_value(p_Options->m_LogLevel), ("Determines which print statements are included in the logfile (default = " + std::to_string(p_Options->m_LogLevel) + ")").c_str() ) ( - "maximum-number-timestep-iterations", - po::value(&p_Options->m_MaxNumberOfTimestepIterations)->default_value(p_Options->m_MaxNumberOfTimestepIterations), + "maximum-number-timestep-iterations", + po::value(&p_Options->m_MaxNumberOfTimestepIterations)->default_value(p_Options->m_MaxNumberOfTimestepIterations), ("Maximum number of timesteps to evolve binary before giving up (default = " + std::to_string(p_Options->m_MaxNumberOfTimestepIterations) + ")").c_str() ) ( - "number-of-systems,n", - po::value(&p_Options->m_ObjectsToEvolve)->default_value(p_Options->m_ObjectsToEvolve), + "number-of-systems,n", + po::value(&p_Options->m_ObjectsToEvolve)->default_value(p_Options->m_ObjectsToEvolve), ("Specify the number of systems to simulate (SSE) (default = " + std::to_string(p_Options->m_ObjectsToEvolve) + ")").c_str() ) @@ -1138,48 +1138,48 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt // double ( - "common-envelope-alpha", - po::value(&p_Options->m_CommonEnvelopeAlpha)->default_value(p_Options->m_CommonEnvelopeAlpha), + "common-envelope-alpha", + po::value(&p_Options->m_CommonEnvelopeAlpha)->default_value(p_Options->m_CommonEnvelopeAlpha), ("Common Envelope efficiency alpha (default = " + std::to_string(p_Options->m_CommonEnvelopeAlpha) + ")").c_str() ) ( - "common-envelope-alpha-thermal", - po::value(&p_Options->m_CommonEnvelopeAlphaThermal)->default_value(p_Options->m_CommonEnvelopeAlphaThermal), + "common-envelope-alpha-thermal", + po::value(&p_Options->m_CommonEnvelopeAlphaThermal)->default_value(p_Options->m_CommonEnvelopeAlphaThermal), ("Defined such that lambda = alpha_th * lambda_b + (1.0 - alpha_th) * lambda_g (default = " + std::to_string(p_Options->m_CommonEnvelopeAlphaThermal) + ")").c_str() ) ( - "common-envelope-lambda", - po::value(&p_Options->m_CommonEnvelopeLambda)->default_value(p_Options->m_CommonEnvelopeLambda), + "common-envelope-lambda", + po::value(&p_Options->m_CommonEnvelopeLambda)->default_value(p_Options->m_CommonEnvelopeLambda), ("Common Envelope lambda (default = " + std::to_string(p_Options->m_CommonEnvelopeLambda) + ")").c_str() ) ( - "common-envelope-lambda-multiplier", - po::value(&p_Options->m_CommonEnvelopeLambdaMultiplier)->default_value(p_Options->m_CommonEnvelopeLambdaMultiplier), + "common-envelope-lambda-multiplier", + po::value(&p_Options->m_CommonEnvelopeLambdaMultiplier)->default_value(p_Options->m_CommonEnvelopeLambdaMultiplier), ("Multiply lambda by some constant (default = " + std::to_string(p_Options->m_CommonEnvelopeLambdaMultiplier) + ")").c_str() ) ( - "common-envelope-mass-accretion-constant", - po::value(&p_Options->m_CommonEnvelopeMassAccretionConstant)->default_value(p_Options->m_CommonEnvelopeMassAccretionConstant), + "common-envelope-mass-accretion-constant", + po::value(&p_Options->m_CommonEnvelopeMassAccretionConstant)->default_value(p_Options->m_CommonEnvelopeMassAccretionConstant), ("Value of mass accreted by NS/BH, in Msol, during common envelope evolution, assuming all NS/BH accrete same amount of mass (common-envelope-mass-accretion-prescription CONSTANT). Ignored otherwise (default = " + std::to_string(p_Options->m_CommonEnvelopeMassAccretionConstant) + ")").c_str() ) ( - "common-envelope-mass-accretion-max", - po::value(&p_Options->m_CommonEnvelopeMassAccretionMax)->default_value(p_Options->m_CommonEnvelopeMassAccretionMax), + "common-envelope-mass-accretion-max", + po::value(&p_Options->m_CommonEnvelopeMassAccretionMax)->default_value(p_Options->m_CommonEnvelopeMassAccretionMax), ("Maximum amount of mass accreted by NS/BHs, in Msol, during common envelope evolution in Msol (default = " + std::to_string(p_Options->m_CommonEnvelopeMassAccretionMax) + ")").c_str() ) ( - "common-envelope-mass-accretion-min", - po::value(&p_Options->m_CommonEnvelopeMassAccretionMin)->default_value(p_Options->m_CommonEnvelopeMassAccretionMin), + "common-envelope-mass-accretion-min", + po::value(&p_Options->m_CommonEnvelopeMassAccretionMin)->default_value(p_Options->m_CommonEnvelopeMassAccretionMin), ("Minimum amount of mass accreted by NS/BHs, in Msol, during common envelope evolution in Msol (default = " + std::to_string(p_Options->m_CommonEnvelopeMassAccretionMin) + ")").c_str() ) ( - "common-envelope-recombination-energy-density", - po::value(&p_Options->m_CommonEnvelopeRecombinationEnergyDensity)->default_value(p_Options->m_CommonEnvelopeRecombinationEnergyDensity), + "common-envelope-recombination-energy-density", + po::value(&p_Options->m_CommonEnvelopeRecombinationEnergyDensity)->default_value(p_Options->m_CommonEnvelopeRecombinationEnergyDensity), ("Recombination energy density, in erg/g (default = " + std::to_string(p_Options->m_CommonEnvelopeRecombinationEnergyDensity) + ")").c_str() ) ( - "common-envelope-slope-kruckow", - po::value(&p_Options->m_CommonEnvelopeSlopeKruckow)->default_value(p_Options->m_CommonEnvelopeSlopeKruckow), + "common-envelope-slope-kruckow", + po::value(&p_Options->m_CommonEnvelopeSlopeKruckow)->default_value(p_Options->m_CommonEnvelopeSlopeKruckow), ("Common Envelope slope for Kruckow lambda (default = " + std::to_string(p_Options->m_CommonEnvelopeSlopeKruckow) + ")").c_str() ) ( @@ -1193,13 +1193,13 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ("Fractional threshold of envelope mass that above which the envelopes of giants are labeled convective. Only used for --envelope-state-prescription = CONVECTIVE_MASS_THRESHOLD, ignored otherwise. (default = " + std::to_string(p_Options->m_ConvectiveEnvelopeMassThreshold) + ")").c_str() ) ( - "convective-envelope-temperature-threshold", - po::value(&p_Options->m_ConvectiveEnvelopeTemperatureThreshold)->default_value(p_Options->m_ConvectiveEnvelopeTemperatureThreshold), + "convective-envelope-temperature-threshold", + po::value(&p_Options->m_ConvectiveEnvelopeTemperatureThreshold)->default_value(p_Options->m_ConvectiveEnvelopeTemperatureThreshold), ("Temperature [K] threshold, below which the envelopes of giants are convective. Only used for --envelope-state-prescription = FIXED_TEMPERATURE, ignored otherwise. (default = " + std::to_string(p_Options->m_ConvectiveEnvelopeTemperatureThreshold) + ")").c_str() ) ( - "cool-wind-mass-loss-multiplier", - po::value(&p_Options->m_CoolWindMassLossMultiplier)->default_value(p_Options->m_CoolWindMassLossMultiplier), + "cool-wind-mass-loss-multiplier", + po::value(&p_Options->m_CoolWindMassLossMultiplier)->default_value(p_Options->m_CoolWindMassLossMultiplier), ("Multiplicative constant for wind mass loss of cool stars (default = " + std::to_string(p_Options->m_CoolWindMassLossMultiplier)+ ")").c_str() ) ( @@ -1210,7 +1210,7 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ( "critical-mass-ratio-giant-non-degenerate-accretor", po::value(&p_Options->m_MassTransferCriticalMassRatioGiantNonDegenerateAccretor)->default_value(p_Options->m_MassTransferCriticalMassRatioGiantNonDegenerateAccretor), - ("Critical mass ratio (mA/mD) for MT from a giant star to a non-degenerate accretor (default = " + std::to_string(p_Options->m_MassTransferCriticalMassRatioGiantNonDegenerateAccretor) + ", which triggers a call to a function of the core mass ratio [Claeys+2014]).\n 0 is always stable, <0 is disabled.\n Only used for --critical-mass-ratio-prescription CLAEYS, ignored otherwise.").c_str() + ("Critical mass ratio (mA/mD) for MT from a giant star to a non-degenerate accretor (default = " + std::to_string(p_Options->m_MassTransferCriticalMassRatioGiantNonDegenerateAccretor) + ", which triggers a call to a function of the core mass ratio [Claeys+2014]).\n 0 is always stable, <0 is disabled.\n Only used for --critical-mass-ratio-prescription CLAEYS, ignored otherwise.").c_str() ) ( "critical-mass-ratio-helium-giant-degenerate-accretor", @@ -1284,166 +1284,166 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ) ( - "eccentricity,e", - po::value(&p_Options->m_Eccentricity)->default_value(p_Options->m_Eccentricity), + "eccentricity,e", + po::value(&p_Options->m_Eccentricity)->default_value(p_Options->m_Eccentricity), ("Eccentricity, e (default = " + std::to_string(p_Options->m_Eccentricity) + ")").c_str() ) ( - "eccentricity-max", - po::value(&p_Options->m_EccentricityDistributionMax)->default_value(p_Options->m_EccentricityDistributionMax), + "eccentricity-max", + po::value(&p_Options->m_EccentricityDistributionMax)->default_value(p_Options->m_EccentricityDistributionMax), ("Maximum eccentricity to generate (default = " + std::to_string(p_Options->m_EccentricityDistributionMax) + ")").c_str() ) ( - "eccentricity-min", - po::value(&p_Options->m_EccentricityDistributionMin)->default_value(p_Options->m_EccentricityDistributionMin), + "eccentricity-min", + po::value(&p_Options->m_EccentricityDistributionMin)->default_value(p_Options->m_EccentricityDistributionMin), ("Minimum eccentricity to generate (default = " + std::to_string(p_Options->m_EccentricityDistributionMin) + ")").c_str() ) ( - "eddington-accretion-factor", - po::value(&p_Options->m_EddingtonAccretionFactor)->default_value(p_Options->m_EddingtonAccretionFactor), + "eddington-accretion-factor", + po::value(&p_Options->m_EddingtonAccretionFactor)->default_value(p_Options->m_EddingtonAccretionFactor), ("Multiplication factor for eddington accretion for NS & BH, i.e. >1 is super-eddington and 0. is no accretion (default = " + std::to_string(p_Options->m_EddingtonAccretionFactor) + ")").c_str() ) ( - "fix-dimensionless-kick-magnitude", - po::value(&p_Options->m_FixedUK)->default_value(p_Options->m_FixedUK), + "fix-dimensionless-kick-magnitude", + po::value(&p_Options->m_FixedUK)->default_value(p_Options->m_FixedUK), ("Fix dimensionless kick magnitude uk to this value (default = " + std::to_string(p_Options->m_FixedUK) + ", -ve values false, +ve values true)").c_str() ) ( - "fryer-22-fmix", - po::value(&p_Options->m_Fryer22fmix)->default_value(p_Options->m_Fryer22fmix), + "fryer-22-fmix", + po::value(&p_Options->m_Fryer22fmix)->default_value(p_Options->m_Fryer22fmix), ("parameter describing the mixing growth time when using the 'FRYER2022' remnant mass distribution (default = " + std::to_string(p_Options->m_Fryer22fmix) + ")").c_str() ) ( - "fryer-22-mcrit", - po::value(&p_Options->m_Fryer22Mcrit)->default_value(p_Options->m_Fryer22Mcrit), + "fryer-22-mcrit", + po::value(&p_Options->m_Fryer22Mcrit)->default_value(p_Options->m_Fryer22Mcrit), ("Critical CO core mass for black hole formation when using the 'FRYER2022' remnant mass distribution (default = " + std::to_string(p_Options->m_Fryer22Mcrit) + ")").c_str() ) ( - "initial-mass", - po::value(&p_Options->m_InitialMass)->default_value(p_Options->m_InitialMass), + "initial-mass", + po::value(&p_Options->m_InitialMass)->default_value(p_Options->m_InitialMass), ("Initial mass (in Msol) for the star (SSE) (default = " + std::to_string(p_Options->m_InitialMass) + ")").c_str() ) ( - "initial-mass-1", - po::value(&p_Options->m_InitialMass1)->default_value(p_Options->m_InitialMass1), + "initial-mass-1", + po::value(&p_Options->m_InitialMass1)->default_value(p_Options->m_InitialMass1), ("Initial mass (in Msol) for the primary star (BSE) (default = " + std::to_string(p_Options->m_InitialMass1) + ")").c_str() ) ( - "initial-mass-2", + "initial-mass-2", po::value(&p_Options->m_InitialMass2)->default_value(p_Options->m_InitialMass2), ("Initial mass (in Msol) for the secondary star (BSE) (default = " + std::to_string(p_Options->m_InitialMass2) + ")").c_str() ) ( - "initial-mass-function-max", - po::value(&p_Options->m_InitialMassFunctionMax)->default_value(p_Options->m_InitialMassFunctionMax), + "initial-mass-function-max", + po::value(&p_Options->m_InitialMassFunctionMax)->default_value(p_Options->m_InitialMassFunctionMax), ("The maximum mass (in Msol) to sample from the initial mass function (IMF), (only used when sampling initial mass, default = " + std::to_string(p_Options->m_InitialMassFunctionMax) + ")").c_str() ) ( - "initial-mass-function-min", - po::value(&p_Options->m_InitialMassFunctionMin)->default_value(p_Options->m_InitialMassFunctionMin), + "initial-mass-function-min", + po::value(&p_Options->m_InitialMassFunctionMin)->default_value(p_Options->m_InitialMassFunctionMin), ("The minimum mass (in Msol) to sample from the initial mass function (IMF), (only used when sampling initial mass, default = " + std::to_string(p_Options->m_InitialMassFunctionMin) + ")").c_str() ) ( - "initial-mass-function-power", - po::value(&p_Options->m_InitialMassFunctionPower)->default_value(p_Options->m_InitialMassFunctionPower), + "initial-mass-function-power", + po::value(&p_Options->m_InitialMassFunctionPower)->default_value(p_Options->m_InitialMassFunctionPower), ("The power to use when using the POWERLAW IMF (default = " + std::to_string(p_Options->m_InitialMassFunctionPower) + ")").c_str() ) ( - "kick-direction-power", - po::value(&p_Options->m_KickDirectionPower)->default_value(p_Options->m_KickDirectionPower), + "kick-direction-power", + po::value(&p_Options->m_KickDirectionPower)->default_value(p_Options->m_KickDirectionPower), ("Power for power law kick direction distribution (default = " + std::to_string(p_Options->m_KickDirectionPower) + " = isotropic, +ve = polar, -ve = in plane)").c_str() ) ( - "kick-magnitude", - po::value(&p_Options->m_KickMagnitude)->default_value(p_Options->m_KickMagnitude), + "kick-magnitude", + po::value(&p_Options->m_KickMagnitude)->default_value(p_Options->m_KickMagnitude), ("The magnitude of the kick velocity, in km/s, that the star receives during the supernova (default = " + std::to_string(p_Options->m_KickMagnitude) + ")").c_str() ) ( - "kick-magnitude-1", - po::value(&p_Options->m_KickMagnitude1)->default_value(p_Options->m_KickMagnitude1), + "kick-magnitude-1", + po::value(&p_Options->m_KickMagnitude1)->default_value(p_Options->m_KickMagnitude1), ("The magnitude of the kick velocity, in km/s, that the primary star receives during the supernova (default = " + std::to_string(p_Options->m_KickMagnitude1) + ")").c_str() ) ( - "kick-magnitude-2", - po::value(&p_Options->m_KickMagnitude2)->default_value(p_Options->m_KickMagnitude2), + "kick-magnitude-2", + po::value(&p_Options->m_KickMagnitude2)->default_value(p_Options->m_KickMagnitude2), ("The magnitude of the kick velocity, in km/s, that the secondary star receives during the supernova (default = " + std::to_string(p_Options->m_KickMagnitude2) + ")").c_str() ) ( - "kick-magnitude-max", - po::value(&p_Options->m_KickMagnitudeDistributionMaximum)->default_value(p_Options->m_KickMagnitudeDistributionMaximum), + "kick-magnitude-max", + po::value(&p_Options->m_KickMagnitudeDistributionMaximum)->default_value(p_Options->m_KickMagnitudeDistributionMaximum), ("Maximum drawn kick magnitude in km/s. Ignored if < 0. Must be > 0 if using kick-magnitude-distribution=FLAT (default = " + std::to_string(p_Options->m_KickMagnitudeDistributionMaximum) + ")").c_str() ) ( - "kick-magnitude-random", - po::value(&p_Options->m_KickMagnitudeRandom)->default_value(p_Options->m_KickMagnitudeRandom), + "kick-magnitude-random", + po::value(&p_Options->m_KickMagnitudeRandom)->default_value(p_Options->m_KickMagnitudeRandom), "Number used to choose the kick velocity magnitude for the star during the a supernova (default = uniform random number [0.0, 1.0))" ) ( - "kick-magnitude-random-1", - po::value(&p_Options->m_KickMagnitudeRandom1)->default_value(p_Options->m_KickMagnitudeRandom1), + "kick-magnitude-random-1", + po::value(&p_Options->m_KickMagnitudeRandom1)->default_value(p_Options->m_KickMagnitudeRandom1), "Number used to choose the kick velocity magnitude for the primary star during the a supernova (default = uniform random number [0.0, 1.0))" ) ( - "kick-magnitude-random-2", - po::value(&p_Options->m_KickMagnitudeRandom2)->default_value(p_Options->m_KickMagnitudeRandom2), + "kick-magnitude-random-2", + po::value(&p_Options->m_KickMagnitudeRandom2)->default_value(p_Options->m_KickMagnitudeRandom2), "Number used to choose the kick velocity magnitude for the secondary during the a supernova (default = uniform random number [0.0, 1.0))" ) ( - "kick-magnitude-sigma-CCSN-BH", - po::value(&p_Options->m_KickMagnitudeDistributionSigmaCCSN_BH)->default_value(p_Options->m_KickMagnitudeDistributionSigmaCCSN_BH), + "kick-magnitude-sigma-CCSN-BH", + po::value(&p_Options->m_KickMagnitudeDistributionSigmaCCSN_BH)->default_value(p_Options->m_KickMagnitudeDistributionSigmaCCSN_BH), ("Sigma for chosen kick magnitude distribution, in km/s, for black holes (default = " + std::to_string(p_Options->m_KickMagnitudeDistributionSigmaCCSN_BH) + ")").c_str() ) ( - "kick-magnitude-sigma-CCSN-NS", - po::value(&p_Options->m_KickMagnitudeDistributionSigmaCCSN_NS)->default_value(p_Options->m_KickMagnitudeDistributionSigmaCCSN_NS), + "kick-magnitude-sigma-CCSN-NS", + po::value(&p_Options->m_KickMagnitudeDistributionSigmaCCSN_NS)->default_value(p_Options->m_KickMagnitudeDistributionSigmaCCSN_NS), ("Sigma for chosen kick magnitude distribution, in km/s, for neutron stars (default = " + std::to_string(p_Options->m_KickMagnitudeDistributionSigmaCCSN_NS) + ")").c_str() ) ( - "kick-magnitude-sigma-ECSN", - po::value(&p_Options->m_KickMagnitudeDistributionSigmaForECSN)->default_value(p_Options->m_KickMagnitudeDistributionSigmaForECSN), + "kick-magnitude-sigma-ECSN", + po::value(&p_Options->m_KickMagnitudeDistributionSigmaForECSN)->default_value(p_Options->m_KickMagnitudeDistributionSigmaForECSN), ("Sigma for chosen kick magnitude distribution, in km/s, for ECSN (default = " + std::to_string(p_Options->m_KickMagnitudeDistributionSigmaForECSN) + ")").c_str() ) ( - "kick-magnitude-sigma-USSN", - po::value(&p_Options->m_KickMagnitudeDistributionSigmaForUSSN)->default_value(p_Options->m_KickMagnitudeDistributionSigmaForUSSN), + "kick-magnitude-sigma-USSN", + po::value(&p_Options->m_KickMagnitudeDistributionSigmaForUSSN)->default_value(p_Options->m_KickMagnitudeDistributionSigmaForUSSN), ("Sigma for chosen kick magnitude distribution, in km/s, for USSN (default = " + std::to_string(p_Options->m_KickMagnitudeDistributionSigmaForUSSN) + ")").c_str() ) ( "kick-mean-anomaly-1", - po::value(&p_Options->m_KickMeanAnomaly1)->default_value(p_Options->m_KickMeanAnomaly1), + po::value(&p_Options->m_KickMeanAnomaly1)->default_value(p_Options->m_KickMeanAnomaly1), "Mean anomaly, in rad, for the primary star at instantaneous time of the supernova (default = uniform random number [0.0, 2pi))" ) ( "kick-mean-anomaly-2", - po::value(&p_Options->m_KickMeanAnomaly2)->default_value(p_Options->m_KickMeanAnomaly2), + po::value(&p_Options->m_KickMeanAnomaly2)->default_value(p_Options->m_KickMeanAnomaly2), "Mean anomaly, in rad, for the secondary star at instantaneous time of the supernova (default = uniform random number [0.0, 2pi))" ) ( "kick-phi-1", - po::value(&p_Options->m_KickPhi1)->default_value(p_Options->m_KickPhi1), + po::value(&p_Options->m_KickPhi1)->default_value(p_Options->m_KickPhi1), "Planar angle, in rad, of the supernova vector, for the primary star (default = drawn from kick direction distribution)" ) ( "kick-phi-2", - po::value(&p_Options->m_KickPhi2)->default_value(p_Options->m_KickPhi2), + po::value(&p_Options->m_KickPhi2)->default_value(p_Options->m_KickPhi2), "Planar angle, in rad, of the supernova vector, for the secondary star (default = drawn from kick direction distribution)" ) ( - "kick-scaling-factor", - po::value(&p_Options->m_KickScalingFactor)->default_value(p_Options->m_KickScalingFactor), + "kick-scaling-factor", + po::value(&p_Options->m_KickScalingFactor)->default_value(p_Options->m_KickScalingFactor), ("Arbitrary factor used to scale kicks (default = " + std::to_string(p_Options->m_KickScalingFactor) + ")").c_str() ) ( - "kick-theta-1", - po::value(&p_Options->m_KickTheta1)->default_value(p_Options->m_KickTheta1), + "kick-theta-1", + po::value(&p_Options->m_KickTheta1)->default_value(p_Options->m_KickTheta1), "Polar angle, in rad, of the supernova vector, for the primary star (default = drawn from kick direction distribution)" ) ( - "kick-theta-2", - po::value(&p_Options->m_KickTheta2)->default_value(p_Options->m_KickTheta2), + "kick-theta-2", + po::value(&p_Options->m_KickTheta2)->default_value(p_Options->m_KickTheta2), "Polar angle, in rad, of the supernova vector, for the secondary star (default = drawn from kick direction distribution)" ) @@ -1452,10 +1452,10 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt po::value(&p_Options->m_LuminosityToMassThreshold)->default_value(p_Options->m_LuminosityToMassThreshold), ("Threshold value of log_10(L/M) above which the convective envelope is expelled in a pulsation (default = " + std::to_string(p_Options->m_LuminosityToMassThreshold) + ")").c_str() ) - + ( - "luminous-blue-variable-multiplier", - po::value(&p_Options->m_LuminousBlueVariableFactor)->default_value(p_Options->m_LuminousBlueVariableFactor), + "luminous-blue-variable-multiplier", + po::value(&p_Options->m_LuminousBlueVariableFactor)->default_value(p_Options->m_LuminousBlueVariableFactor), ("Multiplicitive constant for LBV mass loss (default = " + std::to_string(p_Options->m_LuminousBlueVariableFactor) + ", use 10 for Mennekens & Vanbeveren 2014)").c_str() ) @@ -1470,95 +1470,95 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt po::value(&p_Options->m_MassChangeFraction)->default_value(p_Options->m_MassChangeFraction), ("Approximate goal for fractional mass change per timestep for SSE and BSE (default = " + std::to_string(p_Options->m_MassChangeFraction) + ")").c_str() ) - + ( - "mass-ratio,q", - po::value(&p_Options->m_MassRatio)->default_value(p_Options->m_MassRatio), + "mass-ratio,q", + po::value(&p_Options->m_MassRatio)->default_value(p_Options->m_MassRatio), ("Mass ratio m2/m1 used to determine secondary mass if not specified (default = " + std::to_string(p_Options->m_MassRatio) + ")").c_str() ) ( - "mass-ratio-max", - po::value(&p_Options->m_MassRatioDistributionMax)->default_value(p_Options->m_MassRatioDistributionMax), + "mass-ratio-max", + po::value(&p_Options->m_MassRatioDistributionMax)->default_value(p_Options->m_MassRatioDistributionMax), ("Maximum mass ratio m2/m1 to generate (default = " + std::to_string(p_Options->m_MassRatioDistributionMax) + ")").c_str() ) ( - "mass-ratio-min", - po::value(&p_Options->m_MassRatioDistributionMin)->default_value(p_Options->m_MassRatioDistributionMin), + "mass-ratio-min", + po::value(&p_Options->m_MassRatioDistributionMin)->default_value(p_Options->m_MassRatioDistributionMin), ("Minimum mass ratio m2/m1 to generate (default = " + std::to_string(p_Options->m_MassRatioDistributionMin) + ")").c_str() ) ( - "mass-transfer-fa", - po::value(&p_Options->m_MassTransferFractionAccreted)->default_value(p_Options->m_MassTransferFractionAccreted), + "mass-transfer-fa", + po::value(&p_Options->m_MassTransferFractionAccreted)->default_value(p_Options->m_MassTransferFractionAccreted), ("Mass Transfer fraction accreted in FIXED prescription (default = " + std::to_string(p_Options->m_MassTransferFractionAccreted) + ")").c_str() ) ( - "mass-transfer-jloss", - po::value(&p_Options->m_MassTransferJloss)->default_value(p_Options->m_MassTransferJloss), + "mass-transfer-jloss", + po::value(&p_Options->m_MassTransferJloss)->default_value(p_Options->m_MassTransferJloss), ("Fraction of specific angular momentum which non-accreted matter removes from the system (default = " + std::to_string(p_Options->m_MassTransferJloss) + ")").c_str() ) ( "mass-transfer-jloss-linear-fraction-degen", - po::value(&p_Options->m_MassTransferJlossLinearFractionDegen)->default_value(p_Options->m_MassTransferJlossLinearFractionDegen), + po::value(&p_Options->m_MassTransferJlossLinearFractionDegen)->default_value(p_Options->m_MassTransferJlossLinearFractionDegen), ("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() ) ( "mass-transfer-jloss-linear-fraction-non-degen", - po::value(&p_Options->m_MassTransferJlossLinearFractionNonDegen)->default_value(p_Options->m_MassTransferJlossLinearFractionNonDegen), + po::value(&p_Options->m_MassTransferJlossLinearFractionNonDegen)->default_value(p_Options->m_MassTransferJlossLinearFractionNonDegen), ("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() ) ( - "mass-transfer-thermal-limit-C", - po::value(&p_Options->m_MassTransferCParameter)->default_value(p_Options->m_MassTransferCParameter), + "mass-transfer-thermal-limit-C", + po::value(&p_Options->m_MassTransferCParameter)->default_value(p_Options->m_MassTransferCParameter), ("Mass Transfer Thermal rate factor of the accretor (default = " + std::to_string(p_Options->m_MassTransferCParameter) + ")").c_str() ) ( - "maximum-evolution-time", - po::value(&p_Options->m_MaxEvolutionTime)->default_value(p_Options->m_MaxEvolutionTime), + "maximum-evolution-time", + po::value(&p_Options->m_MaxEvolutionTime)->default_value(p_Options->m_MaxEvolutionTime), ("Maximum time to evolve binaries, in Myr (default = " + std::to_string(p_Options->m_MaxEvolutionTime) + ")").c_str() ) ( - "maximum-mass-donor-nandez-ivanova", - po::value(&p_Options->m_MaximumMassDonorNandezIvanova)->default_value(p_Options->m_MaximumMassDonorNandezIvanova), + "maximum-mass-donor-nandez-ivanova", + po::value(&p_Options->m_MaximumMassDonorNandezIvanova)->default_value(p_Options->m_MaximumMassDonorNandezIvanova), ("Maximum donor mass, in Msol, allowed for the revised common envelope formalism in Msol (default = " + std::to_string(p_Options->m_MaximumMassDonorNandezIvanova) + ")").c_str() ) ( - "maximum-neutron-star-mass", - po::value(&p_Options->m_MaximumNeutronStarMass)->default_value(p_Options->m_MaximumNeutronStarMass), + "maximum-neutron-star-mass", + po::value(&p_Options->m_MaximumNeutronStarMass)->default_value(p_Options->m_MaximumNeutronStarMass), ("Maximum mass of a neutron star, in Msol (default = " + std::to_string(p_Options->m_MaximumNeutronStarMass) + ")").c_str() ) ( - "mcbur1", - po::value(&p_Options->m_mCBUR1)->default_value(p_Options->m_mCBUR1), + "mcbur1", + po::value(&p_Options->m_mCBUR1)->default_value(p_Options->m_mCBUR1), ("Minimum core mass at BAGB, in Msol, to avoid fully degenerate CO core (default = " + std::to_string(p_Options->m_mCBUR1) + ")").c_str() ) ( - "metallicity,z", - po::value(&p_Options->m_Metallicity)->default_value(p_Options->m_Metallicity), + "metallicity,z", + po::value(&p_Options->m_Metallicity)->default_value(p_Options->m_Metallicity), ("Metallicity to use (default = " + std::to_string(p_Options->m_Metallicity) + ")").c_str() ) ( - "metallicity-max", - po::value(&p_Options->m_MetallicityDistributionMax)->default_value(p_Options->m_MetallicityDistributionMax), + "metallicity-max", + po::value(&p_Options->m_MetallicityDistributionMax)->default_value(p_Options->m_MetallicityDistributionMax), ("Maximum metallicity to generate (default = " + std::to_string(p_Options->m_MetallicityDistributionMax) + ")").c_str() ) ( - "metallicity-min", - po::value(&p_Options->m_MetallicityDistributionMin)->default_value(p_Options->m_MetallicityDistributionMin), + "metallicity-min", + po::value(&p_Options->m_MetallicityDistributionMin)->default_value(p_Options->m_MetallicityDistributionMin), ("Minimum metallicity to generate (default = " + std::to_string(p_Options->m_MetallicityDistributionMin) + ")").c_str() ) ( - "minimum-sampled-secondary-mass", - po::value(&p_Options->m_MinimumSampledSecondaryMass)->default_value(p_Options->m_MinimumSampledSecondaryMass), + "minimum-sampled-secondary-mass", + po::value(&p_Options->m_MinimumSampledSecondaryMass)->default_value(p_Options->m_MinimumSampledSecondaryMass), ("Minimum sampled mass of secondary star, in Msol (default = " + std::to_string(p_Options->m_MinimumSampledSecondaryMass) + ")").c_str() ) ( - "muller-mandel-kick-multiplier-BH", - po::value(&p_Options->m_MullerMandelKickBH)->default_value(p_Options->m_MullerMandelKickBH), + "muller-mandel-kick-multiplier-BH", + po::value(&p_Options->m_MullerMandelKickBH)->default_value(p_Options->m_MullerMandelKickBH), ("Scaling prefactor for BH kicks when using the 'MULLERMANDEL' kick magnitude distribution (default = " + std::to_string(p_Options->m_MullerMandelKickBH) + ")").c_str() ) ( - "muller-mandel-kick-multiplier-NS", - po::value(&p_Options->m_MullerMandelKickNS)->default_value(p_Options->m_MullerMandelKickNS), + "muller-mandel-kick-multiplier-NS", + po::value(&p_Options->m_MullerMandelKickNS)->default_value(p_Options->m_MullerMandelKickNS), ("Scaling prefactor for NS kicks when using the 'MULLERMANDEL' kick magnitude distribution (default = " + std::to_string(p_Options->m_MullerMandelKickNS) + ")").c_str() ) ( @@ -1573,109 +1573,109 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ) ( - "neutrino-mass-loss-BH-formation-value", - po::value(&p_Options->m_NeutrinoMassLossValueBH)->default_value(p_Options->m_NeutrinoMassLossValueBH), + "neutrino-mass-loss-BH-formation-value", + po::value(&p_Options->m_NeutrinoMassLossValueBH)->default_value(p_Options->m_NeutrinoMassLossValueBH), ("Amount of BH mass lost due to neutrinos (either fraction or fixed value, depending on --neutrino-mass-loss-BH-formation) (default = " + std::to_string(p_Options->m_NeutrinoMassLossValueBH) + ")").c_str() ) ( - "orbital-period", - po::value(&p_Options->m_OrbitalPeriod)->default_value(p_Options->m_OrbitalPeriod), + "orbital-period", + po::value(&p_Options->m_OrbitalPeriod)->default_value(p_Options->m_OrbitalPeriod), ("Initial orbital period, in days (default = " + std::to_string(p_Options->m_OrbitalPeriod) + ")").c_str() ) ( - "orbital-period-max", - po::value(&p_Options->m_OrbitalPeriodDistributionMax)->default_value(p_Options->m_OrbitalPeriodDistributionMax), + "orbital-period-max", + po::value(&p_Options->m_OrbitalPeriodDistributionMax)->default_value(p_Options->m_OrbitalPeriodDistributionMax), ("Maximum period, in days, to generate (default = " + std::to_string(p_Options->m_OrbitalPeriodDistributionMax) + ")").c_str() ) ( - "orbital-period-min", - po::value(&p_Options->m_OrbitalPeriodDistributionMin)->default_value(p_Options->m_OrbitalPeriodDistributionMin), + "orbital-period-min", + po::value(&p_Options->m_OrbitalPeriodDistributionMin)->default_value(p_Options->m_OrbitalPeriodDistributionMin), ("Minimum period, in days, to generate (default = " + std::to_string(p_Options->m_OrbitalPeriodDistributionMin) + ")").c_str() ) ( - "overall-wind-mass-loss-multiplier", - po::value(&p_Options->m_OverallWindMassLossMultiplier)->default_value(p_Options->m_OverallWindMassLossMultiplier), + "overall-wind-mass-loss-multiplier", + po::value(&p_Options->m_OverallWindMassLossMultiplier)->default_value(p_Options->m_OverallWindMassLossMultiplier), ("Multiplicitive constant for overall wind mass loss (default = " + std::to_string(p_Options->m_OverallWindMassLossMultiplier)+ ")").c_str() ) ( - "PISN-lower-limit", - po::value(&p_Options->m_PairInstabilityLowerLimit)->default_value(p_Options->m_PairInstabilityLowerLimit), + "PISN-lower-limit", + po::value(&p_Options->m_PairInstabilityLowerLimit)->default_value(p_Options->m_PairInstabilityLowerLimit), ("Minimum core mass for PISN, in Msol (default = " + std::to_string(p_Options->m_PairInstabilityLowerLimit) + ")").c_str() ) ( - "PISN-upper-limit", - po::value(&p_Options->m_PairInstabilityUpperLimit)->default_value(p_Options->m_PairInstabilityUpperLimit), + "PISN-upper-limit", + po::value(&p_Options->m_PairInstabilityUpperLimit)->default_value(p_Options->m_PairInstabilityUpperLimit), ("Maximum core mass for PISN, in Msol (default = " + std::to_string(p_Options->m_PairInstabilityUpperLimit) + ")").c_str() ) ( - "PPI-lower-limit", - po::value(&p_Options->m_PulsationalPairInstabilityLowerLimit)->default_value(p_Options->m_PulsationalPairInstabilityLowerLimit), + "PPI-lower-limit", + po::value(&p_Options->m_PulsationalPairInstabilityLowerLimit)->default_value(p_Options->m_PulsationalPairInstabilityLowerLimit), ("Minimum core mass for PPI, in Msol (default = " + std::to_string(p_Options->m_PulsationalPairInstabilityLowerLimit) + ")").c_str() ) ( - "PPI-upper-limit", - po::value(&p_Options->m_PulsationalPairInstabilityUpperLimit)->default_value(p_Options->m_PulsationalPairInstabilityUpperLimit), + "PPI-upper-limit", + po::value(&p_Options->m_PulsationalPairInstabilityUpperLimit)->default_value(p_Options->m_PulsationalPairInstabilityUpperLimit), ("Maximum core mass for PPI, in Msol (default = " + std::to_string(p_Options->m_PulsationalPairInstabilityUpperLimit) + ")").c_str() ) ( "PPI-CO-Core-Shift-Hendriks", - po::value(&p_Options->m_PulsationalPairInstabilityCOCoreShiftHendriks)->default_value(p_Options->m_PulsationalPairInstabilityCOCoreShiftHendriks), + po::value(&p_Options->m_PulsationalPairInstabilityCOCoreShiftHendriks)->default_value(p_Options->m_PulsationalPairInstabilityCOCoreShiftHendriks), ("Shift in CO core mass for PPI (in Msol) for the Hendriks+23 PPI prescription (default = " + std::to_string(p_Options->m_PulsationalPairInstabilityCOCoreShiftHendriks) + ")").c_str() ) ( - "pulsar-birth-magnetic-field-distribution-max", - po::value(&p_Options->m_PulsarBirthMagneticFieldDistributionMax)->default_value(p_Options->m_PulsarBirthMagneticFieldDistributionMax), + "pulsar-birth-magnetic-field-distribution-max", + po::value(&p_Options->m_PulsarBirthMagneticFieldDistributionMax)->default_value(p_Options->m_PulsarBirthMagneticFieldDistributionMax), ("Maximum pulsar birth magnetic field, in log10(Gauss) (default = " + std::to_string(p_Options->m_PulsarBirthMagneticFieldDistributionMax) + ")").c_str() ) ( - "pulsar-birth-magnetic-field-distribution-min", - po::value(&p_Options->m_PulsarBirthMagneticFieldDistributionMin)->default_value(p_Options->m_PulsarBirthMagneticFieldDistributionMin), + "pulsar-birth-magnetic-field-distribution-min", + po::value(&p_Options->m_PulsarBirthMagneticFieldDistributionMin)->default_value(p_Options->m_PulsarBirthMagneticFieldDistributionMin), ("Minimum pulsar birth magnetic field, in log10(Gauss) (default = " + std::to_string(p_Options->m_PulsarBirthMagneticFieldDistributionMin) + ")").c_str() )( - "pulsar-birth-magnetic-field-distribution-mean", - po::value(&p_Options->m_PulsarBirthMagneticFieldDistributionMean)->default_value(p_Options->m_PulsarBirthMagneticFieldDistributionMean), + "pulsar-birth-magnetic-field-distribution-mean", + po::value(&p_Options->m_PulsarBirthMagneticFieldDistributionMean)->default_value(p_Options->m_PulsarBirthMagneticFieldDistributionMean), ("Mean of normal or lognormal distribution for birth magnetic field (log10 B/G) (default = " + std::to_string(p_Options->m_PulsarBirthMagneticFieldDistributionMean) + ")").c_str() ) ( - "pulsar-birth-magnetic-field-distribution-sigma", - po::value(&p_Options->m_PulsarBirthMagneticFieldDistributionSigma)->default_value(p_Options->m_PulsarBirthMagneticFieldDistributionSigma), + "pulsar-birth-magnetic-field-distribution-sigma", + po::value(&p_Options->m_PulsarBirthMagneticFieldDistributionSigma)->default_value(p_Options->m_PulsarBirthMagneticFieldDistributionSigma), ("Standard deviation of normal or lognormal distribution for birth magnetic field (log10 B/G) (default = " + std::to_string(p_Options->m_PulsarBirthMagneticFieldDistributionSigma) + ")").c_str() ) ( - "pulsar-birth-spin-period-distribution-max", - po::value(&p_Options->m_PulsarBirthSpinPeriodDistributionMax)->default_value(p_Options->m_PulsarBirthSpinPeriodDistributionMax), + "pulsar-birth-spin-period-distribution-max", + po::value(&p_Options->m_PulsarBirthSpinPeriodDistributionMax)->default_value(p_Options->m_PulsarBirthSpinPeriodDistributionMax), ("Maximum pulsar birth spin period, in ms (default = " + std::to_string(p_Options->m_PulsarBirthSpinPeriodDistributionMax) + ")").c_str() ) ( - "pulsar-birth-spin-period-distribution-min", - po::value(&p_Options->m_PulsarBirthSpinPeriodDistributionMin)->default_value(p_Options->m_PulsarBirthSpinPeriodDistributionMin), + "pulsar-birth-spin-period-distribution-min", + po::value(&p_Options->m_PulsarBirthSpinPeriodDistributionMin)->default_value(p_Options->m_PulsarBirthSpinPeriodDistributionMin), ("Minimum pulsar birth spin period, in ms (default = " + std::to_string(p_Options->m_PulsarBirthSpinPeriodDistributionMin) + ")").c_str() ) ( - "pulsar-birth-spin-period-distribution-mean", - po::value(&p_Options->m_PulsarBirthSpinPeriodDistributionMean)->default_value(p_Options->m_PulsarBirthSpinPeriodDistributionMean), + "pulsar-birth-spin-period-distribution-mean", + po::value(&p_Options->m_PulsarBirthSpinPeriodDistributionMean)->default_value(p_Options->m_PulsarBirthSpinPeriodDistributionMean), ("Mean of normal or lognormal distribution for birth spin period (ms) (default = " + std::to_string(p_Options->m_PulsarBirthSpinPeriodDistributionMax) + ")").c_str() ) ( - "pulsar-birth-spin-period-distribution-sigma", - po::value(&p_Options->m_PulsarBirthSpinPeriodDistributionSigma)->default_value(p_Options->m_PulsarBirthSpinPeriodDistributionSigma), + "pulsar-birth-spin-period-distribution-sigma", + po::value(&p_Options->m_PulsarBirthSpinPeriodDistributionSigma)->default_value(p_Options->m_PulsarBirthSpinPeriodDistributionSigma), ("Standard deviation of normal or lognormal distribution for birth spin period (ms) (default = " + std::to_string(p_Options->m_PulsarBirthSpinPeriodDistributionSigma) + ")").c_str() ) ( - "pulsar-magnetic-field-decay-massscale", - po::value(&p_Options->m_PulsarMagneticFieldDecayMassscale)->default_value(p_Options->m_PulsarMagneticFieldDecayMassscale), + "pulsar-magnetic-field-decay-massscale", + po::value(&p_Options->m_PulsarMagneticFieldDecayMassscale)->default_value(p_Options->m_PulsarMagneticFieldDecayMassscale), ("Mass scale on which magnetic field decays during accretion, in Msol (default = " + std::to_string(p_Options->m_PulsarMagneticFieldDecayMassscale) + ")").c_str() ) ( - "pulsar-magnetic-field-decay-timescale", - po::value(&p_Options->m_PulsarMagneticFieldDecayTimescale)->default_value(p_Options->m_PulsarMagneticFieldDecayTimescale), + "pulsar-magnetic-field-decay-timescale", + po::value(&p_Options->m_PulsarMagneticFieldDecayTimescale)->default_value(p_Options->m_PulsarMagneticFieldDecayTimescale), ("Timescale on which magnetic field decays, in Myr (default = " + std::to_string(p_Options->m_PulsarMagneticFieldDecayTimescale) + ")").c_str() ) ( - "pulsar-minimum-magnetic-field", - po::value(&p_Options->m_PulsarLog10MinimumMagneticField)->default_value(p_Options->m_PulsarLog10MinimumMagneticField), + "pulsar-minimum-magnetic-field", + po::value(&p_Options->m_PulsarLog10MinimumMagneticField)->default_value(p_Options->m_PulsarLog10MinimumMagneticField), ("Minimum pulsar magnetic field, in log10(Gauss) (default = " + std::to_string(p_Options->m_PulsarLog10MinimumMagneticField) + ")").c_str() ) @@ -1684,7 +1684,7 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt po::value(&p_Options->m_RadialChangeFraction)->default_value(p_Options->m_RadialChangeFraction), ("Approximate goal for fractional radial change per timestep for SSE and BSE (default = " + std::to_string(p_Options->m_RadialChangeFraction) + ")").c_str() ) - + ( "rocket-kick-magnitude-1", po::value(&p_Options->m_RocketKickMagnitude1)->default_value(p_Options->m_RocketKickMagnitude1), @@ -1717,49 +1717,49 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ) ( - "rotational-frequency", - po::value(&p_Options->m_RotationalFrequency)->default_value(p_Options->m_RotationalFrequency), + "rotational-frequency", + po::value(&p_Options->m_RotationalFrequency)->default_value(p_Options->m_RotationalFrequency), ("Initial rotational frequency for the star for SSE (Hz) (default = " + std::to_string(p_Options->m_RotationalFrequency) + ")").c_str() - ) + ) ( - "rotational-frequency-1", - po::value(&p_Options->m_RotationalFrequency1)->default_value(p_Options->m_RotationalFrequency1), + "rotational-frequency-1", + po::value(&p_Options->m_RotationalFrequency1)->default_value(p_Options->m_RotationalFrequency1), ("Initial rotational frequency for the primary star for BSE (Hz) (default = " + std::to_string(p_Options->m_RotationalFrequency1) + ")").c_str() - ) + ) ( - "rotational-frequency-2", - po::value(&p_Options->m_RotationalFrequency2)->default_value(p_Options->m_RotationalFrequency2), + "rotational-frequency-2", + po::value(&p_Options->m_RotationalFrequency2)->default_value(p_Options->m_RotationalFrequency2), ("Initial rotational frequency for the secondary star for BSE (Hz) (default = " + std::to_string(p_Options->m_RotationalFrequency2) + ")").c_str() - ) - + ) + ( - "scale-terminal-wind-velocity-with-metallicity-power", - po::value(&p_Options->m_ScaleTerminalWindVelocityWithMetallicityPower)->default_value(p_Options->m_ScaleTerminalWindVelocityWithMetallicityPower), + "scale-terminal-wind-velocity-with-metallicity-power", + po::value(&p_Options->m_ScaleTerminalWindVelocityWithMetallicityPower)->default_value(p_Options->m_ScaleTerminalWindVelocityWithMetallicityPower), ("Power (x) with which to scale the terminal wind velocity (v_inf) with metallicity (Z) in the Vink+2001 prescription (v_inf ~ Z^x) (default = " + std::to_string(p_Options->m_ScaleTerminalWindVelocityWithMetallicityPower) + ")").c_str() ) ( - "semi-major-axis,a", - po::value(&p_Options->m_SemiMajorAxis)->default_value(p_Options->m_SemiMajorAxis), + "semi-major-axis,a", + po::value(&p_Options->m_SemiMajorAxis)->default_value(p_Options->m_SemiMajorAxis), ("Initial semi-major axis, in AU (default = " + std::to_string(p_Options->m_SemiMajorAxis) + ")").c_str() - ) + ) ( - "semi-major-axis-max", - po::value(&p_Options->m_SemiMajorAxisDistributionMax)->default_value(p_Options->m_SemiMajorAxisDistributionMax), + "semi-major-axis-max", + po::value(&p_Options->m_SemiMajorAxisDistributionMax)->default_value(p_Options->m_SemiMajorAxisDistributionMax), ("Maximum semi-major axis, in AU, to generate (default = " + std::to_string(p_Options->m_SemiMajorAxisDistributionMax) + ")").c_str() ) ( - "semi-major-axis-min", - po::value(&p_Options->m_SemiMajorAxisDistributionMin)->default_value(p_Options->m_SemiMajorAxisDistributionMin), + "semi-major-axis-min", + po::value(&p_Options->m_SemiMajorAxisDistributionMin)->default_value(p_Options->m_SemiMajorAxisDistributionMin), ("Minimum semi-major axis, in AU, to generate (default = " + std::to_string(p_Options->m_SemiMajorAxisDistributionMin) + ")").c_str() ) ( - "system-snapshot-age-thresholds", - po::value(&p_Options->m_SystemSnapshotAgeThresholds)->multitoken()->default_value(p_Options->m_SystemSnapshotAgeThresholds), + "system-snapshot-age-thresholds", + po::value(&p_Options->m_SystemSnapshotAgeThresholds)->multitoken()->default_value(p_Options->m_SystemSnapshotAgeThresholds), ("System detailed output logging system age thresholds (default = " + defaultSystemSnapshotAgeThresholds + ")").c_str() ) ( - "system-snapshot-time-thresholds", - po::value(&p_Options->m_SystemSnapshotTimeThresholds)->multitoken()->default_value(p_Options->m_SystemSnapshotTimeThresholds), + "system-snapshot-time-thresholds", + po::value(&p_Options->m_SystemSnapshotTimeThresholds)->multitoken()->default_value(p_Options->m_SystemSnapshotTimeThresholds), ("System detailed output logging simulation time thresholds (default = " + defaultSystemSnapshotTimeThresholds + ")").c_str() ) @@ -1775,24 +1775,24 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ) ( - "wolf-rayet-multiplier", - po::value(&p_Options->m_WolfRayetFactor)->default_value(p_Options->m_WolfRayetFactor), + "wolf-rayet-multiplier", + po::value(&p_Options->m_WolfRayetFactor)->default_value(p_Options->m_WolfRayetFactor), ("Multiplicitive constant for WR winds (default = " + std::to_string(p_Options->m_WolfRayetFactor) + ")").c_str() ) ( - "zeta-adiabatic-arbitrary", - po::value(&p_Options->m_ZetaAdiabaticArbitrary)->default_value(p_Options->m_ZetaAdiabaticArbitrary), + "zeta-adiabatic-arbitrary", + po::value(&p_Options->m_ZetaAdiabaticArbitrary)->default_value(p_Options->m_ZetaAdiabaticArbitrary), ("Value of mass-radius exponent zeta adiabatic (default = " + std::to_string(p_Options->m_ZetaAdiabaticArbitrary) + ")").c_str() ) ( - "zeta-main-sequence", - po::value(&p_Options->m_ZetaMainSequence)->default_value(p_Options->m_ZetaMainSequence), + "zeta-main-sequence", + po::value(&p_Options->m_ZetaMainSequence)->default_value(p_Options->m_ZetaMainSequence), ("Value of mass-radius exponent zeta on the main sequence (default = " + std::to_string(p_Options->m_ZetaMainSequence) + ")").c_str() ) ( - "zeta-radiative-envelope-giant", - po::value(&p_Options->m_ZetaRadiativeEnvelopeGiant)->default_value(p_Options->m_ZetaRadiativeEnvelopeGiant), + "zeta-radiative-envelope-giant", + po::value(&p_Options->m_ZetaRadiativeEnvelopeGiant)->default_value(p_Options->m_ZetaRadiativeEnvelopeGiant), ("Value of mass-radius exponent zeta for radiative envelope giants (default = " + std::to_string(p_Options->m_ZetaRadiativeEnvelopeGiant) + ")").c_str() ) @@ -1800,25 +1800,25 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt // string options - alphabetically ( - "add-options-to-sysparms", - po::value(&p_Options->m_AddOptionsToSysParms.typeString)->default_value(p_Options->m_AddOptionsToSysParms.typeString), + "add-options-to-sysparms", + po::value(&p_Options->m_AddOptionsToSysParms.typeString)->default_value(p_Options->m_AddOptionsToSysParms.typeString), ("Add program options columns to BSE/SSE SysParms file (" + AllowedOptionValuesFormatted("add-options-to-sysparms") + ", default = '" + p_Options->m_AddOptionsToSysParms.typeString + "')").c_str() ) ( - "black-hole-kicks-mode", - po::value(&p_Options->m_BlackHoleKicksMode.typeString)->default_value(p_Options->m_BlackHoleKicksMode.typeString), + "black-hole-kicks-mode", + po::value(&p_Options->m_BlackHoleKicksMode.typeString)->default_value(p_Options->m_BlackHoleKicksMode.typeString), ("Black hole kicks prescription (" + AllowedOptionValuesFormatted("black-hole-kicks-mode") + ", default = '" + p_Options->m_BlackHoleKicksMode.typeString + "')").c_str() ) ( - "case-BB-stability-prescription", - po::value(&p_Options->m_CaseBBStabilityPrescription.typeString)->default_value(p_Options->m_CaseBBStabilityPrescription.typeString), + "case-BB-stability-prescription", + po::value(&p_Options->m_CaseBBStabilityPrescription.typeString)->default_value(p_Options->m_CaseBBStabilityPrescription.typeString), ("Case BB/BC mass transfer stability prescription (" + AllowedOptionValuesFormatted("case-BB-stability-prescription") + ", default = '" + p_Options->m_CaseBBStabilityPrescription.typeString + "')").c_str() ) ( - "chemically-homogeneous-evolution-mode", - po::value(&p_Options->m_CheMode.typeString)->default_value(p_Options->m_CheMode.typeString), + "chemically-homogeneous-evolution-mode", + po::value(&p_Options->m_CheMode.typeString)->default_value(p_Options->m_CheMode.typeString), ("Chemically Homogeneous Evolution mode (" + AllowedOptionValuesFormatted("chemically-homogeneous-evolution-mode") + ", default = '" + p_Options->m_CheMode.typeString + "')").c_str() ) ( @@ -1827,13 +1827,13 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ("Common envelope formalism (" + AllowedOptionValuesFormatted("common-envelope-formalism") + ", default = '" + p_Options->m_CommonEnvelopeFormalism.typeString + "')").c_str() ) ( - "common-envelope-lambda-prescription", - po::value(&p_Options->m_CommonEnvelopeLambdaPrescription.typeString)->default_value(p_Options->m_CommonEnvelopeLambdaPrescription.typeString), + "common-envelope-lambda-prescription", + po::value(&p_Options->m_CommonEnvelopeLambdaPrescription.typeString)->default_value(p_Options->m_CommonEnvelopeLambdaPrescription.typeString), ("CE lambda prescription (" + AllowedOptionValuesFormatted("common-envelope-lambda-prescription") + ", default = '" + p_Options->m_CommonEnvelopeLambdaPrescription.typeString + "')").c_str() ) ( - "common-envelope-mass-accretion-prescription", - po::value(&p_Options->m_CommonEnvelopeMassAccretionPrescription.typeString)->default_value(p_Options->m_CommonEnvelopeMassAccretionPrescription.typeString), + "common-envelope-mass-accretion-prescription", + po::value(&p_Options->m_CommonEnvelopeMassAccretionPrescription.typeString)->default_value(p_Options->m_CommonEnvelopeMassAccretionPrescription.typeString), ("Assumption about whether NS/BHs can accrete mass during common envelope evolution (" + AllowedOptionValuesFormatted("common-envelope-mass-accretion-prescription") + ", default = '" + p_Options->m_CommonEnvelopeMassAccretionPrescription.typeString + "')").c_str() ) ( @@ -1842,234 +1842,234 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ("Second stage of 2-stage CE gamma prescription (" + AllowedOptionValuesFormatted("common-envelope-second-stage-gamma-prescription") + ", default = '" + p_Options->m_CommonEnvelopeSecondStageGammaPrescription.typeString + "')").c_str() ) ( - "create-YAML-file", - po::value(&p_Options->m_YAMLfilename)->default_value(p_Options->m_YAMLfilename), + "create-YAML-file", + po::value(&p_Options->m_YAMLfilename)->default_value(p_Options->m_YAMLfilename), ("Create YAML file (default = " + p_Options->m_YAMLfilename + ")").c_str() ) ( - "critical-mass-ratio-prescription", + "critical-mass-ratio-prescription", po::value(&p_Options->m_QCritPrescription.typeString)->default_value(p_Options->m_QCritPrescription.typeString), ("Prescription for which critical mass ratio threshold to use, if any (" + AllowedOptionValuesFormatted("critical-mass-ratio-prescription") + ", default = '" + p_Options->m_QCritPrescription.typeString + "')").c_str() ) - + ( - "eccentricity-distribution", - po::value(&p_Options->m_EccentricityDistribution.typeString)->default_value(p_Options->m_EccentricityDistribution.typeString), + "eccentricity-distribution", + po::value(&p_Options->m_EccentricityDistribution.typeString)->default_value(p_Options->m_EccentricityDistribution.typeString), ("Initial eccentricity distribution (" + AllowedOptionValuesFormatted("eccentricity-distribution") + ", default = '" + p_Options->m_EccentricityDistribution.typeString + "')").c_str() ) ( - "envelope-state-prescription", - po::value(&p_Options->m_EnvelopeStatePrescription.typeString)->default_value(p_Options->m_EnvelopeStatePrescription.typeString), + "envelope-state-prescription", + po::value(&p_Options->m_EnvelopeStatePrescription.typeString)->default_value(p_Options->m_EnvelopeStatePrescription.typeString), ("Prescription for whether the envelope is radiative or convective (" + AllowedOptionValuesFormatted("envelope-state-prescription") + ", default = '" + p_Options->m_EnvelopeStatePrescription.typeString + "')").c_str() ) ( - "fp-error-mode", - po::value(&p_Options->m_FPErrorMode.typeString)->default_value(p_Options->m_FPErrorMode.typeString), + "fp-error-mode", + po::value(&p_Options->m_FPErrorMode.typeString)->default_value(p_Options->m_FPErrorMode.typeString), ("Specifies the floating-point error handling mode (" + AllowedOptionValuesFormatted("fp-error-mode") + ", default = '" + p_Options->m_FPErrorMode.typeString + "')").c_str() ) ( - "fryer-supernova-engine", - po::value(&p_Options->m_FryerSupernovaEngine.typeString)->default_value(p_Options->m_FryerSupernovaEngine.typeString), + "fryer-supernova-engine", + po::value(&p_Options->m_FryerSupernovaEngine.typeString)->default_value(p_Options->m_FryerSupernovaEngine.typeString), ("If using Fryer et al 2012 fallback prescription (" + AllowedOptionValuesFormatted("fryer-supernova-engine") + ", default = '" + p_Options->m_FryerSupernovaEngine.typeString + "')").c_str() ) ( - "grid", + "grid", po::value(&p_Options->m_GridFilename)->default_value(p_Options->m_GridFilename)->implicit_value(""), ("Grid filename (default = " + p_Options->m_GridFilename + ")").c_str() ) ( - "initial-mass-function,i", - po::value(&p_Options->m_InitialMassFunction.typeString)->default_value(p_Options->m_InitialMassFunction.typeString), + "initial-mass-function,i", + po::value(&p_Options->m_InitialMassFunction.typeString)->default_value(p_Options->m_InitialMassFunction.typeString), ("Initial mass function (" + AllowedOptionValuesFormatted("initial-mass-function") + ", default = '" + p_Options->m_InitialMassFunction.typeString + "')").c_str() ) ( "kick-direction-distribution", - po::value(&p_Options->m_KickDirectionDistribution.typeString)->default_value(p_Options->m_KickDirectionDistribution.typeString), + po::value(&p_Options->m_KickDirectionDistribution.typeString)->default_value(p_Options->m_KickDirectionDistribution.typeString), ("Natal kick direction distribution (" + AllowedOptionValuesFormatted("kick-direction-distribution") + ", default = '" + p_Options->m_KickDirectionDistribution.typeString + "')").c_str() ) ( - "kick-magnitude-distribution", - po::value(&p_Options->m_KickMagnitudeDistribution.typeString)->default_value(p_Options->m_KickMagnitudeDistribution.typeString), + "kick-magnitude-distribution", + po::value(&p_Options->m_KickMagnitudeDistribution.typeString)->default_value(p_Options->m_KickMagnitudeDistribution.typeString), ("Natal kick magnitude distribution (" + AllowedOptionValuesFormatted("kick-magnitude-distribution") + ", default = '" + p_Options->m_KickMagnitudeDistribution.typeString + "')").c_str() ) ( - "logfile-rlof-parameters", - po::value(&p_Options->m_LogfileRLOFParameters)->default_value(p_Options->m_LogfileRLOFParameters), + "logfile-rlof-parameters", + po::value(&p_Options->m_LogfileRLOFParameters)->default_value(p_Options->m_LogfileRLOFParameters), ("Filename for BSE RLOF Parameters logfile ( default = " + p_Options->m_LogfileRLOFParameters + ")").c_str() ) ( - "logfile-common-envelopes", - po::value(&p_Options->m_LogfileCommonEnvelopes)->default_value(p_Options->m_LogfileCommonEnvelopes), + "logfile-common-envelopes", + po::value(&p_Options->m_LogfileCommonEnvelopes)->default_value(p_Options->m_LogfileCommonEnvelopes), ("Filename for BSE Common Envelopes logfile (default = " + p_Options->m_LogfileCommonEnvelopes + ")").c_str() ) ( - "logfile-detailed-output", - po::value(&p_Options->m_LogfileDetailedOutput)->default_value(p_Options->m_LogfileDetailedOutput), + "logfile-detailed-output", + po::value(&p_Options->m_LogfileDetailedOutput)->default_value(p_Options->m_LogfileDetailedOutput), ("Filename for BSE Detailed Output logfile (default = " + p_Options->m_LogfileDetailedOutput + ")").c_str() ) ( - "logfile-double-compact-objects", - po::value(&p_Options->m_LogfileDoubleCompactObjects)->default_value(p_Options->m_LogfileDoubleCompactObjects), + "logfile-double-compact-objects", + po::value(&p_Options->m_LogfileDoubleCompactObjects)->default_value(p_Options->m_LogfileDoubleCompactObjects), ("Filename for Double Compact Objects logfile (default = " + p_Options->m_LogfileDoubleCompactObjects + ")").c_str() ) ( - "logfile-pulsar-evolution", - po::value(&p_Options->m_LogfilePulsarEvolution)->default_value(p_Options->m_LogfilePulsarEvolution), + "logfile-pulsar-evolution", + po::value(&p_Options->m_LogfilePulsarEvolution)->default_value(p_Options->m_LogfilePulsarEvolution), ("Filename for Pulsar Evolution logfile (default = " + p_Options->m_LogfilePulsarEvolution + ")").c_str() ) ( - "logfile-supernovae", - po::value(&p_Options->m_LogfileSupernovae)->default_value(p_Options->m_LogfileSupernovae), + "logfile-supernovae", + po::value(&p_Options->m_LogfileSupernovae)->default_value(p_Options->m_LogfileSupernovae), ("Filename for Supernovae logfile (default = " + p_Options->m_LogfileSupernovae + ")").c_str() ) ( - "logfile-system-snapshot-log", - po::value(&p_Options->m_LogfileSystemSnapshotLog)->default_value(p_Options->m_LogfileSystemSnapshotLog), + "logfile-system-snapshot-log", + po::value(&p_Options->m_LogfileSystemSnapshotLog)->default_value(p_Options->m_LogfileSystemSnapshotLog), ("Filename for System Snapshot logfile (default = " + p_Options->m_LogfileSystemSnapshotLog + ")").c_str() ) ( - "logfile-system-parameters", - po::value(&p_Options->m_LogfileSystemParameters)->default_value(p_Options->m_LogfileSystemParameters), + "logfile-system-parameters", + po::value(&p_Options->m_LogfileSystemParameters)->default_value(p_Options->m_LogfileSystemParameters), ("Filename for System Parameters logfile (default = " + p_Options->m_LogfileSystemParameters + ")").c_str() ) ( - "logfile-definitions", - po::value(&p_Options->m_LogfileDefinitionsFilename)->default_value(p_Options->m_LogfileDefinitionsFilename)->implicit_value(""), + "logfile-definitions", + po::value(&p_Options->m_LogfileDefinitionsFilename)->default_value(p_Options->m_LogfileDefinitionsFilename)->implicit_value(""), ("Filename for logfile record definitions (default = " + p_Options->m_LogfileDefinitionsFilename + ")").c_str() ) ( - "logfile-name-prefix", - po::value(&p_Options->m_LogfileNamePrefix)->default_value(p_Options->m_LogfileNamePrefix)->implicit_value(""), + "logfile-name-prefix", + po::value(&p_Options->m_LogfileNamePrefix)->default_value(p_Options->m_LogfileNamePrefix)->implicit_value(""), ("Prefix for logfile names (default = " + p_Options->m_LogfileNamePrefix + ")").c_str() ) ( - "logfile-switch-log", - po::value(&p_Options->m_LogfileSwitchLog)->default_value(p_Options->m_LogfileSwitchLog), + "logfile-switch-log", + po::value(&p_Options->m_LogfileSwitchLog)->default_value(p_Options->m_LogfileSwitchLog), ("Filename for Switch Log logfile (default = " + p_Options->m_LogfileSwitchLog + ")").c_str() ) ( - "logfile-type", - po::value(&p_Options->m_LogfileType.typeString)->default_value(p_Options->m_LogfileType.typeString), + "logfile-type", + po::value(&p_Options->m_LogfileType.typeString)->default_value(p_Options->m_LogfileType.typeString), ("File type for logfiles (" + AllowedOptionValuesFormatted("logfile-type") + ", default = '" + p_Options->m_LogfileType.typeString + "')").c_str() ) ( "LBV-mass-loss-prescription", - po::value(&p_Options->m_LBVMassLossPrescription.typeString)->default_value(p_Options->m_LBVMassLossPrescription.typeString), + po::value(&p_Options->m_LBVMassLossPrescription.typeString)->default_value(p_Options->m_LBVMassLossPrescription.typeString), ("LBV Mass loss prescription (" + AllowedOptionValuesFormatted("LBV-mass-loss-prescription") + ", default = '" + p_Options->m_LBVMassLossPrescription.typeString + "')").c_str() ) ( "main-sequence-core-mass-prescription", po::value(&p_Options->m_MainSequenceCoreMassPrescription.typeString)->default_value(p_Options->m_MainSequenceCoreMassPrescription.typeString), - + ("Main Sequence core mass prescription (" + AllowedOptionValuesFormatted("main-sequence-core-mass-prescription") + ", default = '" + p_Options->m_MainSequenceCoreMassPrescription.typeString + "')").c_str() ) ( "maltsev-mode", - po::value(&p_Options->m_MaltsevMode.typeString)->default_value(p_Options->m_MaltsevMode.typeString), + po::value(&p_Options->m_MaltsevMode.typeString)->default_value(p_Options->m_MaltsevMode.typeString), ("Maltsev mode (" + AllowedOptionValuesFormatted("maltsev-mode") + ", default = '" + p_Options->m_MaltsevMode.typeString + "')").c_str() ) ( "mass-loss-prescription", - po::value(&p_Options->m_MassLossPrescription.typeString)->default_value(p_Options->m_MassLossPrescription.typeString), + po::value(&p_Options->m_MassLossPrescription.typeString)->default_value(p_Options->m_MassLossPrescription.typeString), ("Mass loss prescription (" + AllowedOptionValuesFormatted("mass-loss-prescription") + ", default = '" + p_Options->m_MassLossPrescription.typeString + "')").c_str() ) ( - "mass-ratio-distribution", - po::value(&p_Options->m_MassRatioDistribution.typeString)->default_value(p_Options->m_MassRatioDistribution.typeString), + "mass-ratio-distribution", + po::value(&p_Options->m_MassRatioDistribution.typeString)->default_value(p_Options->m_MassRatioDistribution.typeString), ("Initial mass ratio distribution for q=m2/m1 (" + AllowedOptionValuesFormatted("mass-ratio-distribution") + ", default = '" + p_Options->m_MassRatioDistribution.typeString + "')").c_str() ) ( - "mass-transfer-accretion-efficiency-prescription", - po::value(&p_Options->m_MassTransferAccretionEfficiencyPrescription.typeString)->default_value(p_Options->m_MassTransferAccretionEfficiencyPrescription.typeString), + "mass-transfer-accretion-efficiency-prescription", + po::value(&p_Options->m_MassTransferAccretionEfficiencyPrescription.typeString)->default_value(p_Options->m_MassTransferAccretionEfficiencyPrescription.typeString), ("Mass Transfer Accretion Efficiency prescription (" + AllowedOptionValuesFormatted("mass-transfer-accretion-efficiency-prescription") + ", default = '" + p_Options->m_MassTransferAccretionEfficiencyPrescription.typeString + "')").c_str() ) ( - "mass-transfer-angular-momentum-loss-prescription", - po::value(&p_Options->m_MassTransferAngularMomentumLossPrescription.typeString)->default_value(p_Options->m_MassTransferAngularMomentumLossPrescription.typeString), + "mass-transfer-angular-momentum-loss-prescription", + po::value(&p_Options->m_MassTransferAngularMomentumLossPrescription.typeString)->default_value(p_Options->m_MassTransferAngularMomentumLossPrescription.typeString), ("Mass Transfer Angular Momentum Loss prescription (" + AllowedOptionValuesFormatted("mass-transfer-angular-momentum-loss-prescription") + ", default = '" + p_Options->m_MassTransferAngularMomentumLossPrescription.typeString + "')").c_str() ) ( - "mass-transfer-rejuvenation-prescription", - po::value(&p_Options->m_MassTransferRejuvenationPrescription.typeString)->default_value(p_Options->m_MassTransferRejuvenationPrescription.typeString), + "mass-transfer-rejuvenation-prescription", + po::value(&p_Options->m_MassTransferRejuvenationPrescription.typeString)->default_value(p_Options->m_MassTransferRejuvenationPrescription.typeString), ("Mass Transfer Rejuvenation prescription (" + AllowedOptionValuesFormatted("mass-transfer-rejuvenation-prescription") + ", default = '" + p_Options->m_MassTransferRejuvenationPrescription.typeString + "')").c_str() ) ( "mass-transfer-thermal-limit-accretor-multiplier", - po::value(&p_Options->m_MassTransferThermallyLimitedVariation.typeString)->default_value(p_Options->m_MassTransferThermallyLimitedVariation.typeString), + po::value(&p_Options->m_MassTransferThermallyLimitedVariation.typeString)->default_value(p_Options->m_MassTransferThermallyLimitedVariation.typeString), ("Mass Transfer Thermal Accretion limit (" + AllowedOptionValuesFormatted("mass-transfer-thermal-limit-accretor-multiplier") + ", default = '" + p_Options->m_MassTransferThermallyLimitedVariation.typeString + "')").c_str() ) ( - "metallicity-distribution", - po::value(&p_Options->m_MetallicityDistribution.typeString)->default_value(p_Options->m_MetallicityDistribution.typeString), + "metallicity-distribution", + po::value(&p_Options->m_MetallicityDistribution.typeString)->default_value(p_Options->m_MetallicityDistribution.typeString), ("Metallicity distribution (" + AllowedOptionValuesFormatted("metallicity-distribution") + ", default = '" + p_Options->m_MetallicityDistribution.typeString + "')").c_str() ) ( - "mode", - po::value(&p_Options->m_EvolutionMode.typeString)->default_value(p_Options->m_EvolutionMode.typeString), + "mode", + po::value(&p_Options->m_EvolutionMode.typeString)->default_value(p_Options->m_EvolutionMode.typeString), ("Evolution mode (" + AllowedOptionValuesFormatted("mode") + ", default = '" + p_Options->m_EvolutionMode.typeString + "')").c_str() ) ( - "neutrino-mass-loss-BH-formation", - po::value(&p_Options->m_NeutrinoMassLossAssumptionBH.typeString)->default_value(p_Options->m_NeutrinoMassLossAssumptionBH.typeString), + "neutrino-mass-loss-BH-formation", + po::value(&p_Options->m_NeutrinoMassLossAssumptionBH.typeString)->default_value(p_Options->m_NeutrinoMassLossAssumptionBH.typeString), ("Assumption about neutrino mass loss during BH formation (" + AllowedOptionValuesFormatted("neutrino-mass-loss-BH-formation") + ", default = '" + p_Options->m_NeutrinoMassLossAssumptionBH.typeString + "')").c_str() ) ( - "neutron-star-accretion-in-ce", - po::value(&p_Options->m_NeutronStarAccretionInCE.typeString)->default_value(p_Options->m_NeutronStarAccretionInCE.typeString), + "neutron-star-accretion-in-ce", + po::value(&p_Options->m_NeutronStarAccretionInCE.typeString)->default_value(p_Options->m_NeutronStarAccretionInCE.typeString), ("Neutron star accretion in common envelope to use (" + AllowedOptionValuesFormatted("neutron-star-accretion-in-ce") + ", default = '" + p_Options->m_NeutronStarAccretionInCE.typeString + "')").c_str() ) ( - "neutron-star-equation-of-state", - po::value(&p_Options->m_NeutronStarEquationOfState.typeString)->default_value(p_Options->m_NeutronStarEquationOfState.typeString), + "neutron-star-equation-of-state", + po::value(&p_Options->m_NeutronStarEquationOfState.typeString)->default_value(p_Options->m_NeutronStarEquationOfState.typeString), ("Neutron star equation of state to use (" + AllowedOptionValuesFormatted("neutron-star-equation-of-state") + ", default = '" + p_Options->m_NeutronStarEquationOfState.typeString + "')").c_str() ) ( "OB-mass-loss-prescription", - po::value(&p_Options->m_OBMassLossPrescription.typeString)->default_value(p_Options->m_OBMassLossPrescription.typeString), + po::value(&p_Options->m_OBMassLossPrescription.typeString)->default_value(p_Options->m_OBMassLossPrescription.typeString), ("OB mass loss prescription (" + AllowedOptionValuesFormatted("OB-mass-loss-prescription") + ", default = '" + p_Options->m_OBMassLossPrescription.typeString + "')").c_str() ) ( - "orbital-period-distribution", - po::value(&p_Options->m_OrbitalPeriodDistribution.typeString)->default_value(p_Options->m_OrbitalPeriodDistribution.typeString), + "orbital-period-distribution", + po::value(&p_Options->m_OrbitalPeriodDistribution.typeString)->default_value(p_Options->m_OrbitalPeriodDistribution.typeString), ("Initial orbital period distribution (" + AllowedOptionValuesFormatted("orbital-period-distribution") + ", default = '" + p_Options->m_OrbitalPeriodDistribution.typeString + "')").c_str() - ) + ) ( - "output-container,c", - po::value(&p_Options->m_OutputContainerName)->default_value(p_Options->m_OutputContainerName)->implicit_value(""), + "output-container,c", + po::value(&p_Options->m_OutputContainerName)->default_value(p_Options->m_OutputContainerName)->implicit_value(""), ("Container (directory) name for output files (default = " + p_Options->m_OutputContainerName + ")").c_str() ) ( - "output-path,o", - po::value(&p_Options->m_OutputPathString)->default_value(p_Options->m_OutputPathString)->implicit_value(""), + "output-path,o", + po::value(&p_Options->m_OutputPathString)->default_value(p_Options->m_OutputPathString)->implicit_value(""), ("Directory for output (default = " + p_Options->m_OutputPathString + ")").c_str() ) ( - "pulsar-birth-magnetic-field-distribution", - po::value(&p_Options->m_PulsarBirthMagneticFieldDistribution.typeString)->default_value(p_Options->m_PulsarBirthMagneticFieldDistribution.typeString), + "pulsar-birth-magnetic-field-distribution", + po::value(&p_Options->m_PulsarBirthMagneticFieldDistribution.typeString)->default_value(p_Options->m_PulsarBirthMagneticFieldDistribution.typeString), ("Pulsar Birth Magnetic Field distribution (" + AllowedOptionValuesFormatted("pulsar-birth-magnetic-field-distribution") + ", default = '" + p_Options->m_PulsarBirthMagneticFieldDistribution.typeString + "')").c_str() ) ( - "pulsar-birth-spin-period-distribution", - po::value(&p_Options->m_PulsarBirthSpinPeriodDistribution.typeString)->default_value(p_Options->m_PulsarBirthSpinPeriodDistribution.typeString), + "pulsar-birth-spin-period-distribution", + po::value(&p_Options->m_PulsarBirthSpinPeriodDistribution.typeString)->default_value(p_Options->m_PulsarBirthSpinPeriodDistribution.typeString), ("Pulsar Birth Spin Period distribution (" + AllowedOptionValuesFormatted("pulsar-birth-spin-period-distribution") + ", default = '" + p_Options->m_PulsarBirthSpinPeriodDistribution.typeString + "')").c_str() ) ( - "pulsational-pair-instability-prescription", - po::value(&p_Options->m_PulsationalPairInstabilityPrescription.typeString)->default_value(p_Options->m_PulsationalPairInstabilityPrescription.typeString), + "pulsational-pair-instability-prescription", + po::value(&p_Options->m_PulsationalPairInstabilityPrescription.typeString)->default_value(p_Options->m_PulsationalPairInstabilityPrescription.typeString), ("Pulsational Pair Instability prescription (" + AllowedOptionValuesFormatted("pulsational-pair-instability-prescription") + ", default = '" + p_Options->m_PulsationalPairInstabilityPrescription.typeString + "')").c_str() ) ( - "remnant-mass-prescription", - po::value(&p_Options->m_RemnantMassPrescription.typeString)->default_value(p_Options->m_RemnantMassPrescription.typeString), + "remnant-mass-prescription", + po::value(&p_Options->m_RemnantMassPrescription.typeString)->default_value(p_Options->m_RemnantMassPrescription.typeString), ("Choose remnant mass prescription (" + AllowedOptionValuesFormatted("remnant-mass-prescription") + ", default = '" + p_Options->m_RemnantMassPrescription.typeString + "')").c_str() ) ( @@ -2078,29 +2078,29 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ("Response to spin-up prescription (" + AllowedOptionValuesFormatted("response-to-spin-up") + ", default = '" + p_Options->m_ResponseToSpinUp.typeString + "')").c_str() ) ( - "rotational-velocity-distribution", - po::value(&p_Options->m_RotationalVelocityDistribution.typeString)->default_value(p_Options->m_RotationalVelocityDistribution.typeString), + "rotational-velocity-distribution", + po::value(&p_Options->m_RotationalVelocityDistribution.typeString)->default_value(p_Options->m_RotationalVelocityDistribution.typeString), ("Initial rotational velocity distribution (" + AllowedOptionValuesFormatted("rotational-velocity-distribution") + ", default = '" + p_Options->m_RotationalVelocityDistribution.typeString + "')").c_str() ) ( "RSG-mass-loss-prescription", - po::value(&p_Options->m_RSGMassLossPrescription.typeString)->default_value(p_Options->m_RSGMassLossPrescription.typeString), + po::value(&p_Options->m_RSGMassLossPrescription.typeString)->default_value(p_Options->m_RSGMassLossPrescription.typeString), ("RSG mass loss prescription (" + AllowedOptionValuesFormatted("RSG-mass-loss-prescription") + ", default = '" + p_Options->m_RSGMassLossPrescription.typeString + "')").c_str() ) ( - "semi-major-axis-distribution", - po::value(&p_Options->m_SemiMajorAxisDistribution.typeString)->default_value(p_Options->m_SemiMajorAxisDistribution.typeString), + "semi-major-axis-distribution", + po::value(&p_Options->m_SemiMajorAxisDistribution.typeString)->default_value(p_Options->m_SemiMajorAxisDistribution.typeString), ("Initial semi-major axis distribution (" + AllowedOptionValuesFormatted("semi-major-axis-distribution") + ", default = '" + p_Options->m_SemiMajorAxisDistribution.typeString + "')").c_str() - ) + ) ( - "stellar-zeta-prescription", - po::value(&p_Options->m_StellarZetaPrescription.typeString)->default_value(p_Options->m_StellarZetaPrescription.typeString), + "stellar-zeta-prescription", + po::value(&p_Options->m_StellarZetaPrescription.typeString)->default_value(p_Options->m_StellarZetaPrescription.typeString), ("Prescription for stellar zeta (" + AllowedOptionValuesFormatted("stellar-zeta-prescription") + ", default = '" + p_Options->m_StellarZetaPrescription.typeString + "')").c_str() ) ( - "tides-prescription", - po::value(&p_Options->m_TidesPrescription.typeString)->default_value(p_Options->m_TidesPrescription.typeString), + "tides-prescription", + po::value(&p_Options->m_TidesPrescription.typeString)->default_value(p_Options->m_TidesPrescription.typeString), ("Tides Prescription (" + AllowedOptionValuesFormatted("tides-prescription") + ", default = '" + p_Options->m_TidesPrescription.typeString + "')").c_str() ) ( @@ -2110,46 +2110,46 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt ) ( - "YAML-template", - po::value(&p_Options->m_YAMLtemplate)->default_value(p_Options->m_YAMLtemplate), + "YAML-template", + po::value(&p_Options->m_YAMLtemplate)->default_value(p_Options->m_YAMLtemplate), ("User-supplied YAML template filename (default = " + p_Options->m_YAMLtemplate + ")").c_str() ) ( "VMS-mass-loss-prescription", - po::value(&p_Options->m_VMSMassLossPrescription.typeString)->default_value(p_Options->m_VMSMassLossPrescription.typeString), + po::value(&p_Options->m_VMSMassLossPrescription.typeString)->default_value(p_Options->m_VMSMassLossPrescription.typeString), ("Very massive star mass loss prescription (" + AllowedOptionValuesFormatted("VMS-mass-loss-prescription") + ", default = '" + p_Options->m_VMSMassLossPrescription.typeString + "')").c_str() ) ( "WR-mass-loss-prescription", - po::value(&p_Options->m_WRMassLossPrescription.typeString)->default_value(p_Options->m_WRMassLossPrescription.typeString), + po::value(&p_Options->m_WRMassLossPrescription.typeString)->default_value(p_Options->m_WRMassLossPrescription.typeString), ("WR mass loss prescription (" + AllowedOptionValuesFormatted("WR-mass-loss-prescription") + ", default = '" + p_Options->m_WRMassLossPrescription.typeString + "')").c_str() ) // vector (list) options - alphabetically ( - "debug-classes", - po::value(&p_Options->m_DebugClasses)->multitoken()->default_value(p_Options->m_DebugClasses), + "debug-classes", + po::value(&p_Options->m_DebugClasses)->multitoken()->default_value(p_Options->m_DebugClasses), ("Debug classes enabled (default = " + defaultDebugClasses + ")").c_str() ) ( - "log-classes", - po::value(&p_Options->m_LogClasses)->multitoken()->default_value(p_Options->m_LogClasses), + "log-classes", + po::value(&p_Options->m_LogClasses)->multitoken()->default_value(p_Options->m_LogClasses), ("Logging classes enabled (default = " + defaultLogClasses + ")").c_str() ) ( - "notes", - po::value(&p_Options->m_Notes)->multitoken()->default_value(p_Options->m_Notes), + "notes", + po::value(&p_Options->m_Notes)->multitoken()->default_value(p_Options->m_Notes), ("User-specified annotations (default = " + defaultNotes + ")").c_str() ) ( - "notes-hdrs", - po::value(&p_Options->m_NotesHdrs)->multitoken()->default_value(p_Options->m_NotesHdrs), + "notes-hdrs", + po::value(&p_Options->m_NotesHdrs)->multitoken()->default_value(p_Options->m_NotesHdrs), ("User-specified annotation header strings (default = " + defaultNotesHdrs + ")").c_str() ) - + ; // end the list of options to be added } @@ -2168,15 +2168,15 @@ bool Options::AddOptions(OptionValues *p_Options, po::options_description *p_Opt * Sets new values for options that are calculated or drawn from distributions * This is broken out into this function so that that it can be called each time * an options "variation" is advanced - * + * * Note this is a class OptionValues function. - * - * + * + * * std::string SetCalculatedOptionDefaults(const BOOST_MAP p_ModifyMap) - * + * * @param [IN] p_UpdateMap Flag indicating whether the Boost variables map should be updated * @return String containing an error string - * If no error occurred the return string will be the empty string + * If no error occurred the return string will be the empty string */ std::string Options::OptionValues::SetCalculatedOptionDefaults(const BOOST_MAP p_UpdateMap) { #define DEFAULTED(opt) m_VM[opt].defaulted() // for convenience and readability - undefined at end of function @@ -2195,7 +2195,7 @@ std::string Options::OptionValues::SetCalculatedOptionDefaults(const BOOST_MAP p po::notify(m_VM); } } - + if (DEFAULTED("kick-magnitude-random-1")) { m_KickMagnitudeRandom1 = RAND->Random(); if (p_UpdateMap == BOOST_MAP::UPDATE) { @@ -2203,7 +2203,7 @@ std::string Options::OptionValues::SetCalculatedOptionDefaults(const BOOST_MAP p po::notify(m_VM); } } - + if (DEFAULTED("kick-magnitude-random-2")) { m_KickMagnitudeRandom2 = RAND->Random(); if (p_UpdateMap == BOOST_MAP::UPDATE) { @@ -2214,7 +2214,7 @@ std::string Options::OptionValues::SetCalculatedOptionDefaults(const BOOST_MAP p // set "default" values for mean anomaly // only set if the user did not specify a value - + if (DEFAULTED("kick-mean-anomaly-1")) { m_KickMeanAnomaly1 = RAND->Random(0.0, _2_PI); if (p_UpdateMap == BOOST_MAP::UPDATE) { @@ -2232,7 +2232,7 @@ std::string Options::OptionValues::SetCalculatedOptionDefaults(const BOOST_MAP p } // set "default" values for m_KickPhi[1/2] and m_KickTheta[1/2] - // we now have the kick direction distribution and kick direction + // we now have the kick direction distribution and kick direction // power (exponent) required by the user (either default or specified) // only set if the user did not specify a value @@ -2299,28 +2299,28 @@ std::string Options::OptionValues::SetCalculatedOptionDefaults(const BOOST_MAP p /* * Sanity check options and option values - * + * * We can currently sample mass, metallicity, separation, eccentricity etc. within COMPAS, - * so those options don't need to be mandatory - but when we move all sampling out of + * so those options don't need to be mandatory - but when we move all sampling out of * COMPAS we will need to enforce those as mandatory options - unless we decide to leave * some minimal sampling inside COMPAS to allow for missing options. We would only need * to leave a single distribution for each - we wouldn't want to give the user the option * of choosing a distribution - the functionality would only be for convenience if an * option was missing. - * + * * The boost variable map from the parsed options should already have been set before calling - * this function. This records, for each option, whether the user specified a value and, if - * so, the value specified by the user. This function sanity checks the user specified values, - * sets the values if all pass the sanity checks, then sets the values of the options not + * this function. This records, for each option, whether the user specified a value and, if + * so, the value specified by the user. This function sanity checks the user specified values, + * sets the values if all pass the sanity checks, then sets the values of the options not * specified by the user the the defaults specified here. - * + * * Note this is a class OptionValues function. - * - * + * + * * std::string Options::OptionValues::CheckAndSetOptions() - * + * * @return String containing an error string - * If no error occurred the return string will be the empty string + * If no error occurred the return string will be the empty string */ std::string Options::OptionValues::CheckAndSetOptions() { #define DEFAULTED(opt) m_VM[opt].defaulted() // for convenience and readability - undefined at end of function @@ -2350,7 +2350,7 @@ std::string Options::OptionValues::CheckAndSetOptions() { std::tie(found, m_CaseBBStabilityPrescription.type) = utils::GetMapKey(m_CaseBBStabilityPrescription.typeString, CASE_BB_STABILITY_PRESCRIPTION_LABEL, m_CaseBBStabilityPrescription.type); COMPLAIN_IF(!found, "Unknown Case BB/BC Mass Transfer Stability Prescription"); } - + if (!DEFAULTED("chemically-homogeneous-evolution-mode")) { // Chemically Homogeneous Evolution mode std::tie(found, m_CheMode.type) = utils::GetMapKey(m_CheMode.typeString, CHE_MODE_LABEL, m_CheMode.type); COMPLAIN_IF(!found, "Unknown Chemically Homogeneous Evolution mode"); @@ -2360,7 +2360,7 @@ std::string Options::OptionValues::CheckAndSetOptions() { std::tie(found, m_CommonEnvelopeFormalism.type) = utils::GetMapKey(m_CommonEnvelopeFormalism.typeString, CE_FORMALISM_LABEL, m_CommonEnvelopeFormalism.type); COMPLAIN_IF(!found, "Unknown CE Formalism"); } - + if (!DEFAULTED("common-envelope-lambda-prescription")) { // common envelope lambda prescription std::tie(found, m_CommonEnvelopeLambdaPrescription.type) = utils::GetMapKey(m_CommonEnvelopeLambdaPrescription.typeString, CE_LAMBDA_PRESCRIPTION_LABEL, m_CommonEnvelopeLambdaPrescription.type); COMPLAIN_IF(!found, "Unknown CE Lambda Prescription"); @@ -2370,7 +2370,7 @@ std::string Options::OptionValues::CheckAndSetOptions() { std::tie(found, m_CommonEnvelopeMassAccretionPrescription.type) = utils::GetMapKey(m_CommonEnvelopeMassAccretionPrescription.typeString, CE_ACCRETION_PRESCRIPTION_LABEL, m_CommonEnvelopeMassAccretionPrescription.type); COMPLAIN_IF(!found, "Unknown CE Mass Accretion Prescription"); } - + if (!DEFAULTED("common-envelope-second-stage-gamma-prescription")) { // second stagge of CE angular momentum loss prescription std::tie(found, m_CommonEnvelopeSecondStageGammaPrescription.type) = utils::GetMapKey(m_CommonEnvelopeSecondStageGammaPrescription.typeString, MT_ANGULAR_MOMENTUM_LOSS_PRESCRIPTION_LABEL, m_CommonEnvelopeSecondStageGammaPrescription.type); COMPLAIN_IF(!found, "Unknown Mass Transfer Angular Momentum Loss Prescription for 2-stage CE"); @@ -2380,7 +2380,7 @@ std::string Options::OptionValues::CheckAndSetOptions() { std::tie(found, m_QCritPrescription.type) = utils::GetMapKey(m_QCritPrescription.typeString, QCRIT_PRESCRIPTION_LABEL, m_QCritPrescription.type); COMPLAIN_IF(!found, "Unknown qCrit Prescription"); } - + if (!DEFAULTED("envelope-state-prescription")) { // envelope state prescription std::tie(found, m_EnvelopeStatePrescription.type) = utils::GetMapKey(m_EnvelopeStatePrescription.typeString, ENVELOPE_STATE_PRESCRIPTION_LABEL, m_EnvelopeStatePrescription.type); COMPLAIN_IF(!found, "Unknown Envelope State Prescription"); @@ -2425,12 +2425,12 @@ std::string Options::OptionValues::CheckAndSetOptions() { std::tie(found, m_LBVMassLossPrescription.type) = utils::GetMapKey(m_LBVMassLossPrescription.typeString, LBV_MASS_LOSS_PRESCRIPTION_LABEL, m_LBVMassLossPrescription.type); COMPLAIN_IF(!found, "Unknown LBV Mass Loss Prescription"); } - + if (!DEFAULTED("main-sequence-core-mass-prescription")) { // main sequence core mass prescription std::tie(found, m_MainSequenceCoreMassPrescription.type) = utils::GetMapKey(m_MainSequenceCoreMassPrescription.typeString, CORE_MASS_PRESCRIPTION_LABEL, m_MainSequenceCoreMassPrescription.type); COMPLAIN_IF(!found, "Unknown Main Sequence Core Mass Prescription"); } - + if (!DEFAULTED("maltsev-mode")) { // mass loss prescription std::tie(found, m_MaltsevMode.type) = utils::GetMapKey(m_MaltsevMode.typeString, MALTSEV_MODE_LABEL, m_MaltsevMode.type); COMPLAIN_IF(!found, "Unknown Mass Loss Prescription"); @@ -2523,7 +2523,7 @@ std::string Options::OptionValues::CheckAndSetOptions() { std::tie(found, m_RemnantMassPrescription.type) = utils::GetMapKey(m_RemnantMassPrescription.typeString, REMNANT_MASS_PRESCRIPTION_LABEL, m_RemnantMassPrescription.type); COMPLAIN_IF(!found, "Unknown Remnant Mass Prescription"); } - + if (!DEFAULTED("response-to-spin-up")) { // prescription for response to super-critical spin-up std::tie(found, m_ResponseToSpinUp.type) = utils::GetMapKey(m_ResponseToSpinUp.typeString, RESPONSE_TO_SPIN_UP_LABEL, m_ResponseToSpinUp.type); COMPLAIN_IF(!found, "Unknown Response-to-spin-up Prescription"); @@ -2573,7 +2573,7 @@ std::string Options::OptionValues::CheckAndSetOptions() { COMPLAIN_IF(m_CommonEnvelopeMassAccretionMax < 0.0, "Maximum accreted mass (--common-envelope-mass-accretion-max) < 0"); COMPLAIN_IF(m_CommonEnvelopeMassAccretionMin < 0.0, "Minimum accreted mass (--common-envelope-mass-accretion-min) < 0"); COMPLAIN_IF(m_CommonEnvelopeSecondStageBeta < 0.0 || m_CommonEnvelopeSecondStageBeta > 0.0, "Mass transfer efficiency for second stage of 2-stage CE (--common-envelope-second-stage-beta) not in [0,1]"); - + COMPLAIN_IF(m_CoolWindMassLossMultiplier < 0.0, "Wind mass loss multiplier for cool stars (--cool-wind-mass-loss-multiplier) < 0.0"); COMPLAIN_IF(m_DebugLevel < 0, "Debug level (--debug-level) < 0"); @@ -2604,9 +2604,9 @@ std::string Options::OptionValues::CheckAndSetOptions() { } COMPLAIN_IF(m_LogLevel < 0, "Logging level (--log-level) < 0"); - + COMPLAIN_IF(m_LuminousBlueVariableFactor < 0.0, "LBV multiplier (--luminous-blue-variable-multiplier) < 0"); - + COMPLAIN_IF(m_MaltsevFallback < 0.0 || m_MaltsevFallback > 1.0, "Maltsev fallback fraction (--maltsev-fallback) must be between 0 and 1, inclusive"); COMPLAIN_IF(m_MassChangeFraction <= 0.0, "Mass change fraction per timestep (--mass-change-fraction) <= 0"); @@ -2633,7 +2633,7 @@ std::string Options::OptionValues::CheckAndSetOptions() { } COMPLAIN_IF(m_ObjectsToEvolve <= 0, (m_EvolutionMode.type == EVOLUTION_MODE::SSE ? "Number of stars requested <= 0" : "Number of binaries requested <= 0")); - + if (m_NeutrinoMassLossAssumptionBH.type == NEUTRINO_MASS_LOSS_PRESCRIPTION::FIXED_FRACTION) { COMPLAIN_IF(m_NeutrinoMassLossValueBH < 0.0 || m_NeutrinoMassLossValueBH > 1.0, "Neutrino mass loss must be between 0 and 1"); } @@ -2658,12 +2658,12 @@ std::string Options::OptionValues::CheckAndSetOptions() { COMPLAIN_IF(m_PulsarBirthMagneticFieldDistributionMax <= m_PulsarBirthMagneticFieldDistributionMin, "Pulsar birth magnetic field max (--pulsar-birth-magnetic-field-distribution-max) <= min (--pulsar-birth-magnetic-field-distribution-max)"); COMPLAIN_IF(m_PulsarBirthMagneticFieldDistributionMin <= m_PulsarLog10MinimumMagneticField, "Pulsar birth magnetic field min (--pulsar-birth-magnetic-field-distribution-min) <= lower limit (--pulsar-minimum-magnetic-field)"); - + COMPLAIN_IF(m_PulsarBirthSpinPeriodDistributionMax <= m_PulsarBirthSpinPeriodDistributionMin, "Pulsar birth spin period max (--pulsar-birth-spin-period-distribution-max) <= min (--pulsar-birth-spin-period-distribution-max)"); COMPLAIN_IF(m_PulsarBirthMagneticFieldDistributionMin <= 0.0, "Pulsar birth magnetic field min (--pulsar-birth-spin-period-distribution-min) <= 0"); COMPLAIN_IF(m_RadialChangeFraction <= 0.0, "Radial change fraction per timestep (--radial-change-fraction) <= 0"); - + COMPLAIN_IF(!DEFAULTED("rotational-frequency") && m_RotationalFrequency < 0.0, "Rotational frequency (--rotational-frequency) < 0"); COMPLAIN_IF(!DEFAULTED("rotational-frequency-1") && m_RotationalFrequency1 < 0.0, "Primary rotational frequency (--rotational-frequency-1) < 0"); COMPLAIN_IF(!DEFAULTED("rotational-frequency-2") && m_RotationalFrequency2 < 0.0, "Secondary rotational frequency (--rotational-frequency-2) < 0"); @@ -2695,7 +2695,7 @@ std::string Options::OptionValues::CheckAndSetOptions() { COMPLAIN_IF(!DEFAULTED("semi-major-axis") && m_SemiMajorAxis <= 0.0, "Semi-major axis (--semi-major-axis) <= 0"); // semi-major axis must be > 0.0 COMPLAIN_IF(!DEFAULTED("orbital-period") && m_OrbitalPeriod <= 0.0, "Orbital period (--orbital-period) <= 0"); // orbital period must be > 0.0 - COMPLAIN_IF(m_PulsationalPairInstabilityCOCoreShiftHendriks < -38.0, "CO Core Shift parameter (--PPI-CO-Core-Shift-Hendriks) should be >-38.0") // Don't allow to shift the onset of PPI below 0 solar masses; realistic values should be much closer to 0 + COMPLAIN_IF(m_PulsationalPairInstabilityCOCoreShiftHendriks < -38.0, "CO Core Shift parameter (--PPI-CO-Core-Shift-Hendriks) should be >-38.0") // Don't allow to shift the onset of PPI below 0 solar masses; realistic values should be much closer to 0 COMPLAIN_IF(m_PairInstabilityLowerLimit < 0.0, "Pair instability lower limit (--PISN-lower-limit) < 0.0") // Lower limit should be > 0 COMPLAIN_IF(m_PairInstabilityUpperLimit < m_PairInstabilityLowerLimit, "Pair instability upper limit below lower limit (--PISN-upper-limit < --PISN-lower-limit)") // Upper limit should be higher than lower limit COMPLAIN_IF(m_PulsationalPairInstabilityLowerLimit < 0.0, "Pulsational pair instability lower limit (--PPI-lower-limit) < 0.0") // Lower limit should be > 0 @@ -2733,10 +2733,10 @@ std::string Options::OptionValues::CheckAndSetOptions() { * * The map key is the option name string, and the value the default string as * stored by boost. - * + * * void Options::BuildDefaultsMap(po::options_description *p_OptionsDescription) - * - * + * + * * @param [IN] p_OptionsDescription pointer to boost option descriptions object */ @@ -2798,11 +2798,11 @@ void Options::BuildDefaultsMap(po::options_description *p_OptionsDescription) { * This function pertains to string options with multiple-choices - in that the user can select from * a list of possible values recorded in constants.h in an ENUM CLASS and corresponding COMPASUnorderedMap * labels map. - * - * + * + * * STR_VECTOR Options::AllowedOptionValues(const std::string p_OptionString) - * - * + * + * * @param [IN] p_OptionString String containing option name * @return Vector containing allowed option value strings */ @@ -2864,26 +2864,26 @@ STR_VECTOR Options::AllowedOptionValues(const std::string p_OptionString) { #undef POPULATE_RET } - + /* * Get formatted allowed values for a specified option * * See description of Options::AllowedOptionValues() - * + * * Returns string formatted with allowed option values for option specified in p_OptionString. * e.g. for ligfile-type option: - * + * * "Options: ['TXT','TSV','CSV','HDF5','NONE']" - * + * * The allowed values are listed in the order they are stored in the COMPASUnorderedMap in constants.h. * We could instead list them in alphabetical order, but the assumption is that the order in constants.h * was deliberate, so we'll maintain it - if that's not true then we could just sort alphabetically here. - * - * + * + * * std::string Options::AllowedOptionValuesFormatted(const std::string p_OptionString) - * - * + * + * * @param [IN] p_OptionString String containing option name * @return Formatted string (see example above) */ @@ -2908,16 +2908,16 @@ std::string Options::AllowedOptionValuesFormatted(const std::string p_OptionStri * passed as p_OptionString is a valid option string - it just checks * whether the user specified it, either at the grid line level, or * at the commandline level. - * + * * Also note, this function determines if an option was specified by iterating * over a Boost data structure doing string comparisons. This can be slow and * impact performance. Consider using the OptiondDefaulted() function instead * (see the explanation there). - * - * - * bool OptionSpecified(std::string p_OptionString) - * - * + * + * + * bool OptionSpecified(std::string p_OptionString) + * + * * @param [IN] p_OptionString String containing option name * @return bool result: * false: option was not specified by user @@ -2954,17 +2954,17 @@ bool Options::OptionSpecified(const std::string p_OptionString) { * The option for which the attributes are to be retrieved is passed as an iterator pointing at the option in the boost * variables map. Note that this function is private to the Options class and is intended for Options internal use * only. External actors should use the public function Options::OptionValue() to get option values. - * + * * The attributes are returned as a tuple, described by typedef ATTR, containing - * + * * - dataType TYPENAME (high-level) data type of the attribute. Will be one of {NONE, BOOL, INT, FLOAT, STRING} * - defaulted BOOL flag to indicate if the option was specified by the user or defaulted to the default value * - typeStr STRING detailed data type returned as a string (e.g. "UNSIGNED LONG INT" etc.) * - valueStr STRING the value of the option returned as a string (e.g. "2.3", "BSE" etc.) - * - * + * + * * Options::ATTR OptionAttributes(const po::variables_map p_VM, const po::variables_map::const_iterator p_IT) - * + * * * @param [IN] p_VM The boost variables map * @param [IN] p_IT Iterator for the boost variables map pointing to the option @@ -2972,13 +2972,13 @@ bool Options::OptionSpecified(const std::string p_OptionString) { * @return Tuple (type ATTR) containing the option attributes */ Options::ATTR Options::OptionAttributes(const po::variables_map p_VM, const po::variables_map::const_iterator p_IT) { - + TYPENAME dataType = TYPENAME::NONE; std::string typeStr = ""; bool defaulted = false; std::string valueStr = ""; - if (((boost::any)p_IT->second.value()).empty()) return std::make_tuple(TYPENAME::NONE, true, "", ""); // empty option + if (((boost::any)p_IT->second.value()).empty()) return std::make_tuple(TYPENAME::NONE, true, "", ""); // empty option // determine if option value was supplied, or whether the default was used @@ -3013,7 +3013,7 @@ Options::ATTR Options::OptionAttributes(const po::variables_map p_VM, const po:: // find other data types // it's not pretty, but it works - if (isCharPtr) { + if (isCharPtr) { dataType = TYPENAME::NONE; // not supported by COMPAS as an option data type typeStr = "CONST_CHAR_*"; // ... but we know what type it is, and valueStr = p_VM[p_IT->first].as(); // ... we can still format the value @@ -3070,7 +3070,7 @@ Options::ATTR Options::OptionAttributes(const po::variables_map p_VM, const po:: dataType = TYPENAME::BOOL; typeStr = "BOOL"; valueStr = p_VM[p_IT->first].as() ? "TRUE" : "FALSE"; - } + } else { // assume VECTOR try { // try STR_VECTOR (std::vector) @@ -3093,13 +3093,13 @@ Options::ATTR Options::OptionAttributes(const po::variables_map p_VM, const po:: // log-classes // notes // notes-hdrs - // + // // The vector of strings is just formatted as a string here - with braces // surrounding comma-separated values. // // We return dateType = TYPENAME::STRING, but typeStr = "VECTOR" - dataType = TYPENAME::STRING; + dataType = TYPENAME::STRING; typeStr = "VECTOR"; valueStr = elems; } @@ -3120,18 +3120,18 @@ Options::ATTR Options::OptionAttributes(const po::variables_map p_VM, const po:: // the following options are declared as DBL_VECTOR: // // timestep-multipliers - // + // // The vector of doubles is just formatted as a string here - with braces // surrounding comma-separated values. // // We return dateType = TYPENAME::STRING, but typeStr = "VECTOR" - dataType = TYPENAME::STRING; + dataType = TYPENAME::STRING; typeStr = "VECTOR"; valueStr = elems; } catch (const boost::bad_any_cast &) { // not DBL_VECTOR - unknown data type - dataType = TYPENAME::NONE; + dataType = TYPENAME::NONE; typeStr = ""; valueStr = ""; } @@ -3150,10 +3150,10 @@ Options::ATTR Options::OptionAttributes(const po::variables_map p_VM, const po:: * from the commandline options, but the flexibility exists to use a set of * grid line options (maybe one day we will want to (optionally) produce a * per star/binary Run_Details file) - * - * + * + * * std::vector Options::OptionDetails(const OptionsDescriptorT &p_Options) - * + * * @param [IN] p_Options The options descriptor to use to build the output string * @return Vector containing the option details for Run_Details */ @@ -3182,7 +3182,7 @@ std::vector Options::OptionDetails(const OptionsDescriptorT &p_O else // no optionDetails.push_back({it->first, valueStr, (defaulted ? "DEFAULT_USED" : "USER_SUPPLIED"), typeStr, dataType, defaultStr, allowedValues}); // add option details to return vector } - + // add other (calculated) options optionDetails.push_back({"useFixedUK", (p_Options.optionValues.m_UseFixedUK ? "TRUE" : "FALSE"), "CALCULATED", "BOOL", TYPENAME::BOOL, "", {}}); // useFixedUK @@ -3194,13 +3194,13 @@ std::vector Options::OptionDetails(const OptionsDescriptorT &p_O /* * Show available options - * + * * If the p_Verbose parameter is false, just print option names * If the p_Verbose parameter is true, print option names and descriptions - * - * + * + * * void PrintOptionHelp(const bool p_Verbose) - * + * * @param [IN] p_Verbose Boolean to indicate whether the option descriptions should * be printed (true), or just option names (false) */ @@ -3209,8 +3209,8 @@ void Options::PrintOptionHelp(const bool p_Verbose) { std::cout << "Options:" << std::endl; for (po::variables_map::const_iterator it = m_CmdLine.optionValues.m_VM.begin(); it != m_CmdLine.optionValues.m_VM.end(); it++) { - - po::option_description const& opt = m_CmdLine.optionDescriptions.find(it->first, false, false, false); + + po::option_description const& opt = m_CmdLine.optionDescriptions.find(it->first, false, false, false); std::string optionLongName = opt.canonical_display_name(cls::allow_long); // long name ('--') prefix if (optionLongName[0] == '-') optionLongName.erase(0, optionLongName.find_first_not_of("-")); // remove the "-" or "--" @@ -3233,12 +3233,12 @@ void Options::PrintOptionHelp(const bool p_Verbose) { * Returns TRUE if parameter p_TypeName is a supported COMPAS numeric datatype * for program options, otherwise FALSE * - * The datatypes here should cover our options for now - but we might have to + * The datatypes here should cover our options for now - but we might have to * refine them over time - * - * + * + * * bool IsSupportedNumericDataType(TYPENAME p_TypeName) - * + * * @param [IN] p_TypeName COMPAS datatype name * @return True if p_TypeName is a supported numeric datatype, else false */ @@ -3264,44 +3264,44 @@ bool Options::IsSupportedNumericDataType(TYPENAME p_TypeName) { /* * Preprocess the options provided by the user - expand any shorthand notation - * + * * Before we parse the options provided by the user, we replace/expand any shorthand devices the user has taken * advantage of, so we can present the expanded form of the options to boost. - * + * * For example, we provide shorthand for users to specify annotations and annotation headers. Both of these options * are defined as boost vector options, and would typically be specified by the user thus: - * + * * ./compas --notes-hdrs hdrStr1 hdrStr2 hdrStr3 --notes "note 1" "another note" "this is note 3" --option-name option-value ... - * + * * We allow blank notes, but they must be entered as empty strings using this method. e.g.: - * + * * ./compas --notes-hdrs hdrStr1 hdrStr2 hdrStr3 --notes "note 1" "" "this is note 3" --option-name option-value ... (note 2 is blank) - * + * * That format could become awkward, so we provide a shorthand method for specifying vector options. The shorthand method allows * users to list the comma-separated option values enclosed in square brackets "[...]", and any blank values can just be omitted. - * + * * e.g., the second example above could be specified as: - * + * * ./compas --notes-hdrs [hdrStr1,hdrStr2,hdrStr3] --notes ["note 1",,"this is note 3"] --option-name option-value ... (note 2 is omitted) * ./compas --notes-hdrs [hdrStr1,hdrStr2,hdrStr3] --notes ["note 1",,] --option-name option-value ... (note 2 and note 3 are omitted) - * + * * This function will expand this shorthand to the example shown above. There is no checking for correctness here - we just expand any - * shorthand necessary and pass the argument vector back - correctness checking is done elsewhere. - * + * shorthand necessary and pass the argument vector back - correctness checking is done elsewhere. + * * The value for any omitted option values will be a string of length 1, with the char value NOT_PROVIDED_CHAR (constant defined in Options.h) - * as the first character of the string. Since at this stage the option names and values are just strings that will be parsed by boost, we + * as the first character of the string. Since at this stage the option names and values are just strings that will be parsed by boost, we * don't need to worry about data type - code processing the options can check for NOT_PROVIDED_CHAR and deal with it then. Since we may not - * know the maximum number of values expected (e.g. the number of notes-hdrs specifies the maximum number of notes expected, and we may not + * know the maximum number of values expected (e.g. the number of notes-hdrs specifies the maximum number of notes expected, and we may not * have that number yet), we leave it to later to pad out missing values beyond the last one specified here. e.g. a specification shuch as: - * + * * ./compas --notes-hdrs [hdrStr1,hdrStr2,hdrStr3,hdrStr4,hdrStr5] --notes ["note 1",,"this is note 3"] --option-name option-value ... - * + * * has notes 2, 4 & 5 omitted - we specify note 2 as NOT_PROVIDED_STR (string version of NOT_PROVIDED_CHAR) here, and notes 4 & 5 will be added later. - * - * + * + * * std::tuple ExpandShorthandOptionValues(int p_ArgCount, char *p_ArgStrings[]) - * - * + * + * * @param [IN] p_ArgCount The number of argument strings. (note below for p_ArgStrings) * @param [IN] p_ArgStrings The argument strings. The first argument string is expected * (by boost) to be the executable name (boost expects the arguments @@ -3375,7 +3375,7 @@ std::tuple Options::ExpandShorthandOptionValues(in // yes pos = argString.find(",", start); // next comma if (pos == std::string::npos) pos = argString.length(); // last character? - + if ((pos - start) > 0) { // non-zero length string? strargs.push_back(argString.substr(start, pos - start)); // yes - grab it } @@ -3416,26 +3416,26 @@ std::tuple Options::ExpandShorthandOptionValues(in /* * Parse the options provided by the user - * + * * We first expand any shorthand notation the user might have used (for options that allow shorthand * notation). - * - * Before we give the options to boost we need to determine if the user passed any ranges or sets and, + * + * Before we give the options to boost we need to determine if the user passed any ranges or sets and, * if they did, handle those - boost doesn't know anything about them. * - * A range is allowed only for numeric options (i.e. INT or FLOAT types), but is not allowed for all + * A range is allowed only for numeric options (i.e. INT or FLOAT types), but is not allowed for all * numeric options (e.g. --log-level) * A set is allowed for numeric, string, and bool options - but not all of them (e.g. --quiet) - * + * * We define a vector of options excluded from the range and set constructs (one vector each). We don't * need to exclude non-numeric options from range here - that is done later - here we just exclude options * for which range/set makes no sense. We have defined vectors of option names that are excluded from ranges * (m_RangeExcluded) and sets (m_SetExcluded). - * - * + * + * * std::string ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], OptionsDescriptorT &p_OptionsDescriptor) - * - * + * + * * @param [IN] p_ArgCount The number of argument strings. (note below for p_ArgStrings) * @param [IN] p_ArgStrings The argument strings. The first argument string is expected * (by boost) to be the executable name (boost expects the arguments @@ -3444,7 +3444,7 @@ std::tuple Options::ExpandShorthandOptionValues(in * boost options_description object, the option valued, and a struct * containing the complex option values (the ranges and sets) * @return String containing an error string - * If no error occurred the return string will be the empty string + * If no error occurred the return string will be the empty string */ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], OptionsDescriptorT &p_OptionsDescriptor) { @@ -3539,7 +3539,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt // for now, just stash the details away and substitute the // first value for the argument so we can check parsing - // look for comma separated values - there will be no + // look for comma separated values - there will be no // spaces - the OS/shell would have complained... if (str.rfind("range", 0) == 0) str.erase(0, 5); // strip 'range' (range indicator) if present @@ -3549,7 +3549,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt if (str.length() == 0 || str[str.length() - 1] == ',') { errStr = ERR_MSG(ERROR::MISSING_VALUE) + std::string(" for option '") + optionName + std::string("'"); // no values, or trailing comma is an error - } + } else { parms.clear(); // start empty @@ -3561,7 +3561,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt std::string value = ""; // value pos = str.find(",", start); // next comma - + if ((pos - start) > 0) { // non-zero length string? value = str.substr(start, pos - start); // yes - grab it parms.push_back(value); // store value @@ -3590,7 +3590,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt } } } - } + } } if (!errStr.empty()) break; // stop parsing if error encountered } @@ -3602,12 +3602,12 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt // replace any deprecated argstrings (both option names and option values) // we do this here so that we don't have to check for deprecated options // during binary/stellar evolution - helps to reduce the performance impact - // of deprecated options and option values + // of deprecated options and option values STR_VECTOR fixedArgs {}; // vector args fixed for deprecated string std::string thisArgString = ""; // arg string being checked - std::string prevArgString = ""; // previous arg string (for option value checking) + std::string prevArgString = ""; // previous arg string (for option value checking) std::string newArgString = ""; // replacement arg string for deprecations for (int iidx = 0; iidx < argCount; iidx++) { // for all arg strings @@ -3621,7 +3621,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt newArgString = CheckDeprecatedOptionString(thisArgString); // yes - check for deprecated option string } - // check arg string for deprecated option value + // check arg string for deprecated option value // (don't check first arg string) if (iidx > 0 && utils::Equals(newArgString, thisArgString)) { // first arg string? newArgString = CheckDeprecatedOptionValue(prevArgString, thisArgString); // no - check for deprecated option value @@ -3630,7 +3630,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt fixedArgs.push_back(newArgString); // add the (possible) "fixed" arg string prevArgString = thisArgString; // set previous argstring to current argstring - } + } std::vector newArgs {}; // copy "fixed" string vector to char* vector for (size_t idx = 0; idx < fixedArgs.size(); idx++) { // for each arg string/option value @@ -3640,8 +3640,8 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt // boost parse_command_line() expects the first arg to be the program name - // (it thinks it is getting the values that were passed to main() from the - // OS/shell), so for options from a grid file we insert a dummy argument as + // (it thinks it is getting the values that were passed to main() from the + // OS/shell), so for options from a grid file we insert a dummy argument as // arg[0] and set the argument count appropriately. // // if valid ranges or sets were specified by the user they've been temporariliy @@ -3650,7 +3650,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt // and complain about the offending parameter (which is what we want) // before we pass the argstrings to parse_command_line() we need to remove the - // NOT_PROVIDED_CHAR for shorthand allowed, non-string, options (boost doesn't + // NOT_PROVIDED_CHAR for shorthand allowed, non-string, options (boost doesn't // like it...) @@ -3717,14 +3717,14 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt if (longOpt[0] == '-') longOpt.erase(0, longOpt.find_first_not_of("-")); // remove the "-" or "--" if (shortOpt[0] == '-') shortOpt.erase(0, shortOpt.find_first_not_of("-")); // remove the "-" or "--" - p_OptionsDescriptor.optionsSpecified.push_back(std::make_tuple(originalTok, thisTok, longOpt, shortOpt)); + p_OptionsDescriptor.optionsSpecified.push_back(std::make_tuple(originalTok, thisTok, longOpt, shortOpt)); } } // If we've made it this far then boost parsed the command-line arguments ok. // - // If there were any ranges or sets specified by the user we can now work out the - // data types of the options for which they (the ranges/sets) were specified and + // If there were any ranges or sets specified by the user we can now work out the + // data types of the options for which they (the ranges/sets) were specified and // sanity check them. // // First iterate through the specified ranges and sets to sanity check - and @@ -3755,7 +3755,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt std::vector removeOpts = {}; // vector of option indices to be removed for (size_t iOpt = 0; iOpt < p_OptionsDescriptor.complexOptionValues.size(); iOpt++) { // for each range or set specified - + std::string opt = std::get<0>(p_OptionsDescriptor.complexOptionValues[iOpt]); // option name if (bseMode) { // BSE? @@ -3770,7 +3770,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt // so we can loop through and remove them. // This only works because the removeOpts vector is populated in the same order as // the complexOptionValues vector - that allows me to loop through complexOptionValues - // in reverse order to delete elements (otherwise the index numbers would change from + // in reverse order to delete elements (otherwise the index numbers would change from // under me as I was deleting them) size_t removeCount(removeOpts.size()); @@ -3795,7 +3795,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt parms = details.parameters; // range/set parameter values (as strings) // we want to use the long name of the option for this next bit - // look for the option in the options specified - if it's not + // look for the option in the options specified - if it's not // found the find in m_VM will fail for us... std::string longOptionName = optionName; auto thisIt = std::find_if( @@ -3817,7 +3817,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt if (idx == (count - 1)) details.currPos = 0; // initial position for inner iterator if (type == COMPLEX_TYPE::RANGE) { // RANGE? - if (!IsSupportedNumericDataType(dataType)) { // yes - numeric? + if (!IsSupportedNumericDataType(dataType)) { // yes - numeric? errStr = ERR_MSG(ERROR::ARGUMENT_RANGE_NOT_SUPPORTED) + std::string(" for option '") + optionName + std::string("'"); // no - that's not ok } else { // yes - numeric @@ -4033,7 +4033,7 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt errStr = complaint1; } } break; - + default: // that's a problem... COMPLAIN(ERR_MSG(ERROR::INVALID_DATA_TYPE)); // complain } @@ -4041,10 +4041,10 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt } else { // SET // check for numeric/bool data types only that all set parameters are numeric/bool - // can't check for string data types - + // can't check for string data types + if (IsSupportedNumericDataType(dataType)) { // numeric? - + for (size_t ip = 0; ip < parms.size(); ip++) { // yes - for each set parameter specified if ((dataType == TYPENAME::INT && !utils::IsINT(parms[ip])) || // INT? @@ -4189,20 +4189,20 @@ std::string Options::ParseOptionValues(int p_ArgCount, char *p_ArgStrings[], Opt /* * Initialise options service - * + * * Intitialises the options service. Constructs options objects for the program options - * (options that are specified only on the commandline and that cannot be specified in a + * (options that are specified only on the commandline and that cannot be specified in a * grid file on a per object (star/binary) basis), and the grid file options (options that * can be specified in a grid file on a per object (star/binary) basis). - * - * Initialises the commandline (program-level) options object, and the grid line (evolving + * + * Initialises the commandline (program-level) options object, and the grid line (evolving * object-level) options object. Populates the commandline (program-level) options object * from the commandline arguments passed to main() - this object stays static throughout the * life of the program. - * - * + * + * * bool Options::Initialise(int p_ArgCount, char *p_ArgStrings[]) - * + * * @param [IN] p_ArgCount Integer number of args passed in p_ArgStrings * @param [IN] p_ArgStrings Arg strings - 1 per option * Note that the first arg string is ignored (expected to be program name) @@ -4233,11 +4233,11 @@ bool Options::Initialise(int p_ArgCount, char *p_ArgStrings[]) { COMPLAIN(ERR_MSG(ERROR::BOOST_OPTION_CMDLINE)); // no, complain - this throws an exception } else { // yes, ok - + BuildDefaultsMap(&programLevelOptions); // build option defaults map m_CmdLine.optionDescriptions.add(programLevelOptions); // commandline options - stays static throughout the life of the program - + // we parse the option values before handing them over to boost // boost knows nothing about shorthand, ranges and sets, so we have to handlde // them ourselves first @@ -4268,7 +4268,7 @@ bool Options::Initialise(int p_ArgCount, char *p_ArgStrings[]) { } // We now have the options the user entered at the commandline, including any expanded shorthand, - // ranges and/or sets, so this is where we stop the initialisation - from here we just play out + // ranges and/or sets, so this is where we stop the initialisation - from here we just play out // the options that are specified by any ranges and sets via the AdvanceCmdLineOptionValues() function. // // If the user has specified any ranges or sets we set the options to the first value in each @@ -4281,17 +4281,17 @@ bool Options::Initialise(int p_ArgCount, char *p_ArgStrings[]) { // been set). // // Note that there are analogous functions for object (star/binary) initialisation and retrievel - // option values: InitialiseEvolvingObject() and AdvanceGridLineOptionValues(). These functions + // option values: InitialiseEvolvingObject() and AdvanceGridLineOptionValues(). These functions // intitialise and retrieve options specified in grid file records. } } - } + } } catch (po::error& e) { // program options exception std::cerr << ERR_MSG(ERROR::PROGRAM_OPTIONS_ERROR) << ": " << e.what() << std::endl; // show the problem std::cerr << ERR_MSG(ERROR::SUGGEST_HELP) << std::endl; // suggest using --help ok = false; // set status - } + } catch (const std::string eStr) { // custom exception std::cerr << ERR_MSG(ERROR::PROGRAM_OPTIONS_ERROR) << ": " << eStr << std::endl; // show the problem std::cerr << ERR_MSG(ERROR::SUGGEST_HELP) << std::endl; // suggest using --help @@ -4311,18 +4311,18 @@ bool Options::Initialise(int p_ArgCount, char *p_ArgStrings[]) { /* * Advances the command or grid line options to the next variation (depending - * upon the parameters passed). A "variation" is a combination of options + * upon the parameters passed). A "variation" is a combination of options * defined by the option values, ranges, and sets the user specified on the * commandline or grid file line. - * + * * When the commandline or grid file line is parsed, the option values are set * to the initial variation of range and set values, then once that is processed * this function is called to advance to the next variation - the ranges and * sets are played out in order. - * - * + * + * * int AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) - * + * * @param [IN] p_OptionsDescriptor Commandline or grid line options descriptor * @return Int result: * -1: an error occurred @@ -4341,10 +4341,10 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { // Upon entry iterators for ranges and sets need to be advanced in order // to pick up the correct values to be loaded into the options. Really // all we need to do is pick up the inner (fastest-counting) iterator (the - // right-most in terms of placement on the commandline). If we have to + // right-most in terms of placement on the commandline). If we have to // wrap-around to get that value, then we have to increment the next outer // (immediately left) iterator. - + // Traverse each of the complex option values and gather the option values. // We only need values for the options that have changing values. // Values have already been sanity checked by the time we get here. @@ -4357,7 +4357,7 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { stop = true; // assume we have what we need - std::string optionName = std::get<0>(p_OptionsDescriptor.complexOptionValues[idx]); + std::string optionName = std::get<0>(p_OptionsDescriptor.complexOptionValues[idx]); RangeOrSetDescriptorT details = std::get<1>(p_OptionsDescriptor.complexOptionValues[idx]); details.currPos++; // advance iterator @@ -4396,19 +4396,19 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { } break; case TYPENAME::FLOAT: { // FLOAT - double thisVal = std::stof(optionValue); + double thisVal = std::stof(optionValue); p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; case TYPENAME::DOUBLE: { // DOUBLE - double thisVal = std::stod(optionValue); + double thisVal = std::stod(optionValue); p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; case TYPENAME::LONGDOUBLE: { // LONG DOUBLE - long double thisVal = std::stold(optionValue); + long double thisVal = std::stold(optionValue); p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; @@ -4423,9 +4423,9 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, optionValue); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; - + default: break; // already checked before we get here - } + } } else { // RANGE @@ -4447,7 +4447,7 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { int start = details.rangeParms[0].iVal; int inc = details.rangeParms[2].iVal; int thisVal = start + (details.currPos * inc); - + p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; @@ -4456,7 +4456,7 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { long int start = details.rangeParms[0].iVal; long int inc = details.rangeParms[2].iVal; long int thisVal = start + (details.currPos * inc); - + p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; @@ -4465,7 +4465,7 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { unsigned long int start = details.rangeParms[0].iVal; unsigned long int inc = details.rangeParms[2].iVal; unsigned long int thisVal = start + (details.currPos * inc); - + p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; @@ -4475,7 +4475,7 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { double start = details.rangeParms[0].dVal; double inc = details.rangeParms[2].dVal; double thisVal = start + (details.currPos * inc); - + p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; @@ -4485,7 +4485,7 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { double start = details.rangeParms[0].dVal; double inc = details.rangeParms[2].dVal; double thisVal = start + (details.currPos * inc); - + p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; @@ -4495,7 +4495,7 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { long double start = details.rangeParms[0].dVal; long double inc = details.rangeParms[2].dVal; long double thisVal = start + (details.currPos * inc); - + p_OptionsDescriptor.optionValues.ModifyVariableMap(p_OptionsDescriptor.optionValues.m_VM, optionName, thisVal); po::notify(p_OptionsDescriptor.optionValues.m_VM); } break; @@ -4521,14 +4521,14 @@ int Options::AdvanceOptionVariation(OptionsDescriptorT &p_OptionsDescriptor) { /* * Initialise grid file options - * + * * Initialises and populates the grid line (evolving object-level) options object, using the * options the user specified in the grid file record - this object is updated for each grid * line read. * - * + * * bool Options::InitialiseEvolvingObject(const std::string p_OptionsString) - * + * * @param [IN] p_OptionsString String containing all options - the grid file record * @return Boolean value indicating status: true = ok, false = an error occurred */ @@ -4553,18 +4553,18 @@ bool Options::InitialiseEvolvingObject(const std::string p_OptionsString) { std::string str = p_OptionsString.substr(start, end - start); // grab option/argument string std::string trimmedStr = utils::trim(str); // trim whitespace if (trimmedStr[0] == '#') { // comment? - done = true; // yes - done with this line + done = true; // yes - done with this line } else { // no - not a comment if (!trimmedStr.empty()) parsedStrings.push_back(trimmedStr); // store if not empty string start = end + delim.length(); // new start position } } - + std::vector args {"placeHolder"}; // place-holder - boost expects command name as argv[0] for (auto& arg : parsedStrings) // iterate over the parsed strings - args.push_back(arg.c_str()); // and grab the c_str + args.push_back(arg.c_str()); // and grab the c_str // check here for excluded grid file options // if any are found, issue a warning and remove the option (and any @@ -4596,7 +4596,7 @@ bool Options::InitialiseEvolvingObject(const std::string p_OptionsString) { if (optionName[0] == '-') optionName.erase(0, optionName.find_first_not_of("-")); // remove the "-" or "--" if (std::find(m_GridLineExcluded.begin(), m_GridLineExcluded.end(), optionName) != m_GridLineExcluded.end()) { // on excluded list? - + removeArgs.push_back(iArg - 1); // yes - we need to remove it and any associated values std::cerr << "WARNING: " << ERR_MSG(ERROR::OPTION_NOT_SUPPORTED_IN_GRID_FILE) << ": '" << optionName << "': ignored\n"; // show warning @@ -4615,7 +4615,7 @@ bool Options::InitialiseEvolvingObject(const std::string p_OptionsString) { // check whether the string really is an option value // as noted above, we assume any string starting with "--" is an option name, - // and any string starting with "-*", where '*' is an alphabetic character, + // and any string starting with "-*", where '*' is an alphabetic character, // is an option name bool haveOptionValue = false; // is the string really an option value - default false if (!optionValue.empty()) { // empty string? @@ -4671,7 +4671,7 @@ bool Options::InitialiseEvolvingObject(const std::string p_OptionsString) { std::cerr << ERR_MSG(ERROR::GRID_OPTIONS_ERROR) << ": " << e.what() << std::endl; // show the problem std::cerr << ERR_MSG(ERROR::SUGGEST_HELP) << std::endl; // suggest using --help ok = false; // set status - } + } catch (const std::string eStr) { // custom exception std::cerr << ERR_MSG(ERROR::GRID_OPTIONS_ERROR) << ": " << eStr << std::endl; // show the problem std::cerr << ERR_MSG(ERROR::SUGGEST_HELP) << std::endl; // suggest using --help @@ -4684,32 +4684,32 @@ bool Options::InitialiseEvolvingObject(const std::string p_OptionsString) { } m_GridLine.optionValues.m_Populated = ok; // flag use - + return ok; } /* * Read and apply the next record in the grid file - * + * * The record from the grid file is read as one string, then passed to * InitialiseEvolvingObject() for processing. - * + * * In InitialiseEvolvingObject() the record is parsed into separate tokens - * ready to be passed to the boost program option parser. Once that is + * ready to be passed to the boost program option parser. Once that is * done the options are handed over to the boost functions for parsing and * detting of values. - * - * pon return from this function the option values will be set to the values - * specified by the user, or their default values - either way ready for the + * + * pon return from this function the option values will be set to the values + * specified by the user, or their default values - either way ready for the * star/binary to be evolved. - * + * * The grid file struct (m_Gridfile) will be used and updated by this function. - * The grid file name, error status, and file handle are stored in the struct. - * - * + * The grid file name, error status, and file handle are stored in the struct. + * + * * int ApplyNextGridLine() - * + * * @return Int result: * -3: Error reading grid file record: unexpected content in grid file (error value in grid file struct) * -2: Error reading grid file record: file read error (error value in grid file struct) @@ -4740,7 +4740,7 @@ int Options::ApplyNextGridLine() { m_Gridfile.error = ERROR::UNEXPECTED_END_OF_FILE; // no - not all lines user asked for were processed before EOF - record error status = -1; // set error status } - else status = 0; // set EOF status + else status = 0; // set EOF status } else { // not eof - some other error m_Gridfile.error = ERROR::FILE_READ_ERROR; // record error @@ -4771,21 +4771,21 @@ int Options::ApplyNextGridLine() { * * The grid file is a variable-length file (in that each line is not a fixed number of bytes), * so we can't use the filesystem seek functions - they rely on each line being the same number of bytes. - * We have to just read each line until we get to the one we want - use ignore() instead of getline() - * because it's a little faster. There will be some overhead in doing this, especially for very large + * We have to just read each line until we get to the one we want - use ignore() instead of getline() + * because it's a little faster. There will be some overhead in doing this, especially for very large * grid file, but it shouldn't be significant, especially compared to the overall runtime. * (I tested this on a grid file of 1,000,000 lines, each line 85 bytes - to process just the first line of * the file was 0.03 CPU seconds, and to process just the last line of the file (skipping the first 999,999 - * lines) was 0.07 CPU seconds - suggesting that even skipping to the end of a grid file of several million + * lines) was 0.07 CPU seconds - suggesting that even skipping to the end of a grid file of several million * records might only add overhead of one or two tenths of a second of CPU time to the entire run) - * - * + * + * * ERROR SeekToGridFileLine(const unsigned int p_Line) * * @param [IN] p_Line The line number to seek to - this will be the next line read from the file * @return ERROR indicator - will be ERROR::NONE if seek is successful */ -ERROR Options::SeekToGridFileLine(const unsigned int p_Line) { +ERROR Options::SeekToGridFileLine(const unsigned int p_Line) { m_Gridfile.error = ERROR::NONE; // default is no error @@ -4804,10 +4804,10 @@ ERROR Options::SeekToGridFileLine(const unsigned int p_Line) { else { // skip ok m_Gridfile.currentLine++; // set line about to be processed (will be current) } - } + } } - - return m_Gridfile.error; + + return m_Gridfile.error; } @@ -4815,16 +4815,16 @@ ERROR Options::SeekToGridFileLine(const unsigned int p_Line) { * Rewind the grid file * * The grid file is rewound to prepare for the next commandline options variation. - * Here we have to seek to the start of the file, then advance to the first line + * Here we have to seek to the start of the file, then advance to the first line * the user asked to be processed. * - * + * * ERROR RewindGridFile() * * @return ERROR indicator - will be ERROR::NONE if file opened successfully */ -ERROR Options::RewindGridFile() { - +ERROR Options::RewindGridFile() { + m_Gridfile.handle.clear(); // clear file errors m_Gridfile.handle.seekg(0); // go to start of file @@ -4843,7 +4843,7 @@ ERROR Options::RewindGridFile() { * simulation is complete - we just pick a record off and process the record, and * when we hit the end of the file the file is closed and the simulation complete. * - * + * * ERROR OpenGridFile(const std::string p_GridFilename) * * @param [IN] p_Filename The filename of the Grid file @@ -4894,7 +4894,7 @@ ERROR Options::OpenGridFile(const std::string p_GridFilename) { * This allows the composition of the log records to be dynamically modified - this is * how we allow users to specify what properties they want recorded in log files. * - * The functional return is the value of the property requested. + * The functional return is the value of the property requested. * * * COMPAS_VARIABLE OptionValue(const T_ANY_PROPERTY p_Property) const @@ -4920,9 +4920,9 @@ COMPAS_VARIABLE Options::OptionValue(const T_ANY_PROPERTY p_Property) const { case PROGRAM_OPTION::ANG_MOM_CONSERVATION_DURING_CIRCULARISATION : value = AngularMomentumConservationDuringCircularisation(); break; case PROGRAM_OPTION::BLACK_HOLE_KICKS_MODE : value = static_cast(BlackHoleKicksMode()); break; - + case PROGRAM_OPTION::CASE_BB_STABILITY_PRESCRIPTION : value = static_cast(CaseBBStabilityPrescription()); break; - + case PROGRAM_OPTION::CHECK_PHOTON_TIRING_LIMIT : value = CheckPhotonTiringLimit(); break; case PROGRAM_OPTION::CHE_MODE : value = static_cast(CHEMode()); break; @@ -5004,12 +5004,12 @@ COMPAS_VARIABLE Options::OptionValue(const T_ANY_PROPERTY p_Property) const { case PROGRAM_OPTION::LBV_FACTOR : value = LuminousBlueVariableFactor(); break; case PROGRAM_OPTION::LBV_MASS_LOSS_PRESCRIPTION : value = static_cast(LBVMassLossPrescription()); break; - case PROGRAM_OPTION::MALTSEV_FALLBACK : value = MaltsevFallback(); break; - case PROGRAM_OPTION::MALTSEV_MODE : value = static_cast(MaltsevMode()); break; + case PROGRAM_OPTION::MALTSEV_FALLBACK : value = MaltsevFallback(); break; + case PROGRAM_OPTION::MALTSEV_MODE : value = static_cast(MaltsevMode()); break; case PROGRAM_OPTION::MASS_LOSS_PRESCRIPTION : value = static_cast(MassLossPrescription()); break; - case PROGRAM_OPTION::MASS_RATIO : value = MassRatio(); break; + case PROGRAM_OPTION::MASS_RATIO : value = MassRatio(); break; case PROGRAM_OPTION::MASS_RATIO_DISTRIBUTION : value = static_cast(MassRatioDistribution()); break; case PROGRAM_OPTION::MASS_RATIO_DISTRIBUTION_MAX : value = MassRatioDistributionMax(); break; case PROGRAM_OPTION::MASS_RATIO_DISTRIBUTION_MIN : value = MassRatioDistributionMin(); break; @@ -5051,8 +5051,8 @@ COMPAS_VARIABLE Options::OptionValue(const T_ANY_PROPERTY p_Property) const { case PROGRAM_OPTION::MT_FRACTION_ACCRETED : value = MassTransferFractionAccreted(); break; case PROGRAM_OPTION::MT_JLOSS : value = MassTransferJloss(); break; - case PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_DEGEN : value = MassTransferJlossLinearFractionDegen(); break; - case PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_NON_DEGEN : value = MassTransferJlossLinearFractionNonDegen(); break; + case PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_DEGEN : value = MassTransferJlossLinearFractionDegen(); break; + case PROGRAM_OPTION::MT_JLOSS_LINEAR_FRACTION_NON_DEGEN : value = MassTransferJlossLinearFractionNonDegen(); break; case PROGRAM_OPTION::MT_REJUVENATION_PRESCRIPTION : value = static_cast(MassTransferRejuvenationPrescription()); break; case PROGRAM_OPTION::MT_THERMALLY_LIMITED_VARIATION : value = static_cast(MassTransferThermallyLimitedVariation()); break; @@ -5103,7 +5103,7 @@ COMPAS_VARIABLE Options::OptionValue(const T_ANY_PROPERTY p_Property) const { case PROGRAM_OPTION::RANDOM_SEED_CMDLINE : value = RandomSeedCmdLine(); break; case PROGRAM_OPTION::REMNANT_MASS_PRESCRIPTION : value = static_cast(RemnantMassPrescription()); break; - + case PROGRAM_OPTION::RESPONSE_TO_SPIN_UP : value = static_cast(ResponseToSpinUp()); break; case PROGRAM_OPTION::ROCKET_KICK_MAGNITUDE_1 : value = RocketKickMagnitude1(); break; @@ -5118,10 +5118,10 @@ COMPAS_VARIABLE Options::OptionValue(const T_ANY_PROPERTY p_Property) const { case PROGRAM_OPTION::ROTATIONAL_FREQUENCY : value = RotationalFrequency(); break; case PROGRAM_OPTION::ROTATIONAL_FREQUENCY_1 : value = RotationalFrequency1(); break; case PROGRAM_OPTION::ROTATIONAL_FREQUENCY_2 : value = RotationalFrequency2(); break; - + case PROGRAM_OPTION::SCALE_CHE_MASS_LOSS_SURF_HE_ABUNDANCE : value = ScaleCHEMassLossWithSurfaceHeliumAbundance(); break; case PROGRAM_OPTION::SCALE_TERMINAL_WIND_VEL_METALLICITY_POWER : value = ScaleTerminalWindVelocityWithMetallicityPower(); break; - + case PROGRAM_OPTION::SEMI_MAJOR_AXIS : value = SemiMajorAxis(); break; case PROGRAM_OPTION::SEMI_MAJOR_AXIS_DISTRIBUTION : value = static_cast(SemiMajorAxisDistribution()); break; case PROGRAM_OPTION::SEMI_MAJOR_AXIS_DISTRIBUTION_MAX : value = SemiMajorAxisDistributionMax(); break; @@ -5145,7 +5145,7 @@ COMPAS_VARIABLE Options::OptionValue(const T_ANY_PROPERTY p_Property) const { // We should not default here, with or without a warning - in all cases this is a code defect, // so we flag it as an error and that will result in termination of the evolution of the star // or binary. - // The correct fix for this is to add code for the missing program option, prevent it from being + // The correct fix for this is to add code for the missing program option, prevent it from being // specified in the logfile definitions file, or find and fix the code defect. std::cerr << "ERROR: in " << std::string(__PRETTY_FUNCTION__) << ": " << ERR_MSG(ERROR::UNEXPECTED_PROGRAM_OPTION) << "\n"; // show error @@ -5158,16 +5158,16 @@ COMPAS_VARIABLE Options::OptionValue(const T_ANY_PROPERTY p_Property) const { /* * Sets the seed for the pseudo random number generator. - * + * * After setting the seed for the pseudo random number generator, recalculates the "calculated" * program option values - those that are calculated from other variables or drawn from * distributions. This is required to ensure that all default option values are drawn or calculated * using the random seed for the current system (star or binary). The parameter "p_OptionsSet" * indicates whether the command-line or gridfile-line set of option values is updated. - * - * + * + * * std::string SetRandomSeed(const unsigned long int p_RandomSeed, const OPTIONS_ORIGIN p_OptionsSet) - * + * * @param [IN] p_RandomSeed The random seed to use as the seed for the pseudo random number generator * @param [IN] p_OptionsSet Indicates which set of options to update (command-line or gridfile-line) * @return Error string: @@ -5193,29 +5193,29 @@ std::string Options::SetRandomSeed(const unsigned long int p_RandomSeed, const O * * The names of deprecated options, and their replacements (if applicable) are stored in the * `deprecatedOptionStrings` vector in Options.h - see Options.h for a description of the vector contents. - * + * * This function will check `deprecatedOptionStrings` for the option string passed in p_OptionString, * and if it is found to be a deprecated option, will: - * + * * (a) show a deprecation notice for the option if necessary. Note that a deprecation notice for an * option will only be shown once per COMPAS run (no matter how many times the deprecated option * appears on the commandline or in a grid file). - * + * * (b) return the replacement option name string, if applicable. If the deprecated option is not being * renamed or replaced (i.e. it is just being removed), the returned option name string will be the * string as passed (i.e. p_OptionString). - * + * * If the option string passed in p_OptionString is not found to be a deprecated option, the returned option * name string will be the string as passed (i.e. p_OptionString). * * This function is called by the options parsing code to determine if a deprecated option needs to be * replaced with a new option name string at parse time. - * + * * std::string Options::CheckDeprecatedOptionString(const std::string p_OptionString) - * + * * @param [IN] p_OptionString The string to be checked against deprecated option names * @return Replacement option name string. Will just be the input - * parameter if it is not a deprecated option, or if it is + * parameter if it is not a deprecated option, or if it is * a deprecated option but has no replacement string */ std::string Options::CheckDeprecatedOptionString(const std::string p_OptionString) { @@ -5235,11 +5235,11 @@ std::string Options::CheckDeprecatedOptionString(const std::string p_OptionStrin if (optionString[0] == '-') { // starts with "-"? optionString.erase(0, 1); // yes - remove it prefix += "-"; // add "-" to prefix to be restored - if (optionString[0] == '-') { // another "-"? + if (optionString[0] == '-') { // another "-"? optionString.erase(0, 1); // yes - remove it prefix += "-"; // add it to prefix to be restored - } - } + } + } // check for a match with known deprecated option strings if (!optionString.empty()) { // have option string to check? @@ -5280,27 +5280,27 @@ std::string Options::CheckDeprecatedOptionString(const std::string p_OptionStrin * * The names of deprecated option values, and their replacements (if applicable) are stored in the * `deprecatedOptionValues` vector in Options.h - see Options.h for a description of the vector contents. - * + * * This function will check `deprecatedOptionValues` for the option string passed in p_OptionString, * and the option value passed in p_OptionValue, and if the option/value pair is found to be a deprecated * option/value pair, will: - * + * * (a) show a deprecation notice for the option value if necessary. Note that a deprecation notice * for an option/value pair will only be shown once per COMPAS run (no matter how many times the * deprecated option value appears on the commandline or in a grid file). - * + * * (b) return the replacement option value string, if applicable. If the deprecated option value is * not being renamed or replaced (i.e. it is just being removed), the returned option value string * will be the string as passed (i.e. p_OptionValue). - * + * * If the option value string passed in p_OptionValue is not found to be a deprecated option value, the * returned option value string will be the string as passed (i.e. p_OptionValue). * * This function is called by the options parsing code to determine if a deprecated option value needs to * be replaced with a new option value string at parse time. - * + * * std::string Options::CheckDeprecatedOptionValue(const std::string p_OptionString, const std::string p_OptionValue) - * + * * @param [IN] p_OptionString The string to be checked against deprecated option names * @param [IN] p_OptionValue The string to be checked against deprecated option values * @return Replacement option value string. Will just be the input @@ -5333,7 +5333,7 @@ std::string Options::CheckDeprecatedOptionValue(const std::string p_OptionString std::string deprecatedOptionValue = std::get<1>(tuple); // get deprecated option value if (!deprecatedOptionValue.empty()) { // have option value to check? (should have...) - + if (utils::Equals(optionValue, deprecatedOptionValue)) { // same as supplied option value? // yes // if there is a replacement, get it (could just be deprecated for eventual removal) @@ -5371,29 +5371,29 @@ std::string Options::CheckDeprecatedOptionValue(const std::string p_OptionString * * The names of deprecated option propertiess, and their replacements (if applicable) are stored in the * `deprecatedOptionProperties` vector in Options.h - see Options.h for a description of the vector contents. - * + * * This function will check `deprecatedOptionProperties` for the option property string passed in p_OptionProperty, * and if it is found to be a deprecated option property, will: - * + * * (a) show a deprecation notice for the option property if necessary. Note that a deprecation notice for an * option property will only be shown once per COMPAS run (no matter how many times the deprecated option * property appears in the logfile-definitions file). - * + * * (b) return the replacement option property string, if applicable. If the deprecated option property is not * being renamed or replaced (i.e. it is just being removed), the returned option property string will be the * string as passed (i.e. p_OptionProperty). - * + * * If the option property passed in p_OptionProperty is not found to be a deprecated option, the retunred option * name string will be the string as passed (i.e. p_OptionProperty). * * This function is called by the logfile-definitions file parsing code to determine if a deprecated option property * needs to be replaced with a new option property string at parse time. - * + * * std::string Options::CheckDeprecatedOptionProperty(const std::string p_OptionProperty) - * + * * @param [IN] p_OptionProperty The string to be checked against deprecated property names * @return Replacement option property string. Will just be the input - * parameter if it is not a deprecated option property, or if it + * parameter if it is not a deprecated option property, or if it * is a deprecated option property but has no replacement string */ std::string Options::CheckDeprecatedOptionProperty(const std::string p_OptionProperty) { @@ -5434,4 +5434,3 @@ std::string Options::CheckDeprecatedOptionProperty(const std::string p_OptionPro return newPropertyString; } - diff --git a/src/Options.h b/src/Options.h index a9c1eb162..d1b40aa40 100755 --- a/src/Options.h +++ b/src/Options.h @@ -44,7 +44,7 @@ const std::string NOT_PROVIDED_STR(1, static_cast(NOT_PROVIDED_CHAR)); // Getter functions return the value of the class member variable - the class // member variable is set to a value depending upon the value of the corresponding // option entered by the user. -// +// // Since users specify grid line values using options, getter functions need to // know which option value to return - the one specified on the commandline (if in // fact the option was specified on the commandline), or the one specified on the @@ -59,18 +59,18 @@ const std::string NOT_PROVIDED_STR(1, static_cast(NOT_PROVIDED_CHAR)); // that value, and if the option was not specified on the grid line, it will return // either the default value for the option (if the 'fallback' parameter is 'false'), // or the commandline value (if the 'fallback' parameter is 'true'). Note that the -// commandline value for an option will be the value specified by the user on the +// commandline value for an option will be the value specified by the user on the // commandline if in fact the option was specified on the commandline, and it will be // the default value for the option if the option was not specified on the commandline. // // To reiterate: by using the OPT_VALUE macro, the value of the option returned will // be (in order of priority): // -// 1. the value specified on the grid line IFF the user specified the option on the +// 1. the value specified on the grid line IFF the user specified the option on the // grid line // // 2. if 'fallback' is 'true': -// the value specified on the commandline if the user did not specify the +// the value specified on the commandline if the user did not specify the // option on the grid line (regardless of whether they specified the option // on the commandline). In this case, if the user did not specify a value on // the commandline, the commandline value is set according to the default @@ -90,8 +90,8 @@ const std::string NOT_PROVIDED_STR(1, static_cast(NOT_PROVIDED_CHAR)); // so that we fallback to the commandline value for an option if the user did not // specify the option on the grid line, but there may be options for which we may not // want to fall back to the commandline value, even if the user did not specify a value -// on the grid line - we may instead want to return the default value for the option -// rather than return the value specified on the commandline (if any). For those +// on the grid line - we may instead want to return the default value for the option +// rather than return the value specified on the commandline (if any). For those // options, the getter should use // // OPT_VALUE("option-name", m_OptionVar, false) @@ -138,8 +138,8 @@ const std::string NOT_PROVIDED_STR(1, static_cast(NOT_PROVIDED_CHAR)); // (c) FALSE if `optName` is not found in the stored list of valid option names // (i.e not a valid option name) // -// In the (a) and (b) cases the boost defaulted() function (and so this macro) is a valid proxy for -// Option::OptionSpecified(), but in the (c) case, while the result is technically correct (i.e the +// In the (a) and (b) cases the boost defaulted() function (and so this macro) is a valid proxy for +// Option::OptionSpecified(), but in the (c) case, while the result is technically correct (i.e the // default value was not set for the option), it is not a valid proxy for Option::OptionSpecified() // (in this case, Option::OptionSpecified() would return FALSE) // @@ -175,14 +175,14 @@ class Options { // // The vectors below need to be updated whenever we deprecate an option or an option value, // and the option (or value) eventually removed when the deprecation notice period is over. - // + // // // "deprecatedOptionStrings" vector // -------------------------------- // // Each tuple in the "deprecatedOptionStrings" vector records an option that has been deprecated, // but is still available for users to specify. The tuple entries are: - // + // // - the option string for the deprecated option (just the option string - no leading "--") // - the option string for any replacement for the deprecated option (just the option string, // no leading "--"). If there is no replacement (i.e. the deprecated option will be removed @@ -195,7 +195,7 @@ class Options { // - datestring indicating the date the option string was deprecated. Deprecated option strings // should be manually removed from the "deprecatedOptionStrings" vector 12 months (too long?) // after the deprecation date. Datestring format is yyyymmdd (e.g.20251107 indicates November 07, 2025). - // + // // // "deprecatedOptionValues" vector // ------------------------------- @@ -203,10 +203,10 @@ class Options { // Sometimes we may want to deprecate an option value (e.g. one of the possible mass loss prescriptions). // We may want to do this to rename an option value, or we might want to remove it completely (without // replacement). - // + // // Each tuple in the "deprecatedOptionValues" vector records an option value that has been deprecated, // but is still available for users to specify. The tuple entries are: - // + // // - the option string for which a value is to be deprecated (just the option string - no leading "--") // - the value string for the value to be deprecated (e.g. for the value QCRIT_PRESCRIPTION::CLAEYS for // the option "critical-mass-ratio-prescription", specify "CLAEYS" in the vector) @@ -230,9 +230,9 @@ class Options { { "initial-mass-min", "initial-mass-function-min", false, "20250808" }, { "initial-mass-power", "initial-mass-function-power", false, "20250808" }, { "use-mass-loss", "mass-loss-prescription", false, "20250809" }, - { "mass-transfer-jloss-macleod-linear-fraction-degen", "mass-transfer-jloss-linear-fraction-degen", false, "20250819" }, - { "mass-transfer-jloss-macleod-linear-fraction-non-degen", "mass-transfer-jloss-linear-fraction-non-degen", false, "20250819" }, - { "scale-mass-loss-with-surface-helium-abundance", "scale-CHE-mass-loss-with-surface-helium-abundance", false, "20251209" }, + { "mass-transfer-jloss-macleod-linear-fraction-degen", "mass-transfer-jloss-linear-fraction-degen", false, "20250819" }, + { "mass-transfer-jloss-macleod-linear-fraction-non-degen", "mass-transfer-jloss-linear-fraction-non-degen", false, "20250819" }, + { "scale-mass-loss-with-surface-helium-abundance", "scale-CHE-mass-loss-with-surface-helium-abundance", false, "20251209" }, }; std::vector> deprecatedOptionValues = { @@ -294,9 +294,9 @@ class Options { // for final parsing. If any option strings not in this vector are specified using // shorthand notation, boost will parse them as usual and likely (though not necessarily) // complain (boost will only complain if the option/value pair is malformed or unknown, - // which would almost certainly be the case - but it isn't guaranteed to be). + // which would almost certainly be the case - but it isn't guaranteed to be). + - union ShorthandDefault_t { char* strVal = nullptr; double dblVal; @@ -329,11 +329,11 @@ class Options { // m_GridLineExcluded records option strings that may not be specified on a grid line // - // This vector is checked when the grid line is parsed - if any option strings are + // This vector is checked when the grid line is parsed - if any option strings are // specified but excluded from the grid line, a warning will be issued and the option - // ignored (processing will continue). The reasons we might exclude options from the - // grid file should be obvious upon reading the list of excluded options. I can't - // think of a good reason to exclude options from the commandline, so I haven't + // ignored (processing will continue). The reasons we might exclude options from the + // grid file should be obvious upon reading the list of excluded options. I can't + // think of a good reason to exclude options from the commandline, so I haven't // implemented that functionality (though it wouldn't be too difficult to add it). // // I could probably have done this using a different set of options in Boost for @@ -367,7 +367,7 @@ class Options { "help", "h", "hmxr-binaries", - "log-level", + "log-level", "log-classes", "logfile-common-envelopes", @@ -402,7 +402,7 @@ class Options { "population-data-printing", "print-bool-as-string", - "quiet", + "quiet", "rlof-printing", @@ -414,7 +414,7 @@ class Options { "yaml-template" }; - + // m_SSEOnly records option strings that apply to SSE only // m_BSEOnly records option strings that apply to BSE only // @@ -432,7 +432,7 @@ class Options { // SSE code will happily ignore the option, but unless we know not to, we will // still play out the range of values (only for them to be ignored) - so we will // evolve as many stars as there are values in the range, and they will all be - // the same (because the SSE code will ignore the BSE-only option each time + // the same (because the SSE code will ignore the BSE-only option each time // through the loop while the range is playing out). // // To get around this we specify in the following vectors the names of any @@ -465,12 +465,12 @@ class Options { "allow-rlof-at-birth", "allow-touching-at-birth", - "angular-momentum-conservation-during-circularisation", + "angular-momentum-conservation-during-circularisation", "case-BB-stability-prescription", "circularise-binary-during-mass-transfer", "common-envelope-allow-main-sequence-survive", - "common-envelope-alpha", + "common-envelope-alpha", "common-envelope-alpha-thermal", "common-envelope-formalism", "common-envelope-lambda", @@ -550,8 +550,8 @@ class Options { "rocket-kick-magnitude-1", "rocket-kick-magnitude-2", - "rocket-kick-phi-1", - "rocket-kick-phi-2", + "rocket-kick-phi-1", + "rocket-kick-phi-2", "rocket-kick-theta-1", "rocket-kick-theta-2", @@ -561,7 +561,7 @@ class Options { "semi-major-axis-min", }; - + // m_RangeExcluded records option strings that cannot be ranges // m_SetExcluded records option strings that cannot be sets // @@ -571,7 +571,7 @@ class Options { // increment be...). Sets can be specified for options of all data types, // but sets (and ranges) don't make sense for some options (things like "help", // "quiet", logfile names etc....) - + STR_VECTOR m_RangeExcluded = { // trying to keep entries alphabetical so easier to find specific entries @@ -628,11 +628,11 @@ class Options { "initial-mass-function", "i", "kick-direction-distribution", - "kick-magnitude-distribution", + "kick-magnitude-distribution", "LBV-mass-loss-prescription", - "log-level", + "log-level", "log-classes", "logfile-common-envelopes", @@ -686,7 +686,7 @@ class Options { "pulsational-pair-instability", "pulsational-pair-instability-prescription", - "quiet", + "quiet", "RSG-mass-loss-prescription", "radial-change-fraction", @@ -720,7 +720,7 @@ class Options { "yaml-template" }; - + STR_VECTOR m_SetExcluded = { // trying to keep entries alphabetical so easier to find specific entries @@ -749,7 +749,7 @@ class Options { "hmxr-binaries", "log-classes", - "log-level", + "log-level", "logfile-common-envelopes", "logfile-common-envelopes-record-types", @@ -806,7 +806,7 @@ class Options { public: - + // The OptionsValues class holds the values for the options. This allows the Options class // to hold values for both the commandline options (the options specified by the user on the // commandline) and the grid file options (the options specified by the user on a grid file @@ -822,12 +822,12 @@ class Options { private: - template - struct ENUM_OPT { - std::string typeString; - T type; - }; - + template + struct ENUM_OPT { + std::string typeString; + T type; + }; + // member variables - alphabetically in groups (sort of...) bool m_AllowNonStrippedECSN; // Indicates whether single stars should undergo ECSNe if they were not stripped by a companion @@ -878,12 +878,12 @@ class Options { int m_ObjectsToEvolve; // Number of stars (SSE) or binaries (BSE) to evolve bool m_FixedRandomSeed; // Whether to use a fixed random seed given by options.randomSeed (set to true if --random-seed is passed on command line) unsigned long int m_RandomSeed; // Random seed to use - + double m_MaxEvolutionTime; // Maximum time to evolve a binary by unsigned long int m_MaxNumberOfTimestepIterations; // Maximum number of timesteps to evolve binary for before giving up double m_TimestepMultiplier; // Multiplier for time step size (<1 -- shorter timesteps, >1 -- longer timesteps) DBL_VECTOR m_TimestepMultipliers; // Phase-dependent multipliers for time step size (<1 -- shorter timesteps, >1 -- longer timesteps) - + double m_MassChangeFraction; // Approximate goal for fractional radial change per timestep double m_RadialChangeFraction; // Approximate goal for fractional radial change per timestep @@ -971,7 +971,7 @@ class Options { double m_MullerMandelSigmaKickBH; // Scatter for BH kicks per Mandel and Mueller, 2020 double m_MullerMandelSigmaKickNS; // Scatter for NS kicks per Mandel and Mueller, 2020 bool m_USSNKicksOverrideMandelMuller; // Use user-defined USSN kicks (as a fixed value) in lieu of the Mandel & Muller kick prescription for USSNe - + // Black hole kicks ENUM_OPT m_BlackHoleKicksMode; // Which black hole kicks mode @@ -983,7 +983,7 @@ class Options { double m_RocketKickPhi2; // Rocket kick phi angle secondary double m_RocketKickTheta1; // Rocket kick theta angle primary double m_RocketKickTheta2; // Rocket kick theta angle secondary - + // CHE - Chemically Homogeneous Evolution ENUM_OPT m_CheMode; // Which Chemically Homogeneous Evolution mode bool m_EnhanceCHELifetimesLuminosities; // Whether to enhance the lifetimes and luminosities of CHE stars relative to SSE MS stars @@ -998,8 +998,8 @@ class Options { double m_NeutrinoMassLossValueBH; // Value (corresponding to assumption) for neutrino mass loss for BH formation - double m_Fryer22fmix; // Parameter describing the mixing growth time when using Fryer 2022 remnant mass presc. - double m_Fryer22Mcrit; // Critical mass for black hole formation when using Fryer 2022 remnant mass presc. + double m_Fryer22fmix; // Parameter describing the mixing growth time when using Fryer 2022 remnant mass presc. + double m_Fryer22Mcrit; // Critical mass for black hole formation when using Fryer 2022 remnant mass presc. // Fixed uk options bool m_UseFixedUK; // Whether to fix uk to a certain value (default is to NOT fix uk) @@ -1015,7 +1015,7 @@ class Options { double m_PulsationalPairInstabilityUpperLimit; // Minimum core mass leading to PPI double m_PulsationalPairInstabilityCOCoreShiftHendriks; // Shift in CO Core mass for PPI from Hendriks+23 - + ENUM_OPT m_PulsationalPairInstabilityPrescription; // Which PPI prescription double m_MaximumNeutronStarMass; // Maximum mass of a neutron star allowed, set to default in StarTrack @@ -1036,9 +1036,9 @@ class Options { double m_WolfRayetFactor; // Multiplicitive factor for Wolf-Rayet (WR) wind mass loss rates ENUM_OPT m_OBMassLossPrescription; // Which OB mass loss prescrioption - ENUM_OPT m_VMSMassLossPrescription; // Which VMS mass loss prescription for M > 100 Msol - ENUM_OPT m_RSGMassLossPrescription; // Which RSG mass loss prescription to use for RSG - ENUM_OPT m_WRMassLossPrescription; // Which WR mass loss prescription to use for WR + ENUM_OPT m_VMSMassLossPrescription; // Which VMS mass loss prescription for M > 100 Msol + ENUM_OPT m_RSGMassLossPrescription; // Which RSG mass loss prescription to use for RSG + ENUM_OPT m_WRMassLossPrescription; // Which WR mass loss prescription to use for WR // Mass transfer options @@ -1047,14 +1047,14 @@ class Options { bool m_AngularMomentumConservationDuringCircularisation; // Whether to conserve angular momentum while circularising or circularise to periastron (default = false) double m_ConvectiveEnvelopeMassThreshold; // The mass fraction of envelope that should be convective for the envelope to be labeled convective double m_ConvectiveEnvelopeTemperatureThreshold; // The boundary between convective and radiative envelopes for HG and Giant stars - + bool m_ExpelConvectiveEnvelopeAboveLuminosityThreshold; // Whether to expel the convective envelope in a pulsation when log_10(L/M) reaches the threshold defined by m_LuminosityToMassThreshold double m_LuminosityToMassThreshold; // Threshold value of log_10(L/M) above which the convective envelope is expelled in a pulsation - + bool m_RetainCoreMassDuringCaseAMassTransfer; // Whether to retain the approximate core mass of a case A donor as a minimum core at end of MS or HeMS (default = false) ENUM_OPT m_MainSequenceCoreMassPrescription; // Which MS core prescription - + ENUM_OPT m_CaseBBStabilityPrescription; // Which prescription for the stability of case BB/BC mass transfer @@ -1069,8 +1069,8 @@ class Options { ENUM_OPT m_MassTransferThermallyLimitedVariation; // Choose how to deal with mass transfer if it is set as thermally limited. double m_MassTransferJloss; // Specific angular momentum of the material leaving the system (not accreted) - double m_MassTransferJlossLinearFractionDegen; // Linear interpolation fraction for jloss for degenerate accretors, between accretor and L2 position (either Macleod or Klencki linear) - double m_MassTransferJlossLinearFractionNonDegen; // Linear interpolation fraction for jloss for non-degenerate accretors, between accretor and L2 position (either Macleod or Klencki linear) + double m_MassTransferJlossLinearFractionDegen; // Linear interpolation fraction for jloss for degenerate accretors, between accretor and L2 position (either Macleod or Klencki linear) + double m_MassTransferJlossLinearFractionNonDegen; // Linear interpolation fraction for jloss for non-degenerate accretors, between accretor and L2 position (either Macleod or Klencki linear) ENUM_OPT m_MassTransferAngularMomentumLossPrescription; // Which mass transfer angular momentum loss prescription // Mass transfer rejuvenation prescription @@ -1117,7 +1117,7 @@ class Options { bool m_AllowMainSequenceStarToSurviveCommonEnvelope; // Whether or not to allow a main sequence star to survive a common envelope event bool m_AllowRadiativeEnvelopeStarToSurviveCommonEnvelope; // Whether or not to allow a radiative-envelope star to survive a common envelope event bool m_AllowImmediateRLOFpostCEToSurviveCommonEnvelope; // Whether or not to allow Roche Lobe Overflow immediately after a CE to survive a common envelope event - + // Prescription for envelope state (radiative or convective) ENUM_OPT m_EnvelopeStatePrescription; @@ -1129,7 +1129,7 @@ class Options { // Common envelope formalism ENUM_OPT m_CommonEnvelopeFormalism; // Formalism for CE evolution - + // Common envelope lambda prescription ENUM_OPT m_CommonEnvelopeLambdaPrescription; // Prescription to use for CE lambda @@ -1139,7 +1139,7 @@ class Options { double m_CommonEnvelopeRecombinationEnergyDensity; // Factor using to calculate the binding energy depending on the mass of the envelope. (default = 1.5x10^13 erg/g) ENUM_OPT m_ResponseToSpinUp; // Response to super-critical spin-up prescription - + // Tides ENUM_OPT m_TidesPrescription; // Which tides prescription (default = NONE) @@ -1257,7 +1257,7 @@ class Options { void Initialise(); template - void ModifyVariableMap(std::map& vm, const std::string& opt, const T& val) { + void ModifyVariableMap(std::map& vm, const std::string& opt, const T& val) { vm[opt].value() = boost::any(val); } @@ -1296,14 +1296,14 @@ class Options { unsigned long ulVal; // UNSIGNED LONG (INT) long lVal; // LONG (INT) int iVal; // INT - } RangeParameterT; + } RangeParameterT; typedef struct RangeOrSetDescriptor { COMPLEX_TYPE type; // RANGE or SET TYPENAME dataType; // the option datatype STR_VECTOR parameters; // the range or set parameters std::vector rangeParms; // range parameters numerical values - int currPos; // current position of iterator - count for RANGE, pos for SET + int currPos; // current position of iterator - count for RANGE, pos for SET } RangeOrSetDescriptorT; typedef std::vector> COMPLEX_OPTION_VALUES; @@ -1313,13 +1313,13 @@ class Options { typedef STR_STR_STR_STR OPTIONSTR; // option strings for specified options: // we have two structs: - // one for the commandline (program-level) options, and + // one for the commandline (program-level) options, and // one for the grid file line (evolving object-level) options // // each struct contains: // // an OPTIONS_ORIGIN variable to indicate whether this struct is for command-line or grid file options (so the struct can be queried) - // an OptionValues object - holds the values of the options + // an OptionValues object - holds the values of the options // a Boost options_descriptions object // a COMPLEX_OPTION_VALUES object - holds the complex option values (ranges, sets) // a struct containing the option strings of the specified options @@ -1419,9 +1419,9 @@ class Options { BLACK_HOLE_KICKS_MODE BlackHoleKicksMode() const { return OPT_VALUE("black-hole-kicks-mode", m_BlackHoleKicksMode.type, true); } - + CASE_BB_STABILITY_PRESCRIPTION CaseBBStabilityPrescription() const { return OPT_VALUE("case-BB-stability-prescription", m_CaseBBStabilityPrescription.type, true); } - + bool CheckPhotonTiringLimit() const { return OPT_VALUE("check-photon-tiring-limit", m_CheckPhotonTiringLimit, true); } CHE_MODE CHEMode() const { return OPT_VALUE("chemically-homogeneous-evolution-mode", m_CheMode.type, true); } @@ -1431,7 +1431,7 @@ class Options { std::vector CmdLineOptionsDetails() const { return m_CmdLineOptionsDetails; } bool CommandLineGrid() const { return m_CmdLine.complexOptionValues.size() != 0; } - + double CommonEnvelopeAlpha() const { return OPT_VALUE("common-envelope-alpha", m_CommonEnvelopeAlpha, true); } double CommonEnvelopeAlphaThermal() const { return OPT_VALUE("common-envelope-alpha-thermal", m_CommonEnvelopeAlphaThermal, true); } CE_FORMALISM CommonEnvelopeFormalism() const { return OPT_VALUE("common-envelope-formalism", m_CommonEnvelopeFormalism.type, true); } @@ -1465,7 +1465,7 @@ class Options { bool EnhanceCHELifetimesLuminosities() const { return OPT_VALUE("enhance-CHE-lifetimes-luminosities", m_EnhanceCHELifetimesLuminosities, false); } bool EnableWarnings() const { return m_CmdLine.optionValues.m_EnableWarnings; } bool ErrorsToFile() const { return m_CmdLine.optionValues.m_ErrorsToFile; } - + double Eccentricity() const { return OPT_VALUE("eccentricity", m_Eccentricity, true); } ECCENTRICITY_DISTRIBUTION EccentricityDistribution() const { return OPT_VALUE("eccentricity-distribution", m_EccentricityDistribution.type, true); } double EccentricityDistributionMax() const { return OPT_VALUE("eccentricity-distribution-max", m_EccentricityDistributionMax, true); } @@ -1586,19 +1586,19 @@ class Options { LOGFILETYPE LogfileType() const { return m_CmdLine.optionValues.m_LogfileType.type; } std::string LogfileTypeString() const { return m_CmdLine.optionValues.m_LogfileType.typeString; } int LogLevel() const { return m_CmdLine.optionValues.m_LogLevel; } - + double LuminosityToMassThreshold() const { return OPT_VALUE("luminosity-to-mass-threshold", m_LuminosityToMassThreshold, true); } double LuminousBlueVariableFactor() const { return OPT_VALUE("luminous-blue-variable-multiplier", m_LuminousBlueVariableFactor, true); } LBV_MASS_LOSS_PRESCRIPTION LBVMassLossPrescription() const { return OPT_VALUE("LBV-mass-loss-prescription", m_LBVMassLossPrescription.type, true); } - + CORE_MASS_PRESCRIPTION MainSequenceCoreMassPrescription() const { return OPT_VALUE("main-sequence-core-mass-prescription", m_MainSequenceCoreMassPrescription.type, true); } double MaltsevFallback() const { return OPT_VALUE("maltsev-fallback", m_MaltsevFallback, true); } MALTSEV_MODE MaltsevMode() const { return OPT_VALUE("maltsev-mode", m_MaltsevMode.type, true); } - + double MassChangeFraction() const { return m_CmdLine.optionValues.m_MassChangeFraction; } - + MASS_LOSS_PRESCRIPTION MassLossPrescription() const { return OPT_VALUE("mass-loss-prescription", m_MassLossPrescription.type, true); } double MassRatio() const { return OPT_VALUE("mass-ratio", m_MassRatio, true); } @@ -1662,7 +1662,7 @@ class Options { STR_VECTOR Notes() const { return OPT_VALUE("notes", m_Notes, true); } std::string NotesHdrs(const size_t p_Idx) const { return m_CmdLine.optionValues.m_NotesHdrs[p_Idx]; } STR_VECTOR NotesHdrs() const { return m_CmdLine.optionValues.m_NotesHdrs; } - + size_t nObjectsToEvolve() const { return m_CmdLine.optionValues.m_ObjectsToEvolve; } OB_MASS_LOSS_PRESCRIPTION OBMassLossPrescription() const { return OPT_VALUE("OB-mass-loss-prescription", m_OBMassLossPrescription.type, true); } bool OptimisticCHE() const { return CHEMode() == CHE_MODE::OPTIMISTIC; } @@ -1704,26 +1704,26 @@ class Options { double PulsationalPairInstabilityLowerLimit() const { return OPT_VALUE("PPI-lower-limit", m_PulsationalPairInstabilityLowerLimit, true); } double PulsationalPairInstabilityUpperLimit() const { return OPT_VALUE("PPI-upper-limit", m_PulsationalPairInstabilityUpperLimit, true); } double PulsationalPairInstabilityCOCoreShiftHendriks() const { return OPT_VALUE("PPI-CO-Core-Shift-Hendriks", m_PulsationalPairInstabilityCOCoreShiftHendriks, true); } - + QCRIT_PRESCRIPTION QCritPrescription() const { return OPT_VALUE("critical-mass-ratio-prescription", m_QCritPrescription.type, true); } bool Quiet() const { return m_CmdLine.optionValues.m_Quiet; } double RadialChangeFraction() const { return m_CmdLine.optionValues.m_RadialChangeFraction; } - + unsigned long int RandomSeed() const { return OPT_VALUE("random-seed", m_RandomSeed, true); } unsigned long int RandomSeedCmdLine() const { return m_CmdLine.optionValues.m_RandomSeed; } unsigned long int RandomSeedGridLine() const { return m_GridLine.optionValues.m_RandomSeed; } REMNANT_MASS_PRESCRIPTION RemnantMassPrescription() const { return OPT_VALUE("remnant-mass-prescription", m_RemnantMassPrescription.type, true); } - + bool RequestedHelp() const { return m_CmdLine.optionValues.m_VM["help"].as(); } bool RequestedVersion() const { return m_CmdLine.optionValues.m_VM["version"].as(); } - + RESPONSE_TO_SPIN_UP ResponseToSpinUp() const { return OPT_VALUE("response-to-spin-up", m_ResponseToSpinUp.type, true); } - + bool RetainCoreMassDuringCaseAMassTransfer() const { return m_CmdLine.optionValues.m_RetainCoreMassDuringCaseAMassTransfer; } - + bool RLOFPrinting() const { return m_CmdLine.optionValues.m_RlofPrinting; } double RocketKickMagnitude1() const { return OPT_VALUE("rocket-kick-magnitude-1", m_RocketKickMagnitude1, true); } diff --git a/src/Remnants.cpp b/src/Remnants.cpp index 24e33c173..fa14a2e0a 100644 --- a/src/Remnants.cpp +++ b/src/Remnants.cpp @@ -27,7 +27,7 @@ */ DBL_DBL Remnants::CalculateMassAcceptanceRate(const double p_DonorMassRate, const double p_AccretorMassRate) { - double thisMassRate = CalculateEddingtonCriticalRate(); + double thisMassRate = CalculateEddingtonCriticalRate(); double acceptanceRate = std::min(thisMassRate, p_DonorMassRate); double fractionAccreted = acceptanceRate / p_DonorMassRate; diff --git a/src/Remnants.h b/src/Remnants.h index d028a881a..eb2cd731c 100644 --- a/src/Remnants.h +++ b/src/Remnants.h @@ -17,14 +17,14 @@ class Remnants: virtual public BaseStar, public HeGB { public: Remnants(){}; - + Remnants(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), HeGB(p_BaseStar, false) { } - + // member functions - + static double CalculateRemnantMass_Static(const double p_COCoreMass) { return utils::Compare(p_COCoreMass, 7.0)< 0 ? 1.17 + (0.09 * p_COCoreMass) : p_COCoreMass; } // Hurley et al., eq 92; Hurley says that a >7.0 CO core leads to a collapse into a BH, but is ambiguous about the BH mass in this case -- we will assume it's just the CO core - + double CalculateRemnantRadius() const { return Radius(); } @@ -47,15 +47,15 @@ class Remnants: virtual public BaseStar, public HeGB { const double p_massTransferEfficiencyBeta) { return 0.0; } double CalculateCriticalMassRatioHurleyHjellmingWebbink() const { return 0.0; } - void CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams) { GiantBranch::CalculateGBParams(p_Mass, p_GBParams); } // Default to GiantBranch + void CalculateGBParams(const double p_Mass, DBL_VECTOR &p_GBParams) { GiantBranch::CalculateGBParams(p_Mass, p_GBParams); } // Default to GiantBranch void CalculateGBParams() { CalculateGBParams(m_Mass0, m_GBParams); } // Use class member variables double CalculateHeliumAbundanceCoreOnPhase() const { return 0.0; }; double CalculateHeliumAbundanceSurfaceOnPhase() const { return 0.0; }; - + double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; }; double CalculateHydrogenAbundanceSurfaceOnPhase() const { return 0.0; }; - + double CalculateHeCoreMassOnPhase() const { return m_Mass; } // Return m_Mass DBL_DBL_DBL_DBL CalculateImKnmDynamical(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) const { return std::make_tuple(0.0, 0.0, 0.0, 0.0); } // Default is no tidal response @@ -74,16 +74,16 @@ class Remnants: virtual public BaseStar, public HeGB { double CalculateMassLossRateHurley() { m_DominantMassLossRate = MASS_LOSS_TYPE::NONE ; return 0.0; } double CalculateMassLossRateBelczynski2010() { m_DominantMassLossRate = MASS_LOSS_TYPE::NONE ; return 0.0; } - double CalculateMassLossRateMerritt2025() { m_DominantMassLossRate = MASS_LOSS_TYPE::NONE ; return 0.0; } // + double CalculateMassLossRateMerritt2025() { m_DominantMassLossRate = MASS_LOSS_TYPE::NONE ; return 0.0; } // double CalculatePerturbationMuOnPhase() const { return m_Mu; } // NO-OP double CalculateRadialExtentConvectiveEnvelope() const { return 0.0; } // WD stars don't have a convective envelope std::tuple CalculateRadiusAndStellarTypeOnPhase() const { return BaseStar::CalculateRadiusAndStellarTypeOnPhase(); } - + double CalculateTauOnPhase() const { return m_Tau; } // NO-OP - + double CalculateThermalTimescale(const double p_Radius = 1.0) const { return CalculateDynamicalTimescale(); } // Parameter is ignored double CalculateThermalTimescale() const { return CalculateThermalTimescale(m_Radius); } // Use inheritance hierarchy @@ -93,11 +93,11 @@ class Remnants: virtual public BaseStar, public HeGB { void CalculateTimescales() { CalculateTimescales(m_Mass0, m_Timescales); } // Use class member variables double CalculateZetaConstantsByEnvelope(ZETA_PRESCRIPTION p_ZetaPrescription) { return 0.0; } // Should never be called... - + double CalculateZetaEquilibrium() { return -std::numeric_limits::infinity(); } // Nuclear timescale MT should be impossible from remnant stars; should never be called double ChooseTimestep(const double p_Time) const; - + ENVELOPE DetermineEnvelopeType() const { return ENVELOPE::REMNANT; } // Always REMNANT void EvolveOneTimestepPreamble() { BaseStar::EvolveOneTimestepPreamble(); } // Default to BaseStar @@ -121,7 +121,7 @@ class Remnants: virtual public BaseStar, public HeGB { STELLAR_TYPE ResolveSkippedPhase() { return BaseStar::ResolveSkippedPhase(); } // Default to BaseStar // - void ResolveShellChange(const double p_AccretedMass) { } // NO-OP + void ResolveShellChange(const double p_AccretedMass) { } // NO-OP // STELLAR_TYPE ResolveSupernova() { return BaseStar::ResolveSupernova(); } // Default to BaseStar diff --git a/src/Star.cpp b/src/Star.cpp index 7631e3890..2013b1e78 100644 --- a/src/Star.cpp +++ b/src/Star.cpp @@ -16,7 +16,7 @@ Star::Star() : m_Star(new BaseStar()) { // Regular constructor - with parameters for RandomSeed, MZAMS, Metallicity, and KickParameters Star::Star(const unsigned long int p_RandomSeed, const double p_MZAMS, - const double p_Metallicity, + const double p_Metallicity, const KickParameters p_KickParameters, const double p_RotationalVelocity) { @@ -39,7 +39,7 @@ Star::Star(const unsigned long int p_RandomSeed, } m_SaveStar = nullptr; - + // thresholds flags for system detailed output file if (OPTIONS->SystemSnapshotAgeThresholds().size() > 0) m_SystemSnapshotAgeFlags.assign(OPTIONS->SystemSnapshotAgeThresholds().size(), -1.0); if (OPTIONS->SystemSnapshotTimeThresholds().size() > 0) m_SystemSnapshotTimeFlags.assign(OPTIONS->SystemSnapshotTimeThresholds().size(), false); @@ -263,10 +263,10 @@ STELLAR_TYPE Star::UpdateAttributesAndAgeOneTimestep(const double p_DeltaMass, if (p_Switch && (stellarType != m_Star->StellarType())) { // switch to new stellar type if necessary? STELLAR_TYPE stellarTypePrev = SwitchTo(stellarType); // yes - switch m_Star->SetStellarTypePrev(stellarTypePrev); // record previous stellar type - + // recalculate stellar attributes after switching if necessary - transition may not be continuous // this is a bit of a kludge just for CH -> HeMS JR: should revisit the best way to do this - if (stellarTypePrev == STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS && + if (stellarTypePrev == STELLAR_TYPE::CHEMICALLY_HOMOGENEOUS && stellarType == STELLAR_TYPE::NAKED_HELIUM_STAR_MS) { // discontinuous transition? if (UpdateAttributes(0.0, 0.0, true) != stellarType) { // yes - recalculate stellar attributes // JR: need to revisit this - should we actually switch here @@ -338,7 +338,7 @@ STELLAR_TYPE Star::UpdateAttributes(const double p_DeltaMass, const double p_Del * type is just the stellar type of the star upon entry if it should remain on phase. * * If the parameter p_Switch is true the star will switch to the new stellar type before returning. - * + * * This function is called from SSE code (Star::EvolveOneTimeStep()), and BSE code (BaseBinaryStar::EvolveOneTimestep()) * * @@ -366,9 +366,9 @@ STELLAR_TYPE Star::AgeOneTimestep(const double p_DeltaTime, bool p_Switch) { void Star::EvolveOneTimestep(const double p_Dt) { STELLAR_TYPE stellarType; - + (void)m_Star->PrintDetailedOutput(m_Id, SSE_DETAILED_RECORD_TYPE::PRE_MASS_LOSS); // log record - pre mass loss - + m_Star->ResolveMassLoss(p_Dt); // apply wind mass loss if required stellarType = AgeOneTimestep(p_Dt, false); // age the star one time step - modify stellar attributes as appropriate, but do not switch stellar type @@ -407,7 +407,7 @@ EVOLUTION_STATUS Star::Evolve(const long int p_Id) { double dt = 0.0; - (void)m_Star->PrintDetailedOutput(m_Id, SSE_DETAILED_RECORD_TYPE::INITIAL_STATE); // log detailed output record + (void)m_Star->PrintDetailedOutput(m_Id, SSE_DETAILED_RECORD_TYPE::INITIAL_STATE); // log detailed output record bool usingProvidedTimesteps = false; // using user-provided timesteps? DBL_VECTOR timesteps; @@ -432,7 +432,7 @@ EVOLUTION_STATUS Star::Evolve(const long int p_Id) { else if (stepNum >= OPTIONS->MaxNumberOfTimestepIterations()) { // out of timesteps? evolutionStatus = EVOLUTION_STATUS::STEPS_UP; // set status } - else if (m_Star->IsOneOf(WHITE_DWARFS) || m_Star->StellarType() == STELLAR_TYPE::BLACK_HOLE || + else if (m_Star->IsOneOf(WHITE_DWARFS) || m_Star->StellarType() == STELLAR_TYPE::BLACK_HOLE || (m_Star->StellarType() == STELLAR_TYPE::NEUTRON_STAR && !OPTIONS->EvolvePulsars() ) ){ // If a WD or BH, or an NS but not evolving pulsars, we're done evolutionStatus = EVOLUTION_STATUS::DONE; } @@ -442,7 +442,7 @@ EVOLUTION_STATUS Star::Evolve(const long int p_Id) { } else { // evolve one timestep m_Star->UpdatePreviousTimestepDuration(); - + if (usingProvidedTimesteps) { // user-provided timesteps // get new timestep // - don't quantise @@ -451,15 +451,15 @@ EVOLUTION_STATUS Star::Evolve(const long int p_Id) { dt = timesteps[stepNum]; } else { // not using user-provided timesteps - dt = m_Star->CalculateTimestep() * OPTIONS->TimestepMultiplier() * OPTIONS->TimestepMultipliers(static_cast(m_Star->StellarType())); // calculate new timestep + dt = m_Star->CalculateTimestep() * OPTIONS->TimestepMultiplier() * OPTIONS->TimestepMultipliers(static_cast(m_Star->StellarType())); // calculate new timestep dt = std::round(dt / TIMESTEP_QUANTUM) * TIMESTEP_QUANTUM; // quantised } - stepNum++; // increment step number + stepNum++; // increment step number EvolveOneTimestep(dt); // evolve for timestep UpdateAttributes(0.0, 0.0, true); // keeps SSE in sync with BSE - (void)m_Star->PrintDetailedOutput(m_Id, SSE_DETAILED_RECORD_TYPE::TIMESTEP_COMPLETED); // log detailed output record + (void)m_Star->PrintDetailedOutput(m_Id, SSE_DETAILED_RECORD_TYPE::TIMESTEP_COMPLETED); // log detailed output record // check thresholds for system detailed output printing // don't use utils::Compare() here - not for time/age @@ -478,7 +478,7 @@ EVOLUTION_STATUS Star::Evolve(const long int p_Id) { for (size_t threshold = 0; threshold < OPTIONS->SystemSnapshotAgeThresholds().size(); threshold++) { // for each system detailed output age threshold double thresholdValue = OPTIONS->SystemSnapshotAgeThresholds(threshold); // this threshold value - + // flag need to print (log) system snapshot record // we don't want to print multiple records for the same timestep, so we flag need rather than print here printSystemSnapshotRec |= m_SystemSnapshotAgeFlags[threshold] < 0.0 && m_Star->Age() >= thresholdValue; @@ -502,7 +502,7 @@ EVOLUTION_STATUS Star::Evolve(const long int p_Id) { if (m_Star->StellarType() == STELLAR_TYPE::NEUTRON_STAR && OPTIONS->EvolvePulsars()){ // Pulsar output if star is a neutron star and user wants pulsar output (void)m_Star->PrintPulsarEvolutionParameters(SSE_PULSAR_RECORD_TYPE::TIMESTEP_COMPLETED); // log pulsar evolution parameters - } + } } } @@ -511,7 +511,7 @@ EVOLUTION_STATUS Star::Evolve(const long int p_Id) { SHOW_WARN(ERROR::TIMESTEPS_NOT_CONSUMED); // show warning } - (void)m_Star->PrintDetailedOutput(m_Id, SSE_DETAILED_RECORD_TYPE::FINAL_STATE); // log detailed output record + (void)m_Star->PrintDetailedOutput(m_Id, SSE_DETAILED_RECORD_TYPE::FINAL_STATE); // log detailed output record // if we trapped a floating-point error we set the star's error value to indicate a // floating-point error occurred, but we don't terminate evolution (we can only have diff --git a/src/Star.h b/src/Star.h index 57cc7e388..ca7316474 100755 --- a/src/Star.h +++ b/src/Star.h @@ -53,11 +53,11 @@ class Star { Star(); - Star(const unsigned long int p_RandomSeed, - const double p_MZAMS, - const double p_Metallicity, + Star(const unsigned long int p_RandomSeed, + const double p_MZAMS, + const double p_Metallicity, const KickParameters p_KickParameters, - const double p_RotationalVelocity = -1.0); + const double p_RotationalVelocity = -1.0); Star(const Star& p_Star); @@ -74,7 +74,7 @@ class Star { // getters - alphabetically double Age() const { return m_Star->Age(); } double AngularMomentum() const { return m_Star->AngularMomentum(); } - double CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, + double CalculateCriticalMassRatio(const bool p_AccretorIsDegenerate, const double p_massTransferEfficiencyBeta) const { return m_Star->CalculateCriticalMassRatio(p_AccretorIsDegenerate, p_massTransferEfficiencyBeta); } double CalculateCriticalMassRatioClaeys14(const bool p_AccretorIsDegenerate) const { return m_Star->CalculateCriticalMassRatioClaeys14(p_AccretorIsDegenerate); } double CalculateCriticalMassRatioHurleyHjellmingWebbink() const { return m_Star->CalculateCriticalMassRatioHurleyHjellmingWebbink(); } @@ -92,7 +92,7 @@ class Star { bool ExperiencedUSSN() const { return m_Star->ExperiencedUSSN(); } double HeCoreMass() const { return m_Star->HeCoreMass(); } double HeliumAbundanceCore() const { return m_Star->HeliumAbundanceCore(); } - double HeliumAbundanceSurface() const { return m_Star->HeliumAbundanceSurface();} + double HeliumAbundanceSurface() const { return m_Star->HeliumAbundanceSurface();} double HydrogenAbundanceCore() const { return m_Star->HydrogenAbundanceCore(); } double HydrogenAbundanceSurface() const { return m_Star->HydrogenAbundanceSurface(); } double InitialHeliumAbundance() const { return m_Star->InitialHeliumAbundance(); } @@ -143,7 +143,7 @@ class Star { double TotalMassLossRate() const { return m_Star->TotalMassLossRate(); } double XExponent() const { return m_Star->XExponent(); } - + // setters void SetAngularMomentum(double p_AngularMomentum) { m_Star->SetAngularMomentum(p_AngularMomentum); } void SetOmega(double p_Omega) { m_Star->SetOmega(p_Omega); } @@ -168,14 +168,14 @@ class Star { const double p_Lambda) { return m_Star->CalculateConvectiveEnvelopeBindingEnergy(p_TotalMass, p_ConvectiveEnvelopeMass, p_Radius, p_Lambda); } double CalculateConvectiveEnvelopeLambdaPicker(const DBL_DBL p_convectiveEnvelopeMass) const { return m_Star->CalculateConvectiveEnvelopeLambdaPicker(p_convectiveEnvelopeMass); } DBL_DBL CalculateConvectiveEnvelopeMass() { return m_Star->CalculateConvectiveEnvelopeMass(); } - + double CalculateEddyTurnoverTimescale() { return m_Star->CalculateEddyTurnoverTimescale(); } - + DBL_DBL_DBL_DBL CalculateImKnmDynamical(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) { return m_Star->CalculateImKnmDynamical(p_Omega, p_SemiMajorAxis, p_M2); } DBL_DBL_DBL_DBL CalculateImKnmEquilibrium(const double p_Omega, const double p_SemiMajorAxis, const double p_M2){ return m_Star->CalculateImKnmEquilibrium(p_Omega, p_SemiMajorAxis, p_M2); } DBL_DBL_DBL_DBL CalculateImKnmTidal(const double p_Omega, const double p_SemiMajorAxis, const double p_M2) { return m_Star->CalculateImKnmTidal(p_Omega, p_SemiMajorAxis, p_M2); } - DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, + DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, const double p_AccretorMassRate, const bool p_IsHeRich) { return m_Star->CalculateMassAcceptanceRate(p_DonorMassRate, p_AccretorMassRate, p_IsHeRich); } @@ -183,21 +183,21 @@ class Star { double CalculateMomentOfInertia() const { return m_Star->CalculateMomentOfInertia(); } double CalculateMomentOfInertiaAU() const { return m_Star->CalculateMomentOfInertiaAU(); } - + double CalculateNuclearMassLossRate() { return m_Star->CalculateNuclearMassLossRate(); } - + double CalculateRadialExpansionTimescaleDuringMassTransfer() { return m_Star->CalculateRadialExpansionTimescaleDuringMassTransfer(); } - + double CalculateRadialExtentConvectiveEnvelope() { return m_Star->CalculateRadialExtentConvectiveEnvelope(); } double CalculateRadiusOnMassChange(double p_dM) { return m_Star->CalculateRadiusOnMassChange(p_dM); } - + double CalculateRemnantRadius() { return m_Star->CalculateRemnantRadius(); } - + void CalculateSNAnomalies(const double p_Eccentricity) { m_Star->CalculateSNAnomalies(p_Eccentricity); } - - double CalculateSNKickMagnitude(const double p_RemnantMass, - const double p_EjectaMass, + + double CalculateSNKickMagnitude(const double p_RemnantMass, + const double p_EjectaMass, const STELLAR_TYPE p_StellarType) { return m_Star->CalculateSNKickMagnitude(p_RemnantMass, p_EjectaMass, p_StellarType); } @@ -225,7 +225,7 @@ class Star { void EvolveOneTimestep(const double p_Dt); - double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, + double InterpolateGeEtAlQCrit(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) { return m_Star->InterpolateGeEtAlQCrit(p_qCritPrescription, p_massTransferEfficiencyBeta); } void HaltWinds() { m_Star->HaltWinds(); } @@ -233,11 +233,11 @@ class Star { void ResolveAccretionRegime(const ACCRETION_REGIME p_Regime, const double p_DonorThermalMassLossRate) { m_Star->ResolveAccretionRegime(p_Regime, p_DonorThermalMassLossRate); } - + double ResolveCommonEnvelopeAccretion(const double p_FinalMass, const double p_CompanionMass, const double p_CompanionRadius, - const double p_CompanionEnvelope) { return m_Star->ResolveCommonEnvelopeAccretion(p_FinalMass, p_CompanionMass, p_CompanionRadius, p_CompanionEnvelope); } + const double p_CompanionEnvelope) { return m_Star->ResolveCommonEnvelopeAccretion(p_FinalMass, p_CompanionMass, p_CompanionRadius, p_CompanionEnvelope); } void ResolveEnvelopeLossAndSwitch(); @@ -254,11 +254,11 @@ class Star { double SN_RocketKickMagnitude() { return m_Star->SN_RocketKickMagnitude(); } double SN_RocketKickPhi() { return m_Star->SN_RocketKickPhi(); } double SN_RocketKickTheta() { return m_Star->SN_RocketKickTheta(); } - + void SpinDownIsolatedPulsar(const double p_Stepsize) { m_Star->SpinDownIsolatedPulsar(p_Stepsize); } STELLAR_TYPE SwitchTo(const STELLAR_TYPE p_StellarType, bool p_SetInitialType = false); - + double TAMSCoreMass() const { return m_Star->TAMSCoreMass(); } void UpdateAfterMerger(double p_Mass, double p_HydrogenMass) { m_Star->UpdateAfterMerger(p_Mass, p_HydrogenMass); } @@ -292,9 +292,9 @@ class Star { void UpdateMainSequenceCoreMass(const double p_Dt, const double p_TotalMassLossRate) { m_Star->UpdateMainSequenceCoreMass(p_Dt, p_TotalMassLossRate); } void UpdatePreviousTimestepDuration() { m_Star->UpdatePreviousTimestepDuration(); } - + void UpdateTotalMassLossRate(const double p_MassLossRate) { m_Star->UpdateTotalMassLossRate(p_MassLossRate); } - + ACCRETION_REGIME WhiteDwarfAccretionRegime() const { return m_Star->WhiteDwarfAccretionRegime(); } private: diff --git a/src/TPAGB.cpp b/src/TPAGB.cpp index 028ca5fd4..24e007775 100755 --- a/src/TPAGB.cpp +++ b/src/TPAGB.cpp @@ -415,7 +415,7 @@ double TPAGB::CalculateLambdaNanjingEnhanced(const int p_MassIndex, const STELLA * * @param [IN] p_Mass Mass * @param [IN] p_Metallicity Metallicity - * + * * @return Nanjing lambda for use in common envelope */ double TPAGB::CalculateLambdaNanjingStarTrack(const double p_Mass, const double p_Metallicity) const { @@ -926,7 +926,7 @@ STELLAR_TYPE TPAGB::ResolveEnvelopeLoss(bool p_Force) { if (ShouldEnvelopeBeExpelledByPulsations()) m_EnvelopeJustExpelledByPulsations = true; if (p_Force || (utils::Compare(m_CoreMass, m_Mass)) >= 0 || m_EnvelopeJustExpelledByPulsations) { // envelope loss - + m_Mass = std::min(m_CoreMass, m_Mass); m_CoreMass = m_Mass; m_HeCoreMass = m_Mass; diff --git a/src/TPAGB.h b/src/TPAGB.h index 5906770b5..2b0943df2 100755 --- a/src/TPAGB.h +++ b/src/TPAGB.h @@ -17,22 +17,22 @@ class TPAGB: virtual public BaseStar, public EAGB { public: TPAGB() { m_StellarType = STELLAR_TYPE::THERMALLY_PULSING_ASYMPTOTIC_GIANT_BRANCH; }; - + TPAGB(const BaseStar &p_BaseStar, const bool p_Initialise = true) : BaseStar(p_BaseStar), EAGB(p_BaseStar, false) { m_StellarType = STELLAR_TYPE::THERMALLY_PULSING_ASYMPTOTIC_GIANT_BRANCH; // Set stellar type if (p_Initialise) Initialise(); // Initialise if required } TPAGB* Clone(const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - TPAGB* clone = new TPAGB(*this, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + TPAGB* clone = new TPAGB(*this, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } static TPAGB* Clone(TPAGB& p_Star, const OBJECT_PERSISTENCE p_Persistence, const bool p_Initialise = true) { - TPAGB* clone = new TPAGB(p_Star, p_Initialise); - clone->SetPersistence(p_Persistence); - return clone; + TPAGB* clone = new TPAGB(p_Star, p_Initialise); + clone->SetPersistence(p_Persistence); + return clone; } @@ -41,7 +41,7 @@ class TPAGB: virtual public BaseStar, public EAGB { void Initialise() { CalculateTimescales(); // Initialise timescales m_Age = m_Timescales[static_cast(TIMESCALE::tP)]; // Set age appropriately - + EvolveOnPhase(0.0); } diff --git a/src/WhiteDwarfs.cpp b/src/WhiteDwarfs.cpp index a61ac02d9..f7629277c 100644 --- a/src/WhiteDwarfs.cpp +++ b/src/WhiteDwarfs.cpp @@ -3,15 +3,15 @@ -/* Calculate eta_hydrogen from Claeys+ 2014, appendix B. This parameter depends - * on three regimes for the mass transfer rate, which here are distinguished by the +/* Calculate eta_hydrogen from Claeys+ 2014, appendix B. This parameter depends + * on three regimes for the mass transfer rate, which here are distinguished by the * thresholds logMdotUppH and logMdotLowH. In Claeys+ 2014, the mass transfer rate is - * \dot{M}_{tr} and the thresholds are \dot{M}_{cr,H} and \dot{M}_{cr,H}/8, respectively. + * \dot{M}_{tr} and the thresholds are \dot{M}_{cr,H} and \dot{M}_{cr,H}/8, respectively. * - * However, we have used improved thresholds from Nomoto+ 2007 in which the - * lower boundary is \dot{M}_{stable} and the upper boundary is \dot{M}_{RG}. + * However, we have used improved thresholds from Nomoto+ 2007 in which the + * lower boundary is \dot{M}_{stable} and the upper boundary is \dot{M}_{RG}. * More precisely, we implemented quadratic fits to the values in Nomoto+ 2007, - * table 5, as described in the second COMPAS methods paper (in prep). + * table 5, as described in the second COMPAS methods paper (in prep). * * double CalculateEtaH(const double p_MassTransferRate) * @@ -26,15 +26,15 @@ double WhiteDwarfs::CalculateEtaH(const double p_MassTransferRate) { double m_Mass_2 = m_Mass * m_Mass; // The following coefficients come from quadratic fits to Nomoto+ 2007 results (table 5) in Mass vs log10 Mdot space, to cover the low-mass end. - double logMdotUppH = WD_LOG_MT_LIMIT_NOMOTO_REDGIANT_0 + WD_LOG_MT_LIMIT_NOMOTO_REDGIANT_1 * m_Mass + WD_LOG_MT_LIMIT_NOMOTO_REDGIANT_2 * m_Mass_2; + double logMdotUppH = WD_LOG_MT_LIMIT_NOMOTO_REDGIANT_0 + WD_LOG_MT_LIMIT_NOMOTO_REDGIANT_1 * m_Mass + WD_LOG_MT_LIMIT_NOMOTO_REDGIANT_2 * m_Mass_2; double logMdotLowH = WD_LOG_MT_LIMIT_NOMOTO_STABLE_0 + WD_LOG_MT_LIMIT_NOMOTO_STABLE_1 * m_Mass + WD_LOG_MT_LIMIT_NOMOTO_STABLE_2 * m_Mass_2; - + if (utils::Compare(logMassTransferRate, logMdotUppH) >= 0) { etaH = PPOW(10, logMdotUppH - logMassTransferRate); - } + } else if (utils::Compare(logMassTransferRate, logMdotLowH) >= 0) { etaH = 1.0; - } + } return etaH; } @@ -43,13 +43,13 @@ double WhiteDwarfs::CalculateEtaH(const double p_MassTransferRate) { /* Calculate eta_helium from Claeys+ 2014, appendix B. Similarly to CalculateEtaH * above, this parameter depends on four regimes for the mass transfer rate, distinguished * here by logMdotUppHe, logMdotMidHe, and logMdotLowHe. In Claeys+ 2014, these thresholds - * are \dot{M}_{up}, \dot{M}_{cr,He}, and \dot{M}_{low}, respectively. + * are \dot{M}_{up}, \dot{M}_{cr,He}, and \dot{M}_{low}, respectively. * * However, we have again updated the thresholds to those described in Piersanti+ 2014, - * table A1. The thresholds here are named by the boundaries RG/SS, SS/MF, and SF/Dt, - * respectively (see text for details). Note that the different flashes regimes from - * Piersanti+ 2014 have been merged into one, i.e we omit the MF/SF boundary, and - * the accumulation regime has been changed so we can get double detonations. Finally, + * table A1. The thresholds here are named by the boundaries RG/SS, SS/MF, and SF/Dt, + * respectively (see text for details). Note that the different flashes regimes from + * Piersanti+ 2014 have been merged into one, i.e we omit the MF/SF boundary, and + * the accumulation regime has been changed so we can get double detonations. Finally, * eta_KH04 has also been updated with the accretion efficiency values from Piersanti+ 2014. * * double CalculateEtaHe(const double p_MassTransferRate) @@ -60,7 +60,7 @@ double WhiteDwarfs::CalculateEtaH(const double p_MassTransferRate) { double WhiteDwarfs::CalculateEtaHe(const double p_MassTransferRate) { double etaHe = 1.0; // default return value - so we can have double detonations - + double logMassTransferRate = log10(p_MassTransferRate / MYR_TO_YEAR); // The following coefficients in massTransfer limits come from table A1 in Piersanti+ 2014. @@ -70,13 +70,13 @@ double WhiteDwarfs::CalculateEtaHe(const double p_MassTransferRate) { if (utils::Compare(logMassTransferRate, logMdotUppHe) >= 0) { etaHe = PPOW(10, logMdotUppHe - logMassTransferRate); - } + } else if (utils::Compare(logMassTransferRate, logMdotMidHe) >= 0) { etaHe = 1.0; - } + } else if (utils::Compare(logMassTransferRate, logMdotLowHe) >= 0) { etaHe = CalculateEtaPTY(p_MassTransferRate); - } + } return etaHe; } @@ -104,16 +104,16 @@ double WhiteDwarfs::CalculateEtaPTY(const double p_MassTransferRate) { // Limits on each conditional statement come from masses from each model in Piersanti+ 2014. The final etaPTY value is based on table A3. if (utils::Compare(m_Mass, 0.6) <= 0) { etaPTY = WD_PIERSANTI_M060_G0 + WD_PIERSANTI_M060_G1 * massRate + WD_PIERSANTI_M060_G2 * massRate_2 - WD_PIERSANTI_M060_G3 * massRate_3; - } + } else if (utils::Compare(m_Mass, 0.7) <= 0) { etaPTY = -WD_PIERSANTI_M070_G0 + WD_PIERSANTI_M070_G1 * massRate - WD_PIERSANTI_M070_G2 * massRate_2 + WD_PIERSANTI_M070_G3 * massRate_3; - } + } else if (utils::Compare(m_Mass, 0.81) <= 0) { etaPTY = WD_PIERSANTI_M081_G0 + WD_PIERSANTI_M081_G1 * massRate + WD_PIERSANTI_M081_G2 * massRate_2 - WD_PIERSANTI_M081_G3 * massRate_3; - } - else if (utils::Compare(m_Mass, 0.92) <= 0) { + } + else if (utils::Compare(m_Mass, 0.92) <= 0) { etaPTY = -WD_PIERSANTI_M092_G0 + WD_PIERSANTI_M092_G1 * massRate + WD_PIERSANTI_M092_G2 * massRate_2 - WD_PIERSANTI_M092_G3 * massRate_3; - } + } else { etaPTY = -WD_PIERSANTI_M102_G0 + WD_PIERSANTI_M102_G1 * massRate - WD_PIERSANTI_M102_G2 * massRate_2 + WD_PIERSANTI_M102_G3 * massRate_3; } @@ -149,8 +149,8 @@ double WhiteDwarfs::CalculateLuminosityOnPhase_Static(const double p_Mass, const * Currently used for COWDs and ONeWDs * * For a given mass transfer rate, this function computes the amount of mass a WD would retain after - * flashes, as given by appendix B of Claeys+ 2014. - * https://ui.adsabs.harvard.edu/abs/2014A%26A...563A..83C/abstract + * flashes, as given by appendix B of Claeys+ 2014. + * https://ui.adsabs.harvard.edu/abs/2014A%26A...563A..83C/abstract * * * DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, const bool p_IsHeRich) @@ -161,8 +161,8 @@ double WhiteDwarfs::CalculateLuminosityOnPhase_Static(const double p_Mass, const */ DBL_DBL WhiteDwarfs::CalculateMassAcceptanceRate(const double p_DonorMassRate, const bool p_IsHeRich) { - m_AccretionRegime = DetermineAccretionRegime(p_DonorMassRate, p_IsHeRich); - + m_AccretionRegime = DetermineAccretionRegime(p_DonorMassRate, p_IsHeRich); + double acceptanceRate = 0.0; // acceptance mass rate - default = 0.0 double fractionAccreted = 0.0; // accretion fraction - default = 0.0 @@ -191,14 +191,14 @@ double WhiteDwarfs::CalculateRadiusOnPhase_Static(const double p_Mass) { // sanity check for mass - just return 0.0 if mass <= 0 if (utils::Compare(p_Mass, 0.0) <= 0) return 0.0; - + if (utils::Compare(p_Mass, MCH) >= 0) return NEUTRON_STAR_RADIUS; // only expected to come up if asking for the core or remnant radius of a giant star - - const double MCH_Mass_one_third = std::cbrt(MCH / p_Mass); + + const double MCH_Mass_one_third = std::cbrt(MCH / p_Mass); const double MCH_Mass_two_thirds = MCH_Mass_one_third * MCH_Mass_one_third; - + double MP_Mass = WD_MP / p_Mass; - double MP_Mass_two_thirds = MP_Mass / std::cbrt(WD_MP / p_Mass); + double MP_Mass_two_thirds = MP_Mass / std::cbrt(WD_MP / p_Mass); double firstFactor = std::sqrt((MCH_Mass_two_thirds - 1.0 / MCH_Mass_two_thirds)); double preSecondFactor = 1.0 + 3.5 * MP_Mass_two_thirds + MP_Mass; @@ -208,7 +208,7 @@ double WhiteDwarfs::CalculateRadiusOnPhase_Static(const double p_Mass) { } -/* +/* * Determine the WD accretion regime based on the MT rate and whether the donor is He rich. Also, * initialize He-Shell detonation or Off-center ignition when necessary, by changing the value * of m_HeShellDetonation or m_OffCenterIgnition (respectively). @@ -217,7 +217,7 @@ double WhiteDwarfs::CalculateRadiusOnPhase_Static(const double p_Mass) { * * Note that we have merged the different flashes regimes from Piersanti+ 2014 into a single regime. * - * ACCRETION_REGIME DetermineAccretionRegime(const double p_DonorMassLossRate, const bool p_HeRich) + * ACCRETION_REGIME DetermineAccretionRegime(const double p_DonorMassLossRate, const bool p_HeRich) * * @param [IN] p_DonorMassLossRate Donor mass loss rate, in units of Msol / Myr * @param [IN] p_HeRich Whether the accreted material is helium-rich or not @@ -236,24 +236,24 @@ ACCRETION_REGIME WhiteDwarfs::DetermineAccretionRegime(const double p_DonorMassL if (utils::Compare(logMdot, logMassTransferStable) < 0) { if (utils::Compare(logMdot, logMassTransferDetonation) > 0) { regime = ACCRETION_REGIME::HELIUM_FLASHES; - } + } else { regime = ACCRETION_REGIME::HELIUM_ACCUMULATION; if ((utils::Compare(m_Mass, MASS_DOUBLE_DETONATION_CO) >= 0) && (utils::Compare(m_HeShell, WD_HE_SHELL_MCRIT_DETONATION) >= 0)) { m_HeShellDetonation = true; } } - } + } else if (utils::Compare(logMdot, logMassTransferCrit) > 0) { regime = ACCRETION_REGIME::HELIUM_OPT_THICK_WINDS; - } + } else { regime = ACCRETION_REGIME::HELIUM_STABLE_BURNING; if ((utils::Compare(logMdot, COWD_LOG_MDOT_MIN_OFF_CENTER_IGNITION) > 0) && (utils::Compare(m_Mass, COWD_MASS_MIN_OFF_CENTER_IGNITION) > 0)) { m_OffCenterIgnition = true; } } - } + } else { // The following coefficients in logMassTransfer limits come from quadratic fits to Nomoto+ 2007 results (table 5) in Mass vs log10 Mdot space, to cover the low-mass end. double m_Mass_2 = m_Mass * m_Mass; @@ -262,10 +262,10 @@ ACCRETION_REGIME WhiteDwarfs::DetermineAccretionRegime(const double p_DonorMassL if (utils::Compare(logMdot, logMassTransferStable) < 0) { regime = ACCRETION_REGIME::HYDROGEN_FLASHES; - } + } else if (utils::Compare(logMdot, logMassTransferCrit) > 0) { regime = ACCRETION_REGIME::HYDROGEN_OPT_THICK_WINDS; - } + } else { regime = ACCRETION_REGIME::HYDROGEN_STABLE_BURNING; } @@ -275,7 +275,7 @@ ACCRETION_REGIME WhiteDwarfs::DetermineAccretionRegime(const double p_DonorMassL } -/* +/* * Increase shell size after mass transfer episode. Hydrogen and helium shells are kept separately. * Only applies the full mass increase from accretion to one of the shells. Does not account for, e.g, * the H layer burning and building up the He layer, which may be desired in the future. - RTW 9/14/22 @@ -285,7 +285,7 @@ ACCRETION_REGIME WhiteDwarfs::DetermineAccretionRegime(const double p_DonorMassL * @param [IN] p_AccretedMass Mass accreted */ void WhiteDwarfs::ResolveShellChange(const double p_AccretedMass) { - + switch (m_AccretionRegime) { case ACCRETION_REGIME::HELIUM_ACCUMULATION: @@ -305,7 +305,7 @@ void WhiteDwarfs::ResolveShellChange(const double p_AccretedMass) { m_HShell += p_AccretedMass; break; - case ACCRETION_REGIME::NONE: // DEPRECATED June 2024 - remove end 2024 + case ACCRETION_REGIME::NONE: // DEPRECATED June 2024 - remove end 2024 case ACCRETION_REGIME::ZERO: SHOW_WARN(ERROR::UNEXPECTED_ACCRETION_REGIME, "No mass added to shell"); // show warning break; @@ -331,15 +331,15 @@ void WhiteDwarfs::ResolveShellChange(const double p_AccretedMass) { * * Following Hurley et al. 2000, Section 6.2.1 * - * An AIC of a WD results in a NS, which we are + * An AIC of a WD results in a NS, which we are * here assuming to have a low mass equal to the ECSN - * remnant NS mass, and no natal kick. + * remnant NS mass, and no natal kick. * - * STELLAR_TYPE ResolveAIC() + * STELLAR_TYPE ResolveAIC() * * @return Stellar type of remnant (STELLAR_TYPE::NEUTRON_STAR if SN, otherwise current type) */ -STELLAR_TYPE WhiteDwarfs::ResolveAIC() { +STELLAR_TYPE WhiteDwarfs::ResolveAIC() { if (!IsSupernova()) return m_StellarType; // shouldn't be here if no SN @@ -347,10 +347,10 @@ STELLAR_TYPE WhiteDwarfs::ResolveAIC() { m_SupernovaDetails.HeCoreMassAtCOFormation = m_HeCoreMass; m_SupernovaDetails.COCoreMassAtCOFormation = m_COCoreMass; m_SupernovaDetails.coreMassAtCOFormation = m_CoreMass; - SetSNHydrogenContent(); // SN to be H-poor. + SetSNHydrogenContent(); // SN to be H-poor. m_Mass = MECS_REM; // defined in constants.h - + m_SupernovaDetails.drawnKickMagnitude = 0.0; m_SupernovaDetails.kickMagnitude = 0.0; @@ -362,15 +362,15 @@ STELLAR_TYPE WhiteDwarfs::ResolveAIC() { /* - * Resolve Type 1a Supernova + * Resolve Type 1a Supernova * * A Type 1a SN results in a massless remnant. * - * STELLAR_TYPE ResolveSNIa() + * STELLAR_TYPE ResolveSNIa() * * @return Stellar type of remnant (STELLAR_TYPE::MASSLESS_REMNANT if SN, otherwise current type) */ -STELLAR_TYPE WhiteDwarfs::ResolveSNIa() { +STELLAR_TYPE WhiteDwarfs::ResolveSNIa() { if (!IsSupernova()) return m_StellarType; // shouldn't be here if no SN @@ -378,8 +378,8 @@ STELLAR_TYPE WhiteDwarfs::ResolveSNIa() { m_SupernovaDetails.HeCoreMassAtCOFormation = m_HeCoreMass; m_SupernovaDetails.COCoreMassAtCOFormation = m_COCoreMass; m_SupernovaDetails.coreMassAtCOFormation = m_CoreMass; - SetSNHydrogenContent(); // SN to be H-poor. - + SetSNHydrogenContent(); // SN to be H-poor. + m_Mass = 0.0; m_Radius = 0.0; m_Luminosity = 0.0; @@ -396,15 +396,15 @@ STELLAR_TYPE WhiteDwarfs::ResolveSNIa() { /* - * Resolve Double Detonation + * Resolve Double Detonation * * A double detonation results in a massless remnant. * - * STELLAR_TYPE ResolveHeSD() + * STELLAR_TYPE ResolveHeSD() * * @return Stellar type of remnant (STELLAR_TYPE::MASSLESS_REMNANT if SN, otherwise current type) */ -STELLAR_TYPE WhiteDwarfs::ResolveHeSD() { +STELLAR_TYPE WhiteDwarfs::ResolveHeSD() { if (!IsSupernova()) return m_StellarType; // shouldn't be here if no SN @@ -412,7 +412,7 @@ STELLAR_TYPE WhiteDwarfs::ResolveHeSD() { m_Radius = 0.0; m_Luminosity = 0.0; m_Age = 0.0; - + m_SupernovaDetails.drawnKickMagnitude = 0.0; m_SupernovaDetails.kickMagnitude = 0.0; diff --git a/src/WhiteDwarfs.h b/src/WhiteDwarfs.h index 4868a10b6..61fef2c5c 100644 --- a/src/WhiteDwarfs.h +++ b/src/WhiteDwarfs.h @@ -22,9 +22,9 @@ class WhiteDwarfs: virtual public BaseStar, public Remnants { // member functions - static double CalculateLuminosityOnPhase_Static(const double p_Mass, - const double p_Time, - const double p_Metallicity, + static double CalculateLuminosityOnPhase_Static(const double p_Mass, + const double p_Time, + const double p_Metallicity, const double p_BaryonNumber); static double CalculateRadiusOnPhase_Static(const double p_Mass); @@ -32,7 +32,7 @@ class WhiteDwarfs: virtual public BaseStar, public Remnants { MT_CASE DetermineMassTransferTypeAsDonor() const { return MT_CASE::OTHER; } // Not A, B, C, or NONE ACCRETION_REGIME DetermineAccretionRegime(const double p_DonorThermalMassLossRate, const bool p_HeRich); // Get the current accretion regime. Can also change m_HeShellDetonation and m_OffCenterIgnition flags. - + void ResolveShellChange(const double p_AccretedMass); @@ -49,7 +49,7 @@ class WhiteDwarfs: virtual public BaseStar, public Remnants { bool m_IsSubChandrasekharTypeIa; // Flag for SubCh SN of HeWD double m_XRitter; // Assumed hydrogen-mass fraction of material being accreted by He WD, as in Ritter 1999, table 2. ACCRETION_REGIME m_AccretionRegime; - + // member functions - alphabetically double CalculateAccretionRegime(const bool p_DonorIsHeRich, const bool p_DonorIsGiant, @@ -62,14 +62,14 @@ class WhiteDwarfs: virtual public BaseStar, public Remnants { double CalculateCriticalMassRatioGeEtAl(const QCRIT_PRESCRIPTION p_qCritPrescription, const double p_massTransferEfficiencyBeta) { return CalculateCriticalMassRatioHurleyHjellmingWebbink(); } double CalculateCriticalMassRatioHurleyHjellmingWebbink() const { return HURLEY_HJELLMING_WEBBINK_QCRIT_WD; } - + double CalculateCOCoreMassOnPhase() const { return m_COCoreMass; } // NO-OP double CalculateHeCoreMassOnPhase() const { return m_HeCoreMass; } // NO-OP double CalculateHeliumAbundanceCoreOnPhase() const { return 0.0; } double CalculateHeliumAbundanceSurfaceOnPhase() const { return 0.0; } - + double CalculateHydrogenAbundanceCoreOnPhase() const { return 0.0; } double CalculateHydrogenAbundanceSurfaceOnPhase() const { return 0.0; } @@ -82,7 +82,7 @@ class WhiteDwarfs: virtual public BaseStar, public Remnants { double Calculatel0Ritter() const { return (m_Metallicity > 0.01) ? L0_RITTER_HIGH_Z : L0_RITTER_LOW_Z; } DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, - const bool p_IsHeRich); + const bool p_IsHeRich); DBL_DBL CalculateMassAcceptanceRate(const double p_DonorMassRate, const double p_AccretorMassRate, const bool p_IsHeRich) { return CalculateMassAcceptanceRate(p_DonorMassRate, p_IsHeRich); } @@ -99,11 +99,11 @@ class WhiteDwarfs: virtual public BaseStar, public Remnants { ENVELOPE DetermineEnvelopeType() const { return ENVELOPE::CONVECTIVE; } // Always CONVECTIVE - bool IsMassAboveChandrasekhar() const { return (utils::Compare(m_Mass, MCH) > 0); } // Mass exceeds Chandrasekhar limit + bool IsMassAboveChandrasekhar() const { return (utils::Compare(m_Mass, MCH) > 0); } // Mass exceeds Chandrasekhar limit - STELLAR_TYPE ResolveAIC(); - STELLAR_TYPE ResolveSNIa(); - STELLAR_TYPE ResolveHeSD(); + STELLAR_TYPE ResolveAIC(); + STELLAR_TYPE ResolveSNIa(); + STELLAR_TYPE ResolveHeSD(); STELLAR_TYPE ResolveSupernova() { return EvolveToNextPhase(); } // SNe for WDs are handled internally to each WD type ACCRETION_REGIME WhiteDwarfAccretionRegime() const { return m_AccretionRegime; } diff --git a/src/changelog.h b/src/changelog.h index f2a2285ff..b16ea4b1a 100644 --- a/src/changelog.h +++ b/src/changelog.h @@ -2,11 +2,11 @@ # define __changelog_h__ // ===================================================================== -// +// // COMPAS Changelog -// +// // ===================================================================== -// +// // 02.00.00 JR - Sep 17, 2019 - Initial commit of new version // 02.00.01 JR - Sep 20, 2019 - Fix compiler warnings. Powwow fixes // 02.00.02 JR - Sep 21, 2019 - Make code clang-compliant @@ -82,7 +82,7 @@ // changed CalculateSNKickVelocity() in BaseStar.cpp to set m_SupernovaDetails.kickVelocity correctly after adjusting for fallback // 02.03.04 FSB - Dec 04, 2019 - Defect repairs: // fixed bug in Fryer+2012 CalculateGravitationalRemnantMassadded() function to compare baryon mass of star remnant with -// baryon mass of MaximumNeutronStarMass instead of just MaximumNeutronStarMass. +// baryon mass of MaximumNeutronStarMass instead of just MaximumNeutronStarMass. // added m_BaryonicMassOfMaximumNeutronStarMass to BaseStar.h and BaseStar.cpp // 02.03.05 JR - Dec 05, 2019 - Defect repairs: // fixed EvolveSingleStars() in main.cpp to print correct initial mass @@ -109,7 +109,7 @@ // fixed BaseBinaryStar::InitialiseMassTransfer() - star1 was being updated instead of star2 for CH + CH stars when CHE enabled // 02.04.01 JR - Dec 23, 2019 - Defect repairs: // Removed SN_EVENT::SN - all occurrences of SN_EVENT::SN replaced by SN_EVENT::CCSN. -// The current SN event ("Is"), and past SN event ("Experienced") are now bit maps (implemented as Enum Classes). Each can have any of the values: CCSN, ECSN, PISN, PPSIN, USSN, RUNAWAY, RECYCLED_NS, and RLOF_ONTO_NS. See definition of SN_EVENT Enum Class in constants.h for implementation and explanation. +// The current SN event ("Is"), and past SN event ("Experienced") are now bit maps (implemented as Enum Classes). Each can have any of the values: CCSN, ECSN, PISN, PPSIN, USSN, RUNAWAY, RECYCLED_NS, and RLOF_ONTO_NS. See definition of SN_EVENT Enum Class in constants.h for implementation and explanation. // Updated variables selectable for printing: // Added ANY_STAR_PROPERTY::SN_TYPE (STAR_PROPERTY, SUPERNOVA_PROPERTY, COMPANION_PROPERTY (should always be SN_EVENT::NONE for companion star)) // Added ANY_STAR_PROPERTY::EXPERIENCED_SN_TYPE (STAR_PROPERTY, SUPERNOVA_PROPERTY, COMPANION_PROPERTY) @@ -118,13 +118,13 @@ // Updated documentation // Changed default record specifications for logfiles BSE_DOUBLE_COMPACT_OBJECTS_REC and BSE_SUPERNOVAE_REC // Removed the individual SN_EVENT columns for both "Is" and "Experienced" conditions (e.g. CCSN, ECSN etc) -// "Is*" and "Experienced*" columns replaced with SN_TYPE & Experienced_SN_TYPE columns that record the SN event type (e.g. CCSN, ECSN, PPSN, PPSIN, USSN). +// "Is*" and "Experienced*" columns replaced with SN_TYPE & Experienced_SN_TYPE columns that record the SN event type (e.g. CCSN, ECSN, PPSN, PPSIN, USSN). // RUNAWAY, RECYCLED_NS, and RLOF_ONTO_NS are still reported in separate, individual columns. // Added workaround for non-existent CHeB blue loop. See description in CHeB::CalculateTimescales() // Removed binary star "survived" flag - it is always the NOT of the "unbound" flag -// Changed initialisation function for HeGB stars (HeGB::Initialise() in HeGB.h) to NOT recalculate m_Age if evolving from HeHG -> HeGB +// Changed initialisation function for HeGB stars (HeGB::Initialise() in HeGB.h) to NOT recalculate m_Age if evolving from HeHG -> HeGB // Removed initialisation of m_Age (to 0.0) from COWD::Initialise() in COWD.h -// Changed behaviour: +// Changed behaviour: // Changed binary star "disbound" flag to "unbound" flag. Changed all occurrences of "disbound" to "unbound". Changed "unbound" header flag to "Unbound" // 02.04.02 JR - Jan 06, 2020 - Defect repairs: // Added IsPISN() & IsPPISN() to IsSNEvent() @@ -139,8 +139,8 @@ // Changed NS functions to return Radius in Rsol instead of km: // Added function NS:CalculateRadiusOnPhaseInKM_Static() (returns radius in km) // Changed NS:CalculateRadiusOnPhase_Static() to return Rsol -// Added CalculateRadiusOnPhase() for NS (ns.h) - returns Rsol -// Changed behaviour: +// Added CalculateRadiusOnPhase() for NS (ns.h) - returns Rsol +// Changed behaviour: // Print detailed output record whenever stellartype changes (after star 2 if both change) // (Unchanged) LK - Jan 10, 2020 - Defect repairs: // Added missing includes to Star.cpp, utils.h and utils.cpp (required for some compiler versions) @@ -150,7 +150,7 @@ // Added range check for Kick_Mean_Anomaly_1 and Kick_Mean_Anomaly_2 ([0.0, 2pi)) in BSE grid file // Cleaned up SSE & BSE grid file code // Added m_LBVphaseFlag variable to BaseStar class; also added ANY_STAR_PROPERTY::LBV_PHASE_FLAG print variable. -// Deleted functionality: +// Deleted functionality: // Removed IndividualSystem option and related options - this can now be achieved via a grid file // Update pythonSubmitDefault.py to remove individual system related parameters // Changed behaviour: @@ -158,12 +158,12 @@ // Defect repairs: // Removed erroneous check for CH stars in BaseBinaryStar::EvaluateBinary() // Fix for issue #46 (lower the minimum value of McSN in star.cpp from Mch to 1.38) -// Changed 'MCH' to 'MECS' in +// Changed 'MCH' to 'MECS' in // BaseStar::CalculateMaximumCoreMassSN() // GiantBranch::CalculateCoreMassAtSupernova_Static // 02.05.01 FSB - Jan 27, 2020 -Enhancement: // Cleaned up default printed headers and parameters constants.h: -// - removed double parameters that were printed in multiple output files +// - removed double parameters that were printed in multiple output files // - changed some of the header names to more clear / consistent names // - added some comments in the default printing below for headers that we might want to remove in the near future // 02.05.02 JR - Feb 21, 2020 - Defect repairs: @@ -179,7 +179,7 @@ // 02.05.05 JR - Feb 27, 2020 - Defect repair: // - fixed age resetting to 0.0 for MS_GT_07 stars after CH star spins down and switches to MS_GT_07 // - ensure m_Age = 0.0 in constructor for BaseStar -// - remove m_Age = 0.0 from Initialise() in MS_gt.07.h +// - remove m_Age = 0.0 from Initialise() in MS_gt.07.h // 02.05.06 JR - Mar 02, 2020 - Defect repair: // - fixed m_MassesEquilibrated and associated functions - was erroneously typed as DOUBLE - now BOOL // Added/changed functionality: @@ -237,9 +237,9 @@ // 02.08.01 JR - Mar 18, 2020 - Defect repairs: // - restored initialisation of AIS options in Options.cpp (AIS now defaults off instead of on) // - fixed retrieval of values for: -// - ANY_STAR_PROPERTY::LAMBDA_KRUCKOW_BOTTOM, -// - ANY_STAR_PROPERTY::LAMBDA_KRUCKOW_MIDDLE, and -// - ANY_STAR_PROPERTY::LAMBDA_KRUCKOW_TOP +// - ANY_STAR_PROPERTY::LAMBDA_KRUCKOW_BOTTOM, +// - ANY_STAR_PROPERTY::LAMBDA_KRUCKOW_MIDDLE, and +// - ANY_STAR_PROPERTY::LAMBDA_KRUCKOW_TOP // in BaseStar::StellarPropertyValue(). Were all previously retrieving same value as ANY_STAR_PROPERTY::LAMBDA_KRUCKOW // - fixed some comments in BAseBinaryStar.cpp (lines 2222 and 2468, "de Mink" -> "HURLEY") // - fixed description (in comments) of BinaryConstituentStar::SetPostCEEValues() (erroneously had "pre" instead of "post" - in comments only, not code) @@ -260,7 +260,7 @@ // - OPTIONS->UseFixedUK() returns TRUE when user supplies -ve value via --fix-dimensionless-kick-velocity. Now return TRUE iff the user supplies a value >=0 via --fix-dimensionless-kick-velocity // 02.09.02 DC - Mar 30, 2020 - Defect repairs: // - Pulsar code fixed by correcting unit of NS radius in NS.cpp (added KM_TO_M constant in constants.h as a part of this), -// correcting initialisation of pulsar birth parameters from GiantBranch.cpp to NS.cpp, adding an extra condition for isolated evolution when the companion loses mass but the NS does not accrete +// correcting initialisation of pulsar birth parameters from GiantBranch.cpp to NS.cpp, adding an extra condition for isolated evolution when the companion loses mass but the NS does not accrete // - option MACLEOD was printing wrongly as MACLEOD+2014 for user options, hence corrected it to MACLEOD in Options.cpp // 02.09.03 JR - Apr 01, 2020 - Defect repairs: // - reinstated assignment of "prev" values in BaseBinaryStar::EvaluateBinary() (where call to ResolveTides() was removed). Fixes low DNS count introduced in v02.08.00 caused by removal of ResolveTides() function (and call) @@ -278,8 +278,8 @@ // - restored property names in COMPASUnorderedMap STAR_PROPERTY_LABEL in constants.h (issue #218) (was causing logfile definitions files to be parsed incorrectly) // 02.09.10 IM - Apr 12, 2020 - Minor enhancement: added Mueller & Mandel 2020 remnant mass and kick prescription, MULLERMANDEL // Defect repair: corrected spelling of output help string for MULLER2016 and MULLER2016MAXWELLIAN -// 02.10.01 IM - Apr 14, 2020 - Minor enhancement: -// - moved code so that SSE will also sample SN kicks, following same code branch as BSE +// 02.10.01 IM - Apr 14, 2020 - Minor enhancement: +// - moved code so that SSE will also sample SN kicks, following same code branch as BSE // 02.10.02 SS - Apr 16, 2020 - Bug Fix for issue #105 ; core and envelope masses for HeHG and TPAGB stars // 02.10.03 JR - Apr 17, 2020 - Defect repair: // - added LBV and WR winds to SSE (issue #223) @@ -294,12 +294,12 @@ // Defect repairs: // - fixed typo in Options.h: changed '#include "rand.h" to '#include "Rand.h" // - fixed printing of actual random seed in Run_Details file (moved to Log.cpp from Options.cpp: initial random seed is set after options are set) -// 02.11.01 IM - May 20, 2020 - Defect repair: +// 02.11.01 IM - May 20, 2020 - Defect repair: // - changed max NS mass for MULLERMANDEL prescription to a self-consistent value // 02.11.02 IM - Jun 15, 2020 - Defect repair: // - added constants CBUR1 and CBUR2 to avoid hardcoded limits for He core masses leading to partially degenerate CO cores // 02.11.03 RTW - Jun 20, 2020 - Enhancement: -// - Issue #264 - fixed mass transfer printing bug +// - Issue #264 - fixed mass transfer printing bug // 02.11.04 JR - Jun 25, 2020 - Defect repairs: // - Issue #260 - Corrected recalculation of ZAMS values after eqilibration and cicularisation at birth when using grid files // - Issue #266 - Corrected calculation in BaseBinaryStar::SampleInitialMassDistribution() for KROUPA IMF distribution @@ -411,7 +411,7 @@ // 02.14.00 IM - Aug 30, 2020 - Enhancement: // - Recreate RLOF printing (resolve issue #212) // 02.14.01 ML - Sep 05, 2020 - Code cleanup: -// - Issue #354 - Combine HYDROGEN_RICH and HYDROGEN_POOR supernova output variables into a single boolean variable IS_HYDROGEN_POOR +// - Issue #354 - Combine HYDROGEN_RICH and HYDROGEN_POOR supernova output variables into a single boolean variable IS_HYDROGEN_POOR // 02.15.00 JR - Sep 09, 2020 - Enhancements and related code cleanup: // - implemented "DETAILED_OUTPUT" folder inside "COMPAS_Output" container for SSE output // - SSE Parameters files moved to "DETAILED_OUTPUT" folder (they are analogous to BSE_Detailed_Output files) @@ -477,12 +477,12 @@ // - Continue evolving DCOs until merger if EvolvePulsars is on (Issue #167) // - Removed m_SecondaryTooSmallForDCO (Issue #337) // 02.15.20 RTW - Nov 03, 2020 - Code cleanup -// - Removed unnecessary supernova phi rotation - it was added to agree with Simon's original definition, and to allow for seeds to reproduce the same SN final orbit. +// - Removed unnecessary supernova phi rotation - it was added to agree with Simon's original definition, and to allow for seeds to reproduce the same SN final orbit. // - Removing it means seeds won't reproduce the same systems before and after, but populations are unaffected. // 02.16.00 JR - Nov 03, 2020 - Enhancements // - Implemented new grid file functionality (see discussion in issue #412); updated docs - see docs (doc v2.3 has new documentation) // -// - Added all options to printing functionality: all options can now be selected for printing, +// - Added all options to printing functionality: all options can now be selected for printing, // either in the default log record specifications, or at runtime via the logfile-definitions option // // - 'CHE_Option' header string changed to 'CHE_Mode'. A few typos fixed in header strings. @@ -574,7 +574,7 @@ // (moved check and calculation from options.cpp to BaseBinaryStar.cpp) // 02.17.00 JR - Nov 10, 2020 - Enhancement, defect repairs, code cleanup // - Added SSE System Parameters file -// - records initial parameters and result (final stellar type) +// - records initial parameters and result (final stellar type) // - useful when detailed output is not required // - Fix for Issue #439 // - Fixed typo in LogfileSwitchLog() in Options.h - only affected situation where user specified switchlog filename (overriding default filename) @@ -596,7 +596,7 @@ // - Removed AIS code // - Removed variable 'alpha' from BinaryCEDetails struct - use OPTIONS->CommonEnvelopeAlpha() // - Removed BINARY_PROPERTY::COMMON_ENVELOPE_ALPHA - use PROGRAM_OPTION::COMMON_ENVELOPE_ALPHA -// - Issue #443: removed eccentricity distribution options FIXED, IMPORTANCE & THERMALISE (THERMALISE = THERMAL, which remains) +// - Issue #443: removed eccentricity distribution options FIXED, IMPORTANCE & THERMALISE (THERMALISE = THERMAL, which remains) // 02.17.04 JR - Nov 14, 2020 - Defect repairs // - Added CalculateRadiusOnPhase() and CalculateLuminosityOnPhase() to class BH (increases DNS yield) // - Added metallicity to sampling conditions in BaseBinaryStar constructor (should have been done when LOGUNIFORM metallicity distribution added) @@ -670,8 +670,8 @@ // 02.18.02 JR - Jan 12, 2021 - Defect repair: // - Changed "hdf5_chunk_size = 5000" to "hdf5_chunk_size = 100000" in default pythonSubmit (inadvertently left at 5000 after some tests...) // 02.18.03 SS - Jan 19, 2021 - Enhancement: -// - Added check for neutron star mass against maximum neutron star mass. -// If a neutron star exceeds this mass it should collapse to a black hole. +// - Added check for neutron star mass against maximum neutron star mass. +// If a neutron star exceeds this mass it should collapse to a black hole. // This can be relevant for neutron stars accreting, e.g. during common envelope evolution // 02.18.04 IM - Jan 28, 2021 - Enhancement: // - NS to BH collapse preserves mass (see discussion in #514) @@ -732,7 +732,7 @@ // 02.19.01 JR - Apr 30, 2021 - Enhancements and Defect Repairs: // - Enhancements: // - changed chunk size for HDF5 files to HDF5_MINIMUM_CHUNK_SIZE for Run_Details group in COMPAS_Output and for detailed output files. -// - Run_Details is a small file, and detailed output files are generally a few thousand records rather than hundreds of thousands, +// - Run_Details is a small file, and detailed output files are generally a few thousand records rather than hundreds of thousands, // so a smaller chunk size wastes less space and doesn't impact performance significantly // // - Defect Repairs: @@ -797,13 +797,13 @@ // - Fixed a few typos in header strings // - Changed true_anomaly to mean_anomaly in SSE SN output // 02.25.00 JR - Oct 30, 2021 - Enhancements and minor fixes: -// - Added ability for users to annotate log files via new program options '--notes-hdrs' and '--notes'. See docs for details. +// - Added ability for users to annotate log files via new program options '--notes-hdrs' and '--notes'. See docs for details. // - Added a shorthand notation for vector program options (e.g. annotations, log-classes, debug-classes). See docs for details. // - Added '--notes-hdrs' and '--notes' to pythonSubmit.py (default = None for both) // - Added HDF5 support to Log::GetLogStandardRecord() (return value) and Log::LogStandardRecord() (input parameter). This only matters // to SSE Supernovae file - for delayed writes. The original implementation may have resulted in minor discrepanicies in SSE Supernovae // log records, (because of when the values were sampled (i.e. mid-timestep, or end of timestep)), which would only have been evident if -// HDF5 files were compared to e.g. CSV files for the same binary - CSV, TSV, and TXT files had values sampled mid-timestep, HDF5 files +// HDF5 files were compared to e.g. CSV files for the same binary - CSV, TSV, and TXT files had values sampled mid-timestep, HDF5 files // at end of timestep). // - Added Log::Write() and Log::Put() for HDF5 files (better implementation - worked around in original implementation) // - Added additional checks for bad string -> number conversions throughout (for stoi(), stod(), etc.) @@ -860,7 +860,7 @@ // - Changed all occurrences of PPOW(base, 1.0/3.0) with std::cbrt, as the former could not handle negative bases // - Changed all occurrences of sqrt with std::sqrt for consistency with the above change // 02.26.03 IM - Jan 10, 2022 - Defect repair, code cleanup: -// - Cleaned up treatment of HG donors having CONVECTIVE envelopes in LEGACY; fixed an issues with CEs from HG donors introduced in 02.25.01 +// - Cleaned up treatment of HG donors having CONVECTIVE envelopes in LEGACY; fixed an issues with CEs from HG donors introduced in 02.25.01 // 02.27.00 ML - Jan 12, 2022 - Enhancements: // - Add enhanced Nanjing lambda option that continuously extrapolates beyond radial range // - Add Nanjing lambda option to switch between calculation using rejuvenated mass and true birth mass @@ -883,7 +883,7 @@ // 02.27.06 SS - Apr 5, 2022 - Defect repair: // - Fixed StarTrack PPISN prescription, previously it was doing the same thing as the COMPAS PPISN prescription. // 02.27.07 RTW - Apr 5, 2022 - Defect repair: -// - Fix for issue # 773 - ONeWD not forming due to incorrect mass comparison in TPAGB. +// - Fix for issue # 773 - ONeWD not forming due to incorrect mass comparison in TPAGB. // 02.27.08 RTW - Apr 12, 2022 - Defect repair: // - Fix for issue # 783 - Some mergers involving a massive star were not logged properly in BSE_RLOF, whenever a jump in radius due to changing stellar type within ResolveMassChanges was much greater than the separation. // 02.27.09 VK - Apr 25, 2022 - Minor Enhancement: @@ -903,7 +903,7 @@ // - Fixed STAR_PROPERTY_LABEL entries in contsants.h for INITIAL_STELLAR_TYPE and INITIAL_STELLAR_TYPE_NAME - both missing the prefix "INITIAL_". // Only caused a problem if a user wanted to add either of those to the logfile-definitions file - but since they are in the system parameters files (SSE and BSE) // by default encountering the problem would probably be unlikely. -// - Fixed error identifier in Log::UpdateAllLogfileRecordSpecs() - was (incorrectly) ERROR::UNKNOWN_BINARY_PROPERTY, now (correctly) ERROR::UNKNOWN_STELLAR_PROPERTY +// - Fixed error identifier in Log::UpdateAllLogfileRecordSpecs() - was (incorrectly) ERROR::UNKNOWN_BINARY_PROPERTY, now (correctly) ERROR::UNKNOWN_STELLAR_PROPERTY // 02.31.03 RTW - May 20, 2022 - Defect repair: // - Fixed MS+MS unstable MT not getting flagged as a CEE // 02.31.04 RTW - June 10, 2022 - Enhancements @@ -971,13 +971,13 @@ // 02.35.00 RTW - Dec 8, 2022 - Enhancement: // - Added critical mass ratios from Ge+ 2020 for determining if MT is unstable // 02.35.01 RTW - Feb 12, 2022 - Enhancement: -// - Added post-SN orbital inclination vector to the output-able BINARY_PROPERTIES (not included in output, by default). +// - Added post-SN orbital inclination vector to the output-able BINARY_PROPERTIES (not included in output, by default). // 02.35.02 JR - Feb 19, 2023 - Minor change and defect repair: // - Changed units of ROCHE_LOBE_RADIUS_1 and ROCHE_LOBE_RADIUS_2 from orbital separation to RSOL // - Changed header string for ROCHE_LOBE_RADIUS_1 from "RocheLobe(1)|a" to "RocheLobe(1)" - ditto for ROCHE_LOBE_RADIUS_2 // - removed STAR_TO_ROCHE_LOBE_RADIUS_RATIO_1 ("Radius(1)|RL")and STAR_TO_ROCHE_LOBE_RADIUS_RATIO_2 ("Radius(2)|RL") from // the default output for BSE_DETAILED_OUTPUT_REC (can be calculated from other values in the default output) -// - changed plot_detailed_evolution.py to accommodate the removal of STAR_TO_ROCHE_LOBE_RADIUS_RATIO_1 and +// - changed plot_detailed_evolution.py to accommodate the removal of STAR_TO_ROCHE_LOBE_RADIUS_RATIO_1 and // STAR_TO_ROCHE_LOBE_RADIUS_RATIO_2 from the default output // - changed online documentation to reflect: // (a) removal of STAR_TO_ROCHE_LOBE_RADIUS_RATIO_1 and STAR_TO_ROCHE_LOBE_RADIUS_RATIO_2 from the default output @@ -995,11 +995,11 @@ // - Updated documentation for YAML files. // - Modified YAML template to include notice regarding commented lines in default YAML file. // 02.37.00 NR,RTW - Mar 26, 2023 - Enhancement: -// - Added functionality for WDs to accrete in different regimes. +// - Added functionality for WDs to accrete in different regimes. // - This applies to each WD subtype individually, though there is some overlap between COWDs and ONeWDs. // - Also involves tracking the WD shell mass, to account for shell burning that later increases the WD mass. -// - Includes possible instability, and merger if the donor is a giant, as well as new SN types, -// - AIC (accretion induced collapse), SNIA (Type Ia), and HeSD (Helium shell detonation). +// - Includes possible instability, and merger if the donor is a giant, as well as new SN types, +// - AIC (accretion induced collapse), SNIA (Type Ia), and HeSD (Helium shell detonation). // - Tangential but related changes: // - Cleaned up the call to EddingtonCriticalRate, puttting it in BaseStar along with the optional prefactor. // - Moved NS radius and luminosity calls into NS.h from elsewhere in the code. @@ -1025,11 +1025,11 @@ // 02.38.05 YS - May 10, 2023 - Updates and changes to NS.cpp: // - Added NS::ChooseTimeStep(). Detailed time step description and reasoning can be found in NS.cpp // - Added output options (not default): PULSAR_BIRTH_PERIOD and PULSAR_BIRTH_SPIN_DOWN_RATE, which output the birth spin period and period derivative of a pulsar -// - Updated codes on pulsar evolution, solving the problem of pulsars not evolving properly. This is written in cgs. -// - Added NS::SpinDownIsolatedPulsar(), describes single pulsar spinning down with magnetic braking. +// - Updated codes on pulsar evolution, solving the problem of pulsars not evolving properly. This is written in cgs. +// - Added NS::SpinDownIsolatedPulsar(), describes single pulsar spinning down with magnetic braking. // This is later used in NS::UpdateMagneticFieldAndSpin() -// - m_PulsarDetails.spinDownRate was described as Pdot (s s^-1), when it is in fact f-dot(rad s^-2). This is now corrected. -// - In BSE_Pulsar_Evolution file, the pulsar parameters at birth were not recorded. +// - m_PulsarDetails.spinDownRate was described as Pdot (s s^-1), when it is in fact f-dot(rad s^-2). This is now corrected. +// - In BSE_Pulsar_Evolution file, the pulsar parameters at birth were not recorded. // Pulsar was also evolved an additional time step here with unspecified size. // Fix to this problem is done by setting the PULSAR_RECORD_TYPE: // (a) if record_type = 1 (DEFAULT), these are the initial values of the pulsar set at birth @@ -1040,7 +1040,7 @@ // - Fixed "hides overloaded virtual function" warnings. // - Added "-Woverloaded-virtual" to compiler flags to enable warnings for g++ on linux systems. // 02.38.07 JR - Jun 04, 2023 - Defect repair: -// - Fix for issue #958 - evolving unbound systems that contain two compact objects. Also added BINARY_PROPERTY::UNBOUND +// - Fix for issue #958 - evolving unbound systems that contain two compact objects. Also added BINARY_PROPERTY::UNBOUND // to BSE Detailed Output file default record. // - Changed makefile to be POSIX compliant for .o suffix rule. No need to change docker Makefile - it is already POSIX compliant. // - since GNU Make 4.3 a warning is issued for suffix rules that include prerequisites - in our case the .o rule on line 125: @@ -1053,7 +1053,7 @@ // - Record and expose m_EvolutionStatus for both BaseStar and BaseBinaryStar as a variable available for selection // for printing. m_EvolutionStatus records the final evolution status - the reason evolution was stopped. This was // already printed to the console for each star or binary, and is now available to be recorded in the log files. -// - Add 'Evolution_Status' column to both SSE and BSE default system parameters records, and record m_EvolutionStatus there. +// - Add 'Evolution_Status' column to both SSE and BSE default system parameters records, and record m_EvolutionStatus there. // - Fixed a few typos, a little code cleanup. // 02.39.01 LC - Sep 01, 2023 - Defect repair: // - Fix for issue #945 - made HeSD SN types a sub-class of SNIA types. @@ -1077,11 +1077,11 @@ // 02.41.03 JR - Dec 28, 2023 - Defect repair: // - Fix for issue #1034 // - This fix changes the functions -// . BaseBinaryStar::CalculateAngularMomentum(), +// . BaseBinaryStar::CalculateAngularMomentum(), // . BaseBinaryStar::CalculateTotalEnergy(), and // . BaseStar::AngularMomentum() // to use moment of inertia rather than gyration radius. -// This fix changes CalculateMomentOfInertia to properly implement Hurley et al., 2000 eq 109 +// This fix changes CalculateMomentOfInertia to properly implement Hurley et al., 2000 eq 109 // This fix also removes CalculateGyrationRadius() from all classes, and changes code that called CalculateGyrationRadius(). // These changes have wider implications than just issue #1034 and may change DCO yields slightly. // - Removed some unused functions. @@ -1111,12 +1111,12 @@ // - if Mass0ToMatchDesiredCoreMass() returns -ve value (i.e. no root found), an arbitrary value is used for core mass (see code for value) // 02.42.02 RTW - Mar 21, 2024 - Minor edits: // - Defect repair : Added explicit definition `bool isUnstable = false` to avoid confusion in BaseBinaryStar.cpp -// - Defect repair : Fixed erroneous core mass values in ResolveSNIa in WhiteDwarfs.cpp. Was previously 0 for all core masses. +// - Defect repair : Fixed erroneous core mass values in ResolveSNIa in WhiteDwarfs.cpp. Was previously 0 for all core masses. // - Enhancement: Added output parameter TZAMS for internal variable m_TZAMS // 02.43.00 RTW - Mar 29, 2024 - Enhancement: // - Added Hirai pulsar rocket kick, and related options // 02.43.01 SS - Apr 8, 2024 - Defect repair -// - Fix CalculateMassLossRateBjorklundEddingtonFactor to use LSOLW (in SI) rather than LSOL (in cgs) +// - Fix CalculateMassLossRateBjorklundEddingtonFactor to use LSOLW (in SI) rather than LSOL (in cgs) // 02.43.02 JR - Apr 15, 2024 - Defect repair // - Fix for issue #1074 - SSE Supernova records duplicated // 02.43.03 IM - Apr 15, 2024 - Enhancement @@ -1200,7 +1200,7 @@ // - Added "Quick Links" to documentation // - Updated "What's New" // 02.49.00 RTW - May 24, 2024 - Enhancement: -// - Updated the Ge et al. 2020 table for critical mass ratios, to include new values calculated for fully non-conservative MT. +// - Updated the Ge et al. 2020 table for critical mass ratios, to include new values calculated for fully non-conservative MT. // - Modified the critical mass ratio calculator to interpolate between the fully conservative and fully non-conservative values, // - albeit with fixed AM loss (isotropic re-emission). // 02.49.01 IM - May 25, 2024 - Defect repair: @@ -1219,7 +1219,7 @@ // 02.49.05 IM - June 22, 2024 - Enhancement: // - Replaced fixed-step, first-order integrator for orbital change after mass transfer with an adaptive-step, higher-order ODE integrator for improved speed and accuracy // 02.49.06 JDM - July 01, 2024 - Defect repairs: -// - Changed the VERY_MASSIVE_MINIMUM_MASS threshold to use m_Mass (current), rather than m_ZAMS. +// - Changed the VERY_MASSIVE_MINIMUM_MASS threshold to use m_Mass (current), rather than m_ZAMS. // - Lowered VINK_MASS_LOSS_MINIMUM_TEMP from 12.5 to 8kK, to eliminate the short interval during CHeB when WR winds were active between the RSG and OB temperature ranges, at low Z. // 02.50.00 IM - July 03, 2024 - Enhancement: // - Change TPAGB::IsSupernova() so that stars with base of AGB core masses below MCBUR1 remain on the TPAGB until they make WDs; remove ResolveTypeIIaSN() functionality. @@ -1275,7 +1275,7 @@ // - Fix for issue #1202: Missing system in system parameters file when using range // - Remove extraneous references to "kick_direction" in LogTypedefs.h (added in error in v03.00.00) // 03.01.04 SS - Aug 28, 2024 - Enhancement: -// - Add Hendriks+23 pulsational pair instability prescription +// - Add Hendriks+23 pulsational pair instability prescription // 03.01.05 JDM - Aug 30, 2024 - Defect repair, minor cleanup: // - Related to issue #502: added HG to allowed RSG stellar type check, preventing GB winds from being applied during HG. // - Changed all "FLEXIBLE2023" naming to "MERRITT2024" @@ -1286,7 +1286,7 @@ // (Issue #1170) // - added deprecation notice for '--mass-loss-prescription NONE' (should use ZERO) - missed in v03.00.00 // 03.01.07 JDM - Sep 05, 2024 - Defect repair: -// - Set wind mass loss for remnants to zero. +// - Set wind mass loss for remnants to zero. // 03.01.08 JR - Sep 06, 2024 - Defect repair, typo fixes: // - Fix for issue #1219: Option --black-hole-kicks-mode (aka --black-hole-kicks) ignored // - Fixed some stray typos @@ -1307,13 +1307,13 @@ // Hirai & Mandel above 8 solar masses to classical "full envelope" removal for stars below 2 solar masses // - Correct code comments, update documentation where it fell behind // 03.02.01 LvS - Sep 23, 2024 - Defect repair: -// - Fixed buggy behaviour of wolf-rayet-multiplier +// - Fixed buggy behaviour of wolf-rayet-multiplier // 03.03.00 SS - Sep 24, 2024 - Enhancement: // - Improvements to modelling of chemically homogeneous evolution // - New options: --enable-rotationally-enhanced-mass-loss, // --enhance-CHE-lifetimes-luminosities, --scale-CHE-mass-loss-with-surface-helium-abundance, // --scale-terminal-wind-velocity-with-metallicity-power -// - To facilitate --scale-CHE-mass-loss-with-surface-helium-abundance, added basic tracking of +// - To facilitate --scale-CHE-mass-loss-with-surface-helium-abundance, added basic tracking of // surface and core hydrogen and helium abundances. // See "What's New" and option documentation for details // 03.03.01 IM - Sep 25, 2024 - Bug Fix: @@ -1365,10 +1365,10 @@ // 03.07.03 VK - Nov 01, 2024 - Defect repairs: // - Fixed logic in KAPIL2024 dynamical tides to consider IW and GW dissipation as long as either the mass OR the radial extent of the // convective envelope is above threshold -// - Added code to ensure that timesteps in BaseBinaryStar::ChooseTimestep() are based on absolute values of tidal timescales, +// - Added code to ensure that timesteps in BaseBinaryStar::ChooseTimestep() are based on absolute values of tidal timescales, // and appropriately handle situations where tidal terms are 0. // 03.07.04 JR - Nov 06, 2024 - Defect repairs: -// - Fix for issue #1263. Three recently added boolean options (--emit-gravitational-radiation, --enhance-CHE-lifetimes-luminosities, and +// - Fix for issue #1263. Three recently added boolean options (--emit-gravitational-radiation, --enhance-CHE-lifetimes-luminosities, and // --scale-CHE-mass-loss-with-surface-helium-abundance) had their implicit_value() set incorrectly in Options.cpp - now fixed. Also added // documentation for developers. // - Removed deprecated options from yaml template yaml.h @@ -1426,7 +1426,7 @@ // 03.10.05 JR - Jan 08, 2025 - Defect repair: // - fix for issue #1317 - SN events not always logged in BSE SN file when evolving MS merger products // - added code to ensure final BSE detailed output file TIMESTEP_COMPLETED record is always logged -// (may duplicate FINAL_STATE record, but logging TIMESTEP_COMPLETED is consistent, and it's what most people look for) +// (may duplicate FINAL_STATE record, but logging TIMESTEP_COMPLETED is consistent, and it's what most people look for) // 03.10.06 VK - Jan 13, 2025 - Enhancement: // - Modified the KAPIL2024 tides to ignore quadratic 'e' terms (for spin and separation evolution) if they spin up an already synchronized star. // 03.11.00 VK - Jan 14, 2025 - Enhancement, Defect repair: @@ -1477,20 +1477,20 @@ // - Added a check to prevent a divide-by-zero error from the previous PR (resolves issue #1345) // 03.15.00 YS/JR - Mar 03, 2025 - Defect repairs, Enhancement: // - Fixed the issue that during mass transfer, the spin-up of a neutron star sometimes created a negative spin period -// - Updated NS::UpdateMagneticFieldAndSpin() for spin-up/recycling: added Boost integration of angular momentum of neutron star during mass transfer +// - Updated NS::UpdateMagneticFieldAndSpin() for spin-up/recycling: added Boost integration of angular momentum of neutron star during mass transfer // - Fix for issue #1002 // - Fix for issue #1257 -// - Updated references to pulsar calculations. -// - Added safeguards to make sure the inputs of birth spin period and magnetic field inputs are valid. If not, raise error messages and stop run. +// - Updated references to pulsar calculations. +// - Added safeguards to make sure the inputs of birth spin period and magnetic field inputs are valid. If not, raise error messages and stop run. // - Consider neutron star not spinning when spin period is infinity, spin frequency is 0 or magnetic field is 0, and all subsequent pulsar parameters are set to 0. // - Changes in program options: // 1). Added program option "--neutron-star-accretion-in-ce" to account for how a neutron star accretes mass during a common envelope event -// 2). Default pulsar birth spin period distribution is set to NORMAL instead of ZERO; ZERO is now deprecated, and non-spinning pulsars are no longer allowed when evolving pulsars. -// 3). Added program options "--pulsar-birth-spin-period-distribution-mean" (default 75ms) and "--"pulsar-birth-spin-period-distribution-sigma" (default 25ms) to determine the birth distribution of pulsar period when it's normal or lognormal. -// 4). Default pulsar birth magnetic field distribution is set to LOGNORMAL instead of ZERO; ZERO is now deprecated, and pulsars with zero magnetic field are no longer allowed when evolving pulsars. -// 5). New command line options "--pulsar-birth-magnetic-field-distribution-mean" (default 12.65) and "--"pulsar-birth-magnetic-field-distribution-sigma" (default 0.55) to determine the birth distribution of pulsar magnetic field when it's normal or lognormal. +// 2). Default pulsar birth spin period distribution is set to NORMAL instead of ZERO; ZERO is now deprecated, and non-spinning pulsars are no longer allowed when evolving pulsars. +// 3). Added program options "--pulsar-birth-spin-period-distribution-mean" (default 75ms) and "--"pulsar-birth-spin-period-distribution-sigma" (default 25ms) to determine the birth distribution of pulsar period when it's normal or lognormal. +// 4). Default pulsar birth magnetic field distribution is set to LOGNORMAL instead of ZERO; ZERO is now deprecated, and pulsars with zero magnetic field are no longer allowed when evolving pulsars. +// 5). New command line options "--pulsar-birth-magnetic-field-distribution-mean" (default 12.65) and "--"pulsar-birth-magnetic-field-distribution-sigma" (default 0.55) to determine the birth distribution of pulsar magnetic field when it's normal or lognormal. // - Changes to SSE/BSE_Pulsar_Evolution file: -// 1). Pulsar magnetic field strength is now recorded in Gauss instead of Tesla +// 1). Pulsar magnetic field strength is now recorded in Gauss instead of Tesla // 2). Spin of pulsar is now by default recorded with period (s) instead of frequency (Hz). Spin frequency is still tracked and can be added as an output in the logfiles. // 3). Spin-down of pulsar (m_PulsarDetails.spinDownRate) is now tracking period derivative (p-dot, s/s) instead of frequency derivative (omega-dot, rad/s^2) // - Fixed incorrect declarations of BaseStar::CalculateLambdaLoveridgeEnergyFormalism() @@ -1498,7 +1498,7 @@ // - Fix to issue #1348 // - Modified suggested timescales for compact objects // 03.16.00 VK - Mar 15, 2025 - Defect repairs, Enhancements: -// - Placed a maximum limit on how much the KAPIL2024 Tides prescription can change spins and orbital parameters in a single timestep. +// - Placed a maximum limit on how much the KAPIL2024 Tides prescription can change spins and orbital parameters in a single timestep. // If too large of a timestep is taken for any reason, tides will only take an effeective timestep such that the change is within the TIDES_MAXIMUM_ORBITAL_CHANGE_FRAC limit. // - Updated BaseStar::CalculateImKlmDynamical() to allow for GW dissiopation from a radiative core + convective envelope as long as the convective core radius is negligible, regardless of convective core mass. Required for expected behavior for massive stars on the MS. // - Added STAR_PROPERTY::CORE_RADIUS_AT_COMPACT_OBJECT_FORMATION and STAR_PROPERTY::TOTAL_RADIUS_AT_COMPACT_OBJECT_FORMATION to the default log files, stored pre supernova. @@ -1572,7 +1572,7 @@ // 03.20.01 SS/NRS - May 26, 2025 - Enhancement: // - Improvements to mass accretion for massive ONe WDs // - Added ONe::CalculateMassAcceptanceRate -// - Fix units of logMassTransferRate in WhiteDwarfs::CalculateEtaHe and WhiteDwarfs::CalculateEtaH +// - Fix units of logMassTransferRate in WhiteDwarfs::CalculateEtaHe and WhiteDwarfs::CalculateEtaH // - Update white dwarf mass-radius relation (WhiteDwarfs::CalculateRadiusOnPhase_Static) // - Moved white dwarf related constants to constants.h (resolves issue #1351) // - Set merger on unstable RLOF from WD @@ -1641,7 +1641,7 @@ // // Instead of using ``--use-mass-loss`` or ``--use-mass-loss true`` to enable mass loss, then specifying the mass loss // prescription to be used with ``--mass-loss-prescription``, mass loss can be enabled using ``--mass-loss-prescription`` -// with any valid prescription (that is not ``zero``), and disabled with ``--mass-loss-prescription zero`` instead of +// with any valid prescription (that is not ``zero``), and disabled with ``--mass-loss-prescription zero`` instead of // ``use-mass-loss false``. // - Added compiler flag "-Wno-vla-cxx-extension" to "CXXFLAGS" in Makefile to suppress compiler extension warning // - Fixed online docs for omissions in v03.22.02: @@ -1651,7 +1651,7 @@ // - In the MALTSEV SN prescription, treat wind-stripped stars as if they experienced case B mass transfer // - Limit the output of CalculateEtaPTY() [Helium accretion efficiency onto WDs from Piersanti+ 2014, A3] to be in [0,1] // 03.24.00 RTW - August 18, 2025 - Enhancement: -// - Updated Maltsev SN prescription, to include Maltsev mode (extrapolation variant outside of Z bounds), +// - Updated Maltsev SN prescription, to include Maltsev mode (extrapolation variant outside of Z bounds), // fallback option, fixed remnant mass, and added lum and teff as attributes of RLOFProperties // 03.25.00 RTW - August 18, 2025 - Enhancement: // - Added KLENCKI_LINEAR AM loss, which is linear in the specific AM gamma instead of the orbital separation (as in MACLEOD_LINEAR) @@ -1680,7 +1680,7 @@ // - changed "scale-CHE-mass-loss-with-surface-helium-abundance" to "--scale-mass-loss-with-surface-helium-abundance" in "RangeExcluded" vector in Options.h // - version should have been "v03.27.00" instead of "v03.26.02" - change included new functionality. This version is "v03.27.01" to compensate. // 03.27.02 AB - December 9, 2025 - Defect repairs: -// - Reverted a change from PR #1437: --scale-mass-loss-with-surface-helium-abundance is changed back to +// - Reverted a change from PR #1437: --scale-mass-loss-with-surface-helium-abundance is changed back to // --scale-CHE-mass-loss-with-surface-helium-abundance and applies only to CHE stars // - Corrected behaviour of MS stars that stopped ageing after mass transfer when mass loss is disabled (issue #1444) // - Corrected luminosity evolution for CH stars (issue #1443) diff --git a/src/constants.h b/src/constants.h index ddfb8ec3e..21c684056 100755 --- a/src/constants.h +++ b/src/constants.h @@ -25,17 +25,17 @@ typedef std::tuple STR_STR_ typedef std::tuple STR_STR_STR_STR; typedef std::vector> GE_QCRIT_RADII_QCRIT_VECTOR; -typedef std::tuple GE_QCRIT_TABLE; +typedef std::tuple GE_QCRIT_TABLE; typedef std::vector> GE_QCRIT_RADII_QCRIT_VECTOR_HE; -typedef std::tuple GE_QCRIT_TABLE_HE; +typedef std::tuple GE_QCRIT_TABLE_HE; // the defaults size of the boost list that handles variant types is 20 - so only 20 variant types are allowed // we've exceeded that number - we're at 21 currently - so the size of the boost list needs to be increased // we have to set the size of the list before we include the boost headers - otherwise boost redefines it -// boost only recognises values of 20, 30, 40, & 50: for now we set it to 30. +// boost only recognises values of 20, 30, 40, & 50: for now we set it to 30. #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS - + #if !defined(BOOST_MPL_LIMIT_LIST_SIZE) #if defined(BOOST_MPL_LIST_HPP_INCLUDED) # error "BOOST_MPL_LIMIT_LIST_SIZE must be set to accommodate the size of COMPAS_VARIABLE before the including the Boost headers" @@ -49,7 +49,7 @@ typedef std::tuple GE_QCRIT #else # error "BOOST_MPL_LIMIT_LIST_SIZE value is too low" #endif - + #endif #include @@ -377,13 +377,13 @@ constexpr double KROUPA_BREAK_2_POWER_2_3 = 0.5; constexpr double OPIKS_LAW_SEMIMAJOR_AXIS_DISTRIBUTION_POWER = -1.0; // Constants for the Muller and Mandel remnant mass and kick prescriptions -constexpr double MULLERMANDEL_M1 = 2.0; -constexpr double MULLERMANDEL_M2 = 3.0; -constexpr double MULLERMANDEL_M3 = 7.0; -constexpr double MULLERMANDEL_M4 = 8.0; +constexpr double MULLERMANDEL_M1 = 2.0; +constexpr double MULLERMANDEL_M2 = 3.0; +constexpr double MULLERMANDEL_M3 = 7.0; +constexpr double MULLERMANDEL_M4 = 8.0; constexpr double MULLERMANDEL_MU1 = 1.2; -constexpr double MULLERMANDEL_SIGMA1 = 0.02; -constexpr double MULLERMANDEL_MU2A = 1.4; +constexpr double MULLERMANDEL_SIGMA1 = 0.02; +constexpr double MULLERMANDEL_MU2A = 1.4; constexpr double MULLERMANDEL_MU2B = 0.5; constexpr double MULLERMANDEL_SIGMA2 = 0.05; constexpr double MULLERMANDEL_MU3A = 1.4; @@ -432,9 +432,9 @@ constexpr double MALTSEV2024_M3CZ01 = 12.3; constexpr double MALTSEV2024_M3BZ01 = 13.7; constexpr double MALTSEV2024_M3AZ01 = 13.7; -// Constants for WD evolution +// Constants for WD evolution -constexpr double COWD_LOG_MDOT_MIN_OFF_CENTER_IGNITION = -5.688246139; // Minimum log mass accretion rate for off center ignition in a CO WD. From Wang+ 2017. Log( 2.05 x 10^-6). +constexpr double COWD_LOG_MDOT_MIN_OFF_CENTER_IGNITION = -5.688246139; // Minimum log mass accretion rate for off center ignition in a CO WD. From Wang+ 2017. Log( 2.05 x 10^-6). constexpr double COWD_MASS_MIN_OFF_CENTER_IGNITION = 1.33; // Minimum mass required for off center ignition, as shown in Wang, Podsiadlowski & Han (2017), sect 3.2. constexpr double HEWD_HE_MDOT_CRIT = 2.0E-8; // Critical accretion rate for He WD accreting He-rich material. From Belczynski+ 2008, Mdot_crit2 in section 5.7.1. constexpr double HEWD_MINIMUM_MASS_IGNITION = 0.35; // Minimum mass for HeMS burning @@ -688,27 +688,27 @@ const std::map> A_COEFF = { {81, {{ALPHA, 2.493000E0 }, {BETA, 1.147500E0 }, {GAMMA, 0.000000E0 }, {ETA, 0.000000E0 }, {MU, 0.000000E0 }}} }; -// Critial mass ratios for a grid of masses and radii. These come from the team of Hongwei Ge, in a series of papers -// titled "Adiabatic Mass Loss". The first two tables below are a subset of Tables A3 and A4 from Ge et al. 2024 -// (Paper V, arXiv:2408.16350), provided by private request to Hongwei Ge. This is the most up to date version of these -// tables at the time of writing. Table A3 corresponds to low metallicity Z=0.001, Table A4 is for Z=0.02. Both of -// these tables are represented below as two separate nested vectors, and we interpolate linearly in logM, logR, and logZ. +// Critial mass ratios for a grid of masses and radii. These come from the team of Hongwei Ge, in a series of papers +// titled "Adiabatic Mass Loss". The first two tables below are a subset of Tables A3 and A4 from Ge et al. 2024 +// (Paper V, arXiv:2408.16350), provided by private request to Hongwei Ge. This is the most up to date version of these +// tables at the time of writing. Table A3 corresponds to low metallicity Z=0.001, Table A4 is for Z=0.02. Both of +// these tables are represented below as two separate nested vectors, and we interpolate linearly in logM, logR, and logZ. // -// Both tables contain the Mass/Msol, log(R/Rsol), and critical mass ratios for mass transfer instability for a variety of model +// Both tables contain the Mass/Msol, log(R/Rsol), and critical mass ratios for mass transfer instability for a variety of model // variations, namely qCritST_full, qCritST_half, qCritST_nonc, qCritIC_full, qCritIC_half, qCritIC_nonc. // The ST and IC suffixes distinguish their adiabatic and isentropic models, respectively (see Ge et al. 2020). -// The _full, _half, and _nonc suffixes distinguish fully conservative MT, half conservative MT, and fully non-conservative MT, -// respectively, where non-conservative models assume isotropic re-emission AM loss. +// The _full, _half, and _nonc suffixes distinguish fully conservative MT, half conservative MT, and fully non-conservative MT, +// respectively, where non-conservative models assume isotropic re-emission AM loss. // -// The First entry in the tuple is the vector of unique mass values, second entry is the vector containing 7-tuples of vectors -// for logR, and the six qCrits listed above (in order). Note that the radius may contract several times. These points have +// The First entry in the tuple is the vector of unique mass values, second entry is the vector containing 7-tuples of vectors +// for logR, and the six qCrits listed above (in order). Note that the radius may contract several times. These points have // been removed to facilitate the interpolation, so logR is monotonic. // // The third table below comes from Zhang et al. 2024 (Paper IV, arxiv:2406.13146). This table was computed exclusively for He // stars, and does include the same variations as for the H-rich donors in the first two tables. There is only one critical mass // ratio value per mass and radius, assuming fully conservative MT and a purely adiabatic (i.e non-istentropic) response to mass loss. // -// In all cases, q is mAccretor/mDonor, which is inverted from the Ge et al. datatable. +// In all cases, q is mAccretor/mDonor, which is inverted from the Ge et al. datatable. // // Low Z = 0.001 table const GE_QCRIT_TABLE QCRIT_GE_LOW_Z = { diff --git a/src/main.cpp b/src/main.cpp index fab59dbc9..e0b514853 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include @@ -49,38 +49,38 @@ OBJECT_ID m_ObjectId = 0; // object id for /* * SIGFPE signal handler - * + * * Only handles SIGFPE. - * + * * SIGFPE is a system generated signal raised when floating-point errors occur and * floating-point traps are enabled. - * + * * We implement two active modes for floating-point error handling: ON and DEBUG (the * third mode is OFF): - * + * * OFF : we just ignore the signal. - * + * * ON : we throw a runtime_error exception, with the what string set to "FPE", * which is the caught by catch blocks throughout the code and handled there. - * + * * DEBUG: we construct and display a stack trace, then halt the program by calling * std::exit(1) - * - * + * + * * void SIGFPEhandler(int p_Sig) - * + * * @param [IN] p_Sig The signal intercepted - * + * */ void SIGFPEhandler(int p_Sig) { if (p_Sig == SIGFPE) { // SIGFPE? - // yes + // yes FP_ERROR_MODE fpErrorMode = OPTIONS->FPErrorMode(); // mode = ON or DEBUG? if (fpErrorMode == FP_ERROR_MODE::ON) throw std::runtime_error("FPE"); // mode = ON else if (fpErrorMode == FP_ERROR_MODE::DEBUG) { // mode = DEBUG? std::cerr << "\nFloating-point error encountered: program terminated\n"; // announce error utils::ShowStackTrace(); // construct and show stack trace - } + } } else { // not SIGFPE - can't jump back from here, so... std::cerr << "\nUnexpected signal encountered: program terminated\n"; // announce error @@ -95,10 +95,10 @@ class BinaryStar; // The following global variables support the BSE Switch Log file -// Ideally, rather than be declared as globals, they would be in maybe the -// LOGGING service singleton, but the Log class knows nothing about the +// Ideally, rather than be declared as globals, they would be in maybe the +// LOGGING service singleton, but the Log class knows nothing about the // BinaryStar class... -// (maybe we could put them in the new CONSTANTS service singleton if we +// (maybe we could put them in the new CONSTANTS service singleton if we // implement it) BinaryStar* evolvingBinaryStar = NULL; // pointer to the currently evolving Binary Star @@ -106,44 +106,44 @@ bool evolvingBinaryStarValid = false; // flag to indicate whet /* * SIGUSR1 signal handler - * + * * Only handles SIGUSR1. - * + * * SIGUSR1 is a user generated signal - the system should not generate this signal, * though it is possible to send the signal to a process via the Un*x kill command, - * or some other user-developed program that sends signals. This code does some + * or some other user-developed program that sends signals. This code does some * rudimentary sanity checks, but it is possible that sending a SIGUSR1 signal to a - * running COMPAS process via the Un*x kill command, or otherwise, might cause a + * running COMPAS process via the Un*x kill command, or otherwise, might cause a * spurious entry in the BSE Switch Log file - c'est la vie. - * - * We use SIGUSR1 in the Star class to signal when a Star object switches stellar - * type. We use a signal because the Star class knows nothing about binary stars, - * so can't call a binary star function to log binary star variables to the BSE - * Switch Log file. By raising a signal in the Star class and catching it here we - * can call the appropriate binary star class function to write the binary star + * + * We use SIGUSR1 in the Star class to signal when a Star object switches stellar + * type. We use a signal because the Star class knows nothing about binary stars, + * so can't call a binary star function to log binary star variables to the BSE + * Switch Log file. By raising a signal in the Star class and catching it here we + * can call the appropriate binary star class function to write the binary star * variables to the log file. - * - * The signal is raised in the Star::SwitchTo() function if OPTIONS->BSESwitchLog() - * is true, so the signal will be received here for every stellar type switch of + * + * The signal is raised in the Star::SwitchTo() function if OPTIONS->BSESwitchLog() + * is true, so the signal will be received here for every stellar type switch of * every star. - * - * We only process the signal here if the global variable evolvingBinaryStarValid - * is true. The global variable evolvingBinaryStarValid is only set true after a - * binary star has been constructed and is ready to evolve - so if the signal is - * raised, it will be ignored for SSE switches, and it will be ignored for switches + * + * We only process the signal here if the global variable evolvingBinaryStarValid + * is true. The global variable evolvingBinaryStarValid is only set true after a + * binary star has been constructed and is ready to evolve - so if the signal is + * raised, it will be ignored for SSE switches, and it will be ignored for switches * inside the constructor of the binary star (and so its constituent stars). - * + * * This signal handler is installed in EvolveBinaryStars(), so it is installed only * if we're evolving binaries - signals will be ignored (by our code - the system * will still receive and handle them) if we're evolving single stars. * - * + * * void SIGUSR1handler(int p_Sig) - * + * * @param [IN] p_Sig The signal intercepted - * + * */ -void SIGUSR1handler(int p_Sig) { +void SIGUSR1handler(int p_Sig) { if (p_Sig == SIGUSR1) { // SIGUSR1? Just silently ignore anything else... if (evolvingBinaryStarValid && OPTIONS->SwitchLog()) { // yes - do we have a valid binary star, and are we logging switches? (void)evolvingBinaryStar->PrintSwitchLog(); // yes - assume SIGUSR1 is a binary constituent star switching... @@ -154,36 +154,36 @@ void SIGUSR1handler(int p_Sig) { /* * SIGUSR2 signal handler - * + * * Only handles SIGUSR2. - * + * * SIGUSR2 is a user generated signal - the system should not generate this signal, * though it is possible to send the signal to a process via the Un*x kill command, - * or some other user-developed program that sends signals. This code does some + * or some other user-developed program that sends signals. This code does some * rudimentary sanity checks, but it is possible that sending a SIGUSR2 signal to * running COMPAS process via the Un*x kill command, or otherwise, might cause the * program to dump a stack trace and halt - c'est la vie. - * + * * This signal handler, upon receipt of a SIGUSR2 signal, will construct and display * a stack trace, then halt the program by calling std::exit(1). This is useful for * debugging code and the code path to a particular location in the code is not * obvious. Inserting a - * + * * raise(SIGUSR2); - * + * * statement at the location will, when that statement is executed, cause a SIGUSR2 * signal to be raised, and that will invoke this signal handler which will then * construct and display a stack trace, and halt the program. * * void SIGUSR2handler(int p_Sig) - * + * * @param [IN] p_Sig The signal intercepted - * + * */ void SIGUSR2handler(int p_Sig) { if (p_Sig == SIGUSR2) { // SIGUSR2? Just silently ignore anything else... std::cerr << "\nSIGUSR2 raised: program terminated\n"; - utils::ShowStackTrace(); + utils::ShowStackTrace(); std::exit(1); } } @@ -194,7 +194,7 @@ void SIGUSR2handler(int p_Sig) { * * * std::tuple EvolveSingleStars() - * + * * @return Tuple: */ std::tuple EvolveSingleStars() { @@ -235,19 +235,19 @@ std::tuple EvolveSingleStars() { (void)feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW); // enable FE traps (don't trap FE_INEXACT - would trap on almost all FP operations...) } else (void)fedisableexcept(FE_ALL_EXCEPT); // disable all FE traps - + bool doneGridLine = false; // initially if (usingGrid) { // using grid file? gridLineVariation = 0; // yes - first variation of this grid line - int gridResult = OPTIONS->ApplyNextGridLine(); // set options according to specified values in grid file + int gridResult = OPTIONS->ApplyNextGridLine(); // set options according to specified values in grid file ERROR error; switch (gridResult) { // handle result of grid file read case -1: // error - unexpected end of grid file case -2: // error - read error for grid file case -3: { // error - invalid value in grid file switch (gridResult) { - case -1: error = ERROR::UNEXPECTED_END_OF_FILE; break; - case -2: error = ERROR::FILE_READ_ERROR; break; + case -1: error = ERROR::UNEXPECTED_END_OF_FILE; break; + case -2: error = ERROR::FILE_READ_ERROR; break; case -3: error = ERROR::INVALID_VALUE_IN_FILE; break; default: error = ERROR::FILE_READ_ERROR; break; } @@ -291,9 +291,9 @@ std::tuple EvolveSingleStars() { while (!doneGridLine && evolutionStatus == EVOLUTION_STATUS::CONTINUE) { // while all ok and not done - // Single stars (in SSE) are provided with a random seed that is used to seed the random - // number generator. The random number generator is re-seeded for each star. Here we - // generate the seed for the star being evolved - by this point we have picked up the + // Single stars (in SSE) are provided with a random seed that is used to seed the random + // number generator. The random number generator is re-seeded for each star. Here we + // generate the seed for the star being evolved - by this point we have picked up the // option value from either the commandline or the grid file. // // There are three scenarios: @@ -302,17 +302,17 @@ std::tuple EvolveSingleStars() { // record, we use a randomly chosen seed, based on the system time. // // if the user specified a random seed on the commandline, and not in the grid file for - // the current star, the random seed specified on the commandline is used - and the offset - // applied (the index of the star being evolved). The index of the star being evolved + // the current star, the random seed specified on the commandline is used - and the offset + // applied (the index of the star being evolved). The index of the star being evolved // starts at 0 for the first star, and increments by 1 for each subsequent star evolved - // (so the base random seed specified by the user is also the initial random seed - the + // (so the base random seed specified by the user is also the initial random seed - the // random seed of the first star evolved) // // if the user specified a random seed in the grid file for the current star, regardless of // whether a random seed was specified on the commandline, the random seed from the grid // file is used, and an offset is added if the grid line also specified ranges or sets for // and options (if no ranges or sets were specified on the grid line then no offset is added - // (i.e. the random seed specified is used as is)). Note that in this scenario it is the + // (i.e. the random seed specified is used as is)). Note that in this scenario it is the // user's responsibility to ensure that there is no duplication of seeds. std::string errorStr; // error string @@ -320,7 +320,7 @@ std::tuple EvolveSingleStars() { OPTIONS_ORIGIN optsOrigin = processingGridLine ? OPTIONS_ORIGIN::GRIDFILE : OPTIONS_ORIGIN::CMDLINE; // indicate which set of program options we're using if (OPTIONS->FixedRandomSeedGridLine()) { // user specified a random seed in the grid file for this binary? // yes - use it (indexed) - randomSeed = OPTIONS->RandomSeedGridLine() + (unsigned long int)gridLineVariation; // random seed + randomSeed = OPTIONS->RandomSeedGridLine() + (unsigned long int)gridLineVariation; // random seed errorStr = OPTIONS->SetRandomSeed(randomSeed, optsOrigin); // set it if (!errorStr.empty()) { // ok? evolutionStatus = EVOLUTION_STATUS::ERROR; // no - set status @@ -329,7 +329,7 @@ std::tuple EvolveSingleStars() { } else if (OPTIONS->FixedRandomSeedCmdLine()) { // no - user specified a random seed on the commandline? // yes - use it (indexed) - randomSeed = OPTIONS->RandomSeedCmdLine() + (unsigned long int)index; // random seed + randomSeed = OPTIONS->RandomSeedCmdLine() + (unsigned long int)index; // random seed errorStr = OPTIONS->SetRandomSeed(randomSeed, optsOrigin); // set it if (!errorStr.empty()) { // ok? evolutionStatus = EVOLUTION_STATUS::ERROR; // no - set status @@ -338,7 +338,7 @@ std::tuple EvolveSingleStars() { } else { // no // use default seed (based on system time) + id (index) - randomSeed = RAND->DefaultSeed() + (unsigned long int)index; // random seed + randomSeed = RAND->DefaultSeed() + (unsigned long int)index; // random seed errorStr = OPTIONS->SetRandomSeed(randomSeed, optsOrigin); // set it if (!errorStr.empty()) { // ok? evolutionStatus = EVOLUTION_STATUS::ERROR; // no - set status @@ -351,31 +351,31 @@ std::tuple EvolveSingleStars() { randomSeed = RAND->CurrentSeed(); // current random seed - to pass to star object // the initial mass of the star is supplied - this is to allow binary stars to initialise - // the masses of their constituent stars (rather than have the constituent stars sample - // their own mass). Here we use the mass supplied by the user via the program options or, + // the masses of their constituent stars (rather than have the constituent stars sample + // their own mass). Here we use the mass supplied by the user via the program options or, // if no mass was supplied by the user, sample the mass from the IMF. double initialMass = OPTIONS->OptionSpecified("initial-mass") // user specified mass? ? OPTIONS->InitialMass() // yes, use it : utils::SampleInitialMass(OPTIONS->InitialMassFunction(), // no, sample it - OPTIONS->InitialMassFunctionMax(), - OPTIONS->InitialMassFunctionMin(), + OPTIONS->InitialMassFunctionMax(), + OPTIONS->InitialMassFunctionMin(), OPTIONS->InitialMassFunctionPower()); // the metallicity of the star is supplied - this is to allow binary stars to initialise - // the metallicity of their constituent stars (rather than have the constituent stars sample + // the metallicity of their constituent stars (rather than have the constituent stars sample // their own metallicity). Here we use the mmetallicityass supplied by the user via the program // options or, if no metallicity was supplied by the user, sample the metallicity. double metallicity = OPTIONS->OptionSpecified("metallicity") // user specified metallicity? ? OPTIONS->Metallicity() // yes, use it - : utils::SampleMetallicity(OPTIONS->MetallicityDistribution(), - OPTIONS->MetallicityDistributionMax(), + : utils::SampleMetallicity(OPTIONS->MetallicityDistribution(), + OPTIONS->MetallicityDistributionMax(), OPTIONS->MetallicityDistributionMin()); // no, sample it - // Single stars (in SSE) are provided with a kick structure that specifies the + // Single stars (in SSE) are provided with a kick structure that specifies the // values of the random number to be used to generate to kick magnitude, and the - // actual kick magnitude specified by the user via program option --kick-magnitude + // actual kick magnitude specified by the user via program option --kick-magnitude // // See typedefs.h for the kick structure. // @@ -392,7 +392,7 @@ std::tuple EvolveSingleStars() { kickParameters.magnitudeRandom = OPTIONS->KickMagnitudeRandom(); kickParameters.magnitudeSpecified = OPTIONS->OptionSpecified("kick-magnitude"); kickParameters.magnitude = OPTIONS->KickMagnitude(); - + // create the star delete star; star = nullptr; // so we don't leak... star = OPTIONS->OptionSpecified("rotational-frequency") // user specified rotational frequency? @@ -400,14 +400,14 @@ std::tuple EvolveSingleStars() { : new Star(randomSeed, initialMass, metallicity, kickParameters); // no - let it be calculated thisStarStatus = EVOLUTION_STATUS::STARTED; - + thisStarStatus = star->Evolve(index); // evolve the star // announce the result if (!OPTIONS->Quiet()) { // quiet mode? SAY(index << // announce result of evolving the star ": " << - EVOLUTION_STATUS_LABEL.at(thisStarStatus) << + EVOLUTION_STATUS_LABEL.at(thisStarStatus) << ": RandomSeed = " << star->RandomSeed() << ", Initial Mass = " << @@ -438,12 +438,12 @@ std::tuple EvolveSingleStars() { doneGridLine = true; // yes - we're done } } - else doneGridLine = true; // not using grid file - done + else doneGridLine = true; // not using grid file - done } } } delete star; star = nullptr; // so we don't leak... - + if (evolutionStatus == EVOLUTION_STATUS::CONTINUE) { // ok? int optionsStatus = OPTIONS->AdvanceCmdLineOptionValues(); // yes - apply next commandline options (ranges/sets) if (optionsStatus < 0) { // ok? @@ -517,8 +517,8 @@ std::tuple EvolveSingleStars() { int wallMM = (int)((wallSeconds.count() - ((double)wallHH * 3600.0)) / 60.0); // minutes int wallSS = (int)(wallSeconds.count() - ((double)wallHH * 3600.0) - ((double)wallMM * 60.0)); // seconds - SAY("Wall time = " << std::setfill('0') << std::setw(2) << wallHH << ":" << - std::setfill('0') << std::setw(2) << wallMM << ":" << + SAY("Wall time = " << std::setfill('0') << std::setw(2) << wallHH << ":" << + std::setfill('0') << std::setw(2) << wallMM << ":" << std::setfill('0') << std::setw(2) << wallSS << " (hh:mm:ss)"); return std::make_tuple(nStarsRequested, index); @@ -530,7 +530,7 @@ std::tuple EvolveSingleStars() { * * * std::tuple EvolveBinaryStars() - * + * * @return Tuple: */ std::tuple EvolveBinaryStars() { @@ -615,15 +615,15 @@ std::tuple EvolveBinaryStars() { while (!doneGridLine && (evolutionStatus == EVOLUTION_STATUS::CONTINUE)) { // while all ok and not done - // we only need to pass the index number to the binary - we let the BinaryStar class do the work + // we only need to pass the index number to the binary - we let the BinaryStar class do the work // wrt setting the parameters for each of the constituent stars // (The index is really only needed for legacy comparison, so can probably be removed at any time) // create the binary - // Binary stars (in BSE) are provided with a random seed that is used to seed the random - // number generator. The random number generator is re-seeded for each binary. Here we - // generate the seed for the binary being evolved - by this point we have picked up the + // Binary stars (in BSE) are provided with a random seed that is used to seed the random + // number generator. The random number generator is re-seeded for each binary. Here we + // generate the seed for the binary being evolved - by this point we have picked up the // option value from either the commandline or the grid file. // // there are three scenarios: @@ -632,19 +632,19 @@ std::tuple EvolveBinaryStars() { // record, we use a randomly chosen seed, based on the system time. // // if the user specified a random seed on the commandline, and not in the grid file for - // the current binary, the random seed specified on the commandline is used - and the offset - // applied (the index of the binary being evolved). The index of the binary being evolved + // the current binary, the random seed specified on the commandline is used - and the offset + // applied (the index of the binary being evolved). The index of the binary being evolved // starts at 0 for the first binary, and increments by 1 for each subsequent binary evolved - // (so the base random seed specified by the user is also the initial random seed - the + // (so the base random seed specified by the user is also the initial random seed - the // random seed of the first binary evolved) // // if the user specified a random seed in the grid file for the current binary, regardless of // whether a random seed was specified on the commandline, the random seed from the grid // file is used, and an offset is added if the grid line also specified ranges or sets for // and options (if no ranges or sets were specified on the grid line then no offset is added - // (i.e. the random seed specified is used as is)). Note that in this scenario it is the + // (i.e. the random seed specified is used as is)). Note that in this scenario it is the // user's responsibility to ensure that there is no duplication of seeds. - + unsigned long int thisId = index + gridLineVariation; // set the id for the binary std::string errorStr; // error string @@ -652,7 +652,7 @@ std::tuple EvolveBinaryStars() { OPTIONS_ORIGIN optsOrigin = processingGridLine ? OPTIONS_ORIGIN::GRIDFILE : OPTIONS_ORIGIN::CMDLINE; // indicate which set of program options we're using if (OPTIONS->FixedRandomSeedGridLine()) { // user specified a random seed in the grid file for this binary? // yes - use it (indexed) - randomSeed = OPTIONS->RandomSeedGridLine() + (unsigned long int)gridLineVariation; // random seed + randomSeed = OPTIONS->RandomSeedGridLine() + (unsigned long int)gridLineVariation; // random seed errorStr = OPTIONS->SetRandomSeed(randomSeed, optsOrigin); // set it if (!errorStr.empty()) { // ok? THROW_ERROR_STATIC(ERROR::ERROR_PROCESSING_GRIDLINE_OPTIONS, errorStr); // throw error @@ -660,7 +660,7 @@ std::tuple EvolveBinaryStars() { } else if (OPTIONS->FixedRandomSeedCmdLine()) { // no - user specified a random seed on the commandline? // yes - use it (indexed) - randomSeed = OPTIONS->RandomSeedCmdLine() + (unsigned long int)index + (unsigned long int)gridLineVariation; // random seed + randomSeed = OPTIONS->RandomSeedCmdLine() + (unsigned long int)index + (unsigned long int)gridLineVariation; // random seed errorStr = OPTIONS->SetRandomSeed(randomSeed, optsOrigin); // set it if (!errorStr.empty()) { // ok? THROW_ERROR_STATIC(ERROR::ERROR_PROCESSING_CMDLINE_OPTIONS, errorStr); // throw error @@ -668,7 +668,7 @@ std::tuple EvolveBinaryStars() { } else { // no // use default seed (based on system time) + id (index) - randomSeed = RAND->DefaultSeed() + (unsigned long int)index + (unsigned long int)gridLineVariation; // random seed + randomSeed = RAND->DefaultSeed() + (unsigned long int)index + (unsigned long int)gridLineVariation; // random seed errorStr = OPTIONS->SetRandomSeed(randomSeed, optsOrigin); // set it if (!errorStr.empty()) { // ok? THROW_ERROR_STATIC(ERROR::ERROR_PROCESSING_CMDLINE_OPTIONS, errorStr); // throw error @@ -691,19 +691,19 @@ std::tuple EvolveBinaryStars() { // any error caught here has already been displayed to the user, so we just catch all haveBinary = false; // binary not constructed thisBinaryStatus = EVOLUTION_STATUS::BINARY_ERROR; // error with binary - + // announce result if (!OPTIONS->Quiet()) { // quiet mode? SAY(thisId << ": " << EVOLUTION_STATUS_LABEL.at(thisBinaryStatus) << ": not evolved"); // no - announce result of (not) evolving the binary } } - + if (haveBinary) { // binary constructed ok? evolvingBinaryStar = binary; // yes - set global pointer to evolving binary (for BSE Switch Log) evolvingBinaryStarValid = true; // indicate that the global pointer is now valid (for BSE Switch Log) thisBinaryStatus = binary->Evolve(); // evolve the binary - + // announce result if (!OPTIONS->Quiet()) { // quiet mode? // no - announce result of evolving the binary @@ -780,7 +780,7 @@ std::tuple EvolveBinaryStars() { evolutionStatus = EVOLUTION_STATUS::ERROR; // evolution terminated } } - + int nBinariesRequested = evolutionStatus == EVOLUTION_STATUS::DONE ? index : (usingGrid ? -1 : OPTIONS->nObjectsToEvolve()); SAY("\nGenerated " << std::to_string(index) << " of " << (nBinariesRequested < 0 ? "" : std::to_string(nBinariesRequested)) << " binaries requested"); @@ -814,8 +814,8 @@ std::tuple EvolveBinaryStars() { int wallMM = (int)((wallSeconds.count() - ((double)wallHH * 3600.0)) / 60.0); // minutes int wallSS = (int)(wallSeconds.count() - ((double)wallHH * 3600.0) - ((double)wallMM * 60.0)); // seconds - SAY("Wall time = " << std::setfill('0') << std::setw(4) << wallHH << ":" << - std::setfill('0') << std::setw(2) << wallMM << ":" << + SAY("Wall time = " << std::setfill('0') << std::setw(4) << wallHH << ":" << + std::setfill('0') << std::setw(2) << wallMM << ":" << std::setfill('0') << std::setw(2) << wallSS << " (hhhh:mm:ss)"); return std::make_tuple(nBinariesRequested, index); @@ -863,7 +863,7 @@ int main(int argc, char * argv[]) { yaml::MakeYAMLfile(OPTIONS->YAMLfilename(), OPTIONS->YAMLtemplate()); // create YAML file programStatus = PROGRAM_STATUS::SUCCESS; // don't evolve anything } - + if (programStatus == PROGRAM_STATUS::CONTINUE) { if (OPTIONS->FPErrorMode() != FP_ERROR_MODE::OFF) { // floating-point error handling mode on/debug? @@ -899,7 +899,7 @@ int main(int argc, char * argv[]) { (void)utils::SplashScreen(); // announce ourselves if (!LOGGING->Enabled()) programStatus = PROGRAM_STATUS::LOGGING_FAILED; // logging failed to start - else { + else { if (!OPTIONS->GridFilename().empty()) { // have grid filename? ERROR error = OPTIONS->OpenGridFile(OPTIONS->GridFilename()); // yes - open grid file @@ -923,7 +923,7 @@ int main(int argc, char * argv[]) { } programStatus = PROGRAM_STATUS::SUCCESS; // set program status, and... - } + } } LOGGING->Stop(std::make_tuple(objectsRequested, objectsCreated)); // stop the logging service if necessary and cleanup @@ -936,4 +936,3 @@ int main(int argc, char * argv[]) { return static_cast(programStatus); // we're done } - diff --git a/src/profiling.cpp b/src/profiling.cpp index 0ab6a3903..2db31b4a9 100644 --- a/src/profiling.cpp +++ b/src/profiling.cpp @@ -31,47 +31,47 @@ namespace profiling { /* * Initialises profiling functionality - * + * * Put any code here required for initialisation of profiling functionality * This function should be called once immediately after program start - * - * + * + * * void Initialise() - * + * */ void Initialise() { InitialisePow(); - } + } /* * Report profiling outcomes - * + * * Put any code here required for reporting of profiling functionality * This function should be called once immediately prior to program termination - * - * + * + * * void Report() - * + * */ void Report() { - + std::cout << "\n"; std::cout << "========== BEGIN PROFILING OUTCOMES ==========\n"; std::cout << "\n"; ReportPow(); - + std::cout << "=========== END PROFILING OUTCOMES ===========\n"; - } + } /* * Initialises variables used for profiling std::pow() - * - * + * + * * void InitialisePow() - * + * */ void InitialisePow() { @@ -86,32 +86,32 @@ namespace profiling { /* * Check call map to determine if specified signature and call count exists - * + * * This function ostensibly checks the call map for a signature and call count, and returns * true if an entry exists that matches both. The map is checked - for the same thing - * a number of times in a loop (number determined by call count). This is purely to chew up * CPU cycles. - * - * The real purpose of this function is to expend some CPU time so this call is identified - * by an external profiling tool so the full stack trace can be identified. This can be + * + * The real purpose of this function is to expend some CPU time so this call is identified + * by an external profiling tool so the full stack trace can be identified. This can be * disabled if all we want is the immediate calling function and call count. - * + * * The function could really be named 'expendCPU', but it does actually check the map for * duplicate calls and the return value is valid, so 'CheckDuplicate' is appropriate (even * though it really only does the check to prevent the code from being optimised away by * the compiler - a plain loop that did nothing other than spin to soak up CPU cycles * would be optimised out of the code by a good compiler). - * - * + * + * * bool CheckDuplicate(const std::string &p_Signature, const int p_Count) * * @param [IN] p_Signature The signature of the call we're profiling * @param [IN] p_Count The call clount we're checking for * @return Boolean flag indicating if the signature and call count were found in the map - * + * */ bool CheckDuplicate(const std::string &p_Signature, const int p_Count) { - + bool duplicate = false; // result #ifndef PROFILING_COUNTS_ONLY // counts only? (i.e. no CPU spinning...) @@ -120,7 +120,7 @@ namespace profiling { // soak up some CPU cycles // the CPU time expended depends on the call count - // p_Count should never be < 1, but just in case we include it with < 5 + // p_Count should never be < 1, but just in case we include it with < 5 // (previously it was being included with <100) if (p_Count < 5) cycles = 0; @@ -135,37 +135,37 @@ namespace profiling { for (int i = 0; i < cycles; i++) { // spin some CPU cycles duplicate = (m_CallMap[p_Signature] == p_Count); // and don't get optimised away... } - + #endif return duplicate; } - + /* * Profiling function to replace std::pow when profiling is enabled - * + * * Gathers profiling statistics for calls to std::pow(base, exponent), * and returns the valued of std::pow(base, exponent) - * + * * Statistics gathered/recorded are: - * + * * - minimum value of 'base' * - maximum value of 'base' * - minimum value of 'exponent' * - maximum value of 'exponent' * - call signatures * - counts for call signatures - * - * + * + * * double pow(const double p_Base, const double p_Exponent) (if PROFILING_CALLER_NAME is not #defined) * double pow(const double p_Base, const double p_Exponent, const std::string &p_CallerName) (if PROFILING_CALLER_NAME is #defined) - * + * * @param [IN] p_Base Floating point number to be raised to a power * @param [IN] p_Exponent Floating point exponent to which p_Base is to be raised * @param [IN] p_CallerName String containing the name of the calling function (if PROFILING_CALLER_NAME is #defined) * @return Value of std::pow(p_Base, p_Exponent) - * + * */ #ifdef PROFILING_CALLER_NAME // add caller name to signature? double pow(const double p_Base, const double p_Exponent, const std::string &p_CallerName) { // yes @@ -180,7 +180,7 @@ namespace profiling { m_PowExponentMax = std::max(p_Exponent, m_PowExponentMax); // maximum value of 'exponent' m_PowCallCount++; // increment accumulated call count - + std::string signature = ""; // call signature #ifdef PROFILING_CALLER_NAME // add caller name to signature? @@ -188,7 +188,7 @@ namespace profiling { #endif signature += "pow(" + std::to_string(p_Base) + "," + std::to_string(p_Exponent) + ")"; // call signature - + auto index = m_CallMap.find(signature); // look for signature map if (index == m_CallMap.end()) { // found? m_CallMap[signature] = 1; // no - insert it - first call @@ -204,14 +204,14 @@ namespace profiling { /* * Report profiling statistics for std::pow() - * + * * Minimamly formatted for machine parsing. If the record contains a ":", then - * the ": " is the delimiter, the LHS is the identifier, and the RHS is the value + * the ": " is the delimiter, the LHS is the identifier, and the RHS is the value * associated with the identifier - * - * + * + * * void ReportPow() - * + * */ void ReportPow() { diff --git a/src/stellarUtils.h b/src/stellarUtils.h index bfaf0ac02..c428064ef 100644 --- a/src/stellarUtils.h +++ b/src/stellarUtils.h @@ -35,15 +35,15 @@ namespace stellarUtils { * instantiated. This is primarily so functions pertaining to the stellar type can be * called when only the stellar type is known, and there is no object of that stellar type * available. - * + * * Currently the new star is not initialised via the Initialise() function of the relevant * class - some ov the Initialise() functions depend on class member variables carried over * from a prior stellar type, so until we resolve that, this star cannot be initialised in * that way. - * + * * This function returns a pointer. It is the responsibility of the caller to return the * memory allocation for the new star after use. e.g.: - * + * * BaseStar* CHeBstar = stellarUtils::NewStar(STELLAR_TYPE::CORE_HELIUM_BURNING); // create new CHeB star * MT_CASE massTransferCase = CHeBstar->DetermineMassTransferTypeAsDonor(); // get MT type as donor of CHeB star * delete CHeBstar; CHeBstar = nullptr; // free memory allocated for CHeBstar diff --git a/src/typedefs.h b/src/typedefs.h index 7d16ddbe9..0afc890a7 100755 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -25,13 +25,13 @@ struct EnableBitMaskOperators { \ static const bool enable = true; \ }; -template +template struct EnableBitMaskOperators { static const bool enable = false; }; -template -typename std::enable_if::enable, Enum>::type +template +typename std::enable_if::enable, Enum>::type operator |(Enum lhs, Enum rhs) { return static_cast ( static_cast::type>(lhs) | @@ -39,19 +39,19 @@ operator |(Enum lhs, Enum rhs) { ); } -template -typename std::enable_if::enable, Enum>::type +template +typename std::enable_if::enable, Enum>::type operator |=(Enum &lhs, Enum rhs) { lhs = static_cast ( static_cast::type>(lhs) | - static_cast::type>(rhs) + static_cast::type>(rhs) ); return lhs; } -template -typename std::enable_if::enable, Enum>::type +template +typename std::enable_if::enable, Enum>::type operator &(Enum lhs, Enum rhs) { return static_cast ( static_cast::type>(lhs) & @@ -59,19 +59,19 @@ operator &(Enum lhs, Enum rhs) { ); } -template -typename std::enable_if::enable, Enum>::type +template +typename std::enable_if::enable, Enum>::type operator &=(Enum &lhs, Enum rhs) { lhs = static_cast ( static_cast::type>(lhs) & - static_cast::type>(rhs) + static_cast::type>(rhs) ); return lhs; } -template -typename std::enable_if::enable, Enum>::type +template +typename std::enable_if::enable, Enum>::type operator ^(Enum lhs, Enum rhs) { return static_cast ( static_cast::type>(lhs) ^ @@ -79,19 +79,19 @@ operator ^(Enum lhs, Enum rhs) { ); } -template -typename std::enable_if::enable, Enum>::type +template +typename std::enable_if::enable, Enum>::type operator ^=(Enum &lhs, Enum rhs) { lhs = static_cast ( static_cast::type>(lhs) ^ - static_cast::type>(rhs) + static_cast::type>(rhs) ); return lhs; } -template -typename std::enable_if::enable, Enum>::type +template +typename std::enable_if::enable, Enum>::type operator ~(Enum rhs) { return static_cast ( ~static_cast::type>(rhs) @@ -285,7 +285,7 @@ const STELLAR_TYPE_LIST He_RICH_TYPES = { // accretion regimes // symbolic names for WD accretion regimes enum class ACCRETION_REGIME: int { - NONE, // DEPRECATED June 2024 - remove end 2024 + NONE, // DEPRECATED June 2024 - remove end 2024 ZERO, HELIUM_ACCUMULATION, HELIUM_FLASHES, @@ -361,7 +361,7 @@ const COMPASUnorderedMap CE_ACCRETION_PR { CE_ACCRETION_PRESCRIPTION::MACLEOD, "MACLEOD" }, { CE_ACCRETION_PRESCRIPTION::CHEVALIER, "CHEVALIER" } }; - + // common envelope formalisms enum class CE_FORMALISM: int { ENERGY, TWO_STAGE }; const COMPASUnorderedMap CE_FORMALISM_LABEL = { @@ -377,7 +377,7 @@ const COMPASUnorderedMap CE_LAMBDA_PRESCRIP { CE_LAMBDA_PRESCRIPTION::NANJING, "LAMBDA_NANJING" }, { CE_LAMBDA_PRESCRIPTION::KRUCKOW, "LAMBDA_KRUCKOW" }, { CE_LAMBDA_PRESCRIPTION::DEWI, "LAMBDA_DEWI" } -}; +}; // CHE (Chemically Homogeneous Evolution) Options enum class CHE_MODE: int { NONE, OPTIMISTIC, PESSIMISTIC }; @@ -693,7 +693,7 @@ const COMPASUnorderedMap MT_TIMING_LABEL = { }; // mass transfer tracking constants -enum class MT_TRACKING: int { NO_MASS_TRANSFER, STABLE_1_TO_2_SURV, STABLE_2_TO_1_SURV, CE_1_TO_2_SURV, CE_2_TO_1_SURV, CE_DOUBLE_SURV, MERGER }; +enum class MT_TRACKING: int { NO_MASS_TRANSFER, STABLE_1_TO_2_SURV, STABLE_2_TO_1_SURV, CE_1_TO_2_SURV, CE_2_TO_1_SURV, CE_DOUBLE_SURV, MERGER }; const COMPASUnorderedMap MT_TRACKING_LABEL = { { MT_TRACKING::NO_MASS_TRANSFER, "NO MASS TRANSFER" }, { MT_TRACKING::STABLE_1_TO_2_SURV, "MASS TRANSFER STABLE STAR1 -> STAR2" }, @@ -747,7 +747,7 @@ const COMPASUnorderedMap OBJECT_PERSISTENCE_LAB // object types // identifies the type of an object -// if BASE_STAR, check STELLAR_TYPE +// if BASE_STAR, check STELLAR_TYPE enum class OBJECT_TYPE: int { NONE, MAIN, PROFILING, UTILS, STAR, BASE_STAR, BINARY_STAR, BASE_BINARY_STAR, BINARY_CONSTITUENT_STAR }; const COMPASUnorderedMap OBJECT_TYPE_LABEL = { { OBJECT_TYPE::NONE, "Not_an_Object!" }, @@ -868,11 +868,11 @@ const COMPASUnorderedMap SN_ENGINE_LABEL = { // // Note that the CCSN value here replaces the SN value in the legacy code // The legacy code implemented these values as boolean flags, and the SN flag was always set when -// the USSN flag was set (but not the converse). In the legacy code when the ECSN flag was set +// the USSN flag was set (but not the converse). In the legacy code when the ECSN flag was set // the SN flag was not set. In the legacy code the PISN and PPISN flags were used to track history // and we only set for the "experienced" condition (I think). // -// To match the legacy code usage of these flags, here the "is" and "experienced" conditions +// To match the legacy code usage of these flags, here the "is" and "experienced" conditions // ("current" and "past" SN events) are implemented as bit maps - different values can be // ORed or ANDed into the bit map (that way the USSN and CCSN flags can be set at the same // time - necessary for the code flow (from the legacy code) - which we should probably one @@ -882,7 +882,7 @@ const COMPASUnorderedMap SN_ENGINE_LABEL = { // // A convenience function has been provided in utils.cpp to interpret the bit map (utils::SNEventType()). // Given an SN_EVENT bitmap (current or past), it returns (in priority order): -// +// // SN_EVENT::NONE iff no bits are set // SN_EVENT::CCSN iff CCSN bit is set and USSN bit is not set // SN_EVENT::ECSN iff ECSN bit is set @@ -894,12 +894,12 @@ const COMPASUnorderedMap SN_ENGINE_LABEL = { // SN_EVENT::HeSD iff HeSD bit is set // SN_EVENT::UNKNOWN otherwise // -enum class SN_EVENT: int { - NONE = 0, - CCSN = 1, - ECSN = 2, - PISN = 4, - PPISN = 8, +enum class SN_EVENT: int { + NONE = 0, + CCSN = 1, + ECSN = 2, + PISN = 4, + PPISN = 8, USSN = 16, AIC = 32, SNIA = 64, @@ -913,9 +913,9 @@ const COMPASUnorderedMap SN_EVENT_LABEL = { { SN_EVENT::PISN, "Pair Instability Supernova" }, { SN_EVENT::PPISN, "Pulsational Pair Instability Supernova" }, { SN_EVENT::USSN, "Ultra Stripped Supernova" }, - { SN_EVENT::AIC, "Accretion-Induced Collapse" }, - { SN_EVENT::SNIA, "Supernova Type Ia" }, - { SN_EVENT::HeSD, "Helium-shell detonation" }, + { SN_EVENT::AIC, "Accretion-Induced Collapse" }, + { SN_EVENT::SNIA, "Supernova Type Ia" }, + { SN_EVENT::HeSD, "Helium-shell detonation" }, { SN_EVENT::UNKNOWN, "Unknown Supernova Type" } }; ENABLE_BITMASK_OPERATORS(SN_EVENT); @@ -1069,7 +1069,7 @@ typedef std::vector COMPAS_VARIABLE_VECTOR; typedef struct OptionDetails { std::string optionStr; // name string std::string valueStr; // value string - std::string sourceStr; // source string (COMPAS DEFAULT or USER SUPPLIED) + std::string sourceStr; // source string (COMPAS DEFAULT or USER SUPPLIED) std::string typeStr; // detailed data type (e.g. UNSIGNED LONG INT) TYPENAME dataType; // short data type (e.g. INT, FLOAT, etc) std::string defaultStr; // default value string @@ -1163,7 +1163,7 @@ typedef struct KickParameters { typedef struct SupernovaDetails { // Holds attributes, flags - if the star went supernova KickParameters initialKickParameters; // User-supplied initial kick parameters - if present used in place of drawing randomly/from distributions - + double coreMassAtCOFormation; // Core mass of this star when it formed a compact object double coreRadiusAtCOFormation; // Core radius of this star when it formed a compact object double COCoreMassAtCOFormation; // Carbon Oxygen core mass of the star when it goes supernova and forms a compact object @@ -1176,8 +1176,8 @@ typedef struct SupernovaDetails { // Holds attributes, double kickMagnitude; // Kick magnitude the system received during the supernova (km s^-1) double kickMagnitudeRandom; // Random number U(0,1) for choosing the supernova kick magnitude - drawn once at star creation double rocketKickMagnitude; // Rocket kick magnitude the system received after the supernova (km s^-1) - double rocketKickPhi; // Rocket kick azimuthal angle phi the system received after the supernova - double rocketKickTheta; // Rocket kick polar angle theta the system received after the supernova + double rocketKickPhi; // Rocket kick azimuthal angle phi the system received after the supernova + double rocketKickTheta; // Rocket kick polar angle theta the system received after the supernova double meanAnomaly; // Mean anomaly at instantaneous time of the SN - uniform in [0, 2pi] double phi; // Kick angle in the orbital plane, defined CCW from the radial vector pointed away from the Companion (rad) [0, 2pi) SN_STATE supernovaState; // Indicates which star (or stars) are undergoing / have undergone a supernova event @@ -1218,7 +1218,7 @@ typedef struct RLOFProperties { double luminosity1; double luminosity2; - double starToRocheLobeRadiusRatio1; + double starToRocheLobeRadiusRatio1; double starToRocheLobeRadiusRatio2; double eccentricity; @@ -1233,7 +1233,7 @@ typedef struct RLOFProperties { bool isRLOF2; bool isCE; - + double massLossRateFromDonor; double accretionEfficiency; MT_TIMESCALE massTransferTimescale; diff --git a/src/utils.cpp b/src/utils.cpp index 536ec934e..80df052e7 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -30,7 +30,7 @@ namespace utils { * * @param [IN] p_Arr Sorted array to search over * @param [IN] p_x Value to search for - * + * * @return Vector containing indices of the lower and upper * bin edges containing x. If x < min(Arr), return * {-1, 0}. If x > max(Arr), return {0, -1}. If x @@ -62,8 +62,8 @@ namespace utils { * Calculate the value of the CDF of the Kroupa (2001) IMF at p_Mass * * If p_Mass is outside the bounds of the IMF (< p_Min or >= p_Max), the returned CDF value will be 0.0 - * - * + * + * * double CalculateCDFKroupa(const double p_Mass, const double p_Max, const double p_Min) * * @param [IN] p_Mass Mass value (in Msol) at which to calculate the CDF @@ -74,7 +74,7 @@ namespace utils { double CalculateCDFKroupa(const double p_Mass, const double p_Max, const double p_Min) { if ((p_Mass < p_Min) || (p_Mass >= p_Max)) return 0.0; // return 0.0 if mass is out of bounds of function - + double CDF = 0.0; if (p_Min <= KROUPA_BREAK_1 && @@ -182,7 +182,7 @@ namespace utils { * If p_Tolerance is > 0.0 it will be used in preference to the global tolerance values * If p_Tolerance is > 0.0, then p_Absolute determines if p_Tolerance should be treated as an absolute * tolerance (p_Absolute = true), or a relative tolerance (p_Absolute = false). - * + * * * int Compare(const double p_X, const double p_Y) * @@ -233,12 +233,12 @@ namespace utils { /* * Draw the angular components of the supernova kick theta and phi. * - * + * * DBL_DBL DrawKickDirection(const KICK_DIRECTION_DISTRIBUTION p_KickDirectionDistribution, const double p_KickDirectionPower) - * + * * @param [IN] p_KickDirectionDistribution The kick direction distribution to use - program option * @param [IN] p_KickDirectionPower Exponent for power law - program option - * @return Tuple containing theta and phi + * @return Tuple containing theta and phi */ DBL_DBL DrawKickDirection(const KICK_DIRECTION_DISTRIBUTION p_KickDirectionDistribution, const double p_KickDirectionPower) { @@ -469,23 +469,23 @@ namespace utils { * (as defined by Boost) * * In this context (the Boost context), a valid boolean is one of: - * + * * - 0|1 ("0" or "1") * - true|false ("true" or "false" - case insensitive) * - yes|no ("yes" or "no" - case insensitive) * - on|off ("on" or "off" - case insensitive) * * The function will retiurn one of {0, 1, 2, 3, 4, -1, -2, -3, -4} to indicate the result: - * + * * 0 = not a valid boolean * 1 = valid: 0|1 * 2 = valid: true|false * 3 = valid: yes|no * 4 = valid: on|off - * + * * A positive return value indicates the boolean value is TRUE; a negative, FALSE - * - * + * + * * int IsBOOL(const std::string p_Str) * * @param [IN] p_Str String to check @@ -513,8 +513,8 @@ namespace utils { * * In this context, to be a valid DOUBLE the string must convert to a * double successfully via the std::stod() function - * - * + * + * * int IsDOUBLE(const std::string p_Str) * * @param [IN] p_Str String to check @@ -545,8 +545,8 @@ namespace utils { * * In this context, to be a valid FLOAT the string must convert to a * double successfully via the std::stof() function - * - * + * + * * int IsFLOAT(const std::string p_Str) * * @param [IN] p_Str String to check @@ -577,8 +577,8 @@ namespace utils { * * In this context, to be a valid INT the string must convert to an * integer successfully via the std::stoi() function - * - * + * + * * int IsINT(const std::string p_Str) * * @param [IN] p_Str String to check @@ -609,8 +609,8 @@ namespace utils { * * In this context, to be a valid LONG DOUBLE the string must convert to a * long double successfully via the std::stold() function - * - * + * + * * int IsLONGDOUBLE(const std::string p_Str) * * @param [IN] p_Str String to check @@ -641,8 +641,8 @@ namespace utils { * * In this context, to be a valid LONG INT the string must convert to a * long integer successfully via the std::stol() function - * - * + * + * * int IsLONGINT(const std::string p_Str) * * @param [IN] p_Str String to check @@ -673,8 +673,8 @@ namespace utils { * * In this context, to be a valid UNSIGNED LONG INT the string must convert to a * unsigned long integer successfully via the std::stoul() function - * - * + * + * * int IsULONGINT(const std::string p_Str) * * @param [IN] p_Str String to check @@ -1046,7 +1046,7 @@ namespace utils { double term1 = ONE_OVER_KROUPA_POWER_1_PLUS1 * (KROUPA_BREAK_1_PLUS1_1 - PPOW(p_Min, KROUPA_POWER_PLUS1_1)); double term2 = ONE_OVER_KROUPA_POWER_2_PLUS1 * KROUPA_BREAK_1_POWER_1_2 * (KROUPA_BREAK_2_PLUS1_2 - KROUPA_BREAK_1_PLUS1_2); double term3 = ONE_OVER_KROUPA_POWER_3_PLUS1 * KROUPA_BREAK_1_POWER_1_2 * KROUPA_BREAK_2_POWER_2_3 * (PPOW(p_Max, KROUPA_POWER_PLUS1_3) - KROUPA_BREAK_2_PLUS1_3); - + double C1 = 1.0 / (term1 + term2 + term3); double C2 = C1 * KROUPA_BREAK_1_POWER_1_2; double C3 = C2 * KROUPA_BREAK_2_POWER_2_3; @@ -1170,10 +1170,10 @@ namespace utils { /* * Draw orbital period from the distribution specified by the user - * - * - * double SampleOrbitalPeriodDistribution(const ORBITAL_PERIOD_DISTRIBUTION p_Pdist, - * const double p_PdistMax, + * + * + * double SampleOrbitalPeriodDistribution(const ORBITAL_PERIOD_DISTRIBUTION p_Pdist, + * const double p_PdistMax, * const double p_PdistMin) * * @param [IN] p_Pdist The distribution to use to draw orbital period @@ -1181,8 +1181,8 @@ namespace utils { * @param [IN] p_PdistMin Orbital period distribution minimum * @return Orbital period in days */ - double SampleOrbitalPeriod(const ORBITAL_PERIOD_DISTRIBUTION p_Pdist, - const double p_PdistMax, + double SampleOrbitalPeriod(const ORBITAL_PERIOD_DISTRIBUTION p_Pdist, + const double p_PdistMax, const double p_PdistMin) { double orbitalPeriod; @@ -1204,15 +1204,15 @@ namespace utils { /* * Draw semi-major axis from the distribution specified by the user - * - * - * std::tuple SampleSemiMajorAxis(const SEMI_MAJOR_AXIS_DISTRIBUTION p_Adist, - * const double p_AdistMax, - * const double p_AdistMin, - * const double p_AdistPower, - * const double p_PdistMax, - * const double p_PdistMin, - * const double p_Mass1, + * + * + * std::tuple SampleSemiMajorAxis(const SEMI_MAJOR_AXIS_DISTRIBUTION p_Adist, + * const double p_AdistMax, + * const double p_AdistMin, + * const double p_AdistPower, + * const double p_PdistMax, + * const double p_PdistMin, + * const double p_Mass1, * const double p_Mass2) * * @param [IN] p_Adist The distribution to use to draw semi-major axis @@ -1231,13 +1231,13 @@ namespace utils { * ERROR::UNKNOWN_SEMI_MAJOR_AXIS_DISTRIBUTION the SEMI_MAJOR_AXIS_DISTRIBUTION * passed in p_Adist is unknown, and the returned semi-major axis will be 0.0 */ - std::tuple SampleSemiMajorAxis(const SEMI_MAJOR_AXIS_DISTRIBUTION p_Adist, - const double p_AdistMax, - const double p_AdistMin, - const double p_AdistPower, - const double p_PdistMax, - const double p_PdistMin, - const double p_Mass1, + std::tuple SampleSemiMajorAxis(const SEMI_MAJOR_AXIS_DISTRIBUTION p_Adist, + const double p_AdistMax, + const double p_AdistMin, + const double p_AdistPower, + const double p_PdistMax, + const double p_PdistMin, + const double p_Mass1, const double p_Mass2) { ERROR error = ERROR::NONE; @@ -1300,7 +1300,7 @@ namespace utils { /* * Returns a single SN type based on the SN_EVENT parameter passed - * + * * Returns (in priority order): * * SN_EVENT::NONE iff no bits are set @@ -1313,7 +1313,7 @@ namespace utils { * SN_EVENT::SNIA iff SNIA bit is set and HeSD bit is not set * SN_EVENT::HeSD iff HeSD bit is set * SN_EVENT::UNKNOWN otherwise - * + * * * @param [IN] p_SNEvent SN_EVENT mask to check for SN event type * @return SN_EVENT @@ -1354,7 +1354,7 @@ namespace utils { * ERROR::NONE if no error occurred * ERROR::NO_CONVERGENCE if the Newton-Raphson iteration did not converge * ERROR::OUT_OF_BOUNDS if the eccentric anomaly returned is < 0 or > 2pi - * If the error returned is not ERROR:NONE, use the eccentric anomaly and + * If the error returned is not ERROR:NONE, use the eccentric anomaly and * true anomaly returned at your own risk */ std::tuple SolveKeplersEquation(const double p_MeanAnomaly, const double p_Eccentricity) { @@ -1439,10 +1439,10 @@ namespace utils { * Tolerance for Boost bracket_and_solve_root() * * Determines if the brackets around the root are within the COMPAS defined tolerance. - * - * + * + * * bool BracketTolerance(const double p_Bracket1, const double p_Bracket2) - * + * * @param [IN] p_Bracket1 Bracket bound 1 * @param [IN] p_Bracket2 Bracket bound 2 * @return Boolean indicating if the brackets bounds are within tolerance @@ -1456,19 +1456,19 @@ namespace utils { /* * Announce COMPAS - * + * * Constructs and returns a splash string. Prints string to stdout if required. * * * std::string SplashScreen(const bool p_Print) - * + * * @param [IN] p_Print Boolean indicating whether splash string should be printed. Default is TRUE * @return Splash string */ std::string SplashScreen(const bool p_Print) { // Construct the splash string - std::string splashString = "\nCOMPAS v" + + std::string splashString = "\nCOMPAS v" + VERSION_STRING + " (gsl v" + GetGSLVersion() + ", boost v" + GetBOOSTVersion() + ", HDF5 v" + GetHDF5Version() + ")" + "\nCompact Object Mergers: Population Astrophysics and Statistics" "\nby Team COMPAS (http://compas.science/index.html)" @@ -1487,10 +1487,10 @@ namespace utils { * * Timesteps file is expected to be an ascii file with one timestep per record. * Timesteps must be > 0.0 - * - * + * + * * std::tuple ReadTimesteps(const std::string p_TimestepsFileName) - * + * * @param [IN] p_TimestepsFileName Filename to be read - should be fully qualified * @return Tuple containing error value and timesteps vector * The error value returned will be: @@ -1507,7 +1507,7 @@ namespace utils { std::tuple ReadTimesteps(const std::string p_TimestepsFileName) { ERROR error = ERROR::NONE; // error - initially NONE - + DBL_VECTOR timesteps; // timesteps vector if (p_TimestepsFileName.empty()) { // timesteps filename empty? @@ -1537,7 +1537,7 @@ namespace utils { rec = trim(rec); // remove leading and trailing blanks - if (!(rec.empty() || rec[0] == '#')) { // blank record or comment? + if (!(rec.empty() || rec[0] == '#')) { // blank record or comment? try { // no - process it size_t lastChar; long double v = std::stold(rec, &lastChar); // try conversion @@ -1553,7 +1553,7 @@ namespace utils { else { // ok - timestep >= 0.0 timesteps.push_back(v); // add timestep to timesteps vector } - + numTimesteps++; // increment number of timesteps read if (numTimesteps >= ABSOLUTE_MAXIMUM_TIMESTEPS) { // number of timesteps exceeds maximum? error = ERROR::TOO_MANY_TIMESTEPS_IN_TIMESTEPS_FILE; // yes - fail @@ -1602,12 +1602,12 @@ namespace utils { * would just create the directories as necessary and not report which directories in the path were pre-existing * and which were newly created. We want to be able to clean up any directories we created but didn't use (because * we had an error somewhere perhaps...), and to do that we need to know which directories were actually created. - * + * * Returns a vector of paths not created. - * - * + * + * * std::tuple CreateDirectory(const std::string p_Path) - * + * * @param [IN] p_Path Path specifying directories to be created * @return Tuple containing error value, error string, and vector of directories created * The error value returned will be: @@ -1643,12 +1643,12 @@ namespace utils { else { // not ok... error = ERROR::UNABLE_TO_CREATE_DIRECTORY; // set error errStr = path; // ... and error string - } + } } catch (...) { // unhandled problem... error = ERROR::UNABLE_TO_CREATE_DIRECTORY; // set error errStr = path; // ... and error string - } + } } if (error != ERROR::NONE) { // problem? @@ -1665,13 +1665,13 @@ namespace utils { * Remove directories if they are empty * * Iterate in reverse order over the vector of paths passed (i.e. walk up the directory tree from the leaf) and - * remove empty directories - but stop at the first non-empty directory (or error). - * + * remove empty directories - but stop at the first non-empty directory (or error). + * * Returns a vector of paths not removed. - * - * + * + * * std::tuple RemoveDirectories(const STR_VECTOR p_Paths) - * + * * @param [IN] p_Path Vector of paths to be removed * @return Tuple containing error value, error string, and vector of directories not removed * The error value returned will be: @@ -1715,7 +1715,7 @@ namespace utils { error = ERROR::UNABLE_TO_REMOVE_DIRECTORY; // set error errStr = path; // ... and error string break; - } + } } else { // problem... // either the directory does not exist or is not empty @@ -1734,26 +1734,26 @@ namespace utils { /* * Constructs a vector of strings that represent the stack trace for the current thread * (COMPAS is single-threaded, so in our case, the current process executing COMPAS). - * + * * We use the gcc library functions to construct the stack trace (gcc calls this a "backtrace"): - * + * * - backtrace(), which provides a list of pointers to each of the functions that make * up the stack trace (the functions called, all the way from main() to the current * point of execution - this is an instantaneous list, not historic). - * - * + * + * * - backtrace_symbols(), translates the function pointers obtained from backtrace() into * an array of strings that are the function names. This typically only works for COMPAS * functions (because we build COMPAS with debug info included). We most likely won't have * symbols for libraries (e.g. libc), so for non-COMPAS functions we insert the string * "~~LIBFUNC~~" as the function name so users can identify non-COMPAS entries and handle * them accordingly. - * + * * Returns a vector of strings representing the function names that comprise the stack trace. - * - * + * + * * STR_VECTOR GetStackTrace() - * + * * @return Vector of strings representing the function names that comprise the stack trace */ STR_VECTOR GetStackTrace() { @@ -1763,7 +1763,7 @@ namespace utils { void* trace[MAX_STACK_TRACE_SIZE]; // stack trace char** strings = (char **)NULL; // stack trace strings std::size_t traceSize = 0; // stack trace size - + traceSize = backtrace(trace, MAX_STACK_TRACE_SIZE); // get stack trace size strings = backtrace_symbols(trace, traceSize); // get stack trace with symbols @@ -1825,9 +1825,9 @@ namespace utils { /* * Returns gsl version string * - * + * * std::string GetGSLVersion() - * + * * @return String containing GSL version in format MM.mm.rr * Will be "Not available" if not able to retrieve the actual value */ @@ -1850,9 +1850,9 @@ namespace utils { /* * Returns HDF5 library version string * - * + * * std::string GetHDF5Version() - * + * * @return String containing HDF5 library version in format MM.mm.rr * Will be "Not available" if not able to retrieve the actual value */ diff --git a/src/utils.h b/src/utils.h index a5e3d1e5a..71be469f0 100755 --- a/src/utils.h +++ b/src/utils.h @@ -27,7 +27,7 @@ namespace utils { double ConvertPeriodInDaysToSemiMajorAxisInAU(const double p_Mass1, const double p_Mass2, const double p_Period); DBL_DBL DrawKickDirection(const KICK_DIRECTION_DISTRIBUTION p_KickDirectionDistribution, const double p_KickDirectionPower); - + bool Equals(std::string p_Str1, std::string p_Str2); bool FileExists(const std::string& p_Filename); @@ -108,7 +108,7 @@ namespace utils { std::string PadLeadingZeros(const std::string p_Str, const std::size_t p_MaxLength); std::string PadTrailingSpaces(const std::string p_Str, const std::size_t p_MaxLength); - + std::string& ltrim(std::string& p_Str); std::string& rtrim(std::string& p_Str); std::string& trim(std::string& p_Str); @@ -125,13 +125,13 @@ namespace utils { double SampleMassRatio(const MASS_RATIO_DISTRIBUTION p_Qdist, const double p_Max, const double p_Min); double SampleMetallicity(const METALLICITY_DISTRIBUTION p_Zdist, const double p_Max, const double p_Min); double SampleOrbitalPeriod(const ORBITAL_PERIOD_DISTRIBUTION p_Pdist, const double p_PdistMax, const double p_PdistMin); - std::tuple SampleSemiMajorAxis(const SEMI_MAJOR_AXIS_DISTRIBUTION p_Adist, - const double p_AdistMax, - const double p_AdistMin, - const double p_AdistPower, - const double p_PdistMax, - const double p_PdistMin, - const double p_Mass1, + std::tuple SampleSemiMajorAxis(const SEMI_MAJOR_AXIS_DISTRIBUTION p_Adist, + const double p_AdistMax, + const double p_AdistMin, + const double p_AdistPower, + const double p_PdistMax, + const double p_PdistMin, + const double p_Mass1, const double p_Mass2); SN_EVENT SNEventType(const SN_EVENT p_SNEvent); diff --git a/src/vector3d.cpp b/src/vector3d.cpp index 86539b2b5..982a4565a 100644 --- a/src/vector3d.cpp +++ b/src/vector3d.cpp @@ -7,7 +7,7 @@ Vector3d::Vector3d() { - m_ObjectId = globalObjectId++; + m_ObjectId = globalObjectId++; m_x = 0.0; m_y = 0.0; @@ -18,8 +18,8 @@ Vector3d::Vector3d() { Vector3d::Vector3d(const double p_x, const double p_y, const double p_z) { // Initialize member variables - - m_ObjectId = globalObjectId++; + + m_ObjectId = globalObjectId++; m_x = p_x; m_y = p_y; @@ -29,8 +29,8 @@ Vector3d::Vector3d(const double p_x, const double p_y, const double p_z) { // Regular constructor - initialise from std:vector Vector3d::Vector3d(const DBL_VECTOR p_Vec) { - m_ObjectId = globalObjectId++; - + m_ObjectId = globalObjectId++; + size_t numValuesSupplied = p_Vec.size(); THROW_ERROR_IF(numValuesSupplied != 3, ERROR::EXPECTED_3D_VECTOR); // this is a coding error @@ -43,33 +43,33 @@ Vector3d::Vector3d(const DBL_VECTOR p_Vec) { /* * Redefine a vector from one coordinate basis to another using Euler Angles - * - * For a vector defined in a new coordinate basis, (X',Y',Z'), we want to - * find it's values in a previous coordinate basis (X,Y,Z) so that we can + * + * For a vector defined in a new coordinate basis, (X',Y',Z'), we want to + * find it's values in a previous coordinate basis (X,Y,Z) so that we can * add the new vector to vectors defined in the previous basis. * * For a change of basis from (X,Y,Z)->(X',Y',Z') - * + * * ThetaE [0, pi] is the angle between Z and Z', * Vector N := Z x Z' (cross product) * PhiE [0, 2pi) is the angle between X and N * PsiE [0, 2pi) is the angle between X' and N - * - * These angles uniquely determine the change of basis, which is applied + * + * These angles uniquely determine the change of basis, which is applied * in the form of a rotation matrix R as a function of these angles. - * + * * V_{X,Y,Z} = R * V_{X',Y',Z'} gives the vector in the original coordinates. * * For details, see: * https://en.wikipedia.org/wiki/Euler_angles * https://en.wikipedia.org/wiki/Change_of_basis * - * + * * Vector3d::ChangeBasis(const double p_ThetaE, const double p_PhiE, const double p_PsiE) - * - * @param [IN] p_ThetaE Euler angle Theta (rad) - * @param [IN] p_PhiE Euler angle Phi (rad) - * @param [IN] p_PsiE Euler angle Psi (rad) + * + * @param [IN] p_ThetaE Euler angle Theta (rad) + * @param [IN] p_PhiE Euler angle Phi (rad) + * @param [IN] p_PsiE Euler angle Psi (rad) * @return Vector in previous basis */ Vector3d Vector3d::ChangeBasis(const double p_ThetaE, const double p_PhiE, const double p_PsiE) { @@ -81,7 +81,7 @@ Vector3d Vector3d::ChangeBasis(const double p_ThetaE, const double p_PhiE, const #define sPhi sin(p_PhiE) #define sPsi sin(p_PsiE) - // Define the Rotation Matrix + // Define the Rotation Matrix std::vector rotationMatrix = { { cPhi * cPsi - sPhi * cTheta * sPsi , -cPhi * sPsi - sPhi * cTheta * cPsi , sTheta * sPhi }, { sPhi * cPsi + cPhi * cTheta * sPsi , -sPhi * sPsi + cPhi * cTheta * cPsi , -sTheta * cPhi }, @@ -112,9 +112,9 @@ Vector3d Vector3d::ChangeBasis(const double p_ThetaE, const double p_PhiE, const /* * Right multiply a matrix by a vector * - * Vector3d MatrixMult(const std::vector& p_matrix, const Vector3d& p_vector) + * Vector3d MatrixMult(const std::vector& p_matrix, const Vector3d& p_vector) * - * @param [IN] p_Matrix matrix + * @param [IN] p_Matrix matrix * @param [IN] p_Vec vector * @return angle between them, in radians */ @@ -141,7 +141,7 @@ Vector3d Vector3d::MatrixMult(const std::vector& p_Matrix, const Vec * * Vector3d RotateVectorAboutX(const double p_Theta) * - * @param [IN] p_Theta Rotation angle (rad) + * @param [IN] p_Theta Rotation angle (rad) * @return Vector after rotation */ Vector3d Vector3d::RotateVectorAboutX(const double p_Theta) { @@ -150,7 +150,7 @@ Vector3d Vector3d::RotateVectorAboutX(const double p_Theta) { #define sTheta sin(p_Theta) // Define the Rotation Matrix - std::vector RotationMatrix = { + std::vector RotationMatrix = { { 1.0, 0.0, 0.0 }, { 0.0, cTheta, -sTheta }, { 0.0, sTheta, cTheta }}; @@ -168,7 +168,7 @@ Vector3d Vector3d::RotateVectorAboutX(const double p_Theta) { * * Vector3d RotateVectorAboutY( const double p_Theta) * - * @param [IN] p_Theta Rotation angle (rad) + * @param [IN] p_Theta Rotation angle (rad) * @return Vector after rotation */ Vector3d Vector3d::RotateVectorAboutY( const double p_Theta) { @@ -195,7 +195,7 @@ Vector3d Vector3d::RotateVectorAboutY( const double p_Theta) { * * Vector3d RotateVectorAboutZ( const double p_Theta) * - * @param [IN] p_Theta Rotation angle (rad) + * @param [IN] p_Theta Rotation angle (rad) * @return Vector after rotation */ Vector3d Vector3d::RotateVectorAboutZ( const double p_Theta) { diff --git a/src/vector3d.h b/src/vector3d.h index d450c4834..b38a306e4 100644 --- a/src/vector3d.h +++ b/src/vector3d.h @@ -21,14 +21,14 @@ class Vector3d { virtual ~Vector3d() {} - // object identifiers - all classes have these + // object identifiers - all classes have these OBJECT_ID ObjectId() { return m_ObjectId; } // object id for vectors - ordinal value from enum OBJECT_TYPE ObjectType() { return OBJECT_TYPE::NONE; } // object type for vectors - always "NONE" OBJECT_PERSISTENCE ObjectPersistence() { return OBJECT_PERSISTENCE::PERMANENT; } // object persistence for vectors - always "PERMANENT" STELLAR_TYPE StellarType() { return STELLAR_TYPE::NONE; } // stellar type for vectors - always "NONE" - // getters + // getters DBL_VECTOR asDBL_VECTOR() const { return { (*this)[0], (*this)[1] , (*this)[2]} ; } double Magnitude() const { return std::sqrt(Dot(*this, *this)); } double xValue() const { return m_x; } @@ -40,12 +40,12 @@ class Vector3d { double& operator [] (const size_t p_i) { THROW_ERROR_IF(p_i < 0 || p_i > 2, ERROR::INDEX_OUT_OF_RANGE); // this is a code defect - + if (p_i == 0) return m_x; else if (p_i == 1) return m_y; else return m_z; } - + void operator = (const Vector3d p_Vec) { UpdateVector(p_Vec[0], p_Vec[1], p_Vec[2]); } void operator += (const Vector3d p_Vec) { *this = (*this) + p_Vec; } @@ -55,16 +55,16 @@ class Vector3d { for (size_t i=0; i<3; i++) vec[i] = (*this)[i] + p_Vec[i]; return vec; } - + Vector3d operator - (const Vector3d p_Vec) { Vector3d vec; for (size_t i = 0; i < 3; i++) vec[i] = (*this)[i] - p_Vec[i]; return vec; } - + Vector3d operator * (const double p_Scalar) { // for Vector3d * scalar Vector3d vec; - for (size_t i = 0; i < 3; i++) vec[i] = (*this)[i] * p_Scalar; + for (size_t i = 0; i < 3; i++) vec[i] = (*this)[i] * p_Scalar; return vec; } friend Vector3d operator * (const double p_Scalar, Vector3d p_Vec) { return p_Vec * p_Scalar; }; // for scalar * Vector3d @@ -78,19 +78,19 @@ class Vector3d { friend std::ostream &operator << (std::ostream &p_os, Vector3d const p_Vec) { return p_os << "{" << p_Vec[0] << ", " << p_Vec[1] << ", " << p_Vec[2] << "}"; } - // member functions + // member functions static double AngleBetween(const Vector3d& p_Vec1, const Vector3d& p_Vec2) { return std::acos(Dot(p_Vec1, p_Vec2) / (p_Vec1.Magnitude() * p_Vec2.Magnitude())); } Vector3d ChangeBasis(const double p_ThetaE, const double p_PhiE, const double p_PsiE); static Vector3d Cross(const Vector3d& p_a, const Vector3d& p_b) { - + Vector3d result = Vector3d(0.0, 0.0, 0.0); - + result[0] = p_a[1] * p_b[2] - p_a[2] * p_b[1]; result[1] = p_a[2] * p_b[0] - p_a[0] * p_b[2]; result[2] = p_a[0] * p_b[1] - p_a[1] * p_b[0]; - + return result; } @@ -106,7 +106,7 @@ class Vector3d { Vector3d RotateVectorAboutY(const double p_Theta); Vector3d RotateVectorAboutZ(const double p_Theta); - Vector3d UnitVector() { return *this / (*this).Magnitude(); } + Vector3d UnitVector() { return *this / (*this).Magnitude(); } protected: diff --git a/src/yaml.cpp b/src/yaml.cpp index 557e5ea72..c304e383e 100644 --- a/src/yaml.cpp +++ b/src/yaml.cpp @@ -14,7 +14,7 @@ * * Code to create a new YAML file based on current COMPAS defaults and any user-input option values. * See yaml.h for description of the YAML template. - * + * * There is no doubt that some of the code here is not the most efficient way of doing this, but realistically * this will be run once or twice every not very often - and it runs in a fraction of a second - so I'm not going * to engage in premature optimisation... @@ -27,10 +27,10 @@ namespace yaml { * * Read YAML template from file passed in p_YAMLtemplateName. * Replace content of default template 'yamlTemplate' declared in yaml.h if read ok. - * - * + * + * * int ReadYAMLtemplate(const std::string p_YAMLtemplateName) - * + * * @param [IN] p_YAMLtemplateName Filename to be read - should be fully qualified * @return Integer result: * -1 indicates IO error @@ -45,7 +45,7 @@ namespace yaml { std::ifstream yamlTemplateFile(p_YAMLtemplateName); // yes - open the file if (yamlTemplateFile.is_open()) { // open ok? - + std::vector yamlTemplateContent; // yes - file content std::string rec; // record read from file @@ -62,7 +62,7 @@ namespace yaml { } else result = 0; // no - YAML template file does not exist - return result; + return result; } @@ -71,10 +71,10 @@ namespace yaml { * * Writes YAML file content passed in p_YAMLcontent to file passed in p_YAMLname. * Will prompt user for overwrite if file already exists. - * - * + * + * * int WriteYAMLfile(const std::string p_YAMLname, const std::vector p_YAMLcontent) - * + * * @param [IN] p_YAMLname Filename to be written - should be fully qualified * @param [IN] p_YAMLcontent YAML content to be written - vector of strings * @return Integer result: @@ -101,7 +101,7 @@ namespace yaml { ch = std::cin.get(); // get response character (one character at a time) charsInput++; // count of characters input } while (ch != "\n"); // while not newline - ch = charsInput == 2 ? lastCh : ""; // we want just 1 character + newline - character prior to newline + ch = charsInput == 2 ? lastCh : ""; // we want just 1 character + newline - character prior to newline if (!ch.empty()) response = utils::ToLower(ch); // set user response } while (response != "y" && response != "n"); // while not valid response doWrite = response == "y"; // set write flag @@ -131,12 +131,12 @@ namespace yaml { * Constructs YAML file content based on YAML template read from file passed in * p_YAMLtemplateName. If no filename passed in p_YAMLtemplateName, the default * template from yaml.h is used. - * + * * Constructed content is written to file passed in p_YAMLfilename. - * - * + * + * * void MakeYAMLfile(const std::string p_YAMLfilename, const std::string p_YAMLtemplateName) - * + * * @param [IN] p_YAMLfilename Filename to be written - should be fully qualified * @param [IN] p_YAMLtemplateName Template filename to be read - should be fully qualified */ @@ -187,7 +187,7 @@ namespace yaml { case TYPENAME::LONGDOUBLE: { long double v = std::stold(p_Str); ss << std::fixed << std::setprecision(v < 100 ? 6 : 2) << v; } break; case TYPENAME::BOOL : { std::string s = p_Str; s = utils::trim(s); ss << (s == "1" || utils::Equals(s, "true") ? "True" : "False"); } break; case TYPENAME::STRING : { - bool vecType = (p_detailedType == "VECTOR"); // vector of strings? + bool vecType = (p_detailedType == "VECTOR"); // vector of strings? size_t len = p_Str.length(); // str length if (len == 0) { // empty str? ss << (vecType ? "{ }" : "''"); // yes - just quotes/braces (for vector) @@ -201,7 +201,7 @@ namespace yaml { if (!vecType) { // VECTOR ? if (p_Str[0] != '\'' || p_Str[len - 1] != '\'') { ss << "'"; ss << p_Str; ss << "'"; } // no - add quotes if necessary - else ss << p_Str; // has quotes - just pass through + else ss << p_Str; // has quotes - just pass through } else { // yes - string vector - parse and format string std::string str = p_Str; // string to be formatted @@ -216,7 +216,7 @@ namespace yaml { if (v.length() > 0) { // skip empty substring if (!first) ss << ", "; // add comma if not first element if (v[0] != '\'' || v[len - 1] != '\'') { ss << "'"; ss << v; ss << "'"; } // add quotes if necessary - else ss << v; // has quotes - just pass through + else ss << v; // has quotes - just pass through } start = end + 1; // for next space first = false; // not first element @@ -225,13 +225,13 @@ namespace yaml { if (v.length() > 0) { // anything there? if (!first) ss << ", "; // yes - add comma if not first element (shouldn't be, but just in case...) if (v[0] != '\'' || v[len - 1] != '\'') { ss << "'"; ss << v; ss << "'"; } // add quotes if necessary - else ss << v; // has quotes - just pass through + else ss << v; // has quotes - just pass through } if (str[0] != '{' || str[len - 1] != '}') ss << " }"; // add close brace if necessary } else ss << p_Str; // has braces - just pass it through } - } + } } break; default: ss << p_Str; // just pass it through } @@ -311,7 +311,7 @@ namespace yaml { // no... // we have no template - this should never happen (we've got a default template in the code, // but we need to deal with that being missing just in case) - so we'll just write the COMPAS - // options alphabetically within the datatype categories (booleanChoices, numericalChoices, + // options alphabetically within the datatype categories (booleanChoices, numericalChoices, // stringChoices, listChoices) std::cerr << "*WARNING* No YAML template - will write COMPAS options alphabetically.\n"; // announce warning @@ -331,11 +331,11 @@ namespace yaml { for (size_t optionIdx = 0; optionIdx < optionDetails.size(); optionIdx++) { // for each COMPAS option if (optionDetails[optionIdx].dataType == TYPENAME::BOOL) { // boolean option? - if (category != "booleanChoices") continue; // skip if this category is not booleanChoices + if (category != "booleanChoices") continue; // skip if this category is not booleanChoices } else if (optionDetails[optionIdx].dataType == TYPENAME::STRING) { // string, or vector of strings, option? if (optionDetails[optionIdx].typeStr == "VECTOR") { // ... vector of strings - if (category != "listChoices") continue; // skip if this category is not listChoices + if (category != "listChoices") continue; // skip if this category is not listChoices } else { // ... string if (category != "stringChoices") continue; // skip if this category is not stringChoices @@ -352,8 +352,8 @@ namespace yaml { optionDetails[optionIdx].defaultStr, // option default string "", // no comment utils::Equals(optionDetails[optionIdx].sourceStr, "user_supplied"), // user specified option value? - optionDetails[optionIdx].dataType, // option (short) data type - optionDetails[optionIdx].typeStr); // option (detailed) data type + optionDetails[optionIdx].dataType, // option (short) data type + optionDetails[optionIdx].typeStr); // option (detailed) data type } } } @@ -445,7 +445,7 @@ namespace yaml { for (std::size_t optionIdx = 0; optionIdx < optionDetails.size(); optionIdx++) { // for each COMPAS option std::string compasOptionStr = optionDetails[optionIdx].optionStr; // COMPAS option name string - if (utils::Equals(optionDetails[optionIdx].sourceStr, "calculated")) continue; // ignore calculated options + if (utils::Equals(optionDetails[optionIdx].sourceStr, "calculated")) continue; // ignore calculated options if (utils::Equals(compasOptionStr, templateOptionStr)) { // match? found = true; // yes @@ -455,15 +455,15 @@ namespace yaml { optionDetails[optionIdx].defaultStr, // option default string commentStr, // comment string (as written in the YAML template) utils::Equals(optionDetails[optionIdx].sourceStr, "user_supplied"), // user specified option value? - optionDetails[optionIdx].dataType, // option (short) data type + optionDetails[optionIdx].dataType, // option (short) data type optionDetails[optionIdx].typeStr); // option (detailed) data type break; // we're done } } if (!found) { // matching COMPAS option string found? - std::cerr << "*WARNING* Option '" - << templateOptionStr + std::cerr << "*WARNING* Option '" + << templateOptionStr << "' in YAML template is not a valid COMPAS option - ignored.\n"; // no - announce warning } } @@ -477,11 +477,11 @@ namespace yaml { std::string compasOptionStr = optionDetails[optionIdx].optionStr; // option name string - if (utils::Equals(optionDetails[optionIdx].sourceStr, "calculated")) continue; // ignore calculated options - if (utils::Equals(compasOptionStr, "help")) continue; // ignore 'help' option - if (utils::Equals(compasOptionStr, "version")) continue; // ignore 'version' option - if (utils::Equals(compasOptionStr, "create-YAML-file")) continue; // ignore 'create-yaml-file' option - if (utils::Equals(compasOptionStr, "YAML-template")) continue; // ignore 'YAML-template' option + if (utils::Equals(optionDetails[optionIdx].sourceStr, "calculated")) continue; // ignore calculated options + if (utils::Equals(compasOptionStr, "help")) continue; // ignore 'help' option + if (utils::Equals(compasOptionStr, "version")) continue; // ignore 'version' option + if (utils::Equals(compasOptionStr, "create-YAML-file")) continue; // ignore 'create-yaml-file' option + if (utils::Equals(compasOptionStr, "YAML-template")) continue; // ignore 'YAML-template' option bool match = false; for (size_t yamlIdx = 0; yamlIdx < yamlOptionStrings.size(); yamlIdx++) { // for each YAML option name @@ -494,7 +494,7 @@ namespace yaml { if (!match) { // COMPAS option in YAML options? if (!extra) { // no - first extra record? extra = true; // yes - flag it - SET_STRINGS("\n\n### Additional COMPAS options not found in YAML template ###", "", "", "", "", "");// header record for YAML file output + SET_STRINGS("\n\n### Additional COMPAS options not found in YAML template ###", "", "", "", "", "");// header record for YAML file output } ProcessOption(compasOptionStr, // option name string (as written in the COMPAS OPTIONS class) optionDetails[optionIdx].valueStr, // option value string @@ -502,7 +502,7 @@ namespace yaml { optionDetails[optionIdx].defaultStr, // option default string "", // no comment utils::Equals(optionDetails[optionIdx].sourceStr, "user supplied"), // user specified option value? - optionDetails[optionIdx].dataType, // option (short) data type + optionDetails[optionIdx].dataType, // option (short) data type optionDetails[optionIdx].typeStr); // option (detailed) data type } } @@ -534,7 +534,7 @@ namespace yaml { size_t commentPos = allowedPos + maxAllowedStrLen + 4; // position of comment string for (size_t idx = 0; idx < yamlRecords.size(); idx++) { // for each YAML record std::string s = yamlRecords[idx]; // start with partially constructed record - + if (yamlRecords[idx].substr(0, 3) == "OPT") { // option record? // yes - header and blank records skipped here size_t len = s.length(); // current length of record @@ -561,7 +561,7 @@ namespace yaml { int writeResult = WriteYAMLfile(p_YAMLfilename, yamlRecords); // write records to file if (writeResult < 0) std::cerr << "*ERROR* File '" << p_YAMLfilename << "' not written: IO error.\n"; // announce IO error else if (writeResult == 0) std::cout << "File '" << p_YAMLfilename << "' not written - file already exists.\n"; // announce already exists - else std::cout << "File '" << p_YAMLfilename << "' written.\n"; // announce success + else std::cout << "File '" << p_YAMLfilename << "' written.\n"; // announce success } } #undef SET_STRINGS diff --git a/src/yaml.h b/src/yaml.h index e64190982..67daf66ec 100644 --- a/src/yaml.h +++ b/src/yaml.h @@ -11,7 +11,7 @@ namespace yaml { // 1. The following records will be automatically written to the start of YAML file: // ##~!!~## COMPAS option values // ##~!!~## Created at ddd MMM DD HH:MM:SS YYYY by COMPAS vxx.yy.zz -// ##~!!~## +// ##~!!~## // ##~!!~## The default COMPAS YAML file (``compasConfigDefault.yaml``), as distributed, has // ##~!!~## all COMPAS option entries commented so that the COMPAS default value for the // ##~!!~## option is used by default. To use a value other than the COMPAS default value, @@ -34,7 +34,7 @@ namespace yaml { // // 0001 ##~!!~## COMPAS option values // 0002 ##~!!~## File Created Tue Feb 14 13:09:06 2023 by COMPAS v02.34.06 -// 0003 ##~!!~## +// 0003 ##~!!~## // 0004 ##~!!~## The default COMPAS YAML file (``compasConfigDefault.yaml``), as distributed, has // 0005 ##~!!~## all COMPAS option entries commented so that the COMPAS default value for the // 0006 ##~!!~## option is used by default. To use a value other than the COMPAS default value, @@ -61,13 +61,13 @@ namespace yaml { // The blank line at line 0014 will be preserved. // The header "### STELLAR PROPERTIES" on line 0015 will be preserved. // The string beginning with "# Default: " and extending to the next '#' on line 0016 will not be preserved (but will be replaced by COMPAS). -// The string beginning with "# Options: " and extending to the next '#' (or, in this case because there is no subsequent #, the end of the +// The string beginning with "# Options: " and extending to the next '#' (or, in this case because there is no subsequent #, the end of the // line) on line 0016 will not be preserved (but will be replaced by COMPAS). // The comment "third comment" on line 0016 will not be preserved - there is no "# " prefix, so it will be subsumed by the "# Options: " string // (which extends from "# Options: " to the end of the line). -// The default COMPAS YAML template follows +// The default COMPAS YAML template follows namespace { std::vector yamlTemplate {