From 18bd2737489b0ba506f512265f86987408709296 Mon Sep 17 00:00:00 2001 From: Lorena Hendrix Date: Tue, 20 Feb 2024 14:09:14 +0100 Subject: [PATCH] Juliacall removed from streamlit app, converting of juliacall wraps to python objects in flask_api, and docker volumes are added for host-container syncing --- .../{ => flask-container}/devcontainer.json | 9 +- .../nginx-container/devcontainer.json | 49 ++++ .../streamlit-container/devcontainer.json | 51 ++++ .github/dependabot.yml | 12 + docker-compose-dev.yml | 16 +- docker-compose.yml | 7 + flask_api/Dockerfile | 9 +- flask_api/api.py | 54 +++- flask_api/julia/runP2DBattery.jl | 18 +- flask_api/test.txt | 0 flask_api/wsgi.py | 2 +- nginx/Dockerfile | 4 +- streamlit/Dockerfile | 11 +- streamlit/app_scripts/app_view.py | 73 +++-- .../input_files/battmo_formatted_input.json | 8 +- streamlit/input_files/linked_data_input.json | 252 +++++++++++++++--- streamlit/output_files/battmo_results | Bin 67926 -> 65805 bytes streamlit/output_files/calculated_values.json | 6 +- streamlit/pages/1_Simulation.py | 1 + streamlit/pages/2_Results.py | 1 - streamlit/requirements.txt | 1 - 21 files changed, 465 insertions(+), 119 deletions(-) rename .devcontainer/{ => flask-container}/devcontainer.json (85%) create mode 100644 .devcontainer/nginx-container/devcontainer.json create mode 100644 .devcontainer/streamlit-container/devcontainer.json create mode 100644 .github/dependabot.yml create mode 100644 flask_api/test.txt diff --git a/.devcontainer/devcontainer.json b/.devcontainer/flask-container/devcontainer.json similarity index 85% rename from .devcontainer/devcontainer.json rename to .devcontainer/flask-container/devcontainer.json index ff6c235..35f62c9 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/flask-container/devcontainer.json @@ -1,8 +1,9 @@ { - "name": "BattMoGUIEnv", - "dockerComposeFile": "../docker-compose-dev.yml", - "service": "devcontainer", - "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "name": "Flask Container", + "dockerComposeFile": "../../docker-compose-dev.yml", + "service": "flask_api", + "shutdownAction": "none", + "workspaceFolder": "/workspace/flask_api", // "remoteEnv": { // "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}/.." // }, diff --git a/.devcontainer/nginx-container/devcontainer.json b/.devcontainer/nginx-container/devcontainer.json new file mode 100644 index 0000000..1a38114 --- /dev/null +++ b/.devcontainer/nginx-container/devcontainer.json @@ -0,0 +1,49 @@ +{ + "name": "Nginx Container", + "dockerComposeFile": "../../docker-compose-dev.yml", + "service": "nginx", + "shutdownAction": "none", + "workspaceFolder": "/workspace/nginx" + // "remoteEnv": { + // "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}/.." + // }, + // "mounts": [ + // "source=${localWorkspaceFolder}/..,target=/workspace,type=bind,consistency=cached" + // ], + // "remoteEnv": { + // "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}", + // }, + + //"runArgs": [ "-v", "/var/run/docker.sock:/var/run/docker.sock"], + + + //"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + + // Set *default* container specific settings.json values on container create. + // "customizations": { + + // "vscode": { + // "settings": { + // "python.pythonPath": "/usr/local/bin/python", + // "python.languageServer": "Pylance", + // "python.linting.enabled": true, + // "python.linting.pylintEnabled": true + + + // }, + // // "customVolumeMounts": [ + // // "/../flask_api:/workspaces/flask_api", + // // "/../nginx:/workspaces/nginx", + // // "/../streamlit:/workspaces/streamlit" + // // ], + + // "extensions": [ + // "ms-python.python", + // "ms-python.vscode-pylance", + // "julialang.language-julia" + + // ] + // } + // } + +} \ No newline at end of file diff --git a/.devcontainer/streamlit-container/devcontainer.json b/.devcontainer/streamlit-container/devcontainer.json new file mode 100644 index 0000000..033b5f0 --- /dev/null +++ b/.devcontainer/streamlit-container/devcontainer.json @@ -0,0 +1,51 @@ +{ + "name": "Streamlit Container", + "dockerComposeFile": "../../docker-compose-dev.yml", + "service": "streamlit", + "shutdownAction": "none", + "workspaceFolder": "/workspace/streamlit", + + + // "remoteEnv": { + // "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}/.." + // }, + // "mounts": [ + // "source=${localWorkspaceFolder}/..,target=/workspace,type=bind,consistency=cached" + // ], + // "remoteEnv": { + // "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}", + // }, + + //"runArgs": [ "-v", "/var/run/docker.sock:/var/run/docker.sock"], + + + //"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + + // Set *default* container specific settings.json values on container create. + "customizations": { + + "vscode": { + "settings": { + "python.pythonPath": "/usr/local/bin/python", + "python.languageServer": "Pylance", + "python.linting.enabled": true, + "python.linting.pylintEnabled": true + + + }, + // "customVolumeMounts": [ + // "/../flask_api:/workspaces/flask_api", + // "/../nginx:/workspaces/nginx", + // "/../streamlit:/workspaces/streamlit" + // ], + + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance", + "julialang.language-julia" + + ] + } + } + +} \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..f33a02c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for more information: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +# https://containers.dev/guide/dependabot + +version: 2 +updates: + - package-ecosystem: "devcontainers" + directory: "/" + schedule: + interval: weekly diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 2315230..ab734b4 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -1,14 +1,6 @@ version: "3.8" services: - devcontainer: - image: mcr.microsoft.com/devcontainers/base:jammy - volumes: - - "../..:/workspaces:cached" - network_mode: service:streamlit - command: sleep infinity - - nginx: build: ./nginx container_name: nginx @@ -16,7 +8,7 @@ services: ports: - "8001:8001" volumes: - - /workspaces/Repositories/nginx:/app + - ./nginx:/app depends_on: - flask_api @@ -27,9 +19,9 @@ services: ports: - "8000:8000" volumes: - - /workspaces/Repositories/flask_api:/app + - ./flask_api:/app command: gunicorn -w 1 -b 0.0.0.0:8000 wsgi:server --timeout 200 - #command: python wsgi.py + streamlit: build: ./streamlit @@ -38,5 +30,5 @@ services: ports: - "8501:8501" volumes: - - /workspaces/Repositories/streamlit:/app + - ./streamlit:/app command: streamlit run Introduction.py --global.disableWidgetStateDuplicationWarning true --server.port=8501 diff --git a/docker-compose.yml b/docker-compose.yml index d809238..437bc95 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,8 @@ services: restart: always ports: - "8000:8000" + volumes: + - ./flask_api:/app command: gunicorn -w 1 -b 0.0.0.0:8000 wsgi:server --timeout 200 #command: python wsgi.py nginx: @@ -16,9 +18,12 @@ services: restart: always ports: - "8001:8001" + volumes: + - ./nginx:/app depends_on: - flask_api + streamlit: @@ -27,5 +32,7 @@ services: restart: always ports: - "8501:8501" + volumes: + - ./streamlit:/app command: streamlit run Introduction.py --global.disableWidgetStateDuplicationWarning true --server.port=8501 \ No newline at end of file diff --git a/flask_api/Dockerfile b/flask_api/Dockerfile index 5b8abc7..79cad34 100644 --- a/flask_api/Dockerfile +++ b/flask_api/Dockerfile @@ -7,16 +7,19 @@ RUN pip install jill --no-cache-dir RUN jill install 1.9.2 --confirm -RUN rm -rf ~/.julia/compiled +#RUN rm -rf ~/.julia/compiled # Helpful Development Packages + +RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "PythonCall",version = "0.9.14"))' +RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "JSON",version = "0.21.4"))' RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "BattMo",version = "0.1.6"))' +#RUN julia -e 'using Pkg; Pkg.add("BattMo")' RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "Jutul",version = "0.2.14"))' #RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;url="https://github.com/BattMoTeam/BattMo.jl.git", rev="refac"))' #RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "Jutul",version = "0.2.14"))' RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "LoggingExtras",version = "1.0.3"))' -RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "PythonCall",version = "0.9.14"))' -RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "JSON",version = "0.21.4"))' + RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "PrettyTables",version = "2.2.7"))' COPY requirements.txt . diff --git a/flask_api/api.py b/flask_api/api.py index 932a2d1..14d46b7 100644 --- a/flask_api/api.py +++ b/flask_api/api.py @@ -7,6 +7,7 @@ import pickle from uuid import uuid4 import os +import numpy as np ############################## @@ -34,28 +35,57 @@ def run_julia(q_in,q_out): # Define the Julia code to execute julia_code = f"runP2DBattery.runP2DBatt(\"{file_name}\")" - log_messages, number_of_states, cell_voltage, cell_current, time_values, negative_electrode_grid, electrolyte_grid, positive_electrode_grid, negative_electrode_concentration, electrolyte_concentration, positive_electrode_concentration, negative_electrode_potential, electrolyte_potential, positive_electrode_potential = jl.seval(julia_code) + log_messages, number_of_states, cell_voltage, cell_current, time_values, negative_electrode_grid, negative_electrode_grid_bc, electrolyte_grid, electrolyte_grid_bc, positive_electrode_grid, positive_electrode_grid_bc, negative_electrode_concentration, electrolyte_concentration, positive_electrode_concentration, negative_electrode_potential, electrolyte_potential, positive_electrode_potential = jl.seval(julia_code) print("The simulation has completed {} time steps.".format(number_of_states)) + # Converting data to python objects + negative_electrode_concentration = [jl.Py(subarray).to_numpy() for subarray in negative_electrode_concentration], + negative_electrode_concentration = np.vstack(negative_electrode_concentration) + + electrolyte_concentration = [jl.Py(subarray).to_numpy() for subarray in electrolyte_concentration], + electrolyte_concentration = np.vstack(electrolyte_concentration) + + positive_electrode_concentration = [jl.Py(subarray).to_numpy() for subarray in positive_electrode_concentration], + positive_electrode_concentration = np.vstack(positive_electrode_concentration) + + negative_electrode_potential = [jl.Py(subarray).to_numpy() for subarray in negative_electrode_potential], + negative_electrode_potential = np.vstack(negative_electrode_potential) + + electrolyte_potential = [jl.Py(subarray).to_numpy() for subarray in electrolyte_potential], + electrolyte_potential = np.vstack(electrolyte_potential) + + positive_electrode_potential = [jl.Py(subarray).to_numpy() for subarray in positive_electrode_potential], + positive_electrode_potential = np.vstack(positive_electrode_potential) + + print(number_of_states) - output = [log_messages, - number_of_states, - cell_voltage, - cell_current, - time_values, - negative_electrode_grid, - electrolyte_grid, - positive_electrode_grid, + output = [ np.array(log_messages), + int(number_of_states[0]), + jl.Py(cell_voltage).to_numpy(), + jl.Py(cell_current).to_numpy(), + jl.Py(time_values).to_numpy(), + np.squeeze(jl.Py(negative_electrode_grid).to_numpy()), + np.squeeze(jl.Py(negative_electrode_grid_bc).to_numpy()), + np.squeeze(jl.Py(electrolyte_grid).to_numpy()), + np.squeeze(jl.Py(electrolyte_grid_bc).to_numpy()), + np.squeeze(jl.Py(positive_electrode_grid).to_numpy()), + np.squeeze(jl.Py(positive_electrode_grid_bc).to_numpy()), negative_electrode_concentration, electrolyte_concentration, positive_electrode_concentration, negative_electrode_potential, electrolyte_potential, - positive_electrode_potential - ] - + positive_electrode_potential] + + print(output) + + # print("1: ", negative_electrode_grid) + # print("2: ", output[5]) + # print("3: ", type(output[5])) + # with open("test.txt", "w") as new_pickle_file: + # new_pickle_file.write(output) with open(os.path.join("results",uuid_str), "wb") as new_pickle_file: pickle.dump(output, new_pickle_file) diff --git a/flask_api/julia/runP2DBattery.jl b/flask_api/julia/runP2DBattery.jl index 5c62e08..38bb504 100644 --- a/flask_api/julia/runP2DBattery.jl +++ b/flask_api/julia/runP2DBattery.jl @@ -14,6 +14,9 @@ module runP2DBattery negative_electrode_grid = 0 electrolyte_grid = 0 positive_electrode_grid = 0 + negative_electrode_grid_bc = 0 + electrolyte_grid_bc = 0 + positive_electrode_grid_bc = 0 negative_electrode_concentration = 0 electrolyte_concentration = 0 positive_electrode_concentration = 0 @@ -63,9 +66,16 @@ module runP2DBattery # Create grid arrays - negative_electrode_grid = [centroids_NAM, boundaries_NAM].*10^6 - electrolyte_grid = [centroids_ELYTE, boundaries_ELYTE].*10^6 - positive_electrode_grid = [centroids_PAM, boundaries_PAM].*10^6 + # negative_electrode_grid = [centroids_NAM, boundaries_NAM].*10^6 + # electrolyte_grid = [centroids_ELYTE, boundaries_ELYTE].*10^6 + # positive_electrode_grid = [centroids_PAM, boundaries_PAM].*10^6 + + negative_electrode_grid = centroids_NAM.*10^6 + negative_electrode_grid_bc = boundaries_NAM.*10^6 + electrolyte_grid = centroids_ELYTE.*10^6 + electrolyte_grid_bc = boundaries_ELYTE.*10^6 + positive_electrode_grid = centroids_PAM.*10^6 + positive_electrode_grid_bc = boundaries_PAM.*10^6 negative_electrode_concentration = negative_electrode_concentration[1] positive_electrode_concentration = positive_electrode_concentration[1] @@ -78,6 +88,6 @@ module runP2DBattery close(log_buffer) end - return log_messages, number_of_states, cell_voltage, cell_current, time_values, negative_electrode_grid, electrolyte_grid, positive_electrode_grid, negative_electrode_concentration, electrolyte_concentration, positive_electrode_concentration, negative_electrode_potential, electrolyte_potential, positive_electrode_potential + return log_messages, number_of_states, cell_voltage, cell_current, time_values, negative_electrode_grid, negative_electrode_grid_bc, electrolyte_grid, electrolyte_grid_bc, positive_electrode_grid, positive_electrode_grid_bc, negative_electrode_concentration, electrolyte_concentration, positive_electrode_concentration, negative_electrode_potential, electrolyte_potential, positive_electrode_potential end end \ No newline at end of file diff --git a/flask_api/test.txt b/flask_api/test.txt new file mode 100644 index 0000000..e69de29 diff --git a/flask_api/wsgi.py b/flask_api/wsgi.py index 2280adf..7a746f2 100644 --- a/flask_api/wsgi.py +++ b/flask_api/wsgi.py @@ -4,4 +4,4 @@ if __name__ == '__main__': #multiprocessing.set_start_method("spawn")' - server.run(host='0.0.0.0', port=8000) \ No newline at end of file + server.run(host='0.0.0.0', port=8000, debug=True) \ No newline at end of file diff --git a/nginx/Dockerfile b/nginx/Dockerfile index c465d17..87a90c8 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -1,6 +1,6 @@ FROM nginx:1.15.8 -RUN rm /etc/nginx/nginx.conf COPY nginx.conf /etc/nginx/ +RUN rm /etc/nginx/nginx.conf +COPY project.conf /etc/nginx/conf.d/ RUN rm /etc/nginx/conf.d/default.conf -COPY project.conf /etc/nginx/conf.d/ \ No newline at end of file diff --git a/streamlit/Dockerfile b/streamlit/Dockerfile index b6b3aa6..8ca1ef4 100644 --- a/streamlit/Dockerfile +++ b/streamlit/Dockerfile @@ -2,14 +2,13 @@ FROM python:3.11.4 WORKDIR /app -RUN pip install jill --no-cache-dir +COPY requirements.txt . + +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . -RUN jill install 1.9.2 --confirm -RUN julia -e 'using Pkg; Pkg.add(PackageSpec(;name = "PythonCall",version = "0.9.14"))' -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt -COPY . . \ No newline at end of file diff --git a/streamlit/app_scripts/app_view.py b/streamlit/app_scripts/app_view.py index a52cefe..5fa7ea6 100644 --- a/streamlit/app_scripts/app_view.py +++ b/streamlit/app_scripts/app_view.py @@ -2932,7 +2932,7 @@ def execute_api_on_click(self, save_run): # Set the Content-Type header to application/json headers = {'Content-Type': 'application/json'} - response_start = requests.post(self.api_url, json=json_data, headers=headers) + response_start = requests.post(self.api_url, json=json_data) if response_start.status_code == 200: @@ -2940,10 +2940,13 @@ def execute_api_on_click(self, save_run): with open(app_access.get_path_to_battmo_results(), "wb") as f: f.write(response_start.content) + # with open(app_access.get_path_to_battmo_results(), "wb") as f: + # pickle.dump(response_start.content, f) + else: st.write(response_start) + - # with open("BattMo_results.pkl", "rb") as f: # data = pickle.load(f) @@ -2958,6 +2961,8 @@ def execute_api_on_click(self, save_run): # clear cache to get new data in hdf5 file (cf Plot_latest_results) st.cache_data.clear() + + st.session_state.update_par = False st.session_state.sim_finished = True @@ -2996,7 +3001,11 @@ def get_timesteps_execution(self): # Retrieve latest results with open(app_access.get_path_to_battmo_results(), "rb") as pickle_result: result = pickle.load(pickle_result) + #result_str = pickle_result.read() + + #sresult = eval(result_str) + [ log_messages, number_of_states, @@ -3004,8 +3013,11 @@ def get_timesteps_execution(self): cell_current, time_values, negative_electrode_grid, + negative_electrode_grid_bc, electrolyte_grid, + electrolyte_grid_bc, positive_electrode_grid, + positive_electrode_grid_bc, negative_electrode_concentration, electrolyte_concentration, positive_electrode_concentration, @@ -3022,7 +3034,7 @@ def divergence_check_logging(self,N, number_of_states,log_messages): save_run = st.empty() if len(log_messages) > 1: c = save_run.container() - if number_of_states[0] >= N: + if number_of_states >= N: st.session_state.succes = True c.success("Simulation finished successfully, but some warnings were produced. See the logging below for the warnings and check the results on the next page.") @@ -3247,8 +3259,11 @@ def format_results(self, results): cell_current, time_values, negative_electrode_grid, + negative_electrode_grid_bc, electrolyte_grid, + electrolyte_grid_bc, positive_electrode_grid, + positive_electrode_grid_bc, negative_electrode_concentration_jl, electrolyte_concentration_jl, positive_electrode_concentration_jl, @@ -3299,8 +3314,11 @@ def format_results(self, results): cell_current, time_values, negative_electrode_grid, + negative_electrode_grid_bc, electrolyte_grid, + electrolyte_grid_bc, positive_electrode_grid, + positive_electrode_grid_bc, negative_electrode_concentration, electrolyte_concentration, positive_electrode_concentration, @@ -3491,8 +3509,11 @@ def prepare_h5_file(_self): cell_current, time_values, negative_electrode_grid, + negative_electrode_grid_bc, electrolyte_grid, + electrolyte_grid_bc, positive_electrode_grid, + positive_electrode_grid_bc, negative_electrode_concentration, electrolyte_concentration, positive_electrode_concentration, @@ -3514,9 +3535,9 @@ def prepare_h5_file(_self): f.create_dataset("cell_current", data=cell_current) grids = f.create_group("grids") - grids.create_dataset("negative_electrode_grid", data=negative_electrode_grid[1]) - grids.create_dataset("positive_electrode_grid", data=positive_electrode_grid[1]) - grids.create_dataset("electrolyte_grid", data=electrolyte_grid[1]) + grids.create_dataset("negative_electrode_grid", data=negative_electrode_grid) + grids.create_dataset("positive_electrode_grid", data=positive_electrode_grid) + grids.create_dataset("electrolyte_grid", data=electrolyte_grid) concentrations = f.create_group("concentrations") @@ -3530,7 +3551,7 @@ def prepare_h5_file(_self): electrolyte_potentials = potentials.create_group("electrolyte") positive_electrode_potentials = potentials.create_group("positive_electrode") - for i in range(number_of_states[0]): + for i in range(number_of_states): negative_electrode_concentrations.create_dataset( "ne_c_state_{}".format(i), data=np.array(negative_electrode_concentration[i], dtype=float) @@ -3569,6 +3590,7 @@ def __init__(_self,results): _self.header = "Visualize results" _self.dashboard_header = "Dynamic dashboard" + _self.results = results [ _self.log_messages, @@ -3577,8 +3599,11 @@ def __init__(_self,results): _self.cell_current, _self.time_values, _self.negative_electrode_grid, + _self.negative_electrode_grid_bc, _self.electrolyte_grid, + _self.electrolyte_grid_bc, _self.positive_electrode_grid, + _self.positive_electrode_grid_bc, _self.negative_electrode_concentration, _self.electrolyte_concentration, _self.positive_electrode_concentration, @@ -3631,6 +3656,8 @@ def set_graph_toggles(_self): value=False ) + + #st.divider() return display_dynamic_dashboard, display_colormaps @@ -3684,7 +3711,7 @@ def set_colormaps(_self): @st.cache_data def get_elyte_p_color(_self): return _self.create_colormap( - x_data=_self.electrolyte_grid[0], + x_data=_self.electrolyte_grid, y_data=_self.time_values, z_data=_self.electrolyte_potential, title="Electrolyte - Potential", @@ -3696,7 +3723,7 @@ def get_elyte_p_color(_self): @st.cache_data def get_elyte_c_color(_self): return _self.create_colormap( - x_data=_self.electrolyte_grid[0], + x_data=_self.electrolyte_grid, y_data=_self.time_values, z_data=_self.electrolyte_concentration, title="Electrolyte - Concentration", @@ -3708,7 +3735,7 @@ def get_elyte_c_color(_self): @st.cache_data def get_pe_p_color(_self): return _self.create_colormap( - x_data=_self.positive_electrode_grid[0], + x_data=_self.positive_electrode_grid, y_data=_self.time_values, z_data=_self.positive_electrode_potential, title="Positive Electrode - Potential", @@ -3720,7 +3747,7 @@ def get_pe_p_color(_self): @st.cache_data def get_pe_c_color(_self): return _self.create_colormap( - x_data=_self.positive_electrode_grid[0], + x_data=_self.positive_electrode_grid, y_data=_self.time_values, z_data=np.array(_self.positive_electrode_concentration), title="Positive Electrode - Concentration", @@ -3732,7 +3759,7 @@ def get_pe_c_color(_self): @st.cache_data def get_ne_c_color(_self): return _self.create_colormap( - x_data=_self.negative_electrode_grid[0], + x_data=_self.negative_electrode_grid, y_data=_self.time_values, z_data=_self.negative_electrode_concentration, title="Negative Electrode - Concentration", @@ -3745,7 +3772,7 @@ def get_ne_c_color(_self): @st.cache_data def get_ne_p_color(_self): return _self.create_colormap( - x_data=_self.negative_electrode_grid[0], + x_data=_self.negative_electrode_grid, y_data=_self.time_values, z_data=_self.negative_electrode_potential, title="Negative Electrode - Potential", @@ -3836,7 +3863,7 @@ def view_plots_static(_self,state): # Negative Electrode Concentration ne_concentration = _self.create_subplot( - x_data=np.squeeze(_self.negative_electrode_grid[0]), + x_data=np.squeeze(_self.negative_electrode_grid), y_data=np.squeeze(_self.negative_electrode_concentration)[state], title="Negative Electrode Concentration / mol . L-1", x_label="Position / \u00B5m", @@ -3851,7 +3878,7 @@ def view_plots_static(_self,state): # Electrolyte Concentration elyte_concentration = _self.create_subplot( - x_data=np.squeeze(_self.electrolyte_grid[0]), + x_data=_self.electrolyte_grid, y_data=_self.electrolyte_concentration[state], title="Electrolyte Concentration / mol . L-1", x_label="Position / \u00B5m", @@ -3865,10 +3892,10 @@ def view_plots_static(_self,state): ) # Positive Electrode Concentration - positive_electrode_concentration_ext = np.full(len(_self.electrolyte_grid[0]), np.nan) + positive_electrode_concentration_ext = np.full(len(_self.electrolyte_grid), np.nan) positive_electrode_concentration_ext[-10:] = np.squeeze(_self.positive_electrode_concentration)[state] pe_concentration = _self.create_subplot( - x_data=np.squeeze(_self.electrolyte_grid[0]), + x_data=_self.electrolyte_grid, y_data=positive_electrode_concentration_ext, title="Positive Electrode Concentration / mol . L-1", x_label="Position / \u00B5m", @@ -3893,7 +3920,7 @@ def view_plots_static(_self,state): # Negative Electrode Potential ne_potential = _self.create_subplot( - x_data=np.squeeze(_self.negative_electrode_grid[0]), + x_data=np.squeeze(_self.negative_electrode_grid), y_data=_self.negative_electrode_potential[state], title="Negative Electrode Potential / V", x_label="Position / \u00B5m", @@ -3908,7 +3935,7 @@ def view_plots_static(_self,state): # Electrolyte Potential elyte_potential = _self.create_subplot( - x_data=np.squeeze(_self.electrolyte_grid[0]), + x_data=_self.electrolyte_grid, y_data=_self.electrolyte_potential[state], title="Electrolyte Potential / V", x_label="Position / \u00B5m", @@ -3922,10 +3949,10 @@ def view_plots_static(_self,state): ) # Positive Electrode Potential - positive_electrode_potential_ext = np.full(len(_self.electrolyte_grid[0]), np.nan) + positive_electrode_potential_ext = np.full(len(_self.electrolyte_grid), np.nan) positive_electrode_potential_ext[-10:] = _self.positive_electrode_potential[state] pe_potential = _self.create_subplot( - x_data=np.squeeze(_self.electrolyte_grid[0]), + x_data=_self.electrolyte_grid, y_data=positive_electrode_potential_ext, title="Positive Electrode Potential / V", x_label="Position / \u00B5m", @@ -4015,8 +4042,8 @@ def view_plots_static(_self,state): @st.cache_data def get_graph_initial_limits(_self): - xmin = min(np.squeeze(_self.electrolyte_grid[1])) - xmax = max(np.squeeze(_self.electrolyte_grid[1])) + xmin = min(_self.electrolyte_grid_bc) + xmax = max(_self.electrolyte_grid_bc) cmax_elyte = max(_self.electrolyte_concentration[0]) cmin_elyte = min(_self.electrolyte_concentration[0]) diff --git a/streamlit/input_files/battmo_formatted_input.json b/streamlit/input_files/battmo_formatted_input.json index 00aacba..39b2477 100644 --- a/streamlit/input_files/battmo_formatted_input.json +++ b/streamlit/input_files/battmo_formatted_input.json @@ -27,7 +27,7 @@ "chargeTransferCoefficient": 0.5, "openCircuitPotential": { "type": "function", - "function": "0.7222+ 0.1387*(c/cmax) + 0.0290*(c/cmax)^(0.5) - 0.0172/(c/cmax) + 0.0019/(c/cmax)^(1.5)+ 0.2808 * exp(0.9 - 15.0*(c/cmax)) - 0.7984 * exp(0.4465*(c/cmax) - 0.4108)+ (T - refT) * (1e-3 * ( 0.005269056+ 3.299265709 * (c/cmax)- 91.79325798 * (c/cmax)^2+ 1004.911008 * (c/cmax)^3- 5812.278127 * (c/cmax)^4+ 19329.75490 * (c/cmax)*5- 37147.89470 * (c/cmax)*6+ 38379.18127 * (c/cmax)*7- 16515.05308 * (c/cmax)*8 )/ ( 1- 48.09287227 * (c/cmax)+ 1017.234804 * (c/cmax)^2- 10481.80419 * (c/cmax)^3+ 59431.30000 * (c/cmax)^4- 195881.6488 * (c/cmax)*5+ 374577.3152 * (c/cmax)*6- 385821.1607 * (c/cmax)*7+ 165705.8597 * (c/cmax)*8 ))", + "functionname": "compute_ocp_graphite", "argumentlist": [ "c", "T", @@ -89,7 +89,7 @@ "chargeTransferCoefficient": 0.5, "openCircuitPotential": { "type": "function", - "function": "(-4.656 + 0 * (c/cmax) + 88.669 * (c/cmax)^2 + 0 * (c./cmax)^3 - 401.119 * (c/cmax)^4 + 0 * (c/cmax)^5 + 342.909 * (c/cmax)^6 + 0 * (c/cmax)^7 - 462.471 * (c/cmax)^8 + 0 * (c/cmax)^9 + 433.434 * (c/cmax)^10)/(-1 + 0 * (c/cmax)+ 18.933 * (c./cmax)^2+ 0 * (c/cmax)^3- 79.532 * (c/cmax)^4+ 0 * (c/cmax)^5+ 37.311 * (c/cmax)^6+ 0 * (c/cmax)^7- 73.083 * (c/cmax)^8+ 0 * (c/cmax)^9+ 95.960 * (c/cmax)^10)+ (T - refT) * ( -1e-3* ( 0.199521039- 0.928373822 * (c/cmax)+ 1.364550689000003 * (c/cmax)^2- 0.611544893999998 * (c/cmax)^3)/ (1- 5.661479886999997 * (c/cmax)+ 11.47636191 * (c/cmax)^2- 9.82431213599998 * (c/cmax)^3+ 3.048755063 * (c/cmax)^4))", + "functionname": "compute_ocp_nmc111", "argumentlist": [ "c", "T", @@ -143,7 +143,7 @@ "density": 1210, "ionicConductivity": { "type": "function", - "function": "1e-4*c*((-10.5 + 0.668e-3*c + 0.494e-6*c^2) + (0.074 - 1.78e-5*c - 8.86e-10*c^2)*T + (-6.96e-5 + 2.80e-8*c)*T^2)^2", + "functionname": "computeElectrolyteConductivity_default", "argumentlist": [ "c", "T" @@ -151,7 +151,7 @@ }, "diffusionCoefficient": { "type": "function", - "function": "1e-4 * 10^(-4.43 - 54/(T - 229 - 5*c*1e-3) - 0.22*c*1e-3)", + "functionname": "computeDiffusionCoefficient_default", "argumentlist": [ "c", "T" diff --git a/streamlit/input_files/linked_data_input.json b/streamlit/input_files/linked_data_input.json index 61f65ad..21cbb4d 100644 --- a/streamlit/input_files/linked_data_input.json +++ b/streamlit/input_files/linked_data_input.json @@ -51,7 +51,11 @@ }, { "label": "time_step_duration", - "unit": "emmo:Second", + "unit": { + "label": "Second", + "symbol": "s", + "@type": "emmo:Second" + }, "value": { "@type": "emmo:Numerical", "hasNumericalData": 100.0 @@ -66,7 +70,11 @@ }, { "label": "ramp_up_time", - "unit": "emmo:Second", + "unit": { + "label": "Second", + "symbol": "s", + "@type": "emmo:Second" + }, "value": { "@type": "emmo:Numerical", "hasNumericalData": 10.0 @@ -94,6 +102,7 @@ }, "unit": { "label": "MolePerCubicMetre", + "symbol": "mol.m\u207b\u00b3", "@type": "emmo:MolePerCubicMetre" } }, @@ -106,6 +115,7 @@ }, "unit": { "label": "Metre", + "symbol": "m\u00b2m\u207b\u00b3", "@type": "emmo:Metre" } }, @@ -118,6 +128,7 @@ }, "unit": { "label": "GramPerCubicMetre", + "symbol": "kg.m\u207b\u00b3", "@type": "emmo:GramPerCubicMetre" } }, @@ -130,6 +141,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -142,6 +154,7 @@ }, "unit": { "label": "JoulePerMoleKelvin", + "symbol": "J.mol\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerMoleKelvin" } }, @@ -154,6 +167,7 @@ }, "unit": { "label": "MolePerSquareMetrePerSecond", + "symbol": "mol.m\u207b\u00b2.s\u207b\u00b9", "@type": "emmo:MolePerSquareMetrePerSecond" } }, @@ -166,6 +180,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -178,6 +193,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -185,6 +201,7 @@ "label": "open_circuit_potential", "@type": "None", "value": { + "functionname": "compute_ocp_graphite", "function": "0.7222+ 0.1387*(c/cmax) + 0.0290*(c/cmax)^(0.5) - 0.0172/(c/cmax) + 0.0019/(c/cmax)^(1.5)+ 0.2808 * exp(0.9 - 15.0*(c/cmax)) - 0.7984 * exp(0.4465*(c/cmax) - 0.4108)+ (T - refT) * (1e-3 * ( 0.005269056+ 3.299265709 * (c/cmax)- 91.79325798 * (c/cmax)^2+ 1004.911008 * (c/cmax)^3- 5812.278127 * (c/cmax)^4+ 19329.75490 * (c/cmax)*5- 37147.89470 * (c/cmax)*6+ 38379.18127 * (c/cmax)*7- 16515.05308 * (c/cmax)*8 )/ ( 1- 48.09287227 * (c/cmax)+ 1017.234804 * (c/cmax)^2- 10481.80419 * (c/cmax)^3+ 59431.30000 * (c/cmax)^4- 195881.6488 * (c/cmax)*5+ 374577.3152 * (c/cmax)*6- 385821.1607 * (c/cmax)*7+ 165705.8597 * (c/cmax)*8 ))", "argument_list": [ "c", @@ -203,6 +220,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -213,7 +231,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 632.0 }, - "unit": "emmo:JoulePerKiloGramKelvin" + "unit": { + "label": "JoulePerKiloGramKelvin", + "symbol": "J.kg\u207b\u00b9.K\u207b\u00b9", + "@type": "emmo:JoulePerKiloGramKelvin" + } }, { "label": "thermal_conductivity", @@ -222,7 +244,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 1.04 }, - "unit": "emmo:WattPerMetreKelvin" + "unit": { + "label": "WattPerMetreKelvin", + "symbol": "W.m\u207b\u00b9.K\u207b\u00b9", + "@type": "emmo:WattPerMetreKelvin" + } }, { "label": "electronic_conductivity", @@ -231,7 +257,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 100.0 }, - "unit": "emmo:SiemensPerMetre" + "unit": { + "label": "SiemensPerMetre", + "symbol": "S.m\u207b\u00b9", + "@type": "emmo:SiemensPerMetre" + } }, { "label": "activation_energy_of_diffusion", @@ -240,7 +270,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 5000.0 }, - "unit": "emmo:JoulePerMoleKelvin" + "unit": { + "label": "JoulePerMoleKelvin", + "symbol": "J.mol\u207b\u00b9.K\u207b\u00b9", + "@type": "emmo:JoulePerMoleKelvin" + } }, { "label": "diffusion_pre_exponential_factor", @@ -249,7 +283,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 3.9e-14 }, - "unit": "emmo:ReciprocalSecond" + "unit": { + "label": "ReciprocalSecond", + "symbol": "s\u207b\u00b9", + "@type": "emmo:ReciprocalSecond" + } }, { "label": "number_of_discrete_cells_electrode", @@ -258,7 +296,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 10 }, - "unit": "emmo:UnitOne" + "unit": { + "label": "UnitOne", + "symbol": "1", + "@type": "emmo:UnitOne" + } }, { "label": "particle_radius", @@ -267,7 +309,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 1e-06 }, - "unit": "emmo:Metre" + "unit": { + "label": "Metre", + "symbol": "m", + "@type": "emmo:Metre" + } }, { "label": "number_of_discrete_cells_particle_radius", @@ -276,7 +322,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 10 }, - "unit": "emmo:UnitOne" + "unit": { + "label": "UnitOne", + "symbol": "1", + "@type": "emmo:UnitOne" + } } ], "label": "Active Material", @@ -293,6 +343,7 @@ }, "unit": { "label": "GramPerCubicMetre", + "symbol": "kg.m\u207b\u00b3", "@type": "emmo:GramPerCubicMetre" } }, @@ -305,6 +356,7 @@ }, "unit": { "label": "JoulePerKiloGramKelvin", + "symbol": "J.kg\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerKiloGramKelvin" } }, @@ -317,6 +369,7 @@ }, "unit": { "label": "WattPerMetreKelvin", + "symbol": "W.m\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:WattPerMetreKelvin" } }, @@ -329,6 +382,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -339,7 +393,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 100.0 }, - "unit": "emmo:SiemensPerMetre" + "unit": { + "label": "SiemensPerMetre", + "symbol": "S.m\u207b\u00b9", + "@type": "emmo:SiemensPerMetre" + } } ], "label": "Binder", @@ -356,6 +414,7 @@ }, "unit": { "label": "GramPerCubicMetre", + "symbol": "kg.m\u207b\u00b3", "@type": "emmo:GramPerCubicMetre" } }, @@ -368,6 +427,7 @@ }, "unit": { "label": "JoulePerKiloGramKelvin", + "symbol": "J.kg\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerKiloGramKelvin" } }, @@ -380,6 +440,7 @@ }, "unit": { "label": "WattPerMetreKelvin", + "symbol": "W.m\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:WattPerMetreKelvin" } }, @@ -392,6 +453,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -402,7 +464,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 100.0 }, - "unit": "emmo:SiemensPerMetre" + "unit": { + "label": "SiemensPerMetre", + "symbol": "S.m\u207b\u00b9", + "@type": "emmo:SiemensPerMetre" + } } ], "label": "Additive", @@ -419,6 +485,7 @@ }, "unit": { "label": "MicroMetre", + "symbol": "\u03bcm", "@type": "emmo:MicroMetre" } }, @@ -431,6 +498,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -443,6 +511,7 @@ }, "unit": { "label": "MiliGramPerCubicCentiMeter", + "symbol": "mg(cm)\u207b\u00b2", "@type": "emmo:MiliGramPerCubicCentiMeter" } }, @@ -453,7 +522,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 0.01 }, - "unit": "emmo:Metre" + "unit": { + "label": "Metre", + "symbol": "m", + "@type": "emmo:Metre" + } }, { "label": "width", @@ -462,7 +535,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 0.01 }, - "unit": "emmo:Metre" + "unit": { + "label": "Metre", + "symbol": "m", + "@type": "emmo:Metre" + } }, { "label": "bruggeman_coefficient", @@ -471,7 +548,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 1.5 }, - "unit": "emmo:UnitOne" + "unit": { + "label": "UnitOne", + "symbol": "1", + "@type": "emmo:UnitOne" + } } ], "label": "Negative electrode properties", @@ -492,6 +573,7 @@ }, "unit": { "label": "MolePerCubicMetre", + "symbol": "mol.m\u207b\u00b3", "@type": "emmo:MolePerCubicMetre" } }, @@ -504,6 +586,7 @@ }, "unit": { "label": "Metre", + "symbol": "m\u00b2m\u207b\u00b3", "@type": "emmo:Metre" } }, @@ -516,6 +599,7 @@ }, "unit": { "label": "GramPerCubicMetre", + "symbol": "kg.m\u207b\u00b3", "@type": "emmo:GramPerCubicMetre" } }, @@ -528,6 +612,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -540,6 +625,7 @@ }, "unit": { "label": "JoulePerMoleKelvin", + "symbol": "J.mol\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerMoleKelvin" } }, @@ -552,6 +638,7 @@ }, "unit": { "label": "MolePerSquareMetrePerSecond", + "symbol": "mol.m\u207b\u00b2.s\u207b\u00b9", "@type": "emmo:MolePerSquareMetrePerSecond" } }, @@ -564,6 +651,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -576,6 +664,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -583,6 +672,7 @@ "label": "open_circuit_potential", "@type": "None", "value": { + "functionname": "compute_ocp_nmc111", "function": "(-4.656 + 0 * (c/cmax) + 88.669 * (c/cmax)^2 + 0 * (c./cmax)^3 - 401.119 * (c/cmax)^4 + 0 * (c/cmax)^5 + 342.909 * (c/cmax)^6 + 0 * (c/cmax)^7 - 462.471 * (c/cmax)^8 + 0 * (c/cmax)^9 + 433.434 * (c/cmax)^10)/(-1 + 0 * (c/cmax)+ 18.933 * (c./cmax)^2+ 0 * (c/cmax)^3- 79.532 * (c/cmax)^4+ 0 * (c/cmax)^5+ 37.311 * (c/cmax)^6+ 0 * (c/cmax)^7- 73.083 * (c/cmax)^8+ 0 * (c/cmax)^9+ 95.960 * (c/cmax)^10)+ (T - refT) * ( -1e-3* ( 0.199521039- 0.928373822 * (c/cmax)+ 1.364550689000003 * (c/cmax)^2- 0.611544893999998 * (c/cmax)^3)/ (1- 5.661479886999997 * (c/cmax)+ 11.47636191 * (c/cmax)^2- 9.82431213599998 * (c/cmax)^3+ 3.048755063 * (c/cmax)^4))", "argument_list": [ "c", @@ -601,6 +691,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -613,6 +704,7 @@ }, "unit": { "label": "JoulePerKiloGramKelvin", + "symbol": "J.kg\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerKiloGramKelvin" } }, @@ -625,6 +717,7 @@ }, "unit": { "label": "WattPerMetreKelvin", + "symbol": "W.m\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:WattPerMetreKelvin" } }, @@ -637,6 +730,7 @@ }, "unit": { "label": "SiemensPerMetre", + "symbol": "S.m\u207b\u00b9", "@type": "emmo:SiemensPerMetre" } }, @@ -649,6 +743,7 @@ }, "unit": { "label": "JoulePerMoleKelvin", + "symbol": "J.mol\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerMoleKelvin" } }, @@ -661,6 +756,7 @@ }, "unit": { "label": "ReciprocalSecond", + "symbol": "s\u207b\u00b9", "@type": "emmo:ReciprocalSecond" } }, @@ -673,6 +769,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -685,6 +782,7 @@ }, "unit": { "label": "Metre", + "symbol": "m", "@type": "emmo:Metre" } }, @@ -697,6 +795,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } } @@ -715,6 +814,7 @@ }, "unit": { "label": "GramPerCubicMetre", + "symbol": "kg.m\u207b\u00b3", "@type": "emmo:GramPerCubicMetre" } }, @@ -727,6 +827,7 @@ }, "unit": { "label": "JoulePerKiloGramKelvin", + "symbol": "J.kg\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerKiloGramKelvin" } }, @@ -739,6 +840,7 @@ }, "unit": { "label": "WattPerMetreKelvin", + "symbol": "W.m\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:WattPerMetreKelvin" } }, @@ -751,6 +853,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -763,6 +866,7 @@ }, "unit": { "label": "SiemensPerMetre", + "symbol": "S.m\u207b\u00b9", "@type": "emmo:SiemensPerMetre" } } @@ -781,6 +885,7 @@ }, "unit": { "label": "GramPerCubicMetre", + "symbol": "kg.m\u207b\u00b3", "@type": "emmo:GramPerCubicMetre" } }, @@ -793,6 +898,7 @@ }, "unit": { "label": "JoulePerKiloGramKelvin", + "symbol": "J.kg\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerKiloGramKelvin" } }, @@ -805,6 +911,7 @@ }, "unit": { "label": "WattPerMetreKelvin", + "symbol": "W.m\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:WattPerMetreKelvin" } }, @@ -817,6 +924,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -829,6 +937,7 @@ }, "unit": { "label": "SiemensPerMetre", + "symbol": "S.m\u207b\u00b9", "@type": "emmo:SiemensPerMetre" } } @@ -847,6 +956,7 @@ }, "unit": { "label": "MicroMetre", + "symbol": "\u03bcm", "@type": "emmo:MicroMetre" } }, @@ -859,6 +969,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -871,6 +982,7 @@ }, "unit": { "label": "MiliGramPerCubicCentiMeter", + "symbol": "mg(cm)\u207b\u00b2", "@type": "emmo:MiliGramPerCubicCentiMeter" } }, @@ -883,6 +995,7 @@ }, "unit": { "label": "Metre", + "symbol": "m", "@type": "emmo:Metre" } }, @@ -895,6 +1008,7 @@ }, "unit": { "label": "Metre", + "symbol": "m", "@type": "emmo:Metre" } }, @@ -907,6 +1021,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } } @@ -914,22 +1029,6 @@ "label": "Positive electrode properties", "@type": "echem:ConductiveAdditive" } - }, - "hasObjectiveProperty": { - "hasQuantitativeProperty": [ - { - "label": "n_to_p_ratio", - "@type": "None", - "value": { - "@type": "emmo:Numerical", - "hasNumericalData": 1.1 - }, - "unit": { - "label": "UnitOne", - "@type": "emmo:UnitOne" - } - } - ] } }, "hasElectrolyte": { @@ -943,6 +1042,7 @@ }, "unit": { "label": "JoulePerKiloGramKelvin", + "symbol": "J.kg\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerKiloGramKelvin" } }, @@ -955,6 +1055,7 @@ }, "unit": { "label": "WattPerMetreKelvin", + "symbol": "W.m\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:WattPerMetreKelvin" } }, @@ -967,6 +1068,7 @@ }, "unit": { "label": "GramPerCubicMetre", + "symbol": "kg.m\u207b\u00b3", "@type": "emmo:GramPerCubicMetre" } }, @@ -987,6 +1089,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -1007,6 +1110,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -1014,6 +1118,7 @@ "label": "conductivity", "@type": "None", "value": { + "functionname": "computeElectrolyteConductivity_default", "function": "1e-4*c*((-10.5 + 0.668e-3*c + 0.494e-6*c^2) + (0.074 - 1.78e-5*c - 8.86e-10*c^2)*T + (-6.96e-5 + 2.80e-8*c)*T^2)^2", "argument_list": [ "c", @@ -1025,6 +1130,7 @@ "label": "diffusion_coefficient", "@type": "None", "value": { + "functionname": "computeDiffusionCoefficient_default", "function": "1e-4 * 10^(-4.43 - 54/(T - 229 - 5*c*1e-3) - 0.22*c*1e-3)", "argument_list": [ "c", @@ -1041,6 +1147,7 @@ }, "unit": { "label": "MolPerLiter", + "symbol": "mol.L\u207b", "@type": "emmo:MolPerLiter" } }, @@ -1053,6 +1160,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -1063,7 +1171,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 1.5 }, - "unit": "emmo:UnitOne" + "unit": { + "label": "UnitOne", + "symbol": "1", + "@type": "emmo:UnitOne" + } } ], "label": "Electrolyte properties", @@ -1080,6 +1192,7 @@ }, "unit": { "label": "JoulePerKiloGramKelvin", + "symbol": "J.kg\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:JoulePerKiloGramKelvin" } }, @@ -1092,6 +1205,7 @@ }, "unit": { "label": "WattPerMetreKelvin", + "symbol": "W.m\u207b\u00b9.K\u207b\u00b9", "@type": "emmo:WattPerMetreKelvin" } }, @@ -1104,6 +1218,7 @@ }, "unit": { "label": "GramPerCubicMetre", + "symbol": "kg.m\u207b\u00b3", "@type": "emmo:GramPerCubicMetre" } }, @@ -1116,6 +1231,7 @@ }, "unit": { "label": "MicroMetre", + "symbol": "\u03bcm", "@type": "emmo:MicroMetre" } }, @@ -1128,6 +1244,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -1140,6 +1257,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -1150,7 +1268,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 10 }, - "unit": "emmo:UnitOne" + "unit": { + "label": "UnitOne", + "symbol": "1", + "@type": "emmo:UnitOne" + } } ], "label": "Separator properties", @@ -1167,6 +1289,7 @@ }, "unit": { "label": "Kelvin", + "symbol": "K", "@type": "emmo:Kelvin" } }, @@ -1179,6 +1302,7 @@ }, "unit": { "label": "Kelvin", + "symbol": "K", "@type": "emmo:Kelvin" } }, @@ -1191,6 +1315,7 @@ }, "unit": { "label": "UnitOne", + "symbol": "1", "@type": "emmo:UnitOne" } }, @@ -1201,7 +1326,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 1000.0 }, - "unit": "emmo:WattPerSquareMetreKelvin" + "unit": { + "label": "WattPerSquareMetreKelvin", + "symbol": "W.m\u207b\u00b2.K\u207b\u00b9", + "@type": "emmo:WattPerSquareMetreKelvin" + } }, { "label": "external_surface_area", @@ -1210,7 +1339,24 @@ "@type": "emmo:Numerical", "hasNumericalData": 0.0379 }, - "unit": "emmo:SquareMetre" + "unit": { + "label": "SquareMetre", + "symbol": "m\u00b2", + "@type": "emmo:SquareMetre" + } + }, + { + "label": "n_to_p_ratio", + "@type": "emmo:N/PRatio", + "value": { + "@type": "emmo:Numerical", + "hasNumericalData": 1.1 + }, + "unit": { + "label": "UnitOne", + "symbol": "1", + "@type": "emmo:UnitOne" + } } ], "label": "Boundary conditions", @@ -1234,7 +1380,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 1 }, - "unit": "emmo:UnitOne" + "unit": { + "label": "UnitOne", + "symbol": "1", + "@type": "emmo:UnitOne" + } }, { "label": "protocol_name", @@ -1251,7 +1401,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 1.0 }, - "unit": "emmo:UnitOne" + "unit": { + "label": "UnitOne", + "symbol": "1", + "@type": "emmo:UnitOne" + } }, { "label": "lower_cutoff_voltage", @@ -1260,7 +1414,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 2.4 }, - "unit": "emmo:Volt" + "unit": { + "label": "Volt", + "symbol": "V", + "@type": "emmo:Volt" + } }, { "label": "upper_cutoff_voltage", @@ -1269,7 +1427,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 4.1 }, - "unit": "emmo:Volt" + "unit": { + "label": "Volt", + "symbol": "V", + "@type": "emmo:Volt" + } }, { "label": "d_idt_limit", @@ -1278,7 +1440,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 0.01 }, - "unit": "A.s\u207b\u00b9" + "unit": { + "label": "A.s\u207b\u00b9", + "symbol": "A.s\u207b\u00b9", + "@type": "A.s\u207b\u00b9" + } }, { "label": "d_edt_limit", @@ -1287,7 +1453,11 @@ "@type": "emmo:Numerical", "hasNumericalData": 0.01 }, - "unit": "emmo:VoltPerSecond" + "unit": { + "label": "VoltPerSecond", + "symbol": "V.s\u207b\u00b9", + "@type": "emmo:VoltPerSecond" + } } ], "label": "Protocol properties", diff --git a/streamlit/output_files/battmo_results b/streamlit/output_files/battmo_results index e8f4168f25df5b7b9bbc3f49796836177cf20413..4cc95cba02135331fdb418beba405e09d7098a88 100644 GIT binary patch literal 65805 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

