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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions camb/dark_energy.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,25 @@ class DarkEnergyEqnOfState(DarkEnergyModel):

_methods_ = [("SetWTable", [numpy_1d, numpy_1d, POINTER(c_int)])]

def set_params(self, w=-1.0, wa=0, cs2=1.0):
def set_params(self, w=-1.0, wa=0, cs2=1.0, use_tabulated_w=False, wde_a_array=None, wde_w_array=None):
"""
Set the parameters so that P(a)/rho(a) = w(a) = w + (1-a)*wa

:param w: w(0)
:param wa: -dw/da(0)
:param cs2: fluid rest-frame sound speed squared
:param use_tabulated_w: whether use interpolated w
:param wde_a_array: array of scale factors
:param wde_w_array: array of w(a)
"""
self.w = w
self.wa = wa
self.use_tabulated_w = use_tabulated_w
if self.use_tabulated_w:
a_array = np.array(wde_a_array)
w_array = np.array(wde_w_array)
self.set_w_a_table(a_array, w_array)
else:
self.w = w
self.wa = wa
self.cs2 = cs2
self.validate_params()

Expand Down
18 changes: 16 additions & 2 deletions camb/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -813,20 +813,34 @@ def set_classes(
if reionization_model:
self.Reion = self.make_class_named(reionization_model, ReionizationModel)

def set_dark_energy(self, w=-1.0, cs2=1.0, wa=0, dark_energy_model="fluid"):
def set_dark_energy(
self,
w=-1.0,
cs2=1.0,
wa=0,
use_tabulated_w=False,
wde_a_array=None,
wde_w_array=None,
dark_energy_model="fluid",
):
r"""
Set dark energy parameters (use set_dark_energy_w_a to set w(a) from numerical table instead)
To use a custom dark energy model, assign the class instance to the DarkEnergy field instead.

:param w: :math:`w\equiv p_{\rm de}/\rho_{\rm de}`, assumed constant
:param wa: evolution of w (for dark_energy_model=ppf)
:param cs2: rest-frame sound speed squared of dark energy fluid
:param use_tabulated_w: whether use interpolated w
:param wde_a_array: array of scale factors
:param wde_w_array: array of w(a)
:param dark_energy_model: model to use ('fluid' or 'ppf'), default is 'fluid'
:return: self
"""

de = self.make_class_named(dark_energy_model, DarkEnergyEqnOfState)
de.set_params(w=w, wa=wa, cs2=cs2)
de.set_params(
w=w, wa=wa, cs2=cs2, use_tabulated_w=use_tabulated_w, wde_a_array=wde_a_array, wde_w_array=wde_w_array
)
self.DarkEnergy = de
return self

Expand Down
2 changes: 2 additions & 0 deletions camb/tests/camb_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ def testAssigments(self):
"w",
"omch2",
"max_zrei",
"wde_a_array",
"wde_w_array",
},
)
params2 = camb.get_valid_numerical_params(dark_energy_model="AxionEffectiveFluid")
Expand Down