Polytropic Equation of State implementation
In[]:=
ClearAll[EoS];EoS[asoc_][key_]:=asoc[key]/;MemberQ[Keys[asoc],key]
In[]:=
EoSPoly[k_,Γ_]:=Module{ρ}, ρ[p_?NumericQ]:=+;(*Returnsenergy-densitygivenpressure*) EoS<| "name"->"PolyEos("<>ToString[k]<>"|"<>ToString[Γ]<>")", "k"->k,"γ"->Γ, "ρ"->ρ |>
1
Γ
p
k
p
Γ-1
TOVsolver for TOV equations in usual form
In[]:=
ClearAll[TOVSolver`solution];TOVSolver`solution[asoc_][key_]:=asoc[key]/;MemberQ[Keys[asoc],key]
In[]:=
Options[TOVSolver]="rmin"->1.*, (*NDSolveParams*) AccuracyGoal12, PrecisionGoal12, MaxSteps->;TOVSolver[pc_,eos_]:=Module{eqs,p,ρ,ρc,m,mc,r,rc,sol},rc=OptionValue[TOVSolver,"rmin"];ρ=eos["ρ"];ρc=ρ[pc];mc=πρc;eqs=m'[r]==4πρ[r],p'[r]==,m[0]==mc,p[0]==pc;sol=First@NDSolve[eqs,{m,p},{r,rc,20},Method->{"StiffnessSwitching"},AccuracyGoalOptionValue[TOVSolver,AccuracyGoal],PrecisionGoalOptionValue[TOVSolver,PrecisionGoal],MaxStepsOptionValue[TOVSolver,MaxSteps]];{m,p}={m,p}/.sol;Module[{ri,pi,ρi,mi},ri={rc}~Join~m["Coordinates"][[1]];pi={pc}~Join~p["ValuesOnGrid"];mi={mc}~Join~m["ValuesOnGrid"];ρi=Map[ρ[#]&,pi];TOVSolver`solution[<|"eos"->eos,"pc"->pc,"ρc"->ρc,"mc"->mc,"R"->Last@ri,"M"->Last@mi|>]]
-4
10
6
10
4
3
2
rc
2
r
(ρ[r]+p[r])(4πp[r]+m[r])
3
r
(r+0.001)(r+0.001-2m[r])
Mass-Radius curves for polytropes
In[]:=
EOSValues=EoSPoly[0.05,N@#]&/@Table+,{i,0,4};
8
6
i
6
In[]:=
data=ParallelTable[Table[Quiet@TOVSolver[,e],{i,-5,1,1/20}],{e,EOSValues},DistributedContextsAll,Method"FinestGrained"];
i
10
In[]:=
mri=Map[d|->Map[{#["R"],#["M"]}&,d],data];
In[]:=
ListLogLinearPlot[mri]
Out[]=