diff --git a/src/scgenerator/physics/fiber.py b/src/scgenerator/physics/fiber.py index d8b40b6..995cf92 100644 --- a/src/scgenerator/physics/fiber.py +++ b/src/scgenerator/physics/fiber.py @@ -657,7 +657,12 @@ def PCF_dispersion(lambda_, pitch, ratio_d, w0=None, n2=None, A_eff=None): def compute_loss(params: BareParams) -> Optional[np.ndarray]: - if params.loss == "capillary": + if params.loss_file is not None: + loss_data = np.load(params.loss_file) + wl = loss_data["wavelength"] + loss = loss_data["loss"] + return interp1d(wl, loss, fill_value=0, bounds_error=False)(params.l) + elif params.loss == "capillary": mask = params.l < params.upper_wavelength_interp_limit alpha = capillary_loss(params.l[mask], params.he_mode, params.core_radius) out = np.zeros_like(params.l) diff --git a/src/scgenerator/physics/simulate.py b/src/scgenerator/physics/simulate.py index c071627..2ac98bd 100644 --- a/src/scgenerator/physics/simulate.py +++ b/src/scgenerator/physics/simulate.py @@ -3,7 +3,7 @@ import os import random from datetime import datetime from pathlib import Path -from typing import Dict, List, Tuple, Type +from typing import Dict, List, Tuple, Type, Union import numpy as np @@ -679,6 +679,15 @@ def run_simulation_sequence( method=None, prev_sim_dir: os.PathLike = None, ): + config_files = list(config_files) + if len(config_files) == 1: + while True: + conf = io.load_toml(config_files[0]) + if (prev := conf.get("previous_config_file")) is not None: + config_files.insert(0, prev) + else: + break + prev = prev_sim_dir for config_file in config_files: sim = new_simulation(config_file, prev, method) @@ -694,12 +703,14 @@ def run_simulation_sequence( def new_simulation( - config_file: os.PathLike, + config: Union[dict, os.PathLike], prev_sim_dir=None, method: Type[Simulations] = None, ) -> Simulations: - - config_dict = io.load_toml(config_file) + if isinstance(config, dict): + config_dict = config + else: + config_dict = io.load_toml(config) logger = get_logger(__name__) if prev_sim_dir is not None: diff --git a/src/scgenerator/plotting.py b/src/scgenerator/plotting.py index f3e3dec..4ca3d76 100644 --- a/src/scgenerator/plotting.py +++ b/src/scgenerator/plotting.py @@ -455,7 +455,7 @@ def plot_results_2D( plt_range: Union[units.PlotRange, tuple], params: BareParams, log: Union[int, float, bool, str] = "1D", - skip: int = 16, + skip: int = 1, vmin: float = None, vmax: float = None, transpose: bool = False, diff --git a/src/scgenerator/utils/parameter.py b/src/scgenerator/utils/parameter.py index 522ad82..8ee504c 100644 --- a/src/scgenerator/utils/parameter.py +++ b/src/scgenerator/utils/parameter.py @@ -315,12 +315,14 @@ class BareParams: # root name: str = Parameter(string) prev_data_dir: str = Parameter(string) + previous_config_file:str = Parameter(string) # # fiber input_transmission: float = Parameter(in_range_incl(0, 1)) gamma: float = Parameter(non_negative(float, int)) n2: float = Parameter(non_negative(float, int)) loss: str = Parameter(literal("capillary")) + loss_file: str = Parameter(string) effective_mode_diameter: float = Parameter(positive(float, int)) A_eff: float = Parameter(non_negative(float, int)) pitch: float = Parameter(in_range_excl(0, 1e-3)) @@ -371,7 +373,7 @@ class BareParams: z_num: int = Parameter(positive(int)) time_window: float = Parameter(positive(float, int)) dt: float = Parameter(in_range_excl(0, 5e-15)) - tolerated_error: float = Parameter(in_range_excl(1e-15, 1e-5)) + tolerated_error: float = Parameter(in_range_excl(1e-15, 1e-3)) step_size: float = Parameter(positive(float, int)) lower_wavelength_interp_limit: float = Parameter(in_range_incl(100e-9, 3000e-9)) upper_wavelength_interp_limit: float = Parameter(in_range_incl(200e-9, 5000e-9))