26UA1}==84CP*JT@{n7>4o zk$}Y*R%>GMPd&PL)j{JoRT$E8IMii#E4F;OYgckq2Ufgc#l*d<7o)mgoQBs8V3NEM zJ5~mUv2=yki7D)`{(rtjSurYZ2-{hRr^3Tt7W`kt`ef`!!B zNO6aDV8|cJNR!_^n1*s$w{^(?wo`bQop>G8V^MH7Wf;YJN-Zxl4US^G!8d=5E01BD z)5Qmgyhb)op@wl)Sj9XQ{lHoaR^*a;FZ*c+_LcXGBeKwg&3AoVwR$&z`Q(M^yA%y$ zGy)D^Cw7lwWa*2G4qryG=-P87Y3IkVsVgmic%k0x`=v#r*edK1_O6s}xdr=7Hjv}- z?!fBvv-iYI_F#XgTB@892C&~b^H;B?4`ZXF79T0LiE;B&IJR~aTbc+ny(|plul?aa z{cCFRaXclu3OiRl=XT^<3-)#J&cfYC9oQAoZ%)!fJy=8J#rxWk16bkS9X3&M!*0ui#a(=C|0@QI7IZXHbPN;BF!`t6 zRC&4PW<(VhQZ*-abD{m`&~57@*TjG?xfHD_8-RNrM5i} z%#C0l^+Z*wNuyYBR*`oE8_W~SAB;r%9$ybD`}Lv<^9fI)xj)*1os%4-)4Jb*JstP? z;NQ}NEoQ!d-uid|Td|dl%6&476{R}K3`~w-x+Q-;3FnMrU7ZYec8uO2KNDMzKPko-EA0Czj zJtudDzZ=CQ{dV2rg7sDM=354$eezU?>YT%?FiF{i`D}wQUX*+_#qBzAD__ zq9$4JlFI;gHT|}YwDT}_xjut;YIp=Q+PxUxls<~>{ob0RO*e*lZ}8I-^;EWc^S*~w zVdRkGXCwMsu%p2e59@3?u!7|4DU3Be*jOAzknQ~e>_z^CmMRCxo2V4{dvFAkbbgrC zkUEO>8vgvQy>AS2yjZiBs26&KjnW_LeM&xd<8EIIhFh7$72WH=Za38NxmNdJbxl>K z2Cy%3@U#-YXg7?xkV@N9V1Gom^)YZs8O4}?2e9wm3+JbE_)enUQK7G5(opYdf6Z!4 zZwn@4#M!iZw*ykVWhtP5p40BvR!%dC>AmG ziOQOG43pIi;Unr*-PO>ig?ghuXayLcUK8&|+#{%GvFm&Wxv~c<^-`4;f_kNi`X|=! z4Pzk&k57g`z3azqb;6)tj+nKGDb%w#JhF$VXSSkkvGlwOW6AbQZR}~mZYTwvQGt5K zg{(aHp`Jm%?c|#60Cvgf)#nAMcci5&H5=;rba?C>g?hz?VZ%L8FH@;zo|wO+4nw7R zs26be$wn2_JD|>bSsm&XcU6joLcJpa5q65uzDqHgCBcxFenMzk1dg9YvoUuH9KSaz zo*XT3{K{vW7et@iVhSBEW`!PGVlgo%J;IFKk$VhdgKX zEYybdTALAL-#=PGsej5nsT^+e);vNwDfoM}MWPX_z4dijovFz6y|$ zb3Pz1@!#|Q92E$^t=et}gU^U(9M>M%KXr)i_~#u9MvcgPnowwZSWWr9b`9OKY7b

A=6fZU}|y{@Lt-7l^F(&E^H$B;@=JcWJY-_sFxD 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 ZTl#NX`rq2dfBO0VkG3@TSjS2A{{RGgF;D;i diff --git a/streamlit/output_files/calculated_values.json b/streamlit/output_files/calculated_values.json index 47214d5..fc1a36f 100644 --- a/streamlit/output_files/calculated_values.json +++ b/streamlit/output_files/calculated_values.json @@ -1,5 +1 @@ -{ - "calculatedParameters": { - "effective_density": 0 - } -} +{"calculatedParameters": {"effective_density": 3849.2, "mass_loadings": {"negative_electrode": 19.264, "positive_electrode": 17.552352}}} \ No newline at end of file diff --git a/streamlit/pages/1_Simulation.py b/streamlit/pages/1_Simulation.py index 380ccdd..67c3123 100644 --- a/streamlit/pages/1_Simulation.py +++ b/streamlit/pages/1_Simulation.py @@ -69,6 +69,7 @@ def run_page(): app.run_simulation(gui_parameters) + app.divergence_check() diff --git a/streamlit/pages/2_Results.py b/streamlit/pages/2_Results.py index 719b510..4c1e4d3 100644 --- a/streamlit/pages/2_Results.py +++ b/streamlit/pages/2_Results.py @@ -8,7 +8,6 @@ from streamlit_javascript import st_javascript import time from queue import Queue -import juliacall as jl import sys diff --git a/streamlit/requirements.txt b/streamlit/requirements.txt index 785b205..1710ca4 100644 --- a/streamlit/requirements.txt +++ b/streamlit/requirements.txt @@ -7,7 +7,6 @@ Flask==2.3.2 pylance==0.6.2 streamlit_extras == 0.3.2 sympy == 1.12 -juliacall == 0.9.14 psutil == 3.2.2 streamlit_javascript == 0.1.5 plotly == 5.18.0