working on pressure gradients

This commit is contained in:
Benoît Sierro
2022-03-31 15:19:34 +02:00
parent a28c0a304f
commit 4491fc0248
3 changed files with 30 additions and 8 deletions

View File

@@ -386,6 +386,7 @@ default_rules: list[Rule] = [
Rule("n_op", operators.MarcatiliAdjustedRefractiveIndex), Rule("n_op", operators.MarcatiliAdjustedRefractiveIndex),
Rule("n_op", operators.HasanRefractiveIndex), Rule("n_op", operators.HasanRefractiveIndex),
Rule("gas_op", operators.ConstantGas), Rule("gas_op", operators.ConstantGas),
Rule("gas_op", operators.PressureGradientGas),
Rule("loss_op", operators.NoLoss, priorities=-1), Rule("loss_op", operators.NoLoss, priorities=-1),
Rule("conserved_quantity", operators.NoConservedQuantity, priorities=-1), Rule("conserved_quantity", operators.NoConservedQuantity, priorities=-1),
] ]
@@ -416,6 +417,7 @@ envelope_rules = default_rules + [
Rule("gamma_op", operators.ConstantGamma, priorities=1), Rule("gamma_op", operators.ConstantGamma, priorities=1),
Rule("gamma_op", operators.ConstantScalarGamma), Rule("gamma_op", operators.ConstantScalarGamma),
Rule("gamma_op", operators.NoGamma, priorities=-1), Rule("gamma_op", operators.NoGamma, priorities=-1),
Rule("gamma_op", operators.VariableScalarGamma, priorities=2),
Rule("ss_op", operators.SelfSteepening), Rule("ss_op", operators.SelfSteepening),
Rule("ss_op", operators.NoSelfSteepening, priorities=-1), Rule("ss_op", operators.NoSelfSteepening, priorities=-1),
Rule("spm_op", operators.NoEnvelopeSPM, priorities=-1), Rule("spm_op", operators.NoEnvelopeSPM, priorities=-1),

View File

@@ -165,7 +165,7 @@ class ValueTracker(ABC):
return self.__class__.__name__ + "(" + ", ".join(value_pair_str_list) + ")" return self.__class__.__name__ + "(" + ", ".join(value_pair_str_list) + ")"
def __value_repr(self, k: str, v) -> str: def __value_repr(self, k: str, v) -> str:
if k.endswith("_const"): if k.endswith("_const") and isinstance(v, (list, np.ndarray, tuple)):
return repr(v[0]) return repr(v[0])
return repr(v) return repr(v)
@@ -198,10 +198,13 @@ class NoOpFreq(Operator):
################################################## ##################################################
class AbstractGas(ABC): class AbstractGas(Operator):
gas_name: str gas_name: str
material_dico: dict[str, Any] material_dico: dict[str, Any]
def __call__(self, state: CurrentState) -> np.ndarray:
return self.square_index(state)
@abstractmethod @abstractmethod
def pressure(self, state: CurrentState) -> float: def pressure(self, state: CurrentState) -> float:
"""returns the pressure at the current """returns the pressure at the current
@@ -307,7 +310,7 @@ class PressureGradientGas(AbstractGas):
return materials.pressure_from_gradient(state.z_ratio, self.p_in, self.p_out) return materials.pressure_from_gradient(state.z_ratio, self.p_in, self.p_out)
def number_density(self, state: CurrentState) -> float: def number_density(self, state: CurrentState) -> float:
if self.ideal: if self.ideal_gas:
return self.pressure(state) / (units.kB * self.temperature) return self.pressure(state) / (units.kB * self.temperature)
else: else:
return materials.number_density_van_der_waals( return materials.number_density_van_der_waals(
@@ -505,7 +508,7 @@ class DirectDispersion(AbstractDispersion):
self.w_for_disp = w_for_disp self.w_for_disp = w_for_disp
self.disp_ind = dispersion_ind self.disp_ind = dispersion_ind
self.n_op = n_op self.n_op = n_op
self.disp_arr = np.zeros(t_num) self.disp_arr = np.zeros(t_num, dtype=complex)
self.w0 = w0 self.w0 = w0
self.w0_ind = math.argclosest(w_for_disp, w0) self.w0_ind = math.argclosest(w_for_disp, w0)
@@ -782,7 +785,7 @@ class AbstractGamma(Operator):
class ConstantScalarGamma(AbstractGamma): class ConstantScalarGamma(AbstractGamma):
def __init__(self, gamma: np.ndarray, t_num: int): def __init__(self, gamma: float, t_num: int):
self.arr_const = gamma * np.ones(t_num) self.arr_const = gamma * np.ones(t_num)
def __call__(self, state: CurrentState) -> np.ndarray: def __call__(self, state: CurrentState) -> np.ndarray:
@@ -802,6 +805,23 @@ class ConstantGamma(AbstractGamma):
return self.arr return self.arr
class VariableScalarGamma(AbstractGamma):
def __init__(
self, gas_op: AbstractGas, temperature: float, w0: float, A_eff: float, t_num: int
):
self.gas_op = gas_op
self.temperature = temperature
self.w0 = w0
self.A_eff = A_eff
self.arr = np.ones(t_num)
def __call__(self, state: CurrentState) -> np.ndarray:
n2 = materials.non_linear_refractive_index(
self.gas_op.material_dico, self.gas_op.pressure(state), self.temperature
)
return self.arr * fiber.gamma_parameter(n2, self.w0, self.A_eff)
################################################## ##################################################
##################### PLASMA ##################### ##################### PLASMA #####################
################################################## ##################################################

View File

@@ -334,9 +334,9 @@ class Parameters:
# gas # gas
gas_name: str = Parameter(string, converter=str.lower, default="vacuum") gas_name: str = Parameter(string, converter=str.lower, default="vacuum")
pressure: Union[float, Iterable[float]] = Parameter( pressure: float = Parameter(non_negative(float, int), display_info=(1e-5, "bar"))
validator_or(non_negative(float, int), num_list), display_info=(1e-5, "bar") pressure_in: float = Parameter(non_negative(float, int), display_info=(1e-5, "bar"))
) pressure_out: float = Parameter(non_negative(float, int), display_info=(1e-5, "bar"))
temperature: float = Parameter(positive(float, int), display_info=(1, "K"), default=300) temperature: float = Parameter(positive(float, int), display_info=(1, "K"), default=300)
plasma_density: float = Parameter(non_negative(float, int), default=0) plasma_density: float = Parameter(non_negative(float, int), default=0)