TNO Intern

Commit 3ef6a881 authored by Zanne Korevaar's avatar Zanne Korevaar
Browse files

Add optimized r_out in stochastic optimization simulation to the output for...

Add optimized r_out in stochastic optimization simulation to the output for every sample (does not work for coaxial yet)
parent cf4f2c2b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ units_dict = {
    "insu_k": "W/mK",
    "insu_dr": "%",
    "k_g_res": "W/mK",
    "r_out": "m",
}

# Dictionary of formatted names for various parameters in the model.
@@ -74,6 +75,7 @@ format_dict = {
    "insu_k": "$insu_{k}$",
    "insu_dr": "$insu_{dr}$",
    "k_g_res": "$k_{g-res}$",
    "r_out": "$r_{out}$",
}

# Dictionary with colors for lithology plotting
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ class PlotResults:
        ]
        variable_param_names, locked_param_names = get_param_names()

        x_variables = result_variables + variable_param_names
        x_variables = result_variables + variable_param_names + ["r_out"]

        # Loop through variables and create scatterplots
        for x_variable in x_variables:
+30 −5
Original line number Diff line number Diff line
@@ -625,6 +625,16 @@ def save_MCrun_results(
    variable_param_dict = {key: param_dict[key] for key in variable_param_names}
    locked_param_dict = {key: param_dict[key] for key in locked_param_names}

    # Check if r_out varies across samples (e.g. due to optimization)
    # by computing the std of the last pipe value across all samples
    r_out_varies = False
    if "r_out" in locked_param_dict:
        r_out_last_values = np.array(
            [np.asarray(locked_param_dict["r_out"][s])[-1] for s in range(n_samples)]
        )
        if round(float(np.std(r_out_last_values)), 7) != 0:
            r_out_varies = True

    # Variable parameters: Create dataset with [param, samples] dimensions
    variable_param_da = xr.DataArray(
        list(variable_param_dict.values()),
@@ -662,16 +672,31 @@ def save_MCrun_results(
    }

    pipe_pos = np.asarray(locked_param_x["pos"])
    r_out = locked_param_x["r_out"]

    pipe_pos_ds = xr.Dataset(
        data_vars=dict(pipe_pos=(["nPipes", "xy"], pipe_pos)),
        coords=dict(nPipes=(["nPipes"], pipes_coord)),
    )

    # Store r_out: if it varies across samples (optimization), store with [samples, nPipes] dims
    # otherwise store as locked with [nPipes] dim only
    if r_out_varies:
        r_out_per_sample = np.array(
            [np.asarray(locked_param_dict["r_out"][s]) for s in range(n_samples)]
        )
        r_out_ds = xr.Dataset(
            data_vars=dict(r_out=(["samples", "nPipes"], r_out_per_sample)),
            coords=dict(samples=(["samples"], list(sample_coord)), nPipes=(["nPipes"], pipes_coord)),
        )
    else:
        r_out = locked_param_x.get("r_out", locked_param_single_dict.get("r_out"))
        if r_out is not None and isinstance(r_out, list):
            r_out_ds = xr.Dataset(
                data_vars=dict(r_out=(["nPipes"], r_out)),
                coords=dict(nPipes=(["nPipes"], pipes_coord)),
            )
        else:
            r_out_ds = None

    # Then, create dataset from locked parameters with dim(len(parnames), nlayers_k_s)
    locked_param_z_k_s = {