From 9094ce3be70fef4c8852f6994f604e9f84fe0350 Mon Sep 17 00:00:00 2001 From: Erik Tamsen <86715087+eriktamsen@users.noreply.github.com> Date: Tue, 29 Aug 2023 15:50:37 +0200 Subject: [PATCH] 92 erik paper branch (#197) * split macros and bib file for paper to reduce conflicts * fix py_macros files * add resulting py macros to git ignore * small changes * fix some warnings * working on homogenization plots * homogenization figure in doit * more changes to homogenization appendix * working on beam model * changing beam design output WIP * working on beam design * new beam design working in snakemake * add GWP of steel * add beam figure to dodo file * update workflow graph * more changes for beam in paper * beam design is working in doit * changes to input values * adding conversion of steel gwp input * added computation paste specific heat capacity * improved sc input to mass fraction * fix sc value * fixed test files * fixed name of bending beam * delete test temp files * remove some temp files with gitignore * update parameters * working on function for calibraton of material model * add json package * e and fc over time is working * add test for E and fc over time * adding alpha_t28d to workflow * added macros for optimization input * add inits to include untested files in coverage * simplifed computation sc volume fraction and added test * fixed computation specific heat paste * small fixes mainly comments * imporve coverage * improve coverage * fixed tests * renaming volume content to mass per cubic meter concrete * add dummy test for dummy script * add safety factors * add loads to workflow * write test to check output keys of workflow * fix link to files * fix link to files * improve temp constraint * continue to write paper section on beam and fem * fix tests * improve beam design mixed constraint * improve beam appendix * working on paper * continue FEM * working on heat of hydration figure * working on introduction * working on introduction * working on introduction * build script for design approach graph * wip * workign on paper * include design approach in doit * improving doit workflow * improve doit output * imporving doit paths * improving dodo * working on introduction * update for analyze kpi * update for analyze kpi * fixed beam plot * working on introduction * improve introduction * create heat release figure * working on FEM section * create evolution figure * write evolution plot script * add evolution to tex * modify dummy script * fix dummy script units and test * integrate computation alpha 28 days to snakemake * Update usecases/optimization_paper/tex/tex_sections/appendix_fem_model.tex Co-authored-by: Sjard Mathis Rosenbusch <69848361+srosenbu@users.noreply.github.com> * Update usecases/optimization_paper/tex/tex_sections/appendix_fem_model.tex Co-authored-by: Sjard Mathis Rosenbusch <69848361+srosenbu@users.noreply.github.com> * Update usecases/optimization_paper/tex/tex_sections/concrete_model.tex Co-authored-by: Sjard Mathis Rosenbusch <69848361+srosenbu@users.noreply.github.com> * Update usecases/optimization_paper/tex/tex_sections/introduction.tex Co-authored-by: Sjard Mathis Rosenbusch <69848361+srosenbu@users.noreply.github.com> --------- Co-authored-by: Sjard Mathis Rosenbusch <69848361+srosenbu@users.noreply.github.com> --- .../dummy_hydration_parameters.py | 4 +- .../test_dummy_scripts.py | 12 +- .../demonstrator_scripts/test_kpi_from_fem.py | 3 +- .../bam_figures/beam_design_plot.py | 6 +- .../bam_figures/create_heat_release_figure.py | 109 +++++++++------- .../create_mechanics_evolution_figure.py | 95 ++++++++++++++ usecases/optimization_paper/dodo.py | 50 ++++++- .../Inputs/alpha_t28d.json | 10 -- .../Inputs/fem_parameters.json | 2 +- .../Inputs/sc_fraction.json | 4 +- .../optimization_workflow/Snakefile | 60 ++++++++- .../tex/macros/py_macros_BAM.tex | 18 +++ .../tex/macros/py_macros_BAM.yaml | 24 +++- .../tex/macros/tex_macros_BAM.tex | 3 + .../optimization_paper_bibliography_BAM.bib | 28 ++++ .../tex/tex_sections/abstract.tex | 4 +- .../tex/tex_sections/appendix_fem_model.tex | 41 +++--- .../tex/tex_sections/beam_model.tex | 2 +- .../tex/tex_sections/concrete_model.tex | 43 +++--- .../tex/tex_sections/homogenization.tex | 21 ++- .../tex/tex_sections/introduction.tex | 122 ++++++------------ 21 files changed, 452 insertions(+), 209 deletions(-) create mode 100644 usecases/optimization_paper/bam_figures/create_mechanics_evolution_figure.py delete mode 100644 usecases/optimization_paper/optimization_workflow/Inputs/alpha_t28d.json diff --git a/lebedigital/demonstrator_scripts/dummy_hydration_parameters.py b/lebedigital/demonstrator_scripts/dummy_hydration_parameters.py index df2f40098..5420d05c4 100644 --- a/lebedigital/demonstrator_scripts/dummy_hydration_parameters.py +++ b/lebedigital/demonstrator_scripts/dummy_hydration_parameters.py @@ -32,7 +32,9 @@ def dummy_hydration_parameters(slag_ratio, phi_hydration): maximum potential hydration parameter """ - B1 = 2.916e-4 * ureg("1/s") # in 1/s + B1_min = 1.5e-4 + B1_max = 2.916e-4 + B1 = (B1_max - (B1_max - B1_min) * slag_ratio) * ureg("1/s") B2 = 0.0024229 * ureg("") # - eta = 5.554 * ureg("") # something about diffusion E_act = 5653 * 8.3145 * ureg("J/mol") # activation energy in Jmol^-1 diff --git a/tests/demonstrator_scripts/test_dummy_scripts.py b/tests/demonstrator_scripts/test_dummy_scripts.py index b95baabd1..ed1c2cf53 100644 --- a/tests/demonstrator_scripts/test_dummy_scripts.py +++ b/tests/demonstrator_scripts/test_dummy_scripts.py @@ -1,17 +1,19 @@ import pytest -from lebedigital.demonstrator_scripts.dummy_hydration_parameters import dummy_hydration_parameters -from lebedigital.demonstrator_scripts.dummy_paste_strength_stiffness import dummy_paste_strength_stiffness +from lebedigital.demonstrator_scripts.dummy_hydration_parameters import \ + dummy_hydration_parameters +from lebedigital.demonstrator_scripts.dummy_paste_strength_stiffness import \ + dummy_paste_strength_stiffness def test_dummy_scripts(): # just to fix the coverage - B1, B2, eta, E_act, Q_pot, T_ref = dummy_hydration_parameters(1, 10) - assert B1.magnitude == pytest.approx(2.916e-4) + B1, B2, eta, E_act, Q_pot, T_ref = dummy_hydration_parameters(0.5, 10) + assert B1.magnitude == pytest.approx(0.0002208) assert B2.magnitude == pytest.approx(0.0024229) assert eta.magnitude == pytest.approx(5.554) assert E_act.magnitude == pytest.approx(5653 * 8.3145) - assert Q_pot.magnitude == pytest.approx(100000) + assert Q_pot.magnitude == pytest.approx(200000) assert T_ref.magnitude == pytest.approx(25) E, fc = dummy_paste_strength_stiffness(0, 10) diff --git a/tests/demonstrator_scripts/test_kpi_from_fem.py b/tests/demonstrator_scripts/test_kpi_from_fem.py index 80ff53d2c..d35669a42 100644 --- a/tests/demonstrator_scripts/test_kpi_from_fem.py +++ b/tests/demonstrator_scripts/test_kpi_from_fem.py @@ -2,7 +2,8 @@ import pint import pint_pandas import pytest -from pint.testsuite.helpers import assert_quantity_almost_equal as assert_approx +from pint.testsuite.helpers import \ + assert_quantity_almost_equal as assert_approx from lebedigital.demonstrator_scripts.kpi_from_fem import kpi_from_fem from lebedigital.unit_registry import ureg diff --git a/usecases/optimization_paper/bam_figures/beam_design_plot.py b/usecases/optimization_paper/bam_figures/beam_design_plot.py index add0da28e..f71d7136e 100644 --- a/usecases/optimization_paper/bam_figures/beam_design_plot.py +++ b/usecases/optimization_paper/bam_figures/beam_design_plot.py @@ -92,7 +92,7 @@ def get_plot_lists(order_list, values_dict, input_parameter): A_errors[i][j] = out["constraint_max_steel_area"] constraint[i][j] = out["constraint_beam_design"] - if constraint[i][j] >= 0: + if constraint[i][j] <= 0: if max_admissable_area < crosssections[i][j]: max_admissable_area = crosssections[i][j] @@ -118,7 +118,7 @@ def plot_contour(ax, x, y, Z, color, linewidth, linestyle="solid"): def plot_contour_filled_white(ax, x, y, Z): max = np.nanmax(Z) min = np.nanmin(Z) - levels = [min - 1, 0.0] + levels = [0.0, max] X, Y = np.meshgrid(y, x) ax.contourf(X.magnitude, Y.magnitude, Z, colors="white", levels=levels) @@ -173,6 +173,8 @@ def plot_contour_filled(ax, x, y, Z, xlabel, ylabel, title, colorbar=False, max= constraint_plots = [0] * len(chosen_plots) plot_values = {} max_plot_area = 0.0 + + # loop over all three plots for i, plot in enumerate(chosen_plots): ( crosssection_plots[i], diff --git a/usecases/optimization_paper/bam_figures/create_heat_release_figure.py b/usecases/optimization_paper/bam_figures/create_heat_release_figure.py index 981e85da7..82c47cc78 100644 --- a/usecases/optimization_paper/bam_figures/create_heat_release_figure.py +++ b/usecases/optimization_paper/bam_figures/create_heat_release_figure.py @@ -11,40 +11,35 @@ from lebedigital.unit_registry import ureg -def create_heat_release_figure(): - # todo add units for the input, convert to correct untis - # add units for the output - # change time to hours our days in plot - # add legend - # add title - # add axis labels +def create_heat_release_figure(parameter: dict, fig_path: str = "test_heat_realease_plot.pdf"): # add figure to tex file and snakemake workflow - T = 20 # temperature... - dt = 60 # dt - time_total = 100000 + parameter["B1"] = parameter["heatExBOne"] + parameter["B2"] = parameter["heatExBTwo"] + parameter["eta"] = parameter["heatExEta"] + parameter["alpha_max"] = parameter["heatExAlphaMax"] + parameter["E_act"] = parameter["heatExEAct"] + parameter["T_ref"] = parameter["heatExTRef"] + parameter["Q_pot"] = parameter["heatExQPot"] + + T = parameter["heatExT"] # temperature... + dt = parameter["heatExDt"] # dt + time_total = parameter["heatExTimeTotal"] # what does T and dt do??? time_list = np.arange(0, time_total, dt) - parameter = {} - parameter["B1"] = 3e-4 - parameter["B2"] = 0.001 - parameter["eta"] = 6 - parameter["alpha_max"] = 0.875 - parameter["E_act"] = 47002 - parameter["T_ref"] = 25 - parameter["Q_pot"] = 500e3 variation_dict = { "B1": [parameter["B1"], 2.0e-4, 3.7e-4], "B2": [parameter["B2"], 0.0001, 0.01], "eta": [parameter["eta"], 9, 4.5], + "Q_pot": [parameter["Q_pot"], 350e3, 650e3], } material_problem = fenics_concrete.ConcreteThermoMechanical() hydration_fkt = material_problem.get_heat_of_hydration_ftk() - fig, axs = plt.subplots(1, len(variation_dict), figsize=(15, 3)) + fig, axs = plt.subplots(2, len(variation_dict), figsize=(20, 7)) ureg.setup_matplotlib() i = 0 @@ -56,42 +51,60 @@ def create_heat_release_figure(): delta_heat = np.diff(heat_list) / dt plot_time = time_list[:-1] - - axs[i].set_ylim([0, 0.006]) - axs[i].plot(plot_time, delta_heat) + # add pint units to plot_time and delta_heat + plot_time = plot_time * ureg.second + # time_list = time_list * ureg.second + delta_heat = delta_heat * ureg.watt / ureg.kg + heat_list = heat_list * ureg.joule / ureg.kg + + # convert plot_time to hours + plot_time = plot_time.to(ureg.hour) + # time_list = time_list.to(ureg.hour) + # convert delta_heat to mW/kg + delta_heat = delta_heat.to(ureg.mW / ureg.kg) + # heat_list = heat_list.to(ureg.mW / ureg.kg) + + axs[0][i].set_ylim([0, 6]) + axs[0][i].set_xlim([0, 24]) + # plot delta heat over time with a legend + axs[0][i].plot(plot_time, delta_heat, label=key + " = " + str(value)) + + # cummulative heat release + axs[1][i].set_ylim([0, 400]) + axs[1][i].set_xlim([0, 24 * 4]) + axs[1][i].plot(plot_time, heat_list[:-1], label=key + " = " + str(value)) # plt.plot(time_list, heat_list, label=parameter + " = " + str(value)) + axs[0][i].legend() + # set legend to lower right corner + axs[1][i].legend() + axs[1][i].legend(loc="lower right") + + axs[0][i].set_ylabel(f"Heat release rate in {delta_heat.units}") + axs[0][i].set_xlabel(f"time in {plot_time.units}") + axs[1][i].set_ylabel(f"Cumulated heat release in {heat_list.units}") + axs[1][i].set_xlabel(f"time in {plot_time.units}") i += 1 - # initiate material problem - # get the respective function - # - # heat_list, doh_list = hydration_fkt(T, time_list, dt, parameter) - # print(heat_list) - # print(doh_list) - # print(time_list) - - # #ureg.setup_matplotlib(enable=False) - # ureg2 = pint.UnitRegistry(auto_reduce_dimensions=True) - - # fig.suptitle('Influence of aggregate ratio on effective concrete properties') - # axs[0].plot(time_list, heat_list) - # # axs[0].set_ylabel(f"Young's modulus in {E_list.units}") - # # axs[0].set_xlabel('aggregate volume fraction') - # axs[1].plot(time_list, doh_list) - # # axs[1].set_ylabel(f"Poission's ratio") - # # axs[1].set_xlabel('aggregate volume fraction') - # axs[2].plot(time_list, delta_heat) - # axs[2].set_ylabel(f"compressive strength {fc_list.units}") - # axs[2].set_xlabel('aggregate volume fraction') - - # plt.subplots_adjust(wspace=0.4) fig.tight_layout() - plt.show() + # plt.show() - # fig.savefig(fig_path) + fig.savefig(fig_path) if __name__ == "__main__": - create_heat_release_figure() + parameter = { + "heatExBOne": 3e-4, + "heatExBTwo": 0.001, + "heatExEta": 6, + "heatExAlphaMax": 0.875, + "heatExEAct": 47002, + "heatExTRef": 25, + "heatExQPot": 500e3, + "heatExT": 20, + "heatExDt": 60, + "heatExTimeTotal": 60 * 60 * 24 * 4, + } + + create_heat_release_figure(parameter) diff --git a/usecases/optimization_paper/bam_figures/create_mechanics_evolution_figure.py b/usecases/optimization_paper/bam_figures/create_mechanics_evolution_figure.py new file mode 100644 index 000000000..f1f09fb11 --- /dev/null +++ b/usecases/optimization_paper/bam_figures/create_mechanics_evolution_figure.py @@ -0,0 +1,95 @@ +import copy + +import fenics_concrete +import matplotlib.pyplot as plt +import numpy as np +import pint +import pytest +from pint.testsuite.helpers import assert_quantity_almost_equal as assert_approx + +from lebedigital.simulation.concrete_homogenization import concrete_homogenization +from lebedigital.unit_registry import ureg + + +def create_mechanics_evolution_figure(input_parameter: dict, fig_path: str = "test_mechanics_evolution_plot.pdf"): + # add figure to tex file and snakemake workflow + + material_problem = fenics_concrete.ConcreteThermoMechanical() + e_fkt = material_problem.mechanics_problem.E_fkt + fc_fkt = material_problem.mechanics_problem.general_hydration_fkt + + # general parameters + parameter = { + "alpha_t": input_parameter["evoExAlphaT"], + "alpha_tx": input_parameter["evoExAlphaTx"], + "alpha_0": 0.0, + "a_E": input_parameter["evoExaE"], + "a_X": input_parameter["evoExafc"], + "E": input_parameter["evoExE"], + "X": input_parameter["evoExfc"], + } + + alpha_list = np.arange(0, 1, 0.005) + + variation_dict = { + "alpha_t": { + "params": [parameter["alpha_t"], 0.0, 0.6], + "fkt": e_fkt, + "ylabel": "Elastic modulus $E$ [GPa ???]", + "ylim": 60, + }, + "a_E": { + "params": [parameter["a_E"], 0.2, 1.3], + "fkt": e_fkt, + "ylabel": "Elastic modulus $E$ [GPa ???]", + "ylim": 60, + }, + "a_X": { + "params": [parameter["a_X"], 0.2, 1.3], + "fkt": fc_fkt, + "ylabel": "Compressive strength $f_c$ [MPa ???]", + "ylim": 40, + }, + } + + # setup plot + fig, axs = plt.subplots(1, len(variation_dict), figsize=(5 * len(variation_dict), 4)) + ureg.setup_matplotlib() + + i = 0 + for key in variation_dict.keys(): + p = copy.deepcopy(parameter) + var_par_list = variation_dict[key]["params"] + fkt = variation_dict[key]["fkt"] + + for value in var_par_list: + p[key] = value + y_list = [] + for alpha in alpha_list: + y_list.append(fkt(alpha, p)) + axs[i].plot(alpha_list, y_list, label=key + " = " + str(value)) + + axs[i].legend() + axs[i].set_xlabel(f"Degree of hydration $\\alpha$") + axs[i].set_ylabel(variation_dict[key]["ylabel"]) + axs[i].set_xlim([0, 1]) + axs[i].set_ylim([0, variation_dict[key]["ylim"]]) + + i += 1 + + fig.tight_layout() + # plt.show() + fig.savefig(fig_path) + + +if __name__ == "__main__": + parameter = { + "evoExAlphaT": 0.2, + "evoExAlphaTx": 0.8, + "evoExaE": 0.5, + "evoExafc": 0.5, + "evoExE": 50, + "evoExfc": 30, + } + + create_mechanics_evolution_figure(parameter) diff --git a/usecases/optimization_paper/dodo.py b/usecases/optimization_paper/dodo.py index a134c04f1..712949f20 100644 --- a/usecases/optimization_paper/dodo.py +++ b/usecases/optimization_paper/dodo.py @@ -3,7 +3,9 @@ import yaml from bam_figures.beam_design_plot import beam_design_plot +from bam_figures.create_heat_release_figure import create_heat_release_figure from bam_figures.create_homogenization_figure import create_homogenization_figure +from bam_figures.create_mechanics_evolution_figure import create_mechanics_evolution_figure from bam_figures.design_approach import design_approach_graph from bam_figures.paper_workflow_graph import paper_workflow_graph from doit import get_var @@ -142,7 +144,7 @@ def task_build_homogenization_figure(): target = paper_plot_target(homogenization_plot_name) return { - "file_dep": [homogenization_plot_script], + "file_dep": [homogenization_plot_script, py_macros_file_BAM.with_suffix(".yaml")], "actions": [ ( create_homogenization_figure, @@ -154,6 +156,50 @@ def task_build_homogenization_figure(): } +def task_build_heat_release_figure(): + """build homogenization figure""" + # homogenization figure + heat_release_plot_name = data["file_names"]["heatReleasePlot"] # name of pdf file defined in macros yaml + heat_release_plot_script = ROOT / BAM_PLOT_DIR / "create_heat_release_figure.py" + heat_release_plot_output_file = ROOT / FIGURES_DIR / heat_release_plot_name + + target = paper_plot_target(heat_release_plot_name) + + return { + "file_dep": [heat_release_plot_script, py_macros_file_BAM.with_suffix(".yaml")], + "actions": [ + ( + create_heat_release_figure, + [data["heat_release_example_parameters"], heat_release_plot_output_file], + ) + ], + "targets": [target], + "clean": True, + } + + +def task_build_evolution_figure(): + """build evolution figure""" + # evolution figure + evolution_plot_name = data["file_names"]["evolutionPlot"] # name of pdf file defined in macros yaml + evolution_plot_script = ROOT / BAM_PLOT_DIR / "create_mechanics_evolution_figure.py" + evolution_plot_output_file = ROOT / FIGURES_DIR / evolution_plot_name + + target = paper_plot_target(evolution_plot_name) + + return { + "file_dep": [evolution_plot_script, py_macros_file_BAM.with_suffix(".yaml")], + "actions": [ + ( + create_mechanics_evolution_figure, + [data["evolution_example_parameters"], evolution_plot_output_file], + ) + ], + "targets": [target], + "clean": True, + } + + def task_build_beam_design_figure(): """build beam design figure""" beam_design_plot_name = data["file_names"]["beamDesignPlot"] # name of output pdf file as defined in macros yaml @@ -170,7 +216,7 @@ def task_build_beam_design_figure(): raise ValueError("Unknown mode") return { - "file_dep": [beam_design_plot_script], + "file_dep": [beam_design_plot_script, py_macros_file_BAM.with_suffix(".yaml")], "actions": [(beam_design_plot, [data["beam_design_example_parameters"], n, beam_design_plot_output_file])], "targets": [target], "clean": True, diff --git a/usecases/optimization_paper/optimization_workflow/Inputs/alpha_t28d.json b/usecases/optimization_paper/optimization_workflow/Inputs/alpha_t28d.json deleted file mode 100644 index 8ed4ca415..000000000 --- a/usecases/optimization_paper/optimization_workflow/Inputs/alpha_t28d.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "alpha_mix1": { - "value" : 0.74, - "unit" : "dimensionless" - }, - "alpha_mix2": { - "value" : 0.54, - "unit" : "dimensionless" - } -} diff --git a/usecases/optimization_paper/optimization_workflow/Inputs/fem_parameters.json b/usecases/optimization_paper/optimization_workflow/Inputs/fem_parameters.json index 4a95f31df..595fd1bb4 100644 --- a/usecases/optimization_paper/optimization_workflow/Inputs/fem_parameters.json +++ b/usecases/optimization_paper/optimization_workflow/Inputs/fem_parameters.json @@ -4,7 +4,7 @@ "unit":"dimensionless" }, "alpha_0":{ - "value":0.05, + "value":0.00, "unit":"dimensionless" }, "a_E":{ diff --git a/usecases/optimization_paper/optimization_workflow/Inputs/sc_fraction.json b/usecases/optimization_paper/optimization_workflow/Inputs/sc_fraction.json index c4146455d..8602fe41a 100644 --- a/usecases/optimization_paper/optimization_workflow/Inputs/sc_fraction.json +++ b/usecases/optimization_paper/optimization_workflow/Inputs/sc_fraction.json @@ -1,6 +1,6 @@ { "sc_mass_fraction": { "unit": "dimensionless", - "value": 0.95 + "value": 0.5 } -} \ No newline at end of file +} diff --git a/usecases/optimization_paper/optimization_workflow/Snakefile b/usecases/optimization_paper/optimization_workflow/Snakefile index bce16b5de..6f7d7da0f 100644 --- a/usecases/optimization_paper/optimization_workflow/Snakefile +++ b/usecases/optimization_paper/optimization_workflow/Snakefile @@ -4,6 +4,7 @@ import pint_pandas import pint import pandas as pd import json +import numpy as np PATH_TO_SCRIPTS = '../../../lebedigital/' @@ -65,6 +66,63 @@ rule workflow_targets: 'Results/demonstrator_beam.xdmf' +rule get_mix_hydration_parameters: + input: + script = PATH_TO_SCRIPTS + 'demonstrator_scripts/dummy_hydration_parameters.py' + output: + results = 'Results/mixes_hydration_parameters.json' + run: + from lebedigital.demonstrator_scripts.dummy_hydration_parameters import dummy_hydration_parameters + + results = {} + + # run script + results['mix1_B1'], results['mix1_B2'], results['mix1_eta'], results['mix1_E_act'], results['mix1_Q_pot'], results['mix1_T_ref'] = \ + dummy_hydration_parameters(0,42) + results['mix2_B1'], results['mix2_B2'], results['mix2_eta'], results['mix2_E_act'], results['mix2_Q_pot'], results['mix2_T_ref'] = \ + dummy_hydration_parameters(1,42) + + write_pint_dict(results,output.results) + + +rule compute_doh_at_28_days: + input: + alpha_max = "Results/approx_max_doh.json", + hydration_params = "Results/mixes_hydration_parameters.json" + output: + results = 'Results/mixes_alpha_t28d.json' + run: + import fenics_concrete + + p = read_pint_dicts(input) + + time_total = 60 * 60 * 24 * 28 # 28 days in seconds + dt = 60 * 60 # 1 hour in seconds + T = 20 # 20 degrees Celsius ambient temperature + + time_list = np.arange(0,time_total,dt) + + material_problem = fenics_concrete.ConcreteThermoMechanical() + hydration_fkt = material_problem.get_heat_of_hydration_ftk() + + for key in p.keys(): + # check if paramter has a unit, then remove it, for now... + if type(p[key]) == type(1 * ureg("")): + p[key] = p[key].magnitude + + parameters1 = {'B1': p['mix1_B1'], 'B2': p['mix1_B2'], 'eta': p['mix1_eta'], 'E_act': p['mix1_E_act'], 'Q_pot': p['mix1_Q_pot'], 'T_ref': p['mix1_T_ref'],'alpha_max': p['max_degree_of_hydration']} + heat_list1, doh_list1 = hydration_fkt(T,time_list,dt,parameters1) + + parameters2 = {'B1': p['mix2_B1'], 'B2': p['mix2_B2'], 'eta': p['mix2_eta'], 'E_act': p['mix2_E_act'], 'Q_pot': p['mix2_Q_pot'], 'T_ref': p['mix2_T_ref'],'alpha_max': p['max_degree_of_hydration']} + heat_list2, doh_list2 = hydration_fkt(T,time_list,dt,parameters2) + + results = {} + # run script + results["alpha_mix1"] = float(doh_list1[-1]) * ureg.dimensionless + results["alpha_mix2"] = float(doh_list2[-1]) * ureg.dimensionless + + write_pint_dict(results,output.results) + rule kpi_from_fem: input: script = PATH_TO_SCRIPTS + 'demonstrator_scripts/kpi_from_fem.py', @@ -152,7 +210,7 @@ rule interpolate_alpha_t28d: input: script = PATH_TO_SCRIPTS + 'demonstrator_scripts/interpolate_alpha_t28d.py', sc_fraction = 'Results/mix_volume_contents.json', - alpha_t28d = 'Inputs/alpha_t28d.json' + alpha_t28d = 'Results/mixes_alpha_t28d.json' output: results = "Results/alpha_t28d.json" diff --git a/usecases/optimization_paper/tex/macros/py_macros_BAM.tex b/usecases/optimization_paper/tex/macros/py_macros_BAM.tex index 4874904b4..6bb8338c8 100644 --- a/usecases/optimization_paper/tex/macros/py_macros_BAM.tex +++ b/usecases/optimization_paper/tex/macros/py_macros_BAM.tex @@ -4,6 +4,8 @@ \newcommand{\beamDesignPlot}{beam_design_figure.pdf} \newcommand{\designStandard}{approach_standard_design.gv.pdf} \newcommand{\designProposed}{approach_proposed_design.gv.pdf} +\newcommand{\heatReleasePlot}{heat_release_figure.pdf} +\newcommand{\evolutionPlot}{parameter_evolution_figure.pdf} \newcommand{\pasteE}{30e9} \newcommand{\pasteEunit}{Pa} \newcommand{\pastenu}{0.2} @@ -44,3 +46,19 @@ \newcommand{\beamExPointLoadCUnit}{kN} \newcommand{\beamExComprStrConcreteC}{40} \newcommand{\beamExComprStrConcreteCUnit}{N/mm^2} +\newcommand{\heatExBOne}{0.0003} +\newcommand{\heatExBTwo}{0.001} +\newcommand{\heatExEta}{6} +\newcommand{\heatExAlphaMax}{0.875} +\newcommand{\heatExEAct}{47002} +\newcommand{\heatExTRef}{25} +\newcommand{\heatExQPot}{500000} +\newcommand{\heatExT}{20} +\newcommand{\heatExDt}{60} +\newcommand{\heatExTimeTotal}{345600} +\newcommand{\evoExAlphaT}{0.2} +\newcommand{\evoExAlphaTx}{0.8} +\newcommand{\evoExaE}{0.5} +\newcommand{\evoExafc}{0.5} +\newcommand{\evoExE}{50} +\newcommand{\evoExfc}{30} diff --git a/usecases/optimization_paper/tex/macros/py_macros_BAM.yaml b/usecases/optimization_paper/tex/macros/py_macros_BAM.yaml index 244c22844..0b40a4203 100644 --- a/usecases/optimization_paper/tex/macros/py_macros_BAM.yaml +++ b/usecases/optimization_paper/tex/macros/py_macros_BAM.yaml @@ -4,7 +4,9 @@ file_names : { 'homogenizationPlot': 'homogenization_figure.pdf', 'beamDesignPlot': 'beam_design_figure.pdf', 'designStandard': 'approach_standard_design.gv.pdf', - 'designProposed': 'approach_proposed_design.gv.pdf' + 'designProposed': 'approach_proposed_design.gv.pdf', + 'heatReleasePlot': 'heat_release_figure.pdf', + 'evolutionPlot': 'parameter_evolution_figure.pdf' } homogenization_example_parameters : { 'pasteE' : 30e9, @@ -50,3 +52,23 @@ beam_design_example_parameters : { 'beamExComprStrConcreteC': 40, 'beamExComprStrConcreteCUnit': 'N/mm^2', } +heat_release_example_parameters : { + 'heatExBOne': 0.0003, + 'heatExBTwo': 0.001, + 'heatExEta': 6, + 'heatExAlphaMax': 0.875, + 'heatExEAct': 47002, + 'heatExTRef': 25, + 'heatExQPot': 500000, + 'heatExT': 20, + 'heatExDt': 60, + 'heatExTimeTotal': 345600, + } +evolution_example_parameters : { + "evoExAlphaT": 0.2, + "evoExAlphaTx": 0.8, + "evoExaE": 0.5, + "evoExafc": 0.5, + "evoExE": 50, + "evoExfc": 30, + } \ No newline at end of file diff --git a/usecases/optimization_paper/tex/macros/tex_macros_BAM.tex b/usecases/optimization_paper/tex/macros/tex_macros_BAM.tex index ce1de9e69..ae2c5a2dd 100644 --- a/usecases/optimization_paper/tex/macros/tex_macros_BAM.tex +++ b/usecases/optimization_paper/tex/macros/tex_macros_BAM.tex @@ -99,6 +99,7 @@ \newcommand{\DOHCurrent}{\DOH^{\currentn}} % degree of hydration of last timestep \newcommand{\DOHmax}{\alpha_{\text{max}}} % degree of hydration \newcommand{\DOHt}{\alpha_{\text{t}}} % degree of hydration +\newcommand{\DOHTwentyEight}{\alpha_{28}} % degree of hydration \newcommand{\DOHZero}{\alpha_{0}} % degree of hydration \newcommand{\heat}{Q} % cummulative heat release \newcommand{\heatInf}{Q_{\infty}} % total cummulative heat release @@ -125,11 +126,13 @@ \newcommand{\strengthX}{X} \newcommand{\strengthXInf}{\strengthX_\infty} \newcommand{\strengthExp}{a} +\newcommand{\fcTwentyEight}{{\fc}_{28}} \newcommand{\strengthXExp}{\strengthExp_\strengthX} \newcommand{\strengthCExp}{\strengthExp_{\fc}} \newcommand{\strengthTExp}{\strengthExp_{\ft}} \newcommand{\stiffExp}{\strengthExp_{\eMod}} \newcommand{\eModInf}{\eMod_\infty} % youngs modulus +\newcommand{\eModTwentyEight}{\eMod_{28}} % youngs modulus \newcommand{\activE}{E_{\text{a}}} \newcommand{\gasConst}{R} \newcommand{\wc}{r_{\text{wc}}} diff --git a/usecases/optimization_paper/tex/optimization_paper_bibliography_BAM.bib b/usecases/optimization_paper/tex/optimization_paper_bibliography_BAM.bib index 3ecbab3f3..9c25e2a1e 100644 --- a/usecases/optimization_paper/tex/optimization_paper_bibliography_BAM.bib +++ b/usecases/optimization_paper/tex/optimization_paper_bibliography_BAM.bib @@ -251,4 +251,32 @@ @phdthesis{gruyaert2011 school = {{Ghent University}}, title = {{Effect of blast-furnace slag as cement replacement on hydration, microstructure, strength and durability of concrete}}, year = {{2011}}, +} + +@article{Miller_2016, + doi = {10.1088/1748-9326/11/7/074029}, + url = {https://dx.doi.org/10.1088/1748-9326/11/7/074029}, + year = {2016}, + month = {jul}, + publisher = {IOP Publishing}, + volume = {11}, + number = {7}, + pages = {074029}, + author = {Sabbie A Miller and Arpad Horvath and Paulo J M Monteiro}, + title = {Readily implementable techniques can cut annual CO2 emissions from the production of concrete by over 20%}, + journal = {Environmental Research Letters}} + +@Article{car_2016_mamt, + author = {Carette, J\'er\^ome and Staquet, St\'ephanie}, + journal = {Cem. Concr. Compos.}, + title = {Monitoring and modelling the early age and hardening behaviour of eco-concrete through continuous non-destructive measurements: {Part} {II.} Mechanical behaviour}, + year = {2016}, + issn = {0958-9465}, + month = oct, + pages = {1--9}, + volume = {73}, + doi = {10.1016/j.cemconcomp.2016.07.003}, + publisher = {Elsevier BV}, + source = {Crossref}, + url = {https://doi.org/10.1016/j.cemconcomp.2016.07.003}, } \ No newline at end of file diff --git a/usecases/optimization_paper/tex/tex_sections/abstract.tex b/usecases/optimization_paper/tex/tex_sections/abstract.tex index ff35c9b88..9ee604560 100644 --- a/usecases/optimization_paper/tex/tex_sections/abstract.tex +++ b/usecases/optimization_paper/tex/tex_sections/abstract.tex @@ -9,7 +9,9 @@ By applying .... stochastic methods, the quality of the data can be estimated. Automated workflow to simplify addition of additional data points and general reproducibility. -By considering the broader implications of concrete mixture optimization and GWP reduction, this research contributes to the advancement of sustainable construction practices.} +By considering the broader implications of concrete mixture optimization and GWP reduction, this research contributes to the advancement of sustainable construction practices. + +In summary, this paper introduces a holistic optimization procedure that integrates concrete mixture optimization with the structural design of precast concrete elements, aiming to achieve structurally efficient elements with minimized environmental impact. } \keywords{performance oriented design, stochastic optimization, precast concrete, mix design} diff --git a/usecases/optimization_paper/tex/tex_sections/appendix_fem_model.tex b/usecases/optimization_paper/tex/tex_sections/appendix_fem_model.tex index c136b3e98..74b16a455 100644 --- a/usecases/optimization_paper/tex/tex_sections/appendix_fem_model.tex +++ b/usecases/optimization_paper/tex/tex_sections/appendix_fem_model.tex @@ -108,37 +108,42 @@ \subsubsection{Macroscopic tangent} \dfrac{\partial \affinityScale(\temp)}{\partial \temp} = \affinityScale(\temp) \frac{\activE}{\gasConst\temp^2} \end{align} -\subsection{Coupling Material Properties to Degree of Hydration} -\subsubsection{Compressive and tensile strength} -Both compressive and tensile strength can be approximated using an generalized exponential function, +\subsection{Coupling Material Properties to Degree of Hydration} \label{appendix:fem_evolution} +\subsubsection{Compressive strength} +The compressive strength in terms of the degree of hydration can be approximated using an exponential function, c.f. \cite{car_2016_mamt}, \begin{align} - \strengthX(\DOH) = \DOH(\zeit)^{\strengthXExp} \strengthXInf. \label{eq:mechanics-hydration} + \fc(\DOH) = \DOH(\zeit)^{\strengthCExp} \fcInf \label{eq:fcwrtDOH} \end{align} -This model has two parameter, $\strengthXInf$, the value of the parameter at full hydration, $\DOH = 1$ and $\strengthXExp$ the exponent, which is a purely numerical parameter, difficult to estimate directly from a mix design, as the mechanisms are quite complex. +This model has two parameters, $\fcInf$, the compressive strength of the parameter at full hydration, $\DOH = 1$ and $\strengthCExp$ the exponent, which is a purely numerical parameter. + The first parameter could theoretically be obtained through experiments. However the total hydration can take years, therefore usually only the value after 28 days is obtained. -For now we will assume $\strengthXInf$ to be a fitting parameter as well. -Hopefully a functional relation of the standardized $\strengthX_{28}$ values and the ultimate value can be approximated. -To write \eqref{eq:mechanics-hydration} in terms of the compressive strength $\fc$ and the tensile strength $\ft$ +Therefore instead of somehow estimating $\fcInf$, we can approximate it using the 28 days values of the compressive strength and the degree of hydration + \begin{align} - \fc(\DOH) = \DOH(\zeit)^{\strengthCExp} \fcInf \label{eq:fcwrtDOH} +\fcInf = \dfrac{\fcTwentyEight}{{\DOHTwentyEight}^{\strengthCExp}}. \end{align} -The publication assumes for their "C1" mix values of $\fcInf = 62.1$ MPa , $\strengthCExp = 1.2$,$\ftInf = 4.67$ MPa , $\strengthTExp = 1.0$. - \subsubsection{Young's Modulus} -The publication proposes a new model for the evolution of the Young's modulus. -Instead of the generalized model \eqref{eq:mechanics-hydration}, the model assumes an initial linear increase of the Young's modulus up to a degree of hydration $\DOHt$. +The publication \cite{car_2016_mamt} proposes a new model for the evolution of the Young's modulus. +Instead of the generalized model \eqref{eq:mechanics-hydration}, the model assumes an initial linear increase of the Young's modulus up to a degree of hydration $\DOHt$, \begin{align} \eMod(\DOH) = \begin{cases} - E_\infty \frac{\DOH(\zeit)}{\DOHt}\left( \frac{\DOHt-\DOHZero}{1-\DOHZero}\right)^{\stiffExp} + \eModInf \frac{\DOH(\zeit)}{\DOHt}{\DOHt}^{\stiffExp} & \text{for $\DOH < \DOHt$}\\ - \eModInf \left( \frac{\DOH(t)-\DOHZero}{1-\DOHZero}\right)^{\stiffExp} + \eModInf {\DOH(\zeit)}^{\stiffExp} & \text{for $\DOH \ge \DOHt$} - \end{cases}\label{eq:EwrtDOH} + \end{cases}\label{eq:EwrtDOH}. +\end{align} +Contrary to other publications, no dormant period is assumed. +A challenge with this formulation, is that $\eModInf$ is difficult to obtain. +Standardized testing of the Young's modulus is done after 28 day, $\eModTwentyEight$. +To effectively use these experimental values, $\eModInf$ is approximated as +\begin{align} + \eModInf = \dfrac{\eModTwentyEight}{{\DOHTwentyEight}^{\stiffExp}}. \end{align} -Values of $\DOHt$ are assumed to be between 0.1 and 0.2. -For the mix "C1" $\DOHt = 0.09$, $\DOHZero = 0.06$, $\eModInf = 54.2$ MPa, $\stiffExp = 0.4$. +To use this formulation, the experimental value of the Young's modulus after 28 days $\eModTwentyEight$ is required, as well as the approximated degree of hydration at that time $\DOHTwentyEight$ which can be approximated using a calibrated hydration simulation. + \subsection{Constraints} The FEM simulation is used to compute two practical constraints relevant to the precast concrete industry. diff --git a/usecases/optimization_paper/tex/tex_sections/beam_model.tex b/usecases/optimization_paper/tex/tex_sections/beam_model.tex index 4adfecc4e..c02abe1ea 100644 --- a/usecases/optimization_paper/tex/tex_sections/beam_model.tex +++ b/usecases/optimization_paper/tex/tex_sections/beam_model.tex @@ -1,4 +1,4 @@ -\subsubsection{Beam design according to EC2} +\subsection{Beam design according to EC2} To ensure that the chosen mix and beam properties fulfill the requirements according to the European norm for reinforced concrete, \cite{DIN1992-1-1}, the computation of the required steel reinforcement is integrated into the workflow. For a given beam height, load and compressive strength, the minimum required cross section of the steel reinforcement is computed \eqref{eq:Areq}. The results for example parameters, given in Table \ref{tab:beamdesigninput}, are visualized in Figure \ref{fig:beamdesign}. diff --git a/usecases/optimization_paper/tex/tex_sections/concrete_model.tex b/usecases/optimization_paper/tex/tex_sections/concrete_model.tex index f85981322..e05f807c1 100644 --- a/usecases/optimization_paper/tex/tex_sections/concrete_model.tex +++ b/usecases/optimization_paper/tex/tex_sections/concrete_model.tex @@ -1,5 +1,5 @@ \subsection{Finite Element Concrete Model} -The main feature of the concrete model is the evolution of the mechanical properties over time. +The notable feature of the concrete model is the evolution of the mechanical properties over time. When concrete is mixed its consistency is close to liquid. Due to a chemical reaction of the binder with water, called hydration, crystals develop that give concrete its strength and stiffness. The reaction is both exothermal and temperature dependent. @@ -7,23 +7,21 @@ \subsection{Finite Element Concrete Model} The temperature model depends on three material properties, the effective thermal conductivity $\thermCondEff$, the specific heat capacity $C$ and the heat release $\dQdt$. The $\dQdt$ in turn is governed by the hydration model, characterized by six parameters: $\hydParBone, \hydParBtwo, \hydParEta, \tempRef, \activE$ and $\DOHmax$. -The first three $\hydParBone, \hydParBtwo$ and $\hydParEta$ are phenomenological, numerical parameters characterizing the function of the heat release. +The first three $\hydParBone, \hydParBtwo$ and $\hydParEta$ are phenomenological, numerical parameters characterizing the shape of the function of the heat release. $\tempRef$ does not need to be identified. It is the reference temperature for which the first three parameters are calibrated. $\activE$ is the activation energy, defining how the model will react to temperature changes, relative the the reference. $\DOHmax$ is the maximum degree of hydration that can be reached. Following \cite{Mills1966fico}, the maximum degree of hydration is estimated, based on the water to binder ratio $\wc$, as $\DOHmax = \frac{1.031\,\wc}{0.194 + \wc}$. -Figure XY shows the influence of the three numerical parameter on the heat release, wrt DOH??, ... the parameters are given in function .... - - - - -... -FIGURE SHOWING Q over DOH??? -CONTINUE HERE!!!! - -The release heat is computed by the hydration model, ... characterized by 4 parameters.... - +As the degree of hydration if difficult to quantify experimentally, the heat release is used as a proxy. +By assuming the DOH is the fraction of the currently released heat with respect to its theoretical potential $\heatInf$, the current degree of hydration is estimated as $\DOH(\zeit) = \frac{\heat(\zeit)}{\heatInf}$. +As the potential heat release is also difficult to measure, as it takes a long time to fully hydrate and will only do so under perfect conditions, we obtain this value along side the other using the parameter identification method. +Figure \ref{fig:heatrelease} shows the influence of the three numerical parameter and the potential heat release on the heat release rate as well as the cumulative heat release. +\begin{figure}[h]% + \centering + \includegraphics[width=1.0\textwidth]{../figures/\heatReleasePlot} + \caption{Influence of the hydration parameters on the heat release rate and the cumulative heat release.}\label{fig:heatrelease} +\end{figure} For a detailed model description see in Appendix \ref{appendix:fem}. In addition to influencing the reaction speed, the computed temperature is used to verify that the maximum temperature during hydration does not exceed a limit of $\tempLimit = \inputtemperaturelimit$\textdegree C. Above this temperature, certain crystals start to revert back to a different state, expanding in volume and leading to cracks in the concrete. @@ -31,13 +29,12 @@ \subsection{Finite Element Concrete Model} Based on the degree of hydration, the Young's modulus $\eMod$ of a linear-elastic material model is approximated \eqref{eq:EwrtDOH}. Further, a compressive strength in terms of the degree of hydration is computed \eqref{eq:fcwrtDOH}, which is utilized to determine a failure criterion based on the computed local stresses \eqref{eq:constraintStress}. -In the "origianl" model, REFERENCE, the models input requires a Young's modulus and compressive strength for the fully hydrated concrete, $\DOH = 1$. -As the maximum degree of hydration is assumed to depend on the water cement ratio $\wc$, RFERENCE to equation!!!, and .. it will. -.. - - -.... -Figure xy shows the time evaolution of DOH, E and fc for the set of paramters given in Table XY, with some variations relevant to the respective models, as presented in the figure.. - - - +For a detailed description of the parameters evolution with respect to the degree of hydration see in Appendix \ref{appendix:fem_evolution}. +Figure \ref{fig:parameterEvolution} shows the influence of the different parameters. +In addition to the presented formulations in \cite{car_2016_mamt} which depend on a theoretical value of parameters for fully hydrated concrete at $\DOH = 1$, this work reformulates the equations, to depend on the 28 day values $\eModTwentyEight$ and $\fcTwentyEight$ as well as the corresponding $\DOHTwentyEight$ which is obtained via a simulation. + +\begin{figure}[h]% + \centering + \includegraphics[width=1.0\textwidth]{../figures/\evolutionPlot} + \caption{Influence of parameters $\DOHt, \stiffExp$ and $\strengthCExp$ on evolution the Young's modulus and the compressive strength with respect to the degree of hydration $\DOH$. }\label{fig:parameterEvolution} +\end{figure} \ No newline at end of file diff --git a/usecases/optimization_paper/tex/tex_sections/homogenization.tex b/usecases/optimization_paper/tex/tex_sections/homogenization.tex index 6e59dc231..2e51c73cd 100644 --- a/usecases/optimization_paper/tex/tex_sections/homogenization.tex +++ b/usecases/optimization_paper/tex/tex_sections/homogenization.tex @@ -2,14 +2,18 @@ \subsection{Homogenized Concrete Parameters} Experimental data generally provided for concrete material research includes measurements both on concrete and on cement specimens. For the data regarded within this work, the measurements of compressive strength are performed on concrete, the calorimetry on cement samples. Properties of the aggregates are available regardless of the cement.\\ - +\begin{figure}[b]% + \centering + \includegraphics[width=1.0\textwidth]{../figures/\homogenizationPlot} + \caption{Influence of aggregate ratio on effective concrete properties}\label{fig:homogenization} +\end{figure} To be able to take concrete as well as cement data into account, an analytical homogenization procedure is used. The homogenized effective concrete properties are the Young's modulus $\eMod$, the Poisson's ratio $\poission$, the compressive strength $\fc$, the density $\density$, the thermal conductivity $\thermCond$, the heat capacity $\heatCapSpecific$ and the total heat release $\heatInf$. Depending on the physical meaning, these properties need slightly different methods to estimate the effective concrete properties. -To visualize the qualitative effect of the amount of aggregates within the concrete, effective properties are plotted for aggregate values from 0 to 1, respectively pure cement to only aggregates. -Note that both extremes are purely numerical results, not useful optimization results. +To visualize the qualitative effect of the amount of aggregates within the concrete, effective properties are plotted for aggregate values from 0 to 1, respectively pure cement to only aggregates, see Figure \ref{fig:homogenization}. +Note that both extremes are purely numerical examples. \mbox{Table \ref{tab:homogenizationproperties}} gives an overview of the material properties of the constituents used in the subsequent simple examples. -For the considered example properties, the relations are close to linear, this can change, when more complex micro mechanical mechanisms are incorporated, as air pores or the interfacial transition zone. +For the considered example properties, the relations are close to linear, this can change, when the difference between the matrix and the inclusion properties is increased or more complex micro mechanical mechanisms are incorporated, as air pores or the interfacial transition zone. These can be considered within the chosen homogenization scheme by adding further phases, c.f. \cite{nee_2012_ammf}. The required data for a meaningful calibration is however out of the scope of the available data. \begin{table}[ht] @@ -33,7 +37,7 @@ \subsection{Homogenized Concrete Parameters} The elastic, isotropic properties $\eMod$ and $\poission$ of the concrete are approximated using the Mori-Tanaka homogenization scheme \cite{mor_1973_asi}. The method assumes spherical inclusions in an infinite matrix and considers the interactions of multiple inclusions. Details given in \ref{ssec:mt_elastic}\\ The estimation of the concrete compressive strength $\fcEff$ follows the ideas of \cite{nev_2018_mcam}. -The assumption is that a failure in the cement paste will cause the concrete to crack. +The theory is that a failure in the cement paste will cause the concrete to crack. The approach is based on two main assumptions. First, the Mori-Tanaka method is used to estimate the average stress within the matrix material $\stressMatrix$. Second, the von Mises failure criterion of the average matrix stress is used to estimate the uniaxial compressive strength. @@ -41,9 +45,4 @@ \subsection{Homogenized Concrete Parameters} Homogenization of the thermal conductivity is also generally based on the Mori-Tanaka method, following the ideas of \cite{str_2011_mbeo}. Details given in \ref{ssec:thermalconductivity}.\\ The remaining quantities can be directly computed based on their volume average. This is the case for density $\density$, the heat capacity $\heatCapSpecific$ and the total heat release $\heatInf$. -As example the heat release is shown in Figure \ref{fig:homogenization} as it exemplifies the expected linear relation of the volume average as well as the zero heat output of a theoretical pure aggregate.. -\begin{figure}[ht]% - \centering - \includegraphics[width=1.0\textwidth]{../figures/\homogenizationPlot} - \caption{Influence of aggregate ratio on effective concrete properties}\label{fig:homogenization} -\end{figure} \ No newline at end of file +As example for the volume averaged quantities, the heat release is shown in Figure \ref{fig:homogenization} as it exemplifies the expected linear relation of the volume average as well as the zero heat output of a theoretical pure aggregate. \ No newline at end of file diff --git a/usecases/optimization_paper/tex/tex_sections/introduction.tex b/usecases/optimization_paper/tex/tex_sections/introduction.tex index 818a782a1..1a6847db0 100644 --- a/usecases/optimization_paper/tex/tex_sections/introduction.tex +++ b/usecases/optimization_paper/tex/tex_sections/introduction.tex @@ -2,52 +2,48 @@ The controlled production environment allows for higher quality products and enables the mass production of elements. In the standard design approach, engineers or architects select a structure, estimate the loads, choose mechanical properties, and design the element accordingly. If the results are not satisfactory, the required mechanical properties are iteratively adjusted, aiming to improve the design. -This approach is fine, when the choice of mixtures limited and the expected concrete properties are well known. +This approach is fine, when the choice of mixtures is limited and the expected concrete properties are well known. There are various published methods to automate this process and optimize the beam design at this level. -Computer aided beam design optimization dates back at least 50 year, e.g. \cite{Haung1967}. -Generally the objective is reducing costs, with the design variables being the beam geometry, the amount and location of the reinforcement and sometimes the compressive strength of the concrete. +Computer aided beam design optimization dates back at least 50 years, e.g. \cite{Haung1967}. + +Generally the objective is to reduce costs, with the design variables being the beam geometry, the amount and location of the reinforcement and sometimes the compressive strength of the concrete, \cite{Chakrabarty_1992, Coello_1997, Pierott_2021, Shobeiri_2023} . Most publications focus on analytical functions based on norms and well known rules of thumb. In recent years the use of alternative binders in the concrete mix design has increased, mainly to reduce the environmental impact and cost of concrete but also to improve and modify specific properties. This is a challenge as the concrete mix is no longer a constant and is itself subjected to optimization. Known heuristics might no longer apply to the new materials and old design approaches might fail to produce optimal results. -In addition it is not reasonable to choose from a predetermined set of possible mixes, as this would either lead to an exaggerated number of required experiments or a limiting subset of the possible design space. -There exist literature studying the optimization of specific concrete properties on the concrete mix. -The objective in that literature is normally to either improve some mechanical property like durability within constraints, or minimizing e.g. the amount of concrete while keeping other properties above a threshold. -When designing elements subjected to various requirements, both on the material and structural level, including workability of the fresh concrete, durability of the structure, maximum acceptable temperature, minimal cost and global warming potential, the optimal solution is not apparent. -The conventional method of design does not allow for an concurrent optimization of structural measures and concrete mix composition, as the structural design and the concrete mix design are decoupled, c.f. Figure \ref{fig:standard_design}. -The lack of coordination between the designer and the concrete manufacturer therefore often leads to suboptimal solutions, as neither party possesses all the relevant information. - -A first step to address these limitations is the incorporation of compressive strength during a optimization in the beam design phase. -Higher compressive strength usually correlates with lager amount of cement and therefore higher cost as well as global warming potential. -This approach has shown promising results in achieving improved structural efficiency while considering environmental impact. -To be able to find a part specific optimum, individual data of the manufacturer and specific mix options must be integrated. -Therefore, there is still a need for a comprehensive optimization procedure that can seamlessly integrate concrete mixture optimization and structural simulations, ensuring structurally sound and buildable elements with minimized environmental impact for part specific data. -\\\\ -\begin{figure}[ht]% +In addition, it is not desirable to choose from a predetermined set of possible mixes, as this would either lead to an exaggerated number of required experiments or a limiting subset of the possible design space. +There exist literature studying the optimization of the concrete mix for specific concrete properties \cite{Lisienkova_2021, Kondapally_2022}. +\begin{figure}[b]% \centering \includegraphics[width=1.0\textwidth]{../figures/\designStandard} \caption{Classical design approach, where the required material properties are defined before the mix is defined.}\label{fig:standard_design} \end{figure} -\begin{figure}[ht]% +The objective in that literature is normally to either improve some mechanical property like durability within constraints, or to minimize e.g. the amount of concrete while keeping other properties above a threshold. +When designing elements subjected to various requirements, both on the material and structural level, including workability of the fresh concrete, durability of the structure, maximum acceptable temperature, minimal cost and global warming potential, the optimal solution is not apparent and will change depending on each individual project. +The conventional method of design does not allow for an concurrent optimization of structural measures and concrete mix composition, as the structural design and the concrete mix design are inversely coupled, c.f. Figure \ref{fig:standard_design}. +The lack of coordination between the designer and the concrete manufacturer can therefore lead to suboptimal solutions, as neither party possesses all the relevant information. +A first step to address these limitations is the incorporation of compressive strength during a optimization in the beam design phase. +Higher compressive strength usually correlates with lager amount of cement and therefore higher cost as well as global warming potential. +This approach has shown promising results in achieving improved structural efficiency while considering environmental impact \cite{dos_Santos_2023}. +To be able to find a part specific optimum, individual data of the manufacturer and specific mix options must be integrated. +Therefore, there is still a need for a comprehensive optimization procedure that can seamlessly integrate concrete mixture optimization and structural simulations, ensuring structurally sound and buildable elements with minimized environmental impact for part specific data. +\\ +\begin{figure}[b]% \centering \includegraphics[width=1.0\textwidth]{../figures/\designProposed} \caption{Presented design approach that allows for a holistic optimization.}\label{fig:proposed_workflow} \end{figure} %%%%%%%%%%%%%%%%%%%% -This work inverts the classical design pipeline. -As a first step a concrete mix is defined. -Based on the output, the beam design is created, see Figure \ref{fig:proposed_workflow}. - In this paper, we present a holistic optimization procedure that combines concrete mixture optimization with the structural response of precast concrete elements, using structural simulations as constraints to ensure structural integrity, limit the maximum temperature and ensure an adequate time of demolding. -The primary goal of this optimization procedure is to reduce the GWP of precast concrete elements. +This inverts the classical design pipeline. +As a first step the concrete mix is defined. +Based on the output, the beam design is created, c.f. Figure \ref{fig:proposed_workflow}. +The chosen example of this optimization procedure is to reduce the GWP of precast concrete elements. By integrating the concrete mixture optimization and structural design processes, engineers can tailor the concrete properties to meet specific requirements of the customer and manufacturer. -This approach will open up possibilities for performance prediction and optimization for new mixture that fall outside the standard range of well-known concrete. - - - +This approach opens up possibilities for performance prediction and optimization for new mixture that fall outside the standard range of well-known concrete. To the best of our knowledge there are no published works that combine the material and structural level in one flexible optimization framework. In addition to changing the order of the design steps, the proposed framework allows to directly integrate experimental data and propagate the identified uncertainties. -This allows a straight forward integration of new data and an quantification of uncertainties regarding the predictions. +This allows a straight forward integration of new data and and quantification of uncertainties regarding the predictions. The proposed framework consists of three main parts. First, an automated and reproducible parameter identification method to calibrate the models. Second, a gradient-based optimization method for non-differentiable functions, including constraints. @@ -57,63 +53,27 @@ It has been used to showcase different optimization schemes, e.g. \cite{Chakrabarty_1992}, \cite{Coello_1997}, \cite{Pierott_2021}. The experimental data used in the parameter identification step is mainly sourced from \cite{gruyaert2011}. The objective is to reduce the overall global warming potential of the part. - - -The cement industry, a major contributor to GWP, accounts for approximately 8\% of the total anthropogenic GWP. +This objective is particularly meaningful as the cement industry, a major contributor to GWP, accounts for approximately 8\% of the total anthropogenic GWP, \cite{Miller_2016}. Reducing the environmental impact of cement production becomes crucial in the pursuit of sustainable construction practices. -There are three direct ways to reduce the amount of cement. -First, replace the cement with a substitute with a lower carbon footprint, as for example ground granulated slag,. +In addition, the reduction of cement is also correlated to the reduction of cost, as cement is generally the most expensive component of the concrete mix \cite{Paya_Zaforteza_2009}. +There are three direct ways to reduce the amount GWP of a given concrete part. +First, replace the cement with a substitute with a lower carbon footprint. This can change mechanical properties, but does not necessarily mean a reduction in strength. -Second, increase the amount of aggregates. -This also changes effective properties and needs to be balanced with the workability and the limits due to the applications -Third, decrease the overall volume of concrete. -This must be optimized on a structural level. -Fourth, improve durability, therefore making the structure more sustainable. - - -To showcase the methods capability, two design variables have been chosen, the height of the beam and the ratio of ordinary Portland cement (OPC) to its replacement binder ground granulated blast furnace slack. - - - -As the chosen cost function is different to the ones used in other publications, a direct comparison of the optimum will not be of value, however it allows to give an idea of what might be a reasonable solution. - - +Second, increase the amount of aggregates, therefore reducing the cement per volume. +This also changes effective properties and needs to be balanced with the workability and the limits due to the applications. +Third, decrease the overall volume of concrete, by improving the topology of the part. +In addition, when analyzing the whole life-cycle of a structure, both cost and GWP can be reduced by increasing the durability and therefore extending it's lifetime. +To showcase the methods capability, two design variables have been chosen; the height of the beam and the ratio of ordinary Portland cement (OPC) to its replacement binder ground granulated blast furnace slack, a by-product of the iron industry.\\ % The value of this manuscript lies in two main contributions. -Firstly, it presents the possibility to automatically compute relevant Key Performance Indicators (KPIs) at the structural level, based on input values that incorporate parameters relevant to the concrete mix design. +First, it presents the possibility to automatically compute relevant Key Performance Indicators (KPIs) at the structural level, based on input values that incorporate parameters relevant to the concrete mix design, inverting the classical design pipeline. This allows for a comprehensive evaluation of both structural performance and environmental impact. -Secondly, the paper details the numerical methods employed to conduct a robust optimization process without derivatives, taking into account uncertainties based on raw experimental data. -\\\\ +Second, the paper details the numerical methods employed to conduct a robust optimization process without derivatives, taking into account uncertainties based on raw experimental data. +\\ % this might change and needs to be adapted -In summary, this paper introduces a holistic optimization procedure that integrates concrete mixture optimization with the structural design of precast concrete elements, aiming to achieve structurally efficient elements with minimized environmental impact. -The paper starts with the theoretical background of the parameter identification method in Section \ref{sec:calibration} and is followed by the optimization method in Section \ref{sec:optimization} and some numerical experiments showcasing the method in \ref{sec:numericalexperiments}. +The paper starts with the theoretical background of the parameter identification method in Section \ref{sec:calibration}. +It is followed by the optimization method in Section \ref{sec:optimization} and some numerical experiments showcasing the method in \ref{sec:numericalexperiments}. Section \ref{sec:data} gives details on the example problem and an overview of the available experimental data. -The following Section \ref{sec:models} gives an overview of the material models and assumption used. -In Section \ref{sec:results} all parts parts, the experimental data, the calibration method, the numerical models and the optimization framework are combined to demonstrate the effectiveness and practicality of the proposed approach. -The publication finishes with a conclusion and outlook in Section \ref{sec:conclusion}. -\\\\ -% this is just for testing purposes, this can be deleted or moved to a different location - - -.... - -\cite{Chakrabarty_1992} original optimization example, cross section for cost and reinforcement. -problem taken from book \cite{everard1966reinforced}. - -\cite{Coello_1997} , , cross section optimization, fixed fc, genetic algorithm, cost optimization. -\cite{Pierott_2021} more optimization, focusing on reinforcement and also varying fc, optimizing cost. -\cite{Paya_Zaforteza_2009} CO2 optimization and cost!!! they are correlated and optimum is similar. -\cite{dos_Santos_2023} multi objective optimization, CO2 reduction, various fc. - -.... -Mix optimization -\cite{Lisienkova_2021} optimizing mix for cement properties -\cite{Kondapally_2022} more mix optimization for cement properties -\cite{Shobeiri_2023} data driven, mix optimization - - - -Earlier optimization examples mainly focus on analytical models described in norms. -By applying modern, complex FEM simulations and data driven methods, more complex constraints and functions can be incorporated, improving on coarse rules of thumb. - - +The following Section \ref{sec:models} gives an overview of the material models and applied assumption. +In Section \ref{sec:results} all parts, the experimental data, the calibration method, the numerical models and the optimization framework are combined to demonstrate the effectiveness and practicality of the proposed approach. +The publication finishes with a conclusion and outlook in Section \ref{sec:conclusion}. \ No newline at end of file