diff --git a/.JuliaFormatter.toml b/.JuliaFormatter.toml index 960c4bb..99ca1a6 100644 --- a/.JuliaFormatter.toml +++ b/.JuliaFormatter.toml @@ -2,12 +2,17 @@ align_assignment = true align_matrix = true align_pair_arrow = true align_struct_field = true +always_for_in = true +annotate_untyped_fields_with_any = false conditional_to_if = true +for_in_replacement = "in" format_docstrings = false format_markdown = false +import_to_using = true indent = 4 margin = 100 normalize_line_endings = "unix" remove_extra_newlines = true separate_kwargs_with_semicolon = true -verbose = true +whitespace_ops_in_indices = true +whitespace_typedefs = true diff --git a/.copier-answers.yml b/.copier-answers.yml new file mode 100644 index 0000000..1ba68be --- /dev/null +++ b/.copier-answers.yml @@ -0,0 +1,12 @@ +# Changes here will be overwritten by Copier +AnswerStrategy: minimum +AuthorEmail: fatkasuvayu+linux@gmail.com +AuthorName: Suvayu Ali +Indentation: 4 +JuliaMinVersion: '1.6' +License: Apache-2.0 +PackageName: TulipaIO +PackageOwner: TulipaEnergy +PackageUUID: 7b3808b7-0819-42d4-885c-978ba173db11 +_commit: v0.6.0 +_src_path: https://github.com/abelsiqueira/COPIERTemplate.jl diff --git a/.editorconfig b/.editorconfig index 9f5c55f..d014236 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,6 +5,6 @@ root = true end_of_line = lf insert_final_newline = true charset = utf-8 -indent_size = 2 +indent_size = 4 indent_style = space trim_trailing_whitespace = true diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..6191d27 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml index 7825cfe..9681eb6 100644 --- a/.github/workflows/CompatHelper.yml +++ b/.github/workflows/CompatHelper.yml @@ -2,48 +2,50 @@ name: CompatHelper on: - schedule: - - cron: 0 0 * * * - workflow_dispatch: + schedule: + - cron: 0 0 * * * # Every day at 00:00 UTC + workflow_dispatch: permissions: - contents: write - pull-requests: write + contents: write + pull-requests: write jobs: - CompatHelper: - runs-on: ubuntu-latest - steps: - - name: Check if Julia is already available in the PATH - id: julia_in_path - run: which julia - continue-on-error: true - - name: Install Julia, but only if it is not already available in the PATH - uses: julia-actions/setup-julia@v1 - with: - version: "1" - arch: ${{ runner.arch }} - if: steps.julia_in_path.outcome != 'success' - - name: "Add the General registry via Git" - run: | - import Pkg - ENV["JULIA_PKG_SERVER"] = "" - Pkg.Registry.add("General") - shell: julia --color=yes {0} - - name: "Install CompatHelper" - run: | - import Pkg - name = "CompatHelper" - uuid = "aa819f21-2bde-4658-8897-bab36330d9b7" - version = "3" - Pkg.add(; name, uuid, version) - shell: julia --color=yes {0} - - name: "Run CompatHelper" - run: | - import CompatHelper - CompatHelper.main() - shell: julia --color=yes {0} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }} - # COMPATHELPER_PRIV: ${{ secrets.COMPATHELPER_PRIV }} + CompatHelper: + runs-on: ubuntu-latest + steps: + - name: Check if Julia is already available in the PATH + id: julia_in_path + run: which julia + continue-on-error: true + - name: Install Julia, but only if it is not already available in the PATH + uses: julia-actions/setup-julia@v2 + with: + version: "1" + arch: ${{ runner.arch }} + if: steps.julia_in_path.outcome != 'success' + - name: Use Julia cache + uses: julia-actions/cache@v2 + - name: "Add the General registry via Git" + run: | + import Pkg + ENV["JULIA_PKG_SERVER"] = "" + Pkg.Registry.add("General") + shell: julia --color=yes {0} + - name: "Install CompatHelper" + run: | + import Pkg + name = "CompatHelper" + uuid = "aa819f21-2bde-4658-8897-bab36330d9b7" + version = "3" + Pkg.add(; name, uuid, version) + shell: julia --color=yes {0} + - name: "Run CompatHelper" + run: | + import CompatHelper + CompatHelper.main() + shell: julia --color=yes {0} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }} + # COMPATHELPER_PRIV: ${{ secrets.COMPATHELPER_PRIV }} diff --git a/.github/workflows/Docs.yml b/.github/workflows/Docs.yml index b7ec126..8e0779b 100644 --- a/.github/workflows/Docs.yml +++ b/.github/workflows/Docs.yml @@ -1,51 +1,53 @@ name: Docs on: - push: - branches: - - main - paths: - - "docs/**" - - "src/**" - - "*.toml" - tags: ["*"] - pull_request: - branches: - - main - paths: - - "docs/**" - - "src/**" - - "*.toml" - types: [opened, synchronize, reopened] + push: + branches: + - main + paths: + - "docs/**" + - "src/**" + - "*.toml" + tags: ["*"] + pull_request: + branches: + - main + paths: + - "docs/**" + - "src/**" + - "*.toml" + types: [opened, synchronize, reopened] concurrency: - # Skip intermediate builds: always. - # Cancel intermediate builds: only if it is a pull request build. - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} + # Skip intermediate builds: always. + # Cancel intermediate builds: only if it is a pull request build. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} jobs: - docs: - name: Documentation - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@v1 - with: - version: "1" - - run: | - julia --project=docs -e ' - using Pkg - Pkg.develop(PackageSpec(path=pwd())) - Pkg.instantiate()' - - run: | - julia --project=docs -e ' - using Documenter: DocMeta, doctest - using TulipaIO - DocMeta.setdocmeta!(TulipaIO, :DocTestSetup, :(using TulipaIO); recursive=true) - doctest(TulipaIO)' - - run: julia --project=docs docs/make.jl - env: - JULIA_PKG_SERVER: "" - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} + docs: + name: Documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@v2 + with: + version: "1" + - name: Use Julia cache + uses: julia-actions/cache@v2 + - run: | + julia --project=docs -e ' + using Pkg + Pkg.develop(PackageSpec(path=pwd())) + Pkg.instantiate()' + - run: | + julia --project=docs -e ' + using Documenter: DocMeta, doctest + using TulipaIO + DocMeta.setdocmeta!(TulipaIO, :DocTestSetup, :(using TulipaIO); recursive=true) + doctest(TulipaIO)' + - run: julia --project=docs docs/make.jl + env: + JULIA_PKG_SERVER: "" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} diff --git a/.github/workflows/Lint.yml b/.github/workflows/Lint.yml index c9f779b..f6c7c14 100644 --- a/.github/workflows/Lint.yml +++ b/.github/workflows/Lint.yml @@ -1,36 +1,36 @@ name: Lint on: - push: - branches: - - main - tags: ["*"] - pull_request: + push: + branches: + - main + tags: ["*"] + pull_request: concurrency: - # Skip intermediate builds: always. - # Cancel intermediate builds: only if it is a pull request build. - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} + # Skip intermediate builds: always. + # Cancel intermediate builds: only if it is a pull request build. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} jobs: - lint: - name: Linting - runs-on: ubuntu-latest - steps: - - name: Clone - uses: actions/checkout@v3 - - name: Setup Julia - uses: julia-actions/setup-julia@v1 - with: - version: "1" - - name: Use Julia cache - uses: julia-actions/cache@v1 - - name: Install JuliaFormatter.jl - run: julia -e 'using Pkg; pkg"add JuliaFormatter"' - - name: Setup Python - uses: actions/setup-python@v4 - - name: Install pre-commit - run: pip install pre-commit - - name: Run pre-commit - run: SKIP=no-commit-to-branch pre-commit run -a + lint: + name: Linting + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v3 + - name: Setup Julia + uses: julia-actions/setup-julia@v1 + with: + version: "1" + - name: Use Julia cache + uses: julia-actions/cache@v1 + - name: Install JuliaFormatter.jl + run: julia -e 'using Pkg; pkg"add JuliaFormatter"' + - name: Setup Python + uses: actions/setup-python@v4 + - name: Install pre-commit + run: pip install pre-commit + - name: Run pre-commit + run: SKIP=no-commit-to-branch pre-commit run -a diff --git a/.github/workflows/ReusableTest.yml b/.github/workflows/ReusableTest.yml new file mode 100644 index 0000000..800fec3 --- /dev/null +++ b/.github/workflows/ReusableTest.yml @@ -0,0 +1,52 @@ +name: Reusable test + +on: + workflow_call: + inputs: + version: + required: false + type: string + default: "1" + os: + required: false + type: string + default: ubuntu-latest + arch: + required: false + type: string + default: x64 + allow_failure: + required: false + type: boolean + default: false + run_codecov: + required: false + type: boolean + default: false + secrets: + codecov_token: + required: true + +jobs: + test: + name: Julia ${{ inputs.version }} - ${{ inputs.os }} - ${{ inputs.arch }} - ${{ github.event_name }} + runs-on: ${{ inputs.os }} + continue-on-error: ${{ inputs.allow_failure }} + + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@v2 + with: + version: ${{ inputs.version }} + arch: ${{ inputs.arch }} + - name: Use Julia cache + uses: julia-actions/cache@v2 + - uses: julia-actions/julia-buildpkg@v1 + - uses: julia-actions/julia-runtest@v1 + - uses: julia-actions/julia-processcoverage@v1 + if: ${{ inputs.run_codecov }} + - uses: codecov/codecov-action@v4 + if: ${{ inputs.run_codecov }} + with: + file: lcov.info + token: ${{ secrets.codecov_token }} diff --git a/.github/workflows/TagBot.yml b/.github/workflows/TagBot.yml index dab9b0b..08fc8b8 100644 --- a/.github/workflows/TagBot.yml +++ b/.github/workflows/TagBot.yml @@ -1,37 +1,37 @@ name: TagBot on: - issue_comment: - types: - - created - workflow_dispatch: - inputs: - lookback: - type: number - default: 3 + issue_comment: + types: + - created + workflow_dispatch: + inputs: + lookback: + type: number + default: 3 permissions: - actions: read - checks: read - contents: write - deployments: read - issues: read - discussions: read - packages: read - pages: read - pull-requests: read - repository-projects: read - security-events: read - statuses: read + actions: read + checks: read + contents: write + deployments: read + issues: read + discussions: read + packages: read + pages: read + pull-requests: read + repository-projects: read + security-events: read + statuses: read jobs: - TagBot: - if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' - runs-on: ubuntu-latest - steps: - - uses: JuliaRegistries/TagBot@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - # Edit the following line to reflect the actual name of the GitHub Secret containing your private key - ssh: ${{ secrets.DOCUMENTER_KEY }} - # ssh: ${{ secrets.NAME_OF_MY_SSH_PRIVATE_KEY_SECRET }} + TagBot: + if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' + runs-on: ubuntu-latest + steps: + - uses: JuliaRegistries/TagBot@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + # Edit the following line to reflect the actual name of the GitHub Secret containing your private key + ssh: ${{ secrets.DOCUMENTER_KEY }} + # ssh: ${{ secrets.NAME_OF_MY_SSH_PRIVATE_KEY_SECRET }} diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml index f9ecaee..5f98c69 100644 --- a/.github/workflows/Test.yml +++ b/.github/workflows/Test.yml @@ -1,79 +1,41 @@ name: Test on: - push: - branches: - - main - paths: - - "src/**" - - "test/**" - - "*.toml" - tags: ["*"] - pull_request: - branches: - - main - paths: - - "src/**" - - "test/**" - - "*.toml" - types: [opened, synchronize, reopened] - -concurrency: - # Skip intermediate builds: always. - # Cancel intermediate builds: only if it is a pull request build. - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} + push: + branches: + - main + tags: ["*"] + pull_request: + branches: + - main + paths: + - "src/**" + - "test/**" + - "*.toml" + types: [opened, synchronize, reopened] + workflow_dispatch: jobs: - test: - name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - version: - - "1.6" - - "1" - - "nightly" - os: - - ubuntu-latest - - macOS-latest - - windows-latest - arch: - - x64 - allow_failure: [false] - include: - - version: "nightly" - os: ubuntu-latest - arch: x64 - allow_failure: true - - version: "nightly" - os: macOS-latest - arch: x64 - allow_failure: true - - version: "nightly" - os: windows-latest - arch: x64 - allow_failure: true - steps: - - uses: actions/checkout@v3 - - uses: julia-actions/setup-julia@v1 - with: - version: ${{ matrix.version }} - arch: ${{ matrix.arch }} - - uses: actions/cache@v1 - env: - cache-name: cache-artifacts - with: - path: ~/.julia/artifacts - key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} - restore-keys: | - ${{ runner.os }}-test-${{ env.cache-name }}- - ${{ runner.os }}-test- - ${{ runner.os }}- - - uses: julia-actions/julia-buildpkg@v1 - - uses: julia-actions/julia-runtest@v1 - - uses: julia-actions/julia-processcoverage@v1 - - uses: codecov/codecov-action@v1 + test: + uses: ./.github/workflows/ReusableTest.yml with: - file: lcov.info + os: ${{ matrix.os }} + version: ${{ matrix.version }} + arch: ${{ matrix.arch }} + allow_failure: ${{ matrix.allow_failure }} + run_codecov: ${{ matrix.version == '1' && matrix.os == 'ubuntu-latest' }} + secrets: + codecov_token: ${{ secrets.CODECOV_TOKEN }} + strategy: + fail-fast: false + matrix: + version: + - "1.6" + - "1" + os: + - ubuntu-latest + #- macOS-latest + #- windows-latest + arch: + - x64 + allow_failure: [false] diff --git a/.gitignore b/.gitignore index b19d550..c3dfb74 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ Manifest.toml docs/build/ *.rej +node_modules diff --git a/.markdown-link-config.json b/.markdown-link-config.json index de14e9e..2b974ba 100644 --- a/.markdown-link-config.json +++ b/.markdown-link-config.json @@ -1,7 +1,7 @@ { - "ignorePatterns": [ - { - "pattern": "@ref" - } - ] + "ignorePatterns": [ + { + "pattern": "@ref" + } + ] } diff --git a/.markdownlint.json b/.markdownlint.json index 8bf958a..a2c3868 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,13 +1,13 @@ { - "MD007": { - "indent": 2, - "start_indented": false - }, - "MD013": { - "line_length": 1000, - "tables": false - }, - "MD033": false, - "MD041": false, - "default": true + "MD007": { + "indent": 4, + "start_indented": false + }, + "MD013": { + "line_length": 1000, + "tables": false + }, + "MD033": false, + "MD041": false, + "default": true } diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 49f1c39..03eed8a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,55 +1,55 @@ repos: - - repo: local - hooks: - # Prevent committing .rej files - - id: forbidden-files - name: forbidden files - entry: found Copier update rejection files; review them and remove them - language: fail - files: "\\.rej$" - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 - hooks: - - id: check-json - - id: check-toml - - id: check-yaml - - id: end-of-file-fixer - - id: file-contents-sorter - files: .JuliaFormatter.toml - args: [--unique] - - id: mixed-line-ending - args: [--fix=lf] - - id: no-commit-to-branch - - id: pretty-format-json - args: [--autofix, --indent=2] - - id: trailing-whitespace - - id: check-merge-conflict - args: [--assume-in-merge] - - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.37.0 - hooks: - - id: markdownlint-fix - - repo: https://github.com/citation-file-format/cffconvert - rev: 054bda51dbe278b3e86f27c890e3f3ac877d616c - hooks: - - id: validate-cff - - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.0.3" # Use the sha or tag you want to point at - hooks: - - id: prettier - types_or: [yaml, json] - exclude: ".copier-answers.yml" - - repo: https://github.com/adrienverge/yamllint - rev: v1.32.0 - hooks: - - id: yamllint - - repo: https://github.com/domluna/JuliaFormatter.jl - rev: v1.0.36 - hooks: - - id: julia-formatter - - repo: https://github.com/tcort/markdown-link-check - rev: v3.11.2 - hooks: - - id: markdown-link-check - args: - - --config=.markdown-link-config.json + - repo: local + hooks: + # Prevent committing .rej files + - id: forbidden-files + name: forbidden files + entry: found Copier update rejection files; review them and remove them + language: fail + files: "\\.rej$" + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: check-json + - id: check-toml + - id: check-yaml + - id: end-of-file-fixer + - id: file-contents-sorter + files: .JuliaFormatter.toml + args: [--unique] + - id: mixed-line-ending + args: [--fix=lf] + - id: no-commit-to-branch + - id: pretty-format-json + args: [--autofix, --indent=4] + - id: trailing-whitespace + - id: check-merge-conflict + args: [--assume-in-merge] + - repo: https://github.com/igorshubovych/markdownlint-cli + rev: v0.37.0 + hooks: + - id: markdownlint-fix + - repo: https://github.com/citation-file-format/cffconvert + rev: 054bda51dbe278b3e86f27c890e3f3ac877d616c + hooks: + - id: validate-cff + - repo: https://github.com/pre-commit/mirrors-prettier + rev: "v3.0.3" # Use the sha or tag you want to point at + hooks: + - id: prettier + types_or: [yaml, json] + exclude: ".copier-answers.yml" + - repo: https://github.com/adrienverge/yamllint + rev: v1.32.0 + hooks: + - id: yamllint + - repo: https://github.com/domluna/JuliaFormatter.jl + rev: v1.0.36 + hooks: + - id: julia-formatter + - repo: https://github.com/tcort/markdown-link-check + rev: v3.11.2 + hooks: + - id: markdown-link-check + args: + - --config=.markdown-link-config.json diff --git a/.yamllint.yml b/.yamllint.yml index 5e16e5f..ffeab4b 100644 --- a/.yamllint.yml +++ b/.yamllint.yml @@ -1,2 +1,2 @@ rules: - indentation: { spaces: 2 } + indentation: { spaces: 4 } diff --git a/docs/make.jl b/docs/make.jl index d375866..87ea270 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -3,19 +3,35 @@ using Documenter DocMeta.setdocmeta!(TulipaIO, :DocTestSetup, :(using TulipaIO); recursive = true) +const page_rename = Dict("developer.md" => "Developer docs") # Without the numbers + +function nice_name(file) + file = replace(file, r"^[0-9]*-" => "") + if haskey(page_rename, file) + return page_rename[file] + end + return splitext(file)[1] |> x -> replace(x, "-" => " ") |> titlecase +end + makedocs(; modules = [TulipaIO], doctest = true, - linkcheck = true, + linkcheck = false, # Rely on Lint.yml/lychee for the links authors = "Suvayu Ali and contributors", repo = "https://github.com/TulipaEnergy/TulipaIO.jl/blob/{commit}{path}#{line}", sitename = "TulipaIO.jl", format = Documenter.HTML(; - prettyurls = get(ENV, "CI", "false") == "true", + prettyurls = true, canonical = "https://TulipaEnergy.github.io/TulipaIO.jl", assets = ["assets/style.css"], ), - pages = ["Home" => "index.md", "Reference" => "reference.md"], + pages = [ + "Home" => "index.md" + [ + nice_name(file) => file for file in readdir(joinpath(@__DIR__, "src")) if + file != "index.md" && splitext(file)[2] == ".md" + ] + ], ) deploydocs(; repo = "github.com/TulipaEnergy/TulipaIO.jl", push_preview = true) diff --git a/docs/src/90-contributing.md b/docs/src/90-contributing.md new file mode 100644 index 0000000..f326315 --- /dev/null +++ b/docs/src/90-contributing.md @@ -0,0 +1,25 @@ +# [Contributing guidelines](@id contributing) + +First of all, thanks for the interest! + +We welcome all kinds of contribution, including, but not limited to code, documentation, examples, configuration, issue creating, etc. + +Be polite and respectful, and follow the code of conduct. + +## Bug reports and discussions + +If you think you found a bug, feel free to open an [issue](https://github.com/TulipaEnergy/TulipaIO.jl/issues). +Focused suggestions and requests can also be opened as issues. +Before opening a pull request, start an issue or a discussion on the topic, please. + +## Working on an issue + +If you found an issue that interests you, comment on that issue what your plans are. +If the solution to the issue is clear, you can immediately create a pull request (see below). +Otherwise, say what your proposed solution is and wait for a discussion around it. + +!!! tip + Feel free to ping us after a few days if there are no responses. + +If your solution involves code (or something that requires running the package locally), check the [developer documentation](91-developer.md). +Otherwise, you can use the GitHub interface directly to create your pull request. diff --git a/docs/src/91-developer.md b/docs/src/91-developer.md new file mode 100644 index 0000000..e8ae341 --- /dev/null +++ b/docs/src/91-developer.md @@ -0,0 +1,133 @@ +# [Developer documentation](@id dev_docs) + +!!! note "Contributing guidelines" + If you haven't, please read the [Contributing guidelines](90-contributing.md) first. + +If you want to make contributions to this package that involves code, then this guide is for you. + +## First time clone + +!!! tip "If you have writing rights" + If you have writing rights, you don't have to fork. Instead, simply clone and skip ahead. Whenever **upstream** is mentioned, use **origin** instead. + +If this is the first time you work with this repository, follow the instructions below to clone the repository. + +1. Fork this repo +2. Clone your repo (this will create a `git remote` called `origin`) +3. Add this repo as a remote: + + ```bash + git remote add upstream https://github.com/TulipaEnergy/TulipaIO.jl + ``` + +This will ensure that you have two remotes in your git: `origin` and `upstream`. +You will create branches and push to `origin`, and you will fetch and update your local `main` branch from `upstream`. + +## Linting and formatting + +Install a plugin on your editor to use [EditorConfig](https://editorconfig.org). +This will ensure that your editor is configured with important formatting settings. + +## Testing + +As with most Julia packages, you can just open Julia in the repository folder, activate the environment, and run `test`: + +```julia-repl +julia> # press ] +pkg> activate . +pkg> test +``` + +## Working on a new issue + +We try to keep a linear history in this repo, so it is important to keep your branches up-to-date. + +1. Fetch from the remote and fast-forward your local main + + ```bash + git fetch upstream + git switch main + git merge --ff-only upstream/main + ``` + +2. Branch from `main` to address the issue (see below for naming) + + ```bash + git switch -c 42-add-answer-universe + ``` + +3. Push the new local branch to your personal remote repository + + ```bash + git push -u origin 42-add-answer-universe + ``` + +4. Create a pull request to merge your remote branch into the org main. + +### Branch naming + +- If there is an associated issue, add the issue number. +- If there is no associated issue, **and the changes are small**, add a prefix such as "typo", "hotfix", "small-refactor", according to the type of update. +- If the changes are not small and there is no associated issue, then create the issue first, so we can properly discuss the changes. +- Use dash separated imperative wording related to the issue (e.g., `14-add-tests`, `15-fix-model`, `16-remove-obsolete-files`). + +### Commit message + +- Use imperative or present tense, for instance: *Add feature* or *Fix bug*. +- Have informative titles. +- When necessary, add a body with details. +- If there are breaking changes, add the information to the commit message. + +### Before creating a pull request + +!!! tip "Atomic git commits" + Try to create "atomic git commits" (recommended reading: [The Utopic Git History](https://blog.esciencecenter.nl/the-utopic-git-history-d44b81c09593)). + +- Make sure the tests pass. + +- Fetch any `main` updates from upstream and rebase your branch, if necessary: + + ```bash + git fetch upstream + git rebase upstream/main BRANCH_NAME + ``` + +- Then you can open a pull request and work with the reviewer to address any issues. + +## Building and viewing the documentation locally + +Following the latest suggestions, we recommend using `LiveServer` to build the documentation. +Here is how you do it: + +1. Run `julia --project=docs` to open Julia in the environment of the docs. +1. If this is the first time building the docs + 1. Press `]` to enter `pkg` mode + 1. Run `pkg> dev .` to use the development version of your package + 1. Press backspace to leave `pkg` mode +1. Run `julia> using LiveServer` +1. Run `julia> servedocs()` + +## Making a new release + +To create a new release, you can follow these simple steps: + +- Create a branch `release-x.y.z` +- Update `version` in `Project.toml` +- Update the `CHANGELOG.md`: + - Rename the section "Unreleased" to "[x.y.z] - yyyy-mm-dd" (i.e., version under brackets, dash, and date in ISO format) + - Add a new section on top of it named "Unreleased" + - Add a new link in the bottom for version "x.y.z" + - Change the "[unreleased]" link to use the latest version - end of line, `vx.y.z ... HEAD`. +- Create a commit "Release vx.y.z", push, create a PR, wait for it to pass, merge the PR. +- Go back to main screen and click on the latest commit (link: ) +- At the bottom, write `@JuliaRegistrator register` + +After that, you only need to wait and verify: + +- Wait for the bot to comment (should take < 1m) with a link to a RP to the registry +- Follow the link and wait for a comment on the auto-merge +- The comment should said all is well and auto-merge should occur shortly +- After the merge happens, TagBot will trigger and create a new GitHub tag. Check on +- After the release is create, a "docs" GitHub action will start for the tag. +- After it passes, a deploy action will run. +- After that runs, the [stable docs](https://TulipaEnergy.github.io/TulipaIO.jl/stable) should be updated. Check them and look for the version number. diff --git a/docs/src/reference.md b/docs/src/95-reference.md similarity index 52% rename from docs/src/reference.md rename to docs/src/95-reference.md index 4ed4f11..7bf7547 100644 --- a/docs/src/reference.md +++ b/docs/src/95-reference.md @@ -1,15 +1,15 @@ -# Reference +# [Reference](@id reference) ## Contents ```@contents -Pages = ["reference.md"] +Pages = ["95-reference.md"] ``` ## Index ```@index -Pages = ["reference.md"] +Pages = ["95-reference.md"] ``` ```@autodocs diff --git a/lychee.toml b/lychee.toml new file mode 100644 index 0000000..399e29b --- /dev/null +++ b/lychee.toml @@ -0,0 +1,11 @@ +exclude = [ + "@ref", + "^https://github.com/.*/releases/tag/v.*$", + "^https://doi.org/FIXME$", + "^https://TulipaEnergy.github.io/TulipaIO.jl/stable$", + "zenodo.org/badge/DOI/FIXME$" +] + +exclude_path = [ + "docs/build" +] diff --git a/src/fmtsql.jl b/src/fmtsql.jl index 7835945..a924951 100644 --- a/src/fmtsql.jl +++ b/src/fmtsql.jl @@ -8,7 +8,7 @@ sprintf(fmt::String, args...) = format(Format(fmt), args...) # quote literals appropriately for SQL fmt_quote(item) = "$(item)" -fmt_quote(item::Union{AbstractString,AbstractChar}) = "'$(item)'" +fmt_quote(item::Union{AbstractString, AbstractChar}) = "'$(item)'" fmt_quote(::Missing) = missing function fmt_opts(source::String; opts...) @@ -49,7 +49,7 @@ function fmt_join( on::Vector{Symbol}, cols::Vector{Symbol}, fill::Bool, - fill_values::Union{Missing,Dict} = missing, + fill_values::Union{Missing, Dict} = missing, ) exclude = join(cols, ", ") if fill diff --git a/src/influxdb.jl b/src/influxdb.jl index 25e172c..4996508 100644 --- a/src/influxdb.jl +++ b/src/influxdb.jl @@ -1,7 +1,7 @@ module InfluxDB -import JSON3 -import HTTP +using JSON3: JSON3 +using HTTP: HTTP import DataFrames as DF import Dates: DateTime diff --git a/src/parsers.jl b/src/parsers.jl index edb7287..f76e623 100644 --- a/src/parsers.jl +++ b/src/parsers.jl @@ -1,6 +1,6 @@ import Base: merge -import JSON3 +using JSON3: JSON3 import PrettyTables: pretty_table export read_esdl_json @@ -52,7 +52,7 @@ function resolve!(field, values, errs) # check equality when more than one non-null values iseq = reduce_unless( (r, i) -> r ? isequal(i...) : false, # proceed iff equal - [nonull[i:i+1] for i = 1:num if i < num]; # paired iteration + [nonull[i:(i + 1)] for i in 1:num if i < num]; # paired iteration init = true, sentinel = false, ) @@ -106,7 +106,7 @@ function json_get(json, reference::String; trunc::Int = 0) length(v) > 1 ? [Symbol(v[1]), 1 + parse(Int, v[2])] : [Symbol(v[1])] end # NOTE: index 2:end because there is a leading '/' - idx = collect(Iterators.flatten(map(to_idx, split(reference, "/@"))))[2:(end-trunc)] + idx = collect(Iterators.flatten(map(to_idx, split(reference, "/@"))))[2:(end - trunc)] reduce(getindex, idx; init = json) # since $ref is from JSON, assume valid end @@ -138,13 +138,13 @@ end # struct to hold parsed data struct Asset - initial_capacity::Union{Float64,Nothing} - lifetime::Union{Float64,Nothing} - initial_storage_level::Union{Float64,Nothing} - investment_cost::Union{Float64,Nothing} - investment_cost_unit::Union{String,Nothing} - variable_cost::Union{Float64,Nothing} - variable_cost_unit::Union{String,Nothing} + initial_capacity::Union{Float64, Nothing} + lifetime::Union{Float64, Nothing} + initial_storage_level::Union{Float64, Nothing} + investment_cost::Union{Float64, Nothing} + investment_cost_unit::Union{String, Nothing} + variable_cost::Union{Float64, Nothing} + variable_cost_unit::Union{String, Nothing} end # constructor to call different parsers to determine the fields diff --git a/src/pipeline.jl b/src/pipeline.jl index cc6515c..fd1e2ba 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -160,7 +160,7 @@ function create_tbl( cols::Vector{Symbol}, variant::String = "", fill::Bool = true, - fill_values::Union{Missing,Dict} = missing, + fill_values::Union{Missing, Dict} = missing, tmp::Bool = false, show::Bool = false, ) @@ -225,12 +225,12 @@ All other options behave as the two source version of `create_tbl`. function set_tbl_col( con::DB, source::String, - cols::Dict{Symbol,Vector{T}}; + cols::Dict{Symbol, Vector{T}}; on::Symbol, variant::String = "", tmp::Bool = false, show::Bool = false, -) where {T<:Union{Int64,Float64,String,Bool}} +) where {T <: Union{Int64, Float64, String, Bool}} # TODO: is it worth it to have the ability to set multiple # columns? If such a feature is required, we can use # cols::Dict{Symbol, Vector{Any}}, and get the cols and vals @@ -247,7 +247,7 @@ function set_tbl_col( msg = "Length of index column and values are different\n" _cols = [idx, vals] data = - [get.(_cols, i, "-") for i = 1:maximum(length, _cols)] |> + [get.(_cols, i, "-") for i in 1:maximum(length, _cols)] |> Iterators.flatten |> collect |> x -> reshape(x, 2, :) |> permutedims @@ -292,7 +292,7 @@ function. function set_tbl_col( con::DB, source::String, - cols::Dict{Symbol,T}; + cols::Dict{Symbol, T}; on::Symbol, where_::String = "", variant::String = "", diff --git a/test/data/esdl/norse-mythology.json b/test/data/esdl/norse-mythology.json index 0bfb1a9..b353a60 100644 --- a/test/data/esdl/norse-mythology.json +++ b/test/data/esdl/norse-mythology.json @@ -1,2010 +1,2010 @@ { - "description": "", - "eClass": "http://www.tno.nl/esdl#//EnergySystem", - "esdlVersion": "v2303", - "id": "d4643afe-3813-4981-8fcf-974ca7018b5b", - "instance": [ - { - "area": { - "area": [ - { - "asset": [ - { - "eClass": "http://www.tno.nl/esdl#//Export", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.23429914733688, - "lon": -20.901145935058597 - }, - "id": "06ca24ec-77f5-44fe-be5a-bf2a059e8654", - "name": "Export_06ca", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "29ce99fd-0c4f-47ae-8e29-ab6c4041a400", - "name": "In" - } - ], - "power": 120.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "ef1036b1-0496-4503-a174-026b9169f98e", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "78e6ccda-9b94-4e5a-a2bc-28e0ae50a51f", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "13b95d58-007b-4b0e-b358-782a24a9897b", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 26.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "0e94f850-fe14-42c2-996f-ad4f6dcc9b9a", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "567bbf5b-6606-42bb-a306-f24ffc052144", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 62.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//Electrolyzer", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.2198191095311, - "lon": -20.953330993652347 - }, - "id": "41ac619a-f1c5-4d89-a6f7-e75a9783c189", - "name": "Electrolyzer_41ac", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "a439cb30-d40f-498b-b6a7-e0cfcbda0752", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "f4e1f65a-98bd-482c-8fd1-56cd70d4b515", - "name": "Out" - } - ], - "power": 80.0, - "technicalLifetime": 2.0 - }, - { - "capacity": 1000.0, - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "235ed47c-6a88-4d90-b10a-b4b0f7ab92ee", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "41e539ad-dace-4098-ae50-6deb7e409afb", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "4467313f-fcf3-4049-9c2a-53fe870c499d", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 100.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "acbd2711-9014-4e6f-8462-34358e799cbf", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "1b85ef70-6b17-4fa2-8a4d-e26a80f47665", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 50.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//GasStorage", - "fillLevel": 500.0, - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.21683259218487, - "lon": -20.99349975585938 - }, - "id": "f7138a43-41d8-4fa7-9504-ed340bc5205e", - "maxChargeRate": 100.0, - "maxDischargeRate": 200.0, - "name": "GasStorage_f713", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "584e6bd3-36ac-4540-b7d1-c6280785b9b9", - "name": "In" - } - ], - "technicalLifetime": 3.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "acbf20d9-e15f-4b5b-ac0b-f1ebd44f1550", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "467c3336-f052-44cf-8ac8-130c0d755d9c", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "9e0d5847-d565-461a-b7f6-65bb18cbf680", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 16.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "ef041594-ad92-4c87-9346-05511bd25db8", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "93a93849-da7a-4d75-9607-7a6c6edfbea1", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 15.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//HeatPump", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.22728399302186, - "lon": -20.88912963867188 - }, - "id": "4b33f488-b157-411a-ab02-7a0d43c154a3", - "name": "HeatPump_4b33", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "2f90ec2a-9efc-4979-9d86-99202db07c29", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.8/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "bb1b80cd-bce7-467d-8e86-b8b0e8644ee6", - "name": "Out" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.12/@port.0", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "82d42ef9-7d32-4991-821c-62b03a751ccf", - "name": "Waste heat inport" - } - ], - "power": 10.0, - "technicalLifetime": 2.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "f4430dfa-b5e4-4491-971e-0a1276bb4428", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "5be5a662-55ce-4117-bf12-1072a6c2972d", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "bbf2fac1-240f-49b2-b9fe-c9aa248f6237", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 60.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "e5e20c91-0a64-4d08-b724-815dfa04d475", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "1ebb56e6-eb1b-41d9-9ba1-f0aced6b2731", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 55.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//FuelCell", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.20667602226591, - "lon": -20.916252136230472 - }, - "id": "91218656-3706-403a-909c-f67d14f8b40c", - "name": "FuelCell_9121", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "27e984b8-7414-46c7-9f73-5f089a3c7719", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "a02d8cc6-ea45-4bfe-91c0-1813995c5f34", - "name": "E Out" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.8/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "33e09eff-3a6f-4ba0-aa52-7d3595aef6f8", - "name": "H Out" - } - ], - "power": 90.0, - "technicalLifetime": 3.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "b9d6a549-1643-4364-81d3-f66f13d39f12", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "bbd99afa-e6b8-43c5-938a-fe6a5de8a094", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "9919ad01-e8a3-4bdf-aedf-d3b699c195d9", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 51.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "2f08aa06-9279-4ba0-942a-b4696a56a186", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "a8cc8399-5739-42f0-af76-28eeaa493e2e", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 55.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//PowerPlant", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.22862745817535, - "lon": -20.965690612792972 - }, - "id": "7227d20f-918c-4de1-b698-a40ba29e9bc7", - "name": "PowerPlant_7227", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.7/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "ec622226-8d89-4464-8147-c7eafea89ca5", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "c0ad56e3-3a83-46e9-8d2e-43cbd02e08c9", - "name": "Out" - } - ], - "power": 100.0, - "technicalLifetime": 12.0, - "type": "COMBINED_CYCLE_GAS_TURBINE" - }, - { - "eClass": "http://www.tno.nl/esdl#//ElectricityNetwork", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.23429914733688, - "lon": -20.932731628417972 - }, - "id": "be51458b-218f-46cb-af0b-315fc879b0f0", - "name": "ElectricityNetwork_be51", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.4/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@area.0/@asset.5/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@asset.0/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@asset.2/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "5e71413e-6c3c-491f-9aef-f7702dffc477", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.0/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.0/@asset.1/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.0/@asset.3/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "dc76a962-0359-4f88-9774-054c81aa78f2", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//GasNetwork", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.22056568851187, - "lon": -21.03469848632813 - }, - "id": "bbaf1227-a413-4017-8cf9-6462f1947084", - "name": "Gas network", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@asset.3/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@asset.4/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "7b132b24-fb51-45a5-b56a-9f80670eaac7", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.5/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.0/@asset.11/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "34ffa8ad-f971-4c52-bd72-461841ffd549", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//HeatNetwork", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.20368808661304, - "lon": -20.86750030517578 - }, - "id": "07de2a53-5a92-4eb3-835a-d89fde7cadbe", - "name": "HeatNetwork_07de", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.3/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@area.0/@asset.4/@port.2", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "7cd2a9f9-da85-4a0f-9c66-89376480ae39", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.13/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "7a4a907e-331c-49e1-9630-75a50f5ce061", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//GasNetwork", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.21011174971652, - "lon": -20.973587036132812 - }, - "id": "649b8515-cf84-438d-8e74-1da6c5073b69", - "name": "Hydrogen network", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.1/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@area.0/@asset.11/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "87d08281-78d2-40de-8da5-b0db15c03361", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.2/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.0/@asset.4/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.0/@asset.10/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "226ea9fb-b875-4091-b3e8-9d21786b30b7", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//GasDemand", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.21952047229907, - "lon": -20.97427368164063 - }, - "id": "45fa1a43-8943-4d8f-8eba-bafbae17f974", - "name": "Hydrogen demand", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "509306f7-dd17-4597-8166-b7f8fa8854d0", - "name": "In" - } - ], - "power": 50.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "500c86f2-be54-409a-8960-8316a8149dbf", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "a192a369-b8f5-484d-b456-e051ae6002d1", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "761e8aca-5cd1-4271-ab6e-a3c0b772611d", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 188.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "46394d97-7bb1-4403-b18f-d668c3c7bf89", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "5b76b520-c0cc-4b31-83e3-51e17a450b4a", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 12.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//GasConversion", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.20772172357896, - "lon": -21.01341247558594 - }, - "id": "05058aad-f87e-4207-9118-e005a62a4004", - "name": "Hydrogen generator", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.7/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "2582d2d0-24b7-4e82-a2df-d192cfe55fbe", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "832a041e-8e71-46bc-8945-69705d87ba0a", - "name": "Out" - } - ], - "power": 100.0, - "technicalLifetime": 5.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "f1909582-03bf-4d08-8089-6b4c0548a741", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "97abf1f5-2e52-4b9d-af64-6cc5266febfc", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "3638b024-9076-455c-9f4c-b1644ab99860", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 14.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "ef99b456-3431-49d2-9eb0-1bfd5f2d6c2a", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "986b29dc-081e-4ed5-9784-7d7d07ff2943", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 2.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//HeatProducer", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.22982159465025, - "lon": -20.857200622558597 - }, - "id": "f1b99314-4b7c-4f6b-88f2-520f4617fcf6", - "name": "Waste heat", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.3/@port.2", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "db89cb60-8609-4417-bdbe-a7704a734176", - "name": "Out" - } - ], - "power": 100.0, - "technicalLifetime": 2.0 - }, - { - "eClass": "http://www.tno.nl/esdl#//HeatingDemand", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.20174575554563, - "lon": -20.84587097167969 - }, - "id": "d3b98f6d-abda-4f10-98fc-f9d86f77fbe4", - "name": "HeatingDemand_d3b9", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.8/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "08332a70-84ef-43bb-8619-a1805dd8a52f", - "name": "In" - } - ], - "power": 10.0 - } - ], - "eClass": "http://www.tno.nl/esdl#//Area", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Polygon", - "exterior": { - "eClass": "http://www.tno.nl/esdl#//SubPolygon", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.24161092467241, - "lon": -20.96843719482422 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.22474615860128, - "lon": -21.076240539550785 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.1987572878947, - "lon": -21.06731414794922 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.19243510075158, - "lon": -20.834584960937505 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.23802988755861, - "lon": -20.829734802246097 - } - ] - } - }, - "id": "dd27f13b-6d1e-4532-9092-bf5240099570", - "name": "Valhalla" - }, - { - "area": [ - { - "asset": [ - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "2e9f6223-d0a8-495a-a217-9a3942f22db0", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "482d61f7-ea77-4b4a-a811-62b22bc2b171", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "57ec3f75-71fe-4299-b621-43ed19123132", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 12.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "c782cdd9-e36d-499b-b285-862e1b57a7b9", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "8b208543-8b4a-4988-be95-cf00ffe37ed2", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 3.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//WindTurbine", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.294526289623, - "lon": -20.895996093750004 - }, - "id": "6cb408e6-ab0c-4d1e-91e8-497a9c1bb21c", - "name": "WindTurbine_6cb4", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } + "description": "", + "eClass": "http://www.tno.nl/esdl#//EnergySystem", + "esdlVersion": "v2303", + "id": "d4643afe-3813-4981-8fcf-974ca7018b5b", + "instance": [ + { + "area": { + "area": [ + { + "asset": [ + { + "eClass": "http://www.tno.nl/esdl#//Export", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.23429914733688, + "lon": -20.901145935058597 + }, + "id": "06ca24ec-77f5-44fe-be5a-bf2a059e8654", + "name": "Export_06ca", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "29ce99fd-0c4f-47ae-8e29-ab6c4041a400", + "name": "In" + } + ], + "power": 120.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "ef1036b1-0496-4503-a174-026b9169f98e", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "78e6ccda-9b94-4e5a-a2bc-28e0ae50a51f", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "13b95d58-007b-4b0e-b358-782a24a9897b", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 26.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "0e94f850-fe14-42c2-996f-ad4f6dcc9b9a", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "567bbf5b-6606-42bb-a306-f24ffc052144", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 62.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//Electrolyzer", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.2198191095311, + "lon": -20.953330993652347 + }, + "id": "41ac619a-f1c5-4d89-a6f7-e75a9783c189", + "name": "Electrolyzer_41ac", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "a439cb30-d40f-498b-b6a7-e0cfcbda0752", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "f4e1f65a-98bd-482c-8fd1-56cd70d4b515", + "name": "Out" + } + ], + "power": 80.0, + "technicalLifetime": 2.0 + }, + { + "capacity": 1000.0, + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "235ed47c-6a88-4d90-b10a-b4b0f7ab92ee", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "41e539ad-dace-4098-ae50-6deb7e409afb", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "4467313f-fcf3-4049-9c2a-53fe870c499d", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 100.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "acbd2711-9014-4e6f-8462-34358e799cbf", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "1b85ef70-6b17-4fa2-8a4d-e26a80f47665", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 50.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//GasStorage", + "fillLevel": 500.0, + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.21683259218487, + "lon": -20.99349975585938 + }, + "id": "f7138a43-41d8-4fa7-9504-ed340bc5205e", + "maxChargeRate": 100.0, + "maxDischargeRate": 200.0, + "name": "GasStorage_f713", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "584e6bd3-36ac-4540-b7d1-c6280785b9b9", + "name": "In" + } + ], + "technicalLifetime": 3.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "acbf20d9-e15f-4b5b-ac0b-f1ebd44f1550", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "467c3336-f052-44cf-8ac8-130c0d755d9c", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "9e0d5847-d565-461a-b7f6-65bb18cbf680", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 16.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "ef041594-ad92-4c87-9346-05511bd25db8", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "93a93849-da7a-4d75-9607-7a6c6edfbea1", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 15.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//HeatPump", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.22728399302186, + "lon": -20.88912963867188 + }, + "id": "4b33f488-b157-411a-ab02-7a0d43c154a3", + "name": "HeatPump_4b33", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "2f90ec2a-9efc-4979-9d86-99202db07c29", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.8/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "bb1b80cd-bce7-467d-8e86-b8b0e8644ee6", + "name": "Out" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.12/@port.0", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "82d42ef9-7d32-4991-821c-62b03a751ccf", + "name": "Waste heat inport" + } + ], + "power": 10.0, + "technicalLifetime": 2.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "f4430dfa-b5e4-4491-971e-0a1276bb4428", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "5be5a662-55ce-4117-bf12-1072a6c2972d", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "bbf2fac1-240f-49b2-b9fe-c9aa248f6237", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 60.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "e5e20c91-0a64-4d08-b724-815dfa04d475", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "1ebb56e6-eb1b-41d9-9ba1-f0aced6b2731", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 55.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//FuelCell", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.20667602226591, + "lon": -20.916252136230472 + }, + "id": "91218656-3706-403a-909c-f67d14f8b40c", + "name": "FuelCell_9121", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "27e984b8-7414-46c7-9f73-5f089a3c7719", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "a02d8cc6-ea45-4bfe-91c0-1813995c5f34", + "name": "E Out" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.8/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "33e09eff-3a6f-4ba0-aa52-7d3595aef6f8", + "name": "H Out" + } + ], + "power": 90.0, + "technicalLifetime": 3.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "b9d6a549-1643-4364-81d3-f66f13d39f12", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "bbd99afa-e6b8-43c5-938a-fe6a5de8a094", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "9919ad01-e8a3-4bdf-aedf-d3b699c195d9", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 51.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "2f08aa06-9279-4ba0-942a-b4696a56a186", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "a8cc8399-5739-42f0-af76-28eeaa493e2e", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 55.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//PowerPlant", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.22862745817535, + "lon": -20.965690612792972 + }, + "id": "7227d20f-918c-4de1-b698-a40ba29e9bc7", + "name": "PowerPlant_7227", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.7/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "ec622226-8d89-4464-8147-c7eafea89ca5", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "c0ad56e3-3a83-46e9-8d2e-43cbd02e08c9", + "name": "Out" + } + ], + "power": 100.0, + "technicalLifetime": 12.0, + "type": "COMBINED_CYCLE_GAS_TURBINE" + }, + { + "eClass": "http://www.tno.nl/esdl#//ElectricityNetwork", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.23429914733688, + "lon": -20.932731628417972 + }, + "id": "be51458b-218f-46cb-af0b-315fc879b0f0", + "name": "ElectricityNetwork_be51", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.4/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@area.0/@asset.5/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@asset.0/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@asset.2/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "5e71413e-6c3c-491f-9aef-f7702dffc477", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.0/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.0/@asset.1/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.0/@asset.3/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "dc76a962-0359-4f88-9774-054c81aa78f2", + "name": "Out" + } + ] + }, + { + "eClass": "http://www.tno.nl/esdl#//GasNetwork", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.22056568851187, + "lon": -21.03469848632813 + }, + "id": "bbaf1227-a413-4017-8cf9-6462f1947084", + "name": "Gas network", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@asset.3/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@asset.4/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "7b132b24-fb51-45a5-b56a-9f80670eaac7", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.5/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.0/@asset.11/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "34ffa8ad-f971-4c52-bd72-461841ffd549", + "name": "Out" + } + ] + }, + { + "eClass": "http://www.tno.nl/esdl#//HeatNetwork", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.20368808661304, + "lon": -20.86750030517578 + }, + "id": "07de2a53-5a92-4eb3-835a-d89fde7cadbe", + "name": "HeatNetwork_07de", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.3/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@area.0/@asset.4/@port.2", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "7cd2a9f9-da85-4a0f-9c66-89376480ae39", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.13/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "7a4a907e-331c-49e1-9630-75a50f5ce061", + "name": "Out" + } + ] + }, + { + "eClass": "http://www.tno.nl/esdl#//GasNetwork", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.21011174971652, + "lon": -20.973587036132812 + }, + "id": "649b8515-cf84-438d-8e74-1da6c5073b69", + "name": "Hydrogen network", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.1/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@area.0/@asset.11/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "87d08281-78d2-40de-8da5-b0db15c03361", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.2/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.0/@asset.4/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.0/@asset.10/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "226ea9fb-b875-4091-b3e8-9d21786b30b7", + "name": "Out" + } + ] + }, + { + "eClass": "http://www.tno.nl/esdl#//GasDemand", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.21952047229907, + "lon": -20.97427368164063 + }, + "id": "45fa1a43-8943-4d8f-8eba-bafbae17f974", + "name": "Hydrogen demand", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "509306f7-dd17-4597-8166-b7f8fa8854d0", + "name": "In" + } + ], + "power": 50.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "500c86f2-be54-409a-8960-8316a8149dbf", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "a192a369-b8f5-484d-b456-e051ae6002d1", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "761e8aca-5cd1-4271-ab6e-a3c0b772611d", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 188.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "46394d97-7bb1-4403-b18f-d668c3c7bf89", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "5b76b520-c0cc-4b31-83e3-51e17a450b4a", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 12.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//GasConversion", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.20772172357896, + "lon": -21.01341247558594 + }, + "id": "05058aad-f87e-4207-9118-e005a62a4004", + "name": "Hydrogen generator", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.7/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "2582d2d0-24b7-4e82-a2df-d192cfe55fbe", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.9/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "832a041e-8e71-46bc-8945-69705d87ba0a", + "name": "Out" + } + ], + "power": 100.0, + "technicalLifetime": 5.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "f1909582-03bf-4d08-8089-6b4c0548a741", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "97abf1f5-2e52-4b9d-af64-6cc5266febfc", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "3638b024-9076-455c-9f4c-b1644ab99860", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 14.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "ef99b456-3431-49d2-9eb0-1bfd5f2d6c2a", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "986b29dc-081e-4ed5-9784-7d7d07ff2943", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 2.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//HeatProducer", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.22982159465025, + "lon": -20.857200622558597 + }, + "id": "f1b99314-4b7c-4f6b-88f2-520f4617fcf6", + "name": "Waste heat", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.3/@port.2", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "db89cb60-8609-4417-bdbe-a7704a734176", + "name": "Out" + } + ], + "power": 100.0, + "technicalLifetime": 2.0 + }, + { + "eClass": "http://www.tno.nl/esdl#//HeatingDemand", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.20174575554563, + "lon": -20.84587097167969 + }, + "id": "d3b98f6d-abda-4f10-98fc-f9d86f77fbe4", + "name": "HeatingDemand_d3b9", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.8/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "08332a70-84ef-43bb-8619-a1805dd8a52f", + "name": "In" + } + ], + "power": 10.0 + } ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "78aa04bd-6e64-40f3-86b2-bab87cf3936e", - "name": "Out" - } - ], - "power": 120.0, - "technicalLifetime": 5.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "60825dec-e151-4cc0-9d85-e8c15f9f302e", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "b7c8585b-b67e-4de9-a8e1-730e3e7d40e0", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "051818ef-c442-419a-ab2c-82477f0acb52", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 45.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "d1b9c17d-21bd-4539-a4bf-0971707f589a", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "f2b2a2c9-4d8f-488f-9a12-8bd9cbd0832c", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" + "eClass": "http://www.tno.nl/esdl#//Area", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Polygon", + "exterior": { + "eClass": "http://www.tno.nl/esdl#//SubPolygon", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.24161092467241, + "lon": -20.96843719482422 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.22474615860128, + "lon": -21.076240539550785 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.1987572878947, + "lon": -21.06731414794922 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.19243510075158, + "lon": -20.834584960937505 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.23802988755861, + "lon": -20.829734802246097 + } + ] + } }, - "value": 1.0 - } + "id": "dd27f13b-6d1e-4532-9092-bf5240099570", + "name": "Valhalla" }, - "eClass": "http://www.tno.nl/esdl#//Import", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.28231259027915, - "lon": -20.863037109375004 - }, - "id": "56bba6e3-29ae-4b22-9005-111d03d240db", - "name": "Import_56bb", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "6a09f018-deea-49c1-94dc-557a5afec0c4", - "name": "Out" - } - ], - "power": 40.0, - "technicalLifetime": 1.0 - }, - { - "eClass": "http://www.tno.nl/esdl#//ElectricityNetwork", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.27426646921975, - "lon": -20.913505554199222 - }, - "id": "913c7dac-c31f-46e3-b42d-2ed501a20be6", - "name": "ElectricityNetwork_913c", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.0/@port.0", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.1/@port.0", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@asset.1/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.6/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.7/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "7fd4562a-0345-4aa4-8723-01300f06eada", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@asset.2/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.4/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.5/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "f5f4ce72-dc9d-4928-8780-c69655cfe4d6", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//GasNetwork", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.27024252904668, - "lon": -20.853080749511722 - }, - "id": "0a426095-38cc-4b40-9cfc-bf44d6ff94f7", - "name": "GasNetwork_0a42", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@asset.5/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } + { + "area": [ + { + "asset": [ + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "2e9f6223-d0a8-495a-a217-9a3942f22db0", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "482d61f7-ea77-4b4a-a811-62b22bc2b171", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "57ec3f75-71fe-4299-b621-43ed19123132", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 12.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "c782cdd9-e36d-499b-b285-862e1b57a7b9", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "8b208543-8b4a-4988-be95-cf00ffe37ed2", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 3.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//WindTurbine", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.294526289623, + "lon": -20.895996093750004 + }, + "id": "6cb408e6-ab0c-4d1e-91e8-497a9c1bb21c", + "name": "WindTurbine_6cb4", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "78aa04bd-6e64-40f3-86b2-bab87cf3936e", + "name": "Out" + } + ], + "power": 120.0, + "technicalLifetime": 5.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "60825dec-e151-4cc0-9d85-e8c15f9f302e", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "b7c8585b-b67e-4de9-a8e1-730e3e7d40e0", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "051818ef-c442-419a-ab2c-82477f0acb52", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 45.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "d1b9c17d-21bd-4539-a4bf-0971707f589a", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "f2b2a2c9-4d8f-488f-9a12-8bd9cbd0832c", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 1.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//Import", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.28231259027915, + "lon": -20.863037109375004 + }, + "id": "56bba6e3-29ae-4b22-9005-111d03d240db", + "name": "Import_56bb", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "6a09f018-deea-49c1-94dc-557a5afec0c4", + "name": "Out" + } + ], + "power": 40.0, + "technicalLifetime": 1.0 + }, + { + "eClass": "http://www.tno.nl/esdl#//ElectricityNetwork", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.27426646921975, + "lon": -20.913505554199222 + }, + "id": "913c7dac-c31f-46e3-b42d-2ed501a20be6", + "name": "ElectricityNetwork_913c", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.0/@port.0", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.1/@port.0", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@asset.1/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.6/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.7/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "7fd4562a-0345-4aa4-8723-01300f06eada", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@asset.2/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.4/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.5/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "f5f4ce72-dc9d-4928-8780-c69655cfe4d6", + "name": "Out" + } + ] + }, + { + "eClass": "http://www.tno.nl/esdl#//GasNetwork", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.27024252904668, + "lon": -20.853080749511722 + }, + "id": "0a426095-38cc-4b40-9cfc-bf44d6ff94f7", + "name": "GasNetwork_0a42", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@asset.5/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "6e2be093-7baa-47bb-a98c-6093188845e2", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@asset.4/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.6/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "f4126c2b-33ca-472f-b756-fe9894b03236", + "name": "Out" + } + ] + }, + { + "capacity": 2000.0, + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "9f61cb4a-50f3-413d-8e92-37b7aeba8b9a", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "b73b8cc9-3e22-4199-a954-278f7f76a207", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "dffcb87a-cfcb-4d41-87fc-6ff260d573f6", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 10.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "ca417323-91c8-45ee-b13a-1aba3e072668", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "82bf3ae5-2daf-4ffe-a9ff-8cf27d250fe3", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 10.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//PumpedHydroPower", + "fillLevel": 2000.0, + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.29363278764076, + "lon": -20.92552185058594 + }, + "id": "eabff8a3-a0bc-42da-a9c4-4d094cf2391a", + "maxChargeRate": 100.0, + "maxDischargeRate": 20.0, + "name": "PumpedHydroPower_eabf", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "58194ed4-51ea-4086-abef-e804d11a98c1", + "name": "In" + } + ], + "technicalLifetime": 2.0 + }, + { + "eClass": "http://www.tno.nl/esdl#//ElectricityDemand", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.27098774740105, + "lon": -20.87539672851563 + }, + "id": "1e9ec4ee-e457-4c3c-9957-a4700498bb46", + "name": "ElectricityDemand_1e9e", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "4d8e6f38-6ea6-41ea-a08b-25394cb0ed96", + "name": "In" + } + ], + "power": 100.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "383a3e95-e07c-47ac-aba5-0cdaca638a75", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "63ed74c0-6008-49c7-b708-08bcb2f26b9c", + "value": 12.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "01ddee26-80c4-4964-832b-e8ce113cfe3f", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "b962f944-536f-4cdc-82ac-99fe266fd3e0", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 12.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//PowerPlant", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.2781408202984, + "lon": -20.852737426757816 + }, + "id": "2d4c5a85-6765-4c54-9de6-8722256976ff", + "name": "PowerPlant_2d4c", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.3/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "d720f1c2-04d0-4bd6-b9a5-1fbe8d151427", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "f0433555-3e3c-4650-83fb-1bdb8e291e86", + "name": "Out" + } + ], + "power": 20.0, + "technicalLifetime": 1.0, + "type": "COMBINED_CYCLE_GAS_TURBINE" + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "689c8129-5d71-47ad-9c8d-86d569f674f4", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "7a350f0d-7574-475d-a855-035c409ca4b5", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "9232171f-c4fb-4059-a1c2-743f072cd93f", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 20.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "120193ee-d5f2-4275-8397-568e6b6b894c", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "49407259-0037-4260-a0db-1ce4ae1233be", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 20.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//PowerPlant", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.2918456968408, + "lon": -20.87608337402344 + }, + "id": "4e1cd004-da90-4135-8399-fb8c56dbdcb3", + "name": "PowerPlant_4e1c", + "port": [ + { + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "776a35a4-ef22-40a0-b488-94815b1b201a", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "e2593ac4-78be-431d-b420-1207d7d67ca1", + "name": "Out" + } + ], + "power": 200.0, + "technicalLifetime": 12.0, + "type": "NUCLEAR_3RD_GENERATION" + } + ], + "eClass": "http://www.tno.nl/esdl#//Area", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Polygon", + "exterior": { + "eClass": "http://www.tno.nl/esdl#//SubPolygon", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26905013784292, + "lon": -20.931015014648438 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.29690882007257, + "lon": -20.946121215820316 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.30941372865048, + "lon": -20.85617065429688 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.29854669036891, + "lon": -20.78922271728516 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26636706936117, + "lon": -20.80020904541016 + } + ] + } + }, + "id": "befa140e-ae38-4ac9-97c5-09376be5bbad", + "name": "Midgard" + } ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "6e2be093-7baa-47bb-a98c-6093188845e2", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@asset.4/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.6/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } + "asset": [ + { + "eClass": "http://www.tno.nl/esdl#//ElectricityNetwork", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26770863618859, + "lon": -21.06353759765625 + }, + "id": "bf612234-bcde-40a1-8c6a-943acf8cefbb", + "name": "ElectricityNetwork_bf61", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.2/@port.0", + "eClass": "http://www.tno.nl/esdl#//OutPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@asset.4/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "d6255891-64af-4424-8d7a-b1a0caa79c35", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@asset.0/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@asset.1/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@asset.3/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@asset.5/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "8019638b-ea51-4a66-9d6a-2d7cbb3c2afd", + "name": "Out" + } + ] + }, + { + "eClass": "http://www.tno.nl/esdl#//GasNetwork", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26353465868937, + "lon": -21.111946105957035 + }, + "id": "691233d5-19e0-4338-9b73-fe0ff2b31329", + "name": "GasNetwork_6912", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.6/@port.0", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "994cf723-3af6-4d4b-8347-292169d5d1c4", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@asset.3/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@asset.5/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + }, + { + "$ref": "//@instance.0/@area/@area.1/@asset.4/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "ca13a453-57d1-4a63-b933-ca63fe33af34", + "name": "Out" + } + ] + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "bff0b4ab-9959-4b26-9aa4-a2bf0dafadf9", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "34338b70-ca31-4b62-b610-b3a3793cd344", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "b52aa3a1-1af8-4a66-9ece-d8e526008848", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 20.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "67dde7d3-2a4b-45e6-b85d-a6e84d55eb9c", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "e7fda4c0-4631-43ba-be45-78be78af4d1e", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 2.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//PVInstallation", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.28737746326682, + "lon": -21.061477661132816 + }, + "id": "e36d17db-241b-4385-b479-b5e62eae095d", + "name": "PVInstallation_e36d", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "9bd4851c-7b05-46eb-ae42-21eccc3b17f9", + "name": "Out" + } + ], + "power": 150.0, + "technicalLifetime": 2.0 + }, + { + "eClass": "http://www.tno.nl/esdl#//ElectricityDemand", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26770863618859, + "lon": -21.046714782714844 + }, + "id": "928f1a33-549d-4e45-86aa-bb2258458a67", + "name": "ElectricityDemand_928f", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "efd5ad97-7b65-4acc-8bfc-44fb181daa84", + "name": "In" + } + ], + "power": 150.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "19ae3d7c-5aeb-4429-a943-3d94b30e9851", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "15a70fe0-6bd4-4525-9128-e10696078e02", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "14e9ba15-f6ff-4480-840c-01c688b3207c", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 10.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "4e6be453-9010-456e-b61d-28c2a010b7cf", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "196564d6-6a6b-4b26-8088-52a62dc84070", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 2.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//PowerPlant", + "efficiency": 0.5, + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26547265526776, + "lon": -21.087913513183597 + }, + "id": "4e9941cd-3e92-4b52-bc66-5ca5e50ec16a", + "name": "PowerPlant_4e99", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.1/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "9b1b3014-be88-4e51-85d7-479a6ed2a42c", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "b7b65117-a9fd-4fe9-934d-1626a9939cfe", + "name": "Out" + } + ], + "power": 1000.0, + "technicalLifetime": 10.0, + "type": "COMBINED_CYCLE_GAS_TURBINE" + }, + { + "capacity": 1000.0, + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "8a6e1d2a-c33f-4bf5-ae63-1b27b74e8999", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "3703658f-f737-4a1c-a1a0-79857f35c75a", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "934cfee2-ce88-4956-bdf8-79e29cb30360", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 100.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "c67c7311-a277-4594-bb43-dba49d881fdc", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "84e0236f-bb17-4607-8ec6-69a2b6922ff2", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 10.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//Battery", + "fillLevel": 500.0, + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.27828982294201, + "lon": -21.084136962890625 + }, + "id": "0c0a3807-db52-4e97-ac63-7ada2603a0a4", + "maxChargeRate": 10.0, + "maxDischargeRate": 100.0, + "name": "Battery_0c0a", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "f937380b-3ab1-4e57-b30d-65d90f5b2d4d", + "name": "In" + } + ], + "technicalLifetime": 1.0 + }, + { + "costInformation": { + "eClass": "http://www.tno.nl/esdl#//CostInformation", + "id": "09c113d1-0211-4946-9c83-5ff840620fce", + "investmentCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "56fbcede-ae93-41e0-bc7c-746ce56b9de7", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh/yr", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "5046b156-a562-4c6a-9875-0aebd920ea85", + "perMultiplier": "MEGA", + "perTimeUnit": "YEAR", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 10.0 + }, + "variableOperationalAndMaintenanceCosts": { + "eClass": "http://www.tno.nl/esdl#//SingleValue", + "id": "edb4688f-bc77-4583-87da-6c917dd16997", + "profileQuantityAndUnit": { + "description": "Cost in EUR/MWh", + "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", + "id": "323d590e-efe8-41fa-a0ce-3f289fe7622d", + "perMultiplier": "MEGA", + "perUnit": "WATTHOUR", + "physicalQuantity": "COST", + "unit": "EURO" + }, + "value": 1.0 + } + }, + "eClass": "http://www.tno.nl/esdl#//Import", + "geometry": { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.28454720766985, + "lon": -21.154861450195316 + }, + "id": "d41de9ec-8142-4408-825e-c32a396526ad", + "name": "Import_d41d", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.1/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "eeace68b-c6b6-498b-9980-356b6243e122", + "name": "Out" + } + ], + "power": 100.0, + "technicalLifetime": 1.0 + } ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "f4126c2b-33ca-472f-b756-fe9894b03236", - "name": "Out" - } - ] - }, - { - "capacity": 2000.0, - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "9f61cb4a-50f3-413d-8e92-37b7aeba8b9a", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "b73b8cc9-3e22-4199-a954-278f7f76a207", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "dffcb87a-cfcb-4d41-87fc-6ff260d573f6", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" + "eClass": "http://www.tno.nl/esdl#//Area", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Polygon", + "exterior": { + "eClass": "http://www.tno.nl/esdl#//SubPolygon", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.25995646156042, + "lon": -21.105079650878906 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26085105429894, + "lon": -21.18541717529297 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.29541976266103, + "lon": -21.20086669921875 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.3039063130678, + "lon": -21.144905090332035 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.2983977970889, + "lon": -21.05667114257813 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26547265526776, + "lon": -21.038475036621097 + } + ] + } }, - "value": 10.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "ca417323-91c8-45ee-b13a-1aba3e072668", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "82bf3ae5-2daf-4ffe-a9ff-8cf27d250fe3", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" + "id": "3c9f292f-d7a8-4f0b-b5a8-0b17dc6ca49e", + "name": "Asgard" + } + ], + "asset": [ + { + "eClass": "http://www.tno.nl/esdl#//ElectricityCable", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Line", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26219288908568, + "lon": -21.054267883300785 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.24892076874816, + "lon": -21.035728454589847 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.25026318304684, + "lon": -20.946121215820316 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.24220771909953, + "lon": -20.93925476074219 + } + ] }, - "value": 10.0 - } + "id": "c27fa894-f32c-4e6e-b396-bd85deb6aaf0", + "length": 7012.8, + "name": "ElectricityCable_c27f", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "69e69ad6-c8c6-4e51-92a6-1baf4bfa2f83", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "dcf68219-bdf5-4e35-9053-8bbfbe8feee8", + "name": "Out" + } + ] }, - "eClass": "http://www.tno.nl/esdl#//PumpedHydroPower", - "fillLevel": 2000.0, - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.29363278764076, - "lon": -20.92552185058594 - }, - "id": "eabff8a3-a0bc-42da-a9c4-4d094cf2391a", - "maxChargeRate": 100.0, - "maxDischargeRate": 20.0, - "name": "PumpedHydroPower_eabf", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "58194ed4-51ea-4086-abef-e804d11a98c1", - "name": "In" - } - ], - "technicalLifetime": 2.0 - }, - { - "eClass": "http://www.tno.nl/esdl#//ElectricityDemand", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.27098774740105, - "lon": -20.87539672851563 - }, - "id": "1e9ec4ee-e457-4c3c-9957-a4700498bb46", - "name": "ElectricityDemand_1e9e", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "4d8e6f38-6ea6-41ea-a08b-25394cb0ed96", - "name": "In" - } - ], - "power": 100.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "383a3e95-e07c-47ac-aba5-0cdaca638a75", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "63ed74c0-6008-49c7-b708-08bcb2f26b9c", - "value": 12.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "01ddee26-80c4-4964-832b-e8ce113cfe3f", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "b962f944-536f-4cdc-82ac-99fe266fd3e0", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" + { + "eClass": "http://www.tno.nl/esdl#//ElectricityCable", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Line", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.27322328178597, + "lon": -21.03916168212891 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.2779918168504, + "lon": -20.940628051757816 + } + ] }, - "value": 12.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//PowerPlant", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.2781408202984, - "lon": -20.852737426757816 + "id": "5e949943-7966-446e-9514-afe5f30668b6", + "length": 4785.0, + "name": "ElectricityCable_5e94", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "ace3fa7f-b41f-4a47-9cc5-bd172900ad0d", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "dd64ab3d-c368-43f0-9311-c912106e87bb", + "name": "Out" + } + ] }, - "id": "2d4c5a85-6765-4c54-9de6-8722256976ff", - "name": "PowerPlant_2d4c", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.3/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "d720f1c2-04d0-4bd6-b9a5-1fbe8d151427", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "f0433555-3e3c-4650-83fb-1bdb8e291e86", - "name": "Out" - } - ], - "power": 20.0, - "technicalLifetime": 1.0, - "type": "COMBINED_CYCLE_GAS_TURBINE" - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "689c8129-5d71-47ad-9c8d-86d569f674f4", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "7a350f0d-7574-475d-a855-035c409ca4b5", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "9232171f-c4fb-4059-a1c2-743f072cd93f", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" + { + "eClass": "http://www.tno.nl/esdl#//ElectricityCable", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Line", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26681426554525, + "lon": -20.91384887695313 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.24235691569335, + "lon": -20.931358337402344 + } + ] }, - "value": 20.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "120193ee-d5f2-4275-8397-568e6b6b894c", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "49407259-0037-4260-a0db-1ce4ae1233be", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" + "id": "acfb0111-e7d6-42bd-a2b4-de555304c8e8", + "length": 2848.0, + "name": "ElectricityCable_acfb", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "c02a7041-0be1-41b7-ab0a-90e6dfff7169", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "34823af7-a4d9-4ae5-a715-bbab03bea4ac", + "name": "Out" + } + ] + }, + { + "eClass": "http://www.tno.nl/esdl#//Pipe", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Line", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.2586145181298, + "lon": -21.10954284667969 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.24817495485091, + "lon": -21.096153259277347 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.24832411924044, + "lon": -21.044998168945316 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.23206046160136, + "lon": -21.04019165039063 + } + ] }, - "value": 20.0 - } + "id": "2c4b3b2f-264f-4027-ae2e-f3ec5cdc0bee", + "length": 5623.5, + "name": "Pipe_2c4b", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.1/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "a4feae4e-b6bd-4a21-b415-002ddf7b5be0", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.7/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "1453f4b9-67eb-40b9-ad5b-2e17f4424e15", + "name": "Out" + } + ] }, - "eClass": "http://www.tno.nl/esdl#//PowerPlant", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.2918456968408, - "lon": -20.87608337402344 + { + "eClass": "http://www.tno.nl/esdl#//Pipe", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Line", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26562172629494, + "lon": -20.854454040527347 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.25339522950755, + "lon": -20.872650146484375 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.25443916611019, + "lon": -20.983886718750004 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.24310288658496, + "lon": -20.98800659179688 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.2393728308295, + "lon": -21.033325195312504 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.23250821324537, + "lon": -21.03469848632813 + } + ] + }, + "id": "d0f9a4d9-2fbe-4c4e-83b7-dcd356ac49cf", + "length": 11264.1, + "name": "Pipe_d0f9", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.3/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "d72b05fd-fd21-436c-bef6-767c2c9f9de4", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.0/@asset.7/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "6cfe90b8-2d51-4b3a-b2f4-cef6e0742250", + "name": "Out" + } + ] }, - "id": "4e1cd004-da90-4135-8399-fb8c56dbdcb3", - "name": "PowerPlant_4e1c", - "port": [ - { - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "776a35a4-ef22-40a0-b488-94815b1b201a", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "e2593ac4-78be-431d-b420-1207d7d67ca1", - "name": "Out" - } - ], - "power": 200.0, - "technicalLifetime": 12.0, - "type": "NUCLEAR_3RD_GENERATION" - } + { + "eClass": "http://www.tno.nl/esdl#//Pipe", + "geometry": { + "CRS": "WGS84", + "eClass": "http://www.tno.nl/esdl#//Line", + "point": [ + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.25876362617463, + "lon": -21.101989746093754 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.25533393752119, + "lon": -21.096153259277347 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.25906183984983, + "lon": -20.983886718750004 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.2577198529598, + "lon": -20.880546569824222 + }, + { + "eClass": "http://www.tno.nl/esdl#//Point", + "lat": 64.26606893454861, + "lon": -20.86200714111328 + } + ] + }, + "id": "5563475e-dad4-4ec6-a480-25f29aa09211", + "length": 12194.6, + "name": "Pipe_5563", + "port": [ + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@asset.1/@port.1", + "eClass": "http://www.tno.nl/esdl#//OutPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//InPort", + "id": "624c451c-6da6-4941-9830-1e0068aa75fb", + "name": "In" + }, + { + "connectedTo": [ + { + "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.3/@port.0", + "eClass": "http://www.tno.nl/esdl#//InPort" + } + ], + "eClass": "http://www.tno.nl/esdl#//OutPort", + "id": "bea61cda-e8f3-462c-8abb-0ef46298dc81", + "name": "Out" + } + ] + } ], "eClass": "http://www.tno.nl/esdl#//Area", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Polygon", - "exterior": { - "eClass": "http://www.tno.nl/esdl#//SubPolygon", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26905013784292, - "lon": -20.931015014648438 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.29690882007257, - "lon": -20.946121215820316 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.30941372865048, - "lon": -20.85617065429688 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.29854669036891, - "lon": -20.78922271728516 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26636706936117, - "lon": -20.80020904541016 - } - ] - } - }, - "id": "befa140e-ae38-4ac9-97c5-09376be5bbad", - "name": "Midgard" - } - ], - "asset": [ - { - "eClass": "http://www.tno.nl/esdl#//ElectricityNetwork", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26770863618859, - "lon": -21.06353759765625 - }, - "id": "bf612234-bcde-40a1-8c6a-943acf8cefbb", - "name": "ElectricityNetwork_bf61", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.2/@port.0", - "eClass": "http://www.tno.nl/esdl#//OutPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@asset.4/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "d6255891-64af-4424-8d7a-b1a0caa79c35", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@asset.0/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@asset.1/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@asset.3/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@asset.5/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "8019638b-ea51-4a66-9d6a-2d7cbb3c2afd", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//GasNetwork", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26353465868937, - "lon": -21.111946105957035 - }, - "id": "691233d5-19e0-4338-9b73-fe0ff2b31329", - "name": "GasNetwork_6912", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.6/@port.0", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "994cf723-3af6-4d4b-8347-292169d5d1c4", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@asset.3/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@asset.5/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - }, - { - "$ref": "//@instance.0/@area/@area.1/@asset.4/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "ca13a453-57d1-4a63-b933-ca63fe33af34", - "name": "Out" - } - ] - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "bff0b4ab-9959-4b26-9aa4-a2bf0dafadf9", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "34338b70-ca31-4b62-b610-b3a3793cd344", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "b52aa3a1-1af8-4a66-9ece-d8e526008848", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 20.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "67dde7d3-2a4b-45e6-b85d-a6e84d55eb9c", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "e7fda4c0-4631-43ba-be45-78be78af4d1e", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 2.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//PVInstallation", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.28737746326682, - "lon": -21.061477661132816 - }, - "id": "e36d17db-241b-4385-b479-b5e62eae095d", - "name": "PVInstallation_e36d", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "9bd4851c-7b05-46eb-ae42-21eccc3b17f9", - "name": "Out" - } - ], - "power": 150.0, - "technicalLifetime": 2.0 - }, - { - "eClass": "http://www.tno.nl/esdl#//ElectricityDemand", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26770863618859, - "lon": -21.046714782714844 - }, - "id": "928f1a33-549d-4e45-86aa-bb2258458a67", - "name": "ElectricityDemand_928f", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "efd5ad97-7b65-4acc-8bfc-44fb181daa84", - "name": "In" - } - ], - "power": 150.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "19ae3d7c-5aeb-4429-a943-3d94b30e9851", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "15a70fe0-6bd4-4525-9128-e10696078e02", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "14e9ba15-f6ff-4480-840c-01c688b3207c", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 10.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "4e6be453-9010-456e-b61d-28c2a010b7cf", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "196564d6-6a6b-4b26-8088-52a62dc84070", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 2.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//PowerPlant", - "efficiency": 0.5, - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26547265526776, - "lon": -21.087913513183597 - }, - "id": "4e9941cd-3e92-4b52-bc66-5ca5e50ec16a", - "name": "PowerPlant_4e99", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.1/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "9b1b3014-be88-4e51-85d7-479a6ed2a42c", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "b7b65117-a9fd-4fe9-934d-1626a9939cfe", - "name": "Out" - } - ], - "power": 1000.0, - "technicalLifetime": 10.0, - "type": "COMBINED_CYCLE_GAS_TURBINE" - }, - { - "capacity": 1000.0, - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "8a6e1d2a-c33f-4bf5-ae63-1b27b74e8999", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "3703658f-f737-4a1c-a1a0-79857f35c75a", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "934cfee2-ce88-4956-bdf8-79e29cb30360", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 100.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "c67c7311-a277-4594-bb43-dba49d881fdc", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "84e0236f-bb17-4607-8ec6-69a2b6922ff2", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 10.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//Battery", - "fillLevel": 500.0, - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.27828982294201, - "lon": -21.084136962890625 - }, - "id": "0c0a3807-db52-4e97-ac63-7ada2603a0a4", - "maxChargeRate": 10.0, - "maxDischargeRate": 100.0, - "name": "Battery_0c0a", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "f937380b-3ab1-4e57-b30d-65d90f5b2d4d", - "name": "In" - } - ], - "technicalLifetime": 1.0 - }, - { - "costInformation": { - "eClass": "http://www.tno.nl/esdl#//CostInformation", - "id": "09c113d1-0211-4946-9c83-5ff840620fce", - "investmentCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "56fbcede-ae93-41e0-bc7c-746ce56b9de7", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh/yr", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "5046b156-a562-4c6a-9875-0aebd920ea85", - "perMultiplier": "MEGA", - "perTimeUnit": "YEAR", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 10.0 - }, - "variableOperationalAndMaintenanceCosts": { - "eClass": "http://www.tno.nl/esdl#//SingleValue", - "id": "edb4688f-bc77-4583-87da-6c917dd16997", - "profileQuantityAndUnit": { - "description": "Cost in EUR/MWh", - "eClass": "http://www.tno.nl/esdl#//QuantityAndUnitType", - "id": "323d590e-efe8-41fa-a0ce-3f289fe7622d", - "perMultiplier": "MEGA", - "perUnit": "WATTHOUR", - "physicalQuantity": "COST", - "unit": "EURO" - }, - "value": 1.0 - } - }, - "eClass": "http://www.tno.nl/esdl#//Import", - "geometry": { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.28454720766985, - "lon": -21.154861450195316 - }, - "id": "d41de9ec-8142-4408-825e-c32a396526ad", - "name": "Import_d41d", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.1/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "eeace68b-c6b6-498b-9980-356b6243e122", - "name": "Out" - } - ], - "power": 100.0, - "technicalLifetime": 1.0 - } - ], - "eClass": "http://www.tno.nl/esdl#//Area", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Polygon", - "exterior": { - "eClass": "http://www.tno.nl/esdl#//SubPolygon", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.25995646156042, - "lon": -21.105079650878906 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26085105429894, - "lon": -21.18541717529297 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.29541976266103, - "lon": -21.20086669921875 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.3039063130678, - "lon": -21.144905090332035 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.2983977970889, - "lon": -21.05667114257813 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26547265526776, - "lon": -21.038475036621097 - } - ] - } - }, - "id": "3c9f292f-d7a8-4f0b-b5a8-0b17dc6ca49e", - "name": "Asgard" - } - ], - "asset": [ - { - "eClass": "http://www.tno.nl/esdl#//ElectricityCable", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Line", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26219288908568, - "lon": -21.054267883300785 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.24892076874816, - "lon": -21.035728454589847 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.25026318304684, - "lon": -20.946121215820316 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.24220771909953, - "lon": -20.93925476074219 - } - ] - }, - "id": "c27fa894-f32c-4e6e-b396-bd85deb6aaf0", - "length": 7012.8, - "name": "ElectricityCable_c27f", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "69e69ad6-c8c6-4e51-92a6-1baf4bfa2f83", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "dcf68219-bdf5-4e35-9053-8bbfbe8feee8", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//ElectricityCable", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Line", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.27322328178597, - "lon": -21.03916168212891 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.2779918168504, - "lon": -20.940628051757816 - } - ] - }, - "id": "5e949943-7966-446e-9514-afe5f30668b6", - "length": 4785.0, - "name": "ElectricityCable_5e94", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.0/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "ace3fa7f-b41f-4a47-9cc5-bd172900ad0d", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "dd64ab3d-c368-43f0-9311-c912106e87bb", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//ElectricityCable", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Line", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26681426554525, - "lon": -20.91384887695313 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.24235691569335, - "lon": -20.931358337402344 - } - ] - }, - "id": "acfb0111-e7d6-42bd-a2b4-de555304c8e8", - "length": 2848.0, - "name": "ElectricityCable_acfb", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.2/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "c02a7041-0be1-41b7-ab0a-90e6dfff7169", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.6/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "34823af7-a4d9-4ae5-a715-bbab03bea4ac", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//Pipe", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Line", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.2586145181298, - "lon": -21.10954284667969 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.24817495485091, - "lon": -21.096153259277347 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.24832411924044, - "lon": -21.044998168945316 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.23206046160136, - "lon": -21.04019165039063 - } - ] - }, - "id": "2c4b3b2f-264f-4027-ae2e-f3ec5cdc0bee", - "length": 5623.5, - "name": "Pipe_2c4b", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.1/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "a4feae4e-b6bd-4a21-b415-002ddf7b5be0", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.7/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "1453f4b9-67eb-40b9-ad5b-2e17f4424e15", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//Pipe", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Line", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26562172629494, - "lon": -20.854454040527347 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.25339522950755, - "lon": -20.872650146484375 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.25443916611019, - "lon": -20.983886718750004 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.24310288658496, - "lon": -20.98800659179688 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.2393728308295, - "lon": -21.033325195312504 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.23250821324537, - "lon": -21.03469848632813 - } - ] + "id": "83dfdeaf-f885-462a-ac24-d3d3118c8f15", + "name": "Iceland" }, - "id": "d0f9a4d9-2fbe-4c4e-83b7-dcd356ac49cf", - "length": 11264.1, - "name": "Pipe_d0f9", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.3/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "d72b05fd-fd21-436c-bef6-767c2c9f9de4", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.0/@asset.7/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "6cfe90b8-2d51-4b3a-b2f4-cef6e0742250", - "name": "Out" - } - ] - }, - { - "eClass": "http://www.tno.nl/esdl#//Pipe", - "geometry": { - "CRS": "WGS84", - "eClass": "http://www.tno.nl/esdl#//Line", - "point": [ - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.25876362617463, - "lon": -21.101989746093754 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.25533393752119, - "lon": -21.096153259277347 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.25906183984983, - "lon": -20.983886718750004 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.2577198529598, - "lon": -20.880546569824222 - }, - { - "eClass": "http://www.tno.nl/esdl#//Point", - "lat": 64.26606893454861, - "lon": -20.86200714111328 - } - ] - }, - "id": "5563475e-dad4-4ec6-a480-25f29aa09211", - "length": 12194.6, - "name": "Pipe_5563", - "port": [ - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@asset.1/@port.1", - "eClass": "http://www.tno.nl/esdl#//OutPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//InPort", - "id": "624c451c-6da6-4941-9830-1e0068aa75fb", - "name": "In" - }, - { - "connectedTo": [ - { - "$ref": "//@instance.0/@area/@area.1/@area.0/@asset.3/@port.0", - "eClass": "http://www.tno.nl/esdl#//InPort" - } - ], - "eClass": "http://www.tno.nl/esdl#//OutPort", - "id": "bea61cda-e8f3-462c-8abb-0ef46298dc81", - "name": "Out" - } - ] - } - ], - "eClass": "http://www.tno.nl/esdl#//Area", - "id": "83dfdeaf-f885-462a-ac24-d3d3118c8f15", - "name": "Iceland" - }, - "eClass": "http://www.tno.nl/esdl#//Instance", - "id": "ad7d4261-f4f7-4c63-8935-8e26ebf09b2f", - "name": "Main" - } - ], - "name": "Norse Mythology", - "version": "6" + "eClass": "http://www.tno.nl/esdl#//Instance", + "id": "ad7d4261-f4f7-4c63-8935-8e26ebf09b2f", + "name": "Main" + } + ], + "name": "Norse Mythology", + "version": "6" } diff --git a/test/runtests.jl b/test/runtests.jl index 1155dab..e15cb6c 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,4 +1,4 @@ -import TulipaIO +using TulipaIO: TulipaIO import Test: @test, @testset, @test_throws diff --git a/test/test-parsers.jl b/test/test-parsers.jl index 965b5a8..c20255c 100644 --- a/test/test-parsers.jl +++ b/test/test-parsers.jl @@ -1,4 +1,4 @@ -import JSON3 +using JSON3: JSON3 @testset "Parsing utilities" begin @testset "reduce_unless" begin @@ -21,9 +21,9 @@ import JSON3 @testset "merge" begin struct Data - foo::Union{Int,Nothing} - bar::Union{Bool,Nothing} - baz::Union{String,Nothing} + foo::Union{Int, Nothing} + bar::Union{Bool, Nothing} + baz::Union{String, Nothing} end d0 = Data(nothing, nothing, nothing) d1 = Data(42, true, "answer") diff --git a/test/test-pipeline.jl b/test/test-pipeline.jl index b7e9f54..42b91e3 100644 --- a/test/test-pipeline.jl +++ b/test/test-pipeline.jl @@ -1,4 +1,4 @@ -import CSV +using CSV: CSV import DataFrames as DF import DuckDB: DB, DBInterface @@ -22,7 +22,7 @@ is returned. It uniquifies columns with clashing names (see `?DF.leftjoin`), and stores a "source" under the `:source` column. """ -function join_cmp(df1, df2, cols; on::Union{Symbol,Vector{Symbol}}) +function join_cmp(df1, df2, cols; on::Union{Symbol, Vector{Symbol}}) DF.leftjoin(df1[!, cols], df2[!, cols]; on = on, makeunique = true, source = :source) end